@timber-js/app 0.2.0-alpha.16 → 0.2.0-alpha.161

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 (998) hide show
  1. package/LICENSE +8 -0
  2. package/agent-skill.md +344 -0
  3. package/dist/_chunks/actions-cjklt63G.js +317 -0
  4. package/dist/_chunks/actions-cjklt63G.js.map +1 -0
  5. package/dist/_chunks/build-output-helper-DF5uScqS.js +158 -0
  6. package/dist/_chunks/build-output-helper-DF5uScqS.js.map +1 -0
  7. package/dist/_chunks/cache-api-CzYUlgXA.js +1125 -0
  8. package/dist/_chunks/cache-api-CzYUlgXA.js.map +1 -0
  9. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → canonicalize-P41GR6tY.js} +94 -18
  10. package/dist/_chunks/canonicalize-P41GR6tY.js.map +1 -0
  11. package/dist/_chunks/cli-schema-sync-NfLbLnDw.js +638 -0
  12. package/dist/_chunks/cli-schema-sync-NfLbLnDw.js.map +1 -0
  13. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  14. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  15. package/dist/_chunks/define-Bssfp6ot.js +82 -0
  16. package/dist/_chunks/define-Bssfp6ot.js.map +1 -0
  17. package/dist/_chunks/define-CFmvb4Bt.js +203 -0
  18. package/dist/_chunks/define-CFmvb4Bt.js.map +1 -0
  19. package/dist/_chunks/dist-BA3u1z3W.js +423 -0
  20. package/dist/_chunks/dist-BA3u1z3W.js.map +1 -0
  21. package/dist/_chunks/fast-hash-D6hIVt1Y.js +36 -0
  22. package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +1 -0
  23. package/dist/_chunks/format-CfwjgPz9.js +14 -0
  24. package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
  25. package/dist/_chunks/href-validation-CMc5JRls.js +141 -0
  26. package/dist/_chunks/href-validation-CMc5JRls.js.map +1 -0
  27. package/dist/_chunks/logger-B_O6-mdJ.js +1485 -0
  28. package/dist/_chunks/logger-B_O6-mdJ.js.map +1 -0
  29. package/dist/_chunks/navigation-root-bUDZLw74.js +124 -0
  30. package/dist/_chunks/navigation-root-bUDZLw74.js.map +1 -0
  31. package/dist/_chunks/plugin-context-DeAxFRMq.js +280 -0
  32. package/dist/_chunks/plugin-context-DeAxFRMq.js.map +1 -0
  33. package/dist/_chunks/registry-DbJPKoBp.js +20 -0
  34. package/dist/_chunks/registry-DbJPKoBp.js.map +1 -0
  35. package/dist/_chunks/resolve-schema-3iUvBV5T.js +50 -0
  36. package/dist/_chunks/resolve-schema-3iUvBV5T.js.map +1 -0
  37. package/dist/_chunks/router-ref-CtmF-aPv.js +28 -0
  38. package/dist/_chunks/router-ref-CtmF-aPv.js.map +1 -0
  39. package/dist/_chunks/schema-bridge-BY3QLBL7.js +119 -0
  40. package/dist/_chunks/schema-bridge-BY3QLBL7.js.map +1 -0
  41. package/dist/_chunks/segment-classify-CDDRVKs7.js +137 -0
  42. package/dist/_chunks/segment-classify-CDDRVKs7.js.map +1 -0
  43. package/dist/_chunks/segment-context-ZDnXDkbz.js +34 -0
  44. package/dist/_chunks/segment-context-ZDnXDkbz.js.map +1 -0
  45. package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
  46. package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
  47. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BOWsq18U.js} +1 -1
  48. package/dist/_chunks/ssr-data-BOWsq18U.js.map +1 -0
  49. package/dist/_chunks/tree-match-D2l830j2.js +102 -0
  50. package/dist/_chunks/tree-match-D2l830j2.js.map +1 -0
  51. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-CbeQmext.js} +7 -20
  52. package/dist/_chunks/use-query-states-CbeQmext.js.map +1 -0
  53. package/dist/_chunks/use-segment-params-D1CzlgBo.js +151 -0
  54. package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +1 -0
  55. package/dist/_chunks/walkers-9mz9T7mb.js +988 -0
  56. package/dist/_chunks/walkers-9mz9T7mb.js.map +1 -0
  57. package/dist/adapters/build-output-helper.d.ts +29 -0
  58. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  59. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  60. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  61. package/dist/adapters/cloudflare-dev.js +73 -0
  62. package/dist/adapters/cloudflare-dev.js.map +1 -0
  63. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  64. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  65. package/dist/adapters/cloudflare-kv-cache.js +117 -0
  66. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  67. package/dist/adapters/cloudflare.d.ts +177 -20
  68. package/dist/adapters/cloudflare.d.ts.map +1 -1
  69. package/dist/adapters/cloudflare.js +337 -64
  70. package/dist/adapters/cloudflare.js.map +1 -1
  71. package/dist/adapters/compress-module.d.ts +5 -4
  72. package/dist/adapters/compress-module.d.ts.map +1 -1
  73. package/dist/adapters/nitro.d.ts +1 -3
  74. package/dist/adapters/nitro.d.ts.map +1 -1
  75. package/dist/adapters/nitro.js +144 -152
  76. package/dist/adapters/nitro.js.map +1 -1
  77. package/dist/adapters/shared.d.ts +6 -0
  78. package/dist/adapters/shared.d.ts.map +1 -0
  79. package/dist/adapters/types.d.ts +0 -6
  80. package/dist/adapters/types.d.ts.map +1 -1
  81. package/dist/cache/cache-api.d.ts +26 -0
  82. package/dist/cache/cache-api.d.ts.map +1 -0
  83. package/dist/cache/handler-store.d.ts +33 -0
  84. package/dist/cache/handler-store.d.ts.map +1 -0
  85. package/dist/cache/index.d.ts +27 -7
  86. package/dist/cache/index.d.ts.map +1 -1
  87. package/dist/cache/index.js +3 -326
  88. package/dist/cache/invalidation-epoch.d.ts +43 -0
  89. package/dist/cache/invalidation-epoch.d.ts.map +1 -0
  90. package/dist/cache/redis-handler.d.ts +97 -8
  91. package/dist/cache/redis-handler.d.ts.map +1 -1
  92. package/dist/cache/singleflight.d.ts +19 -2
  93. package/dist/cache/singleflight.d.ts.map +1 -1
  94. package/dist/cache/sizeof.d.ts +22 -0
  95. package/dist/cache/sizeof.d.ts.map +1 -0
  96. package/dist/cache/stable-stringify.d.ts +9 -0
  97. package/dist/cache/stable-stringify.d.ts.map +1 -1
  98. package/dist/cache/store.d.ts +53 -0
  99. package/dist/cache/store.d.ts.map +1 -0
  100. package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
  101. package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
  102. package/dist/cache/stores/cloudflare-kv.js +29 -0
  103. package/dist/cache/stores/cloudflare-kv.js.map +1 -0
  104. package/dist/cache/stores/memory.d.ts +42 -0
  105. package/dist/cache/stores/memory.d.ts.map +1 -0
  106. package/dist/cache/stores/memory.js +90 -0
  107. package/dist/cache/stores/memory.js.map +1 -0
  108. package/dist/cache/stores/redis.d.ts +69 -0
  109. package/dist/cache/stores/redis.d.ts.map +1 -0
  110. package/dist/cache/stores/redis.js +35 -0
  111. package/dist/cache/stores/redis.js.map +1 -0
  112. package/dist/cache/stores/vercel.d.ts +36 -0
  113. package/dist/cache/stores/vercel.d.ts.map +1 -0
  114. package/dist/cache/stores/vercel.js +33 -0
  115. package/dist/cache/stores/vercel.js.map +1 -0
  116. package/dist/cache/tag-aware-handler.d.ts +51 -0
  117. package/dist/cache/tag-aware-handler.d.ts.map +1 -0
  118. package/dist/cache/timber-cache.d.ts +20 -10
  119. package/dist/cache/timber-cache.d.ts.map +1 -1
  120. package/dist/cdn/cloudflare-purge.d.ts +23 -0
  121. package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
  122. package/dist/cdn/fastly-purge.d.ts +25 -0
  123. package/dist/cdn/fastly-purge.d.ts.map +1 -0
  124. package/dist/cdn/headers.d.ts +97 -0
  125. package/dist/cdn/headers.d.ts.map +1 -0
  126. package/dist/cdn/index.d.ts +5 -0
  127. package/dist/cdn/index.d.ts.map +1 -0
  128. package/dist/cdn/purge-store.d.ts +23 -0
  129. package/dist/cdn/purge-store.d.ts.map +1 -0
  130. package/dist/cdn/workers-cache-purge.d.ts +16 -0
  131. package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
  132. package/dist/cli-schema-sync.d.ts +59 -0
  133. package/dist/cli-schema-sync.d.ts.map +1 -0
  134. package/dist/cli.d.ts +34 -2
  135. package/dist/cli.d.ts.map +1 -1
  136. package/dist/cli.js +107 -33
  137. package/dist/cli.js.map +1 -1
  138. package/dist/client/browser-dev.d.ts +37 -1
  139. package/dist/client/browser-dev.d.ts.map +1 -1
  140. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  141. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  142. package/dist/client/browser-entry/hmr.d.ts +21 -0
  143. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  144. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  145. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  146. package/dist/client/browser-entry/index.d.ts +29 -0
  147. package/dist/client/browser-entry/index.d.ts.map +1 -0
  148. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  149. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  150. package/dist/client/browser-entry/router-init.d.ts +26 -0
  151. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  152. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  153. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  154. package/dist/client/browser-entry/scroll.d.ts +28 -0
  155. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  156. package/dist/client/child-segment-context.d.ts +22 -0
  157. package/dist/client/child-segment-context.d.ts.map +1 -0
  158. package/dist/client/child-segment-outlet.d.ts +18 -0
  159. package/dist/client/child-segment-outlet.d.ts.map +1 -0
  160. package/dist/client/child-segment-provider.d.ts +21 -0
  161. package/dist/client/child-segment-provider.d.ts.map +1 -0
  162. package/dist/client/error-boundary.d.ts +12 -5
  163. package/dist/client/error-boundary.d.ts.map +1 -1
  164. package/dist/client/error-boundary.js +47 -10
  165. package/dist/client/error-boundary.js.map +1 -1
  166. package/dist/client/error-reconstituter.d.ts +61 -0
  167. package/dist/client/error-reconstituter.d.ts.map +1 -0
  168. package/dist/client/form.d.ts +16 -27
  169. package/dist/client/form.d.ts.map +1 -1
  170. package/dist/client/history.d.ts +11 -6
  171. package/dist/client/history.d.ts.map +1 -1
  172. package/dist/client/index.d.ts +10 -24
  173. package/dist/client/index.d.ts.map +1 -1
  174. package/dist/client/index.js +182 -1134
  175. package/dist/client/index.js.map +1 -1
  176. package/dist/client/internal.d.ts +19 -0
  177. package/dist/client/internal.d.ts.map +1 -0
  178. package/dist/client/internal.js +825 -0
  179. package/dist/client/internal.js.map +1 -0
  180. package/dist/client/link.d.ts +69 -60
  181. package/dist/client/link.d.ts.map +1 -1
  182. package/dist/client/navigation-api.d.ts +120 -0
  183. package/dist/client/navigation-api.d.ts.map +1 -0
  184. package/dist/client/navigation-context.d.ts +3 -2
  185. package/dist/client/navigation-context.d.ts.map +1 -1
  186. package/dist/client/navigation-root.d.ts +119 -0
  187. package/dist/client/navigation-root.d.ts.map +1 -0
  188. package/dist/client/nuqs-adapter.d.ts +1 -1
  189. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  190. package/dist/client/router-ref.d.ts +1 -1
  191. package/dist/client/router.d.ts +87 -14
  192. package/dist/client/router.d.ts.map +1 -1
  193. package/dist/client/rsc-fetch.d.ts +47 -14
  194. package/dist/client/rsc-fetch.d.ts.map +1 -1
  195. package/dist/client/segment-cache.d.ts +4 -4
  196. package/dist/client/segment-cache.d.ts.map +1 -1
  197. package/dist/client/segment-outlet.d.ts +49 -0
  198. package/dist/client/segment-outlet.d.ts.map +1 -0
  199. package/dist/client/segment-update-context.d.ts +21 -0
  200. package/dist/client/segment-update-context.d.ts.map +1 -0
  201. package/dist/client/shallow-url.d.ts +10 -0
  202. package/dist/client/shallow-url.d.ts.map +1 -0
  203. package/dist/client/ssr-data.d.ts +13 -4
  204. package/dist/client/ssr-data.d.ts.map +1 -1
  205. package/dist/client/state.d.ts +1 -1
  206. package/dist/client/top-loader.d.ts +5 -5
  207. package/dist/client/top-loader.d.ts.map +1 -1
  208. package/dist/client/use-cookie.d.ts +12 -0
  209. package/dist/client/use-cookie.d.ts.map +1 -1
  210. package/dist/client/use-link-status.d.ts +5 -5
  211. package/dist/client/use-link-status.d.ts.map +1 -1
  212. package/dist/client/use-pathname.d.ts.map +1 -1
  213. package/dist/client/use-pending-navigation.d.ts +23 -0
  214. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  215. package/dist/client/use-query-states.d.ts +1 -1
  216. package/dist/client/use-query-states.d.ts.map +1 -1
  217. package/dist/client/use-router.d.ts +1 -1
  218. package/dist/client/use-router.d.ts.map +1 -1
  219. package/dist/client/use-search-params.d.ts +12 -5
  220. package/dist/client/use-search-params.d.ts.map +1 -1
  221. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  222. package/dist/client/use-segment-params.d.ts.map +1 -0
  223. package/dist/codec.d.ts +69 -0
  224. package/dist/codec.d.ts.map +1 -0
  225. package/dist/codec.js +75 -0
  226. package/dist/codec.js.map +1 -0
  227. package/dist/config-types.d.ts +304 -0
  228. package/dist/config-types.d.ts.map +1 -0
  229. package/dist/config-validation.d.ts +51 -0
  230. package/dist/config-validation.d.ts.map +1 -0
  231. package/dist/content/index.d.ts +1 -10
  232. package/dist/content/index.d.ts.map +1 -1
  233. package/dist/content/index.js +0 -2
  234. package/dist/cookies/define-cookie.d.ts +58 -25
  235. package/dist/cookies/define-cookie.d.ts.map +1 -1
  236. package/dist/cookies/index.d.ts +2 -1
  237. package/dist/cookies/index.d.ts.map +1 -1
  238. package/dist/cookies/index.js +257 -36
  239. package/dist/cookies/index.js.map +1 -1
  240. package/dist/cookies/json-cookie.d.ts +64 -0
  241. package/dist/cookies/json-cookie.d.ts.map +1 -0
  242. package/dist/cookies/validation.d.ts +34 -0
  243. package/dist/cookies/validation.d.ts.map +1 -0
  244. package/dist/dev-tools/404-page.d.ts +50 -0
  245. package/dist/dev-tools/404-page.d.ts.map +1 -0
  246. package/dist/dev-tools/browser-logs.d.ts +40 -0
  247. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  248. package/dist/dev-tools/dev-page-shell.d.ts +78 -0
  249. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  250. package/dist/dev-tools/error-page.d.ts +32 -0
  251. package/dist/dev-tools/error-page.d.ts.map +1 -0
  252. package/dist/dev-tools/holding-server.d.ts +54 -0
  253. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  254. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  255. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  256. package/dist/dev-tools/index.d.ts +31 -0
  257. package/dist/dev-tools/index.d.ts.map +1 -0
  258. package/dist/dev-tools/instrumentation.d.ts +59 -0
  259. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  260. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  261. package/dist/dev-tools/logger.d.ts.map +1 -0
  262. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  263. package/dist/dev-tools/logs.d.ts.map +1 -0
  264. package/dist/dev-tools/overlay.d.ts +91 -0
  265. package/dist/dev-tools/overlay.d.ts.map +1 -0
  266. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  267. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  268. package/dist/dev-tools/terminal.d.ts +28 -0
  269. package/dist/dev-tools/terminal.d.ts.map +1 -0
  270. package/dist/fonts/ast-walk.d.ts +68 -0
  271. package/dist/fonts/ast-walk.d.ts.map +1 -0
  272. package/dist/fonts/ast.d.ts +110 -6
  273. package/dist/fonts/ast.d.ts.map +1 -1
  274. package/dist/fonts/bundle.d.ts +50 -0
  275. package/dist/fonts/bundle.d.ts.map +1 -0
  276. package/dist/fonts/dev-middleware.d.ts +22 -0
  277. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  278. package/dist/fonts/fallbacks.d.ts +0 -7
  279. package/dist/fonts/fallbacks.d.ts.map +1 -1
  280. package/dist/fonts/google.d.ts +4 -2
  281. package/dist/fonts/google.d.ts.map +1 -1
  282. package/dist/fonts/local.d.ts +4 -4
  283. package/dist/fonts/local.d.ts.map +1 -1
  284. package/dist/fonts/paths.d.ts +43 -0
  285. package/dist/fonts/paths.d.ts.map +1 -0
  286. package/dist/fonts/pipeline.d.ts +158 -0
  287. package/dist/fonts/pipeline.d.ts.map +1 -0
  288. package/dist/fonts/transform.d.ts +82 -0
  289. package/dist/fonts/transform.d.ts.map +1 -0
  290. package/dist/fonts/types.d.ts +47 -1
  291. package/dist/fonts/types.d.ts.map +1 -1
  292. package/dist/fonts/virtual-modules.d.ts +77 -0
  293. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  294. package/dist/index.d.ts +46 -180
  295. package/dist/index.d.ts.map +1 -1
  296. package/dist/index.js +8471 -14108
  297. package/dist/index.js.map +1 -1
  298. package/dist/params/codec-registry.d.ts +26 -0
  299. package/dist/params/codec-registry.d.ts.map +1 -0
  300. package/dist/params/define-schema.d.ts +81 -0
  301. package/dist/params/define-schema.d.ts.map +1 -0
  302. package/dist/params/index.d.ts +5 -0
  303. package/dist/params/index.d.ts.map +1 -0
  304. package/dist/params/index.js +34 -0
  305. package/dist/params/index.js.map +1 -0
  306. package/dist/params/resolve-schema.d.ts +34 -0
  307. package/dist/params/resolve-schema.d.ts.map +1 -0
  308. package/dist/plugin-context.d.ts +190 -0
  309. package/dist/plugin-context.d.ts.map +1 -0
  310. package/dist/plugins/adapter-build.d.ts +20 -1
  311. package/dist/plugins/adapter-build.d.ts.map +1 -1
  312. package/dist/plugins/build-manifest.d.ts +7 -3
  313. package/dist/plugins/build-manifest.d.ts.map +1 -1
  314. package/dist/plugins/build-report.d.ts +43 -7
  315. package/dist/plugins/build-report.d.ts.map +1 -1
  316. package/dist/plugins/cache.d.ts +64 -0
  317. package/dist/plugins/cache.d.ts.map +1 -0
  318. package/dist/plugins/callsite-ast.d.ts +117 -0
  319. package/dist/plugins/callsite-ast.d.ts.map +1 -0
  320. package/dist/plugins/callsite-jsx.d.ts +35 -0
  321. package/dist/plugins/callsite-jsx.d.ts.map +1 -0
  322. package/dist/plugins/chunks.d.ts +11 -4
  323. package/dist/plugins/chunks.d.ts.map +1 -1
  324. package/dist/plugins/client-chunks.d.ts +40 -0
  325. package/dist/plugins/client-chunks.d.ts.map +1 -0
  326. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  327. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  328. package/dist/plugins/content.d.ts +1 -1
  329. package/dist/plugins/content.d.ts.map +1 -1
  330. package/dist/plugins/dev-server.d.ts +17 -1
  331. package/dist/plugins/dev-server.d.ts.map +1 -1
  332. package/dist/plugins/entries.d.ts +1 -1
  333. package/dist/plugins/entries.d.ts.map +1 -1
  334. package/dist/plugins/fonts.d.ts +16 -73
  335. package/dist/plugins/fonts.d.ts.map +1 -1
  336. package/dist/plugins/mdx.d.ts +1 -1
  337. package/dist/plugins/mdx.d.ts.map +1 -1
  338. package/dist/plugins/prebuilt-capture.d.ts +60 -0
  339. package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
  340. package/dist/plugins/prebuilt.d.ts +82 -0
  341. package/dist/plugins/prebuilt.d.ts.map +1 -0
  342. package/dist/plugins/prerender-sugar.d.ts +42 -0
  343. package/dist/plugins/prerender-sugar.d.ts.map +1 -0
  344. package/dist/plugins/routing.d.ts +1 -1
  345. package/dist/plugins/routing.d.ts.map +1 -1
  346. package/dist/plugins/server-bundle.d.ts.map +1 -1
  347. package/dist/plugins/shims.d.ts +29 -5
  348. package/dist/plugins/shims.d.ts.map +1 -1
  349. package/dist/plugins/static-build.d.ts +5 -26
  350. package/dist/plugins/static-build.d.ts.map +1 -1
  351. package/dist/routing/codegen-shared.d.ts +67 -0
  352. package/dist/routing/codegen-shared.d.ts.map +1 -0
  353. package/dist/routing/codegen-types.d.ts +64 -0
  354. package/dist/routing/codegen-types.d.ts.map +1 -0
  355. package/dist/routing/codegen.d.ts +7 -2
  356. package/dist/routing/codegen.d.ts.map +1 -1
  357. package/dist/routing/convention-lint.d.ts +41 -0
  358. package/dist/routing/convention-lint.d.ts.map +1 -0
  359. package/dist/routing/export-detect.d.ts +56 -0
  360. package/dist/routing/export-detect.d.ts.map +1 -0
  361. package/dist/routing/file-cache.d.ts +8 -0
  362. package/dist/routing/file-cache.d.ts.map +1 -0
  363. package/dist/routing/index.d.ts +7 -1
  364. package/dist/routing/index.d.ts.map +1 -1
  365. package/dist/routing/index.js +4 -2
  366. package/dist/routing/interception.d.ts +0 -5
  367. package/dist/routing/interception.d.ts.map +1 -1
  368. package/dist/routing/link-codegen.d.ts +90 -0
  369. package/dist/routing/link-codegen.d.ts.map +1 -0
  370. package/dist/routing/manifest-codegen.d.ts +32 -0
  371. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  372. package/dist/routing/scanner.d.ts +1 -10
  373. package/dist/routing/scanner.d.ts.map +1 -1
  374. package/dist/routing/schema-validation.d.ts +35 -0
  375. package/dist/routing/schema-validation.d.ts.map +1 -0
  376. package/dist/routing/segment-classify.d.ts +75 -0
  377. package/dist/routing/segment-classify.d.ts.map +1 -0
  378. package/dist/routing/segment-codegen.d.ts +38 -0
  379. package/dist/routing/segment-codegen.d.ts.map +1 -0
  380. package/dist/routing/types.d.ts +77 -25
  381. package/dist/routing/types.d.ts.map +1 -1
  382. package/dist/routing/walkers.d.ts +51 -0
  383. package/dist/routing/walkers.d.ts.map +1 -0
  384. package/dist/rsc-runtime/rsc.d.ts +1 -1
  385. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  386. package/dist/rsc-runtime/ssr.d.ts +12 -0
  387. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  388. package/dist/schema-bridge.d.ts +91 -0
  389. package/dist/schema-bridge.d.ts.map +1 -0
  390. package/dist/search-params/define.d.ts +157 -0
  391. package/dist/search-params/define.d.ts.map +1 -0
  392. package/dist/search-params/index.d.ts +4 -7
  393. package/dist/search-params/index.d.ts.map +1 -1
  394. package/dist/search-params/index.js +37 -440
  395. package/dist/search-params/index.js.map +1 -1
  396. package/dist/search-params/registry.d.ts +2 -2
  397. package/dist/search-params/registry.d.ts.map +1 -1
  398. package/dist/search-params/wrappers.d.ts +53 -0
  399. package/dist/search-params/wrappers.d.ts.map +1 -0
  400. package/dist/segment-params/define.d.ts +89 -0
  401. package/dist/segment-params/define.d.ts.map +1 -0
  402. package/dist/segment-params/index.d.ts +3 -0
  403. package/dist/segment-params/index.d.ts.map +1 -0
  404. package/dist/segment-params/index.js +2 -0
  405. package/dist/server/access-gate.d.ts +8 -3
  406. package/dist/server/access-gate.d.ts.map +1 -1
  407. package/dist/server/action-client.d.ts +41 -6
  408. package/dist/server/action-client.d.ts.map +1 -1
  409. package/dist/server/action-encryption.d.ts +76 -0
  410. package/dist/server/action-encryption.d.ts.map +1 -0
  411. package/dist/server/action-handler.d.ts +35 -1
  412. package/dist/server/action-handler.d.ts.map +1 -1
  413. package/dist/server/actions.d.ts +6 -30
  414. package/dist/server/actions.d.ts.map +1 -1
  415. package/dist/server/als-registry.d.ts +86 -11
  416. package/dist/server/als-registry.d.ts.map +1 -1
  417. package/dist/server/asset-headers.d.ts +8 -18
  418. package/dist/server/asset-headers.d.ts.map +1 -1
  419. package/dist/server/body-limits.d.ts.map +1 -1
  420. package/dist/server/build-manifest.d.ts +6 -29
  421. package/dist/server/build-manifest.d.ts.map +1 -1
  422. package/dist/server/canonicalize.d.ts +10 -0
  423. package/dist/server/canonicalize.d.ts.map +1 -1
  424. package/dist/server/coalesce-tick.d.ts +40 -0
  425. package/dist/server/coalesce-tick.d.ts.map +1 -0
  426. package/dist/server/cookie-context.d.ts +170 -0
  427. package/dist/server/cookie-context.d.ts.map +1 -0
  428. package/dist/server/cookie-parsing.d.ts +65 -0
  429. package/dist/server/cookie-parsing.d.ts.map +1 -0
  430. package/dist/server/csrf.d.ts +3 -2
  431. package/dist/server/csrf.d.ts.map +1 -1
  432. package/dist/server/default-logger.d.ts +22 -0
  433. package/dist/server/default-logger.d.ts.map +1 -0
  434. package/dist/server/deny-boundary.d.ts +115 -0
  435. package/dist/server/deny-boundary.d.ts.map +1 -0
  436. package/dist/server/deny-renderer.d.ts +2 -2
  437. package/dist/server/deny-renderer.d.ts.map +1 -1
  438. package/dist/server/dev-source-map.d.ts +22 -0
  439. package/dist/server/dev-source-map.d.ts.map +1 -0
  440. package/dist/server/early-hints-sender.d.ts.map +1 -1
  441. package/dist/server/early-hints.d.ts +13 -11
  442. package/dist/server/early-hints.d.ts.map +1 -1
  443. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  444. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  445. package/dist/server/fallback-error.d.ts +12 -7
  446. package/dist/server/fallback-error.d.ts.map +1 -1
  447. package/dist/server/flight-injection-state.d.ts +66 -0
  448. package/dist/server/flight-injection-state.d.ts.map +1 -0
  449. package/dist/server/flight-scripts.d.ts +42 -0
  450. package/dist/server/flight-scripts.d.ts.map +1 -0
  451. package/dist/server/form-data.d.ts +41 -0
  452. package/dist/server/form-data.d.ts.map +1 -1
  453. package/dist/server/html-injector-core.d.ts +221 -0
  454. package/dist/server/html-injector-core.d.ts.map +1 -0
  455. package/dist/server/html-injectors.d.ts +82 -41
  456. package/dist/server/html-injectors.d.ts.map +1 -1
  457. package/dist/server/index.d.ts +11 -47
  458. package/dist/server/index.d.ts.map +1 -1
  459. package/dist/server/index.js +170 -2911
  460. package/dist/server/index.js.map +1 -1
  461. package/dist/server/internal.d.ts +49 -0
  462. package/dist/server/internal.d.ts.map +1 -0
  463. package/dist/server/internal.js +3652 -0
  464. package/dist/server/internal.js.map +1 -0
  465. package/dist/server/logger.d.ts +39 -7
  466. package/dist/server/logger.d.ts.map +1 -1
  467. package/dist/server/metadata-routes.d.ts +23 -7
  468. package/dist/server/metadata-routes.d.ts.map +1 -1
  469. package/dist/server/middleware-runner.d.ts +36 -4
  470. package/dist/server/middleware-runner.d.ts.map +1 -1
  471. package/dist/server/node-stream-transforms.d.ts +119 -0
  472. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  473. package/dist/server/param-coercion.d.ts +54 -0
  474. package/dist/server/param-coercion.d.ts.map +1 -0
  475. package/dist/server/pipeline-helpers.d.ts +95 -0
  476. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  477. package/dist/server/pipeline-interception.d.ts +1 -1
  478. package/dist/server/pipeline-interception.d.ts.map +1 -1
  479. package/dist/server/pipeline-metadata.d.ts +6 -0
  480. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  481. package/dist/server/pipeline-outcome.d.ts +49 -0
  482. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  483. package/dist/server/pipeline-phases.d.ts +56 -0
  484. package/dist/server/pipeline-phases.d.ts.map +1 -0
  485. package/dist/server/pipeline.d.ts +122 -19
  486. package/dist/server/pipeline.d.ts.map +1 -1
  487. package/dist/server/port-resolution.d.ts +117 -0
  488. package/dist/server/port-resolution.d.ts.map +1 -0
  489. package/dist/server/prebuilt/cache-key.d.ts +58 -0
  490. package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
  491. package/dist/server/prebuilt/capture-state.d.ts +57 -0
  492. package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
  493. package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
  494. package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
  495. package/dist/server/prebuilt/overlay.d.ts +100 -0
  496. package/dist/server/prebuilt/overlay.d.ts.map +1 -0
  497. package/dist/server/prebuilt/payload-source.d.ts +78 -0
  498. package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
  499. package/dist/server/prebuilt/synthetic-store.d.ts +66 -0
  500. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
  501. package/dist/server/prebuilt-builder.d.ts +120 -0
  502. package/dist/server/prebuilt-builder.d.ts.map +1 -0
  503. package/dist/server/prebuilt-runtime.d.ts +101 -0
  504. package/dist/server/prebuilt-runtime.d.ts.map +1 -0
  505. package/dist/server/primitives.d.ts +88 -43
  506. package/dist/server/primitives.d.ts.map +1 -1
  507. package/dist/server/render-timeout.d.ts +51 -0
  508. package/dist/server/render-timeout.d.ts.map +1 -0
  509. package/dist/server/render-utils.d.ts +25 -0
  510. package/dist/server/render-utils.d.ts.map +1 -0
  511. package/dist/server/request-context.d.ts +62 -107
  512. package/dist/server/request-context.d.ts.map +1 -1
  513. package/dist/server/route-element-builder.d.ts +46 -25
  514. package/dist/server/route-element-builder.d.ts.map +1 -1
  515. package/dist/server/route-handler.d.ts.map +1 -1
  516. package/dist/server/route-matcher.d.ts +25 -36
  517. package/dist/server/route-matcher.d.ts.map +1 -1
  518. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  519. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  520. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  521. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  522. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  523. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  524. package/dist/server/rsc-entry/helpers.d.ts +51 -28
  525. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  526. package/dist/server/rsc-entry/index.d.ts +28 -6
  527. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  528. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  529. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  530. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  531. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  532. package/dist/server/rsc-entry/rsc-payload.d.ts +5 -6
  533. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  534. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  535. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  536. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  537. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  538. package/dist/server/rsc-entry/ssr-renderer.d.ts +34 -4
  539. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  540. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  541. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  542. package/dist/server/safe-load.d.ts +46 -0
  543. package/dist/server/safe-load.d.ts.map +1 -0
  544. package/dist/server/sensitive-fields.d.ts +74 -0
  545. package/dist/server/sensitive-fields.d.ts.map +1 -0
  546. package/dist/server/sitemap-generator.d.ts +129 -0
  547. package/dist/server/sitemap-generator.d.ts.map +1 -0
  548. package/dist/server/sitemap-handler.d.ts +22 -0
  549. package/dist/server/sitemap-handler.d.ts.map +1 -0
  550. package/dist/server/slot-resolver.d.ts +7 -5
  551. package/dist/server/slot-resolver.d.ts.map +1 -1
  552. package/dist/server/ssr-bridge-types.d.ts +121 -0
  553. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  554. package/dist/server/ssr-entry.d.ts +2 -43
  555. package/dist/server/ssr-entry.d.ts.map +1 -1
  556. package/dist/server/ssr-render.d.ts +64 -21
  557. package/dist/server/ssr-render.d.ts.map +1 -1
  558. package/dist/server/ssr-wrappers.d.ts +50 -0
  559. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  560. package/dist/server/state-tree-diff.d.ts +12 -5
  561. package/dist/server/state-tree-diff.d.ts.map +1 -1
  562. package/dist/server/status-code-resolver.d.ts +22 -11
  563. package/dist/server/status-code-resolver.d.ts.map +1 -1
  564. package/dist/server/stream-utils.d.ts +47 -0
  565. package/dist/server/stream-utils.d.ts.map +1 -0
  566. package/dist/server/tracing.d.ts +44 -9
  567. package/dist/server/tracing.d.ts.map +1 -1
  568. package/dist/server/tree-builder.d.ts +62 -30
  569. package/dist/server/tree-builder.d.ts.map +1 -1
  570. package/dist/server/tree-match.d.ts +49 -0
  571. package/dist/server/tree-match.d.ts.map +1 -0
  572. package/dist/server/types.d.ts +71 -6
  573. package/dist/server/types.d.ts.map +1 -1
  574. package/dist/server/utils/escape-html.d.ts +14 -0
  575. package/dist/server/utils/escape-html.d.ts.map +1 -0
  576. package/dist/server/utils/mdx-file.d.ts +15 -0
  577. package/dist/server/utils/mdx-file.d.ts.map +1 -0
  578. package/dist/server/version-skew.d.ts +61 -0
  579. package/dist/server/version-skew.d.ts.map +1 -0
  580. package/dist/server/workers-cache-bridge.d.ts +26 -0
  581. package/dist/server/workers-cache-bridge.d.ts.map +1 -0
  582. package/dist/shared/href-validation.d.ts +49 -0
  583. package/dist/shared/href-validation.d.ts.map +1 -0
  584. package/dist/shared/merge-search-params.d.ts +22 -0
  585. package/dist/shared/merge-search-params.d.ts.map +1 -0
  586. package/dist/shared/redirect-type.d.ts +17 -0
  587. package/dist/shared/redirect-type.d.ts.map +1 -0
  588. package/dist/shims/font-google.d.ts +1 -1
  589. package/dist/shims/font-google.d.ts.map +1 -1
  590. package/dist/shims/font-google.js +42 -0
  591. package/dist/shims/font-google.js.map +1 -0
  592. package/dist/shims/font-local.d.ts +26 -0
  593. package/dist/shims/font-local.d.ts.map +1 -0
  594. package/dist/shims/font-local.js +20 -0
  595. package/dist/shims/font-local.js.map +1 -0
  596. package/dist/shims/headers.d.ts +53 -1
  597. package/dist/shims/headers.d.ts.map +1 -1
  598. package/dist/shims/image.d.ts +16 -16
  599. package/dist/shims/navigation-client.d.ts +35 -11
  600. package/dist/shims/navigation-client.d.ts.map +1 -1
  601. package/dist/shims/navigation.d.ts +11 -5
  602. package/dist/shims/navigation.d.ts.map +1 -1
  603. package/dist/utils/state-machine.d.ts +80 -0
  604. package/dist/utils/state-machine.d.ts.map +1 -0
  605. package/docs/api/30-api-server.mdx +233 -0
  606. package/docs/api/31-api-client.mdx +161 -0
  607. package/docs/api/32-api-cache.mdx +199 -0
  608. package/docs/api/33-api-search-params.mdx +141 -0
  609. package/docs/api/34-api-config.mdx +189 -0
  610. package/docs/api/35-api-typescript.mdx +170 -0
  611. package/docs/api/36-cli.mdx +143 -0
  612. package/docs/learn/00-introduction.mdx +76 -0
  613. package/docs/learn/01-quick-start.mdx +94 -0
  614. package/docs/learn/02-pages-and-layouts.mdx +147 -0
  615. package/docs/learn/03-fetching-data.mdx +211 -0
  616. package/docs/learn/03b-access-control.mdx +130 -0
  617. package/docs/learn/04-loading-states.mdx +67 -0
  618. package/docs/learn/04b-the-flush-point.mdx +115 -0
  619. package/docs/learn/05-typed-params.mdx +275 -0
  620. package/docs/learn/06-forms-and-actions.mdx +146 -0
  621. package/docs/learn/07-typed-routes.mdx +127 -0
  622. package/docs/learn/08-streaming.mdx +146 -0
  623. package/docs/learn/09-caching.mdx +136 -0
  624. package/docs/learn/10-middleware.mdx +157 -0
  625. package/docs/learn/11-error-handling.mdx +156 -0
  626. package/docs/learn/12-client-navigation.mdx +168 -0
  627. package/docs/learn/13-configuration.mdx +145 -0
  628. package/docs/learn/14-deploying.mdx +264 -0
  629. package/docs/more/01-advanced-routing.mdx +139 -0
  630. package/docs/more/02-advanced-forms.mdx +137 -0
  631. package/docs/more/03-coming-from-nextjs.mdx +186 -0
  632. package/docs/more/04-metadata-and-fonts.mdx +193 -0
  633. package/docs/more/04b-mdx.mdx +209 -0
  634. package/docs/more/05-content-collections.mdx +90 -0
  635. package/docs/more/06-instrumentation.mdx +214 -0
  636. package/docs/more/07-security.mdx +129 -0
  637. package/docs/more/08-developer-experience.mdx +134 -0
  638. package/docs/more/40-why-timber.mdx +50 -0
  639. package/docs/more/41-timber-vs-nextjs.mdx +81 -0
  640. package/docs/more/42-timber-vs-others.mdx +68 -0
  641. package/docs/more/50-ai-agent-instructions.mdx +169 -0
  642. package/llms.txt +55 -0
  643. package/package.json +103 -26
  644. package/src/adapters/build-output-helper.ts +199 -0
  645. package/src/adapters/cloudflare-dev.ts +177 -0
  646. package/src/adapters/cloudflare-kv-cache.ts +179 -0
  647. package/src/adapters/cloudflare.ts +571 -118
  648. package/src/adapters/compress-module.ts +27 -92
  649. package/src/adapters/nitro.ts +131 -107
  650. package/src/adapters/raw-imports.d.ts +5 -0
  651. package/src/adapters/shared.ts +68 -0
  652. package/src/adapters/types.ts +0 -7
  653. package/src/adapters/wrangler.d.ts +7 -0
  654. package/src/cache/cache-api.ts +107 -0
  655. package/src/cache/handler-store.ts +76 -0
  656. package/src/cache/index.ts +88 -18
  657. package/src/cache/invalidation-epoch.ts +93 -0
  658. package/src/cache/redis-handler.ts +122 -15
  659. package/src/cache/singleflight.ts +64 -6
  660. package/src/cache/sizeof.ts +33 -0
  661. package/src/cache/stable-stringify.ts +65 -2
  662. package/src/cache/store.ts +71 -0
  663. package/src/cache/stores/cloudflare-kv.ts +52 -0
  664. package/src/cache/stores/memory.ts +125 -0
  665. package/src/cache/stores/redis.ts +97 -0
  666. package/src/cache/stores/vercel.ts +59 -0
  667. package/src/cache/tag-aware-handler.ts +233 -0
  668. package/src/cache/timber-cache.ts +142 -36
  669. package/src/cdn/cloudflare-purge.ts +50 -0
  670. package/src/cdn/fastly-purge.ts +63 -0
  671. package/src/cdn/headers.ts +153 -0
  672. package/src/cdn/index.ts +17 -0
  673. package/src/cdn/purge-store.ts +34 -0
  674. package/src/cdn/workers-cache-purge.ts +30 -0
  675. package/src/cli-schema-sync.ts +388 -0
  676. package/src/cli.ts +157 -34
  677. package/src/client/browser-dev.ts +156 -1
  678. package/src/client/browser-entry/action-dispatch.ts +124 -0
  679. package/src/client/browser-entry/hmr.ts +70 -0
  680. package/src/client/browser-entry/hydrate.ts +187 -0
  681. package/src/client/browser-entry/index.ts +111 -0
  682. package/src/client/browser-entry/post-hydration.ts +103 -0
  683. package/src/client/browser-entry/router-init.ts +287 -0
  684. package/src/client/browser-entry/rsc-stream.ts +157 -0
  685. package/src/client/browser-entry/scroll.ts +50 -0
  686. package/src/client/child-segment-context.ts +40 -0
  687. package/src/client/child-segment-outlet.tsx +25 -0
  688. package/src/client/child-segment-provider.tsx +27 -0
  689. package/src/client/error-boundary.tsx +127 -22
  690. package/src/client/error-reconstituter.tsx +79 -0
  691. package/src/client/form.tsx +31 -32
  692. package/src/client/history.ts +11 -7
  693. package/src/client/index.ts +67 -45
  694. package/src/client/internal.ts +58 -0
  695. package/src/client/link.tsx +346 -150
  696. package/src/client/navigation-api.ts +341 -0
  697. package/src/client/navigation-context.ts +15 -7
  698. package/src/client/navigation-root.tsx +355 -0
  699. package/src/client/nuqs-adapter.tsx +16 -3
  700. package/src/client/router-ref.ts +1 -1
  701. package/src/client/router.ts +482 -166
  702. package/src/client/rsc-fetch.ts +214 -33
  703. package/src/client/segment-cache.ts +7 -7
  704. package/src/client/segment-outlet.tsx +77 -0
  705. package/src/client/segment-update-context.ts +42 -0
  706. package/src/client/shallow-url.ts +22 -0
  707. package/src/client/ssr-data.ts +13 -5
  708. package/src/client/state.ts +2 -2
  709. package/src/client/top-loader.tsx +11 -9
  710. package/src/client/use-cookie.ts +60 -15
  711. package/src/client/use-link-status.ts +7 -7
  712. package/src/client/use-pathname.ts +1 -0
  713. package/src/client/use-pending-navigation.ts +40 -0
  714. package/src/client/use-query-states.ts +9 -3
  715. package/src/client/use-router.ts +4 -1
  716. package/src/client/use-search-params.ts +31 -44
  717. package/src/client/{use-params.ts → use-segment-params.ts} +9 -6
  718. package/src/codec.ts +147 -0
  719. package/src/config-types.ts +302 -0
  720. package/src/config-validation.ts +328 -0
  721. package/src/content/index.ts +5 -13
  722. package/src/cookies/define-cookie.ts +217 -53
  723. package/src/cookies/index.ts +12 -1
  724. package/src/cookies/json-cookie.ts +105 -0
  725. package/src/cookies/validation.ts +192 -0
  726. package/src/dev-tools/404-page.ts +286 -0
  727. package/src/dev-tools/browser-logs.ts +55 -0
  728. package/src/dev-tools/dev-page-shell.ts +260 -0
  729. package/src/dev-tools/error-page.ts +331 -0
  730. package/src/dev-tools/holding-server.ts +187 -0
  731. package/src/dev-tools/hydration-overlay.ts +158 -0
  732. package/src/dev-tools/index.ts +83 -0
  733. package/src/dev-tools/instrumentation.ts +213 -0
  734. package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
  735. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  736. package/src/dev-tools/overlay.ts +469 -0
  737. package/src/dev-tools/stack-classifier.ts +75 -0
  738. package/src/dev-tools/terminal.ts +182 -0
  739. package/src/fonts/ast-walk.ts +235 -0
  740. package/src/fonts/ast.ts +477 -126
  741. package/src/fonts/bundle.ts +138 -0
  742. package/src/fonts/dev-middleware.ts +85 -0
  743. package/src/fonts/fallbacks.ts +0 -23
  744. package/src/fonts/google.ts +63 -8
  745. package/src/fonts/local.ts +9 -8
  746. package/src/fonts/paths.ts +58 -0
  747. package/src/fonts/pipeline.ts +316 -0
  748. package/src/fonts/transform.ts +305 -0
  749. package/src/fonts/types.ts +52 -1
  750. package/src/fonts/virtual-modules.ts +179 -0
  751. package/src/index.ts +431 -352
  752. package/src/params/codec-registry.ts +34 -0
  753. package/src/params/define-schema.ts +115 -0
  754. package/src/params/index.ts +17 -0
  755. package/src/params/resolve-schema.ts +84 -0
  756. package/src/plugin-context.ts +378 -0
  757. package/src/plugins/adapter-build.ts +98 -4
  758. package/src/plugins/build-manifest.ts +168 -23
  759. package/src/plugins/build-report.ts +253 -35
  760. package/src/plugins/cache.ts +229 -0
  761. package/src/plugins/callsite-ast.ts +472 -0
  762. package/src/plugins/callsite-jsx.ts +243 -0
  763. package/src/plugins/chunks.ts +74 -5
  764. package/src/plugins/client-chunks.ts +144 -0
  765. package/src/plugins/cloudflare-wasm.ts +141 -0
  766. package/src/plugins/content.ts +1 -1
  767. package/src/plugins/dev-server.ts +293 -46
  768. package/src/plugins/entries.ts +129 -8
  769. package/src/plugins/fonts.ts +199 -664
  770. package/src/plugins/mdx.ts +47 -10
  771. package/src/plugins/prebuilt-capture.ts +217 -0
  772. package/src/plugins/prebuilt.ts +700 -0
  773. package/src/plugins/prerender-sugar.ts +329 -0
  774. package/src/plugins/routing.ts +237 -241
  775. package/src/plugins/server-bundle.ts +97 -12
  776. package/src/plugins/shims.ts +241 -64
  777. package/src/plugins/static-build.ts +15 -90
  778. package/src/routing/codegen-shared.ts +115 -0
  779. package/src/routing/codegen-types.ts +65 -0
  780. package/src/routing/codegen.ts +360 -178
  781. package/src/routing/convention-lint.ts +394 -0
  782. package/src/routing/export-detect.ts +304 -0
  783. package/src/routing/file-cache.ts +23 -0
  784. package/src/routing/index.ts +10 -1
  785. package/src/routing/interception.ts +3 -22
  786. package/src/routing/link-codegen.ts +310 -0
  787. package/src/routing/manifest-codegen.ts +281 -0
  788. package/src/routing/scanner.ts +248 -188
  789. package/src/routing/schema-validation.ts +149 -0
  790. package/src/routing/segment-classify.ts +188 -0
  791. package/src/routing/segment-codegen.ts +98 -0
  792. package/src/routing/types.ts +78 -25
  793. package/src/routing/walkers.ts +90 -0
  794. package/src/rsc-runtime/rsc.ts +9 -0
  795. package/src/rsc-runtime/ssr.ts +50 -0
  796. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  797. package/src/schema-bridge.ts +252 -0
  798. package/src/search-params/define.ts +570 -0
  799. package/src/search-params/index.ts +14 -20
  800. package/src/search-params/registry.ts +2 -2
  801. package/src/search-params/wrappers.ts +110 -0
  802. package/src/segment-params/define.ts +249 -0
  803. package/src/segment-params/index.ts +9 -0
  804. package/src/server/access-gate.tsx +84 -34
  805. package/src/server/action-client.ts +119 -28
  806. package/src/server/action-encryption.ts +144 -0
  807. package/src/server/action-handler.ts +123 -33
  808. package/src/server/actions.ts +48 -54
  809. package/src/server/als-registry.ts +130 -20
  810. package/src/server/asset-headers.ts +15 -37
  811. package/src/server/body-limits.ts +10 -2
  812. package/src/server/build-manifest.ts +13 -56
  813. package/src/server/canonicalize.ts +6 -3
  814. package/src/server/coalesce-tick.ts +75 -0
  815. package/src/server/compress.ts +34 -7
  816. package/src/server/cookie-context.ts +484 -0
  817. package/src/server/cookie-parsing.ts +163 -0
  818. package/src/server/csrf.ts +39 -6
  819. package/src/server/default-logger.ts +99 -0
  820. package/src/server/deny-boundary.ts +311 -0
  821. package/src/server/deny-renderer.ts +85 -77
  822. package/src/server/dev-source-map.ts +31 -0
  823. package/src/server/early-hints-sender.ts +3 -2
  824. package/src/server/early-hints.ts +37 -27
  825. package/src/server/error-boundary-wrapper.ts +61 -22
  826. package/src/server/fallback-error.ts +79 -102
  827. package/src/server/flight-injection-state.ts +113 -0
  828. package/src/server/flight-scripts.ts +62 -0
  829. package/src/server/form-data.ts +124 -12
  830. package/src/server/html-injector-core.ts +437 -0
  831. package/src/server/html-injectors.ts +267 -254
  832. package/src/server/index.ts +31 -185
  833. package/src/server/internal.ts +181 -0
  834. package/src/server/logger.ts +72 -36
  835. package/src/server/metadata-routes.ts +44 -19
  836. package/src/server/middleware-runner.ts +75 -4
  837. package/src/server/node-stream-transforms.ts +331 -0
  838. package/src/server/param-coercion.ts +206 -0
  839. package/src/server/pipeline-helpers.ts +204 -0
  840. package/src/server/pipeline-interception.ts +32 -18
  841. package/src/server/pipeline-metadata.ts +14 -0
  842. package/src/server/pipeline-outcome.ts +197 -0
  843. package/src/server/pipeline-phases.ts +538 -0
  844. package/src/server/pipeline.ts +226 -382
  845. package/src/server/port-resolution.ts +215 -0
  846. package/src/server/prebuilt/cache-key.ts +224 -0
  847. package/src/server/prebuilt/capture-state.ts +89 -0
  848. package/src/server/prebuilt/manifest-tag-index.ts +46 -0
  849. package/src/server/prebuilt/overlay.ts +256 -0
  850. package/src/server/prebuilt/payload-source.ts +201 -0
  851. package/src/server/prebuilt/synthetic-store.ts +121 -0
  852. package/src/server/prebuilt-builder.ts +774 -0
  853. package/src/server/prebuilt-runtime.ts +731 -0
  854. package/src/server/primitives.ts +160 -83
  855. package/src/server/render-timeout.ts +108 -0
  856. package/src/server/render-utils.ts +31 -0
  857. package/src/server/request-context.ts +168 -337
  858. package/src/server/route-element-builder.ts +548 -233
  859. package/src/server/route-handler.ts +31 -4
  860. package/src/server/route-matcher.ts +144 -277
  861. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  862. package/src/server/rsc-entry/api-handler.ts +69 -32
  863. package/src/server/rsc-entry/error-renderer.ts +306 -89
  864. package/src/server/rsc-entry/helpers.ts +160 -76
  865. package/src/server/rsc-entry/index.ts +394 -330
  866. package/src/server/rsc-entry/render-route.ts +288 -0
  867. package/src/server/rsc-entry/revalidate-renderer.ts +349 -0
  868. package/src/server/rsc-entry/rsc-payload.ts +74 -35
  869. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  870. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  871. package/src/server/rsc-entry/ssr-renderer.ts +273 -43
  872. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  873. package/src/server/safe-load.ts +60 -0
  874. package/src/server/sensitive-fields.ts +230 -0
  875. package/src/server/server-only-guard-noop.js +3 -0
  876. package/src/server/sitemap-generator.ts +344 -0
  877. package/src/server/sitemap-handler.ts +157 -0
  878. package/src/server/slot-resolver.ts +258 -257
  879. package/src/server/ssr-bridge-types.ts +124 -0
  880. package/src/server/ssr-entry.ts +206 -78
  881. package/src/server/ssr-render.ts +345 -82
  882. package/src/server/ssr-wrappers.tsx +141 -0
  883. package/src/server/state-tree-diff.ts +30 -23
  884. package/src/server/status-code-resolver.ts +115 -130
  885. package/src/server/stream-utils.ts +286 -0
  886. package/src/server/tracing.ts +126 -14
  887. package/src/server/tree-builder.ts +204 -90
  888. package/src/server/tree-match.ts +220 -0
  889. package/src/server/types.ts +78 -9
  890. package/src/server/utils/escape-html.ts +20 -0
  891. package/src/server/utils/mdx-file.ts +22 -0
  892. package/src/server/version-skew.ts +104 -0
  893. package/src/server/workers-cache-bridge.ts +33 -0
  894. package/src/shared/href-validation.ts +159 -0
  895. package/src/shared/merge-search-params.ts +55 -0
  896. package/src/shared/redirect-type.ts +17 -0
  897. package/src/shims/font-google.ts +1 -1
  898. package/src/shims/font-local.ts +34 -0
  899. package/src/shims/headers.ts +122 -1
  900. package/src/shims/navigation-client.ts +51 -29
  901. package/src/shims/navigation.ts +14 -7
  902. package/src/utils/state-machine.ts +111 -0
  903. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  904. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  905. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  906. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  907. package/dist/_chunks/format-RyoGQL74.js +0 -164
  908. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  909. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  910. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  911. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  912. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  913. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  914. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  915. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  916. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  917. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  918. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  919. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  920. package/dist/cache/index.js.map +0 -1
  921. package/dist/cache/register-cached-function.d.ts +0 -17
  922. package/dist/cache/register-cached-function.d.ts.map +0 -1
  923. package/dist/client/browser-entry.d.ts +0 -21
  924. package/dist/client/browser-entry.d.ts.map +0 -1
  925. package/dist/client/head.d.ts +0 -16
  926. package/dist/client/head.d.ts.map +0 -1
  927. package/dist/client/link-status-provider.d.ts +0 -11
  928. package/dist/client/link-status-provider.d.ts.map +0 -1
  929. package/dist/client/segment-merger.d.ts +0 -119
  930. package/dist/client/segment-merger.d.ts.map +0 -1
  931. package/dist/client/stale-reload.d.ts +0 -44
  932. package/dist/client/stale-reload.d.ts.map +0 -1
  933. package/dist/client/transition-root.d.ts +0 -74
  934. package/dist/client/transition-root.d.ts.map +0 -1
  935. package/dist/client/use-navigation-pending.d.ts +0 -26
  936. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  937. package/dist/client/use-params.d.ts.map +0 -1
  938. package/dist/plugins/cache-transform.d.ts +0 -36
  939. package/dist/plugins/cache-transform.d.ts.map +0 -1
  940. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  941. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  942. package/dist/plugins/dev-logs.d.ts.map +0 -1
  943. package/dist/plugins/dynamic-transform.d.ts +0 -72
  944. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  945. package/dist/plugins/server-action-exports.d.ts +0 -26
  946. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  947. package/dist/routing/status-file-lint.d.ts +0 -33
  948. package/dist/routing/status-file-lint.d.ts.map +0 -1
  949. package/dist/search-params/analyze.d.ts +0 -54
  950. package/dist/search-params/analyze.d.ts.map +0 -1
  951. package/dist/search-params/builtin-codecs.d.ts +0 -105
  952. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  953. package/dist/search-params/codecs.d.ts +0 -53
  954. package/dist/search-params/codecs.d.ts.map +0 -1
  955. package/dist/search-params/create.d.ts +0 -106
  956. package/dist/search-params/create.d.ts.map +0 -1
  957. package/dist/server/client-module-map.d.ts +0 -47
  958. package/dist/server/client-module-map.d.ts.map +0 -1
  959. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  960. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  961. package/dist/server/dev-logger.d.ts.map +0 -1
  962. package/dist/server/dev-span-processor.d.ts +0 -29
  963. package/dist/server/dev-span-processor.d.ts.map +0 -1
  964. package/dist/server/dev-warnings.d.ts +0 -129
  965. package/dist/server/dev-warnings.d.ts.map +0 -1
  966. package/dist/server/flush.d.ts +0 -74
  967. package/dist/server/flush.d.ts.map +0 -1
  968. package/dist/server/manifest-status-resolver.d.ts +0 -58
  969. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  970. package/dist/server/prerender.d.ts +0 -77
  971. package/dist/server/prerender.d.ts.map +0 -1
  972. package/dist/utils/directive-parser.d.ts +0 -70
  973. package/dist/utils/directive-parser.d.ts.map +0 -1
  974. package/src/cache/register-cached-function.ts +0 -103
  975. package/src/client/browser-entry.ts +0 -678
  976. package/src/client/head.ts +0 -61
  977. package/src/client/link-status-provider.tsx +0 -30
  978. package/src/client/segment-merger.ts +0 -339
  979. package/src/client/stale-reload.ts +0 -87
  980. package/src/client/transition-root.tsx +0 -166
  981. package/src/client/use-navigation-pending.ts +0 -38
  982. package/src/plugins/cache-transform.ts +0 -199
  983. package/src/plugins/dev-error-overlay.ts +0 -230
  984. package/src/plugins/dynamic-transform.ts +0 -161
  985. package/src/plugins/server-action-exports.ts +0 -220
  986. package/src/routing/status-file-lint.ts +0 -112
  987. package/src/search-params/analyze.ts +0 -192
  988. package/src/search-params/builtin-codecs.ts +0 -228
  989. package/src/search-params/codecs.ts +0 -153
  990. package/src/search-params/create.ts +0 -321
  991. package/src/server/client-module-map.ts +0 -58
  992. package/src/server/dev-fetch-instrumentation.ts +0 -96
  993. package/src/server/dev-span-processor.ts +0 -78
  994. package/src/server/dev-warnings.ts +0 -283
  995. package/src/server/flush.ts +0 -182
  996. package/src/server/manifest-status-resolver.ts +0 -215
  997. package/src/server/prerender.ts +0 -139
  998. package/src/utils/directive-parser.ts +0 -529
