@timber-js/app 0.2.0-alpha.20 → 0.2.0-alpha.200

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 (1324) hide show
  1. package/LICENSE +8 -0
  2. package/agent-skill.md +346 -0
  3. package/dist/_chunks/actions-d1hCqnU3.js +345 -0
  4. package/dist/_chunks/actions-d1hCqnU3.js.map +1 -0
  5. package/dist/_chunks/als-registry-C6kcfprT.js +41 -0
  6. package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -0
  7. package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
  8. package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
  9. package/dist/_chunks/base-path-DaQrzbez.js +80 -0
  10. package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
  11. package/dist/_chunks/build-manifest-DTmSGLRz.js +135 -0
  12. package/dist/_chunks/build-manifest-DTmSGLRz.js.map +1 -0
  13. package/dist/_chunks/build-output-helper-9dqCv1pZ.js +370 -0
  14. package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +1 -0
  15. package/dist/_chunks/cache-api-ByagcC-J.js +1149 -0
  16. package/dist/_chunks/cache-api-ByagcC-J.js.map +1 -0
  17. package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
  18. package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
  19. package/dist/_chunks/chains-Bpb0W4ax.js +412 -0
  20. package/dist/_chunks/chains-Bpb0W4ax.js.map +1 -0
  21. package/dist/_chunks/cli-check-D6VolrDV.js +293 -0
  22. package/dist/_chunks/cli-check-D6VolrDV.js.map +1 -0
  23. package/dist/_chunks/cli-schema-sync-D6rO-VcS.js +299 -0
  24. package/dist/_chunks/cli-schema-sync-D6rO-VcS.js.map +1 -0
  25. package/dist/_chunks/cloudflare-BFb__LYG.js +1290 -0
  26. package/dist/_chunks/cloudflare-BFb__LYG.js.map +1 -0
  27. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  28. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  29. package/dist/_chunks/convention-lint-fRkwVwEH.js +893 -0
  30. package/dist/_chunks/convention-lint-fRkwVwEH.js.map +1 -0
  31. package/dist/_chunks/dist-DtrJyBbw.js +386 -0
  32. package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
  33. package/dist/_chunks/error-boundary-BfPHZjm0.js +1050 -0
  34. package/dist/_chunks/error-boundary-BfPHZjm0.js.map +1 -0
  35. package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
  36. package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
  37. package/dist/_chunks/file-cache-Dw6BJPG7.js +458 -0
  38. package/dist/_chunks/file-cache-Dw6BJPG7.js.map +1 -0
  39. package/dist/_chunks/format-BKclgVbk.js +14 -0
  40. package/dist/_chunks/format-BKclgVbk.js.map +1 -0
  41. package/dist/_chunks/fs-identity-D7vb6GdI.js +208 -0
  42. package/dist/_chunks/fs-identity-D7vb6GdI.js.map +1 -0
  43. package/dist/_chunks/graph-cache-CP4GEmf9.js +304 -0
  44. package/dist/_chunks/graph-cache-CP4GEmf9.js.map +1 -0
  45. package/dist/_chunks/href-validation-BIrxavIy.js +213 -0
  46. package/dist/_chunks/href-validation-BIrxavIy.js.map +1 -0
  47. package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
  48. package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
  49. package/dist/_chunks/live-graph-D_2D32Ad.js +150 -0
  50. package/dist/_chunks/live-graph-D_2D32Ad.js.map +1 -0
  51. package/dist/_chunks/logger-uLBuGKDI.js +1484 -0
  52. package/dist/_chunks/logger-uLBuGKDI.js.map +1 -0
  53. package/dist/_chunks/navigation-context-D0TU0Jog.js +135 -0
  54. package/dist/_chunks/navigation-context-D0TU0Jog.js.map +1 -0
  55. package/dist/_chunks/navigation-root-mHSK9psY.js +126 -0
  56. package/dist/_chunks/navigation-root-mHSK9psY.js.map +1 -0
  57. package/dist/_chunks/param-value-C8TNYchQ.js +66 -0
  58. package/dist/_chunks/param-value-C8TNYchQ.js.map +1 -0
  59. package/dist/_chunks/plugin-context-8idfR3UZ.js +321 -0
  60. package/dist/_chunks/plugin-context-8idfR3UZ.js.map +1 -0
  61. package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
  62. package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
  63. package/dist/_chunks/poison-scan-Bm9Yyqk9.js +101 -0
  64. package/dist/_chunks/poison-scan-Bm9Yyqk9.js.map +1 -0
  65. package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
  66. package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
  67. package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
  68. package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
  69. package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  70. package/dist/_chunks/rsc-cache-key-ClUiXQnK.js +243 -0
  71. package/dist/_chunks/rsc-cache-key-ClUiXQnK.js.map +1 -0
  72. package/dist/_chunks/rsc-media-type-DDc7duTD.js +61 -0
  73. package/dist/_chunks/rsc-media-type-DDc7duTD.js.map +1 -0
  74. package/dist/_chunks/rsc-payload-path-B_LBodc2.js +48 -0
  75. package/dist/_chunks/rsc-payload-path-B_LBodc2.js.map +1 -0
  76. package/dist/_chunks/scan-BoP17W3w.js +140 -0
  77. package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
  78. package/dist/_chunks/scanner-AiazgH_f.js +1771 -0
  79. package/dist/_chunks/scanner-AiazgH_f.js.map +1 -0
  80. package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
  81. package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
  82. package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
  83. package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
  84. package/dist/_chunks/segment-context-D9_89u34.js +34 -0
  85. package/dist/_chunks/segment-context-D9_89u34.js.map +1 -0
  86. package/dist/_chunks/segment-keys-lqtdookO.js +256 -0
  87. package/dist/_chunks/segment-keys-lqtdookO.js.map +1 -0
  88. package/dist/_chunks/singleflight-2lUWfcAk.js +54 -0
  89. package/dist/_chunks/singleflight-2lUWfcAk.js.map +1 -0
  90. package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
  91. package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
  92. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-D6T6Y3ef.js} +3 -31
  93. package/dist/_chunks/ssr-data-D6T6Y3ef.js.map +1 -0
  94. package/dist/_chunks/state-FippDgxN.js +52 -0
  95. package/dist/_chunks/state-FippDgxN.js.map +1 -0
  96. package/dist/_chunks/status-page-marker-DwQBrLBz.js +496 -0
  97. package/dist/_chunks/status-page-marker-DwQBrLBz.js.map +1 -0
  98. package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
  99. package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
  100. package/dist/_chunks/walkers-B6XUtmqK.js +144 -0
  101. package/dist/_chunks/walkers-B6XUtmqK.js.map +1 -0
  102. package/dist/adapters/build-output-helper.d.ts +72 -0
  103. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  104. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  105. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  106. package/dist/adapters/cloudflare-dev.js +74 -0
  107. package/dist/adapters/cloudflare-dev.js.map +1 -0
  108. package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
  109. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  110. package/dist/adapters/cloudflare-kv-cache.js +123 -0
  111. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  112. package/dist/adapters/cloudflare.d.ts +200 -22
  113. package/dist/adapters/cloudflare.d.ts.map +1 -1
  114. package/dist/adapters/cloudflare.js +2 -188
  115. package/dist/adapters/compress-module.d.ts +17 -4
  116. package/dist/adapters/compress-module.d.ts.map +1 -1
  117. package/dist/adapters/fs-identity.d.ts +64 -0
  118. package/dist/adapters/fs-identity.d.ts.map +1 -0
  119. package/dist/adapters/nitro-presets.d.ts +37 -0
  120. package/dist/adapters/nitro-presets.d.ts.map +1 -0
  121. package/dist/adapters/nitro-preview.d.ts +32 -0
  122. package/dist/adapters/nitro-preview.d.ts.map +1 -0
  123. package/dist/adapters/nitro.d.ts +66 -37
  124. package/dist/adapters/nitro.d.ts.map +1 -1
  125. package/dist/adapters/nitro.js +457 -300
  126. package/dist/adapters/nitro.js.map +1 -1
  127. package/dist/adapters/shared.d.ts +62 -0
  128. package/dist/adapters/shared.d.ts.map +1 -0
  129. package/dist/adapters/types.d.ts +28 -6
  130. package/dist/adapters/types.d.ts.map +1 -1
  131. package/dist/analyze/chains.d.ts +124 -0
  132. package/dist/analyze/chains.d.ts.map +1 -0
  133. package/dist/analyze/classify.d.ts +150 -0
  134. package/dist/analyze/classify.d.ts.map +1 -0
  135. package/dist/analyze/crawl-entry.d.ts +17 -0
  136. package/dist/analyze/crawl-entry.d.ts.map +1 -0
  137. package/dist/analyze/crawl-entry.js +313 -0
  138. package/dist/analyze/crawl-entry.js.map +1 -0
  139. package/dist/analyze/crawl.d.ts +134 -0
  140. package/dist/analyze/crawl.d.ts.map +1 -0
  141. package/dist/analyze/graph-cache.d.ts +104 -0
  142. package/dist/analyze/graph-cache.d.ts.map +1 -0
  143. package/dist/analyze/graph-command.d.ts +43 -0
  144. package/dist/analyze/graph-command.d.ts.map +1 -0
  145. package/dist/analyze/graph-command.js +472 -0
  146. package/dist/analyze/graph-command.js.map +1 -0
  147. package/dist/analyze/live-graph.d.ts +81 -0
  148. package/dist/analyze/live-graph.d.ts.map +1 -0
  149. package/dist/analyze/poison-rules.d.ts +72 -0
  150. package/dist/analyze/poison-rules.d.ts.map +1 -0
  151. package/dist/analyze/poison-scan.d.ts +48 -0
  152. package/dist/analyze/poison-scan.d.ts.map +1 -0
  153. package/dist/analyze/scan.d.ts +73 -0
  154. package/dist/analyze/scan.d.ts.map +1 -0
  155. package/dist/cache/cache-api.d.ts +48 -0
  156. package/dist/cache/cache-api.d.ts.map +1 -0
  157. package/dist/cache/fast-hash.d.ts +5 -0
  158. package/dist/cache/fast-hash.d.ts.map +1 -1
  159. package/dist/cache/handler-store.d.ts +33 -0
  160. package/dist/cache/handler-store.d.ts.map +1 -0
  161. package/dist/cache/index.d.ts +32 -9
  162. package/dist/cache/index.d.ts.map +1 -1
  163. package/dist/cache/index.js +3 -326
  164. package/dist/cache/invalidation-epoch.d.ts +43 -0
  165. package/dist/cache/invalidation-epoch.d.ts.map +1 -0
  166. package/dist/cache/json-lossy-check.d.ts +11 -0
  167. package/dist/cache/json-lossy-check.d.ts.map +1 -0
  168. package/dist/cache/redis-handler.d.ts +141 -9
  169. package/dist/cache/redis-handler.d.ts.map +1 -1
  170. package/dist/cache/singleflight.d.ts +21 -2
  171. package/dist/cache/singleflight.d.ts.map +1 -1
  172. package/dist/cache/sizeof.d.ts +22 -0
  173. package/dist/cache/sizeof.d.ts.map +1 -0
  174. package/dist/cache/stable-stringify.d.ts +9 -0
  175. package/dist/cache/stable-stringify.d.ts.map +1 -1
  176. package/dist/cache/store.d.ts +53 -0
  177. package/dist/cache/store.d.ts.map +1 -0
  178. package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
  179. package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
  180. package/dist/cache/stores/cloudflare-kv.js +29 -0
  181. package/dist/cache/stores/cloudflare-kv.js.map +1 -0
  182. package/dist/cache/stores/memory.d.ts +42 -0
  183. package/dist/cache/stores/memory.d.ts.map +1 -0
  184. package/dist/cache/stores/memory.js +90 -0
  185. package/dist/cache/stores/memory.js.map +1 -0
  186. package/dist/cache/stores/redis.d.ts +69 -0
  187. package/dist/cache/stores/redis.d.ts.map +1 -0
  188. package/dist/cache/stores/redis.js +35 -0
  189. package/dist/cache/stores/redis.js.map +1 -0
  190. package/dist/cache/stores/vercel.d.ts +36 -0
  191. package/dist/cache/stores/vercel.d.ts.map +1 -0
  192. package/dist/cache/stores/vercel.js +33 -0
  193. package/dist/cache/stores/vercel.js.map +1 -0
  194. package/dist/cache/tag-aware-handler.d.ts +52 -0
  195. package/dist/cache/tag-aware-handler.d.ts.map +1 -0
  196. package/dist/cache/timber-cache.d.ts +21 -11
  197. package/dist/cache/timber-cache.d.ts.map +1 -1
  198. package/dist/cdn/cloudflare-purge.d.ts +23 -0
  199. package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
  200. package/dist/cdn/cloudflare-purge.js +30 -0
  201. package/dist/cdn/cloudflare-purge.js.map +1 -0
  202. package/dist/cdn/fastly-purge.d.ts +25 -0
  203. package/dist/cdn/fastly-purge.d.ts.map +1 -0
  204. package/dist/cdn/fastly-purge.js +33 -0
  205. package/dist/cdn/fastly-purge.js.map +1 -0
  206. package/dist/cdn/headers.d.ts +97 -0
  207. package/dist/cdn/headers.d.ts.map +1 -0
  208. package/dist/cdn/index.d.ts +5 -0
  209. package/dist/cdn/index.d.ts.map +1 -0
  210. package/dist/cdn/index.js +94 -0
  211. package/dist/cdn/index.js.map +1 -0
  212. package/dist/cdn/purge-store.d.ts +23 -0
  213. package/dist/cdn/purge-store.d.ts.map +1 -0
  214. package/dist/cdn/workers-cache-purge.d.ts +20 -0
  215. package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
  216. package/dist/cdn/workers-cache-purge.js +35 -0
  217. package/dist/cdn/workers-cache-purge.js.map +1 -0
  218. package/dist/cli-check.d.ts +163 -0
  219. package/dist/cli-check.d.ts.map +1 -0
  220. package/dist/cli-schema-sync.d.ts +59 -0
  221. package/dist/cli-schema-sync.d.ts.map +1 -0
  222. package/dist/cli.d.ts +75 -8
  223. package/dist/cli.d.ts.map +1 -1
  224. package/dist/cli.js +175 -47
  225. package/dist/cli.js.map +1 -1
  226. package/dist/client/browser-dev.d.ts +37 -1
  227. package/dist/client/browser-dev.d.ts.map +1 -1
  228. package/dist/client/browser-entry/action-dispatch.d.ts +19 -0
  229. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  230. package/dist/client/browser-entry/action-queue.d.ts +44 -0
  231. package/dist/client/browser-entry/action-queue.d.ts.map +1 -0
  232. package/dist/client/browser-entry/hmr.d.ts +21 -0
  233. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  234. package/dist/client/browser-entry/hydrate.d.ts +63 -0
  235. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  236. package/dist/client/browser-entry/index.d.ts +30 -0
  237. package/dist/client/browser-entry/index.d.ts.map +1 -0
  238. package/dist/client/browser-entry/post-hydration.d.ts +29 -0
  239. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  240. package/dist/client/browser-entry/router-init.d.ts +46 -0
  241. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  242. package/dist/client/browser-entry/rsc-stream.d.ts +32 -0
  243. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  244. package/dist/client/browser-entry/scroll.d.ts +28 -0
  245. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  246. package/dist/client/deny-last-resort.d.ts +29 -0
  247. package/dist/client/deny-last-resort.d.ts.map +1 -0
  248. package/dist/client/error-boundary.d.ts +66 -6
  249. package/dist/client/error-boundary.d.ts.map +1 -1
  250. package/dist/client/error-boundary.js +2 -126
  251. package/dist/client/error-reconstituter.d.ts +61 -0
  252. package/dist/client/error-reconstituter.d.ts.map +1 -0
  253. package/dist/client/form.d.ts +16 -27
  254. package/dist/client/form.d.ts.map +1 -1
  255. package/dist/client/global-context.d.ts +15 -0
  256. package/dist/client/global-context.d.ts.map +1 -0
  257. package/dist/client/history.d.ts +50 -9
  258. package/dist/client/history.d.ts.map +1 -1
  259. package/dist/client/index.d.ts +20 -33
  260. package/dist/client/index.d.ts.map +1 -1
  261. package/dist/client/index.js +323 -1148
  262. package/dist/client/index.js.map +1 -1
  263. package/dist/client/internal.d.ts +20 -0
  264. package/dist/client/internal.d.ts.map +1 -0
  265. package/dist/client/internal.js +818 -0
  266. package/dist/client/internal.js.map +1 -0
  267. package/dist/client/link.d.ts +63 -60
  268. package/dist/client/link.d.ts.map +1 -1
  269. package/dist/client/location-search.d.ts +12 -0
  270. package/dist/client/location-search.d.ts.map +1 -0
  271. package/dist/client/navigation-api.d.ts +121 -0
  272. package/dist/client/navigation-api.d.ts.map +1 -0
  273. package/dist/client/navigation-commit.d.ts +98 -0
  274. package/dist/client/navigation-commit.d.ts.map +1 -0
  275. package/dist/client/navigation-context.d.ts +51 -31
  276. package/dist/client/navigation-context.d.ts.map +1 -1
  277. package/dist/client/navigation-root.d.ts +98 -0
  278. package/dist/client/navigation-root.d.ts.map +1 -0
  279. package/dist/client/navigation-transition.d.ts +187 -0
  280. package/dist/client/navigation-transition.d.ts.map +1 -0
  281. package/dist/client/nuqs-adapter.d.ts +1 -1
  282. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  283. package/dist/client/params-context.d.ts +81 -0
  284. package/dist/client/params-context.d.ts.map +1 -0
  285. package/dist/client/react-root.d.ts +44 -0
  286. package/dist/client/react-root.d.ts.map +1 -0
  287. package/dist/client/router-effects.d.ts +130 -0
  288. package/dist/client/router-effects.d.ts.map +1 -0
  289. package/dist/client/router-lifecycle.d.ts +98 -0
  290. package/dist/client/router-lifecycle.d.ts.map +1 -0
  291. package/dist/client/router-pipeline.d.ts +87 -0
  292. package/dist/client/router-pipeline.d.ts.map +1 -0
  293. package/dist/client/router-ref.d.ts +2 -2
  294. package/dist/client/router-ref.d.ts.map +1 -1
  295. package/dist/client/router-skew.d.ts +21 -0
  296. package/dist/client/router-skew.d.ts.map +1 -0
  297. package/dist/client/router-types.d.ts +272 -0
  298. package/dist/client/router-types.d.ts.map +1 -0
  299. package/dist/client/router.d.ts +1 -97
  300. package/dist/client/router.d.ts.map +1 -1
  301. package/dist/client/rsc-fetch.d.ts +104 -26
  302. package/dist/client/rsc-fetch.d.ts.map +1 -1
  303. package/dist/client/segment-cache.d.ts +161 -25
  304. package/dist/client/segment-cache.d.ts.map +1 -1
  305. package/dist/client/segment-context.d.ts.map +1 -1
  306. package/dist/client/segment-outlet.d.ts +68 -0
  307. package/dist/client/segment-outlet.d.ts.map +1 -0
  308. package/dist/client/segment-update-context.d.ts +15 -0
  309. package/dist/client/segment-update-context.d.ts.map +1 -0
  310. package/dist/client/shallow-url.d.ts +10 -0
  311. package/dist/client/shallow-url.d.ts.map +1 -0
  312. package/dist/client/slot-content-cache-context.d.ts +35 -0
  313. package/dist/client/slot-content-cache-context.d.ts.map +1 -0
  314. package/dist/client/slot-context.d.ts +31 -0
  315. package/dist/client/slot-context.d.ts.map +1 -0
  316. package/dist/client/slot-outlet.d.ts +16 -0
  317. package/dist/client/slot-outlet.d.ts.map +1 -0
  318. package/dist/client/slot-provider.d.ts +25 -0
  319. package/dist/client/slot-provider.d.ts.map +1 -0
  320. package/dist/client/ssr-data.d.ts +29 -7
  321. package/dist/client/ssr-data.d.ts.map +1 -1
  322. package/dist/client/stale-client.d.ts +69 -0
  323. package/dist/client/stale-client.d.ts.map +1 -0
  324. package/dist/client/state.d.ts +19 -8
  325. package/dist/client/state.d.ts.map +1 -1
  326. package/dist/client/status-page-marker.d.ts +25 -0
  327. package/dist/client/status-page-marker.d.ts.map +1 -0
  328. package/dist/client/top-loader.d.ts +7 -6
  329. package/dist/client/top-loader.d.ts.map +1 -1
  330. package/dist/client/unload-guard.d.ts +5 -0
  331. package/dist/client/unload-guard.d.ts.map +1 -1
  332. package/dist/client/use-cookie.d.ts +12 -0
  333. package/dist/client/use-cookie.d.ts.map +1 -1
  334. package/dist/client/use-link-status.d.ts +5 -5
  335. package/dist/client/use-link-status.d.ts.map +1 -1
  336. package/dist/client/use-pathname.d.ts +13 -11
  337. package/dist/client/use-pathname.d.ts.map +1 -1
  338. package/dist/client/use-pending-navigation.d.ts +23 -0
  339. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  340. package/dist/client/use-query-states.d.ts +10 -4
  341. package/dist/client/use-query-states.d.ts.map +1 -1
  342. package/dist/client/use-router.d.ts +2 -2
  343. package/dist/client/use-router.d.ts.map +1 -1
  344. package/dist/client/use-search-params.d.ts +15 -8
  345. package/dist/client/use-search-params.d.ts.map +1 -1
  346. package/dist/client/use-segment-params.d.ts +55 -0
  347. package/dist/client/use-segment-params.d.ts.map +1 -0
  348. package/dist/codec.d.ts +69 -0
  349. package/dist/codec.d.ts.map +1 -0
  350. package/dist/codec.js +76 -0
  351. package/dist/codec.js.map +1 -0
  352. package/dist/config-types.d.ts +322 -0
  353. package/dist/config-types.d.ts.map +1 -0
  354. package/dist/config-validation.d.ts +51 -0
  355. package/dist/config-validation.d.ts.map +1 -0
  356. package/dist/cookies/define-cookie.d.ts +58 -25
  357. package/dist/cookies/define-cookie.d.ts.map +1 -1
  358. package/dist/cookies/index.d.ts +3 -2
  359. package/dist/cookies/index.d.ts.map +1 -1
  360. package/dist/cookies/index.js +256 -36
  361. package/dist/cookies/index.js.map +1 -1
  362. package/dist/cookies/json-cookie.d.ts +64 -0
  363. package/dist/cookies/json-cookie.d.ts.map +1 -0
  364. package/dist/cookies/validation.d.ts +34 -0
  365. package/dist/cookies/validation.d.ts.map +1 -0
  366. package/dist/dev-tools/404-page.d.ts +50 -0
  367. package/dist/dev-tools/404-page.d.ts.map +1 -0
  368. package/dist/dev-tools/browser-logs.d.ts +40 -0
  369. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  370. package/dist/dev-tools/dev-page-shell.d.ts +78 -0
  371. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  372. package/dist/dev-tools/error-page.d.ts +32 -0
  373. package/dist/dev-tools/error-page.d.ts.map +1 -0
  374. package/dist/dev-tools/holding-server.d.ts +46 -0
  375. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  376. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  377. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  378. package/dist/dev-tools/index.d.ts +31 -0
  379. package/dist/dev-tools/index.d.ts.map +1 -0
  380. package/dist/dev-tools/instrumentation.d.ts +59 -0
  381. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  382. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  383. package/dist/dev-tools/logger.d.ts.map +1 -0
  384. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
  385. package/dist/dev-tools/logs.d.ts.map +1 -0
  386. package/dist/dev-tools/overlay.d.ts +91 -0
  387. package/dist/dev-tools/overlay.d.ts.map +1 -0
  388. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  389. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  390. package/dist/dev-tools/terminal.d.ts +28 -0
  391. package/dist/dev-tools/terminal.d.ts.map +1 -0
  392. package/dist/fonts/ast-walk.d.ts +68 -0
  393. package/dist/fonts/ast-walk.d.ts.map +1 -0
  394. package/dist/fonts/ast.d.ts +112 -8
  395. package/dist/fonts/ast.d.ts.map +1 -1
  396. package/dist/fonts/bundle.d.ts +50 -0
  397. package/dist/fonts/bundle.d.ts.map +1 -0
  398. package/dist/fonts/css.d.ts +1 -1
  399. package/dist/fonts/dev-middleware.d.ts +22 -0
  400. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  401. package/dist/fonts/fallbacks.d.ts +0 -7
  402. package/dist/fonts/fallbacks.d.ts.map +1 -1
  403. package/dist/fonts/google.d.ts +5 -3
  404. package/dist/fonts/google.d.ts.map +1 -1
  405. package/dist/fonts/local.d.ts +5 -5
  406. package/dist/fonts/local.d.ts.map +1 -1
  407. package/dist/fonts/paths.d.ts +43 -0
  408. package/dist/fonts/paths.d.ts.map +1 -0
  409. package/dist/fonts/pipeline.d.ts +177 -0
  410. package/dist/fonts/pipeline.d.ts.map +1 -0
  411. package/dist/fonts/transform.d.ts +82 -0
  412. package/dist/fonts/transform.d.ts.map +1 -0
  413. package/dist/fonts/types.d.ts +47 -1
  414. package/dist/fonts/types.d.ts.map +1 -1
  415. package/dist/fonts/virtual-modules.d.ts +77 -0
  416. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  417. package/dist/index.d.ts +35 -181
  418. package/dist/index.d.ts.map +1 -1
  419. package/dist/index.js +10461 -14176
  420. package/dist/index.js.map +1 -1
  421. package/dist/params/codec-registry.d.ts +26 -0
  422. package/dist/params/codec-registry.d.ts.map +1 -0
  423. package/dist/params/define-schema.d.ts +81 -0
  424. package/dist/params/define-schema.d.ts.map +1 -0
  425. package/dist/params/index.d.ts +5 -0
  426. package/dist/params/index.d.ts.map +1 -0
  427. package/dist/params/index.js +34 -0
  428. package/dist/params/index.js.map +1 -0
  429. package/dist/params/resolve-schema.d.ts +34 -0
  430. package/dist/params/resolve-schema.d.ts.map +1 -0
  431. package/dist/plugin-context.d.ts +276 -0
  432. package/dist/plugin-context.d.ts.map +1 -0
  433. package/dist/plugins/adapter-build.d.ts +21 -1
  434. package/dist/plugins/adapter-build.d.ts.map +1 -1
  435. package/dist/plugins/build-manifest.d.ts +7 -3
  436. package/dist/plugins/build-manifest.d.ts.map +1 -1
  437. package/dist/plugins/build-report.d.ts +47 -10
  438. package/dist/plugins/build-report.d.ts.map +1 -1
  439. package/dist/plugins/cache.d.ts +64 -0
  440. package/dist/plugins/cache.d.ts.map +1 -0
  441. package/dist/plugins/callsite-ast.d.ts +117 -0
  442. package/dist/plugins/callsite-ast.d.ts.map +1 -0
  443. package/dist/plugins/callsite-jsx.d.ts +35 -0
  444. package/dist/plugins/callsite-jsx.d.ts.map +1 -0
  445. package/dist/plugins/chunks.d.ts +11 -4
  446. package/dist/plugins/chunks.d.ts.map +1 -1
  447. package/dist/plugins/client-chunks.d.ts +40 -0
  448. package/dist/plugins/client-chunks.d.ts.map +1 -0
  449. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  450. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  451. package/dist/plugins/content.d.ts +1 -1
  452. package/dist/plugins/content.d.ts.map +1 -1
  453. package/dist/plugins/dev-discovery.d.ts +123 -0
  454. package/dist/plugins/dev-discovery.d.ts.map +1 -0
  455. package/dist/plugins/dev-server.d.ts +17 -1
  456. package/dist/plugins/dev-server.d.ts.map +1 -1
  457. package/dist/plugins/entries.d.ts +28 -4
  458. package/dist/plugins/entries.d.ts.map +1 -1
  459. package/dist/plugins/fonts.d.ts +16 -73
  460. package/dist/plugins/fonts.d.ts.map +1 -1
  461. package/dist/plugins/graph-endpoint.d.ts +112 -0
  462. package/dist/plugins/graph-endpoint.d.ts.map +1 -0
  463. package/dist/plugins/mdx.d.ts +18 -5
  464. package/dist/plugins/mdx.d.ts.map +1 -1
  465. package/dist/plugins/prebuilt-capture.d.ts +60 -0
  466. package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
  467. package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
  468. package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
  469. package/dist/plugins/prebuilt.d.ts +82 -0
  470. package/dist/plugins/prebuilt.d.ts.map +1 -0
  471. package/dist/plugins/prerender-sugar.d.ts +39 -0
  472. package/dist/plugins/prerender-sugar.d.ts.map +1 -0
  473. package/dist/plugins/request-dep/analysis.d.ts +106 -0
  474. package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
  475. package/dist/plugins/request-dep/index.d.ts +75 -0
  476. package/dist/plugins/request-dep/index.d.ts.map +1 -0
  477. package/dist/plugins/request-dep/origin.d.ts +61 -0
  478. package/dist/plugins/request-dep/origin.d.ts.map +1 -0
  479. package/dist/plugins/routing.d.ts +1 -1
  480. package/dist/plugins/routing.d.ts.map +1 -1
  481. package/dist/plugins/server-bundle.d.ts.map +1 -1
  482. package/dist/plugins/shims.d.ts +29 -5
  483. package/dist/plugins/shims.d.ts.map +1 -1
  484. package/dist/plugins/static-build.d.ts +218 -21
  485. package/dist/plugins/static-build.d.ts.map +1 -1
  486. package/dist/routing/codegen-shared.d.ts +26 -0
  487. package/dist/routing/codegen-shared.d.ts.map +1 -0
  488. package/dist/routing/codegen-types.d.ts +61 -0
  489. package/dist/routing/codegen-types.d.ts.map +1 -0
  490. package/dist/routing/codegen-write.d.ts +51 -0
  491. package/dist/routing/codegen-write.d.ts.map +1 -0
  492. package/dist/routing/codegen.d.ts +8 -3
  493. package/dist/routing/codegen.d.ts.map +1 -1
  494. package/dist/routing/collision-probe.d.ts +104 -0
  495. package/dist/routing/collision-probe.d.ts.map +1 -0
  496. package/dist/routing/collision-spaces.d.ts +26 -0
  497. package/dist/routing/collision-spaces.d.ts.map +1 -0
  498. package/dist/routing/convention-lint.d.ts +55 -0
  499. package/dist/routing/convention-lint.d.ts.map +1 -0
  500. package/dist/routing/export-detect.d.ts +72 -0
  501. package/dist/routing/export-detect.d.ts.map +1 -0
  502. package/dist/routing/file-cache.d.ts +8 -0
  503. package/dist/routing/file-cache.d.ts.map +1 -0
  504. package/dist/routing/index.d.ts +13 -7
  505. package/dist/routing/index.d.ts.map +1 -1
  506. package/dist/routing/index.js +5 -2
  507. package/dist/routing/interception-overlap.d.ts +35 -0
  508. package/dist/routing/interception-overlap.d.ts.map +1 -0
  509. package/dist/routing/interception.d.ts +234 -10
  510. package/dist/routing/interception.d.ts.map +1 -1
  511. package/dist/routing/link-codegen.d.ts +105 -0
  512. package/dist/routing/link-codegen.d.ts.map +1 -0
  513. package/dist/routing/manifest-codegen.d.ts +26 -0
  514. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  515. package/dist/routing/scanner.d.ts +14 -10
  516. package/dist/routing/scanner.d.ts.map +1 -1
  517. package/dist/routing/schema-validation.d.ts +35 -0
  518. package/dist/routing/schema-validation.d.ts.map +1 -0
  519. package/dist/routing/segment-classify.d.ts +114 -0
  520. package/dist/routing/segment-classify.d.ts.map +1 -0
  521. package/dist/routing/segment-codegen.d.ts +38 -0
  522. package/dist/routing/segment-codegen.d.ts.map +1 -0
  523. package/dist/routing/segment-keys.d.ts +118 -0
  524. package/dist/routing/segment-keys.d.ts.map +1 -0
  525. package/dist/routing/slot-placement.d.ts +48 -0
  526. package/dist/routing/slot-placement.d.ts.map +1 -0
  527. package/dist/routing/types.d.ts +74 -26
  528. package/dist/routing/types.d.ts.map +1 -1
  529. package/dist/routing/walkers.d.ts +57 -0
  530. package/dist/routing/walkers.d.ts.map +1 -0
  531. package/dist/rsc-runtime/rsc.d.ts +1 -1
  532. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  533. package/dist/rsc-runtime/ssr.d.ts +14 -0
  534. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  535. package/dist/rsc-runtime/transforms.d.ts +13 -0
  536. package/dist/rsc-runtime/transforms.d.ts.map +1 -0
  537. package/dist/schema-bridge.d.ts +145 -0
  538. package/dist/schema-bridge.d.ts.map +1 -0
  539. package/dist/search-params/define.d.ts +262 -0
  540. package/dist/search-params/define.d.ts.map +1 -0
  541. package/dist/search-params/index.d.ts +3 -7
  542. package/dist/search-params/index.d.ts.map +1 -1
  543. package/dist/search-params/index.js +179 -360
  544. package/dist/search-params/index.js.map +1 -1
  545. package/dist/search-params/parse-total.d.ts +81 -0
  546. package/dist/search-params/parse-total.d.ts.map +1 -0
  547. package/dist/search-params/serialize-equal.d.ts +9 -0
  548. package/dist/search-params/serialize-equal.d.ts.map +1 -0
  549. package/dist/search-params/wrappers.d.ts +76 -0
  550. package/dist/search-params/wrappers.d.ts.map +1 -0
  551. package/dist/server/access-gate.d.ts +98 -10
  552. package/dist/server/access-gate.d.ts.map +1 -1
  553. package/dist/server/action-client.d.ts +42 -7
  554. package/dist/server/action-client.d.ts.map +1 -1
  555. package/dist/server/action-encryption.d.ts +76 -0
  556. package/dist/server/action-encryption.d.ts.map +1 -0
  557. package/dist/server/action-handler.d.ts +39 -5
  558. package/dist/server/action-handler.d.ts.map +1 -1
  559. package/dist/server/actions.d.ts +29 -35
  560. package/dist/server/actions.d.ts.map +1 -1
  561. package/dist/server/als-registry.d.ts +117 -13
  562. package/dist/server/als-registry.d.ts.map +1 -1
  563. package/dist/server/asset-headers.d.ts +8 -18
  564. package/dist/server/asset-headers.d.ts.map +1 -1
  565. package/dist/server/body-limits.d.ts.map +1 -1
  566. package/dist/server/build-manifest.d.ts +25 -30
  567. package/dist/server/build-manifest.d.ts.map +1 -1
  568. package/dist/server/canonicalize.d.ts +10 -0
  569. package/dist/server/canonicalize.d.ts.map +1 -1
  570. package/dist/server/chain-url-parts.d.ts +82 -0
  571. package/dist/server/chain-url-parts.d.ts.map +1 -0
  572. package/dist/server/children-interception.d.ts +49 -0
  573. package/dist/server/children-interception.d.ts.map +1 -0
  574. package/dist/server/coalesce-tick.d.ts +40 -0
  575. package/dist/server/coalesce-tick.d.ts.map +1 -0
  576. package/dist/server/compress.d.ts.map +1 -1
  577. package/dist/server/cookie-context.d.ts +170 -0
  578. package/dist/server/cookie-context.d.ts.map +1 -0
  579. package/dist/server/cookie-parsing.d.ts +65 -0
  580. package/dist/server/cookie-parsing.d.ts.map +1 -0
  581. package/dist/server/csp-nonce.d.ts +45 -0
  582. package/dist/server/csp-nonce.d.ts.map +1 -0
  583. package/dist/server/csrf.d.ts +3 -2
  584. package/dist/server/csrf.d.ts.map +1 -1
  585. package/dist/server/default-logger.d.ts +22 -0
  586. package/dist/server/default-logger.d.ts.map +1 -0
  587. package/dist/server/default-status-page.d.ts +45 -0
  588. package/dist/server/default-status-page.d.ts.map +1 -0
  589. package/dist/server/deny-boundary.d.ts +253 -0
  590. package/dist/server/deny-boundary.d.ts.map +1 -0
  591. package/dist/server/deny-renderer.d.ts +20 -9
  592. package/dist/server/deny-renderer.d.ts.map +1 -1
  593. package/dist/server/dev-source-map.d.ts +22 -0
  594. package/dist/server/dev-source-map.d.ts.map +1 -0
  595. package/dist/server/early-hints-sender.d.ts.map +1 -1
  596. package/dist/server/early-hints.d.ts +14 -12
  597. package/dist/server/early-hints.d.ts.map +1 -1
  598. package/dist/server/error-boundary-wrapper.d.ts +101 -10
  599. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  600. package/dist/server/error-response-headers.d.ts +3 -0
  601. package/dist/server/error-response-headers.d.ts.map +1 -0
  602. package/dist/server/fallback-error.d.ts +12 -7
  603. package/dist/server/fallback-error.d.ts.map +1 -1
  604. package/dist/server/flight-injection-state.d.ts +66 -0
  605. package/dist/server/flight-injection-state.d.ts.map +1 -0
  606. package/dist/server/flight-scripts.d.ts +45 -0
  607. package/dist/server/flight-scripts.d.ts.map +1 -0
  608. package/dist/server/form-data.d.ts +41 -0
  609. package/dist/server/form-data.d.ts.map +1 -1
  610. package/dist/server/form-flash.d.ts +1 -1
  611. package/dist/server/head-response.d.ts +35 -0
  612. package/dist/server/head-response.d.ts.map +1 -0
  613. package/dist/server/html-injector-core.d.ts +257 -0
  614. package/dist/server/html-injector-core.d.ts.map +1 -0
  615. package/dist/server/html-injectors.d.ts +84 -42
  616. package/dist/server/html-injectors.d.ts.map +1 -1
  617. package/dist/server/index.d.ts +18 -54
  618. package/dist/server/index.d.ts.map +1 -1
  619. package/dist/server/index.js +195 -2922
  620. package/dist/server/index.js.map +1 -1
  621. package/dist/server/instrumentation.d.ts +1 -1
  622. package/dist/server/internal.d.ts +50 -0
  623. package/dist/server/internal.d.ts.map +1 -0
  624. package/dist/server/internal.js +4034 -0
  625. package/dist/server/internal.js.map +1 -0
  626. package/dist/server/logger.d.ts +39 -7
  627. package/dist/server/logger.d.ts.map +1 -1
  628. package/dist/server/metadata-collector.d.ts +71 -0
  629. package/dist/server/metadata-collector.d.ts.map +1 -0
  630. package/dist/server/metadata-platform.d.ts +2 -2
  631. package/dist/server/metadata-render.d.ts +2 -2
  632. package/dist/server/metadata-render.d.ts.map +1 -1
  633. package/dist/server/metadata-routes.d.ts +60 -11
  634. package/dist/server/metadata-routes.d.ts.map +1 -1
  635. package/dist/server/metadata-social.d.ts +2 -2
  636. package/dist/server/metadata.d.ts +10 -2
  637. package/dist/server/metadata.d.ts.map +1 -1
  638. package/dist/server/middleware-runner.d.ts +20 -5
  639. package/dist/server/middleware-runner.d.ts.map +1 -1
  640. package/dist/server/node-stream-transforms.d.ts +105 -0
  641. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  642. package/dist/server/nuqs-ssr-provider.d.ts +7 -3
  643. package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
  644. package/dist/server/param-coercion.d.ts +78 -0
  645. package/dist/server/param-coercion.d.ts.map +1 -0
  646. package/dist/server/pipeline-helpers.d.ts +77 -0
  647. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  648. package/dist/server/pipeline-interception.d.ts +59 -9
  649. package/dist/server/pipeline-interception.d.ts.map +1 -1
  650. package/dist/server/pipeline-metadata.d.ts +7 -1
  651. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  652. package/dist/server/pipeline-outcome.d.ts +49 -0
  653. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  654. package/dist/server/pipeline-phases.d.ts +70 -0
  655. package/dist/server/pipeline-phases.d.ts.map +1 -0
  656. package/dist/server/pipeline.d.ts +153 -20
  657. package/dist/server/pipeline.d.ts.map +1 -1
  658. package/dist/server/port-resolution.d.ts +31 -0
  659. package/dist/server/port-resolution.d.ts.map +1 -0
  660. package/dist/server/prebuilt/cache-key.d.ts +63 -0
  661. package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
  662. package/dist/server/prebuilt/capture-state.d.ts +57 -0
  663. package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
  664. package/dist/server/prebuilt/key-discipline.d.ts +52 -0
  665. package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
  666. package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
  667. package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
  668. package/dist/server/prebuilt/overlay.d.ts +100 -0
  669. package/dist/server/prebuilt/overlay.d.ts.map +1 -0
  670. package/dist/server/prebuilt/payload-source.d.ts +79 -0
  671. package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
  672. package/dist/server/prebuilt/slots.d.ts +99 -0
  673. package/dist/server/prebuilt/slots.d.ts.map +1 -0
  674. package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
  675. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
  676. package/dist/server/prebuilt-builder.d.ts +121 -0
  677. package/dist/server/prebuilt-builder.d.ts.map +1 -0
  678. package/dist/server/prebuilt-runtime.d.ts +111 -0
  679. package/dist/server/prebuilt-runtime.d.ts.map +1 -0
  680. package/dist/server/primitives.d.ts +129 -45
  681. package/dist/server/primitives.d.ts.map +1 -1
  682. package/dist/server/publish-params.d.ts +33 -0
  683. package/dist/server/publish-params.d.ts.map +1 -0
  684. package/dist/server/render-timeout.d.ts +51 -0
  685. package/dist/server/render-timeout.d.ts.map +1 -0
  686. package/dist/server/render-utils.d.ts +26 -0
  687. package/dist/server/render-utils.d.ts.map +1 -0
  688. package/dist/server/request-context.d.ts +111 -107
  689. package/dist/server/request-context.d.ts.map +1 -1
  690. package/dist/server/request-dep.d.ts +15 -0
  691. package/dist/server/request-dep.d.ts.map +1 -0
  692. package/dist/server/response-cache-policy.d.ts +3 -0
  693. package/dist/server/response-cache-policy.d.ts.map +1 -0
  694. package/dist/server/route-element-builder.d.ts +57 -30
  695. package/dist/server/route-element-builder.d.ts.map +1 -1
  696. package/dist/server/route-element-helpers.d.ts +12 -0
  697. package/dist/server/route-element-helpers.d.ts.map +1 -0
  698. package/dist/server/route-handler.d.ts +1 -1
  699. package/dist/server/route-handler.d.ts.map +1 -1
  700. package/dist/server/route-matcher.d.ts +40 -38
  701. package/dist/server/route-matcher.d.ts.map +1 -1
  702. package/dist/server/route-module-loader.d.ts +37 -0
  703. package/dist/server/route-module-loader.d.ts.map +1 -0
  704. package/dist/server/rsc-cache-key-guard.d.ts +78 -0
  705. package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
  706. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  707. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  708. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  709. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  710. package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
  711. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
  712. package/dist/server/rsc-entry/error-renderer.d.ts +38 -13
  713. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  714. package/dist/server/rsc-entry/helpers.d.ts +59 -42
  715. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  716. package/dist/server/rsc-entry/index.d.ts +40 -6
  717. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  718. package/dist/server/rsc-entry/render-route.d.ts +51 -0
  719. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  720. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  721. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  722. package/dist/server/rsc-entry/rsc-payload.d.ts +26 -6
  723. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  724. package/dist/server/rsc-entry/rsc-stream.d.ts +33 -3
  725. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  726. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  727. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  728. package/dist/server/rsc-entry/ssr-renderer.d.ts +37 -5
  729. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  730. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
  731. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  732. package/dist/server/rsc-error-envelope.d.ts +11 -0
  733. package/dist/server/rsc-error-envelope.d.ts.map +1 -0
  734. package/dist/server/safe-load.d.ts +46 -0
  735. package/dist/server/safe-load.d.ts.map +1 -0
  736. package/dist/server/sensitive-fields.d.ts +74 -0
  737. package/dist/server/sensitive-fields.d.ts.map +1 -0
  738. package/dist/server/sitemap-generator.d.ts +130 -0
  739. package/dist/server/sitemap-generator.d.ts.map +1 -0
  740. package/dist/server/sitemap-handler.d.ts +22 -0
  741. package/dist/server/sitemap-handler.d.ts.map +1 -0
  742. package/dist/server/skippable-prefix.d.ts +29 -0
  743. package/dist/server/skippable-prefix.d.ts.map +1 -0
  744. package/dist/server/slot-interception.d.ts +80 -0
  745. package/dist/server/slot-interception.d.ts.map +1 -0
  746. package/dist/server/slot-resolver.d.ts +137 -7
  747. package/dist/server/slot-resolver.d.ts.map +1 -1
  748. package/dist/server/slot-subtree-contain.d.ts +54 -0
  749. package/dist/server/slot-subtree-contain.d.ts.map +1 -0
  750. package/dist/server/ssr-bridge-types.d.ts +160 -0
  751. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  752. package/dist/server/ssr-entry.d.ts +1 -43
  753. package/dist/server/ssr-entry.d.ts.map +1 -1
  754. package/dist/server/ssr-render.d.ts +69 -22
  755. package/dist/server/ssr-render.d.ts.map +1 -1
  756. package/dist/server/ssr-wrappers.d.ts +93 -0
  757. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  758. package/dist/server/state-tree-diff.d.ts +44 -9
  759. package/dist/server/state-tree-diff.d.ts.map +1 -1
  760. package/dist/server/static-generator.d.ts +112 -0
  761. package/dist/server/static-generator.d.ts.map +1 -0
  762. package/dist/server/static-not-found.d.ts +52 -0
  763. package/dist/server/static-not-found.d.ts.map +1 -0
  764. package/dist/server/status-code-resolver.d.ts +26 -15
  765. package/dist/server/status-code-resolver.d.ts.map +1 -1
  766. package/dist/server/stream-utils.d.ts +47 -0
  767. package/dist/server/stream-utils.d.ts.map +1 -0
  768. package/dist/server/tracing.d.ts +46 -11
  769. package/dist/server/tracing.d.ts.map +1 -1
  770. package/dist/server/tree-match.d.ts +49 -0
  771. package/dist/server/tree-match.d.ts.map +1 -0
  772. package/dist/server/types.d.ts +88 -7
  773. package/dist/server/types.d.ts.map +1 -1
  774. package/dist/server/utils/element-type.d.ts +50 -0
  775. package/dist/server/utils/element-type.d.ts.map +1 -0
  776. package/dist/server/utils/escape-html.d.ts +14 -0
  777. package/dist/server/utils/escape-html.d.ts.map +1 -0
  778. package/dist/server/utils/mdx-file.d.ts +17 -0
  779. package/dist/server/utils/mdx-file.d.ts.map +1 -0
  780. package/dist/server/version-skew.d.ts +61 -0
  781. package/dist/server/version-skew.d.ts.map +1 -0
  782. package/dist/server/workers-cache-bridge.d.ts +26 -0
  783. package/dist/server/workers-cache-bridge.d.ts.map +1 -0
  784. package/dist/shared/als-slots.d.ts +42 -0
  785. package/dist/shared/als-slots.d.ts.map +1 -0
  786. package/dist/shared/base-path.d.ts +56 -0
  787. package/dist/shared/base-path.d.ts.map +1 -0
  788. package/dist/shared/href-validation.d.ts +49 -0
  789. package/dist/shared/href-validation.d.ts.map +1 -0
  790. package/dist/shared/merge-search-params.d.ts +22 -0
  791. package/dist/shared/merge-search-params.d.ts.map +1 -0
  792. package/dist/shared/param-value.d.ts +104 -0
  793. package/dist/shared/param-value.d.ts.map +1 -0
  794. package/dist/shared/payload-root.d.ts +109 -0
  795. package/dist/shared/payload-root.d.ts.map +1 -0
  796. package/dist/shared/redirect-type.d.ts +17 -0
  797. package/dist/shared/redirect-type.d.ts.map +1 -0
  798. package/dist/shared/rsc-cache-key.d.ts +163 -0
  799. package/dist/shared/rsc-cache-key.d.ts.map +1 -0
  800. package/dist/shared/rsc-error-envelope.d.ts +16 -0
  801. package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
  802. package/dist/shared/rsc-manifest.d.ts +28 -0
  803. package/dist/shared/rsc-manifest.d.ts.map +1 -0
  804. package/dist/shared/rsc-media-type.d.ts +52 -0
  805. package/dist/shared/rsc-media-type.d.ts.map +1 -0
  806. package/dist/shared/rsc-payload-path.d.ts +42 -0
  807. package/dist/shared/rsc-payload-path.d.ts.map +1 -0
  808. package/dist/shared/segment-info.d.ts +66 -0
  809. package/dist/shared/segment-info.d.ts.map +1 -0
  810. package/dist/shared/slot-params.d.ts +52 -0
  811. package/dist/shared/slot-params.d.ts.map +1 -0
  812. package/dist/shared/static-platform-files.d.ts +71 -0
  813. package/dist/shared/static-platform-files.d.ts.map +1 -0
  814. package/dist/shared/status-reason-phrase.d.ts +26 -0
  815. package/dist/shared/status-reason-phrase.d.ts.map +1 -0
  816. package/dist/shims/font-google.d.ts +1 -1
  817. package/dist/shims/font-google.d.ts.map +1 -1
  818. package/dist/shims/font-google.js +42 -0
  819. package/dist/shims/font-google.js.map +1 -0
  820. package/dist/shims/font-local.d.ts +26 -0
  821. package/dist/shims/font-local.d.ts.map +1 -0
  822. package/dist/shims/font-local.js +20 -0
  823. package/dist/shims/font-local.js.map +1 -0
  824. package/dist/shims/headers.d.ts +53 -1
  825. package/dist/shims/headers.d.ts.map +1 -1
  826. package/dist/shims/image.d.ts +120 -120
  827. package/dist/shims/image.d.ts.map +1 -1
  828. package/dist/shims/navigation-client.d.ts +25 -12
  829. package/dist/shims/navigation-client.d.ts.map +1 -1
  830. package/dist/shims/navigation-rsc.d.ts +21 -0
  831. package/dist/shims/navigation-rsc.d.ts.map +1 -0
  832. package/dist/shims/navigation.d.ts +10 -5
  833. package/dist/shims/navigation.d.ts.map +1 -1
  834. package/dist/utils/state-machine.d.ts +80 -0
  835. package/dist/utils/state-machine.d.ts.map +1 -0
  836. package/docs/api/30-api-server.mdx +236 -0
  837. package/docs/api/31-api-client.mdx +167 -0
  838. package/docs/api/32-api-cache.mdx +311 -0
  839. package/docs/api/33-api-search-params.mdx +176 -0
  840. package/docs/api/34-api-config.mdx +329 -0
  841. package/docs/api/35-api-typescript.mdx +91 -0
  842. package/docs/api/36-cli.mdx +192 -0
  843. package/docs/learn/00-introduction.mdx +109 -0
  844. package/docs/learn/01-quick-start.mdx +94 -0
  845. package/docs/learn/02-pages-and-layouts.mdx +147 -0
  846. package/docs/learn/03-fetching-data.mdx +211 -0
  847. package/docs/learn/04-access-control.mdx +115 -0
  848. package/docs/learn/05-the-flush-point.mdx +175 -0
  849. package/docs/learn/06-typed-params.mdx +275 -0
  850. package/docs/learn/07-typed-routes.mdx +108 -0
  851. package/docs/learn/08-forms-and-actions.mdx +146 -0
  852. package/docs/learn/09-streaming.mdx +140 -0
  853. package/docs/learn/10-caching.mdx +252 -0
  854. package/docs/learn/11-middleware.mdx +158 -0
  855. package/docs/learn/12-error-handling.mdx +188 -0
  856. package/docs/learn/13-deploying.mdx +287 -0
  857. package/llms.txt +55 -0
  858. package/package.json +117 -30
  859. package/src/adapters/build-output-helper.ts +351 -0
  860. package/src/adapters/cloudflare-dev.ts +183 -0
  861. package/src/adapters/cloudflare-kv-cache.ts +207 -0
  862. package/src/adapters/cloudflare.ts +747 -130
  863. package/src/adapters/compress-module.ts +101 -88
  864. package/src/adapters/fs-identity.ts +156 -0
  865. package/src/adapters/nitro-presets.ts +139 -0
  866. package/src/adapters/nitro-preview.ts +340 -0
  867. package/src/adapters/nitro.ts +249 -426
  868. package/src/adapters/raw-imports.d.ts +5 -0
  869. package/src/adapters/shared.ts +274 -0
  870. package/src/adapters/types.ts +28 -7
  871. package/src/adapters/wrangler.d.ts +7 -0
  872. package/src/analyze/chains.ts +411 -0
  873. package/src/analyze/classify.ts +258 -0
  874. package/src/analyze/crawl-entry.ts +68 -0
  875. package/src/analyze/crawl.ts +500 -0
  876. package/src/analyze/graph-cache.ts +332 -0
  877. package/src/analyze/graph-command.ts +762 -0
  878. package/src/analyze/live-graph.ts +232 -0
  879. package/src/analyze/poison-rules.ts +165 -0
  880. package/src/analyze/poison-scan.ts +162 -0
  881. package/src/analyze/scan.ts +149 -0
  882. package/src/cache/cache-api.ts +107 -0
  883. package/src/cache/fast-hash.ts +5 -0
  884. package/src/cache/handler-store.ts +76 -0
  885. package/src/cache/index.ts +115 -22
  886. package/src/cache/invalidation-epoch.ts +93 -0
  887. package/src/cache/json-lossy-check.ts +75 -0
  888. package/src/cache/redis-handler.ts +198 -20
  889. package/src/cache/singleflight.ts +69 -6
  890. package/src/cache/sizeof.ts +33 -0
  891. package/src/cache/stable-stringify.ts +65 -2
  892. package/src/cache/store.ts +71 -0
  893. package/src/cache/stores/cloudflare-kv.ts +52 -0
  894. package/src/cache/stores/memory.ts +125 -0
  895. package/src/cache/stores/redis.ts +97 -0
  896. package/src/cache/stores/vercel.ts +59 -0
  897. package/src/cache/tag-aware-handler.ts +237 -0
  898. package/src/cache/timber-cache.ts +165 -40
  899. package/src/cdn/cloudflare-purge.ts +50 -0
  900. package/src/cdn/fastly-purge.ts +63 -0
  901. package/src/cdn/headers.ts +153 -0
  902. package/src/cdn/index.ts +23 -0
  903. package/src/cdn/purge-store.ts +34 -0
  904. package/src/cdn/workers-cache-purge.ts +34 -0
  905. package/src/cli-check.ts +507 -0
  906. package/src/cli-schema-sync.ts +401 -0
  907. package/src/cli.ts +262 -55
  908. package/src/client/browser-dev.ts +157 -2
  909. package/src/client/browser-entry/action-dispatch.ts +197 -0
  910. package/src/client/browser-entry/action-queue.ts +90 -0
  911. package/src/client/browser-entry/hmr.ts +70 -0
  912. package/src/client/browser-entry/hydrate.ts +148 -0
  913. package/src/client/browser-entry/index.ts +131 -0
  914. package/src/client/browser-entry/post-hydration.ts +123 -0
  915. package/src/client/browser-entry/router-init.ts +418 -0
  916. package/src/client/browser-entry/rsc-stream.ts +166 -0
  917. package/src/client/browser-entry/scroll.ts +50 -0
  918. package/src/client/deny-last-resort.tsx +54 -0
  919. package/src/client/error-boundary.tsx +316 -40
  920. package/src/client/error-reconstituter.tsx +79 -0
  921. package/src/client/form.tsx +36 -32
  922. package/src/client/global-context.ts +31 -0
  923. package/src/client/history.ts +81 -10
  924. package/src/client/index.ts +89 -53
  925. package/src/client/internal.ts +59 -0
  926. package/src/client/link.tsx +439 -151
  927. package/src/client/location-search.ts +15 -0
  928. package/src/client/navigation-api.ts +347 -0
  929. package/src/client/navigation-commit.ts +295 -0
  930. package/src/client/navigation-context.ts +67 -98
  931. package/src/client/navigation-root.tsx +224 -0
  932. package/src/client/navigation-transition.ts +327 -0
  933. package/src/client/nuqs-adapter.tsx +21 -9
  934. package/src/client/params-context.ts +187 -0
  935. package/src/client/react-root.ts +72 -0
  936. package/src/client/router-effects.ts +228 -0
  937. package/src/client/router-lifecycle.ts +354 -0
  938. package/src/client/router-pipeline.ts +490 -0
  939. package/src/client/router-ref.ts +3 -3
  940. package/src/client/router-skew.ts +30 -0
  941. package/src/client/router-types.ts +294 -0
  942. package/src/client/router.ts +435 -421
  943. package/src/client/rsc-fetch.ts +512 -73
  944. package/src/client/segment-cache.ts +327 -40
  945. package/src/client/segment-context.ts +7 -4
  946. package/src/client/segment-outlet.tsx +96 -0
  947. package/src/client/segment-update-context.ts +23 -0
  948. package/src/client/shallow-url.ts +22 -0
  949. package/src/client/slot-content-cache-context.ts +43 -0
  950. package/src/client/slot-context.ts +50 -0
  951. package/src/client/slot-outlet.tsx +22 -0
  952. package/src/client/slot-provider.tsx +32 -0
  953. package/src/client/ssr-data.ts +30 -9
  954. package/src/client/stale-client.ts +191 -0
  955. package/src/client/state.ts +29 -15
  956. package/src/client/status-page-marker.tsx +32 -0
  957. package/src/client/top-loader.tsx +13 -10
  958. package/src/client/unload-guard.ts +35 -3
  959. package/src/client/use-cookie.ts +70 -18
  960. package/src/client/use-link-status.ts +7 -7
  961. package/src/client/use-pathname.ts +22 -31
  962. package/src/client/use-pending-navigation.ts +40 -0
  963. package/src/client/use-query-states.ts +206 -36
  964. package/src/client/use-router.ts +6 -3
  965. package/src/client/use-search-params.ts +38 -49
  966. package/src/client/use-segment-params.ts +69 -0
  967. package/src/client/use-selected-layout-segment.ts +2 -2
  968. package/src/codec.ts +149 -0
  969. package/src/config-types.ts +322 -0
  970. package/src/config-validation.ts +347 -0
  971. package/src/cookies/define-cookie.ts +222 -53
  972. package/src/cookies/index.ts +13 -2
  973. package/src/cookies/json-cookie.ts +105 -0
  974. package/src/cookies/validation.ts +192 -0
  975. package/src/dev-tools/404-page.ts +286 -0
  976. package/src/dev-tools/browser-logs.ts +55 -0
  977. package/src/dev-tools/dev-page-shell.ts +260 -0
  978. package/src/dev-tools/error-page.ts +331 -0
  979. package/src/dev-tools/holding-server.ts +185 -0
  980. package/src/dev-tools/hydration-overlay.ts +158 -0
  981. package/src/dev-tools/index.ts +83 -0
  982. package/src/dev-tools/instrumentation.ts +213 -0
  983. package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
  984. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
  985. package/src/dev-tools/overlay.ts +469 -0
  986. package/src/dev-tools/stack-classifier.ts +75 -0
  987. package/src/dev-tools/terminal.ts +182 -0
  988. package/src/fonts/ast-walk.ts +235 -0
  989. package/src/fonts/ast.ts +479 -128
  990. package/src/fonts/bundle.ts +138 -0
  991. package/src/fonts/css.ts +1 -1
  992. package/src/fonts/dev-middleware.ts +85 -0
  993. package/src/fonts/fallbacks.ts +0 -23
  994. package/src/fonts/google.ts +101 -19
  995. package/src/fonts/local.ts +12 -11
  996. package/src/fonts/paths.ts +58 -0
  997. package/src/fonts/pipeline.ts +348 -0
  998. package/src/fonts/transform.ts +311 -0
  999. package/src/fonts/types.ts +52 -1
  1000. package/src/fonts/virtual-modules.ts +179 -0
  1001. package/src/index.ts +486 -377
  1002. package/src/params/codec-registry.ts +34 -0
  1003. package/src/params/define-schema.ts +115 -0
  1004. package/src/params/index.ts +17 -0
  1005. package/src/params/resolve-schema.ts +84 -0
  1006. package/src/plugin-context.ts +503 -0
  1007. package/src/plugins/adapter-build.ts +229 -7
  1008. package/src/plugins/build-manifest.ts +201 -26
  1009. package/src/plugins/build-report.ts +259 -47
  1010. package/src/plugins/cache.ts +243 -0
  1011. package/src/plugins/callsite-ast.ts +472 -0
  1012. package/src/plugins/callsite-jsx.ts +243 -0
  1013. package/src/plugins/chunks.ts +74 -5
  1014. package/src/plugins/client-chunks.ts +185 -0
  1015. package/src/plugins/cloudflare-wasm.ts +141 -0
  1016. package/src/plugins/content.ts +5 -1
  1017. package/src/plugins/dev-discovery.ts +218 -0
  1018. package/src/plugins/dev-server.ts +369 -96
  1019. package/src/plugins/entries.ts +141 -16
  1020. package/src/plugins/fonts.ts +234 -659
  1021. package/src/plugins/graph-endpoint.ts +532 -0
  1022. package/src/plugins/mdx.ts +107 -35
  1023. package/src/plugins/prebuilt-capture.ts +217 -0
  1024. package/src/plugins/prebuilt-options-analysis.ts +175 -0
  1025. package/src/plugins/prebuilt.ts +655 -0
  1026. package/src/plugins/prerender-sugar.ts +320 -0
  1027. package/src/plugins/request-dep/analysis.ts +447 -0
  1028. package/src/plugins/request-dep/index.ts +376 -0
  1029. package/src/plugins/request-dep/origin.ts +310 -0
  1030. package/src/plugins/routing.ts +273 -277
  1031. package/src/plugins/server-bundle.ts +99 -14
  1032. package/src/plugins/shims.ts +259 -97
  1033. package/src/plugins/static-build.ts +708 -66
  1034. package/src/react-canary.d.ts +2 -0
  1035. package/src/routing/codegen-shared.ts +39 -0
  1036. package/src/routing/codegen-types.ts +62 -0
  1037. package/src/routing/codegen-write.ts +141 -0
  1038. package/src/routing/codegen.ts +349 -232
  1039. package/src/routing/collision-probe.ts +438 -0
  1040. package/src/routing/collision-spaces.ts +281 -0
  1041. package/src/routing/convention-lint.ts +623 -0
  1042. package/src/routing/export-detect.ts +448 -0
  1043. package/src/routing/file-cache.ts +23 -0
  1044. package/src/routing/index.ts +16 -7
  1045. package/src/routing/interception-overlap.ts +141 -0
  1046. package/src/routing/interception.ts +1044 -67
  1047. package/src/routing/link-codegen.ts +280 -0
  1048. package/src/routing/manifest-codegen.ts +226 -0
  1049. package/src/routing/scanner.ts +393 -219
  1050. package/src/routing/schema-validation.ts +155 -0
  1051. package/src/routing/segment-classify.ts +280 -0
  1052. package/src/routing/segment-codegen.ts +98 -0
  1053. package/src/routing/segment-keys.ts +186 -0
  1054. package/src/routing/slot-placement.ts +97 -0
  1055. package/src/routing/types.ts +75 -26
  1056. package/src/routing/walkers.ts +98 -0
  1057. package/src/rsc-runtime/rsc.ts +9 -0
  1058. package/src/rsc-runtime/ssr.ts +51 -0
  1059. package/src/rsc-runtime/transforms.ts +13 -0
  1060. package/src/rsc-runtime/vendor-types.d.ts +19 -0
  1061. package/src/schema-bridge.ts +380 -0
  1062. package/src/search-params/define.ts +677 -0
  1063. package/src/search-params/index.ts +14 -20
  1064. package/src/search-params/parse-total.ts +91 -0
  1065. package/src/search-params/serialize-equal.ts +14 -0
  1066. package/src/search-params/wrappers.ts +150 -0
  1067. package/src/server/access-gate.tsx +194 -56
  1068. package/src/server/action-client.ts +122 -31
  1069. package/src/server/action-encryption.ts +144 -0
  1070. package/src/server/action-handler.ts +256 -56
  1071. package/src/server/actions.ts +112 -68
  1072. package/src/server/als-registry.ts +160 -21
  1073. package/src/server/asset-headers.ts +15 -37
  1074. package/src/server/body-limits.ts +10 -2
  1075. package/src/server/build-manifest.ts +33 -57
  1076. package/src/server/canonicalize.ts +6 -3
  1077. package/src/server/chain-url-parts.ts +163 -0
  1078. package/src/server/children-interception.ts +115 -0
  1079. package/src/server/coalesce-tick.ts +75 -0
  1080. package/src/server/compress.ts +43 -8
  1081. package/src/server/cookie-context.ts +484 -0
  1082. package/src/server/cookie-parsing.ts +163 -0
  1083. package/src/server/csp-nonce.ts +70 -0
  1084. package/src/server/csrf.ts +39 -6
  1085. package/src/server/default-logger.ts +99 -0
  1086. package/src/server/default-status-page.ts +88 -0
  1087. package/src/server/deny-boundary.ts +533 -0
  1088. package/src/server/deny-renderer.ts +213 -112
  1089. package/src/server/dev-source-map.ts +31 -0
  1090. package/src/server/early-hints-sender.ts +4 -3
  1091. package/src/server/early-hints.ts +39 -29
  1092. package/src/server/error-boundary-wrapper.ts +181 -44
  1093. package/src/server/error-response-headers.ts +18 -0
  1094. package/src/server/fallback-error.ts +79 -102
  1095. package/src/server/flight-injection-state.ts +113 -0
  1096. package/src/server/flight-scripts.ts +67 -0
  1097. package/src/server/form-data.ts +124 -12
  1098. package/src/server/form-flash.ts +2 -2
  1099. package/src/server/head-response.ts +54 -0
  1100. package/src/server/html-injector-core.ts +512 -0
  1101. package/src/server/html-injectors.ts +272 -255
  1102. package/src/server/index.ts +40 -192
  1103. package/src/server/instrumentation.ts +1 -1
  1104. package/src/server/internal.ts +173 -0
  1105. package/src/server/logger.ts +73 -37
  1106. package/src/server/metadata-collector.ts +174 -0
  1107. package/src/server/metadata-platform.ts +2 -2
  1108. package/src/server/metadata-render.ts +30 -8
  1109. package/src/server/metadata-routes.ts +205 -24
  1110. package/src/server/metadata-social.ts +2 -2
  1111. package/src/server/metadata.ts +23 -2
  1112. package/src/server/middleware-runner.ts +32 -5
  1113. package/src/server/node-stream-transforms.ts +323 -0
  1114. package/src/server/nuqs-ssr-provider.tsx +8 -7
  1115. package/src/server/param-coercion.ts +198 -0
  1116. package/src/server/pipeline-helpers.ts +159 -0
  1117. package/src/server/pipeline-interception.ts +109 -33
  1118. package/src/server/pipeline-metadata.ts +15 -1
  1119. package/src/server/pipeline-outcome.ts +218 -0
  1120. package/src/server/pipeline-phases.ts +606 -0
  1121. package/src/server/pipeline.ts +324 -384
  1122. package/src/server/port-resolution.ts +53 -0
  1123. package/src/server/prebuilt/cache-key.ts +299 -0
  1124. package/src/server/prebuilt/capture-state.ts +89 -0
  1125. package/src/server/prebuilt/key-discipline.ts +122 -0
  1126. package/src/server/prebuilt/manifest-tag-index.ts +46 -0
  1127. package/src/server/prebuilt/overlay.ts +256 -0
  1128. package/src/server/prebuilt/payload-source.ts +202 -0
  1129. package/src/server/prebuilt/slots.ts +190 -0
  1130. package/src/server/prebuilt/synthetic-store.ts +122 -0
  1131. package/src/server/prebuilt-builder.ts +804 -0
  1132. package/src/server/prebuilt-runtime.ts +817 -0
  1133. package/src/server/primitives.ts +245 -97
  1134. package/src/server/publish-params.ts +42 -0
  1135. package/src/server/render-timeout.ts +108 -0
  1136. package/src/server/render-utils.ts +35 -0
  1137. package/src/server/request-context.ts +244 -334
  1138. package/src/server/request-dep.ts +37 -0
  1139. package/src/server/response-cache-policy.ts +45 -0
  1140. package/src/server/route-element-builder.ts +508 -355
  1141. package/src/server/route-element-helpers.ts +37 -0
  1142. package/src/server/route-handler.ts +40 -13
  1143. package/src/server/route-matcher.ts +165 -272
  1144. package/src/server/route-module-loader.ts +161 -0
  1145. package/src/server/rsc-cache-key-guard.ts +122 -0
  1146. package/src/server/rsc-entry/action-middleware-runner.ts +174 -0
  1147. package/src/server/rsc-entry/api-handler.ts +78 -34
  1148. package/src/server/rsc-entry/deny-fallback.ts +93 -0
  1149. package/src/server/rsc-entry/error-renderer.ts +373 -95
  1150. package/src/server/rsc-entry/helpers.ts +226 -95
  1151. package/src/server/rsc-entry/index.ts +370 -331
  1152. package/src/server/rsc-entry/render-route.ts +304 -0
  1153. package/src/server/rsc-entry/revalidate-renderer.ts +350 -0
  1154. package/src/server/rsc-entry/rsc-payload.ts +209 -55
  1155. package/src/server/rsc-entry/rsc-stream.ts +151 -26
  1156. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  1157. package/src/server/rsc-entry/ssr-renderer.ts +311 -60
  1158. package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
  1159. package/src/server/rsc-error-envelope.ts +18 -0
  1160. package/src/server/rsc-prop-warnings.ts +1 -1
  1161. package/src/server/safe-load.ts +60 -0
  1162. package/src/server/sensitive-fields.ts +230 -0
  1163. package/src/server/server-only-guard-noop.js +3 -0
  1164. package/src/server/server-timing.ts +1 -1
  1165. package/src/server/sitemap-generator.ts +337 -0
  1166. package/src/server/sitemap-handler.ts +157 -0
  1167. package/src/server/skippable-prefix.ts +172 -0
  1168. package/src/server/slot-interception.ts +168 -0
  1169. package/src/server/slot-resolver.ts +707 -300
  1170. package/src/server/slot-subtree-contain.ts +255 -0
  1171. package/src/server/ssr-bridge-types.ts +165 -0
  1172. package/src/server/ssr-entry.ts +230 -85
  1173. package/src/server/ssr-render.ts +357 -85
  1174. package/src/server/ssr-wrappers.tsx +162 -0
  1175. package/src/server/state-tree-diff.ts +85 -30
  1176. package/src/server/static-generator.ts +715 -0
  1177. package/src/server/static-not-found.ts +134 -0
  1178. package/src/server/status-code-resolver.ts +107 -148
  1179. package/src/server/stream-utils.ts +292 -0
  1180. package/src/server/tracing.ts +128 -16
  1181. package/src/server/tree-match.ts +262 -0
  1182. package/src/server/types.ts +95 -10
  1183. package/src/server/utils/element-type.ts +88 -0
  1184. package/src/server/utils/escape-html.ts +20 -0
  1185. package/src/server/utils/mdx-file.ts +22 -0
  1186. package/src/server/version-skew.ts +104 -0
  1187. package/src/server/waituntil-bridge.ts +1 -1
  1188. package/src/server/workers-cache-bridge.ts +33 -0
  1189. package/src/shared/als-slots.ts +74 -0
  1190. package/src/shared/base-path.ts +80 -0
  1191. package/src/shared/href-validation.ts +159 -0
  1192. package/src/shared/merge-search-params.ts +55 -0
  1193. package/src/shared/param-value.ts +281 -0
  1194. package/src/shared/payload-root.ts +152 -0
  1195. package/src/shared/redirect-type.ts +17 -0
  1196. package/src/shared/rsc-cache-key.ts +269 -0
  1197. package/src/shared/rsc-error-envelope.ts +16 -0
  1198. package/src/shared/rsc-manifest.ts +29 -0
  1199. package/src/shared/rsc-media-type.ts +59 -0
  1200. package/src/shared/rsc-payload-path.ts +45 -0
  1201. package/src/shared/segment-info.ts +67 -0
  1202. package/src/shared/slot-params.ts +109 -0
  1203. package/src/shared/static-platform-files.ts +75 -0
  1204. package/src/shared/status-reason-phrase.ts +61 -0
  1205. package/src/shims/font-google.ts +1 -1
  1206. package/src/shims/font-local.ts +34 -0
  1207. package/src/shims/headers.ts +122 -1
  1208. package/src/shims/navigation-client.ts +36 -32
  1209. package/src/shims/navigation-rsc.ts +47 -0
  1210. package/src/shims/navigation.ts +10 -7
  1211. package/src/utils/state-machine.ts +111 -0
  1212. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  1213. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  1214. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  1215. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  1216. package/dist/_chunks/format-RyoGQL74.js +0 -164
  1217. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  1218. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  1219. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  1220. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js +0 -153
  1221. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  1222. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  1223. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  1224. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  1225. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  1226. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  1227. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  1228. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  1229. package/dist/_chunks/use-query-states-D5KaffOK.js +0 -109
  1230. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  1231. package/dist/adapters/cloudflare.js.map +0 -1
  1232. package/dist/cache/index.js.map +0 -1
  1233. package/dist/cache/register-cached-function.d.ts +0 -17
  1234. package/dist/cache/register-cached-function.d.ts.map +0 -1
  1235. package/dist/client/browser-entry.d.ts +0 -21
  1236. package/dist/client/browser-entry.d.ts.map +0 -1
  1237. package/dist/client/error-boundary.js.map +0 -1
  1238. package/dist/client/head.d.ts +0 -16
  1239. package/dist/client/head.d.ts.map +0 -1
  1240. package/dist/client/link-status-provider.d.ts +0 -11
  1241. package/dist/client/link-status-provider.d.ts.map +0 -1
  1242. package/dist/client/segment-merger.d.ts +0 -119
  1243. package/dist/client/segment-merger.d.ts.map +0 -1
  1244. package/dist/client/stale-reload.d.ts +0 -44
  1245. package/dist/client/stale-reload.d.ts.map +0 -1
  1246. package/dist/client/transition-root.d.ts +0 -74
  1247. package/dist/client/transition-root.d.ts.map +0 -1
  1248. package/dist/client/use-navigation-pending.d.ts +0 -26
  1249. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  1250. package/dist/client/use-params.d.ts +0 -92
  1251. package/dist/client/use-params.d.ts.map +0 -1
  1252. package/dist/content/index.d.ts +0 -11
  1253. package/dist/content/index.d.ts.map +0 -1
  1254. package/dist/content/index.js +0 -2
  1255. package/dist/plugins/cache-transform.d.ts +0 -36
  1256. package/dist/plugins/cache-transform.d.ts.map +0 -1
  1257. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  1258. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  1259. package/dist/plugins/dev-logs.d.ts.map +0 -1
  1260. package/dist/plugins/dynamic-transform.d.ts +0 -72
  1261. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  1262. package/dist/plugins/server-action-exports.d.ts +0 -26
  1263. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  1264. package/dist/routing/status-file-lint.d.ts +0 -33
  1265. package/dist/routing/status-file-lint.d.ts.map +0 -1
  1266. package/dist/search-params/analyze.d.ts +0 -54
  1267. package/dist/search-params/analyze.d.ts.map +0 -1
  1268. package/dist/search-params/builtin-codecs.d.ts +0 -105
  1269. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  1270. package/dist/search-params/codecs.d.ts +0 -53
  1271. package/dist/search-params/codecs.d.ts.map +0 -1
  1272. package/dist/search-params/create.d.ts +0 -106
  1273. package/dist/search-params/create.d.ts.map +0 -1
  1274. package/dist/search-params/registry.d.ts +0 -20
  1275. package/dist/search-params/registry.d.ts.map +0 -1
  1276. package/dist/server/client-module-map.d.ts +0 -47
  1277. package/dist/server/client-module-map.d.ts.map +0 -1
  1278. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  1279. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  1280. package/dist/server/dev-logger.d.ts.map +0 -1
  1281. package/dist/server/dev-span-processor.d.ts +0 -29
  1282. package/dist/server/dev-span-processor.d.ts.map +0 -1
  1283. package/dist/server/dev-warnings.d.ts +0 -129
  1284. package/dist/server/dev-warnings.d.ts.map +0 -1
  1285. package/dist/server/flush.d.ts +0 -74
  1286. package/dist/server/flush.d.ts.map +0 -1
  1287. package/dist/server/manifest-status-resolver.d.ts +0 -58
  1288. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  1289. package/dist/server/prerender.d.ts +0 -77
  1290. package/dist/server/prerender.d.ts.map +0 -1
  1291. package/dist/server/tree-builder.d.ts +0 -126
  1292. package/dist/server/tree-builder.d.ts.map +0 -1
  1293. package/dist/utils/directive-parser.d.ts +0 -70
  1294. package/dist/utils/directive-parser.d.ts.map +0 -1
  1295. package/src/cache/register-cached-function.ts +0 -103
  1296. package/src/client/browser-entry.ts +0 -678
  1297. package/src/client/head.ts +0 -61
  1298. package/src/client/link-status-provider.tsx +0 -30
  1299. package/src/client/segment-merger.ts +0 -339
  1300. package/src/client/stale-reload.ts +0 -87
  1301. package/src/client/transition-root.tsx +0 -166
  1302. package/src/client/use-navigation-pending.ts +0 -38
  1303. package/src/client/use-params.ts +0 -141
  1304. package/src/content/index.ts +0 -13
  1305. package/src/plugins/cache-transform.ts +0 -199
  1306. package/src/plugins/dev-error-overlay.ts +0 -230
  1307. package/src/plugins/dynamic-transform.ts +0 -161
  1308. package/src/plugins/server-action-exports.ts +0 -220
  1309. package/src/routing/status-file-lint.ts +0 -112
  1310. package/src/search-params/analyze.ts +0 -192
  1311. package/src/search-params/builtin-codecs.ts +0 -228
  1312. package/src/search-params/codecs.ts +0 -153
  1313. package/src/search-params/create.ts +0 -321
  1314. package/src/search-params/registry.ts +0 -31
  1315. package/src/server/client-module-map.ts +0 -58
  1316. package/src/server/dev-fetch-instrumentation.ts +0 -96
  1317. package/src/server/dev-span-processor.ts +0 -78
  1318. package/src/server/dev-warnings.ts +0 -283
  1319. package/src/server/flush.ts +0 -182
  1320. package/src/server/manifest-status-resolver.ts +0 -215
  1321. package/src/server/prerender.ts +0 -139
  1322. package/src/server/tree-builder.ts +0 -382
  1323. package/src/shims/server-only-noop.js +0 -6
  1324. package/src/utils/directive-parser.ts +0 -529
