@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
@@ -0,0 +1,313 @@
1
+ /**
2
+ * Route renderer — turns a matched route into a Response.
3
+ *
4
+ * Extracted from `rsc-entry/index.ts` so the entry can stay focused on
5
+ * pipeline construction. This module owns the steps that happen *after*
6
+ * the pipeline has matched a route and before it commits a response:
7
+ * element-tree build, RSC Flight render, and dispatch to either the SSR
8
+ * HTML path or the RSC payload path. It also handles the
9
+ * synchronous-signal escape hatches (deny / redirect / render error
10
+ * thrown during stream creation) so the entry doesn't carry that logic.
11
+ *
12
+ * The function is parameterized over its dependencies — `clientBootstrap`,
13
+ * `clientJsDisabled`, `rootSegment`, `globalError` — so the entry passes
14
+ * them in once at handler-construction time and they ride along on every
15
+ * call. No globals, no closures over the entry's createRequestHandler
16
+ * scope.
17
+ *
18
+ * Design docs: 02-rendering-pipeline.md, 19-client-navigation.md.
19
+ */
20
+
21
+ import type { BuildManifest } from '../build-manifest.js';
22
+ import {
23
+ buildFontPreloadTags,
24
+ buildModulepreloadTags,
25
+ collectRouteFonts,
26
+ collectRouteModulepreloads,
27
+ } from '../build-manifest.js';
28
+ import { isDevMode } from '../debug.js';
29
+ import type { LayoutEntry } from '../deny-renderer.js';
30
+ import { renderDenyPage, renderDenyPageAsRsc } from '../deny-renderer.js';
31
+ import type { ClientBootstrapConfig } from '../html-injectors.js';
32
+ import type { InterceptionContext, RouteMatch } from '../pipeline.js';
33
+ import { buildRouteElement, ParamCoercionError } from '../route-element-builder.js';
34
+ import type { ManifestSegmentNode } from '../route-matcher.js';
35
+ import { recordTiming } from '../server-timing.js';
36
+ import { requestContextAls } from '../als-registry.js';
37
+ import { parseClientStateTree } from '../state-tree-diff.js';
38
+
39
+ import { handleApiRoute } from './api-handler.js';
40
+ import { renderErrorPage, renderNoMatchPage } from './error-renderer.js';
41
+ import {
42
+ buildRedirectResponse,
43
+ createDebugChannelSink,
44
+ escapeHtml,
45
+ isRscPayloadRequest,
46
+ } from './helpers.js';
47
+ import { buildRscPayloadResponse } from './rsc-payload.js';
48
+ import { renderRscStream } from './rsc-stream.js';
49
+ import { renderSsrResponse } from './ssr-renderer.js';
50
+ import { callSsr } from './ssr-bridge.js';
51
+
52
+ /**
53
+ * Static-per-handler dependencies for `renderRoute` — captured once at
54
+ * handler construction so each per-request call site only has to pass
55
+ * the request-specific arguments.
56
+ */
57
+ export interface RenderRouteDeps {
58
+ clientBootstrap: ClientBootstrapConfig;
59
+ clientJsDisabled: boolean;
60
+ rootSegment: ManifestSegmentNode;
61
+ buildManifest: BuildManifest;
62
+ globalError?: { load: () => Promise<unknown>; filePath: string };
63
+ }
64
+
65
+ /**
66
+ * Render a matched route to an HTML Response via RSC → SSR pipeline,
67
+ * or return a raw RSC Flight stream for client-side navigation requests.
68
+ *
69
+ * 1. Load page/layout components from the segment chain
70
+ * 2. Resolve metadata
71
+ * 3. Render to RSC Flight stream (serializes "use client" as references)
72
+ * 4. If Accept: text/x-component → return RSC stream directly
73
+ * Otherwise → pass RSC stream to SSR entry for HTML rendering
74
+ */
75
+ export async function renderRoute(
76
+ req: Request,
77
+ match: RouteMatch,
78
+ responseHeaders: Headers,
79
+ deps: RenderRouteDeps,
80
+ interception?: InterceptionContext
81
+ ): Promise<Response> {
82
+ const { clientBootstrap, clientJsDisabled, rootSegment, buildManifest, globalError } = deps;
83
+ const segments = match.segments;
84
+ const leaf = segments[segments.length - 1];
85
+
86
+ // API routes (route.ts) — run access.ts standalone then dispatch to handler.
87
+ // No React render pass — AccessGate is not used, React.cache is not active.
88
+ // See design/04-authorization.md §"Auth in API Routes".
89
+ if (leaf.route && !leaf.page) {
90
+ return handleApiRoute(req, match, segments, responseHeaders);
91
+ }
92
+
93
+ // Parse X-Timber-State-Tree for RSC payload requests (client navigation).
94
+ // The state tree lists sync segments the client has cached — the server
95
+ // skips re-rendering those layouts for a smaller, faster RSC payload.
96
+ // Only used for RSC requests — HTML requests always get a full render.
97
+ // See design/19-client-navigation.md §"X-Timber-State-Tree Header"
98
+ const clientStateTree = isRscPayloadRequest(req) ? parseClientStateTree(req) : null;
99
+
100
+ // Build the React element tree — loads modules, collects access checks,
101
+ // resolves metadata. Access checks are NOT run here — they run inside
102
+ // AccessPreRunner during renderToReadableStream so that access.ts and
103
+ // render components share the same React.cache scope (TIM-662).
104
+ //
105
+ // DenySignal/RedirectSignal from access checks are caught by onError
106
+ // during stream consumption and handled by renderSsrResponse /
107
+ // buildRscPayloadResponse.
108
+ let routeResult;
109
+ const _buildStart = performance.now();
110
+ try {
111
+ routeResult = await buildRouteElement(
112
+ req,
113
+ match,
114
+ interception,
115
+ clientStateTree,
116
+ buildManifest.metadataRouteHashes
117
+ );
118
+ } catch (error) {
119
+ // Param coercion failed — render the custom 404 page (status files / not-found).
120
+ // Previously returned a bare Response(null, { status: 404 }) which bypassed
121
+ // custom not-found pages. Now routes through renderNoMatchPage so apps with
122
+ // 404.tsx / not-found status files render their custom page.
123
+ if (error instanceof ParamCoercionError) {
124
+ return renderNoMatchPage(req, rootSegment, responseHeaders, clientBootstrap);
125
+ }
126
+ // No PageComponent found — same treatment as param coercion: render custom 404.
127
+ if (error instanceof Error && error.message.startsWith('No page component')) {
128
+ if (process.env.NODE_ENV !== 'production') {
129
+ console.warn(`[timber] ${error.message}`);
130
+ }
131
+ return renderNoMatchPage(req, rootSegment, responseHeaders, clientBootstrap);
132
+ }
133
+ throw error;
134
+ }
135
+
136
+ const _buildEnd = performance.now();
137
+ recordTiming({
138
+ name: 'build',
139
+ dur: Math.round(_buildEnd - _buildStart),
140
+ desc: 'build element tree',
141
+ });
142
+
143
+ const { element, headElements, layoutComponents, deferSuspenseFor, skippedSegments } =
144
+ routeResult;
145
+
146
+ // Build head HTML for injection into the SSR output.
147
+ // Collects CSS, fonts, and modulepreload from the build manifest for matched segments.
148
+ // In dev mode the manifest is empty — Vite HMR handles CSS/JS.
149
+ //
150
+ // Link headers (for 103 Early Hints) are emitted by the earlyHints pipeline
151
+ // stage before middleware runs. Here we only emit the <head> HTML fallback tags
152
+ // — these ensure resources load even on platforms without Early Hints support.
153
+ let headHtml = '';
154
+
155
+ // CSS is handled by the RSC plugin via ReactDOM.preinit() with
156
+ // data-precedence attributes. This injects <link rel="stylesheet">
157
+ // tags during the RSC render phase — before our headHtml injection.
158
+ // We do NOT emit additional <link rel="stylesheet"> tags here because:
159
+ // 1. React's Float system deduplicates them, making ours redundant
160
+ // 2. The duplicate reference confuses React's client-side preload
161
+ // deduplication, causing "preload ignored" browser warnings
162
+ //
163
+ // CSS URLs are still collected for Early Hints (Link headers) in
164
+ // buildEarlyHintsHeaders() — those are HTTP headers, not DOM elements,
165
+ // so they don't conflict with Float.
166
+
167
+ // Font CSS is NOT inlined here anymore (TIM-828). The transform hook
168
+ // injects a side-effect `import 'virtual:timber-font-css/<hash>.css'`
169
+ // into each file that calls a font function. @vitejs/plugin-rsc's
170
+ // `collectCss` walks the RSC module graph, finds the virtual CSS
171
+ // module, and React Float `preinit()`s it as
172
+ // `<link rel="stylesheet" data-rsc-css-href=...>` — the same path
173
+ // component CSS rides on. Dev and production share a single path,
174
+ // with no `globalThis` channel and no dev/prod skew.
175
+ //
176
+ // Font preload hints (distinct from the @font-face CSS) still flow
177
+ // through `BuildManifest.fonts[importer]` and are emitted below plus
178
+ // as 103 Early Hints via `buildEarlyHintsHeaders()`.
179
+ const fontEntries = collectRouteFonts(segments, buildManifest);
180
+ if (fontEntries.length > 0) {
181
+ headHtml += buildFontPreloadTags(fontEntries);
182
+ }
183
+
184
+ // Skip modulepreload tags when client JavaScript is disabled — no JS to preload.
185
+ if (!clientJsDisabled) {
186
+ const preloadUrls = collectRouteModulepreloads(segments, buildManifest);
187
+ if (preloadUrls.length > 0) {
188
+ headHtml += buildModulepreloadTags(preloadUrls);
189
+ }
190
+ }
191
+
192
+ for (const el of headElements) {
193
+ if (el.tag === 'title' && el.content) {
194
+ headHtml += `<title>${escapeHtml(el.content)}</title>`;
195
+ } else if (el.attrs) {
196
+ const attrs = Object.entries(el.attrs)
197
+ .filter(([, v]) => v != null)
198
+ .map(([k, v]) => `${k}="${escapeHtml(v as string)}"`)
199
+ .join(' ');
200
+ headHtml += `<${el.tag} ${attrs}>`;
201
+ }
202
+ }
203
+
204
+ // In dev mode, inject the browser log forwarding script so console
205
+ // errors/warnings from the browser appear in the server terminal.
206
+ // Set by timber-dev-browser-logs plugin via globalThis (TIM-575).
207
+ if (isDevMode()) {
208
+ const devLogScript = (globalThis as Record<string, unknown>).__timber_dev_browser_log_script as
209
+ | string
210
+ | undefined;
211
+ if (devLogScript) {
212
+ headHtml += devLogScript;
213
+ }
214
+ }
215
+
216
+ // Render to RSC Flight stream with signal tracking.
217
+ const _rscStart = performance.now();
218
+ const { rscStream, signals, getDebugComponents } = renderRscStream(element, req);
219
+
220
+ // Store the debug components getter in ALS so onPipelineError can
221
+ // include component tree context for render-phase errors (dev mode only).
222
+ // Per-request via ALS — no cross-request race. See TIM-557.
223
+ const alsStore = requestContextAls.getStore();
224
+ if (alsStore) {
225
+ alsStore.debugComponentsGetter = getDebugComponents;
226
+ }
227
+ recordTiming({
228
+ name: 'rsc-init',
229
+ dur: Math.round(performance.now() - _rscStart),
230
+ desc: 'RSC stream init',
231
+ });
232
+
233
+ // Synchronous redirect — redirect() in access.ts or a non-async component
234
+ // throws during renderToReadableStream creation. Return HTTP redirect.
235
+ if (signals.redirectSignal) {
236
+ return buildRedirectResponse(req, signals.redirectSignal, responseHeaders);
237
+ }
238
+
239
+ // Synchronous deny — deny() in a non-async component throws during
240
+ // renderToReadableStream creation, caught in the try/catch above.
241
+ if (signals.denySignal) {
242
+ if (isRscPayloadRequest(req)) {
243
+ return renderDenyPageAsRsc(
244
+ signals.denySignal,
245
+ segments,
246
+ layoutComponents as LayoutEntry[],
247
+ responseHeaders,
248
+ createDebugChannelSink
249
+ );
250
+ }
251
+ return renderDenyPage(
252
+ signals.denySignal,
253
+ segments,
254
+ layoutComponents as LayoutEntry[],
255
+ req,
256
+ match,
257
+ responseHeaders,
258
+ clientBootstrap,
259
+ createDebugChannelSink,
260
+ callSsr
261
+ );
262
+ }
263
+
264
+ // Synchronous render error — renderToReadableStream threw before
265
+ // creating the stream. Render the error page with correct 5xx status.
266
+ // (Async render errors are tracked in onError and handled after SSR.)
267
+ if (signals.renderError && !rscStream) {
268
+ return renderErrorPage(
269
+ signals.renderError.error,
270
+ signals.renderError.status,
271
+ segments,
272
+ layoutComponents as LayoutEntry[],
273
+ req,
274
+ match,
275
+ responseHeaders,
276
+ clientBootstrap,
277
+ globalError
278
+ );
279
+ }
280
+
281
+ // For RSC payload requests (client navigation), return the RSC Flight
282
+ // stream directly — skip SSR HTML rendering entirely.
283
+ // See design/19-client-navigation.md §"RSC Payload Handling"
284
+ if (isRscPayloadRequest(req)) {
285
+ return buildRscPayloadResponse(
286
+ req,
287
+ rscStream!,
288
+ signals,
289
+ segments,
290
+ layoutComponents,
291
+ headElements,
292
+ match,
293
+ responseHeaders,
294
+ skippedSegments
295
+ );
296
+ }
297
+
298
+ // Pipe through SSR for HTML rendering with streaming Suspense support.
299
+ return renderSsrResponse({
300
+ req,
301
+ rscStream: rscStream!,
302
+ signals,
303
+ segments,
304
+ layoutComponents,
305
+ match,
306
+ responseHeaders,
307
+ clientBootstrap,
308
+ clientJsDisabled,
309
+ headHtml,
310
+ deferSuspenseFor,
311
+ globalError,
312
+ });
313
+ }
@@ -9,12 +9,12 @@
9
9
  * 16-metadata.md §"Head Elements"