@@ -29,7 +29,6 @@ export type MetadataRouteType =
29
29
  | 'favicon'
30
30
  | 'icon'
31
31
  | 'opengraph-image'
32
- | 'twitter-image'
33
32
  | 'apple-icon';
34
33
 
35
34
  // ─── Convention Table ────────────────────────────────────────────────────────
@@ -84,7 +83,7 @@ export const METADATA_ROUTE_CONVENTIONS: Record<
84
83
  contentType: 'image/x-icon',
85
84
  nestable: false,
86
85
  staticExtensions: ['ico'],
87
- dynamicExtensions: [],
86
+ dynamicExtensions: ['ts', 'tsx'],
88
87
  servePath: 'favicon.ico',
89
88
  },
90
89
  'icon': {
@@ -103,14 +102,7 @@ export const METADATA_ROUTE_CONVENTIONS: Record<
103
102
  dynamicExtensions: ['ts', 'tsx'],
104
103
  servePath: 'opengraph-image',
105
104
  },
106
- 'twitter-image': {
107
- type: 'twitter-image',
108
- contentType: 'image/*',
109
- nestable: true,
110
- staticExtensions: ['png', 'jpg'],
111
- dynamicExtensions: ['ts', 'tsx'],
112
- servePath: 'twitter-image',
113
- },
105
+
114
106
  'apple-icon': {
115
107
  type: 'apple-icon',
116
108
  contentType: 'image/*',
@@ -225,26 +217,59 @@ export function getMetadataRouteServePath(type: MetadataRouteType): string {
225
217
  throw new Error(`[timber] Unknown metadata route type: ${type}`);
226
218
  }
227
219
 
220
+ const METADATA_SERVE_PATHS = new Set(
221
+ Object.values(METADATA_ROUTE_CONVENTIONS).map((c) => c.servePath)
222
+ );
223
+
224
+ export function isMetadataRouteServePath(pathname: string): boolean {
225
+ const lastSegment = pathname.slice(pathname.lastIndexOf('/') + 1);
226
+ return METADATA_SERVE_PATHS.has(lastSegment);
227
+ }
228
+
229
+ /** A <link> auto-link tag. */
230
+ export interface AutoLinkLink {
231
+ tag: 'link';
232
+ rel: string;
233
+ href: string;
234
+ type?: string;
235
+ }
236
+
237
+ /** A <meta> auto-link tag. */
238
+ export interface AutoLinkMeta {
239
+ tag: 'meta';
240
+ property?: string;
241
+ name?: string;
242
+ content: string;
243
+ }
244
+
245
+ export type AutoLinkTag = AutoLinkLink | AutoLinkMeta;
246
+
228
247
  /**
229
248
  * Get the auto-link tags to inject into <head> for metadata route files
230
249
  * discovered in a segment.
231
250
  *
251
+ * Returns link tags for icon/apple-icon/manifest, and meta tags for
252
+ * opengraph-image (emits both og:image and twitter:image). Returns null
253
+ * for types that don't auto-link (favicon, sitemap, robots).
254
+ *
232
255
  * @param type - The metadata route type
233
256
  * @param href - The resolved URL path to the metadata route
234
- * @returns An object with tag/attrs for the <head>, or null if no auto-link
257
+ * @returns Tag descriptor(s) for the <head>, or null if no auto-link
235
258
  */
236
- export function getMetadataRouteAutoLink(
237
- type: MetadataRouteType,
238
- href: string
239
- ): { rel: string; href: string; type?: string } | null {
259
+ export function getMetadataRouteAutoLink(type: MetadataRouteType, href: string): AutoLinkTag[] {
240
260
  switch (type) {
241
261
  case 'icon':
242
- return { rel: 'icon', href };
262
+ return [{ tag: 'link', rel: 'icon', href }];
243
263
  case 'apple-icon':
244
- return { rel: 'apple-touch-icon', href };
264
+ return [{ tag: 'link', rel: 'apple-touch-icon', href }];
245
265
  case 'manifest':
246
- return { rel: 'manifest', href };
266
+ return [{ tag: 'link', rel: 'manifest', href }];
267
+ case 'opengraph-image':
268
+ return [
269
+ { tag: 'meta', property: 'og:image', content: href },
270
+ { tag: 'meta', name: 'twitter:image', content: href },
271
+ ];
247
272
  default:
248
- return null;
273
+ return [];
249
274
  }
250
275
  }
@@ -1,9 +1,9 @@
1
1
  /**
2
- * Middleware runner — executes a route's middleware.ts before rendering.
2
+ * Middleware runner — executes a route's middleware.ts chain before rendering.
3
3
  *
4
- * Only the leaf route's middleware runs. There is no middleware chain.
5
- * Middleware does NOT have next() — it either short-circuits with a Response
6
- * or returns void to continue to access checks + render.
4
+ * All middleware.ts files in the segment chain run, root to leaf (top-down).
5
+ * The first middleware that returns a Response short-circuits the chain.
6
+ * There is no next() — each middleware is independent.
7
7
  *
8
8
  * See design/07-routing.md §"middleware.ts"
9
9
  */
@@ -30,3 +30,74 @@ export async function runMiddleware(
30
30
  }
31
31
  return undefined;
32
32
  }
33
+
34
+ /**
35
+ * Run all middleware functions in the segment chain, root to leaf.
36
+ *
37
+ * Execution is top-down: root middleware runs first, leaf middleware runs last.
38
+ * All middleware share the same MiddlewareContext — a parent that sets
39
+ * ctx.requestHeaders makes it visible to child middleware and downstream components.
40
+ *
41
+ * Short-circuits on the first middleware that returns a Response.
42
+ * Remaining middleware in the chain do not execute.
43
+ *
44
+ * @param chain - Middleware functions ordered root-to-leaf
45
+ * @param ctx - Shared middleware context
46
+ * @returns A Response if any middleware short-circuited, or undefined to continue
47
+ */
48
+ export async function runMiddlewareChain(
49
+ chain: MiddlewareFn[],
50
+ ctx: MiddlewareContext
51
+ ): Promise<Response | undefined> {
52
+ for (const fn of chain) {
53
+ const result = await fn(ctx);
54
+ if (result instanceof Response) {
55
+ return result;
56
+ }
57
+ }
58
+ return undefined;
59
+ }
60
+
61
+ // ─── Per-Request Middleware Bypass ─────────────────────────────────────────
62
+
63
+ /**
64
+ * Per-request marker for synthetic re-render requests that should NOT
65
+ * re-execute `middleware.ts`. The action-dispatch wrapper runs middleware
66
+ * once on the inbound action POST; when validation fails on the no-JS
67
+ * path, it builds a synthetic GET that flows through the normal pipeline
68
+ * to render the page with `getFormFlash()` data. Without this marker, the
69
+ * pipeline would run middleware a second time on that synthetic GET.
70
+ *
71
+ * The set is keyed by the synthetic Request object itself, so the entry
72
+ * lives exactly as long as the request and is garbage-collected with it.
73
+ * Cannot be set or detected by user code — there is no header, no URL
74
+ * parameter, nothing on the wire that an attacker could spoof.
75
+ *
76
+ * See TIM-871.
77
+ *
78
+ * @internal — framework use only.
79
+ */
80
+ const middlewareBypassRequests = new WeakSet<Request>();
81
+
82
+ /**
83
+ * Mark a request so the pipeline skips its middleware phase.
84
+ *
85
+ * Used by `wrap-action-dispatch.ts` for the no-JS form-rerender path.
86
+ *
87
+ * @internal
88
+ */
89
+ export function markRequestBypassMiddleware(req: Request): void {
90
+ middlewareBypassRequests.add(req);
91
+ }
92
+
93
+ /**
94
+ * Check whether a request was marked to bypass middleware.
95
+ *
96
+ * Called by `handleRequest` in pipeline-phases.ts before invoking the
97
+ * middleware phase. Returns false for any request not explicitly marked.
98
+ *
99
+ * @internal
100
+ */
101
+ export function shouldBypassMiddleware(req: Request): boolean {
102
+ return middlewareBypassRequests.has(req);
103
+ }
@@ -0,0 +1,331 @@
1
+ /**
2
+ * Node.js native stream transforms for SSR HTML post-processing.
3
+ *
4
+ * Node.js `Transform` wrappers around the pure helpers in
5
+ * `html-injector-core.ts`. Used on Node.js / Bun where C++-backed
6
+ * native streams are significantly faster than the JS-implemented
7
+ * Web Streams. The Web `TransformStream` equivalents live in
8
+ * `html-injectors.ts` and wrap the same core — keep the two files
9
+ * byte-for-byte equivalent in behavior. If you fix a streaming bug
10
+ * here, it almost certainly belongs in the core (`html-injector-core.ts`),
11
+ * not in this wrapper.
12
+ *
13
+ * Architecture:
14
+ * renderToPipeableStream → pipe(errorHandler) → pipe(headInjector)
15
+ * → pipe(flightInjector) → Readable.toWeb() → Response
16
+ *
17
+ * All chunks stay in C++ Node.js stream buffers until the final
18
+ * Readable.toWeb() conversion for the Response body.
19
+ */
20
+
21
+ import { PassThrough, Transform, type Readable } from 'node:stream';
22
+ import { pipeline } from 'node:stream/promises';
23
+
24
+ import {
25
+ BufferAggregator,
26
+ FlightInjectorCore,
27
+ SUFFIX_BYTES,
28
+ createInjectorState,
29
+ createSuffixState,
30
+ injectorFlush,
31
+ processInjectorChunk,
32
+ processSuffixChunk,
33
+ suffixFlush,
34
+ } from './html-injector-core.js';
35
+ import { logStreamingError } from './logger.js';
36
+ import { createTickCoalescer } from './coalesce-tick.js';
37
+ import { isAbortError, NOINDEX_SCRIPT } from './render-utils.js';
38
+
39
+ // ─── Buffered Transform ──────────────────────────────────────────────────────
40
+
41
+ export interface NodeBufferedTransformOptions {
42
+ /**
43
+ * Flush synchronously once the buffer reaches this many bytes.
44
+ * Prevents unbounded memory growth for very large Fizz flushes.
45
+ * Default: Infinity (no byte limit — flush only on tick boundary).
46
+ */
47
+ readonly maxBufferByteLength?: number;
48
+ }
49
+
50
+ /**
51
+ * Node.js `Transform` that buffers incoming chunks and coalesces them
52
+ * within a single event loop tick.
53
+ *
54
+ * Equivalent to `createBufferedTransformStream` in `html-injectors.ts` —
55
+ * the actual buffer math lives in `BufferAggregator`. This wrapper only
56
+ * owns the `setImmediate` scheduling and the push to the Node `Transform`.
57
+ *
58
+ * **Not a polling loop.** Single-shot `setImmediate` per flush cycle —
59
+ * no recursive scheduling. See design/02 §"No Polling".
60
+ */
61
+ export function createNodeBufferedTransform(options: NodeBufferedTransformOptions = {}): Transform {
62
+ const buffer = new BufferAggregator(options.maxBufferByteLength ?? Infinity);
63
+
64
+ const flushBuffer = () => {
65
+ const merged = buffer.drain();
66
+ if (merged) transform.push(merged);
67
+ };
68
+
69
+ const coalescer = createTickCoalescer(flushBuffer);
70
+
71
+ const transform = new Transform({
72
+ transform(chunk: Buffer, _encoding, callback) {
73
+ const overCap = buffer.append(chunk);
74
+ if (overCap) {
75
+ flushBuffer();
76
+ } else {
77
+ coalescer.schedule();
78
+ }
79
+ callback();
80
+ },
81
+ flush(callback) {
82
+ coalescer.flushSync();
83
+ callback();
84
+ },
85
+ });
86
+
87
+ return transform;
88
+ }
89
+
90
+ // ─── Move Suffix Transform ───────────────────────────────────────────────────
91
+
92
+ /**
93
+ * Node.js `Transform` that moves `</body></html>` to the end of the stream.
94
+ *
95
+ * Equivalent to `createMoveSuffixStream` in `html-injectors.ts`. Strips
96
+ * the suffix on first sight and re-emits it from `flush()`. If the
97
+ * suffix never appeared in the input, it is appended anyway so output
98
+ * is well-formed.
99
+ */
100
+ export function createNodeMoveSuffixTransform(): Transform {
101
+ const state = createSuffixState();
102
+
103
+ return new Transform({
104
+ transform(chunk: Buffer, _encoding, callback) {
105
+ const result = processSuffixChunk(state, chunk);
106
+ if (result.kind === 'passthrough' || result.kind === 'noSuffix') {
107
+ this.push(chunk);
108
+ callback();
109
+ return;
110
+ }
111
+ if (result.before) this.push(Buffer.from(result.before));
112
+ if (result.after) this.push(Buffer.from(result.after));
113
+ callback();
114
+ },
115
+ flush(callback) {
116
+ this.push(Buffer.from(suffixFlush(state)));
117
+ callback();
118
+ },
119
+ });
120
+ }
121
+
122
+ // Re-export for tests / consumers that need the suffix bytes constant.
123
+ export { SUFFIX_BYTES };
124
+
125
+ // ─── Head Injection ──────────────────────────────────────────────────────────
126
+
127
+ /**
128
+ * Node.js `Transform` that injects HTML content before `</head>`.
129
+ *
130
+ * Equivalent to `injectHead` in `html-injectors.ts`. Streams chunks
131
+ * through immediately, keeping only a small trailing buffer to handle
132
+ * `</head>` split across chunk boundaries.
133
+ */
134
+ export function createNodeHeadInjector(headHtml: string): Transform {
135
+ if (!headHtml) {
136
+ return new Transform({
137
+ transform(chunk, _enc, cb) {
138
+ cb(null, chunk);
139
+ },
140
+ });
141
+ }
142
+
143
+ const state = createInjectorState({ content: headHtml, targetTag: '</head>' });
144
+
145
+ return new Transform({
146
+ transform(chunk: Buffer, _encoding, callback) {
147
+ const result = processInjectorChunk(state, chunk);
148
+ if (result.kind === 'passthrough') {
149
+ callback(null, chunk);
150
+ return;
151
+ }
152
+ if (result.bytes) this.push(Buffer.from(result.bytes));
153
+ callback();
154
+ },
155
+ flush(callback) {
156
+ const leftover = injectorFlush(state);
157
+ if (leftover) this.push(Buffer.from(leftover));
158
+ callback();
159
+ },
160
+ });
161
+ }
162
+
163
+ // ─── RSC Flight Injection ────────────────────────────────────────────────────
164
+
165
+ /**
166
+ * Options for the Node.js flight injector.
167
+ */
168
+ export interface NodeFlightInjectorOptions {
169
+ /**
170
+ * Timeout in milliseconds for individual RSC stream reads. If a single
171
+ * `rscReader.read()` call does not resolve within this duration, the
172
+ * read is aborted and the stream errors with a `RenderTimeoutError`.
173
+ * Default: 30000 (30s).
174
+ */
175
+ renderTimeoutMs?: number;
176
+ /** Signal that fires when an unhandled RSC error is detected. */
177
+ errorSignal?: AbortSignal;
178
+ }
179
+
180
+ /**
181
+ * Node.js `Transform` that merges RSC script tags into the HTML stream.
182
+ *
183
+ * Equivalent to `createFlightInjectionTransform` in `html-injectors.ts`.
184
+ * The state machine, pending queue, and pull loop all live in
185
+ * `FlightInjectorCore` — this wrapper only shuffles bytes between the
186
+ * core and the Node `Transform.push()` API.
187
+ *
188
+ * Suffix stripping (`</body></html>`) is handled upstream by
189
+ * `createNodeMoveSuffixTransform`. RSC scripts are buffered in
190
+ * `core.pending[]` and only drained from `transform()` (after a complete
191
+ * HTML chunk) or `flush()` — never mid-tag. See design/02
192
+ * §"Scripts at Chunk Boundaries Only".
193
+ *
194
+ * The RSC stream is a Web `ReadableStream` (from the tee'd RSC Flight
195
+ * stream). The core reads from it using the Web API — this is the one
196
+ * bridge point between Web Streams and Node.js streams in the pipeline.
197
+ */
198
+ export function createNodeFlightInjector(
199
+ rscStream: ReadableStream<Uint8Array> | undefined,
200
+ options?: NodeFlightInjectorOptions
201
+ ): Transform {
202
+ if (!rscStream) {
203
+ return new Transform({
204
+ transform(chunk, _enc, cb) {
205
+ cb(null, chunk);
206
+ },
207
+ });
208
+ }
209
+
210
+ const core = new FlightInjectorCore(rscStream, options?.renderTimeoutMs, options?.errorSignal);
211
+
212
+ const drain = (): void => {
213
+ while (core.pending.length > 0) transform.push(Buffer.from(core.pending.shift()!));
214
+ };
215
+
216
+ const transform = new Transform({
217
+ transform(chunk: Buffer, _encoding, callback) {
218
+ const wasInit = core.isInit;
219
+ if (wasInit) core.notifyFirstChunk();
220
+
221
+ // Emit the HTML chunk, then drain any buffered RSC scripts.
222
+ // Scripts always come AFTER a complete HTML chunk — never mid-tag.
223
+ // The buffered transform upstream (TIM-528) ensures coherent chunks.
224
+ // Suffix stripping is upstream via createNodeMoveSuffixTransform (TIM-530).
225
+ transform.push(chunk);
226
+ drain();
227
+
228
+ // Start the pull loop on the first HTML chunk.
229
+ if (wasInit) core.ensurePullLoop(drain);
230
+ callback();
231
+ },
232
+ destroy(err, callback) {
233
+ core.abort(err ?? 'pipeline destroyed');
234
+ callback(err);
235
+ },
236
+ flush(callback) {
237
+ // All HTML chunks have been emitted. Pull loop stops yielding.
238
+ core.notifyHtmlDone();
239
+
240
+ const finish = () => {
241
+ drain();
242
+ const err = core.terminalError;
243
+ if (err !== null) {
244
+ transform.destroy(err instanceof Error ? err : new Error(String(err)));
245
+ return;
246
+ }
247
+ callback();
248
+ };
249
+
250
+ if (core.isPullDone) {
251
+ finish();
252
+ return;
253
+ }
254
+ // Wait on the pull-loop promise instead of polling. Zero CPU cost
255
+ // while waiting. See design/02 §"No Polling".
256
+ core.ensurePullLoop(drain).then(finish, (err) => {
257
+ // ensurePullLoop's underlying loop catches its own errors and
258
+ // sends PULL_ERROR — this catch is defence-in-depth for any
259
+ // synchronous throws inside the .then() chain itself.
260
+ transform.destroy(err instanceof Error ? err : new Error(String(err)));
261
+ });
262
+ },
263
+ });
264
+
265
+ return transform;
266
+ }
267
+
268
+ // ─── Error Handling ──────────────────────────────────────────────────────────
269
+
270
+ /**
271
+ * Run the Node SSR post-processing pipeline with post-shell error handling.
272
+ *
273
+ * Equivalent to wrapStreamWithErrorHandling() in ssr-render.ts: when the
274
+ * stream errors after the shell has flushed (deny/throw inside Suspense,
275
+ * an RSC read timeout in the flight injector, or an upstream Fizz error),
276
+ * the response closes cleanly with a trailing noindex script instead of
277
+ * aborting the connection mid-body. Abort errors (client disconnect,
278
+ * render-timeout abort) close the output silently — no noindex, no log.
279
+ *
280
+ * Why this is a pump function and not a Transform stage (TIM-1019):
281
+ * stream.promises.pipeline() destroys every stage in the chain when any
282
+ * stage errors, so a Transform *inside* the pipeline can never append
283
+ * bytes after a failure — by the time its 'error' listener fires, the
284
+ * transform and everything downstream are already destroyed and push()/
285
+ * end() are no-ops. The output PassThrough therefore lives OUTSIDE the
286
+ * pipeline() call: the last stage pipes into it (pipe() ends the output
287
+ * on upstream success but leaves it open on upstream error), and the
288
+ * pipeline's rejection handler appends the noindex script.
289
+ *
290
+ * Consumer cancellation (e.g. Readable.toWeb() cancel on client
291
+ * disconnect) is wired back into the pipeline via an AbortSignal so the
292
+ * source and all stages are torn down — the teardown that membership in
293
+ * pipeline() used to provide.
294
+ */
295
+ export function runNodePipelineWithErrorHandling(
296
+ source: Readable,
297
+ transforms: readonly [Transform, ...Transform[]],
298
+ signal?: AbortSignal
299
+ ): PassThrough {
300
+ const output = new PassThrough();
301
+ const last = transforms[transforms.length - 1]!;
302
+ last.pipe(output);
303
+
304
+ // If the consumer destroys the output (client disconnect), abort the
305
+ // pipeline so the Fizz source and flight injector release their
306
+ // resources. On normal completion the pipeline has already settled and
307
+ // the abort is a no-op.
308
+ const consumerGone = new AbortController();
309
+ output.once('close', () => consumerGone.abort());
310
+
311
+ // The cast satisfies pipeline()'s [source, ...transforms, destination]
312
+ // tuple overload — TS can't prove the shape across a spread, but the
313
+ // signature above guarantees a non-empty transform list at compile time.
314
+ const stages = [source, ...transforms] as unknown as readonly [
315
+ Readable,
316
+ ...Transform[],
317
+ Transform,
318
+ ];
319
+
320
+ pipeline(stages, { signal: consumerGone.signal }).catch((error: unknown) => {
321
+ if (output.writableEnded || output.destroyed) return;
322
+ if (isAbortError(error) || signal?.aborted || consumerGone.signal.aborted) {
323
+ output.end();
324
+ return;
325
+ }
326
+ logStreamingError({ error });
327
+ output.end(Buffer.from(NOINDEX_SCRIPT, 'utf-8'));
328
+ });
329
+
330
+ return output;
331
+ }