@timber-js/app 0.2.0-alpha.13 → 0.2.0-alpha.131

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 (785) hide show
  1. package/LICENSE +8 -0
  2. package/dist/_chunks/actions-BNhpxrnV.js +1104 -0
  3. package/dist/_chunks/actions-BNhpxrnV.js.map +1 -0
  4. package/dist/_chunks/build-output-helper-K7oUCRqU.js +102 -0
  5. package/dist/_chunks/build-output-helper-K7oUCRqU.js.map +1 -0
  6. package/dist/_chunks/cli-schema-sync-CObqjGWF.js +2 -0
  7. package/dist/_chunks/cli-schema-sync-q-Ce6-iG.js +785 -0
  8. package/dist/_chunks/cli-schema-sync-q-Ce6-iG.js.map +1 -0
  9. package/dist/_chunks/codec-registry-DqkeAydt.js +21 -0
  10. package/dist/_chunks/codec-registry-DqkeAydt.js.map +1 -0
  11. package/dist/_chunks/define-DMq-Yjp7.js +112 -0
  12. package/dist/_chunks/define-DMq-Yjp7.js.map +1 -0
  13. package/dist/_chunks/define-jeHDXZGq.js +195 -0
  14. package/dist/_chunks/define-jeHDXZGq.js.map +1 -0
  15. package/dist/_chunks/format-BjN9HLu9.js +14 -0
  16. package/dist/_chunks/format-BjN9HLu9.js.map +1 -0
  17. package/dist/_chunks/handler-store-bIAstrxQ.js +54 -0
  18. package/dist/_chunks/handler-store-bIAstrxQ.js.map +1 -0
  19. package/dist/_chunks/logger-CMd9P1xQ.js +291 -0
  20. package/dist/_chunks/logger-CMd9P1xQ.js.map +1 -0
  21. package/dist/_chunks/merge-search-params-Cm1j99HC.js +41 -0
  22. package/dist/_chunks/merge-search-params-Cm1j99HC.js.map +1 -0
  23. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DESG8uk5.js} +32 -19
  24. package/dist/_chunks/metadata-routes-DESG8uk5.js.map +1 -0
  25. package/dist/_chunks/navigation-root-B5-RmsPi.js +103 -0
  26. package/dist/_chunks/navigation-root-B5-RmsPi.js.map +1 -0
  27. package/dist/_chunks/registry-BI9cgCt7.js +20 -0
  28. package/dist/_chunks/registry-BI9cgCt7.js.map +1 -0
  29. package/dist/_chunks/resolve-schema-DU2nbVOi.js +77 -0
  30. package/dist/_chunks/resolve-schema-DU2nbVOi.js.map +1 -0
  31. package/dist/_chunks/router-ref-B2-2kIIC.js +28 -0
  32. package/dist/_chunks/router-ref-B2-2kIIC.js.map +1 -0
  33. package/dist/_chunks/schema-bridge-o0SwFtXW.js +86 -0
  34. package/dist/_chunks/schema-bridge-o0SwFtXW.js.map +1 -0
  35. package/dist/_chunks/segment-classify-BjfuctV2.js +137 -0
  36. package/dist/_chunks/segment-classify-BjfuctV2.js.map +1 -0
  37. package/dist/_chunks/segment-context-Bg0pFbLT.js +34 -0
  38. package/dist/_chunks/segment-context-Bg0pFbLT.js.map +1 -0
  39. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-DVX8S7vj.js} +1 -1
  40. package/dist/_chunks/ssr-data-DVX8S7vj.js.map +1 -0
  41. package/dist/_chunks/stale-reload-CCqb62Z3.js +84 -0
  42. package/dist/_chunks/stale-reload-CCqb62Z3.js.map +1 -0
  43. package/dist/_chunks/tracing-DP5djRq5.js +358 -0
  44. package/dist/_chunks/tracing-DP5djRq5.js.map +1 -0
  45. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-C9G6LP0F.js} +7 -20
  46. package/dist/_chunks/use-query-states-C9G6LP0F.js.map +1 -0
  47. package/dist/_chunks/use-segment-params-CIeinIx2.js +151 -0
  48. package/dist/_chunks/use-segment-params-CIeinIx2.js.map +1 -0
  49. package/dist/_chunks/validation-AfEFM5ze.js +84 -0
  50. package/dist/_chunks/validation-AfEFM5ze.js.map +1 -0
  51. package/dist/_chunks/walkers-BbEu2_Pp.js +724 -0
  52. package/dist/_chunks/walkers-BbEu2_Pp.js.map +1 -0
  53. package/dist/_chunks/{format-DviM89f0.js → warnings-CAzunaGo.js} +6 -45
  54. package/dist/_chunks/warnings-CAzunaGo.js.map +1 -0
  55. package/dist/adapters/build-output-helper.d.ts +28 -0
  56. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  57. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  58. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  59. package/dist/adapters/cloudflare-dev.js +73 -0
  60. package/dist/adapters/cloudflare-dev.js.map +1 -0
  61. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  62. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  63. package/dist/adapters/cloudflare-kv-cache.js +95 -0
  64. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  65. package/dist/adapters/cloudflare.d.ts +148 -12
  66. package/dist/adapters/cloudflare.d.ts.map +1 -1
  67. package/dist/adapters/cloudflare.js +142 -38
  68. package/dist/adapters/cloudflare.js.map +1 -1
  69. package/dist/adapters/compress-module.d.ts.map +1 -1
  70. package/dist/adapters/nitro.d.ts +17 -1
  71. package/dist/adapters/nitro.d.ts.map +1 -1
  72. package/dist/adapters/nitro.js +143 -45
  73. package/dist/adapters/nitro.js.map +1 -1
  74. package/dist/adapters/shared.d.ts +16 -0
  75. package/dist/adapters/shared.d.ts.map +1 -0
  76. package/dist/cache/cache-api.d.ts +24 -0
  77. package/dist/cache/cache-api.d.ts.map +1 -0
  78. package/dist/cache/handler-store.d.ts +31 -0
  79. package/dist/cache/handler-store.d.ts.map +1 -0
  80. package/dist/cache/index.d.ts +23 -7
  81. package/dist/cache/index.d.ts.map +1 -1
  82. package/dist/cache/index.js +151 -81
  83. package/dist/cache/index.js.map +1 -1
  84. package/dist/cache/singleflight.d.ts +18 -1
  85. package/dist/cache/singleflight.d.ts.map +1 -1
  86. package/dist/cache/sizeof.d.ts +22 -0
  87. package/dist/cache/sizeof.d.ts.map +1 -0
  88. package/dist/cache/timber-cache.d.ts +1 -1
  89. package/dist/cache/timber-cache.d.ts.map +1 -1
  90. package/dist/cli-schema-sync.d.ts +39 -0
  91. package/dist/cli-schema-sync.d.ts.map +1 -0
  92. package/dist/cli.d.ts +14 -2
  93. package/dist/cli.d.ts.map +1 -1
  94. package/dist/cli.js +48 -6
  95. package/dist/cli.js.map +1 -1
  96. package/dist/client/browser-dev.d.ts +34 -1
  97. package/dist/client/browser-dev.d.ts.map +1 -1
  98. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  99. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  100. package/dist/client/browser-entry/hmr.d.ts +21 -0
  101. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  102. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  103. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  104. package/dist/client/browser-entry/index.d.ts +30 -0
  105. package/dist/client/browser-entry/index.d.ts.map +1 -0
  106. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  107. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  108. package/dist/client/browser-entry/router-init.d.ts +26 -0
  109. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  110. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  111. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  112. package/dist/client/browser-entry/scroll.d.ts +19 -0
  113. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  114. package/dist/client/error-boundary.d.ts +12 -5
  115. package/dist/client/error-boundary.d.ts.map +1 -1
  116. package/dist/client/error-boundary.js +29 -6
  117. package/dist/client/error-boundary.js.map +1 -1
  118. package/dist/client/error-reconstituter.d.ts +54 -0
  119. package/dist/client/error-reconstituter.d.ts.map +1 -0
  120. package/dist/client/form.d.ts +16 -27
  121. package/dist/client/form.d.ts.map +1 -1
  122. package/dist/client/history.d.ts +19 -4
  123. package/dist/client/history.d.ts.map +1 -1
  124. package/dist/client/index.d.ts +10 -24
  125. package/dist/client/index.d.ts.map +1 -1
  126. package/dist/client/index.js +180 -1119
  127. package/dist/client/index.js.map +1 -1
  128. package/dist/client/internal.d.ts +19 -0
  129. package/dist/client/internal.d.ts.map +1 -0
  130. package/dist/client/internal.js +845 -0
  131. package/dist/client/internal.js.map +1 -0
  132. package/dist/client/link-pending-store.d.ts +65 -0
  133. package/dist/client/link-pending-store.d.ts.map +1 -0
  134. package/dist/client/link.d.ts +67 -56
  135. package/dist/client/link.d.ts.map +1 -1
  136. package/dist/client/nav-link-store.d.ts +27 -0
  137. package/dist/client/nav-link-store.d.ts.map +1 -0
  138. package/dist/client/navigation-api-types.d.ts +90 -0
  139. package/dist/client/navigation-api-types.d.ts.map +1 -0
  140. package/dist/client/navigation-api.d.ts +115 -0
  141. package/dist/client/navigation-api.d.ts.map +1 -0
  142. package/dist/client/navigation-context.d.ts +14 -2
  143. package/dist/client/navigation-context.d.ts.map +1 -1
  144. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +46 -9
  145. package/dist/client/navigation-root.d.ts.map +1 -0
  146. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  147. package/dist/client/router-ref.d.ts +1 -1
  148. package/dist/client/router.d.ts +79 -10
  149. package/dist/client/router.d.ts.map +1 -1
  150. package/dist/client/rsc-fetch.d.ts +46 -3
  151. package/dist/client/rsc-fetch.d.ts.map +1 -1
  152. package/dist/client/segment-cache.d.ts +3 -1
  153. package/dist/client/segment-cache.d.ts.map +1 -1
  154. package/dist/client/segment-outlet.d.ts +49 -0
  155. package/dist/client/segment-outlet.d.ts.map +1 -0
  156. package/dist/client/segment-update-context.d.ts +21 -0
  157. package/dist/client/segment-update-context.d.ts.map +1 -0
  158. package/dist/client/shallow-url.d.ts +10 -0
  159. package/dist/client/shallow-url.d.ts.map +1 -0
  160. package/dist/client/ssr-data.d.ts +13 -4
  161. package/dist/client/ssr-data.d.ts.map +1 -1
  162. package/dist/client/stale-reload.d.ts +15 -0
  163. package/dist/client/stale-reload.d.ts.map +1 -1
  164. package/dist/client/state.d.ts +1 -1
  165. package/dist/client/top-loader.d.ts +5 -5
  166. package/dist/client/top-loader.d.ts.map +1 -1
  167. package/dist/client/use-cookie.d.ts +12 -0
  168. package/dist/client/use-cookie.d.ts.map +1 -1
  169. package/dist/client/use-link-status.d.ts +5 -5
  170. package/dist/client/use-link-status.d.ts.map +1 -1
  171. package/dist/client/use-pending-navigation.d.ts +23 -0
  172. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  173. package/dist/client/use-query-states.d.ts +1 -1
  174. package/dist/client/use-query-states.d.ts.map +1 -1
  175. package/dist/client/use-router.d.ts +1 -1
  176. package/dist/client/use-search-params.d.ts +7 -5
  177. package/dist/client/use-search-params.d.ts.map +1 -1
  178. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  179. package/dist/client/use-segment-params.d.ts.map +1 -0
  180. package/dist/codec.d.ts +69 -0
  181. package/dist/codec.d.ts.map +1 -0
  182. package/dist/codec.js +75 -0
  183. package/dist/codec.js.map +1 -0
  184. package/dist/config-types.d.ts +294 -0
  185. package/dist/config-types.d.ts.map +1 -0
  186. package/dist/config-validation.d.ts +51 -0
  187. package/dist/config-validation.d.ts.map +1 -0
  188. package/dist/content/index.d.ts +1 -10
  189. package/dist/content/index.d.ts.map +1 -1
  190. package/dist/content/index.js +0 -2
  191. package/dist/cookies/define-cookie.d.ts +58 -25
  192. package/dist/cookies/define-cookie.d.ts.map +1 -1
  193. package/dist/cookies/index.d.ts +2 -1
  194. package/dist/cookies/index.d.ts.map +1 -1
  195. package/dist/cookies/index.js +251 -36
  196. package/dist/cookies/index.js.map +1 -1
  197. package/dist/cookies/json-cookie.d.ts +64 -0
  198. package/dist/cookies/json-cookie.d.ts.map +1 -0
  199. package/dist/cookies/validation.d.ts +46 -0
  200. package/dist/cookies/validation.d.ts.map +1 -0
  201. package/dist/dev-tools/404-page.d.ts +46 -0
  202. package/dist/dev-tools/404-page.d.ts.map +1 -0
  203. package/dist/dev-tools/browser-logs.d.ts +84 -0
  204. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  205. package/dist/dev-tools/error-page.d.ts +58 -0
  206. package/dist/dev-tools/error-page.d.ts.map +1 -0
  207. package/dist/dev-tools/holding-server.d.ts +54 -0
  208. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  209. package/dist/dev-tools/index.d.ts +31 -0
  210. package/dist/dev-tools/index.d.ts.map +1 -0
  211. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  212. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  213. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  214. package/dist/dev-tools/logger.d.ts.map +1 -0
  215. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  216. package/dist/dev-tools/logs.d.ts.map +1 -0
  217. package/dist/dev-tools/overlay.d.ts +91 -0
  218. package/dist/dev-tools/overlay.d.ts.map +1 -0
  219. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  220. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  221. package/dist/dev-tools/terminal.d.ts +28 -0
  222. package/dist/dev-tools/terminal.d.ts.map +1 -0
  223. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  224. package/dist/dev-tools/warnings.d.ts.map +1 -0
  225. package/dist/fonts/ast.d.ts +98 -6
  226. package/dist/fonts/ast.d.ts.map +1 -1
  227. package/dist/fonts/bundle.d.ts +48 -0
  228. package/dist/fonts/bundle.d.ts.map +1 -0
  229. package/dist/fonts/dev-middleware.d.ts +22 -0
  230. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  231. package/dist/fonts/local.d.ts +1 -1
  232. package/dist/fonts/pipeline.d.ts +167 -0
  233. package/dist/fonts/pipeline.d.ts.map +1 -0
  234. package/dist/fonts/transform.d.ts +78 -0
  235. package/dist/fonts/transform.d.ts.map +1 -0
  236. package/dist/fonts/types.d.ts +45 -1
  237. package/dist/fonts/types.d.ts.map +1 -1
  238. package/dist/fonts/virtual-modules.d.ts +94 -0
  239. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  240. package/dist/index.d.ts +46 -164
  241. package/dist/index.d.ts.map +1 -1
  242. package/dist/index.js +5584 -13386
  243. package/dist/index.js.map +1 -1
  244. package/dist/params/codec-registry.d.ts +26 -0
  245. package/dist/params/codec-registry.d.ts.map +1 -0
  246. package/dist/params/define-schema.d.ts +81 -0
  247. package/dist/params/define-schema.d.ts.map +1 -0
  248. package/dist/params/index.d.ts +5 -0
  249. package/dist/params/index.d.ts.map +1 -0
  250. package/dist/params/index.js +34 -0
  251. package/dist/params/index.js.map +1 -0
  252. package/dist/params/resolve-schema.d.ts +34 -0
  253. package/dist/params/resolve-schema.d.ts.map +1 -0
  254. package/dist/plugin-context.d.ts +107 -0
  255. package/dist/plugin-context.d.ts.map +1 -0
  256. package/dist/plugins/adapter-build.d.ts +1 -1
  257. package/dist/plugins/adapter-build.d.ts.map +1 -1
  258. package/dist/plugins/build-manifest.d.ts +2 -2
  259. package/dist/plugins/build-manifest.d.ts.map +1 -1
  260. package/dist/plugins/build-report.d.ts +9 -7
  261. package/dist/plugins/build-report.d.ts.map +1 -1
  262. package/dist/plugins/client-chunks.d.ts +32 -0
  263. package/dist/plugins/client-chunks.d.ts.map +1 -0
  264. package/dist/plugins/cloudflare-wasm.d.ts +18 -0
  265. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  266. package/dist/plugins/content.d.ts +1 -1
  267. package/dist/plugins/content.d.ts.map +1 -1
  268. package/dist/plugins/dev-server.d.ts +1 -1
  269. package/dist/plugins/dev-server.d.ts.map +1 -1
  270. package/dist/plugins/entries.d.ts +1 -1
  271. package/dist/plugins/entries.d.ts.map +1 -1
  272. package/dist/plugins/fonts.d.ts +17 -73
  273. package/dist/plugins/fonts.d.ts.map +1 -1
  274. package/dist/plugins/mdx.d.ts +1 -1
  275. package/dist/plugins/mdx.d.ts.map +1 -1
  276. package/dist/plugins/routing.d.ts +1 -1
  277. package/dist/plugins/routing.d.ts.map +1 -1
  278. package/dist/plugins/server-bundle.d.ts.map +1 -1
  279. package/dist/plugins/shims.d.ts +6 -5
  280. package/dist/plugins/shims.d.ts.map +1 -1
  281. package/dist/plugins/static-build.d.ts +5 -26
  282. package/dist/plugins/static-build.d.ts.map +1 -1
  283. package/dist/routing/codegen-shared.d.ts +67 -0
  284. package/dist/routing/codegen-shared.d.ts.map +1 -0
  285. package/dist/routing/codegen-types.d.ts +60 -0
  286. package/dist/routing/codegen-types.d.ts.map +1 -0
  287. package/dist/routing/codegen.d.ts +7 -2
  288. package/dist/routing/codegen.d.ts.map +1 -1
  289. package/dist/routing/convention-lint.d.ts +41 -0
  290. package/dist/routing/convention-lint.d.ts.map +1 -0
  291. package/dist/routing/index.d.ts +7 -1
  292. package/dist/routing/index.d.ts.map +1 -1
  293. package/dist/routing/index.js +4 -2
  294. package/dist/routing/link-codegen.d.ts +90 -0
  295. package/dist/routing/link-codegen.d.ts.map +1 -0
  296. package/dist/routing/scanner.d.ts +1 -10
  297. package/dist/routing/scanner.d.ts.map +1 -1
  298. package/dist/routing/schema-validation.d.ts +35 -0
  299. package/dist/routing/schema-validation.d.ts.map +1 -0
  300. package/dist/routing/segment-classify.d.ts +75 -0
  301. package/dist/routing/segment-classify.d.ts.map +1 -0
  302. package/dist/routing/segment-codegen.d.ts +38 -0
  303. package/dist/routing/segment-codegen.d.ts.map +1 -0
  304. package/dist/routing/types.d.ts +77 -25
  305. package/dist/routing/types.d.ts.map +1 -1
  306. package/dist/routing/walkers.d.ts +51 -0
  307. package/dist/routing/walkers.d.ts.map +1 -0
  308. package/dist/rsc-runtime/rsc.d.ts +1 -1
  309. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  310. package/dist/rsc-runtime/ssr.d.ts +12 -0
  311. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  312. package/dist/schema-bridge.d.ts +76 -0
  313. package/dist/schema-bridge.d.ts.map +1 -0
  314. package/dist/search-params/define.d.ts +157 -0
  315. package/dist/search-params/define.d.ts.map +1 -0
  316. package/dist/search-params/index.d.ts +4 -7
  317. package/dist/search-params/index.d.ts.map +1 -1
  318. package/dist/search-params/index.js +34 -441
  319. package/dist/search-params/index.js.map +1 -1
  320. package/dist/search-params/registry.d.ts +2 -2
  321. package/dist/search-params/registry.d.ts.map +1 -1
  322. package/dist/search-params/wrappers.d.ts +53 -0
  323. package/dist/search-params/wrappers.d.ts.map +1 -0
  324. package/dist/segment-params/define.d.ts +89 -0
  325. package/dist/segment-params/define.d.ts.map +1 -0
  326. package/dist/segment-params/index.d.ts +3 -0
  327. package/dist/segment-params/index.d.ts.map +1 -0
  328. package/dist/segment-params/index.js +2 -0
  329. package/dist/server/access-gate.d.ts +8 -3
  330. package/dist/server/access-gate.d.ts.map +1 -1
  331. package/dist/server/action-client.d.ts +41 -6
  332. package/dist/server/action-client.d.ts.map +1 -1
  333. package/dist/server/action-encryption.d.ts +76 -0
  334. package/dist/server/action-encryption.d.ts.map +1 -0
  335. package/dist/server/action-handler.d.ts +35 -1
  336. package/dist/server/action-handler.d.ts.map +1 -1
  337. package/dist/server/actions.d.ts +6 -14
  338. package/dist/server/actions.d.ts.map +1 -1
  339. package/dist/server/als-registry.d.ts +70 -11
  340. package/dist/server/als-registry.d.ts.map +1 -1
  341. package/dist/server/asset-headers.d.ts +1 -15
  342. package/dist/server/asset-headers.d.ts.map +1 -1
  343. package/dist/server/build-manifest.d.ts +8 -2
  344. package/dist/server/build-manifest.d.ts.map +1 -1
  345. package/dist/server/coalesce-tick.d.ts +40 -0
  346. package/dist/server/coalesce-tick.d.ts.map +1 -0
  347. package/dist/server/cookie-context.d.ts +170 -0
  348. package/dist/server/cookie-context.d.ts.map +1 -0
  349. package/dist/server/cookie-parsing.d.ts +51 -0
  350. package/dist/server/cookie-parsing.d.ts.map +1 -0
  351. package/dist/server/debug.d.ts +1 -1
  352. package/dist/server/default-logger.d.ts +22 -0
  353. package/dist/server/default-logger.d.ts.map +1 -0
  354. package/dist/server/deny-boundary.d.ts +90 -0
  355. package/dist/server/deny-boundary.d.ts.map +1 -0
  356. package/dist/server/deny-renderer.d.ts +1 -1
  357. package/dist/server/deny-renderer.d.ts.map +1 -1
  358. package/dist/server/dev-source-map.d.ts +22 -0
  359. package/dist/server/dev-source-map.d.ts.map +1 -0
  360. package/dist/server/early-hints-sender.d.ts.map +1 -1
  361. package/dist/server/early-hints.d.ts +13 -5
  362. package/dist/server/early-hints.d.ts.map +1 -1
  363. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  364. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  365. package/dist/server/fallback-error.d.ts +12 -7
  366. package/dist/server/fallback-error.d.ts.map +1 -1
  367. package/dist/server/flight-injection-state.d.ts +66 -0
  368. package/dist/server/flight-injection-state.d.ts.map +1 -0
  369. package/dist/server/flight-scripts.d.ts +42 -0
  370. package/dist/server/flight-scripts.d.ts.map +1 -0
  371. package/dist/server/flush.d.ts.map +1 -1
  372. package/dist/server/form-data.d.ts +29 -0
  373. package/dist/server/form-data.d.ts.map +1 -1
  374. package/dist/server/html-injector-core.d.ts +213 -0
  375. package/dist/server/html-injector-core.d.ts.map +1 -0
  376. package/dist/server/html-injectors.d.ts +81 -41
  377. package/dist/server/html-injectors.d.ts.map +1 -1
  378. package/dist/server/index.d.ts +10 -46
  379. package/dist/server/index.d.ts.map +1 -1
  380. package/dist/server/index.js +155 -2905
  381. package/dist/server/index.js.map +1 -1
  382. package/dist/server/internal.d.ts +48 -0
  383. package/dist/server/internal.d.ts.map +1 -0
  384. package/dist/server/internal.js +3027 -0
  385. package/dist/server/internal.js.map +1 -0
  386. package/dist/server/logger.d.ts +39 -7
  387. package/dist/server/logger.d.ts.map +1 -1
  388. package/dist/server/metadata-routes.d.ts +23 -7
  389. package/dist/server/metadata-routes.d.ts.map +1 -1
  390. package/dist/server/middleware-runner.d.ts +36 -4
  391. package/dist/server/middleware-runner.d.ts.map +1 -1
  392. package/dist/server/node-stream-transforms.d.ts +112 -0
  393. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  394. package/dist/server/param-coercion.d.ts +54 -0
  395. package/dist/server/param-coercion.d.ts.map +1 -0
  396. package/dist/server/pipeline-helpers.d.ts +95 -0
  397. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  398. package/dist/server/pipeline-interception.d.ts +1 -1
  399. package/dist/server/pipeline-interception.d.ts.map +1 -1
  400. package/dist/server/pipeline-metadata.d.ts +6 -0
  401. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  402. package/dist/server/pipeline-outcome.d.ts +49 -0
  403. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  404. package/dist/server/pipeline-phases.d.ts +52 -0
  405. package/dist/server/pipeline-phases.d.ts.map +1 -0
  406. package/dist/server/pipeline.d.ts +118 -23
  407. package/dist/server/pipeline.d.ts.map +1 -1
  408. package/dist/server/port-resolution.d.ts +117 -0
  409. package/dist/server/port-resolution.d.ts.map +1 -0
  410. package/dist/server/primitives.d.ts +69 -18
  411. package/dist/server/primitives.d.ts.map +1 -1
  412. package/dist/server/render-timeout.d.ts +51 -0
  413. package/dist/server/render-timeout.d.ts.map +1 -0
  414. package/dist/server/request-context.d.ts +62 -107
  415. package/dist/server/request-context.d.ts.map +1 -1
  416. package/dist/server/route-element-builder.d.ts +28 -2
  417. package/dist/server/route-element-builder.d.ts.map +1 -1
  418. package/dist/server/route-handler.d.ts.map +1 -1
  419. package/dist/server/route-matcher.d.ts +25 -36
  420. package/dist/server/route-matcher.d.ts.map +1 -1
  421. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  422. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  423. package/dist/server/rsc-entry/api-handler.d.ts +2 -2
  424. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  425. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  426. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  427. package/dist/server/rsc-entry/helpers.d.ts +50 -6
  428. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  429. package/dist/server/rsc-entry/index.d.ts +19 -8
  430. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  431. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  432. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  433. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  434. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  435. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  436. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  437. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  438. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  439. package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
  440. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  441. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  442. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  443. package/dist/server/safe-load.d.ts +46 -0
  444. package/dist/server/safe-load.d.ts.map +1 -0
  445. package/dist/server/sensitive-fields.d.ts +74 -0
  446. package/dist/server/sensitive-fields.d.ts.map +1 -0
  447. package/dist/server/sitemap-generator.d.ts +129 -0
  448. package/dist/server/sitemap-generator.d.ts.map +1 -0
  449. package/dist/server/sitemap-handler.d.ts +22 -0
  450. package/dist/server/sitemap-handler.d.ts.map +1 -0
  451. package/dist/server/slot-resolver.d.ts +1 -1
  452. package/dist/server/slot-resolver.d.ts.map +1 -1
  453. package/dist/server/ssr-bridge-types.d.ts +121 -0
  454. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  455. package/dist/server/ssr-entry.d.ts +2 -43
  456. package/dist/server/ssr-entry.d.ts.map +1 -1
  457. package/dist/server/ssr-render.d.ts +64 -21
  458. package/dist/server/ssr-render.d.ts.map +1 -1
  459. package/dist/server/ssr-wrappers.d.ts +50 -0
  460. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  461. package/dist/server/state-tree-diff.d.ts +12 -5
  462. package/dist/server/state-tree-diff.d.ts.map +1 -1
  463. package/dist/server/status-code-resolver.d.ts +16 -11
  464. package/dist/server/status-code-resolver.d.ts.map +1 -1
  465. package/dist/server/stream-utils.d.ts +36 -0
  466. package/dist/server/stream-utils.d.ts.map +1 -0
  467. package/dist/server/tracing.d.ts +5 -5
  468. package/dist/server/tracing.d.ts.map +1 -1
  469. package/dist/server/tree-builder.d.ts +62 -30
  470. package/dist/server/tree-builder.d.ts.map +1 -1
  471. package/dist/server/tree-match.d.ts +49 -0
  472. package/dist/server/tree-match.d.ts.map +1 -0
  473. package/dist/server/types.d.ts +49 -4
  474. package/dist/server/types.d.ts.map +1 -1
  475. package/dist/server/utils/escape-html.d.ts +14 -0
  476. package/dist/server/utils/escape-html.d.ts.map +1 -0
  477. package/dist/server/version-skew.d.ts +61 -0
  478. package/dist/server/version-skew.d.ts.map +1 -0
  479. package/dist/shared/merge-search-params.d.ts +22 -0
  480. package/dist/shared/merge-search-params.d.ts.map +1 -0
  481. package/dist/shims/font-google.d.ts +1 -1
  482. package/dist/shims/font-google.d.ts.map +1 -1
  483. package/dist/shims/font-google.js +42 -0
  484. package/dist/shims/font-google.js.map +1 -0
  485. package/dist/shims/font-local.d.ts +26 -0
  486. package/dist/shims/font-local.d.ts.map +1 -0
  487. package/dist/shims/font-local.js +20 -0
  488. package/dist/shims/font-local.js.map +1 -0
  489. package/dist/shims/headers.d.ts +2 -1
  490. package/dist/shims/headers.d.ts.map +1 -1
  491. package/dist/shims/navigation-client.d.ts +3 -1
  492. package/dist/shims/navigation-client.d.ts.map +1 -1
  493. package/dist/shims/navigation.d.ts +11 -5
  494. package/dist/shims/navigation.d.ts.map +1 -1
  495. package/dist/utils/state-machine.d.ts +80 -0
  496. package/dist/utils/state-machine.d.ts.map +1 -0
  497. package/package.json +61 -22
  498. package/src/adapters/build-output-helper.ts +139 -0
  499. package/src/adapters/cloudflare-dev.ts +177 -0
  500. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  501. package/src/adapters/cloudflare.ts +350 -76
  502. package/src/adapters/compress-module.ts +24 -4
  503. package/src/adapters/nitro.ts +142 -59
  504. package/src/adapters/shared.ts +40 -0
  505. package/src/adapters/wrangler.d.ts +7 -0
  506. package/src/cache/cache-api.ts +38 -0
  507. package/src/cache/handler-store.ts +68 -0
  508. package/src/cache/index.ts +81 -18
  509. package/src/cache/singleflight.ts +62 -4
  510. package/src/cache/sizeof.ts +33 -0
  511. package/src/cache/timber-cache.ts +25 -20
  512. package/src/cli-schema-sync.ts +295 -0
  513. package/src/cli.ts +76 -8
  514. package/src/client/browser-dev.ts +153 -1
  515. package/src/client/browser-entry/action-dispatch.ts +125 -0
  516. package/src/client/browser-entry/hmr.ts +81 -0
  517. package/src/client/browser-entry/hydrate.ts +153 -0
  518. package/src/client/browser-entry/index.ts +151 -0
  519. package/src/client/browser-entry/post-hydration.ts +113 -0
  520. package/src/client/browser-entry/router-init.ts +219 -0
  521. package/src/client/browser-entry/rsc-stream.ts +157 -0
  522. package/src/client/browser-entry/scroll.ts +27 -0
  523. package/src/client/error-boundary.tsx +99 -22
  524. package/src/client/error-reconstituter.tsx +65 -0
  525. package/src/client/form.tsx +31 -32
  526. package/src/client/history.ts +26 -4
  527. package/src/client/index.ts +66 -45
  528. package/src/client/internal.ts +58 -0
  529. package/src/client/link-pending-store.ts +116 -0
  530. package/src/client/link.tsx +336 -119
  531. package/src/client/nav-link-store.ts +37 -0
  532. package/src/client/navigation-api-types.ts +112 -0
  533. package/src/client/navigation-api.ts +332 -0
  534. package/src/client/navigation-context.ts +33 -7
  535. package/src/client/navigation-root.tsx +347 -0
  536. package/src/client/nuqs-adapter.tsx +16 -3
  537. package/src/client/router-ref.ts +1 -1
  538. package/src/client/router.ts +418 -128
  539. package/src/client/rsc-fetch.ts +208 -10
  540. package/src/client/segment-cache.ts +6 -3
  541. package/src/client/segment-outlet.tsx +77 -0
  542. package/src/client/segment-update-context.ts +42 -0
  543. package/src/client/shallow-url.ts +22 -0
  544. package/src/client/ssr-data.ts +13 -5
  545. package/src/client/stale-reload.ts +72 -3
  546. package/src/client/state.ts +2 -2
  547. package/src/client/top-loader.tsx +11 -9
  548. package/src/client/use-cookie.ts +31 -2
  549. package/src/client/use-link-status.ts +7 -7
  550. package/src/client/use-pending-navigation.ts +40 -0
  551. package/src/client/use-query-states.ts +9 -3
  552. package/src/client/use-router.ts +1 -1
  553. package/src/client/use-search-params.ts +25 -44
  554. package/src/client/{use-params.ts → use-segment-params.ts} +8 -6
  555. package/src/codec.ts +147 -0
  556. package/src/config-types.ts +292 -0
  557. package/src/config-validation.ts +303 -0
  558. package/src/content/index.ts +5 -13
  559. package/src/cookies/define-cookie.ts +233 -53
  560. package/src/cookies/index.ts +12 -1
  561. package/src/cookies/json-cookie.ts +105 -0
  562. package/src/cookies/validation.ts +134 -0
  563. package/src/dev-tools/404-page.ts +387 -0
  564. package/src/dev-tools/browser-logs.ts +291 -0
  565. package/src/dev-tools/error-page.ts +506 -0
  566. package/src/dev-tools/holding-server.ts +187 -0
  567. package/src/dev-tools/index.ts +90 -0
  568. package/src/dev-tools/instrumentation.ts +176 -0
  569. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  570. package/src/dev-tools/overlay.ts +469 -0
  571. package/src/dev-tools/stack-classifier.ts +75 -0
  572. package/src/dev-tools/terminal.ts +183 -0
  573. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
  574. package/src/fonts/ast.ts +525 -16
  575. package/src/fonts/bundle.ts +142 -0
  576. package/src/fonts/dev-middleware.ts +74 -0
  577. package/src/fonts/local.ts +1 -1
  578. package/src/fonts/pipeline.ts +314 -0
  579. package/src/fonts/transform.ts +317 -0
  580. package/src/fonts/types.ts +50 -1
  581. package/src/fonts/virtual-modules.ts +233 -0
  582. package/src/index.ts +411 -329
  583. package/src/params/codec-registry.ts +34 -0
  584. package/src/params/define-schema.ts +114 -0
  585. package/src/params/index.ts +17 -0
  586. package/src/params/resolve-schema.ts +116 -0
  587. package/src/plugin-context.ts +240 -0
  588. package/src/plugins/adapter-build.ts +12 -4
  589. package/src/plugins/build-manifest.ts +69 -6
  590. package/src/plugins/build-report.ts +16 -25
  591. package/src/plugins/client-chunks.ts +65 -0
  592. package/src/plugins/cloudflare-wasm.ts +103 -0
  593. package/src/plugins/content.ts +1 -1
  594. package/src/plugins/dev-server.ts +179 -37
  595. package/src/plugins/entries.ts +111 -8
  596. package/src/plugins/fonts.ts +165 -654
  597. package/src/plugins/mdx.ts +47 -10
  598. package/src/plugins/routing.ts +386 -47
  599. package/src/plugins/server-bundle.ts +59 -3
  600. package/src/plugins/shims.ts +136 -35
  601. package/src/plugins/static-build.ts +15 -89
  602. package/src/routing/codegen-shared.ts +115 -0
  603. package/src/routing/codegen-types.ts +61 -0
  604. package/src/routing/codegen.ts +321 -177
  605. package/src/routing/convention-lint.ts +357 -0
  606. package/src/routing/index.ts +10 -1
  607. package/src/routing/interception.ts +1 -1
  608. package/src/routing/link-codegen.ts +308 -0
  609. package/src/routing/scanner.ts +165 -110
  610. package/src/routing/schema-validation.ts +149 -0
  611. package/src/routing/segment-classify.ts +188 -0
  612. package/src/routing/segment-codegen.ts +98 -0
  613. package/src/routing/types.ts +78 -25
  614. package/src/routing/walkers.ts +90 -0
  615. package/src/rsc-runtime/rsc.ts +2 -0
  616. package/src/rsc-runtime/ssr.ts +50 -0
  617. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  618. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  619. package/src/search-params/define.ts +538 -0
  620. package/src/search-params/index.ts +14 -20
  621. package/src/search-params/registry.ts +2 -2
  622. package/src/search-params/wrappers.ts +92 -0
  623. package/src/segment-params/define.ts +309 -0
  624. package/src/segment-params/index.ts +9 -0
  625. package/src/server/access-gate.tsx +76 -34
  626. package/src/server/action-client.ts +88 -15
  627. package/src/server/action-encryption.ts +144 -0
  628. package/src/server/action-handler.ts +112 -14
  629. package/src/server/actions.ts +14 -23
  630. package/src/server/als-registry.ts +108 -20
  631. package/src/server/asset-headers.ts +8 -34
  632. package/src/server/build-manifest.ts +17 -4
  633. package/src/server/coalesce-tick.ts +75 -0
  634. package/src/server/compress.ts +25 -7
  635. package/src/server/cookie-context.ts +468 -0
  636. package/src/server/cookie-parsing.ts +135 -0
  637. package/src/server/debug.ts +1 -1
  638. package/src/server/default-logger.ts +99 -0
  639. package/src/server/deny-boundary.ts +218 -0
  640. package/src/server/deny-renderer.ts +32 -51
  641. package/src/server/dev-source-map.ts +31 -0
  642. package/src/server/early-hints-sender.ts +3 -2
  643. package/src/server/early-hints.ts +36 -15
  644. package/src/server/error-boundary-wrapper.ts +74 -22
  645. package/src/server/fallback-error.ts +74 -102
  646. package/src/server/flight-injection-state.ts +113 -0
  647. package/src/server/flight-scripts.ts +62 -0
  648. package/src/server/flush.ts +2 -1
  649. package/src/server/form-data.ts +101 -5
  650. package/src/server/html-injector-core.ts +417 -0
  651. package/src/server/html-injectors.ts +235 -223
  652. package/src/server/index.ts +29 -183
  653. package/src/server/internal.ts +182 -0
  654. package/src/server/logger.ts +67 -36
  655. package/src/server/metadata-routes.ts +44 -19
  656. package/src/server/middleware-runner.ts +75 -4
  657. package/src/server/node-stream-transforms.ts +361 -0
  658. package/src/server/param-coercion.ts +206 -0
  659. package/src/server/pipeline-helpers.ts +204 -0
  660. package/src/server/pipeline-interception.ts +17 -16
  661. package/src/server/pipeline-metadata.ts +13 -0
  662. package/src/server/pipeline-outcome.ts +197 -0
  663. package/src/server/pipeline-phases.ts +468 -0
  664. package/src/server/pipeline.ts +154 -394
  665. package/src/server/port-resolution.ts +215 -0
  666. package/src/server/primitives.ts +111 -28
  667. package/src/server/render-timeout.ts +108 -0
  668. package/src/server/request-context.ts +168 -337
  669. package/src/server/route-element-builder.ts +435 -208
  670. package/src/server/route-handler.ts +24 -4
  671. package/src/server/route-matcher.ts +128 -277
  672. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  673. package/src/server/rsc-entry/api-handler.ts +16 -17
  674. package/src/server/rsc-entry/error-renderer.ts +315 -89
  675. package/src/server/rsc-entry/helpers.ts +155 -26
  676. package/src/server/rsc-entry/index.ts +316 -327
  677. package/src/server/rsc-entry/render-route.ts +313 -0
  678. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  679. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  680. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  681. package/src/server/rsc-entry/ssr-renderer.ts +193 -40
  682. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  683. package/src/server/safe-load.ts +60 -0
  684. package/src/server/sensitive-fields.ts +230 -0
  685. package/src/server/sitemap-generator.ts +338 -0
  686. package/src/server/sitemap-handler.ts +126 -0
  687. package/src/server/slot-resolver.ts +228 -246
  688. package/src/server/ssr-bridge-types.ts +124 -0
  689. package/src/server/ssr-entry.ts +217 -78
  690. package/src/server/ssr-render.ts +344 -71
  691. package/src/server/ssr-wrappers.tsx +139 -0
  692. package/src/server/state-tree-diff.ts +30 -23
  693. package/src/server/status-code-resolver.ts +112 -128
  694. package/src/server/stream-utils.ts +213 -0
  695. package/src/server/tracing.ts +21 -10
  696. package/src/server/tree-builder.ts +202 -90
  697. package/src/server/tree-match.ts +210 -0
  698. package/src/server/types.ts +55 -6
  699. package/src/server/utils/escape-html.ts +20 -0
  700. package/src/server/version-skew.ts +104 -0
  701. package/src/shared/merge-search-params.ts +55 -0
  702. package/src/shims/font-google.ts +1 -1
  703. package/src/shims/font-local.ts +34 -0
  704. package/src/shims/headers.ts +5 -1
  705. package/src/shims/navigation-client.ts +4 -3
  706. package/src/shims/navigation.ts +14 -7
  707. package/src/utils/state-machine.ts +111 -0
  708. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  709. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  710. package/dist/_chunks/debug-gwlJkDuf.js +0 -108
  711. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  712. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  713. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  714. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  715. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  716. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  717. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  718. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  719. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  720. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  721. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  722. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  723. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  724. package/dist/cache/register-cached-function.d.ts +0 -17
  725. package/dist/cache/register-cached-function.d.ts.map +0 -1
  726. package/dist/client/browser-entry.d.ts +0 -21
  727. package/dist/client/browser-entry.d.ts.map +0 -1
  728. package/dist/client/link-status-provider.d.ts +0 -11
  729. package/dist/client/link-status-provider.d.ts.map +0 -1
  730. package/dist/client/segment-merger.d.ts +0 -119
  731. package/dist/client/segment-merger.d.ts.map +0 -1
  732. package/dist/client/transition-root.d.ts.map +0 -1
  733. package/dist/client/use-navigation-pending.d.ts +0 -26
  734. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  735. package/dist/client/use-params.d.ts.map +0 -1
  736. package/dist/plugins/cache-transform.d.ts +0 -36
  737. package/dist/plugins/cache-transform.d.ts.map +0 -1
  738. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  739. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  740. package/dist/plugins/dev-logs.d.ts.map +0 -1
  741. package/dist/plugins/dynamic-transform.d.ts +0 -72
  742. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  743. package/dist/plugins/server-action-exports.d.ts +0 -26
  744. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  745. package/dist/routing/status-file-lint.d.ts +0 -33
  746. package/dist/routing/status-file-lint.d.ts.map +0 -1
  747. package/dist/search-params/analyze.d.ts +0 -54
  748. package/dist/search-params/analyze.d.ts.map +0 -1
  749. package/dist/search-params/builtin-codecs.d.ts +0 -105
  750. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  751. package/dist/search-params/codecs.d.ts +0 -53
  752. package/dist/search-params/codecs.d.ts.map +0 -1
  753. package/dist/search-params/create.d.ts +0 -106
  754. package/dist/search-params/create.d.ts.map +0 -1
  755. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  756. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  757. package/dist/server/dev-logger.d.ts.map +0 -1
  758. package/dist/server/dev-span-processor.d.ts.map +0 -1
  759. package/dist/server/dev-warnings.d.ts.map +0 -1
  760. package/dist/server/manifest-status-resolver.d.ts +0 -58
  761. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  762. package/dist/server/prerender.d.ts +0 -77
  763. package/dist/server/prerender.d.ts.map +0 -1
  764. package/dist/utils/directive-parser.d.ts +0 -70
  765. package/dist/utils/directive-parser.d.ts.map +0 -1
  766. package/src/cache/register-cached-function.ts +0 -103
  767. package/src/client/browser-entry.ts +0 -678
  768. package/src/client/link-status-provider.tsx +0 -30
  769. package/src/client/segment-merger.ts +0 -339
  770. package/src/client/transition-root.tsx +0 -166
  771. package/src/client/use-navigation-pending.ts +0 -38
  772. package/src/plugins/cache-transform.ts +0 -199
  773. package/src/plugins/dev-error-overlay.ts +0 -230
  774. package/src/plugins/dynamic-transform.ts +0 -161
  775. package/src/plugins/server-action-exports.ts +0 -220
  776. package/src/routing/status-file-lint.ts +0 -112
  777. package/src/search-params/analyze.ts +0 -192
  778. package/src/search-params/builtin-codecs.ts +0 -228
  779. package/src/search-params/create.ts +0 -321
  780. package/src/server/dev-fetch-instrumentation.ts +0 -96
  781. package/src/server/dev-span-processor.ts +0 -78
  782. package/src/server/manifest-status-resolver.ts +0 -215
  783. package/src/server/prerender.ts +0 -139
  784. package/src/utils/directive-parser.ts +0 -529
  785. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -17,72 +17,86 @@