10
10
  */
11
11
 
12
- import type { LayoutEntry } from '#/server/deny-renderer.js';
13
- import { renderDenyPageAsRsc } from '#/server/deny-renderer.js';
14
- import type { RouteMatch } from '#/server/pipeline.js';
15
- import type { RedirectSignal } from '#/server/primitives.js';
16
- import type { HeadElement, LayoutComponentEntry } from '#/server/route-element-builder.js';
17
- import type { ManifestSegmentNode } from '#/server/route-matcher.js';
12
+ import type { LayoutEntry } from '../deny-renderer.js';
13
+ import { renderDenyPageAsRsc } from '../deny-renderer.js';
14
+ import type { RouteMatch } from '../pipeline.js';
15
+ import type { RedirectSignal } from '../primitives.js';
16
+ import type { HeadElement, LayoutComponentEntry } from '../route-element-builder.js';
17
+ import type { ManifestSegmentNode } from '../route-matcher.js';
18
18
 
19
19
  import {
20
20
  buildRedirectResponse,
@@ -69,10 +69,25 @@ export async function buildRscPayloadResponse(
69
69
  | { type: 'data'; chunk: ReadableStreamReadResult<Uint8Array> }
70
70
  | { type: 'signal' };
71
71
 
72
- const first: RaceResult = await Promise.race([
73
- reader.read().then((chunk) => ({ type: 'data' as const, chunk })),
74
- signalDetected.then(() => ({ type: 'signal' as const })),
75
- ]);
72
+ let first: RaceResult;
73
+ try {
74
+ first = await Promise.race([
75
+ reader.read().then((chunk) => ({ type: 'data' as const, chunk })),
76
+ signalDetected.then(() => ({ type: 'signal' as const })),
77
+ ]);
78
+ } catch (_readError) {
79
+ // RSC stream failed on first read — unhandled error in the page component.
80
+ // Return an error response so the client can hard-navigate for the
81
+ // SSR-rendered error page. See design/10-error-handling.md.
82
+ reader.cancel().catch(() => {});
83
+ signals.onSignal = undefined;
84
+ responseHeaders.set('X-Timber-Error', '1');
85
+ responseHeaders.set('content-type', 'application/json; charset=utf-8');
86
+ return new Response(JSON.stringify({ error: true, status: 500 }), {
87
+ status: 500,
88
+ headers: responseHeaders,
89
+ });
90
+ }
76
91
 
77
92
  // If data arrived first, still check signals — they may have fired
78
93
  // concurrently. Also do a final ceiling timeout check for edge cases
@@ -102,10 +117,36 @@ export async function buildRscPayloadResponse(
102
117
  );
103
118
  }
104
119
 
120
+ // Check for unhandled errors (RenderError or plain Error).
121
+ // These aren't redirect/deny signals but the RSC stream will be broken.
122
+ // Return an error response so the client can hard-navigate for the
123
+ // SSR-rendered error page. See design/10-error-handling.md
124
+ // §"Error Page Rendering for Client Navigation".
125
+ if (signals.renderError) {
126
+ reader.cancel().catch(() => {});
127
+ responseHeaders.set('X-Timber-Error', '1');
128
+ responseHeaders.set('content-type', 'application/json; charset=utf-8');
129
+ return new Response(
130
+ JSON.stringify({
131
+ error: true,
132
+ status: signals.renderError.status,
133
+ }),
134
+ { status: signals.renderError.status, headers: responseHeaders }
135
+ );
136
+ }
137
+
105
138
  // Extract the first chunk from the race result.
106
- // If the signal won the race, read the first chunk now (the stream
107
- // was already cancelled above, but we need a firstRead shape below).
108
- const firstRead = first.type === 'data' ? first.chunk : await reader.read();
139
+ // If the signal won the race but neither redirect nor deny was detected
140
+ // (edge case), cancel the reader immediately rather than issuing a bare
141
+ // read() that could hang forever if the RSC stream has stalled.
142
+ // See TIM-519.
143
+ let firstRead: ReadableStreamReadResult<Uint8Array>;
144
+ if (first.type === 'data') {
145
+ firstRead = first.chunk;
146
+ } else {
147
+ await reader.cancel();
148
+ firstRead = { done: true, value: undefined };
149
+ }
109
150
 
110
151
  // Reconstruct the stream: prepend the buffered first chunk,
111
152
  // then continue piping from the original reader.
@@ -155,14 +196,20 @@ export async function buildRscPayloadResponse(
155
196
  responseHeaders.set('X-Timber-Skipped-Segments', JSON.stringify(skippedSegments));
156
197
  }
157
198
 
158
- // Send route params so the client can populate useParams() after
159
- // SPA navigation. Without this, useParams() returns {}.
160
- if (Object.keys(match.params).length > 0) {
161
- responseHeaders.set('X-Timber-Params', JSON.stringify(match.params));
199
+ // Send route params so the client can populate useSegmentParams() after
200
+ // SPA navigation. Without this, useSegmentParams() returns {}.
201
+ if (Object.keys(match.segmentParams).length > 0) {
202
+ responseHeaders.set('X-Timber-Params', JSON.stringify(match.segmentParams));
162
203
  }
163
204
 
205
+ // Check if a DenySignal was caught in-tree by AccessGate or
206
+ // PageDenyBoundary. The deny page is in the Flight stream as a normal
207
+ // element — use the deny status for the HTTP response. See TIM-666.
208
+ const { getDenyStatus } = await import('../deny-boundary.js');
209
+ const denyStatus = getDenyStatus();
210
+
164
211
  return new Response(patchedStream, {
165
- status: 200,
212
+ status: denyStatus ?? 200,
166
213
  headers: responseHeaders,
167
214
  });
168
215
  }
@@ -10,14 +10,22 @@
10
10
  * 13-security.md §"Errors don't leak"
11
11
  */
12
12
 
13
- import { renderToReadableStream } from '#/rsc-runtime/rsc.js';
13
+ import { renderToReadableStream } from '../../rsc-runtime/rsc.js';
14
14
 
15
- import { logRenderError } from '#/server/logger.js';
16
- import { DenySignal, RedirectSignal, RenderError } from '#/server/primitives.js';
17
- import { checkAndWarnRscPropError } from '#/server/rsc-prop-warnings.js';
15
+ import { randomUUID } from 'node:crypto';
18
16
 
19
- import { createDebugChannelSink, isAbortError } from './helpers.js';
20
- import { isDebug } from '#/server/debug.js';
17
+ import { logRenderError } from '../logger.js';
18
+ import { DenySignal, RedirectSignal, RenderError } from '../primitives.js';
19
+ import { checkAndWarnRscPropError } from '../rsc-prop-warnings.js';
20
+
21
+ import {
22
+ createDebugChannelSink,
23
+ createDebugChannelCollector,
24
+ isAbortError,
25
+ type DebugComponentEntry,
26
+ } from './helpers.js';
27
+ import { isDebug } from '../debug.js';
28
+ import { isDevMode } from '../debug.js';
21
29
 
22
30
  /**
23
31
  * Mutable signal state captured during RSC rendering.
@@ -33,13 +41,28 @@ export interface RenderSignals {
33
41
  denySignal: DenySignal | null;
34
42
  redirectSignal: RedirectSignal | null;
35
43
  renderError: { error: unknown; status: number } | null;
44
+ /**
45
+ * The last unhandled error seen by RSC onError that isn't a signal.
46
+ * Used as a fallback when SSR fails (SsrStreamError) but no structured
47
+ * signal was captured — provides the original error for the error page
48
+ * instead of relying on SsrStreamError.cause extraction.
49
+ *
50
+ * NOT used for page-level error detection (that would break Suspense
51
+ * error isolation). Only consumed when SSR actually fails.
52
+ */
53
+ lastUnhandledError: unknown | null;
36
54
  /** Callback fired when a redirect or deny signal is captured in onError. */
37
55
  onSignal?: () => void;
56
+ /** Callback fired when an unhandled error (non-signal) is captured. Used
57
+ * to halt Flight data injection into the inline stream. */
58
+ onUnhandledError?: () => void;
38
59
  }