package/src/index.ts CHANGED
@@ -1,371 +1,425 @@
1
+ /**
2
+ * @timber-js/app — Root entry point (public API).
3
+ *
4
+ * User-facing exports: timber(), defineConfig(), TimberUserConfig, Routes.
5
+ *
6
+ * Internal helpers (PluginContext, resolveAppDir, loadTimberConfigFile,
7
+ * warnConfigConflicts, resolveClientJavascript) live in plugin-context.ts
8
+ * and are NOT re-exported here. Sub-plugins import them via relative paths.
9
+ *
10
+ * Design doc: 18-build-system.md §"Plugin Architecture"
11
+ */
12
+
1
13
  import type { Plugin, PluginOption } from 'vite';
2
- import { existsSync } from 'node:fs';
3
- import { join } from 'node:path';
4
- import { pathToFileURL } from 'node:url';
14
+ import type { ReactCompilerOptions } from '@vitejs/plugin-react';
15
+ import { createLogger } from 'vite';
16
+ import { join, relative, resolve } from 'node:path';
5
17
  import { createRequire } from 'node:module';
6
18
  import react from '@vitejs/plugin-react';
7
- import { cacheTransformPlugin } from './plugins/cache-transform';
8
- import { timberContent } from './plugins/content';
9
- import { timberDevServer } from './plugins/dev-server';
10
- import { timberEntries } from './plugins/entries';
11
- import { timberMdx } from './plugins/mdx';
12
- import { timberRouting } from './plugins/routing';
13
- import { timberShims } from './plugins/shims';
14
- import { timberFonts } from './plugins/fonts';
15
- import { timberStaticBuild } from './plugins/static-build';
16
- import { timberDynamicTransform } from './plugins/dynamic-transform';
17
- import { timberServerActionExports } from './plugins/server-action-exports';
18
- import { timberBuildManifest } from './plugins/build-manifest';
19
- import { timberDevLogs } from './plugins/dev-logs';
20
- import { timberReactProd } from './plugins/react-prod';
21
- import { timberChunks } from './plugins/chunks';
22
- import { timberServerBundle } from './plugins/server-bundle';
23
- import { timberAdapterBuild } from './plugins/adapter-build';
24
- import { timberBuildReport } from './plugins/build-report';
25
- import type { RouteTree } from './routing/types';
26
- import type { BuildManifest } from './server/build-manifest';
27
- import type { StartupTimer } from './utils/startup-timer';
28
- import { createStartupTimer, createNoopTimer } from './utils/startup-timer';
29
-
30
- /** Configuration for client-side JavaScript output. */
31
- export interface ClientJavascriptConfig {
32
- /** When true, no client JS bundles are emitted or referenced in HTML. */
33
- disabled: boolean;
34
- /**
35
- * When `disabled` is true, still inject the Vite HMR client in dev mode
36
- * so hot reloading works during development. Default: true.
37
- */
38
- enableHMRInDev?: boolean;
39
- }
19
+ import { timberContent } from './plugins/content.ts';
20
+ import { timberDevServer } from './plugins/dev-server.ts';
21
+ import { timberEntries } from './plugins/entries.ts';
22
+ import { timberMdx } from './plugins/mdx.ts';
23
+ import { timberRouting } from './plugins/routing.ts';
24
+ import { timberShims } from './plugins/shims.ts';
25
+ import { timberFonts } from './plugins/fonts.ts';
26
+ import { timberStaticBuild } from './plugins/static-build.ts';
27
+ import { timberBuildManifest } from './plugins/build-manifest.ts';
28
+ import { timberDevLogs, originalConsole, wrapLoggerWithOriginalConsole } from './dev-tools/logs.ts';
29
+ import { resolveForwardConsole } from './dev-tools/browser-logs.ts';
30
+ import { timberReactProd } from './plugins/react-prod.ts';
31
+ import { timberChunks } from './plugins/chunks.ts';
32
+ import { clientChunkGroup } from './plugins/client-chunks.ts';
33
+ import { timberServerBundle } from './plugins/server-bundle.ts';
34
+ import { timberCacheTransform } from './plugins/cache.ts';
35
+ import { timberRequestDep } from './plugins/request-dep/index.ts';
36
+ import { timberPrebuilt } from './plugins/prebuilt.ts';
37
+ import { timberPrerenderSugar } from './plugins/prerender-sugar.ts';
38
+ import { timberCloudflareWasm } from './plugins/cloudflare-wasm.ts';
39
+ import { timberAdapterBuild } from './plugins/adapter-build.ts';
40
+ import { timberBuildReport } from './plugins/build-report.ts';
41
+ import { createNoopTimer } from './utils/startup-timer.ts';
42
+ import {
43
+ validateConfig,
44
+ formatConfigErrors,
45
+ checkPeerDependencies,
46
+ formatMissingPeers,
47
+ } from './config-validation.ts';
48
+ import {
49
+ resolveEncryptionKeyExpression,
50
+ shouldEnableEncryption,
51
+ } from './server/action-encryption.ts';
52
+ import { createHoldingServer } from './dev-tools/holding-server.ts';
53
+ import { resolveStartPort } from './server/port-resolution.ts';
54
+ import type { TimberUserConfig } from './config-types.ts';
55
+ import type { PluginContext, TimberPluginApi } from './plugin-context.ts';
56
+ import {
57
+ createPluginContext,
58
+ loadTimberConfigFile,
59
+ mergeFileConfig,
60
+ resolveAppDir,
61
+ resolveClientJavascript,
62
+ resolveBuildDir,
63
+ } from './plugin-context.ts';
40
64
 