17
17
 
18
18
  // @ts-expect-error — virtual module provided by timber-routing plugin
19
19
  import routeManifest from 'virtual:timber-route-manifest';
20
+ // TIM-830: Populate the search-params registry eagerly so <Link> can
21
+ // serialize flat `Partial<T>` values synchronously in RSC renders.
22
+ // The module has side effects only — no exports consumed here.
23
+ // @ts-expect-error — virtual module provided by timber-routing plugin
24
+ import 'virtual:timber-search-params-registry';
20
25
  // @ts-expect-error — virtual module provided by timber-entries plugin
21
26
  import config from 'virtual:timber-config';
22
27
  // @ts-expect-error — virtual module provided by timber-build-manifest plugin
23
28
  import buildManifest from 'virtual:timber-build-manifest';
24
29
  // @ts-expect-error — virtual module provided by timber-entries plugin
25
30
  import loadUserInstrumentation from 'virtual:timber-instrumentation';
26
-
27
- import type { FormRerender } from '#/server/action-handler.js';
28
- import { handleActionRequest, isActionRequest } from '#/server/action-handler.js';
29
- import type { BodyLimitsConfig } from '#/server/body-limits.js';
30
- import type { BuildManifest } from '#/server/build-manifest.js';
31
- import {
32
- buildCssLinkTags,
33
- buildFontPreloadTags,
34
- buildModulepreloadTags,
35
- collectRouteCss,
36
- collectRouteFonts,
37
- collectRouteModulepreloads,
38
- } from '#/server/build-manifest.js';
39
- import type { LayoutEntry } from '#/server/deny-renderer.js';
40
- import { renderDenyPage, renderDenyPageAsRsc } from '#/server/deny-renderer.js';
41
- import { resolveLogMode } from '#/server/dev-logger.js';
42
- import { sendEarlyHints103 } from '#/server/early-hints-sender.js';
43
- import { collectEarlyHintHeaders } from '#/server/early-hints.js';
44
- import { runWithFormFlash } from '#/server/form-flash.js';
45
- import type { ClientBootstrapConfig } from '#/server/html-injectors.js';
46
- import { buildClientScripts } from '#/server/html-injectors.js';
47
- import type { InterceptionContext, PipelineConfig, RouteMatch } from '#/server/pipeline.js';
48
- import { createPipeline } from '#/server/pipeline.js';
49
- import { DenySignal, RedirectSignal } from '#/server/primitives.js';
50
- import { buildRouteElement, RouteSignalWithContext } from '#/server/route-element-builder.js';
51
- import type { ManifestSegmentNode } from '#/server/route-matcher.js';
52
- import { createMetadataRouteMatcher, createRouteMatcher } from '#/server/route-matcher.js';
53
- import { initDevTracing } from '#/server/tracing.js';
54
-
55
- import { renderFallbackError as renderFallback } from '#/server/fallback-error.js';
56
- import { loadInstrumentation } from '#/server/instrumentation.js';
57
- import { handleApiRoute } from './api-handler.js';
58
- import { renderErrorPage, renderNoMatchPage } from './error-renderer.js';
59
- import {
60
- buildRedirectResponse,
61
- createDebugChannelSink,
62
- escapeHtml,
63
- isRscPayloadRequest,
64
- } from './helpers.js';
65
- import { parseClientStateTree } from '#/server/state-tree-diff.js';
66
- import { buildRscPayloadResponse } from './rsc-payload.js';
67
- import { renderRscStream } from './rsc-stream.js';
68
- import { renderSsrResponse } from './ssr-renderer.js';
31
+ // @ts-expect-error — virtual module provided by timber-entries plugin
32
+ import loadCacheHandler from 'virtual:timber-cache-handler';
33
+ // @ts-expect-error — virtual module provided by timber-routing plugin
34
+ import globalSchemaCodecs from 'virtual:timber-schema';
35
+
36
+ import { wrapPipelineWithActionDispatch } from './wrap-action-dispatch.js';
37
+ import type { BodyLimitsConfig } from '../body-limits.js';
38
+ import type { BuildManifest } from '../build-manifest.js';
39
+ import type { LayoutEntry } from '../deny-renderer.js';
40
+ import { renderDenyPage, renderDenyPageAsRsc } from '../deny-renderer.js';
41
+ import { resolveLogMode } from '../../dev-tools/logger.js';
42
+ import { sendEarlyHints103 } from '../early-hints-sender.js';
43
+ import { collectEarlyHintHeaders } from '../early-hints.js';
44
+ import { buildClientScripts } from '../html-injectors.js';
45
+ import type { InterceptionContext, PipelineConfig, RouteMatch } from '../pipeline.js';
46
+ import { createPipeline } from '../pipeline.js';
47
+ import { coerceSegmentParams, setGlobalSchemaCodecs } from '../param-coercion.js';
48
+ import { setSegmentParams } from '../request-context.js';
49
+ import { buildRouteElement } from '../route-element-builder.js';
50
+ import type { ManifestSegmentNode } from '../route-matcher.js';
51
+ import { createMetadataRouteMatcher, createRouteMatcher } from '../route-matcher.js';
52
+ import { initDevTracing } from '../tracing.js';
53
+
54
+ import { renderFallbackError as renderFallback } from '../fallback-error.js';
55
+ import { loadInstrumentation } from '../instrumentation.js';
56
+ import { loadModule } from '../safe-load.js';
57
+ import { logRenderError } from '../logger.js';
58
+ import { renderNoMatchPage } from './error-renderer.js';
59
+ import { createDebugChannelSink, isRscPayloadRequest } from './helpers.js';
60
+ import { renderRoute } from './render-route.js';
69
61
  import { callSsr } from './ssr-bridge.js';
