@timber-js/app 0.2.0-alpha.2 → 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 (1329) 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-DLnbYpj1.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 +82 -37
  124. package/dist/adapters/nitro.d.ts.map +1 -1
  125. package/dist/adapters/nitro.js +457 -288
  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 +27 -0
  158. package/dist/cache/fast-hash.d.ts.map +1 -0
  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 -284
  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 +1 -1
  306. package/dist/client/segment-context.d.ts.map +1 -1
  307. package/dist/client/segment-outlet.d.ts +68 -0
  308. package/dist/client/segment-outlet.d.ts.map +1 -0
  309. package/dist/client/segment-update-context.d.ts +15 -0
  310. package/dist/client/segment-update-context.d.ts.map +1 -0
  311. package/dist/client/shallow-url.d.ts +10 -0
  312. package/dist/client/shallow-url.d.ts.map +1 -0
  313. package/dist/client/slot-content-cache-context.d.ts +35 -0
  314. package/dist/client/slot-content-cache-context.d.ts.map +1 -0
  315. package/dist/client/slot-context.d.ts +31 -0
  316. package/dist/client/slot-context.d.ts.map +1 -0
  317. package/dist/client/slot-outlet.d.ts +16 -0
  318. package/dist/client/slot-outlet.d.ts.map +1 -0
  319. package/dist/client/slot-provider.d.ts +25 -0
  320. package/dist/client/slot-provider.d.ts.map +1 -0
  321. package/dist/client/ssr-data.d.ts +29 -7
  322. package/dist/client/ssr-data.d.ts.map +1 -1
  323. package/dist/client/stale-client.d.ts +69 -0
  324. package/dist/client/stale-client.d.ts.map +1 -0
  325. package/dist/client/state.d.ts +19 -8
  326. package/dist/client/state.d.ts.map +1 -1
  327. package/dist/client/status-page-marker.d.ts +25 -0
  328. package/dist/client/status-page-marker.d.ts.map +1 -0
  329. package/dist/client/top-loader.d.ts +7 -6
  330. package/dist/client/top-loader.d.ts.map +1 -1
  331. package/dist/client/unload-guard.d.ts +5 -0
  332. package/dist/client/unload-guard.d.ts.map +1 -1
  333. package/dist/client/use-cookie.d.ts +12 -0
  334. package/dist/client/use-cookie.d.ts.map +1 -1
  335. package/dist/client/use-link-status.d.ts +5 -5
  336. package/dist/client/use-link-status.d.ts.map +1 -1
  337. package/dist/client/use-pathname.d.ts +13 -11
  338. package/dist/client/use-pathname.d.ts.map +1 -1
  339. package/dist/client/use-pending-navigation.d.ts +23 -0
  340. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  341. package/dist/client/use-query-states.d.ts +10 -4
  342. package/dist/client/use-query-states.d.ts.map +1 -1
  343. package/dist/client/use-router.d.ts +2 -2
  344. package/dist/client/use-router.d.ts.map +1 -1
  345. package/dist/client/use-search-params.d.ts +15 -8
  346. package/dist/client/use-search-params.d.ts.map +1 -1
  347. package/dist/client/use-segment-params.d.ts +55 -0
  348. package/dist/client/use-segment-params.d.ts.map +1 -0
  349. package/dist/codec.d.ts +69 -0
  350. package/dist/codec.d.ts.map +1 -0
  351. package/dist/codec.js +76 -0
  352. package/dist/codec.js.map +1 -0
  353. package/dist/config-types.d.ts +322 -0
  354. package/dist/config-types.d.ts.map +1 -0
  355. package/dist/config-validation.d.ts +51 -0
  356. package/dist/config-validation.d.ts.map +1 -0
  357. package/dist/cookies/define-cookie.d.ts +58 -25
  358. package/dist/cookies/define-cookie.d.ts.map +1 -1
  359. package/dist/cookies/index.d.ts +3 -2
  360. package/dist/cookies/index.d.ts.map +1 -1
  361. package/dist/cookies/index.js +256 -36
  362. package/dist/cookies/index.js.map +1 -1
  363. package/dist/cookies/json-cookie.d.ts +64 -0
  364. package/dist/cookies/json-cookie.d.ts.map +1 -0
  365. package/dist/cookies/validation.d.ts +34 -0
  366. package/dist/cookies/validation.d.ts.map +1 -0
  367. package/dist/dev-tools/404-page.d.ts +50 -0
  368. package/dist/dev-tools/404-page.d.ts.map +1 -0
  369. package/dist/dev-tools/browser-logs.d.ts +40 -0
  370. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  371. package/dist/dev-tools/dev-page-shell.d.ts +78 -0
  372. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  373. package/dist/dev-tools/error-page.d.ts +32 -0
  374. package/dist/dev-tools/error-page.d.ts.map +1 -0
  375. package/dist/dev-tools/holding-server.d.ts +46 -0
  376. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  377. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  378. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  379. package/dist/dev-tools/index.d.ts +31 -0
  380. package/dist/dev-tools/index.d.ts.map +1 -0
  381. package/dist/dev-tools/instrumentation.d.ts +59 -0
  382. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  383. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  384. package/dist/dev-tools/logger.d.ts.map +1 -0
  385. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
  386. package/dist/dev-tools/logs.d.ts.map +1 -0
  387. package/dist/dev-tools/overlay.d.ts +91 -0
  388. package/dist/dev-tools/overlay.d.ts.map +1 -0
  389. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  390. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  391. package/dist/dev-tools/terminal.d.ts +28 -0
  392. package/dist/dev-tools/terminal.d.ts.map +1 -0
  393. package/dist/fonts/ast-walk.d.ts +68 -0
  394. package/dist/fonts/ast-walk.d.ts.map +1 -0
  395. package/dist/fonts/ast.d.ts +112 -8
  396. package/dist/fonts/ast.d.ts.map +1 -1
  397. package/dist/fonts/bundle.d.ts +50 -0
  398. package/dist/fonts/bundle.d.ts.map +1 -0
  399. package/dist/fonts/css.d.ts +2 -1
  400. package/dist/fonts/css.d.ts.map +1 -1
  401. package/dist/fonts/dev-middleware.d.ts +22 -0
  402. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  403. package/dist/fonts/fallbacks.d.ts +0 -7
  404. package/dist/fonts/fallbacks.d.ts.map +1 -1
  405. package/dist/fonts/google.d.ts +5 -3
  406. package/dist/fonts/google.d.ts.map +1 -1
  407. package/dist/fonts/local.d.ts +6 -4
  408. package/dist/fonts/local.d.ts.map +1 -1
  409. package/dist/fonts/paths.d.ts +43 -0
  410. package/dist/fonts/paths.d.ts.map +1 -0
  411. package/dist/fonts/pipeline.d.ts +177 -0
  412. package/dist/fonts/pipeline.d.ts.map +1 -0
  413. package/dist/fonts/transform.d.ts +82 -0
  414. package/dist/fonts/transform.d.ts.map +1 -0
  415. package/dist/fonts/types.d.ts +47 -1
  416. package/dist/fonts/types.d.ts.map +1 -1
  417. package/dist/fonts/virtual-modules.d.ts +77 -0
  418. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  419. package/dist/index.d.ts +35 -153
  420. package/dist/index.d.ts.map +1 -1
  421. package/dist/index.js +10488 -13975
  422. package/dist/index.js.map +1 -1
  423. package/dist/params/codec-registry.d.ts +26 -0
  424. package/dist/params/codec-registry.d.ts.map +1 -0
  425. package/dist/params/define-schema.d.ts +81 -0
  426. package/dist/params/define-schema.d.ts.map +1 -0
  427. package/dist/params/index.d.ts +5 -0
  428. package/dist/params/index.d.ts.map +1 -0
  429. package/dist/params/index.js +34 -0
  430. package/dist/params/index.js.map +1 -0
  431. package/dist/params/resolve-schema.d.ts +34 -0
  432. package/dist/params/resolve-schema.d.ts.map +1 -0
  433. package/dist/plugin-context.d.ts +276 -0
  434. package/dist/plugin-context.d.ts.map +1 -0
  435. package/dist/plugins/adapter-build.d.ts +21 -1
  436. package/dist/plugins/adapter-build.d.ts.map +1 -1
  437. package/dist/plugins/build-manifest.d.ts +7 -3
  438. package/dist/plugins/build-manifest.d.ts.map +1 -1
  439. package/dist/plugins/build-report.d.ts +54 -7
  440. package/dist/plugins/build-report.d.ts.map +1 -1
  441. package/dist/plugins/cache.d.ts +64 -0
  442. package/dist/plugins/cache.d.ts.map +1 -0
  443. package/dist/plugins/callsite-ast.d.ts +117 -0
  444. package/dist/plugins/callsite-ast.d.ts.map +1 -0
  445. package/dist/plugins/callsite-jsx.d.ts +35 -0
  446. package/dist/plugins/callsite-jsx.d.ts.map +1 -0
  447. package/dist/plugins/chunks.d.ts +11 -4
  448. package/dist/plugins/chunks.d.ts.map +1 -1
  449. package/dist/plugins/client-chunks.d.ts +40 -0
  450. package/dist/plugins/client-chunks.d.ts.map +1 -0
  451. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  452. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  453. package/dist/plugins/content.d.ts +1 -1
  454. package/dist/plugins/content.d.ts.map +1 -1
  455. package/dist/plugins/dev-discovery.d.ts +123 -0
  456. package/dist/plugins/dev-discovery.d.ts.map +1 -0
  457. package/dist/plugins/dev-server.d.ts +17 -1
  458. package/dist/plugins/dev-server.d.ts.map +1 -1
  459. package/dist/plugins/entries.d.ts +32 -1
  460. package/dist/plugins/entries.d.ts.map +1 -1
  461. package/dist/plugins/fonts.d.ts +16 -65
  462. package/dist/plugins/fonts.d.ts.map +1 -1
  463. package/dist/plugins/graph-endpoint.d.ts +112 -0
  464. package/dist/plugins/graph-endpoint.d.ts.map +1 -0
  465. package/dist/plugins/mdx.d.ts +24 -5
  466. package/dist/plugins/mdx.d.ts.map +1 -1
  467. package/dist/plugins/prebuilt-capture.d.ts +60 -0
  468. package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
  469. package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
  470. package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
  471. package/dist/plugins/prebuilt.d.ts +82 -0
  472. package/dist/plugins/prebuilt.d.ts.map +1 -0
  473. package/dist/plugins/prerender-sugar.d.ts +39 -0
  474. package/dist/plugins/prerender-sugar.d.ts.map +1 -0
  475. package/dist/plugins/request-dep/analysis.d.ts +106 -0
  476. package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
  477. package/dist/plugins/request-dep/index.d.ts +75 -0
  478. package/dist/plugins/request-dep/index.d.ts.map +1 -0
  479. package/dist/plugins/request-dep/origin.d.ts +61 -0
  480. package/dist/plugins/request-dep/origin.d.ts.map +1 -0
  481. package/dist/plugins/routing.d.ts +1 -1
  482. package/dist/plugins/routing.d.ts.map +1 -1
  483. package/dist/plugins/server-bundle.d.ts.map +1 -1
  484. package/dist/plugins/shims.d.ts +29 -5
  485. package/dist/plugins/shims.d.ts.map +1 -1
  486. package/dist/plugins/static-build.d.ts +218 -21
  487. package/dist/plugins/static-build.d.ts.map +1 -1
  488. package/dist/routing/codegen-shared.d.ts +26 -0
  489. package/dist/routing/codegen-shared.d.ts.map +1 -0
  490. package/dist/routing/codegen-types.d.ts +61 -0
  491. package/dist/routing/codegen-types.d.ts.map +1 -0
  492. package/dist/routing/codegen-write.d.ts +51 -0
  493. package/dist/routing/codegen-write.d.ts.map +1 -0
  494. package/dist/routing/codegen.d.ts +8 -3
  495. package/dist/routing/codegen.d.ts.map +1 -1
  496. package/dist/routing/collision-probe.d.ts +104 -0
  497. package/dist/routing/collision-probe.d.ts.map +1 -0
  498. package/dist/routing/collision-spaces.d.ts +26 -0
  499. package/dist/routing/collision-spaces.d.ts.map +1 -0
  500. package/dist/routing/convention-lint.d.ts +55 -0
  501. package/dist/routing/convention-lint.d.ts.map +1 -0
  502. package/dist/routing/export-detect.d.ts +72 -0
  503. package/dist/routing/export-detect.d.ts.map +1 -0
  504. package/dist/routing/file-cache.d.ts +8 -0
  505. package/dist/routing/file-cache.d.ts.map +1 -0
  506. package/dist/routing/index.d.ts +13 -7
  507. package/dist/routing/index.d.ts.map +1 -1
  508. package/dist/routing/index.js +5 -2
  509. package/dist/routing/interception-overlap.d.ts +35 -0
  510. package/dist/routing/interception-overlap.d.ts.map +1 -0
  511. package/dist/routing/interception.d.ts +234 -10
  512. package/dist/routing/interception.d.ts.map +1 -1
  513. package/dist/routing/link-codegen.d.ts +105 -0
  514. package/dist/routing/link-codegen.d.ts.map +1 -0
  515. package/dist/routing/manifest-codegen.d.ts +26 -0
  516. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  517. package/dist/routing/scanner.d.ts +14 -10
  518. package/dist/routing/scanner.d.ts.map +1 -1
  519. package/dist/routing/schema-validation.d.ts +35 -0
  520. package/dist/routing/schema-validation.d.ts.map +1 -0
  521. package/dist/routing/segment-classify.d.ts +114 -0
  522. package/dist/routing/segment-classify.d.ts.map +1 -0
  523. package/dist/routing/segment-codegen.d.ts +38 -0
  524. package/dist/routing/segment-codegen.d.ts.map +1 -0
  525. package/dist/routing/segment-keys.d.ts +118 -0
  526. package/dist/routing/segment-keys.d.ts.map +1 -0
  527. package/dist/routing/slot-placement.d.ts +48 -0
  528. package/dist/routing/slot-placement.d.ts.map +1 -0
  529. package/dist/routing/types.d.ts +74 -26
  530. package/dist/routing/types.d.ts.map +1 -1
  531. package/dist/routing/walkers.d.ts +57 -0
  532. package/dist/routing/walkers.d.ts.map +1 -0
  533. package/dist/rsc-runtime/rsc.d.ts +1 -1
  534. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  535. package/dist/rsc-runtime/ssr.d.ts +14 -0
  536. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  537. package/dist/rsc-runtime/transforms.d.ts +13 -0
  538. package/dist/rsc-runtime/transforms.d.ts.map +1 -0
  539. package/dist/schema-bridge.d.ts +145 -0
  540. package/dist/schema-bridge.d.ts.map +1 -0
  541. package/dist/search-params/define.d.ts +262 -0
  542. package/dist/search-params/define.d.ts.map +1 -0
  543. package/dist/search-params/index.d.ts +3 -7
  544. package/dist/search-params/index.d.ts.map +1 -1
  545. package/dist/search-params/index.js +179 -360
  546. package/dist/search-params/index.js.map +1 -1
  547. package/dist/search-params/parse-total.d.ts +81 -0
  548. package/dist/search-params/parse-total.d.ts.map +1 -0
  549. package/dist/search-params/serialize-equal.d.ts +9 -0
  550. package/dist/search-params/serialize-equal.d.ts.map +1 -0
  551. package/dist/search-params/wrappers.d.ts +76 -0
  552. package/dist/search-params/wrappers.d.ts.map +1 -0
  553. package/dist/server/access-gate.d.ts +98 -10
  554. package/dist/server/access-gate.d.ts.map +1 -1
  555. package/dist/server/action-client.d.ts +42 -7
  556. package/dist/server/action-client.d.ts.map +1 -1
  557. package/dist/server/action-encryption.d.ts +76 -0
  558. package/dist/server/action-encryption.d.ts.map +1 -0
  559. package/dist/server/action-handler.d.ts +39 -5
  560. package/dist/server/action-handler.d.ts.map +1 -1
  561. package/dist/server/actions.d.ts +29 -35
  562. package/dist/server/actions.d.ts.map +1 -1
  563. package/dist/server/als-registry.d.ts +117 -13
  564. package/dist/server/als-registry.d.ts.map +1 -1
  565. package/dist/server/asset-headers.d.ts +8 -18
  566. package/dist/server/asset-headers.d.ts.map +1 -1
  567. package/dist/server/body-limits.d.ts.map +1 -1
  568. package/dist/server/build-manifest.d.ts +25 -30
  569. package/dist/server/build-manifest.d.ts.map +1 -1
  570. package/dist/server/canonicalize.d.ts +10 -0
  571. package/dist/server/canonicalize.d.ts.map +1 -1
  572. package/dist/server/chain-url-parts.d.ts +82 -0
  573. package/dist/server/chain-url-parts.d.ts.map +1 -0
  574. package/dist/server/children-interception.d.ts +49 -0
  575. package/dist/server/children-interception.d.ts.map +1 -0
  576. package/dist/server/coalesce-tick.d.ts +40 -0
  577. package/dist/server/coalesce-tick.d.ts.map +1 -0
  578. package/dist/server/compress.d.ts.map +1 -1
  579. package/dist/server/cookie-context.d.ts +170 -0
  580. package/dist/server/cookie-context.d.ts.map +1 -0
  581. package/dist/server/cookie-parsing.d.ts +65 -0
  582. package/dist/server/cookie-parsing.d.ts.map +1 -0
  583. package/dist/server/csp-nonce.d.ts +45 -0
  584. package/dist/server/csp-nonce.d.ts.map +1 -0
  585. package/dist/server/csrf.d.ts +3 -2
  586. package/dist/server/csrf.d.ts.map +1 -1
  587. package/dist/server/debug.d.ts +82 -0
  588. package/dist/server/debug.d.ts.map +1 -0
  589. package/dist/server/default-logger.d.ts +22 -0
  590. package/dist/server/default-logger.d.ts.map +1 -0
  591. package/dist/server/default-status-page.d.ts +45 -0
  592. package/dist/server/default-status-page.d.ts.map +1 -0
  593. package/dist/server/deny-boundary.d.ts +253 -0
  594. package/dist/server/deny-boundary.d.ts.map +1 -0
  595. package/dist/server/deny-renderer.d.ts +20 -9
  596. package/dist/server/deny-renderer.d.ts.map +1 -1
  597. package/dist/server/dev-source-map.d.ts +22 -0
  598. package/dist/server/dev-source-map.d.ts.map +1 -0
  599. package/dist/server/early-hints-sender.d.ts.map +1 -1
  600. package/dist/server/early-hints.d.ts +14 -12
  601. package/dist/server/early-hints.d.ts.map +1 -1
  602. package/dist/server/error-boundary-wrapper.d.ts +101 -10
  603. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  604. package/dist/server/error-response-headers.d.ts +3 -0
  605. package/dist/server/error-response-headers.d.ts.map +1 -0
  606. package/dist/server/fallback-error.d.ts +12 -7
  607. package/dist/server/fallback-error.d.ts.map +1 -1
  608. package/dist/server/flight-injection-state.d.ts +66 -0
  609. package/dist/server/flight-injection-state.d.ts.map +1 -0
  610. package/dist/server/flight-scripts.d.ts +45 -0
  611. package/dist/server/flight-scripts.d.ts.map +1 -0
  612. package/dist/server/form-data.d.ts +41 -0
  613. package/dist/server/form-data.d.ts.map +1 -1
  614. package/dist/server/form-flash.d.ts +1 -1
  615. package/dist/server/head-response.d.ts +35 -0
  616. package/dist/server/head-response.d.ts.map +1 -0
  617. package/dist/server/html-injector-core.d.ts +257 -0
  618. package/dist/server/html-injector-core.d.ts.map +1 -0
  619. package/dist/server/html-injectors.d.ts +84 -42
  620. package/dist/server/html-injectors.d.ts.map +1 -1
  621. package/dist/server/index.d.ts +18 -54
  622. package/dist/server/index.d.ts.map +1 -1
  623. package/dist/server/index.js +212 -2930
  624. package/dist/server/index.js.map +1 -1
  625. package/dist/server/instrumentation.d.ts +1 -1
  626. package/dist/server/internal.d.ts +50 -0
  627. package/dist/server/internal.d.ts.map +1 -0
  628. package/dist/server/internal.js +4034 -0
  629. package/dist/server/internal.js.map +1 -0
  630. package/dist/server/logger.d.ts +39 -7
  631. package/dist/server/logger.d.ts.map +1 -1
  632. package/dist/server/metadata-collector.d.ts +71 -0
  633. package/dist/server/metadata-collector.d.ts.map +1 -0
  634. package/dist/server/metadata-platform.d.ts +2 -2
  635. package/dist/server/metadata-render.d.ts +2 -2
  636. package/dist/server/metadata-render.d.ts.map +1 -1
  637. package/dist/server/metadata-routes.d.ts +60 -11
  638. package/dist/server/metadata-routes.d.ts.map +1 -1
  639. package/dist/server/metadata-social.d.ts +2 -2
  640. package/dist/server/metadata.d.ts +10 -2
  641. package/dist/server/metadata.d.ts.map +1 -1
  642. package/dist/server/middleware-runner.d.ts +20 -5
  643. package/dist/server/middleware-runner.d.ts.map +1 -1
  644. package/dist/server/node-stream-transforms.d.ts +105 -0
  645. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  646. package/dist/server/nuqs-ssr-provider.d.ts +7 -3
  647. package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
  648. package/dist/server/param-coercion.d.ts +78 -0
  649. package/dist/server/param-coercion.d.ts.map +1 -0
  650. package/dist/server/pipeline-helpers.d.ts +77 -0
  651. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  652. package/dist/server/pipeline-interception.d.ts +59 -9
  653. package/dist/server/pipeline-interception.d.ts.map +1 -1
  654. package/dist/server/pipeline-metadata.d.ts +7 -1
  655. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  656. package/dist/server/pipeline-outcome.d.ts +49 -0
  657. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  658. package/dist/server/pipeline-phases.d.ts +70 -0
  659. package/dist/server/pipeline-phases.d.ts.map +1 -0
  660. package/dist/server/pipeline.d.ts +160 -24
  661. package/dist/server/pipeline.d.ts.map +1 -1
  662. package/dist/server/port-resolution.d.ts +31 -0
  663. package/dist/server/port-resolution.d.ts.map +1 -0
  664. package/dist/server/prebuilt/cache-key.d.ts +63 -0
  665. package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
  666. package/dist/server/prebuilt/capture-state.d.ts +57 -0
  667. package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
  668. package/dist/server/prebuilt/key-discipline.d.ts +52 -0
  669. package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
  670. package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
  671. package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
  672. package/dist/server/prebuilt/overlay.d.ts +100 -0
  673. package/dist/server/prebuilt/overlay.d.ts.map +1 -0
  674. package/dist/server/prebuilt/payload-source.d.ts +79 -0
  675. package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
  676. package/dist/server/prebuilt/slots.d.ts +99 -0
  677. package/dist/server/prebuilt/slots.d.ts.map +1 -0
  678. package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
  679. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
  680. package/dist/server/prebuilt-builder.d.ts +121 -0
  681. package/dist/server/prebuilt-builder.d.ts.map +1 -0
  682. package/dist/server/prebuilt-runtime.d.ts +111 -0
  683. package/dist/server/prebuilt-runtime.d.ts.map +1 -0
  684. package/dist/server/primitives.d.ts +129 -45
  685. package/dist/server/primitives.d.ts.map +1 -1
  686. package/dist/server/publish-params.d.ts +33 -0
  687. package/dist/server/publish-params.d.ts.map +1 -0
  688. package/dist/server/render-timeout.d.ts +51 -0
  689. package/dist/server/render-timeout.d.ts.map +1 -0
  690. package/dist/server/render-utils.d.ts +26 -0
  691. package/dist/server/render-utils.d.ts.map +1 -0
  692. package/dist/server/request-context.d.ts +111 -107
  693. package/dist/server/request-context.d.ts.map +1 -1
  694. package/dist/server/request-dep.d.ts +15 -0
  695. package/dist/server/request-dep.d.ts.map +1 -0
  696. package/dist/server/response-cache-policy.d.ts +3 -0
  697. package/dist/server/response-cache-policy.d.ts.map +1 -0
  698. package/dist/server/route-element-builder.d.ts +57 -30
  699. package/dist/server/route-element-builder.d.ts.map +1 -1
  700. package/dist/server/route-element-helpers.d.ts +12 -0
  701. package/dist/server/route-element-helpers.d.ts.map +1 -0
  702. package/dist/server/route-handler.d.ts +1 -1
  703. package/dist/server/route-handler.d.ts.map +1 -1
  704. package/dist/server/route-matcher.d.ts +40 -38
  705. package/dist/server/route-matcher.d.ts.map +1 -1
  706. package/dist/server/route-module-loader.d.ts +37 -0
  707. package/dist/server/route-module-loader.d.ts.map +1 -0
  708. package/dist/server/rsc-cache-key-guard.d.ts +78 -0
  709. package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
  710. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  711. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  712. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  713. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  714. package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
  715. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
  716. package/dist/server/rsc-entry/error-renderer.d.ts +38 -13
  717. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  718. package/dist/server/rsc-entry/helpers.d.ts +59 -42
  719. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  720. package/dist/server/rsc-entry/index.d.ts +40 -6
  721. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  722. package/dist/server/rsc-entry/render-route.d.ts +51 -0
  723. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  724. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  725. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  726. package/dist/server/rsc-entry/rsc-payload.d.ts +26 -6
  727. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  728. package/dist/server/rsc-entry/rsc-stream.d.ts +39 -3
  729. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  730. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  731. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  732. package/dist/server/rsc-entry/ssr-renderer.d.ts +37 -5
  733. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  734. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
  735. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  736. package/dist/server/rsc-error-envelope.d.ts +11 -0
  737. package/dist/server/rsc-error-envelope.d.ts.map +1 -0
  738. package/dist/server/rsc-prop-warnings.d.ts.map +1 -1
  739. package/dist/server/safe-load.d.ts +46 -0
  740. package/dist/server/safe-load.d.ts.map +1 -0
  741. package/dist/server/sensitive-fields.d.ts +74 -0
  742. package/dist/server/sensitive-fields.d.ts.map +1 -0
  743. package/dist/server/sitemap-generator.d.ts +130 -0
  744. package/dist/server/sitemap-generator.d.ts.map +1 -0
  745. package/dist/server/sitemap-handler.d.ts +22 -0
  746. package/dist/server/sitemap-handler.d.ts.map +1 -0
  747. package/dist/server/skippable-prefix.d.ts +29 -0
  748. package/dist/server/skippable-prefix.d.ts.map +1 -0
  749. package/dist/server/slot-interception.d.ts +80 -0
  750. package/dist/server/slot-interception.d.ts.map +1 -0
  751. package/dist/server/slot-resolver.d.ts +137 -7
  752. package/dist/server/slot-resolver.d.ts.map +1 -1
  753. package/dist/server/slot-subtree-contain.d.ts +54 -0
  754. package/dist/server/slot-subtree-contain.d.ts.map +1 -0
  755. package/dist/server/ssr-bridge-types.d.ts +160 -0
  756. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  757. package/dist/server/ssr-entry.d.ts +1 -43
  758. package/dist/server/ssr-entry.d.ts.map +1 -1
  759. package/dist/server/ssr-render.d.ts +69 -22
  760. package/dist/server/ssr-render.d.ts.map +1 -1
  761. package/dist/server/ssr-wrappers.d.ts +93 -0
  762. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  763. package/dist/server/state-tree-diff.d.ts +44 -9
  764. package/dist/server/state-tree-diff.d.ts.map +1 -1
  765. package/dist/server/static-generator.d.ts +112 -0
  766. package/dist/server/static-generator.d.ts.map +1 -0
  767. package/dist/server/static-not-found.d.ts +52 -0
  768. package/dist/server/static-not-found.d.ts.map +1 -0
  769. package/dist/server/status-code-resolver.d.ts +26 -15
  770. package/dist/server/status-code-resolver.d.ts.map +1 -1
  771. package/dist/server/stream-utils.d.ts +47 -0
  772. package/dist/server/stream-utils.d.ts.map +1 -0
  773. package/dist/server/tracing.d.ts +56 -11
  774. package/dist/server/tracing.d.ts.map +1 -1
  775. package/dist/server/tree-match.d.ts +49 -0
  776. package/dist/server/tree-match.d.ts.map +1 -0
  777. package/dist/server/types.d.ts +88 -7
  778. package/dist/server/types.d.ts.map +1 -1
  779. package/dist/server/utils/element-type.d.ts +50 -0
  780. package/dist/server/utils/element-type.d.ts.map +1 -0
  781. package/dist/server/utils/escape-html.d.ts +14 -0
  782. package/dist/server/utils/escape-html.d.ts.map +1 -0
  783. package/dist/server/utils/mdx-file.d.ts +17 -0
  784. package/dist/server/utils/mdx-file.d.ts.map +1 -0
  785. package/dist/server/version-skew.d.ts +61 -0
  786. package/dist/server/version-skew.d.ts.map +1 -0
  787. package/dist/server/waituntil-bridge.d.ts.map +1 -1
  788. package/dist/server/workers-cache-bridge.d.ts +26 -0
  789. package/dist/server/workers-cache-bridge.d.ts.map +1 -0
  790. package/dist/shared/als-slots.d.ts +42 -0
  791. package/dist/shared/als-slots.d.ts.map +1 -0
  792. package/dist/shared/base-path.d.ts +56 -0
  793. package/dist/shared/base-path.d.ts.map +1 -0
  794. package/dist/shared/href-validation.d.ts +49 -0
  795. package/dist/shared/href-validation.d.ts.map +1 -0
  796. package/dist/shared/merge-search-params.d.ts +22 -0
  797. package/dist/shared/merge-search-params.d.ts.map +1 -0
  798. package/dist/shared/param-value.d.ts +104 -0
  799. package/dist/shared/param-value.d.ts.map +1 -0
  800. package/dist/shared/payload-root.d.ts +109 -0
  801. package/dist/shared/payload-root.d.ts.map +1 -0
  802. package/dist/shared/redirect-type.d.ts +17 -0
  803. package/dist/shared/redirect-type.d.ts.map +1 -0
  804. package/dist/shared/rsc-cache-key.d.ts +163 -0
  805. package/dist/shared/rsc-cache-key.d.ts.map +1 -0
  806. package/dist/shared/rsc-error-envelope.d.ts +16 -0
  807. package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
  808. package/dist/shared/rsc-manifest.d.ts +28 -0
  809. package/dist/shared/rsc-manifest.d.ts.map +1 -0
  810. package/dist/shared/rsc-media-type.d.ts +52 -0
  811. package/dist/shared/rsc-media-type.d.ts.map +1 -0
  812. package/dist/shared/rsc-payload-path.d.ts +42 -0
  813. package/dist/shared/rsc-payload-path.d.ts.map +1 -0
  814. package/dist/shared/segment-info.d.ts +66 -0
  815. package/dist/shared/segment-info.d.ts.map +1 -0
  816. package/dist/shared/slot-params.d.ts +52 -0
  817. package/dist/shared/slot-params.d.ts.map +1 -0
  818. package/dist/shared/static-platform-files.d.ts +71 -0
  819. package/dist/shared/static-platform-files.d.ts.map +1 -0
  820. package/dist/shared/status-reason-phrase.d.ts +26 -0
  821. package/dist/shared/status-reason-phrase.d.ts.map +1 -0
  822. package/dist/shims/font-google.d.ts +1 -1
  823. package/dist/shims/font-google.d.ts.map +1 -1
  824. package/dist/shims/font-google.js +42 -0
  825. package/dist/shims/font-google.js.map +1 -0
  826. package/dist/shims/font-local.d.ts +26 -0
  827. package/dist/shims/font-local.d.ts.map +1 -0
  828. package/dist/shims/font-local.js +20 -0
  829. package/dist/shims/font-local.js.map +1 -0
  830. package/dist/shims/headers.d.ts +53 -1
  831. package/dist/shims/headers.d.ts.map +1 -1
  832. package/dist/shims/image.d.ts +120 -120
  833. package/dist/shims/image.d.ts.map +1 -1
  834. package/dist/shims/navigation-client.d.ts +25 -12
  835. package/dist/shims/navigation-client.d.ts.map +1 -1
  836. package/dist/shims/navigation-rsc.d.ts +21 -0
  837. package/dist/shims/navigation-rsc.d.ts.map +1 -0
  838. package/dist/shims/navigation.d.ts +10 -5
  839. package/dist/shims/navigation.d.ts.map +1 -1
  840. package/dist/utils/state-machine.d.ts +80 -0
  841. package/dist/utils/state-machine.d.ts.map +1 -0
  842. package/docs/api/30-api-server.mdx +236 -0
  843. package/docs/api/31-api-client.mdx +167 -0
  844. package/docs/api/32-api-cache.mdx +311 -0
  845. package/docs/api/33-api-search-params.mdx +176 -0
  846. package/docs/api/34-api-config.mdx +329 -0
  847. package/docs/api/35-api-typescript.mdx +91 -0
  848. package/docs/api/36-cli.mdx +192 -0
  849. package/docs/learn/00-introduction.mdx +109 -0
  850. package/docs/learn/01-quick-start.mdx +94 -0
  851. package/docs/learn/02-pages-and-layouts.mdx +147 -0
  852. package/docs/learn/03-fetching-data.mdx +211 -0
  853. package/docs/learn/04-access-control.mdx +115 -0
  854. package/docs/learn/05-the-flush-point.mdx +175 -0
  855. package/docs/learn/06-typed-params.mdx +275 -0
  856. package/docs/learn/07-typed-routes.mdx +108 -0
  857. package/docs/learn/08-forms-and-actions.mdx +146 -0
  858. package/docs/learn/09-streaming.mdx +140 -0
  859. package/docs/learn/10-caching.mdx +252 -0
  860. package/docs/learn/11-middleware.mdx +158 -0
  861. package/docs/learn/12-error-handling.mdx +188 -0
  862. package/docs/learn/13-deploying.mdx +287 -0
  863. package/llms.txt +55 -0
  864. package/package.json +117 -29
  865. package/src/adapters/build-output-helper.ts +351 -0
  866. package/src/adapters/cloudflare-dev.ts +183 -0
  867. package/src/adapters/cloudflare-kv-cache.ts +207 -0
  868. package/src/adapters/cloudflare.ts +747 -130
  869. package/src/adapters/compress-module.ts +101 -88
  870. package/src/adapters/fs-identity.ts +156 -0
  871. package/src/adapters/nitro-presets.ts +139 -0
  872. package/src/adapters/nitro-preview.ts +340 -0
  873. package/src/adapters/nitro.ts +279 -418
  874. package/src/adapters/raw-imports.d.ts +5 -0
  875. package/src/adapters/shared.ts +274 -0
  876. package/src/adapters/types.ts +28 -7
  877. package/src/adapters/wrangler.d.ts +7 -0
  878. package/src/analyze/chains.ts +411 -0
  879. package/src/analyze/classify.ts +258 -0
  880. package/src/analyze/crawl-entry.ts +68 -0
  881. package/src/analyze/crawl.ts +500 -0
  882. package/src/analyze/graph-cache.ts +332 -0
  883. package/src/analyze/graph-command.ts +762 -0
  884. package/src/analyze/live-graph.ts +232 -0
  885. package/src/analyze/poison-rules.ts +165 -0
  886. package/src/analyze/poison-scan.ts +162 -0
  887. package/src/analyze/scan.ts +149 -0
  888. package/src/cache/cache-api.ts +107 -0
  889. package/src/cache/fast-hash.ts +39 -0
  890. package/src/cache/handler-store.ts +76 -0
  891. package/src/cache/index.ts +115 -22
  892. package/src/cache/invalidation-epoch.ts +93 -0
  893. package/src/cache/json-lossy-check.ts +75 -0
  894. package/src/cache/redis-handler.ts +198 -20
  895. package/src/cache/singleflight.ts +69 -6
  896. package/src/cache/sizeof.ts +33 -0
  897. package/src/cache/stable-stringify.ts +65 -2
  898. package/src/cache/store.ts +71 -0
  899. package/src/cache/stores/cloudflare-kv.ts +52 -0
  900. package/src/cache/stores/memory.ts +125 -0
  901. package/src/cache/stores/redis.ts +97 -0
  902. package/src/cache/stores/vercel.ts +59 -0
  903. package/src/cache/tag-aware-handler.ts +237 -0
  904. package/src/cache/timber-cache.ts +180 -48
  905. package/src/cdn/cloudflare-purge.ts +50 -0
  906. package/src/cdn/fastly-purge.ts +63 -0
  907. package/src/cdn/headers.ts +153 -0
  908. package/src/cdn/index.ts +23 -0
  909. package/src/cdn/purge-store.ts +34 -0
  910. package/src/cdn/workers-cache-purge.ts +34 -0
  911. package/src/cli-check.ts +507 -0
  912. package/src/cli-schema-sync.ts +401 -0
  913. package/src/cli.ts +262 -55
  914. package/src/client/browser-dev.ts +157 -2
  915. package/src/client/browser-entry/action-dispatch.ts +197 -0
  916. package/src/client/browser-entry/action-queue.ts +90 -0
  917. package/src/client/browser-entry/hmr.ts +70 -0
  918. package/src/client/browser-entry/hydrate.ts +148 -0
  919. package/src/client/browser-entry/index.ts +131 -0
  920. package/src/client/browser-entry/post-hydration.ts +123 -0
  921. package/src/client/browser-entry/router-init.ts +418 -0
  922. package/src/client/browser-entry/rsc-stream.ts +166 -0
  923. package/src/client/browser-entry/scroll.ts +50 -0
  924. package/src/client/deny-last-resort.tsx +54 -0
  925. package/src/client/error-boundary.tsx +316 -40
  926. package/src/client/error-reconstituter.tsx +79 -0
  927. package/src/client/form.tsx +36 -32
  928. package/src/client/global-context.ts +31 -0
  929. package/src/client/history.ts +81 -10
  930. package/src/client/index.ts +89 -53
  931. package/src/client/internal.ts +59 -0
  932. package/src/client/link.tsx +452 -159
  933. package/src/client/location-search.ts +15 -0
  934. package/src/client/navigation-api.ts +347 -0
  935. package/src/client/navigation-commit.ts +295 -0
  936. package/src/client/navigation-context.ts +67 -98
  937. package/src/client/navigation-root.tsx +224 -0
  938. package/src/client/navigation-transition.ts +327 -0
  939. package/src/client/nuqs-adapter.tsx +21 -9
  940. package/src/client/params-context.ts +187 -0
  941. package/src/client/react-root.ts +72 -0
  942. package/src/client/router-effects.ts +228 -0
  943. package/src/client/router-lifecycle.ts +354 -0
  944. package/src/client/router-pipeline.ts +490 -0
  945. package/src/client/router-ref.ts +3 -3
  946. package/src/client/router-skew.ts +30 -0
  947. package/src/client/router-types.ts +294 -0
  948. package/src/client/router.ts +436 -424
  949. package/src/client/rsc-fetch.ts +512 -73
  950. package/src/client/segment-cache.ts +327 -40
  951. package/src/client/segment-context.ts +13 -5
  952. package/src/client/segment-outlet.tsx +96 -0
  953. package/src/client/segment-update-context.ts +23 -0
  954. package/src/client/shallow-url.ts +22 -0
  955. package/src/client/slot-content-cache-context.ts +43 -0
  956. package/src/client/slot-context.ts +50 -0
  957. package/src/client/slot-outlet.tsx +22 -0
  958. package/src/client/slot-provider.tsx +32 -0
  959. package/src/client/ssr-data.ts +30 -9
  960. package/src/client/stale-client.ts +191 -0
  961. package/src/client/state.ts +29 -15
  962. package/src/client/status-page-marker.tsx +32 -0
  963. package/src/client/top-loader.tsx +36 -29
  964. package/src/client/unload-guard.ts +35 -3
  965. package/src/client/use-cookie.ts +70 -18
  966. package/src/client/use-link-status.ts +7 -7
  967. package/src/client/use-pathname.ts +22 -31
  968. package/src/client/use-pending-navigation.ts +40 -0
  969. package/src/client/use-query-states.ts +206 -36
  970. package/src/client/use-router.ts +6 -3
  971. package/src/client/use-search-params.ts +38 -49
  972. package/src/client/use-segment-params.ts +69 -0
  973. package/src/client/use-selected-layout-segment.ts +2 -2
  974. package/src/codec.ts +149 -0
  975. package/src/config-types.ts +322 -0
  976. package/src/config-validation.ts +347 -0
  977. package/src/cookies/define-cookie.ts +222 -53
  978. package/src/cookies/index.ts +13 -2
  979. package/src/cookies/json-cookie.ts +105 -0
  980. package/src/cookies/validation.ts +192 -0
  981. package/src/dev-tools/404-page.ts +286 -0
  982. package/src/dev-tools/browser-logs.ts +55 -0
  983. package/src/dev-tools/dev-page-shell.ts +260 -0
  984. package/src/dev-tools/error-page.ts +331 -0
  985. package/src/dev-tools/holding-server.ts +185 -0
  986. package/src/dev-tools/hydration-overlay.ts +158 -0
  987. package/src/dev-tools/index.ts +83 -0
  988. package/src/dev-tools/instrumentation.ts +213 -0
  989. package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
  990. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
  991. package/src/dev-tools/overlay.ts +469 -0
  992. package/src/dev-tools/stack-classifier.ts +75 -0
  993. package/src/dev-tools/terminal.ts +182 -0
  994. package/src/fonts/ast-walk.ts +235 -0
  995. package/src/fonts/ast.ts +479 -128
  996. package/src/fonts/bundle.ts +138 -0
  997. package/src/fonts/css.ts +3 -2
  998. package/src/fonts/dev-middleware.ts +85 -0
  999. package/src/fonts/fallbacks.ts +0 -23
  1000. package/src/fonts/google.ts +101 -19
  1001. package/src/fonts/local.ts +13 -8
  1002. package/src/fonts/paths.ts +58 -0
  1003. package/src/fonts/pipeline.ts +348 -0
  1004. package/src/fonts/transform.ts +311 -0
  1005. package/src/fonts/types.ts +52 -1
  1006. package/src/fonts/virtual-modules.ts +179 -0
  1007. package/src/index.ts +486 -344
  1008. package/src/params/codec-registry.ts +34 -0
  1009. package/src/params/define-schema.ts +115 -0
  1010. package/src/params/index.ts +17 -0
  1011. package/src/params/resolve-schema.ts +84 -0
  1012. package/src/plugin-context.ts +503 -0
  1013. package/src/plugins/adapter-build.ts +229 -7
  1014. package/src/plugins/build-manifest.ts +201 -26
  1015. package/src/plugins/build-report.ts +275 -43
  1016. package/src/plugins/cache.ts +243 -0
  1017. package/src/plugins/callsite-ast.ts +472 -0
  1018. package/src/plugins/callsite-jsx.ts +243 -0
  1019. package/src/plugins/chunks.ts +74 -5
  1020. package/src/plugins/client-chunks.ts +185 -0
  1021. package/src/plugins/cloudflare-wasm.ts +141 -0
  1022. package/src/plugins/content.ts +5 -1
  1023. package/src/plugins/dev-discovery.ts +218 -0
  1024. package/src/plugins/dev-server.ts +369 -96
  1025. package/src/plugins/entries.ts +148 -18
  1026. package/src/plugins/fonts.ts +251 -524
  1027. package/src/plugins/graph-endpoint.ts +532 -0
  1028. package/src/plugins/mdx.ts +116 -40
  1029. package/src/plugins/prebuilt-capture.ts +217 -0
  1030. package/src/plugins/prebuilt-options-analysis.ts +175 -0
  1031. package/src/plugins/prebuilt.ts +655 -0
  1032. package/src/plugins/prerender-sugar.ts +320 -0
  1033. package/src/plugins/request-dep/analysis.ts +447 -0
  1034. package/src/plugins/request-dep/index.ts +376 -0
  1035. package/src/plugins/request-dep/origin.ts +310 -0
  1036. package/src/plugins/routing.ts +273 -277
  1037. package/src/plugins/server-bundle.ts +103 -14
  1038. package/src/plugins/shims.ts +259 -97
  1039. package/src/plugins/static-build.ts +708 -66
  1040. package/src/react-canary.d.ts +2 -0
  1041. package/src/routing/codegen-shared.ts +39 -0
  1042. package/src/routing/codegen-types.ts +62 -0
  1043. package/src/routing/codegen-write.ts +141 -0
  1044. package/src/routing/codegen.ts +349 -232
  1045. package/src/routing/collision-probe.ts +438 -0
  1046. package/src/routing/collision-spaces.ts +281 -0
  1047. package/src/routing/convention-lint.ts +623 -0
  1048. package/src/routing/export-detect.ts +448 -0
  1049. package/src/routing/file-cache.ts +23 -0
  1050. package/src/routing/index.ts +16 -7
  1051. package/src/routing/interception-overlap.ts +141 -0
  1052. package/src/routing/interception.ts +1044 -67
  1053. package/src/routing/link-codegen.ts +280 -0
  1054. package/src/routing/manifest-codegen.ts +226 -0
  1055. package/src/routing/scanner.ts +393 -219
  1056. package/src/routing/schema-validation.ts +155 -0
  1057. package/src/routing/segment-classify.ts +280 -0
  1058. package/src/routing/segment-codegen.ts +98 -0
  1059. package/src/routing/segment-keys.ts +186 -0
  1060. package/src/routing/slot-placement.ts +97 -0
  1061. package/src/routing/types.ts +75 -26
  1062. package/src/routing/walkers.ts +98 -0
  1063. package/src/rsc-runtime/rsc.ts +9 -0
  1064. package/src/rsc-runtime/ssr.ts +51 -0
  1065. package/src/rsc-runtime/transforms.ts +13 -0
  1066. package/src/rsc-runtime/vendor-types.d.ts +19 -0
  1067. package/src/schema-bridge.ts +380 -0
  1068. package/src/search-params/define.ts +677 -0
  1069. package/src/search-params/index.ts +14 -20
  1070. package/src/search-params/parse-total.ts +91 -0
  1071. package/src/search-params/serialize-equal.ts +14 -0
  1072. package/src/search-params/wrappers.ts +150 -0
  1073. package/src/server/access-gate.tsx +196 -57
  1074. package/src/server/action-client.ts +136 -35
  1075. package/src/server/action-encryption.ts +144 -0
  1076. package/src/server/action-handler.ts +256 -56
  1077. package/src/server/actions.ts +112 -68
  1078. package/src/server/als-registry.ts +160 -21
  1079. package/src/server/asset-headers.ts +15 -37
  1080. package/src/server/body-limits.ts +10 -2
  1081. package/src/server/build-manifest.ts +33 -57
  1082. package/src/server/canonicalize.ts +6 -3
  1083. package/src/server/chain-url-parts.ts +163 -0
  1084. package/src/server/children-interception.ts +115 -0
  1085. package/src/server/coalesce-tick.ts +75 -0
  1086. package/src/server/compress.ts +43 -8
  1087. package/src/server/cookie-context.ts +484 -0
  1088. package/src/server/cookie-parsing.ts +163 -0
  1089. package/src/server/csp-nonce.ts +70 -0
  1090. package/src/server/csrf.ts +39 -6
  1091. package/src/server/debug.ts +137 -0
  1092. package/src/server/default-logger.ts +99 -0
  1093. package/src/server/default-status-page.ts +88 -0
  1094. package/src/server/deny-boundary.ts +533 -0
  1095. package/src/server/deny-renderer.ts +214 -112
  1096. package/src/server/dev-source-map.ts +31 -0
  1097. package/src/server/early-hints-sender.ts +4 -3
  1098. package/src/server/early-hints.ts +39 -29
  1099. package/src/server/error-boundary-wrapper.ts +181 -44
  1100. package/src/server/error-response-headers.ts +18 -0
  1101. package/src/server/fallback-error.ts +79 -102
  1102. package/src/server/flight-injection-state.ts +113 -0
  1103. package/src/server/flight-scripts.ts +67 -0
  1104. package/src/server/form-data.ts +124 -12
  1105. package/src/server/form-flash.ts +2 -2
  1106. package/src/server/head-response.ts +54 -0
  1107. package/src/server/html-injector-core.ts +512 -0
  1108. package/src/server/html-injectors.ts +272 -235
  1109. package/src/server/index.ts +40 -192
  1110. package/src/server/instrumentation.ts +1 -1
  1111. package/src/server/internal.ts +173 -0
  1112. package/src/server/logger.ts +73 -36
  1113. package/src/server/metadata-collector.ts +174 -0
  1114. package/src/server/metadata-platform.ts +2 -2
  1115. package/src/server/metadata-render.ts +30 -8
  1116. package/src/server/metadata-routes.ts +205 -24
  1117. package/src/server/metadata-social.ts +2 -2
  1118. package/src/server/metadata.ts +23 -2
  1119. package/src/server/middleware-runner.ts +32 -5
  1120. package/src/server/node-stream-transforms.ts +323 -0
  1121. package/src/server/nuqs-ssr-provider.tsx +8 -7
  1122. package/src/server/param-coercion.ts +198 -0
  1123. package/src/server/pipeline-helpers.ts +159 -0
  1124. package/src/server/pipeline-interception.ts +109 -33
  1125. package/src/server/pipeline-metadata.ts +15 -1
  1126. package/src/server/pipeline-outcome.ts +218 -0
  1127. package/src/server/pipeline-phases.ts +606 -0
  1128. package/src/server/pipeline.ts +343 -389
  1129. package/src/server/port-resolution.ts +53 -0
  1130. package/src/server/prebuilt/cache-key.ts +299 -0
  1131. package/src/server/prebuilt/capture-state.ts +89 -0
  1132. package/src/server/prebuilt/key-discipline.ts +122 -0
  1133. package/src/server/prebuilt/manifest-tag-index.ts +46 -0
  1134. package/src/server/prebuilt/overlay.ts +256 -0
  1135. package/src/server/prebuilt/payload-source.ts +202 -0
  1136. package/src/server/prebuilt/slots.ts +190 -0
  1137. package/src/server/prebuilt/synthetic-store.ts +122 -0
  1138. package/src/server/prebuilt-builder.ts +804 -0
  1139. package/src/server/prebuilt-runtime.ts +817 -0
  1140. package/src/server/primitives.ts +246 -97
  1141. package/src/server/publish-params.ts +42 -0
  1142. package/src/server/render-timeout.ts +108 -0
  1143. package/src/server/render-utils.ts +35 -0
  1144. package/src/server/request-context.ts +244 -333
  1145. package/src/server/request-dep.ts +37 -0
  1146. package/src/server/response-cache-policy.ts +45 -0
  1147. package/src/server/route-element-builder.ts +508 -360
  1148. package/src/server/route-element-helpers.ts +37 -0
  1149. package/src/server/route-handler.ts +40 -13
  1150. package/src/server/route-matcher.ts +165 -272
  1151. package/src/server/route-module-loader.ts +161 -0
  1152. package/src/server/rsc-cache-key-guard.ts +122 -0
  1153. package/src/server/rsc-entry/action-middleware-runner.ts +174 -0
  1154. package/src/server/rsc-entry/api-handler.ts +78 -34
  1155. package/src/server/rsc-entry/deny-fallback.ts +93 -0
  1156. package/src/server/rsc-entry/error-renderer.ts +373 -95
  1157. package/src/server/rsc-entry/helpers.ts +226 -95
  1158. package/src/server/rsc-entry/index.ts +405 -323
  1159. package/src/server/rsc-entry/render-route.ts +304 -0
  1160. package/src/server/rsc-entry/revalidate-renderer.ts +350 -0
  1161. package/src/server/rsc-entry/rsc-payload.ts +239 -50
  1162. package/src/server/rsc-entry/rsc-stream.ts +160 -30
  1163. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  1164. package/src/server/rsc-entry/ssr-renderer.ts +315 -57
  1165. package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
  1166. package/src/server/rsc-error-envelope.ts +18 -0
  1167. package/src/server/rsc-prop-warnings.ts +3 -1
  1168. package/src/server/safe-load.ts +60 -0
  1169. package/src/server/sensitive-fields.ts +230 -0
  1170. package/src/server/server-only-guard-noop.js +3 -0
  1171. package/src/server/server-timing.ts +1 -1
  1172. package/src/server/sitemap-generator.ts +337 -0
  1173. package/src/server/sitemap-handler.ts +157 -0
  1174. package/src/server/skippable-prefix.ts +172 -0
  1175. package/src/server/slot-interception.ts +168 -0
  1176. package/src/server/slot-resolver.ts +707 -300
  1177. package/src/server/slot-subtree-contain.ts +255 -0
  1178. package/src/server/ssr-bridge-types.ts +165 -0
  1179. package/src/server/ssr-entry.ts +230 -85
  1180. package/src/server/ssr-render.ts +357 -85
  1181. package/src/server/ssr-wrappers.tsx +162 -0
  1182. package/src/server/state-tree-diff.ts +85 -30
  1183. package/src/server/static-generator.ts +715 -0
  1184. package/src/server/static-not-found.ts +134 -0
  1185. package/src/server/status-code-resolver.ts +107 -148
  1186. package/src/server/stream-utils.ts +292 -0
  1187. package/src/server/tracing.ts +151 -16
  1188. package/src/server/tree-match.ts +262 -0
  1189. package/src/server/types.ts +95 -10
  1190. package/src/server/utils/element-type.ts +88 -0
  1191. package/src/server/utils/escape-html.ts +20 -0
  1192. package/src/server/utils/mdx-file.ts +22 -0
  1193. package/src/server/version-skew.ts +104 -0
  1194. package/src/server/waituntil-bridge.ts +5 -2
  1195. package/src/server/workers-cache-bridge.ts +33 -0
  1196. package/src/shared/als-slots.ts +74 -0
  1197. package/src/shared/base-path.ts +80 -0
  1198. package/src/shared/href-validation.ts +159 -0
  1199. package/src/shared/merge-search-params.ts +55 -0
  1200. package/src/shared/param-value.ts +281 -0
  1201. package/src/shared/payload-root.ts +152 -0
  1202. package/src/shared/redirect-type.ts +17 -0
  1203. package/src/shared/rsc-cache-key.ts +269 -0
  1204. package/src/shared/rsc-error-envelope.ts +16 -0
  1205. package/src/shared/rsc-manifest.ts +29 -0
  1206. package/src/shared/rsc-media-type.ts +59 -0
  1207. package/src/shared/rsc-payload-path.ts +45 -0
  1208. package/src/shared/segment-info.ts +67 -0
  1209. package/src/shared/slot-params.ts +109 -0
  1210. package/src/shared/static-platform-files.ts +75 -0
  1211. package/src/shared/status-reason-phrase.ts +61 -0
  1212. package/src/shims/font-google.ts +1 -1
  1213. package/src/shims/font-local.ts +34 -0
  1214. package/src/shims/headers.ts +122 -1
  1215. package/src/shims/navigation-client.ts +36 -32
  1216. package/src/shims/navigation-rsc.ts +47 -0
  1217. package/src/shims/navigation.ts +10 -7
  1218. package/src/utils/state-machine.ts +111 -0
  1219. package/dist/_chunks/als-registry-k-AtAQ9R.js +0 -41
  1220. package/dist/_chunks/als-registry-k-AtAQ9R.js.map +0 -1
  1221. package/dist/_chunks/format-DNt20Kt8.js +0 -163
  1222. package/dist/_chunks/format-DNt20Kt8.js.map +0 -1
  1223. package/dist/_chunks/interception-DGDIjDbR.js +0 -676
  1224. package/dist/_chunks/interception-DGDIjDbR.js.map +0 -1
  1225. package/dist/_chunks/metadata-routes-CQCnF4VK.js +0 -153
  1226. package/dist/_chunks/metadata-routes-CQCnF4VK.js.map +0 -1
  1227. package/dist/_chunks/request-context-CRj2Zh1E.js +0 -329
  1228. package/dist/_chunks/request-context-CRj2Zh1E.js.map +0 -1
  1229. package/dist/_chunks/ssr-data-DLnbYpj1.js.map +0 -1
  1230. package/dist/_chunks/tracing-DF0G3FB7.js +0 -173
  1231. package/dist/_chunks/tracing-DF0G3FB7.js.map +0 -1
  1232. package/dist/_chunks/use-cookie-dDbpCTx-.js +0 -91
  1233. package/dist/_chunks/use-cookie-dDbpCTx-.js.map +0 -1
  1234. package/dist/_chunks/use-query-states-DAhgj8Gx.js +0 -109
  1235. package/dist/_chunks/use-query-states-DAhgj8Gx.js.map +0 -1
  1236. package/dist/adapters/cloudflare.js.map +0 -1
  1237. package/dist/cache/index.js.map +0 -1
  1238. package/dist/cache/register-cached-function.d.ts +0 -17
  1239. package/dist/cache/register-cached-function.d.ts.map +0 -1
  1240. package/dist/client/browser-entry.d.ts +0 -21
  1241. package/dist/client/browser-entry.d.ts.map +0 -1
  1242. package/dist/client/error-boundary.js.map +0 -1
  1243. package/dist/client/head.d.ts +0 -16
  1244. package/dist/client/head.d.ts.map +0 -1
  1245. package/dist/client/link-status-provider.d.ts +0 -11
  1246. package/dist/client/link-status-provider.d.ts.map +0 -1
  1247. package/dist/client/segment-merger.d.ts +0 -119
  1248. package/dist/client/segment-merger.d.ts.map +0 -1
  1249. package/dist/client/stale-reload.d.ts +0 -44
  1250. package/dist/client/stale-reload.d.ts.map +0 -1
  1251. package/dist/client/transition-root.d.ts +0 -74
  1252. package/dist/client/transition-root.d.ts.map +0 -1
  1253. package/dist/client/use-navigation-pending.d.ts +0 -26
  1254. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  1255. package/dist/client/use-params.d.ts +0 -92
  1256. package/dist/client/use-params.d.ts.map +0 -1
  1257. package/dist/content/index.d.ts +0 -11
  1258. package/dist/content/index.d.ts.map +0 -1
  1259. package/dist/content/index.js +0 -2
  1260. package/dist/plugins/cache-transform.d.ts +0 -36
  1261. package/dist/plugins/cache-transform.d.ts.map +0 -1
  1262. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  1263. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  1264. package/dist/plugins/dev-logs.d.ts.map +0 -1
  1265. package/dist/plugins/dynamic-transform.d.ts +0 -72
  1266. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  1267. package/dist/plugins/server-action-exports.d.ts +0 -26
  1268. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  1269. package/dist/routing/status-file-lint.d.ts +0 -33
  1270. package/dist/routing/status-file-lint.d.ts.map +0 -1
  1271. package/dist/search-params/analyze.d.ts +0 -54
  1272. package/dist/search-params/analyze.d.ts.map +0 -1
  1273. package/dist/search-params/builtin-codecs.d.ts +0 -105
  1274. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  1275. package/dist/search-params/codecs.d.ts +0 -53
  1276. package/dist/search-params/codecs.d.ts.map +0 -1
  1277. package/dist/search-params/create.d.ts +0 -106
  1278. package/dist/search-params/create.d.ts.map +0 -1
  1279. package/dist/search-params/registry.d.ts +0 -20
  1280. package/dist/search-params/registry.d.ts.map +0 -1
  1281. package/dist/server/client-module-map.d.ts +0 -47
  1282. package/dist/server/client-module-map.d.ts.map +0 -1
  1283. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  1284. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  1285. package/dist/server/dev-logger.d.ts.map +0 -1
  1286. package/dist/server/dev-span-processor.d.ts +0 -29
  1287. package/dist/server/dev-span-processor.d.ts.map +0 -1
  1288. package/dist/server/dev-warnings.d.ts +0 -129
  1289. package/dist/server/dev-warnings.d.ts.map +0 -1
  1290. package/dist/server/flush.d.ts +0 -74
  1291. package/dist/server/flush.d.ts.map +0 -1
  1292. package/dist/server/manifest-status-resolver.d.ts +0 -58
  1293. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  1294. package/dist/server/prerender.d.ts +0 -77
  1295. package/dist/server/prerender.d.ts.map +0 -1
  1296. package/dist/server/tree-builder.d.ts +0 -126
  1297. package/dist/server/tree-builder.d.ts.map +0 -1
  1298. package/dist/utils/directive-parser.d.ts +0 -70
  1299. package/dist/utils/directive-parser.d.ts.map +0 -1
  1300. package/src/cache/register-cached-function.ts +0 -99
  1301. package/src/client/browser-entry.ts +0 -674
  1302. package/src/client/head.ts +0 -61
  1303. package/src/client/link-status-provider.tsx +0 -30
  1304. package/src/client/segment-merger.ts +0 -345
  1305. package/src/client/stale-reload.ts +0 -89
  1306. package/src/client/transition-root.tsx +0 -160
  1307. package/src/client/use-navigation-pending.ts +0 -38
  1308. package/src/client/use-params.ts +0 -141
  1309. package/src/content/index.ts +0 -13
  1310. package/src/plugins/cache-transform.ts +0 -199
  1311. package/src/plugins/dev-error-overlay.ts +0 -230
  1312. package/src/plugins/dynamic-transform.ts +0 -161
  1313. package/src/plugins/server-action-exports.ts +0 -220
  1314. package/src/routing/status-file-lint.ts +0 -112
  1315. package/src/search-params/analyze.ts +0 -192
  1316. package/src/search-params/builtin-codecs.ts +0 -228
  1317. package/src/search-params/codecs.ts +0 -153
  1318. package/src/search-params/create.ts +0 -321
  1319. package/src/search-params/registry.ts +0 -31
  1320. package/src/server/client-module-map.ts +0 -58
  1321. package/src/server/dev-fetch-instrumentation.ts +0 -96
  1322. package/src/server/dev-span-processor.ts +0 -78
  1323. package/src/server/dev-warnings.ts +0 -282
  1324. package/src/server/flush.ts +0 -182
  1325. package/src/server/manifest-status-resolver.ts +0 -215
  1326. package/src/server/prerender.ts +0 -139
  1327. package/src/server/tree-builder.ts +0 -382
  1328. package/src/shims/server-only-noop.js +0 -6
  1329. package/src/utils/directive-parser.ts +0 -529
