@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
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Tracing — per-request trace ID via AsyncLocalStorage, OTEL span helpers.
3
3
  *
4
- * traceId() is always available in server code (middleware, access, components, actions).
4
+ * getTraceId() is always available in server code (middleware, access, components, actions).
5
5
  * Returns a 32-char lowercase hex string — the OTEL trace ID when an SDK is active,
6
6
  * or a crypto.randomUUID()-derived fallback otherwise.
7
7
  *
@@ -24,11 +24,11 @@ export type { TraceStore } from './als-registry.js';
24
24
  *
25
25
  * Throws if called outside a request context (no ALS store).
26
26
  */
27
- export function traceId(): string {
27
+ export function getTraceId(): string {
28
28
  const store = traceAls.getStore();
29
29
  if (!store) {
30
30
  throw new Error(
31
- '[timber] traceId() called outside of a request context. ' +
31
+ '[timber] getTraceId() called outside of a request context. ' +
32
32
  'It can only be used in middleware, access checks, server components, and server actions.'
33
33
  );
34
34
  }
@@ -38,7 +38,7 @@ export function traceId(): string {
38
38
  /**
39
39
  * Returns the current OTEL span ID if available, undefined otherwise.
40
40
  */
41
- export function spanId(): string | undefined {
41
+ export function getSpanId(): string | undefined {
42
42
  return traceAls.getStore()?.spanId;
43
43
  }
44
44
 
@@ -86,7 +86,7 @@ export function updateSpanId(newSpanId: string | undefined): void {
86
86
 
87
87
  /**
88
88
  * Get the current trace store, or undefined if outside a request context.
89
- * Framework-internal — use traceId()/spanId() in user code.
89
+ * Framework-internal — use getTraceId()/getSpanId() in user code.
90
90
  */
91
91
  export function getTraceStore(): TraceStore | undefined {
92
92
  return traceAls.getStore();
@@ -105,14 +105,25 @@ export function getTraceStore(): TraceStore | undefined {
105
105
  * Only called in dev mode — zero overhead in production.
106
106
  */
107
107
  export async function initDevTracing(
108
- config: import('./dev-logger.js').DevLoggerConfig
108
+ config: import('../dev-tools/logger.js').DevLoggerConfig
109
109
  ): Promise<void> {
110
110
  const api = await getOtelApi();
111
111
  if (!api) return;
112
112
 
113
- const { DevSpanProcessor } = await import('./dev-span-processor.js');
114
- const { BasicTracerProvider } = await import('@opentelemetry/sdk-trace-base');
115
- const { AsyncLocalStorageContextManager } = await import('@opentelemetry/context-async-hooks');
113
+ let DevSpanProcessor: typeof import('../dev-tools/instrumentation.js').DevSpanProcessor;
114
+ let BasicTracerProvider: typeof import('@opentelemetry/sdk-trace-base').BasicTracerProvider;
115
+ let AsyncLocalStorageContextManager: typeof import('@opentelemetry/context-async-hooks').AsyncLocalStorageContextManager;
116
+
117
+ try {
118
+ ({ DevSpanProcessor } = await import('../dev-tools/instrumentation.js'));
119
+ ({ BasicTracerProvider } = await import('@opentelemetry/sdk-trace-base'));
120
+ ({ AsyncLocalStorageContextManager } = await import('@opentelemetry/context-async-hooks'));
121
+ } catch (err) {
122
+ const msg = err instanceof Error ? err.message : String(err);
123
+ console.warn(`[timber] Dev tracing disabled — failed to load OTEL packages:\n ${msg}`);
124
+ return;
125
+ }
126
+
116
127
  const processor = new DevSpanProcessor(config);
117
128
 
118
129
  // Register a context manager so OTEL can propagate the active span
@@ -199,7 +210,7 @@ export async function withSpan<T>(
199
210
 
200
211
  const api = (await getOtelApi())!;
201
212
  return tracer.startActiveSpan(name, { attributes }, async (span) => {
202
- const prevSpanId = spanId();
213
+ const prevSpanId = getSpanId();
203
214
  updateSpanId(span.spanContext().spanId);
204
215
  try {
205
216
  const result = await fn();
@@ -10,7 +10,8 @@
10
10
  * See design/02-rendering-pipeline.md §"Element Tree Construction"
11
11
  */
12
12
 
13
- import type { SegmentNode, RouteFile } from '#/routing/types.js';
13
+ import type { ReactNode } from 'react';
14
+ import type { RouteFile, SegmentNode } from '../routing/types.js';
14
15
 
15
16
  // ─── Types ───────────────────────────────────────────────────────────────────
16
17
 
@@ -25,31 +26,92 @@ export interface LoadedModule {
25
26
  /** Function that loads a route file's module. */
26
27
  export type ModuleLoader = (file: RouteFile) => LoadedModule | Promise<LoadedModule>;
27
28
 
28
- /** A React element — kept opaque to avoid a React dependency in this module. */
29
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
- export type ReactElement = any;
29
+ /**
30
+ * A React component reference loaded from a route module's default export.
31
+ *
32
+ * Loaded modules' `default` is typed as `unknown` (modules are dynamic), so
33
+ * call sites narrow it through `isValidElementType` (below) before treating
34
+ * it as a component. The signature is a callable returning `ReactNode` —
35
+ * TypeScript's view of every valid React component shape, including exotic
36
+ * components (`memo`, `forwardRef`, `lazy`) which the type system treats as
37
+ * callable even though their runtime values are objects with `$$typeof`
38
+ * markers rather than functions.
39
+ */
40
+ export type LoadedComponent = (...args: unknown[]) => ReactNode;
41
+
42
+ // Marker symbols React stamps onto exotic component types. Mirrors the
43
+ // internal `isValidElementType` check in `react.development.js` — React
44
+ // doesn't export it, and we don't want to add `react-is` just for this one
45
+ // validation. Inlined the same way `isClientReference` in
46
+ // `route-element-builder.ts` inlines the client-reference marker.
47
+ const REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
48
+ const REACT_MEMO_TYPE = Symbol.for('react.memo');
49
+ const REACT_LAZY_TYPE = Symbol.for('react.lazy');
50
+ const REACT_PROVIDER_TYPE = Symbol.for('react.provider');
51
+ const REACT_CONTEXT_TYPE = Symbol.for('react.context');
52
+ const REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');
53
+ const REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');
54
+ const REACT_CLIENT_REFERENCE_TYPE = Symbol.for('react.client.reference');
55
+
56
+ const REACT_COMPONENT_TYPE_MARKERS: ReadonlySet<symbol> = new Set([
57
+ REACT_FORWARD_REF_TYPE,
58
+ REACT_MEMO_TYPE,
59
+ REACT_LAZY_TYPE,
60
+ REACT_PROVIDER_TYPE,
61
+ REACT_CONTEXT_TYPE,
62
+ REACT_SUSPENSE_TYPE,
63
+ REACT_SUSPENSE_LIST_TYPE,
64
+ REACT_CLIENT_REFERENCE_TYPE,
65
+ ]);
31
66
 
32
- /** Function that creates a React element. Matches React.createElement signature. */
67
+ /**
68
+ * Validate that a loaded module's `default` export is something React
69
+ * accepts as the first argument to `createElement` — i.e. a valid component
70
+ * type. React doesn't export `isValidElementType` (only `isValidElement`,
71
+ * which checks for *elements*, not *component types*), so this mirrors
72
+ * React's internal check:
73
+ *
74
+ * - functions → function or class components
75
+ * - objects with a `$$typeof` matching one of React's known component
76
+ * markers → exotic components (`memo`, `forwardRef`, `lazy`, context,
77
+ * suspense, client references via `@vitejs/plugin-rsc`)
78
+ *
79
+ * Strings (HTML tag names) are valid for `createElement` but never appear
80
+ * as a route module's default export, so they're not recognized here.
81
+ *
82
+ * Anything else (numbers, plain config objects, JSON, etc.) is rejected so
83
+ * the boundary wrapper is skipped rather than crashing inside React.
84
+ */
85
+ function isValidElementType(value: unknown): value is LoadedComponent {
86
+ if (typeof value === 'function') return true;
87
+ if (typeof value !== 'object' || value === null) return false;
88
+ const marker = (value as { $$typeof?: unknown }).$$typeof;
89
+ return typeof marker === 'symbol' && REACT_COMPONENT_TYPE_MARKERS.has(marker);
90
+ }
91
+
92
+ /**
93
+ * Function that creates a React element. Matches React.createElement signature.
94
+ *
95
+ * `props` is typed as `object | null` rather than `Record<string, unknown>` so
96
+ * that interface types with known keys (e.g. `AccessGateProps`,
97
+ * `ErrorBoundaryProps`) flow through without an explicit index-signature cast.
98
+ */
33
99
  export type CreateElement = (
34
100
  type: unknown,
35
- props: Record<string, unknown> | null,
101
+ props: object | null,
36
102
  ...children: unknown[]
37
- ) => ReactElement;
103
+ ) => ReactNode;
38
104
 
39
105
  /**
40
106
  * Resolved slot content for a layout.
41
107
  * Key is slot name (without @), value is the element tree for that slot.
42
108
  */
43
- export type SlotElements = Map<string, ReactElement>;
109
+ export type SlotElements = Map<string, ReactNode>;
44
110
 
45
111
  /** Configuration for the tree builder. */
46
112
  export interface TreeBuilderConfig {
47
113
  /** The matched segment chain from root to leaf. */
48
114
  segments: SegmentNode[];
49
- /** Route params extracted by the matcher (catch-all segments produce string[]). */
50
- params: Record<string, string | string[]>;
51
- /** Parsed search params (typed or URLSearchParams). */
52
- searchParams: unknown;
53
115
  /** Loads a route file's module. */
54
116
  loadModule: ModuleLoader;
55
117
  /** React.createElement or equivalent. */
@@ -77,9 +139,7 @@ export interface TreeBuilderConfig {
77
139
  * (backward compat for tree-builder.ts which doesn't run a pre-render pass).
78
140
  */
79
141
  export interface AccessGateProps {
80
- accessFn: (ctx: { params: Record<string, string | string[]>; searchParams: unknown }) => unknown;
81
- params: Record<string, string | string[]>;
82
- searchParams: unknown;
142
+ accessFn: () => unknown;
83
143
  /** Segment name for dev logging (e.g. "authenticated", "dashboard"). */
84
144
  segmentName?: string;
85
145
  /**
@@ -92,30 +152,54 @@ export interface AccessGateProps {
92
152
  | 'pass'
93
153
  | import('./primitives.js').DenySignal
94
154
  | import('./primitives.js').RedirectSignal;
95
- children: ReactElement;
155
+ /**
156
+ * Deny page fallback chain. When provided and a DenySignal is caught,
157
+ * AccessGate renders the matching deny page in-tree instead of throwing.
158
+ * This prevents the error from reaching React Flight, eliminating the
159
+ * second render pass. See TIM-666.
160
+ */
161
+ denyPages?: import('./deny-boundary.js').DenyPageEntry[];
162
+ children: ReactNode;
96
163
  }
97
164
 
98
165
  /**
99
166
  * Framework-injected slot access gate component.
100
167
  * On denial, renders denied.tsx → default.tsx → null instead of failing the page.
168
+ *
169
+ * DeniedComponent is passed instead of a pre-built element so that
170
+ * SlotAccessGate can forward DenySignal.data as dangerouslyPassData
171
+ * and slotName as the slot prop after catching the signal.
101
172
  */
102
173
  export interface SlotAccessGateProps {
103
- accessFn: (ctx: { params: Record<string, string | string[]>; searchParams: unknown }) => unknown;
104
- params: Record<string, string | string[]>;
105
- searchParams: unknown;
106
- deniedFallback: ReactElement | null;
107
- defaultFallback: ReactElement | null;
108
- children: ReactElement;
174
+ accessFn: () => unknown;
175
+ /** The denied.tsx component (not a pre-built element). null if no denied.tsx exists. */
176
+ DeniedComponent: LoadedComponent | null;
177
+ /** Slot directory name without @ prefix (e.g. "admin", "sidebar"). */
178
+ slotName: string;
179
+ /** createElement function for building elements dynamically. */
180
+ createElement: CreateElement;
181
+ defaultFallback: ReactNode;
182
+ children: ReactNode;
109
183
  }
110
184
 
111
185
  /**
112
186
  * Framework-injected error boundary wrapper.
113
187
  * Wraps content with status-code error boundary handling.
188
+ *
189
+ * Field types must agree with `TimberErrorBoundaryProps` in
190
+ * `client/error-boundary.tsx`. The two are kept structurally compatible by
191
+ * convention rather than by direct type import — tree-builder.ts is the
192
+ * server-side construction site and may not import types from a 'use client'
193
+ * module to keep the server barrel free of client coupling.
114
194
  */
115
195
  export interface ErrorBoundaryProps {
116
- fallbackComponent: ReactElement | null;
196
+ /** The component to render when an error is caught (TSX status files). */
197
+ fallbackComponent?: LoadedComponent;
198
+ /** Pre-rendered fallback element (MDX status files — see TIM-503). */
199
+ fallbackElement?: ReactNode;
200
+ /** Status code filter: 400 = any 4xx, 500 = any 5xx, specific number = exact match. */
117
201
  status?: number;
118
- children: ReactElement;
202
+ children: ReactNode;
119
203
  }
120
204
 
121
205
  // ─── Tree Builder ────────────────────────────────────────────────────────────
@@ -124,8 +208,11 @@ export interface ErrorBoundaryProps {
124
208
  * Result of building the element tree.
125
209
  */
126
210
  export interface TreeBuildResult {
127
- /** The root React element tree ready for renderToReadableStream. */
128
- tree: ReactElement;
211
+ /**
212
+ * The root React element tree ready for renderToReadableStream.
213
+ * `null` for API routes (route.ts), which don't render a React tree.
214
+ */
215
+ tree: ReactNode;
129
216
  /** Whether the leaf segment is a route.ts (API endpoint) rather than a page. */
130
217
  isApiRoute: boolean;
131
218
  }
@@ -143,8 +230,7 @@ export interface TreeBuildResult {
143
230
  * Parallel slots are resolved at each layout level and composed as named props.
144
231
  */
145
232
  export async function buildElementTree(config: TreeBuilderConfig): Promise<TreeBuildResult> {
146
- const { segments, params, searchParams, loadModule, createElement, errorBoundaryComponent } =
147
- config;
233
+ const { segments, loadModule, createElement, errorBoundaryComponent } = config;
148
234
 
149
235
  if (segments.length === 0) {
150
236
  throw new Error('[timber] buildElementTree: empty segment chain');
@@ -159,7 +245,7 @@ export async function buildElementTree(config: TreeBuilderConfig): Promise<TreeB
159
245
 
160
246
  // Start with the page component
161
247
  const pageModule = leaf.page ? await loadModule(leaf.page) : null;
162
- const PageComponent = pageModule?.default as ((...args: unknown[]) => ReactElement) | undefined;
248
+ const PageComponent = pageModule?.default as LoadedComponent | undefined;
163
249
 
164
250
  if (!PageComponent) {
165
251
  throw new Error(
@@ -168,8 +254,8 @@ export async function buildElementTree(config: TreeBuilderConfig): Promise<TreeB
168
254
  );
169
255
  }
170
256
 
171
- // Build the page element with params and searchParams props
172
- let element: ReactElement = createElement(PageComponent, { params, searchParams });
257
+ // Build the page element — params are accessed via getSegmentParams() from ALS
258
+ let element: ReactNode = createElement(PageComponent, {});
173
259
 
174
260
  // Build tree bottom-up: wrap page, then walk segments from leaf to root
175
261
  for (let i = segments.length - 1; i >= 0; i--) {
@@ -190,8 +276,6 @@ export async function buildElementTree(config: TreeBuilderConfig): Promise<TreeB
190
276
  const accessFn = accessModule.default as AccessGateProps['accessFn'];
191
277
  element = createElement('timber:access-gate', {
192
278
  accessFn,
193
- params,
194
- searchParams,
195
279
  segmentName: segment.segmentName,
196
280
  children: element,
197
281
  } satisfies AccessGateProps);
@@ -200,19 +284,17 @@ export async function buildElementTree(config: TreeBuilderConfig): Promise<TreeB
200
284
  // Wrap in layout (if exists and not the leaf's page-level wrapping)
201
285
  if (segment.layout) {
202
286
  const layoutModule = await loadModule(segment.layout);
203
- const LayoutComponent = layoutModule.default as
204
- | ((...args: unknown[]) => ReactElement)
205
- | undefined;
287
+ const LayoutComponent = layoutModule.default as LoadedComponent | undefined;
206
288
 
207
289
  if (LayoutComponent) {
208
290
  // Resolve parallel slots for this layout
209
- const slotProps: Record<string, ReactElement> = {};
210
- if (segment.slots.size > 0) {
211
- for (const [slotName, slotNode] of segment.slots) {
291
+ const slotProps: Record<string, ReactNode> = {};
292
+ const slotNames = Object.keys(segment.slots);
293
+ if (slotNames.length > 0) {
294
+ for (const slotName of slotNames) {
295
+ const slotNode = segment.slots[slotName]!;
212
296
  slotProps[slotName] = await buildSlotElement(
213
297
  slotNode,
214
- params,
215
- searchParams,
216
298
  loadModule,
217
299
  createElement,
218
300
  errorBoundaryComponent
@@ -222,8 +304,6 @@ export async function buildElementTree(config: TreeBuilderConfig): Promise<TreeB
222
304
 
223
305
  element = createElement(LayoutComponent, {
224
306
  ...slotProps,
225
- params,
226
- searchParams,
227
307
  children: element,
228
308
  });
229
309
  }
@@ -243,28 +323,24 @@ export async function buildElementTree(config: TreeBuilderConfig): Promise<TreeB
243
323
  */
244
324
  async function buildSlotElement(
245
325
  slotNode: SegmentNode,
246
- params: Record<string, string | string[]>,
247
- searchParams: unknown,
248
326
  loadModule: ModuleLoader,
249
327
  createElement: CreateElement,
250
328
  errorBoundaryComponent: unknown
251
- ): Promise<ReactElement> {
329
+ ): Promise<ReactNode> {
252
330
  // Load slot page
253
331
  const pageModule = slotNode.page ? await loadModule(slotNode.page) : null;
254
- const PageComponent = pageModule?.default as ((...args: unknown[]) => ReactElement) | undefined;
332
+ const PageComponent = pageModule?.default as LoadedComponent | undefined;
255
333
 
256
334
  // Load default.tsx fallback
257
335
  const defaultModule = slotNode.default ? await loadModule(slotNode.default) : null;
258
- const DefaultComponent = defaultModule?.default as
259
- | ((...args: unknown[]) => ReactElement)
260
- | undefined;
336
+ const DefaultComponent = defaultModule?.default as LoadedComponent | undefined;
261
337
 
262
338
  // If no page, render default.tsx or null
263
339
  if (!PageComponent) {
264
- return DefaultComponent ? createElement(DefaultComponent, { params, searchParams }) : null;
340
+ return DefaultComponent ? createElement(DefaultComponent, {}) : null;
265
341
  }
266
342
 
267
- let element: ReactElement = createElement(PageComponent, { params, searchParams });
343
+ let element: ReactNode = createElement(PageComponent, {});
268
344
 
269
345
  // Wrap in error boundaries
270
346
  element = await wrapWithErrorBoundaries(
@@ -280,27 +356,18 @@ async function buildSlotElement(
280
356
  const accessModule = await loadModule(slotNode.access);
281
357
  const accessFn = accessModule.default as SlotAccessGateProps['accessFn'];
282
358
 
283
- // Load denied.tsx
359
+ // Load denied.tsx — pass component (not pre-built element) so
360
+ // SlotAccessGate can forward DenySignal.data dynamically. See TIM-488.
284
361
  const deniedModule = slotNode.denied ? await loadModule(slotNode.denied) : null;
285
- const DeniedComponent = deniedModule?.default as
286
- | ((...args: unknown[]) => ReactElement)
287
- | undefined;
288
-
289
- const deniedFallback = DeniedComponent
290
- ? createElement(DeniedComponent, {
291
- slot: slotNode.segmentName.replace(/^@/, ''),
292
- dangerouslyPassData: undefined,
293
- })
294
- : null;
295
- const defaultFallback = DefaultComponent
296
- ? createElement(DefaultComponent, { params, searchParams })
297
- : null;
362
+ const DeniedComponent = (deniedModule?.default as LoadedComponent | undefined) ?? null;
363
+
364
+ const defaultFallback = DefaultComponent ? createElement(DefaultComponent, {}) : null;
298
365
 
299
366
  element = createElement('timber:slot-access-gate', {
300
367
  accessFn,
301
- params,
302
- searchParams,
303
- deniedFallback,
368
+ DeniedComponent,
369
+ slotName: slotNode.segmentName.replace(/^@/, ''),
370
+ createElement,
304
371
  defaultFallback,
305
372
  children: element,
306
373
  } satisfies SlotAccessGateProps);
@@ -311,6 +378,19 @@ async function buildSlotElement(
311
378
 
312
379
  // ─── Error Boundary Wrapping ─────────────────────────────────────────────────
313
380
 
381
+ /** MDX/markdown extensions — these are server components that cannot be passed as function props. */
382
+ const MDX_EXTENSIONS = new Set(['mdx', 'md']);
383
+
384
+ /**
385
+ * Check if a route file is an MDX/markdown file based on its extension.
386
+ * MDX components are server components by default and cannot cross the
387
+ * RSC→client boundary as function props. They must be pre-rendered as
388
+ * elements and passed as fallbackElement instead of fallbackComponent.
389
+ */
390
+ function isMdxFile(file: RouteFile): boolean {
391
+ return MDX_EXTENSIONS.has(file.extension);
392
+ }
393
+
314
394
  /**
315
395
  * Wrap an element with error boundaries from a segment's status-code files.
316
396
  *
@@ -320,61 +400,93 @@ async function buildSlotElement(
320
400
  * 3. error.tsx (general error boundary)
321
401
  *
322
402
  * This creates the fallback chain described in design/10-error-handling.md.
403
+ *
404
+ * MDX status files are server components and cannot be passed as function
405
+ * props to TimberErrorBoundary (a 'use client' component). Instead, they
406
+ * are pre-rendered as elements and passed as fallbackElement. The error
407
+ * boundary renders the element directly when an error is caught.
408
+ * See TIM-503.
323
409
  */
324
410
  async function wrapWithErrorBoundaries(
325
411
  segment: SegmentNode,
326
- element: ReactElement,
412
+ element: ReactNode,
327
413
  loadModule: ModuleLoader,
328
414
  createElement: CreateElement,
329
415
  errorBoundaryComponent: unknown
330
- ): Promise<ReactElement> {
416
+ ): Promise<ReactNode> {
331
417
  // Wrapping is applied inside-out. The last wrap call produces the outermost boundary.
332
418
  // Order: specific status → category → error.tsx (outermost)
333
419
 
334
420
  if (segment.statusFiles) {
335
421
  // Wrap with specific status files (innermost — highest priority at runtime)
336
- for (const [key, file] of segment.statusFiles) {
422
+ for (const [key, file] of Object.entries(segment.statusFiles)) {
337
423
  if (key !== '4xx' && key !== '5xx') {
338
424
  const status = parseInt(key, 10);
339
425
  if (!isNaN(status)) {
340
426
  const mod = await loadModule(file);
341
- const Component = mod.default;
427
+ // mod.default is `unknown` — narrow to a component reference.
428
+ // `isValidElementType` accepts memo/forwardRef objects in addition to
429
+ // bare functions; non-component values fall through.
430
+ const Component = isValidElementType(mod.default) ? mod.default : null;
342
431
  if (Component) {
343
- element = createElement(errorBoundaryComponent, {
344
- fallbackComponent: Component,
345
- status,
346
- children: element,
347
- } satisfies ErrorBoundaryProps);
432
+ const boundaryProps: ErrorBoundaryProps = isMdxFile(file)
433
+ ? {
434
+ fallbackElement: createElement(Component, { status }),
435
+ status,
436
+ children: element,
437
+ }
438
+ : {
439
+ fallbackComponent: Component,
440
+ status,
441
+ children: element,
442
+ };
443
+ element = createElement(errorBoundaryComponent, boundaryProps);
348
444
  }
349
445
  }
350
446
  }
351
447
  }
352
448
 
353
449
  // Wrap with category catch-alls (4xx.tsx, 5xx.tsx)
354
- for (const [key, file] of segment.statusFiles) {
450
+ for (const [key, file] of Object.entries(segment.statusFiles)) {
355
451
  if (key === '4xx' || key === '5xx') {
356
452
  const mod = await loadModule(file);
357
- const Component = mod.default;
453
+ const Component = isValidElementType(mod.default) ? mod.default : null;
358
454
  if (Component) {
359
- element = createElement(errorBoundaryComponent, {
360
- fallbackComponent: Component,
361
- status: key === '4xx' ? 400 : 500, // category marker
362
- children: element,
363
- } satisfies ErrorBoundaryProps);
455
+ const categoryStatus = key === '4xx' ? 400 : 500;
456
+ const boundaryProps: ErrorBoundaryProps = isMdxFile(file)
457
+ ? {
458
+ fallbackElement: createElement(Component, {}),
459
+ status: categoryStatus,
460
+ children: element,
461
+ }
462
+ : {
463
+ fallbackComponent: Component,
464
+ status: categoryStatus,
465
+ children: element,
466
+ };
467
+ element = createElement(errorBoundaryComponent, boundaryProps);
364
468
  }
365
469
  }
366
470
  }
367
471
  }
368
472
 
369
473
  // Wrap with error.tsx (outermost — catches anything not matched by status files)
474
+ // Note: error.tsx/error.mdx receives { error, digest, reset } props.
475
+ // MDX error files are pre-rendered without those props (they're static content).
370
476
  if (segment.error) {
371
477
  const errorModule = await loadModule(segment.error);
372
- const ErrorComponent = errorModule.default;
478
+ const ErrorComponent = isValidElementType(errorModule.default) ? errorModule.default : null;
373
479
  if (ErrorComponent) {
374
- element = createElement(errorBoundaryComponent, {
375
- fallbackComponent: ErrorComponent,
376
- children: element,
377
- } satisfies ErrorBoundaryProps);
480
+ const boundaryProps: ErrorBoundaryProps = isMdxFile(segment.error)
481
+ ? {
482
+ fallbackElement: createElement(ErrorComponent, {}),
483
+ children: element,
484
+ }
485
+ : {
486
+ fallbackComponent: ErrorComponent,
487
+ children: element,
488
+ };
489
+ element = createElement(errorBoundaryComponent, boundaryProps);
378
490
  }
379
491
  }
380
492