70
- import { isDebug, isDevMode, setDebugFromConfig } from '#/server/debug.js';
62
+ import { isDebug, isDevMode, setDebugFromConfig } from '../debug.js';
63
+ import { setSourceMapCallback } from '../dev-source-map.js';
64
+ import { requestContextAls } from '../als-registry.js';
65
+ import { createAutoSitemapHandler } from '../sitemap-handler.js';
71
66
 
72
- // Dev-only pipeline error handler, set by the dev server after import.
73
- // In production this is always undefined — no overhead.
74
- let _devPipelineErrorHandler: ((error: Error, phase: string) => void) | undefined;
67
+ /**
68
+ * Resolve the Server-Timing mode from timber.config.ts.
69
+ *
70
+ * If the user set `serverTiming` explicitly, use that value.
71
+ * Otherwise: `'detailed'` in dev, `'total'` in production.
72
+ */
73
+ function resolveServerTimingMode(
74
+ config: Record<string, unknown>,
75
+ isDev: boolean
76
+ ): 'detailed' | 'total' | false {
77
+ const userValue = config.serverTiming as 'detailed' | 'total' | false | undefined;
78
+ if (userValue !== undefined) return userValue;
79
+ return isDev ? 'detailed' : 'total';
80
+ }
75
81
 
76
82
  /**
77
- * Set the dev pipeline error handler.
83
+ * Set the dev source-map handler.
84
+ *
85
+ * Called by the dev server after importing this module to wire Vite's
86
+ * module graph source-mapping into the error rendering pipeline. Errors
87
+ * rendered by renderErrorPage / renderFallbackError will have their
88
+ * stack traces rewritten to show original source positions.
78
89
  *
79
- * Called by the dev server after importing this module to wire pipeline
80
- * errors into the Vite browser error overlay. No-op in production.
90
+ * No-op in production.
81
91
  */