package/src/index.ts CHANGED
@@ -1,343 +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
- * Control client-side JavaScript output.
51
- *
52
- * Boolean shorthand:
53
- * `clientJavascript: false` disables all client JS (equivalent to `{ disabled: true }`).
54
- * `clientJavascript: true` enables client JS (the default).
55
- *
56
- * Object form:
57
- * `clientJavascript: { disabled: true, enableHMRInDev: true }` disables client JS
58
- * in production but preserves Vite HMR in dev mode.
59
- *
60
- * When `disabled` is true, `enableHMRInDev` defaults to `true`.
61
- * Server-side JS still runs — this only affects what is sent to the browser.
62
- */
63
- clientJavascript?: boolean | ClientJavascriptConfig;
64
- adapter?: unknown;
65
- cacheHandler?: unknown;
66
- allowedOrigins?: string[];
67
- csrf?: boolean;
68
- limits?: {
69
- actionBodySize?: string;
70
- uploadBodySize?: string;
71
- maxFields?: number;
72
- };
73
- pageExtensions?: string[];
74
- /**
75
- * Slow request threshold in milliseconds. Requests exceeding this emit
76
- * a warning via the logger. Set to 0 to disable. Default: 3000.
77
- *
78
- * See design/17-logging.md §"slowRequestMs".
79
- */
80
- slowRequestMs?: number;
81
- /** Dev-mode options. These have no effect in production builds. */
82
- dev?: {
83
- /** Threshold in ms to highlight slow phases in dev logging output. Default: 200. */
84
- slowPhaseMs?: number;
85
- };
86
- /**
87
- * Cookie signing configuration. See design/29-cookies.md §"Signed Cookies".
88
- *
89
- * Provide `secret` for a single key, or `secrets` (array) for key rotation.
90
- * When `secrets` is used, index 0 is the signing key; all are tried for verification.
91
- */
92
- cookies?: {
93
- /** Single signing secret. Shorthand for `secrets: [secret]`. */
94
- secret?: string;
95
- /** Array of signing secrets for key rotation. Index 0 signs; all verify. */
96
- secrets?: string[];
97
- };
98
- /**
99
- * Override the app directory location. By default, timber auto-detects
100
- * `app/` at the project root, falling back to `src/app/`.
101
- *
102
- * Set this to a relative path from the project root (e.g. `'src/app'`)
103
- * to use a custom location.
104
- */
105
- appDir?: string;
106
- /** MDX compilation options passed to @mdx-js/rollup. See design/20-content-collections.md. */
107
- mdx?: {
108
- remarkPlugins?: unknown[];
109
- rehypePlugins?: unknown[];
110
- recmaPlugins?: unknown[];
111
- remarkRehypeOptions?: Record<string, unknown>;
112
- };
113
- /**
114
- * Built-in top-loader progress bar for client navigations.
115
- * Shows an animated bar at the top of the viewport during RSC navigations.
116
- * Enabled by default — set `enabled: false` to opt out.
117
- *
118
- * Users who want a fully custom progress indicator should disable this
119
- * and use `useNavigationPending()` directly.
120
- *
121
- * See LOCAL-336 for design decisions.
122
- */
123
- topLoader?: {
124
- /** Whether the top-loader is enabled. Default: true. */
125
- enabled?: boolean;
126
- /** Bar color. Default: '#2299DD'. */
127
- color?: string;
128
- /** Bar height in pixels. Default: 3. */
129
- height?: number;
130
- /** Show subtle glow/shadow effect. Default: true. */
131
- shadow?: boolean;
132
- /** Delay in ms before showing the bar (avoids flash on fast navs). Default: 0. */
133
- delay?: number;
134
- /** CSS z-index. Default: 1600. */
135
- zIndex?: number;
136
- };
137
- }
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';
138
76
 