39
60
 
40
61
  export interface RscStreamResult {
41
62
  rscStream: ReadableStream<Uint8Array> | undefined;
42
63
  signals: RenderSignals;
64
+ /** Dev-only: server component debug info from the Flight debug channel. */
65
+ getDebugComponents?: () => DebugComponentEntry[];
43
66
  }
44
67
 
45
68
  /**
@@ -58,10 +81,15 @@ export function renderRscStream(element: React.ReactElement, req: Request): RscS
58
81
  denySignal: null,
59
82
  redirectSignal: null,
60
83
  renderError: null,
84
+ lastUnhandledError: null,
61
85
  };
62
86
 
63
87
  let rscStream: ReadableStream<Uint8Array> | undefined;
64
88
 
89
+ // In dev mode, collect debug channel data for the error overlay.
90
+ // In production, use the discard sink (no overhead).
91
+ const debugChannel = isDevMode() ? createDebugChannelCollector() : createDebugChannelSink();
92
+
65
93
  try {
66
94
  rscStream = renderToReadableStream(
67
95
  element,
@@ -126,13 +154,48 @@ export function renderRscStream(element: React.ReactElement, req: Request): RscS
126
154
  checkAndWarnRscPropError(error, new URL(req.url).pathname);
127
155
  }
128
156
 
129
- // Track unhandled errors for pre-flush handling (500 status)
130
- if (!signals.renderError) {
131
- signals.renderError = { error, status: 500 };
132
- }
133
- logRenderError({ method: req.method, path: new URL(req.url).pathname, error });
157
+ // Log the error but do NOT track it as a page-level render error.
158
+ // If this error is inside a <Suspense> boundary, React will emit
159
+ // an error row in the Flight stream and the Suspense fallback will
160
+ // render on the client. Tracking it as signals.renderError would
161
+ // cause the pipeline to treat the entire page as a 500, even though
162
+ // the shell rendered successfully. See TIM-524.
163
+ //
164
+ // Only track as renderError if no Suspense boundary contains it —
165
+ // React will call onShellError for truly unrecoverable errors.
166
+
167
+ // Track the last unhandled error so the pipeline can use it
168
+ // if SSR fails (SsrStreamError). This is NOT used for page-level
169
+ // error detection — only as a fallback when SSR actually fails.
170
+ signals.lastUnhandledError = error;
171
+ signals.onUnhandledError?.();
172
+
173
+ // Return a digest so React emits a per-row error in the Flight
174
+ // stream instead of leaving the lazy reference unresolved.
175
+ //
176
+ // SECURITY: Never include error.message in the digest — it may
177
+ // contain SQL queries, filesystem paths, secret fragments, or
178
+ // internal IDs. Use a generic message with a correlation ID so
179
+ // the error can be matched to server logs.
180
+ // See design/13-security.md §"Errors don't leak".
181
+ const errorId = randomUUID();
182
+ logRenderError({
183
+ method: req.method,
184
+ path: new URL(req.url).pathname,
185
+ error,
186
+ errorId,
187
+ });
188
+ return JSON.stringify({
189
+ type: 'error',
190
+ message: isDevMode()
191
+ ? error instanceof Error
192
+ ? error.message
193
+ : String(error)
194
+ : 'An unexpected error occurred.',
195
+ errorId,
196
+ });
134
197
  },
135
- debugChannel: createDebugChannelSink(),
198
+ debugChannel,
136
199
  },
137
200
  {
138
201
  onClientReference(info: { id: string; name: string; deps: unknown }) {
@@ -160,5 +223,14 @@ export function renderRscStream(element: React.ReactElement, req: Request): RscS
160
223
  }
161
224
  }
162
225
 
163
- return { rscStream, signals };
226
+ return {
227
+ rscStream,
228
+ signals,
229
+ // Expose the debug channel collector's getComponents in dev mode.
230
+ // The caller can retrieve component tree info when handling errors.
231
+ getDebugComponents:
232
+ 'getComponents' in debugChannel
233
+ ? (debugChannel as { getComponents: () => DebugComponentEntry[] }).getComponents
234
+ : undefined,
235
+ };
164
236
  }
@@ -1,18 +1,31 @@
1
1
  /**
2
2
  * SSR Bridge — loads the SSR entry and passes the RSC stream for HTML rendering.
3
+ *
4
+ * This is the RSC → SSR environment hop. The two environments are separate
5
+ * Vite module graphs; `NavContext` is the serializable contract that crosses
6
+ * the boundary. See `../ssr-bridge-types.ts` for the contract definition.
3
7
  */