82
- export function setDevPipelineErrorHandler(handler: (error: Error, phase: string) => void): void {
83
- _devPipelineErrorHandler = handler;
92
+ export function setDevSourceMapHandler(handler: (error: Error) => void): void {
93
+ setSourceMapCallback(handler);
84
94
  }
85
95
 
96
+ // Dev-only: debug components getter is stored per-request in ALS
97
+ // (RequestContextStore.debugComponentsGetter) to avoid cross-request
98
+ // race conditions. See TIM-557.
99
+
86
100
  /**
87
101
  * Create the RSC request handler from the route manifest.
88
102
  *
@@ -96,18 +110,37 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
96
110
  // See design/17-logging.md §"register() — Server Startup"
97
111
  await loadInstrumentation(loadUserInstrumentation);
98
112
 
99
- // Initialize cookie signing secrets from config (design/29-cookies.md §"Signed Cookies")
100
- const cookieSecrets = (runtimeConfig as Record<string, unknown>).cookieSecrets as
101
- | string[]
113
+ // Initialize deployment ID for version skew detection (TIM-446).
114
+ // The manifest init module sets globalThis.__TIMBER_DEPLOYMENT_ID__ at startup.
115
+ // In dev mode this is undefined — skew checks are skipped.
116
+ const deploymentId = (globalThis as Record<string, unknown>).__TIMBER_DEPLOYMENT_ID__ as
117
+ | string
102
118
  | undefined;
103
- if (cookieSecrets?.length) {
104
- const { setCookieSecrets } = await import('#/server/request-context.js');
105
- setCookieSecrets(cookieSecrets);
119
+ if (deploymentId) {
120
+ const { setDeploymentId } = await import('../version-skew.js');
121
+ setDeploymentId(deploymentId);
122
+ }
123
+
124
+ // Wire the configured cache handler into the module-level singleton (TIM-599).
125
+ // The cacheHandler is a class instance (e.g. RedisCacheHandler) that can't be
126
+ // JSON-serialized into virtual:timber-config. Instead, virtual:timber-cache-handler
127
+ // dynamically imports the user's timber.config.ts and extracts the handler.
128
+ const userCacheHandler = await loadCacheHandler();
129
+ if (userCacheHandler) {
130
+ const { setCacheHandler } = await import('../../cache/handler-store.js');
131
+ setCacheHandler(userCacheHandler as Parameters<typeof setCacheHandler>[0]);
106
132
  }
107
133
 
108
134
  const matchRoute = createRouteMatcher(manifest);
109
135
  const matchMetadataRoute = createMetadataRouteMatcher(manifest);
110
136
 
137
+ // TIM-931: Register global schema codecs for param coercion.
138
+ // When app/schema.ts exists, globalSchemaCodecs is a Record<string, Codec>;
139
+ // otherwise null. Registered once at startup so all coercion paths
140
+ // (pipeline-phases.ts, action-middleware-runner.ts, revalidation) share
141
+ // the same codec source.
142
+ setGlobalSchemaCodecs(globalSchemaCodecs);
143
+
111
144
  // Build the client bootstrap configuration.
112
145
  // When client JavaScript is disabled, no scripts are injected
113
146
  // (unless enableHMRInDev is true in dev mode — then only HMR client).
@@ -129,6 +162,18 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
129
162
  setDebugFromConfig(true);
130
163
  }
131
164
 
165
+ // Wire the global sensitive-field stripping config so `createActionClient`
166
+ // instances in user code pick up `forms.stripSensitiveFields` from
167
+ // `timber.config.ts` without needing to plumb config through each action.
168
+ // See TIM-816 and design/08-forms-and-actions.md §"Validation errors".
169
+ const formsConfig = (runtimeConfig as Record<string, unknown>).forms as
170
+ | { stripSensitiveFields?: import('../sensitive-fields.js').SensitiveFieldsOption }
171
+ | undefined;
172
+ if (formsConfig) {
173
+ const { setGlobalSensitiveFieldsConfig } = await import('../sensitive-fields.js');
174
+ setGlobalSensitiveFieldsConfig(formsConfig.stripSensitiveFields);
175
+ }
176
+
132
177
  // Two separate flags for two different security levels:
133
178
  //
134
179
  // isDev (isDevMode) — gates client-visible behavior: dev error pages with
@@ -152,15 +197,22 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
152
197
  await initDevTracing({ mode: devLogMode, slowPhaseMs });
153
198
  // Patch globalThis.fetch to create OTEL spans for fetch calls.
154
199
  // Spans appear as children of the active component span in the dev log tree.
155
- const { instrumentDevFetch } = await import('../dev-fetch-instrumentation.js');
200
+ const { instrumentDevFetch } = await import('../../dev-tools/instrumentation.js');
156
201
  instrumentDevFetch();
157
202
  }
158
203
  }
159
204
 
160
205
  const typedBuildManifest = buildManifest as BuildManifest;
161
206
 
207
+ // The routing plugin emits `manifest.proxy = { load, filePath }` only when
208
+ // the app has an `app/proxy.ts`. Convert that to the pipeline's lazy variant
209
+ // so HMR re-imports per request; leave it undefined when there's no proxy.
210
+ const proxyConfig: PipelineConfig['proxy'] = manifest.proxy?.load
211
+ ? { kind: 'lazy', loader: manifest.proxy.load }
212
+ : undefined;
213
+
162
214
  const pipelineConfig: PipelineConfig = {
163
- proxyLoader: manifest.proxy?.load,
215
+ proxy: proxyConfig,
164
216
  matchRoute,
165
217
  matchMetadataRoute,
166
218
  // 103 Early Hints — fires after route match, before middleware.
@@ -168,11 +220,7 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
168
220
  // so the browser starts fetching critical resources while the server renders.
169
221
  // In dev mode the manifest is empty — no hints are sent.
170
222
  earlyHints: (match: RouteMatch, _req: Request, responseHeaders: Headers) => {
171
- const segments = match.segments as unknown as Array<{
172
- layout?: { filePath: string };
173
- page?: { filePath: string };
174
- }>;
175
- const headers = collectEarlyHintHeaders(segments, typedBuildManifest, {
223
+ const headers = collectEarlyHintHeaders(match.segments, typedBuildManifest, {
176
224
  skipJs: clientJsDisabled,
177
225
  });
178
226
  for (const h of headers) {
@@ -193,33 +241,163 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
193
241
  req,
194
242
  match,
195
243
  responseHeaders,
196
- clientBootstrap,
197
- clientJsDisabled,
244
+ {
245
+ clientBootstrap,
246
+ clientJsDisabled,
247
+ rootSegment: manifest.root,
248
+ buildManifest: typedBuildManifest,
249
+ globalError: manifest.globalError,
250
+ },
198
251
  interception
199
252
  );
200
253
  },
201
254
  renderNoMatch: async (req: Request, responseHeaders: Headers) => {
202
- return renderNoMatchPage(req, manifest.root, responseHeaders, clientBootstrap);
255
+ const response = await renderNoMatchPage(
256
+ req,
257
+ manifest.root,
258
+ responseHeaders,
259
+ clientBootstrap
260
+ );
261
+
262
+ // In dev mode, if the pipeline returned a bare 404 (no body — meaning
263
+ // no user-defined 404.tsx was found), replace it with a helpful dev
264
+ // page that lists available routes and suggests similar paths.
265
+ // Only for GET requests that accept HTML — HEAD/API/RSC clients
266
+ // should receive the bare 404 without an HTML body (TIM-793).
267
+ const acceptsHtml = (req.headers.get('accept') ?? '').includes('text/html');
268
+ if (isDev && !response.body && req.method === 'GET' && acceptsHtml) {
269
+ const { generateDev404Page, collectRoutes } = await import('../../dev-tools/404-page.js');
270
+ const routes = collectRoutes(manifest.root);
271
+ const pathname = new URL(req.url).pathname;
272
+ const html = generateDev404Page(pathname, routes);
273
+ return new Response(html, {
274
+ status: 404,
275
+ headers: {
276
+ ...Object.fromEntries(responseHeaders.entries()),
277
+ 'content-type': 'text/html; charset=utf-8',
278
+ },
279
+ });
280
+ }
281
+
282
+ return response;
203
283
  },
204
284
  interceptionRewrites: manifest.interceptionRewrites,
205
285
  // Slow request threshold from timber.config.ts. Default 3000ms, 0 to disable.
206
286
  // See design/17-logging.md §"slowRequestMs"
207
287
  slowRequestMs: (runtimeConfig as Record<string, unknown>).slowRequestMs as number | undefined,
208
- enableServerTiming: isDev,
288
+ serverTiming: resolveServerTimingMode(runtimeConfig, isDev),
209
289
  onPipelineError: isDev
210
290
  ? (error: Error, phase: string) => {
211
- if (_devPipelineErrorHandler) _devPipelineErrorHandler(error, phase);
291
+ if (pipelineConfig.devPipelineErrorHandler) {
292
+ // For render-phase errors, include RSC debug component data
293
+ // from the Flight debug channel (if available from the current request).
294
+ const store = requestContextAls.getStore();
295
+ const debugComponents =
296
+ phase === 'render' && store?.debugComponentsGetter
297
+ ? store.debugComponentsGetter()
298
+ : undefined;
299
+ pipelineConfig.devPipelineErrorHandler(error, phase, debugComponents);
300
+ }
212
301
  }
213
302
  : undefined,
303
+
214
304
  renderFallbackError: (error, req, responseHeaders) =>
215
- renderFallback(error, req, responseHeaders, isDev, manifest.root, clientBootstrap),
305
+ renderFallback(
306
+ error,
307
+ req,
308
+ responseHeaders,
309
+ isDev,
310
+ manifest.root,
311
+ clientBootstrap,
312
+ manifest.globalError,
313
+ // Project root for dev error page frame classification.
314
+ // Not in runtimeConfig (TIM-787: leaked to client bundles).
315
+ // manifest.viteRoot is the resolved Vite root string — correct even
316
+ // when CWD differs from project root (e.g., monorepo custom root)
317
+ // (TIM-807). Passing manifest.root (segment tree object) here would
318
+ // stringify to "[object Object]" and misclassify app frames as
319
+ // internal, dropping source locations from the dev error page (TIM-808).
320
+ isDev ? manifest.viteRoot : undefined
321
+ ),
322
+ renderDenyFallback: async (deny, req, responseHeaders, matchedRoute) => {
323
+ // Render the deny page (403.tsx, 404.tsx, etc.) for DenySignals
324
+ // that escape from middleware or the render phase.
325
+ //
326
+ // When the pipeline already matched a route (the common case — matching
327
+ // runs before middleware and rendering), resolve the status file against
328
+ // the matched chain so colocated files like a nested `403.tsx` or an API
329
+ // route's `401.json` are picked up. Fall back to the root chain when no
330
+ // match is available (e.g. proxy-stage deny before route matching).
331
+ // See TIM-822, design/04-authorization.md, design/10-error-handling.md.
332
+ const chain: ManifestSegmentNode[] = matchedRoute ? matchedRoute.segments : [manifest.root];
333
+ const layoutComponents: LayoutEntry[] = [];
334
+ try {
335
+ for (const segment of chain) {
336
+ if (!segment.layout) continue;
337
+ const mod = await loadModule(segment.layout);
338
+ if (mod.default) {
339
+ layoutComponents.push({
340
+ component: mod.default as (...args: unknown[]) => unknown,
341
+ segment,
342
+ });
343
+ }
344
+ }
345
+ } catch (layoutError) {
346
+ // Layout failed to load — proceed without it. Partial layout chains
347
+ // are acceptable; the deny renderer wraps in whatever loaded.
348
+ logRenderError({ method: req.method, path: new URL(req.url).pathname, error: layoutError });
349
+ }
350
+ // Reuse the matched route's params/middleware metadata when present so
351
+ // downstream rendering sees the real route shape. Otherwise synthesise
352
+ // a root-only stub (no params, no middleware).
353
+ const match: RouteMatch = matchedRoute ?? {
354
+ segments: chain,
355
+ segmentParams: {},
356
+ middlewareChain: [],
357
+ };
358
+ // For client navigation (Accept: text/x-component), the timber router
359
+ // decodes the response as React Flight. Returning HTML to a Flight
360
+ // decoder breaks navigation, so dispatch to the RSC renderer when the
361
+ // request is an RSC payload request — mirroring the normal render path.
362
+ // See design/19-client-navigation.md §"RSC Payload Handling" and TIM-823.
363
+ if (isRscPayloadRequest(req)) {
364
+ return renderDenyPageAsRsc(
365
+ deny,
366
+ chain,
367
+ layoutComponents,
368
+ responseHeaders,
369
+ createDebugChannelSink
370
+ );
371
+ }
372
+ return renderDenyPage(
373
+ deny,
374
+ chain,
375
+ layoutComponents,
376
+ req,
377
+ match,
378
+ responseHeaders,
379
+ clientBootstrap,
380
+ createDebugChannelSink,
381
+ callSsr
382
+ );
383
+ },
384
+ // Auto-generated sitemap handler — enabled when sitemap.enabled is true
385
+ // and no user-authored sitemap exists at the app root.
386
+ // See design/16-metadata.md §"Auto-generated Sitemap"
387
+ autoSitemapHandler: createAutoSitemapHandler(manifest.root, runtimeConfig),
216
388
  };
217
389
 
218
390
  const pipeline = createPipeline(pipelineConfig);
219
391
 
220
- // Wrap the pipeline to intercept server action requests before rendering.
221
- // Actions bypass the normal pipeline (no route matching, no middleware)
222
- // per design/08-forms-and-actions.md §"Middleware for Server Actions".
392
+ // Wrap the pipeline to enforce CSRF at the request boundary and intercept
393
+ // server action requests. By default, the wrapper also runs the matched
394
+ // route's `middleware.ts` chain on action POSTs, so authentication, rate
395
+ // limiting, tenant isolation, and request-header injection apply to
396
+ // actions just like they do to page renders. See TIM-871 and
397
+ // design/08-forms-and-actions.md §"Middleware for Server Actions".
398
+ //
399
+ // CSRF validation lives in the wrapper (not inside the action handler) so
400
+ // it covers route.ts API handlers as well as server actions. See LOCAL-773.
223
401
  const csrfConfig = {
224
402
  csrf: runtimeConfig.csrf,
225
403
  allowedOrigins: (runtimeConfig as Record<string, unknown>).allowedOrigins as
@@ -227,268 +405,79 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
227
405
  | undefined,
228
406
  };
229
407
 
230
- return async (req: Request): Promise<Response> => {
231
- if (isActionRequest(req)) {
232
- const actionResponse = await handleActionRequest(req, {
233
- csrf: csrfConfig,
234
- bodyLimits: {
235
- limits: (runtimeConfig as Record<string, unknown>).limits as BodyLimitsConfig['limits'],
236
- },
237
- revalidateRenderer: async (path: string) => {
238
- // Build the React element tree for the route at `path`.
239
- // Returns the element tree (not serialized) so the action handler can
240
- // combine it with the action result in a single renderToReadableStream call.
241
- // Forward original request headers (cookies, session IDs, etc.).
242
- const revalidateHeaders = new Headers(req.headers);
243
- revalidateHeaders.set('Accept', 'text/x-component');
244
- const revalidateReq = new Request(new URL(path, req.url), {
245
- headers: revalidateHeaders,
246
- });
247
- const revalidateMatch = matchRoute(new URL(revalidateReq.url).pathname);
248
- if (!revalidateMatch) {
249
- throw new Error(`revalidatePath('${path}') — no matching route`);
250
- }
251
- const routeResult = await buildRouteElement(revalidateReq, revalidateMatch);
252
- return {
253
- element: routeResult.element,
254
- headElements: routeResult.headElements,
255
- };
256
- },
257
- });
258
- if (actionResponse) {
259
- // Check if this is a re-render signal (no-JS validation failure)
260
- if ('rerender' in actionResponse) {
261
- const formRerender = actionResponse as FormRerender;
262
- // Re-render the page with the action result as flash data.
263
- // Server components read it via getFormFlash() and pass it to
264
- // client form components as the initial useActionState value.
265
- const response = await runWithFormFlash(formRerender.rerender, () => pipeline(req));
266
- return response;
267
- }
268
- return actionResponse;
269
- }
270
- }
271
- return pipeline(req);
272
- };
273
- }
274
-
275
- /**
276
- * Render a matched route to an HTML Response via RSC → SSR pipeline,
277
- * or return a raw RSC Flight stream for client-side navigation requests.
278
- *
279
- * 1. Load page/layout components from the segment chain
280
- * 2. Resolve metadata
281
- * 3. Render to RSC Flight stream (serializes "use client" as references)
282
- * 4. If Accept: text/x-component → return RSC stream directly
283
- * Otherwise → pass RSC stream to SSR entry for HTML rendering
284
- */
285
- async function renderRoute(
286
- _req: Request,
287
- match: RouteMatch,
288
- responseHeaders: Headers,
289
- clientBootstrap: ClientBootstrapConfig,
290
- clientJsDisabled: boolean,
291
- interception?: InterceptionContext
292
- ): Promise<Response> {
293
- const segments = match.segments as unknown as ManifestSegmentNode[];
294
- const leaf = segments[segments.length - 1];
295
-
296
- // API routes (route.ts) — run access.ts standalone then dispatch to handler.
297
- // No React render pass — AccessGate is not used, React.cache is not active.
298
- // See design/04-authorization.md §"Auth in API Routes".
299
- if (leaf.route && !leaf.page) {
300
- return handleApiRoute(_req, match, segments, responseHeaders);
301
- }
408
+ const actionsConfig = (runtimeConfig as Record<string, unknown>).actions as
409
+ | { runMiddleware?: boolean }
410
+ | undefined;
302
411
 
303
- // Parse X-Timber-State-Tree for RSC payload requests (client navigation).
304
- // The state tree lists sync segments the client has cached — the server
305
- // skips re-rendering those layouts for a smaller, faster RSC payload.
306
- // Only used for RSC requests — HTML requests always get a full render.
307
- // See design/19-client-navigation.md §"X-Timber-State-Tree Header"
308
- const clientStateTree = isRscPayloadRequest(_req) ? parseClientStateTree(_req) : null;
309
-
310
- // Build the React element tree — loads modules, runs access checks,
311
- // resolves metadata. DenySignal/RedirectSignal propagate for HTTP handling.
312
- let routeResult;
313
- try {
314
- routeResult = await buildRouteElement(_req, match, interception, clientStateTree);
315
- } catch (error) {
316
- // RouteSignalWithContext wraps DenySignal/RedirectSignal with layout context
317
- if (error instanceof RouteSignalWithContext) {
318
- const { signal, layoutComponents: lc, segments: segs } = error;
319
- if (signal instanceof DenySignal) {
320
- if (isRscPayloadRequest(_req)) {
321
- return renderDenyPageAsRsc(
322
- signal,
323
- segs,
324
- lc as LayoutEntry[],
325
- responseHeaders,
326
- createDebugChannelSink
327
- );
328
- }
329
- return renderDenyPage(
330
- signal,
331
- segs,
332
- lc as LayoutEntry[],
333
- _req,
334
- match,
335
- responseHeaders,
336
- clientBootstrap,
337
- createDebugChannelSink,
338
- callSsr
339
- );
340
- }
341
- if (signal instanceof RedirectSignal) {
342
- return buildRedirectResponse(_req, signal, responseHeaders);
412
+ const handler = wrapPipelineWithActionDispatch(pipeline, {
413
+ csrfConfig,
414
+ bodyLimits: (runtimeConfig as Record<string, unknown>).limits as BodyLimitsConfig['limits'],
415
+ sensitiveFields: formsConfig?.stripSensitiveFields,
416
+ matchRoute,
417
+ coerceSegmentParams,
418
+ renderDenyFallback: pipelineConfig.renderDenyFallback,
419
+ runMiddleware: actionsConfig?.runMiddleware,
420
+ // Thread the pipeline's `stripTrailingSlash` setting into the wrapper
421
+ // so its canonicalization step (applied before `matchRoute` for
422
+ // action POSTs) matches the page pipeline exactly. Defaults to `true`
423
+ // both here and inside the wrapper.
424
+ stripTrailingSlash: pipelineConfig.stripTrailingSlash,
425
+ buildRevalidateRenderer: (req) => async (path: string) => {
426
+ // Build the React element tree for the route at `path`.
427
+ // Returns the element tree (not serialized) so the action handler can
428
+ // combine it with the action result in a single renderToReadableStream call.
429
+ // Forward original request headers (cookies, session IDs, etc.).
430
+ const revalidateHeaders = new Headers(req.headers);
431
+ revalidateHeaders.set('Accept', 'text/x-component');
432
+ const revalidateReq = new Request(new URL(path, req.url), {
433
+ headers: revalidateHeaders,
434
+ });
435
+ const revalidateMatch = matchRoute(new URL(revalidateReq.url).pathname);
436
+ if (!revalidateMatch) {
437
+ throw new Error(`revalidatePath('${path}') — no matching route`);
343
438
  }
344
- }
345
- // No PageComponent found
346
- if (error instanceof Error && error.message.startsWith('No page component')) {
347
- return new Response(null, { status: 404 });
348
- }
349
- throw error;
350
- }
351
-
352
- const { element, headElements, layoutComponents, deferSuspenseFor, skippedSegments } =
353
- routeResult;
354
-
355
- // Build head HTML for injection into the SSR output.
356
- // Collects CSS, fonts, and modulepreload from the build manifest for matched segments.
357
- // In dev mode the manifest is empty — Vite HMR handles CSS/JS.
358
- //
359
- // Link headers (for 103 Early Hints) are emitted by the earlyHints pipeline
360
- // stage before middleware runs. Here we only emit the <head> HTML fallback tags
361
- // — these ensure resources load even on platforms without Early Hints support.
362
- const typedManifest = buildManifest as BuildManifest;
363
- let headHtml = '';
364
-
365
- const cssUrls = collectRouteCss(segments, typedManifest);
366
- if (cssUrls.length > 0) {
367
- headHtml += buildCssLinkTags(cssUrls);
368
- }
369
-
370
- // Inline font CSS as a <style> tag — @font-face rules and scoped classes.
371
- // The font CSS is set on globalThis by the transformed font file's
372
- // side-effect import of virtual:timber-font-css-register.
373
- const fontCss = (globalThis as Record<string, unknown>).__timber_font_css as string | undefined;
374
- if (fontCss) {
375
- headHtml += `<style data-timber-fonts>${fontCss}</style>`;
376
- }
377
-
378
- const fontEntries = collectRouteFonts(segments, typedManifest);
379
- if (fontEntries.length > 0) {
380
- headHtml += buildFontPreloadTags(fontEntries);
381
- }
382
-
383
- // Skip modulepreload tags when client JavaScript is disabled — no JS to preload.
384
- if (!clientJsDisabled) {
385
- const preloadUrls = collectRouteModulepreloads(segments, typedManifest);
386
- if (preloadUrls.length > 0) {
387
- headHtml += buildModulepreloadTags(preloadUrls);
388
- }
389
- }
390
-
391
- for (const el of headElements) {
392
- if (el.tag === 'title' && el.content) {
393
- headHtml += `<title>${escapeHtml(el.content)}</title>`;
394
- } else if (el.attrs) {
395
- const attrs = Object.entries(el.attrs)
396
- .filter(([, v]) => v != null)
397
- .map(([k, v]) => `${k}="${escapeHtml(v as string)}"`)
398
- .join(' ');
399
- headHtml += `<${el.tag} ${attrs}>`;
400
- }
401
- }
402
-
403
- // Render to RSC Flight stream with signal tracking.
404
- const { rscStream, signals } = renderRscStream(element, _req);
405
-
406
- // Synchronous redirect — redirect() in access.ts or a non-async component
407
- // throws during renderToReadableStream creation. Return HTTP redirect.
408
- if (signals.redirectSignal) {
409
- return buildRedirectResponse(_req, signals.redirectSignal, responseHeaders);
410
- }
411
-
412
- // Synchronous deny — deny() in a non-async component throws during
413
- // renderToReadableStream creation, caught in the try/catch above.
414
- if (signals.denySignal) {
415
- if (isRscPayloadRequest(_req)) {
416
- return renderDenyPageAsRsc(
417
- signals.denySignal,
418
- segments,
419
- layoutComponents as LayoutEntry[],
420
- responseHeaders,
421
- createDebugChannelSink
439
+ // Coerce segment params (params.ts) before building the element tree.
440
+ // Without this, components receive raw strings instead of typed values.
441
+ await coerceSegmentParams(revalidateMatch);
442
+ // Set coerced params in ALS so getSegmentParams() works during the
443
+ // revalidation render (AccessGate reads params via ALS). Without this,
444
+ // AccessGate → getSegmentParams() throws because segmentParams
445
+ // is never set. See TIM-667.
446
+ setSegmentParams(revalidateMatch.segmentParams);
447
+ const routeResult = await buildRouteElement(
448
+ revalidateReq,
449
+ revalidateMatch,
450
+ undefined,
451
+ null,
452
+ (buildManifest as BuildManifest).metadataRouteHashes
422
453
  );
423
- }
424
- return renderDenyPage(
425
- signals.denySignal,
426
- segments,
427
- layoutComponents as LayoutEntry[],
428
- _req,
429
- match,
430
- responseHeaders,
431
- clientBootstrap,
432
- createDebugChannelSink,
433
- callSsr
434
- );
435
- }
436
-
437
- // Synchronous render error — renderToReadableStream threw before
438
- // creating the stream. Render the error page with correct 5xx status.
439
- // (Async render errors are tracked in onError and handled after SSR.)
440
- if (signals.renderError && !rscStream) {
441
- return renderErrorPage(
442
- signals.renderError.error,
443
- signals.renderError.status,
444
- segments,
445
- layoutComponents as LayoutEntry[],
446
- _req,
447
- match,
448
- responseHeaders,
449
- clientBootstrap
450
- );
451
- }
452
-
453
- // For RSC payload requests (client navigation), return the RSC Flight
454
- // stream directly — skip SSR HTML rendering entirely.
455
- // See design/19-client-navigation.md §"RSC Payload Handling"
456
- if (isRscPayloadRequest(_req)) {
457
- return buildRscPayloadResponse(
458
- _req,
459
- rscStream!,
460
- signals,
461
- segments,
462
- layoutComponents,
463
- headElements,
464
- match,
465
- responseHeaders,
466
- skippedSegments
467
- );
468
- }
469
-
470
- // Pipe through SSR for HTML rendering with streaming Suspense support.
471
- return renderSsrResponse({
472
- req: _req,
473
- rscStream: rscStream!,
474
- signals,
475
- segments,
476
- layoutComponents,
477
- match,
478
- responseHeaders,
479
- clientBootstrap,
480
- clientJsDisabled,
481
- headHtml,
482
- deferSuspenseFor,
454
+ return {
455
+ element: routeResult.element,
456
+ headElements: routeResult.headElements,
457
+ };
458
+ },
483
459
  });
460
+
461
+ return { handler, pipelineConfig };
484
462
  }
485
463
 
486
464
  // Re-export for generated entry points (e.g., Nitro node-server/bun) to wrap
487
465
  // the handler with per-request 103 Early Hints sender via ALS.
488
- export { runWithEarlyHintsSender } from '#/server/early-hints-sender.js';
466
+ export { runWithEarlyHintsSender } from '../early-hints-sender.js';
489
467
 
490
468
  // Re-export for generated entry points to wrap the handler with per-request
491
469
  // waitUntil support via ALS. See design/11-platform.md §"waitUntil()".
492
- export { runWithWaitUntil } from '#/server/waituntil-bridge.js';
470
+ export { runWithWaitUntil } from '../waituntil-bridge.js';
471
+
472
+ const { handler: _handler, pipelineConfig: _pipelineConfig } = await createRequestHandler(
473
+ routeManifest,
474
+ config
475
+ );
476
+
477
+ /**
478
+ * The pipeline configuration object. Exported so the dev server can set
479
+ * `devPipelineErrorHandler` after import without a module-level singleton.
480
+ */
481
+ export const pipelineConfig = _pipelineConfig;
493
482
 
494
- export default await createRequestHandler(routeManifest, config);
483
+ export default _handler;