139
77
  /**
140
- * 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".
141
89
  */
142
- export function resolveClientJavascript(config: TimberUserConfig): ResolvedClientJavascript {
143
- if (config.clientJavascript !== undefined) {
144
- if (typeof config.clientJavascript === 'boolean') {
145
- // `clientJavascript: false` → disabled
146
- // `clientJavascript: true` → enabled (default)
147
- return {
148
- disabled: !config.clientJavascript,
149
- enableHMRInDev: !config.clientJavascript, // default true when disabled
150
- };
151
- }
152
- // Object form
153
- return {
154
- disabled: config.clientJavascript.disabled,
155
- enableHMRInDev: config.clientJavascript.enableHMRInDev ?? config.clientJavascript.disabled,
156
- };
157
- }
158
-
159
- // Default: client JS enabled
160
- return { disabled: false, enableHMRInDev: false };
161
- }
90
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type, typescript/no-empty-interface
91
+ export interface Routes {}
162
92
 
163
93
  /**
164
- * 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';
165
104
  *
166
- * Sub-plugins communicate through this context — not through Vite's
167
- * plugin API or global state.
168
- * See design/18-build-system.md §"Shared Plugin Context".
105
+ * export default defineConfig({
106
+ * output: 'server',
107
+ * pageExtensions: ['tsx', 'ts', 'mdx'],
108
+ * });
109
+ * ```
169
110
  */