4
8
 
5
9
  /// <reference types="@vitejs/plugin-rsc/types" />
6
10
 
7
- import type { NavContext } from '#/server/ssr-entry.js';
11
+ import type { NavContext } from '../ssr-bridge-types.js';
8
12
 
9
13
  export async function callSsr(
10
14
  rscStream: ReadableStream<Uint8Array>,
11
15
  navContext: NavContext
12
16
  ): Promise<Response> {
13
- const ssrEntry = await import.meta.viteRsc.import<typeof import('#/server/ssr-entry.js')>(
14
- '../ssr-entry.js',
15
- { environment: 'ssr' }
16
- );
17
+ let ssrEntry: typeof import('../ssr-entry.js');
18
+ try {
19
+ ssrEntry = await import.meta.viteRsc.import<typeof import('../ssr-entry.js')>(
20
+ '../ssr-entry.js',
21
+ { environment: 'ssr' }
22
+ );
23
+ } catch (error) {
24
+ const original = error instanceof Error ? error.message : String(error);
25
+ throw new Error(
26
+ `[timber] Failed to load SSR entry from RSC environment.\n ${original}\n This usually means a module evaluation error in the SSR bundle.`,
27
+ { cause: error }
28
+ );
29
+ }
17
30
  return ssrEntry.handleSsr(rscStream, navContext);
18
31
  }