41
- /** Fully resolved client JavaScript configuration (no optionals). */
42
- export interface ResolvedClientJavascript {
43
- disabled: boolean;
44
- enableHMRInDev: boolean;
45
- }
65
+ // ── Public API ────────────────────────────────────────────────────────────
46
66
 
47
- export interface TimberUserConfig {
48
- output?: 'server' | 'static';
49
- /**
50
- * Enable timber debug logging in production builds.
51
- *
52
- * When `true`, timber's own diagnostics (dev warnings, verbose logging)
53
- * are active even in production mode. React stays in production mode —
54
- * only timber's logs are affected.
55
- *
56
- * Can also be enabled at runtime via the `TIMBER_DEBUG` environment variable.
57
- *
58
- * Default: `false`.
59
- */
60
- debug?: boolean;
61
- /**
62
- * Control client-side JavaScript output.
63
- *
64
- * Boolean shorthand:
65
- * `clientJavascript: false` disables all client JS (equivalent to `{ disabled: true }`).
66
- * `clientJavascript: true` enables client JS (the default).
67
- *
68
- * Object form:
69
- * `clientJavascript: { disabled: true, enableHMRInDev: true }` disables client JS
70
- * in production but preserves Vite HMR in dev mode.
71
- *
72
- * When `disabled` is true, `enableHMRInDev` defaults to `true`.
73
- * Server-side JS still runs — this only affects what is sent to the browser.
74
- */
75
- clientJavascript?: boolean | ClientJavascriptConfig;
76
- adapter?: unknown;
77
- cacheHandler?: unknown;
78
- allowedOrigins?: string[];
79
- csrf?: boolean;
80
- limits?: {
81
- actionBodySize?: string;
82
- uploadBodySize?: string;
83
- maxFields?: number;
84
- };
85
- pageExtensions?: string[];
86
- /**
87
- * Slow request threshold in milliseconds. Requests exceeding this emit
88
- * a warning via the logger. Set to 0 to disable. Default: 3000.
89
- *
90
- * See design/17-logging.md §"slowRequestMs".
91
- */
92
- slowRequestMs?: number;
93
- /** Dev-mode options. These have no effect in production builds. */
94
- dev?: {
95
- /** Threshold in ms to highlight slow phases in dev logging output. Default: 200. */
96
- slowPhaseMs?: number;
97
- };
98
- /**
99
- * Cookie signing configuration. See design/29-cookies.md §"Signed Cookies".
100
- *
101
- * Provide `secret` for a single key, or `secrets` (array) for key rotation.
102
- * When `secrets` is used, index 0 is the signing key; all are tried for verification.
103
- */
104
- cookies?: {
105
- /** Single signing secret. Shorthand for `secrets: [secret]`. */
106
- secret?: string;
107
- /** Array of signing secrets for key rotation. Index 0 signs; all verify. */
108
- secrets?: string[];
109
- };
110
- /**
111
- * Control Server-Timing header output.
112
- *
113
- * - `'detailed'` — per-phase breakdown (proxy, middleware, render). Useful
114
- * for APM / network monitoring. Exposes phase names to clients.
115
- * - `'total'` — single `total;dur=N` entry. Safe to expose, gives
116
- * browser DevTools useful timing without internal details.
117
- * - `false` — no Server-Timing header at all.
118
- *
119
- * Default: `'detailed'` in dev, `'total'` in production.
120
- *
121
- * This is separate from `debug` / `TIMBER_DEBUG` — it's an intentional
122
- * decision to expose timing data to clients, not a side effect of debug
123
- * logging.
124
- */
125
- serverTiming?: 'detailed' | 'total' | false;
126
- /**
127
- * Override the app directory location. By default, timber auto-detects
128
- * `app/` at the project root, falling back to `src/app/`.
129
- *
130
- * Set this to a relative path from the project root (e.g. `'src/app'`)
131
- * to use a custom location.
132
- */
133
- appDir?: string;
134
- /** MDX compilation options passed to @mdx-js/rollup. See design/20-content-collections.md. */
135
- mdx?: {
136
- remarkPlugins?: unknown[];
137
- rehypePlugins?: unknown[];
138
- recmaPlugins?: unknown[];
139
- remarkRehypeOptions?: Record<string, unknown>;
140
- };
141
- /**
142
- * Built-in top-loader progress bar for client navigations.
143
- * Shows an animated bar at the top of the viewport during RSC navigations.
144
- * Enabled by default — set `enabled: false` to opt out.
145
- *
146
- * Users who want a fully custom progress indicator should disable this
147
- * and use `useNavigationPending()` directly.
148
- *
149
- * See LOCAL-336 for design decisions.
150
- */
151
- topLoader?: {
152
- /** Whether the top-loader is enabled. Default: true. */
153
- enabled?: boolean;
154
- /** Bar color. Default: '#2299DD'. */
155
- color?: string;
156
- /** Bar height in pixels. Default: 3. */
157
- height?: number;
158
- /** Show subtle glow/shadow effect. Default: true. */
159
- shadow?: boolean;
160
- /** Delay in ms before showing the bar (avoids flash on fast navs). Default: 0. */
161
- delay?: number;
162
- /** CSS z-index. Default: 1600. */
163
- zIndex?: number;
164
- };
165
- }
67
+ export type { TimberUserConfig } from './config-types.ts';
68
+
69
+ // Metadata route handler types — re-exported so user-authored metadata
70
+ // route files (sitemap.ts, robots.ts, manifest.ts, icon.tsx, etc.) can
71
+ // import them from the package root without reaching into ./server.
72
+ // The canonical location for these types is '@timber-js/app/server'; this
73
+ // root re-export is a convenience for typed metadata route handlers.
74
+ // See design/16-metadata.md §"Metadata Routes".
75
+ export type { Metadata, MetadataRoute, MetadataHandler, MetadataResult } from './server/types.ts';
166
76
 