170
- export interface PluginContext {
171
- config: TimberUserConfig;
172
- /** Resolved client JavaScript configuration */
173
- clientJavascript: ResolvedClientJavascript;
174
- /** The scanned route tree (populated by timber-routing, consumed by timber-entries) */
175
- routeTree: RouteTree | null;
176
- /** Absolute path to the app/ directory */
177
- appDir: string;
178
- /** Absolute path to the project root */
179
- root: string;
180
- /** Whether the dev server is running (set by timber-root-sync in configResolved) */
181
- dev: boolean;
182
- /** CSS build manifest (populated by adapter after client build, null in dev) */
183
- buildManifest: BuildManifest | null;
184
- /** Startup timer for profiling cold start phases (active in dev, no-op in prod) */
185
- timer: StartupTimer;
111
+ export function defineConfig(config: TimberUserConfig): TimberUserConfig {
112
+ return config;
186
113
  }
187
114
 
115
+ // ── Private helpers ───────────────────────────────────────────────────────
116
+
188
117
  /**
189
- * Resolve the app directory. Checks (in order):
190
- * 1. Explicit `configAppDir` from timber.config.ts
191
- * 2. `<root>/app`
192
- * 3. `<root>/src/app`
118
+ * Build the options object for @vitejs/plugin-rsc.
193
119
  *
194
- * 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.
195
124
  */
196
- export function resolveAppDir(root: string, configAppDir?: string): string {
197
- if (configAppDir) {
198
- const explicit = join(root, configAppDir);
199
- if (!existsSync(explicit)) {
200
- throw new Error(`[timber] Configured appDir "${configAppDir}" does not exist at ${explicit}`);
201
- }
202
- return explicit;
203
- }
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
+ };
204
146
 
205
- const rootApp = join(root, 'app');
206
- 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
+ });
207
161
 
208
- const srcApp = join(root, 'src', 'app');
209
- 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
+ }
210
167
 
211
- throw new Error(
212
- `[timber] Could not find app directory. Expected "app/" or "src/app/" in ${root}. ` +
213
- `You can set appDir in timber.config.ts to specify a custom location.`
214
- );
168
+ return options;
215
169
  }
216
170
 
217
- function createPluginContext(config?: TimberUserConfig, root?: string): PluginContext {
218
- const projectRoot = root ?? process.cwd();
219
- const resolvedConfig: TimberUserConfig = { output: 'server', ...config };
220
- // Timer starts as active — swapped to noop in configResolved for production builds
221
- return {
222
- config: resolvedConfig,
223
- clientJavascript: resolveClientJavascript(resolvedConfig),
224
- routeTree: null,
225
- appDir: join(projectRoot, 'app'),
226
- root: projectRoot,
227
- dev: false,
228
- buildManifest: null,
229
- timer: createStartupTimer(),
230
- };
231
- }
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.
232
174
 
233
- /**
234
- * Load timber.config.ts (or .js, .mjs) from the project root.
235
- * Returns the config object or null if no config file is found.
236
- */
237
- async function loadTimberConfigFile(root: string): Promise<TimberUserConfig | null> {
238
- const configNames = ['timber.config.ts', 'timber.config.js', 'timber.config.mjs'];
239
-
240
- for (const name of configNames) {
241
- const configPath = join(root, name);
242
- if (existsSync(configPath)) {
243
- const mod = await import(pathToFileURL(configPath).href);
244
- return (mod.default ?? mod) as TimberUserConfig;
245
- }
246
- }
247
- return null;
248
- }
175
+ // ── Main plugin factory ──────────────────────────────────────────────────
249
176
 