167
77
  /**
168
- * Resolve `clientJavascript` into a fully resolved config.
78
+ * Route map interface — augmented by the generated timber-routes.d.ts.
79
+ *
80
+ * Each key is a route path pattern. Values have:
81
+ * segmentParams: shape of URL segment params (e.g. { id: string })
82
+ *
83
+ * There is no `searchParams` member: since TIM-1343 the framework does not
84
+ * scan for search-param definitions, so it has nothing to type them with. A
85
+ * definition carries its own type to call sites through an ordinary import.
86
+ *
87
+ * This interface is empty by default and populated via codegen.
88
+ * See design/09-typescript.md §"Typed Routes".
169
89
  */
170
- export function resolveClientJavascript(config: TimberUserConfig): ResolvedClientJavascript {
171
- if (config.clientJavascript !== undefined) {
172
- if (typeof config.clientJavascript === 'boolean') {
173
- // `clientJavascript: false` → disabled
174
- // `clientJavascript: true` → enabled (default)
175
- return {
176
- disabled: !config.clientJavascript,
177
- enableHMRInDev: !config.clientJavascript, // default true when disabled
178
- };
179
- }
180
- // Object form
181
- return {
182
- disabled: config.clientJavascript.disabled,
183
- enableHMRInDev: config.clientJavascript.enableHMRInDev ?? config.clientJavascript.disabled,
184
- };
185
- }
186
-
187
- // Default: client JS enabled
188
- return { disabled: false, enableHMRInDev: false };
189
- }
90
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type, typescript/no-empty-interface
91
+ export interface Routes {}
190
92
 