250
177
  /**
251
- * Detect config keys set in both inline (vite.config.ts) and file (timber.config.ts)
252
- * and warn the user. The `output` key is excluded because it defaults to 'server'
253
- * in createPluginContext and would always appear as an inline key.
178
+ * Create the timber Vite plugin array.
254
179
  *
255
- * 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.
256
191
  */
257
- export function warnConfigConflicts(
258
- inline: TimberUserConfig,
259
- fileConfig: TimberUserConfig
260
- ): string[] {
261
- const conflicts: string[] = [];
262
- for (const key of Object.keys(fileConfig) as (keyof TimberUserConfig)[]) {
263
- if (key === 'output') continue;
264
- if (key in inline && inline[key] !== undefined) {
265
- conflicts.push(key);
266
- }
267
- }
268
- if (conflicts.length > 0) {
269
- console.warn(
270
- `[timber] Config conflict: ${conflicts.map((k) => `"${k}"`).join(', ')} set in both ` +
271
- `vite.config.ts (inline) and timber.config.ts. ` +
272
- `Move all config to timber.config.ts to avoid confusion. ` +
273
- `The inline value from vite.config.ts will be used.`
274
- );
275
- }
276
- return conflicts;
277
- }
278
-
279
192
  /**
280
- * Merge file-based config into ctx.config. Inline config (already in ctx.config)
281
- * 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.
282
199
  */
283
- function mergeFileConfig(ctx: PluginContext, fileConfig: TimberUserConfig): void {
284
- const inline = ctx.config;
285
-
286
- // Warn if the same key is set in both places
287
- warnConfigConflicts(inline, fileConfig);
288
-
289
- // For each top-level key, use inline value if present, otherwise file value
290
- ctx.config = {
291
- ...fileConfig,
292
- ...inline,
293
- // Deep merge for nested objects where both exist
294
- ...(fileConfig.limits && inline.limits
295
- ? { limits: { ...fileConfig.limits, ...inline.limits } }
296
- : {}),
297
- ...(fileConfig.dev && inline.dev ? { dev: { ...fileConfig.dev, ...inline.dev } } : {}),
298
- ...(fileConfig.mdx && inline.mdx ? { mdx: { ...fileConfig.mdx, ...inline.mdx } } : {}),
299
- };
300
- }
301
-
302
- function timberCache(_ctx: PluginContext): Plugin {
303
- 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;
304
216
  }
305
217
 
306
218
  export function timber(config?: TimberUserConfig): PluginOption[] {
307
219
  const ctx = createPluginContext(config);
308
- // Sync ctx.root and ctx.appDir with Vite's resolved root, which may
309
- // differ from process.cwd() when --config points to a subdirectory.
310
- // 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).
311
254
  const rootSync: Plugin = {
312
255
  name: 'timber-root-sync',
313
- async config(userConfig, { command }) {
314
- // Load timber.config.ts early — before configResolved/buildStart — so
315
- // all plugins (including timber-mdx) see the merged config in their
316
- // buildStart hooks. The config hook runs once and supports async.
317
- 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());
318
277
  ctx.timer.start('config-load');
319
- const fileConfig = await loadTimberConfigFile(root);
278
+ const fileConfig = loadTimberConfigFile(viteRoot);
320
279
  if (fileConfig) {
321
- mergeFileConfig(ctx, fileConfig);
280
+ ctx.config = mergeFileConfig(ctx.config, fileConfig);
322
281
  ctx.clientJavascript = resolveClientJavascript(ctx.config);
323
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';
324
286
  ctx.timer.end('config-load');
325
287
 
326
- // 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.
327
323
  //
328
- // Vite determines dev vs prod JSX via `isProduction`, which checks
329
- // `process.env.NODE_ENV === 'production'`. If the shell has
330
- // NODE_ENV=development (common in dev toolchains), `vite build`
331
- // respects that and emits jsxDEV calls with fileName/lineNumber
332
- // args. This causes runtime crashes because the production React
333
- // jsx-runtime doesn't export jsxDEV, and also leaks file paths
334
- // into production bundles (security concern).
324
+ // For dev (`command === 'serve' && !isPreview`) we start the
325
+ // holding server on the requested port when available.
335
326
  //
336
- // We explicitly set `oxc.jsx.development: false` for builds so
337
- // the client bundle always uses jsx/jsxs from react/jsx-runtime,
338
- // 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
+
339
418
  if (command === 'build') {
340
419
  return {
420
+ build: { outDir: buildOutDir },
421
+ environments: envOutDirs,
422
+ optimizeDeps: { exclude: timberOptimizeDepsExclude },
341
423
  oxc: {
342
424
  jsx: {
343
425
  development: false,
@@ -345,11 +427,85 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
345
427
  },
346
428
  };
347
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
+ };
348
483
  },
349
484
  configResolved(resolved) {
350
485
  ctx.root = resolved.root;
351
486
  ctx.appDir = resolveAppDir(resolved.root, ctx.config.appDir);
352
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);
353
509
  // In production builds, swap to a no-op timer to avoid overhead
354
510
  if (!ctx.dev) {
355
511
  ctx.timer = createNoopTimer();
@@ -357,19 +513,36 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
357
513
  // Start the overall dev server setup timer — ends in timber-dev-server
358
514
  ctx.timer.start('dev-server-setup');
359
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
+ }
360
530
  },
361
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 ─────────────────────────────────────
362
540
  // @vitejs/plugin-rsc handles:
363
541
  // - RSC/SSR/client environment setup
364
542
  // - "use client" directive → client reference proxy transformation
365
543
  // - "use server" directive → server reference transformation
366
544
  // - Client reference tracking and module map generation
367
545
  //
368
- // Loaded via dynamic import() because @vitejs/plugin-rsc is ESM-only.
369
- // Vite's config loader uses esbuild to transpile to CJS, which breaks
370
- // static imports of ESM-only packages. The dynamic import() is preserved
371
- // by esbuild and runs natively in ESM at runtime.
372
- //
373
546
  // serverHandler: false — timber has its own dev server (timber-dev-server)
374
547
  // entries — tells the RSC plugin about timber's virtual entry modules so
375
548
  // it correctly wires up the browser entry (needed for React Fast Refresh
@@ -382,30 +555,6 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
382
555
  // We do NOT set customBuildApp — the RSC plugin's orchestration is correct
383
556
  // and handles bundle ordering, asset manifest generation, and environment
384
557
  // imports manifest. See @vitejs/plugin-rsc's buildApp implementation.
385
- // Resolve @vitejs/plugin-rsc from the consumer's project (process.cwd()),
386
- // not from timber's own node_modules. This is critical for pnpm link:
387
- // when linked, timber's node_modules has a separate vite instance, and
388
- // the RSC plugin must use the same vite instance as the dev server.
389
- const consumerRequire = createRequire(join(process.cwd(), 'package.json'));
390
- const rscPluginPath = consumerRequire.resolve('@vitejs/plugin-rsc');
391
- ctx.timer.start('rsc-plugin-import');
392
- const rscPluginsPromise = import(pathToFileURL(rscPluginPath).href).then(
393
- ({ default: vitePluginRsc }) => {
394
- ctx.timer.end('rsc-plugin-import');
395
- return vitePluginRsc({
396
- serverHandler: false,
397
- customClientEntry: true,
398
- entries: {
399
- rsc: 'virtual:timber-rsc-entry',
400
- ssr: 'virtual:timber-ssr-entry',
401
- client: 'virtual:timber-browser-entry',
402
- },
403
- // No custom clientChunks — Rolldown handles natural code splitting.
404
- // See design/27-chunking-strategy.md and LOCAL-337.
405
- });
406
- }
407
- );
408
-
409
558
  return [
410
559
  rootSync,
411
560
  timberReactProd(),
@@ -413,21 +562,27 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
413
562
  // for client components via Babel transform. Placed before @vitejs/plugin-rsc
414
563
  // following Vinext's convention — the RSC plugin's virtual browser entry
415
564
  // coordinates with plugin-react via __vite_plugin_react_preamble_installed__.
416
- react(),
417
- timberServerActionExports(),
418
- rscPluginsPromise,
565
+ ...patchReactCompilerForProdJsx(
566
+ react({
567
+ compiler: (effectiveReactCompiler || false) as boolean | ReactCompilerOptions,
568
+ })
569
+ ),
570
+ vitePluginRsc(createRscOptions(ctx, encryptionKeyExpr)),
419
571
  timberShims(ctx),
420
572
  timberRouting(ctx),
421
573
  timberEntries(ctx),
422
574
  timberBuildManifest(ctx),
423
- timberCache(ctx),
424
- timberStaticBuild(ctx),
425
- timberDynamicTransform(ctx),
426
575
  timberFonts(ctx),
427
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
428
582
  timberContent(ctx),
429
583
  timberServerBundle(), // Bundle all deps in server environments for prod
430
- timberChunks(),
584
+ timberCloudflareWasm(ctx), // Externalize WASM for Cloudflare Workers
585
+ timberChunks(ctx),
431
586
  timberBuildReport(ctx), // Post-build: route table with bundle sizes
432
587
  timberAdapterBuild(ctx), // Post-build: invoke adapter.buildOutput()
433
588
  timberDevLogs(ctx), // Dev-only: forward server console.* to browser console
@@ -435,17 +590,4 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
435
590
  ];
436
591
  }
437
592
 
438
- /**
439
- * Route map interface — augmented by the generated timber-routes.d.ts.
440
- *
441
- * Each key is a route path pattern. Values have:
442
- * params: shape of URL params (e.g. { id: string })
443
- * searchParams: parsed type from search-params.ts, or {} if none
444
- *
445
- * This interface is empty by default and populated via codegen.
446
- * See design/09-typescript.md §"Typed Routes".
447
- */
448
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
449
- export interface Routes {}
450
-
451
593
  export default timber;