191
93
  /**
192
- * Shared context object passed to all sub-plugins via closure.
94
+ * Type-safe helper for timber.config.ts files.
95
+ *
96
+ * A pass-through identity function that provides autocomplete and
97
+ * type checking for timber configuration. No runtime validation —
98
+ * purely a DX convenience (same pattern as Vite's defineConfig).
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * // timber.config.ts
103
+ * import { defineConfig } from '@timber-js/app';
193
104
  *
194
- * Sub-plugins communicate through this context — not through Vite's
195
- * plugin API or global state.
196
- * See design/18-build-system.md §"Shared Plugin Context".
105
+ * export default defineConfig({
106
+ * output: 'server',
107
+ * pageExtensions: ['tsx', 'ts', 'mdx'],
108
+ * });
109
+ * ```
197
110
  */
198
- export interface PluginContext {
199
- config: TimberUserConfig;
200
- /** Resolved client JavaScript configuration */
201
- clientJavascript: ResolvedClientJavascript;
202
- /** The scanned route tree (populated by timber-routing, consumed by timber-entries) */
203
- routeTree: RouteTree | null;
204
- /** Absolute path to the app/ directory */
205
- appDir: string;
206
- /** Absolute path to the project root */
207
- root: string;
208
- /** Whether the dev server is running (set by timber-root-sync in configResolved) */
209
- dev: boolean;
210
- /** CSS build manifest (populated by adapter after client build, null in dev) */
211
- buildManifest: BuildManifest | null;
212
- /** Startup timer for profiling cold start phases (active in dev, no-op in prod) */
213
- timer: StartupTimer;
111
+ export function defineConfig(config: TimberUserConfig): TimberUserConfig {
112
+ return config;
214
113
  }
215
114
 
115
+ // ── Private helpers ───────────────────────────────────────────────────────
116
+
216
117
  /**
217
- * Resolve the app directory. Checks (in order):
218
- * 1. Explicit `configAppDir` from timber.config.ts
219
- * 2. `<root>/app`
220
- * 3. `<root>/src/app`
118
+ * Build the options object for @vitejs/plugin-rsc.
221
119
  *
222
- * Throws if none exist.
120
+ * Uses a getter for `enableActionEncryption` so the RSC plugin reads
121
+ * the value lazily — after ctx.dev is set in configResolved. This lets
122
+ * `actionEncryption.disableInDev` work correctly even though the RSC
123
+ * plugin is created before Vite resolves the command.
223
124
  */
224
- export function resolveAppDir(root: string, configAppDir?: string): string {
225
- if (configAppDir) {
226
- const explicit = join(root, configAppDir);
227
- if (!existsSync(explicit)) {
228
- throw new Error(`[timber] Configured appDir "${configAppDir}" does not exist at ${explicit}`);
229
- }
230
- return explicit;
231
- }
125
+ function createRscOptions(
126
+ ctx: PluginContext,
127
+ encryptionKeyExpr: string | undefined
128
+ ): Record<string, unknown> {
129
+ const options: Record<string, unknown> = {
130
+ serverHandler: false,
131
+ customClientEntry: true,
132
+ entries: {
133
+ rsc: 'virtual:timber-rsc-entry',
134
+ ssr: 'virtual:timber-ssr-entry',
135
+ client: 'virtual:timber-browser-entry',
136
+ },
137
+ // Group client references by layout boundary to balance route-scoped code
138
+ // splitting with HTTP request count. A constant group name ('client-refs')
139
+ // would collapse all routes into one chunk — any page downloads every
140
+ // client component. Per-serverChunk grouping creates many sub-500B files.
141
+ // Layout-boundary grouping is the middle ground: components under the same
142
+ // layout segment share a chunk. See design/27-chunking-strategy.md, TIM-440, TIM-499.
143
+ clientChunks: (meta: { id: string; normalizedId: string; serverChunk: string }) =>
144
+ clientChunkGroup(meta, ctx.appDir, ctx.root, ctx.sharedModuleFacades),
145
+ };
232
146
 
233
- const rootApp = join(root, 'app');
234
- if (existsSync(rootApp)) return rootApp;
147
+ // Bound args encryption — AES-256-GCM authenticated encryption for
148
+ // closure variables in 'use server' functions. Always on in production,
149
+ // configurable in dev. See design/08-forms-and-actions.md §"Bound Args Encryption".
150
+ //
151
+ // Uses a getter so the RSC plugin reads the value lazily in its transform
152
+ // hooks, after ctx.dev is set in configResolved. This lets disableInDev
153
+ // work correctly — ctx.dev is false at construction time but true during
154
+ // dev server transforms.
155
+ Object.defineProperty(options, 'enableActionEncryption', {
156
+ get() {
157
+ return shouldEnableEncryption(ctx.dev, ctx.config.actionEncryption);
158
+ },
159
+ enumerable: true,
160
+ });
235
161
 
236
- const srcApp = join(root, 'src', 'app');
237
- if (existsSync(srcApp)) return srcApp;
162
+ // When TIMBER_ACTIONS_ENCRYPTION_KEY is set, pass it as a runtime expression
163
+ // so the RSC plugin uses it instead of auto-generating a per-build key.
164
+ if (encryptionKeyExpr) {
165
+ options.defineEncryptionKey = encryptionKeyExpr;
166
+ }
238
167
 
239
- throw new Error(
240
- `[timber] Could not find app directory. Expected "app/" or "src/app/" in ${root}. ` +
241
- `You can set appDir in timber.config.ts to specify a custom location.`
242
- );
168
+ return options;
243
169
  }
244
170
 
245
- function createPluginContext(config?: TimberUserConfig, root?: string): PluginContext {
246
- const projectRoot = root ?? process.cwd();
247
- const resolvedConfig: TimberUserConfig = { output: 'server', ...config };
248
- // Timer starts as active — swapped to noop in configResolved for production builds
249
- return {
250
- config: resolvedConfig,
251
- clientJavascript: resolveClientJavascript(resolvedConfig),
252
- routeTree: null,
253
- appDir: join(projectRoot, 'app'),
254
- root: projectRoot,
255
- dev: false,
256
- buildManifest: null,
257
- timer: createStartupTimer(),
258
- };
259
- }
171
+ // NOTE: 'use cache' directive transform removed — future feature pending design doc.
172
+ // The timber.cache() API (createCache) remains available for explicit caching.
173
+ // See design/06-caching.md.
260
174
 
261
- /**
262
- * Load timber.config.ts (or .js, .mjs) from the project root.
263
- * Returns the config object or null if no config file is found.
264
- */
265
- async function loadTimberConfigFile(root: string): Promise<TimberUserConfig | null> {
266
- const configNames = ['timber.config.ts', 'timber.config.js', 'timber.config.mjs'];
267
-
268
- for (const name of configNames) {
269
- const configPath = join(root, name);
270
- if (existsSync(configPath)) {
271
- const mod = await import(pathToFileURL(configPath).href);
272
- return (mod.default ?? mod) as TimberUserConfig;
273
- }
274
- }
275
- return null;
276
- }
175
+ // ── Main plugin factory ──────────────────────────────────────────────────
277
176
 
278
177
  /**
279
- * Detect config keys set in both inline (vite.config.ts) and file (timber.config.ts)
280
- * and warn the user. The `output` key is excluded because it defaults to 'server'
281
- * in createPluginContext and would always appear as an inline key.
178
+ * Create the timber Vite plugin array.
282
179
  *
283
- * Returns the list of conflicting key names (for testing).
180
+ * Loads timber.config.ts and all dependencies synchronously before
181
+ * constructing the plugin array. This ensures ALL plugins — including
182
+ * the RSC plugin and React Compiler — see the fully merged config
183
+ * (inline + file-based). No async, no deferred config, no stale reads.
184
+ *
185
+ * Requires Node >= 22.12 for synchronous require() of ESM modules
186
+ * (@vitejs/plugin-rsc is ESM-only).
187
+ *
188
+ * Previous versions used async loading and deferred config merging,
189
+ * causing file-based config for reactCompiler, actionEncryption, and
190
+ * output mode to be silently ignored. See TIM-451.
284
191
  */
285
- export function warnConfigConflicts(
286
- inline: TimberUserConfig,
287
- fileConfig: TimberUserConfig
288
- ): string[] {
289
- const conflicts: string[] = [];
290
- for (const key of Object.keys(fileConfig) as (keyof TimberUserConfig)[]) {
291
- if (key === 'output') continue;
292
- if (key in inline && inline[key] !== undefined) {
293
- conflicts.push(key);
294
- }
295
- }
296
- if (conflicts.length > 0) {
297
- console.warn(
298
- `[timber] Config conflict: ${conflicts.map((k) => `"${k}"`).join(', ')} set in both ` +
299
- `vite.config.ts (inline) and timber.config.ts. ` +
300
- `Move all config to timber.config.ts to avoid confusion. ` +
301
- `The inline value from vite.config.ts will be used.`
302
- );
303
- }
304
- return conflicts;
305
- }
306
-
307
192
  /**
308
- * Merge file-based config into ctx.config. Inline config (already in ctx.config)
309
- * takes precedence — file config only fills in missing fields.
193
+ * Wrap plugin-react's `vite:react-compiler` configResolved so it always
194
+ * sees `isProduction: true` during builds. The compiler plugin uses
195
+ * `!config.isProduction` to decide whether to emit jsxDEV calls, but
196
+ * Vite derives isProduction from process.env.NODE_ENV — which may be
197
+ * "development" in the shell. Rather than mutating the env, we pass a
198
+ * prototype-based view with the single property overridden.
310
199
  */
311
- function mergeFileConfig(ctx: PluginContext, fileConfig: TimberUserConfig): void {
312
- const inline = ctx.config;
313
-
314
- // Warn if the same key is set in both places
315
- warnConfigConflicts(inline, fileConfig);
316
-
317
- // For each top-level key, use inline value if present, otherwise file value
318
- ctx.config = {
319
- ...fileConfig,
320
- ...inline,
321
- // Deep merge for nested objects where both exist
322
- ...(fileConfig.limits && inline.limits
323
- ? { limits: { ...fileConfig.limits, ...inline.limits } }
324
- : {}),
325
- ...(fileConfig.dev && inline.dev ? { dev: { ...fileConfig.dev, ...inline.dev } } : {}),
326
- ...(fileConfig.mdx && inline.mdx ? { mdx: { ...fileConfig.mdx, ...inline.mdx } } : {}),
327
- };
328
- }
329
-
330
- function timberCache(_ctx: PluginContext): Plugin {
331
- return cacheTransformPlugin();
200
+ function patchReactCompilerForProdJsx(plugins: PluginOption[]): PluginOption[] {
201
+ for (const p of plugins) {
202
+ if (p && typeof p === 'object' && 'name' in p && p.name === 'vite:react-compiler') {
203
+ const orig = (p as Plugin).configResolved;
204
+ if (typeof orig === 'function') {
205
+ (p as Plugin).configResolved = function (config) {
206
+ const view =
207
+ config.command === 'build' && !config.isProduction
208
+ ? Object.create(config, { isProduction: { value: true } })
209
+ : config;
210
+ return orig.call(this, view);
211
+ };
212
+ }
213
+ }
214
+ }
215
+ return plugins;
332
216
  }
333
217
 
334
218
  export function timber(config?: TimberUserConfig): PluginOption[] {
335
219
  const ctx = createPluginContext(config);
336
- // Sync ctx.root and ctx.appDir with Vite's resolved root, which may
337
- // differ from process.cwd() when --config points to a subdirectory.
338
- // Also loads timber.config.ts and merges it into ctx.config (inline config wins).
220
+
221
+ // Resolve dependencies from the consumer's project (process.cwd()),
222
+ // not from timber's own node_modules. This is critical for pnpm link:
223
+ // when linked, timber's node_modules has a separate vite instance, and
224
+ // the RSC plugin must use the same vite instance as the dev server.
225
+ const consumerRequire = createRequire(join(process.cwd(), 'package.json'));
226
+
227
+ // ── Step 1: Load @vitejs/plugin-rsc ─────────────────────────────────
228
+ // Synchronous require() works for ESM modules on Node 22.12+.
229
+ ctx.timer.start('rsc-plugin-import');
230
+ const rscMod = consumerRequire('@vitejs/plugin-rsc');
231
+ const vitePluginRsc = rscMod.default ?? rscMod;
232
+ ctx.timer.end('rsc-plugin-import');
233
+
234
+ // ── Step 2: Compute config-dependent options ────────────────────────
235
+ // encryptionKeyExpr is env-based and doesn't depend on file config.
236
+ const encryptionKeyExpr = resolveEncryptionKeyExpression();
237
+
238
+ // ── Step 3: Pre-load file config for plugin resolution ──────────────
239
+ // Load timber.config.ts eagerly from process.cwd() so we can resolve
240
+ // plugins (like React Compiler) and add them to the top-level array.
241
+ // Vite's config() hook return type is Omit<UserConfig, 'plugins'> —
242
+ // plugins returned from config() are silently ignored. See TIM-632.
243
+ //
244
+ // The config() hook still loads from the correct Vite root (which may
245
+ // differ from cwd in monorepo setups — see TIM-498), but only for
246
+ // non-plugin config merging.
247
+ const earlyFileConfig = loadTimberConfigFile(process.cwd());
248
+
249
+ // ── Step 4: Build rootSync plugin ───────────────────────────────────
250
+
251
+ // rootSync loads timber.config.ts from Vite's resolved root and merges
252
+ // it into ctx.config. Plugin resolution is handled eagerly above — the
253
+ // config() hook must NOT return a `plugins` field (Vite ignores it).
339
254
  const rootSync: Plugin = {
340
255
  name: 'timber-root-sync',
341
- async config(userConfig, { command }) {
342
- // Load timber.config.ts early — before configResolved/buildStart — so
343
- // all plugins (including timber-mdx) see the merged config in their
344
- // buildStart hooks. The config hook runs once and supports async.
345
- const root = userConfig.root ?? process.cwd();
256
+
257
+ // The plugin context, published for out-of-band callers that need the
258
+ // *resolved* configuration rather than a second reading of the files it
259
+ // came from. `timber check` is the one today: it runs Vite's
260
+ // `resolveConfig()` and reads root, appDir, and pageExtensions from here,
261
+ // so it scans exactly the tree `timber build` builds — including config
262
+ // passed inline as `timber({ ... })`, which lives only in this closure and
263
+ // is invisible to anything that re-reads `timber.config.ts`. See
264
+ // `cli-check.ts` and design/11-platform.md §`timber check`.
265
+ //
266
+ // Valid from `configResolved` onward; `appDir` and `root` are unset before
267
+ // that, which is why the reader runs a full `resolveConfig()` rather than
268
+ // just loading the config file.
269
+ api: { getContext: () => ctx } satisfies TimberPluginApi,
270
+
271
+ async config(userConfig, { command, isPreview }) {
272
+ // ── Load timber.config.ts from the correct root ───────────────
273
+ // Vite's `config` hook fires before `configResolved`. The user's
274
+ // `root` option (if set) tells us where the project lives.
275
+ // `resolve()` mirrors Vite's own root resolution logic.
276
+ const viteRoot = resolve(userConfig.root ?? process.cwd());
346
277
  ctx.timer.start('config-load');
347
- const fileConfig = await loadTimberConfigFile(root);
278
+ const fileConfig = loadTimberConfigFile(viteRoot);
348
279
  if (fileConfig) {
349
- mergeFileConfig(ctx, fileConfig);
280
+ ctx.config = mergeFileConfig(ctx.config, fileConfig);
350
281
  ctx.clientJavascript = resolveClientJavascript(ctx.config);
351
282
  }
283
+ // Apply defaults AFTER merge so file-based config isn't overridden
284
+ // by defaults that were baked into the inline config object.
285
+ ctx.config.output ??= 'server';
352
286
  ctx.timer.end('config-load');
353
287
 
354
- // Force production JSX transform for builds.
288
+ // ── Resolve build output directory ─────────────────────────
289
+ // Priority: timber.config.ts `buildDir` > Vite `build.outDir` > .timber/dist
290
+ // Set Vite's build.outDir so the RSC plugin and all environment
291
+ // builds write to the correct location.
292
+ const viteOutDir = userConfig.build?.outDir;
293
+ const timberBuildDir = ctx.config.buildDir;
294
+ const resolvedRoot = resolve(userConfig.root ?? process.cwd());
295
+ ctx.buildDir = resolveBuildDir(resolvedRoot, timberBuildDir, viteOutDir);
296
+
297
+ // Warn if the Vite root differs from cwd and the re-loaded config
298
+ // has reactCompiler but the early cwd-based load missed it. In this
299
+ // edge case the user must move reactCompiler to inline config.
300
+ if (viteRoot !== process.cwd()) {
301
+ const hasCompilerInReloaded = !config?.reactCompiler && ctx.config.reactCompiler;
302
+ const hadCompilerInEarly = !config?.reactCompiler && earlyFileConfig?.reactCompiler;
303
+ if (hasCompilerInReloaded && !hadCompilerInEarly) {
304
+ console.warn(
305
+ '[timber] reactCompiler is set in timber.config.ts but could not be ' +
306
+ 'registered because the config file is in a non-cwd root directory. ' +
307
+ 'Move reactCompiler to the inline timber() config in vite.config.ts, or ' +
308
+ 'run vite from the project root directory.'
309
+ );
310
+ }
311
+ }
312
+
313
+ // Force production JSX for builds.
314
+ //
315
+ // Vite derives `config.isProduction` from `process.env.NODE_ENV`.
316
+ // If the shell has NODE_ENV=development, isProduction stays false
317
+ // and Vite's built-in OXC transform emits jsxDEV calls (the
318
+ // production jsx-runtime doesn't export jsxDEV). The oxc.jsx
319
+ // override below fixes Vite's native path; plugin-react's compiler
320
+ // plugin is handled by patchReactCompilerForProdJsx above.
321
+ // ── Resolve dev/preview port (TIM-842) ───────────────────────
322
+ // Default port is 3000. Vite handles conflicts and honors server.strictPort.
355
323
  //
356
- // Vite determines dev vs prod JSX via `isProduction`, which checks
357
- // `process.env.NODE_ENV === 'production'`. If the shell has
358
- // NODE_ENV=development (common in dev toolchains), `vite build`
359
- // respects that and emits jsxDEV calls with fileName/lineNumber
360
- // args. This causes runtime crashes because the production React
361
- // jsx-runtime doesn't export jsxDEV, and also leaks file paths
362
- // into production bundles (security concern).
324
+ // For dev (`command === 'serve' && !isPreview`) we start the
325
+ // holding server on the requested port when available.
363
326
  //
364
- // We explicitly set `oxc.jsx.development: false` for builds so
365
- // the client bundle always uses jsx/jsxs from react/jsx-runtime,
366
- // regardless of the ambient NODE_ENV value.
327
+ // For `vite preview` (`command === 'serve' && isPreview`) we
328
+ // resolve the config/env port but delegate the actual bind +
329
+ // auto-bump to Vite's own preview server. Starting the holding
330
+ // server in preview mode would self-conflict because the dev
331
+ // plugin's `configureServer` handoff does not run for preview;
332
+ // the holding server would keep the port occupied while Vite's
333
+ // preview tried to bind the same port.
334
+ //
335
+ // See design/21-dev-server.md §"Default Port and Auto-Bump".
336
+ let resolvedDevPort: number | null = null;
337
+ let resolvedDevPortExplicit = false;
338
+ // Middleware-mode embeddings (the analyze crawl, custom servers)
339
+ // never bind a port, and the dev-server plugin's listen() handoff
340
+ // that closes the holding server never runs — starting it would
341
+ // occupy the default port for the embedding's lifetime.
342
+ const isMiddlewareMode = Boolean(userConfig.server?.middlewareMode);
343
+ // Resolve the host Vite will bind so the holding server probes the
344
+ // same address. Vite defaults to 'localhost' when server.host is
345
+ // unset; binding wildcard (no host) would mask conflicts on
346
+ // localhost due to SO_REUSEADDR address-family differences. TIM-1419.
347
+ const resolvedHost =
348
+ typeof userConfig.server?.host === 'string'
349
+ ? userConfig.server.host
350
+ : userConfig.server?.host === true
351
+ ? undefined
352
+ : 'localhost';
353
+ if (command === 'serve' && !isPreview && !isMiddlewareMode) {
354
+ const start = resolveStartPort({
355
+ configPort: userConfig.server?.port,
356
+ envPort: process.env.PORT,
357
+ });
358
+ // Vite owns port selection and remembers its bound port on restart.
359
+ // Never forward a probed/bumped port: replacement config runs while
360
+ // the old listener still owns the port. The holding page is optional.
361
+ resolvedDevPort = start.port;
362
+ resolvedDevPortExplicit = userConfig.server?.strictPort ?? false;
363
+ if (start.port !== 0) {
364
+ ctx.holdingServer = createHoldingServer();
365
+ await ctx.holdingServer.listen(start.port, resolvedHost).catch(() => {
366
+ ctx.holdingServer = null;
367
+ });
368
+ }
369
+ } else if (command === 'serve' && isPreview) {
370
+ // Preview mode: resolve the starting port from config/env/
371
+ // default but do NOT probe. Vite's preview server handles the
372
+ // bind itself, with `preview.strictPort` controlling whether
373
+ // an in-use port auto-bumps (implicit) or errors (explicit).
374
+ const previewConfigPort =
375
+ typeof userConfig.preview?.port === 'number'
376
+ ? userConfig.preview.port
377
+ : typeof userConfig.server?.port === 'number'
378
+ ? userConfig.server.port
379
+ : undefined;
380
+ const start = resolveStartPort({
381
+ configPort: previewConfigPort,
382
+ envPort: process.env.PORT,
383
+ });
384
+ resolvedDevPort = start.port;
385
+ resolvedDevPortExplicit = start.explicit;
386
+ }
387
+
388
+ // Derive relative buildOutDir from the absolute ctx.buildDir (set above)
389
+ // so Vite's config receives a root-relative path.
390
+ const buildOutDir = relative(resolvedRoot, ctx.buildDir);
391
+
392
+ // Set per-environment build.outDir so Vite's RSC plugin writes
393
+ // each environment to the correct subdirectory under our buildDir.
394
+ // Without this, the RSC plugin defaults to dist/<envName> instead
395
+ // of <buildOutDir>/<envName>.
396
+ const envOutDirs: Record<string, { build: { outDir: string } }> = {};
397
+ for (const envName of ['rsc', 'ssr', 'client']) {
398
+ envOutDirs[envName] = { build: { outDir: join(buildOutDir, envName) } };
399
+ }
400
+
401
+ // Exclude @timber-js/app packages from the dep optimizer.
402
+ // The shims plugin intercepts @timber-js/app/* imports per-environment
403
+ // (e.g. replacing @timber-js/app/server with a stub in the client env).
404
+ // The dep optimizer runs before per-environment resolution, so it would
405
+ // pre-bundle @timber-js/app/cookies with the real server code inlined,
406
+ // pulling AsyncLocalStorage into the browser bundle.
407
+ const timberOptimizeDepsExclude = [
408
+ '@timber-js/app',
409
+ '@timber-js/app/server',
410
+ '@timber-js/app/client',
411
+ '@timber-js/app/cookies',
412
+ '@timber-js/app/cache',
413
+ '@timber-js/app/search-params',
414
+ '@timber-js/app/params',
415
+ '@timber-js/app/codec',
416
+ ];
417
+
367
418
  if (command === 'build') {
368
419
  return {
420
+ build: { outDir: buildOutDir },
421
+ environments: envOutDirs,
422
+ optimizeDeps: { exclude: timberOptimizeDepsExclude },
369
423
  oxc: {
370
424
  jsx: {
371
425
  development: false,
@@ -373,11 +427,85 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
373
427
  },
374
428
  };
375
429
  }
430
+
431
+ // Dev/preview mode: set outDir so dev-time references are
432
+ // consistent, and surface the resolved port to Vite.
433
+ //
434
+ // Dev auto-bumps unless the user sets server.strictPort.
435
+ // Always forward the requested port so Vite can recognize unchanged
436
+ // config and reuse its actual bound port across restarts (TIM-1456).
437
+ //
438
+ // For `vite preview`, we set `preview.strictPort` based on
439
+ // whether the user explicitly set the port. Implicit (default)
440
+ // preview uses strictPort: false so Vite's preview server can
441
+ // auto-bump from 3000. Explicit preview uses strictPort: true
442
+ // so conflicts fail loudly, matching the dev behavior and the
443
+ // TIM-842 spec.
444
+ const serverConfig: {
445
+ port?: number;
446
+ strictPort?: boolean;
447
+ forwardConsole?: boolean | { unhandledErrors?: boolean; logLevels?: string[] };
448
+ } = {};
449
+ const previewConfig: { port?: number; strictPort?: boolean } = {};
450
+ if (resolvedDevPort != null) {
451
+ if (!isPreview) {
452
+ serverConfig.port = resolvedDevPort;
453
+ serverConfig.strictPort = resolvedDevPortExplicit;
454
+ }
455
+ previewConfig.port = resolvedDevPort;
456
+ previewConfig.strictPort = resolvedDevPortExplicit;
457
+ }
458
+
459
+ // Enable Vite 8's built-in browser→terminal console forwarding.
460
+ // Vite defaults this OFF for non-agent dev; timber enables it based
461
+ // on the devBrowserLogs config (default: 'warn'). See TIM-1152.
462
+ serverConfig.forwardConsole = resolveForwardConsole(ctx.config.devBrowserLogs);
463
+
464
+ // Provide a customLogger whose output routes through the pre-patched
465
+ // console methods so Vite's forwardConsole output never re-enters our
466
+ // server→browser patch. If the user supplied their own customLogger,
467
+ // wrap it so its console calls also bypass patching.
468
+ const customLogger = userConfig.customLogger
469
+ ? wrapLoggerWithOriginalConsole(userConfig.customLogger)
470
+ : createLogger(userConfig.logLevel ?? 'info', {
471
+ allowClearScreen: userConfig.clearScreen ?? true,
472
+ console: originalConsole as Console,
473
+ });
474
+
475
+ return {
476
+ build: { outDir: buildOutDir },
477
+ environments: envOutDirs,
478
+ optimizeDeps: { exclude: timberOptimizeDepsExclude },
479
+ customLogger,
480
+ server: serverConfig,
481
+ preview: previewConfig,
482
+ };
376
483
  },
377
484
  configResolved(resolved) {
378
485
  ctx.root = resolved.root;
379
486
  ctx.appDir = resolveAppDir(resolved.root, ctx.config.appDir);
380
487
  ctx.dev = resolved.command === 'serve';
488
+ // Vite's resolved base — the deployment path prefix. Captured once
489
+ // here so every sub-plugin that emits a URL (assets, fonts, RSC
490
+ // payloads) reads the same value. See TIM-1261.
491
+ ctx.base = resolved.base;
492
+
493
+ // Register all timber config file candidates as Vite config file
494
+ // dependencies so Vite's built-in restart-on-change handles them
495
+ // (including atomic writes that emit unlink+add instead of change).
496
+ // All candidates are registered — not just the one that exists — so
497
+ // that creating a config file after server start also triggers a
498
+ // restart. The watcher.add() call in dev-server.ts ensures all
499
+ // candidates are in the watch set.
500
+ // See design/21-dev-server.md §HMR Wiring.
501
+ const configNames = ['timber.config.ts', 'timber.config.js', 'timber.config.mjs'];
502
+ for (const name of configNames) {
503
+ resolved.configFileDependencies.push(resolve(resolved.root, name));
504
+ }
505
+
506
+ // Sync buildDir from Vite's resolved build.outDir. Vite keeps
507
+ // outDir as-is (may be relative), so resolve against root.
508
+ ctx.buildDir = resolve(resolved.root, resolved.build.outDir);
381
509
  // In production builds, swap to a no-op timer to avoid overhead
382
510
  if (!ctx.dev) {
383
511
  ctx.timer = createNoopTimer();
@@ -385,19 +513,36 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
385
513
  // Start the overall dev server setup timer — ends in timber-dev-server
386
514
  ctx.timer.start('dev-server-setup');
387
515
  }
516
+
517
+ // Validate config and check peer dependencies at startup.
518
+ // Errors are logged to stderr but don't block startup — Vite may
519
+ // still work partially, and the errors guide the user to fix things.
520
+ const configErrors = validateConfig(ctx.config);
521
+ if (configErrors.length > 0) {
522
+ process.stderr.write(`${formatConfigErrors(configErrors)}\n\n`);
523
+ }
524
+
525
+ const peerResults = checkPeerDependencies(ctx.root);
526
+ const peerWarning = formatMissingPeers(peerResults);
527
+ if (peerWarning) {
528
+ process.stderr.write(`${peerWarning}\n\n`);
529
+ }
388
530
  },
389
531
  };
532
+
533
+ // ── Step 5: Resolve React Compiler config ───────────────────────────
534
+ // Inline config takes precedence. File config (from the early cwd-based
535
+ // load) is used when inline config doesn't set reactCompiler.
536
+ // Default: true — oxc-transform-react is a direct dependency.
537
+ const effectiveReactCompiler = config?.reactCompiler ?? earlyFileConfig?.reactCompiler ?? true;
538
+
539
+ // ── Step 6: Assemble plugin array ─────────────────────────────────────
390
540
  // @vitejs/plugin-rsc handles:
391
541
  // - RSC/SSR/client environment setup
392
542
  // - "use client" directive → client reference proxy transformation
393
543
  // - "use server" directive → server reference transformation
394
544
  // - Client reference tracking and module map generation
395
545
  //
396
- // Loaded via dynamic import() because @vitejs/plugin-rsc is ESM-only.
397
- // Vite's config loader uses esbuild to transpile to CJS, which breaks
398
- // static imports of ESM-only packages. The dynamic import() is preserved
399
- // by esbuild and runs natively in ESM at runtime.
400
- //
401
546
  // serverHandler: false — timber has its own dev server (timber-dev-server)
402
547
  // entries — tells the RSC plugin about timber's virtual entry modules so
403
548
  // it correctly wires up the browser entry (needed for React Fast Refresh
@@ -410,35 +555,6 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
410
555
  // We do NOT set customBuildApp — the RSC plugin's orchestration is correct
411
556
  // and handles bundle ordering, asset manifest generation, and environment
412
557
  // imports manifest. See @vitejs/plugin-rsc's buildApp implementation.
413
- // Resolve @vitejs/plugin-rsc from the consumer's project (process.cwd()),
414
- // not from timber's own node_modules. This is critical for pnpm link:
415
- // when linked, timber's node_modules has a separate vite instance, and
416
- // the RSC plugin must use the same vite instance as the dev server.
417
- const consumerRequire = createRequire(join(process.cwd(), 'package.json'));
418
- const rscPluginPath = consumerRequire.resolve('@vitejs/plugin-rsc');
419
- ctx.timer.start('rsc-plugin-import');
420
- const rscPluginsPromise = import(pathToFileURL(rscPluginPath).href).then(
421
- ({ default: vitePluginRsc }) => {
422
- ctx.timer.end('rsc-plugin-import');
423
- return vitePluginRsc({
424
- serverHandler: false,
425
- customClientEntry: true,
426
- entries: {
427
- rsc: 'virtual:timber-rsc-entry',
428
- ssr: 'virtual:timber-ssr-entry',
429
- client: 'virtual:timber-browser-entry',
430
- },
431
- // Group all client reference wrappers into a single chunk instead of
432
- // creating one tiny file per "use client" module. Without this, each
433
- // server chunk's client references become a separate entry point,
434
- // producing many sub-500B wrapper files (e.g., 30-byte re-exports).
435
- // A single group eliminates 10+ unnecessary HTTP requests.
436
- // See design/27-chunking-strategy.md and TIM-440.
437
- clientChunks: () => 'client-refs',
438
- });
439
- }
440
- );
441
-
442
558
  return [
443
559
  rootSync,
444
560
  timberReactProd(),
@@ -446,21 +562,27 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
446
562
  // for client components via Babel transform. Placed before @vitejs/plugin-rsc
447
563
  // following Vinext's convention — the RSC plugin's virtual browser entry
448
564
  // coordinates with plugin-react via __vite_plugin_react_preamble_installed__.
449
- react(),
450
- timberServerActionExports(),
451
- rscPluginsPromise,
565
+ ...patchReactCompilerForProdJsx(
566
+ react({
567
+ compiler: (effectiveReactCompiler || false) as boolean | ReactCompilerOptions,
568
+ })
569
+ ),
570
+ vitePluginRsc(createRscOptions(ctx, encryptionKeyExpr)),
452
571
  timberShims(ctx),
453
572
  timberRouting(ctx),
454
573
  timberEntries(ctx),
455
574
  timberBuildManifest(ctx),
456
- timberCache(ctx),
457
- timberStaticBuild(ctx),
458
- timberDynamicTransform(ctx),
459
575
  timberFonts(ctx),
460
576
  timberMdx(ctx),
577
+ timberRequestDep(ctx),
578
+ timberCacheTransform(ctx),
579
+ timberPrerenderSugar(ctx), // export const prerender → cache.component() desugaring
580
+ timberPrebuilt(ctx), // cache.component() → __prebuilt() callsite rewrite
581
+ timberStaticBuild(ctx), // Static mode: validate + post-build HTML generation
461
582
  timberContent(ctx),
462
583
  timberServerBundle(), // Bundle all deps in server environments for prod
463
- timberChunks(),
584
+ timberCloudflareWasm(ctx), // Externalize WASM for Cloudflare Workers
585
+ timberChunks(ctx),
464
586
  timberBuildReport(ctx), // Post-build: route table with bundle sizes
465
587
  timberAdapterBuild(ctx), // Post-build: invoke adapter.buildOutput()
466
588
  timberDevLogs(ctx), // Dev-only: forward server console.* to browser console
@@ -468,17 +590,4 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
468
590
  ];
469
591
  }
470
592
 
471
- /**
472
- * Route map interface — augmented by the generated timber-routes.d.ts.
473
- *
474
- * Each key is a route path pattern. Values have:
475
- * params: shape of URL params (e.g. { id: string })
476
- * searchParams: parsed type from search-params.ts, or {} if none
477
- *
478
- * This interface is empty by default and populated via codegen.
479
- * See design/09-typescript.md §"Typed Routes".
480
- */
481
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
482
- export interface Routes {}
483
-
484
593
  export default timber;