@timber-js/app 0.2.0-alpha.17 → 0.2.0-alpha.171

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 (1026) hide show
  1. package/LICENSE +8 -0
  2. package/agent-skill.md +344 -0
  3. package/dist/_chunks/actions-O_LsyCE4.js +317 -0
  4. package/dist/_chunks/actions-O_LsyCE4.js.map +1 -0
  5. package/dist/_chunks/build-output-helper-DF5uScqS.js +158 -0
  6. package/dist/_chunks/build-output-helper-DF5uScqS.js.map +1 -0
  7. package/dist/_chunks/cache-api-B-lhk9p4.js +1202 -0
  8. package/dist/_chunks/cache-api-B-lhk9p4.js.map +1 -0
  9. package/dist/_chunks/canonicalize-Du3o_ptW.js +247 -0
  10. package/dist/_chunks/canonicalize-Du3o_ptW.js.map +1 -0
  11. package/dist/_chunks/cli-schema-sync-B5FDplGI.js +688 -0
  12. package/dist/_chunks/cli-schema-sync-B5FDplGI.js.map +1 -0
  13. package/dist/_chunks/cloudflare-AHoWYTYr.js +1188 -0
  14. package/dist/_chunks/cloudflare-AHoWYTYr.js.map +1 -0
  15. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  16. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  17. package/dist/_chunks/define-COtkxMRT.js +191 -0
  18. package/dist/_chunks/define-COtkxMRT.js.map +1 -0
  19. package/dist/_chunks/define-c4au4I9R.js +82 -0
  20. package/dist/_chunks/define-c4au4I9R.js.map +1 -0
  21. package/dist/_chunks/dist-BA3u1z3W.js +423 -0
  22. package/dist/_chunks/dist-BA3u1z3W.js.map +1 -0
  23. package/dist/_chunks/fast-hash-D6hIVt1Y.js +36 -0
  24. package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +1 -0
  25. package/dist/_chunks/format-CfwjgPz9.js +14 -0
  26. package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
  27. package/dist/_chunks/href-validation-CMc5JRls.js +141 -0
  28. package/dist/_chunks/href-validation-CMc5JRls.js.map +1 -0
  29. package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
  30. package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
  31. package/dist/_chunks/logger-AWfuX-KJ.js +1468 -0
  32. package/dist/_chunks/logger-AWfuX-KJ.js.map +1 -0
  33. package/dist/_chunks/navigation-root-bUDZLw74.js +124 -0
  34. package/dist/_chunks/navigation-root-bUDZLw74.js.map +1 -0
  35. package/dist/_chunks/plugin-context---kTF5v8.js +315 -0
  36. package/dist/_chunks/plugin-context---kTF5v8.js.map +1 -0
  37. package/dist/_chunks/registry-DbJPKoBp.js +20 -0
  38. package/dist/_chunks/registry-DbJPKoBp.js.map +1 -0
  39. package/dist/_chunks/resolve-schema-Dz3fcFUo.js +50 -0
  40. package/dist/_chunks/resolve-schema-Dz3fcFUo.js.map +1 -0
  41. package/dist/_chunks/router-ref-CtmF-aPv.js +28 -0
  42. package/dist/_chunks/router-ref-CtmF-aPv.js.map +1 -0
  43. package/dist/_chunks/schema-bridge-DT_Tn0Xf.js +119 -0
  44. package/dist/_chunks/schema-bridge-DT_Tn0Xf.js.map +1 -0
  45. package/dist/_chunks/segment-classify-Byy425ng.js +176 -0
  46. package/dist/_chunks/segment-classify-Byy425ng.js.map +1 -0
  47. package/dist/_chunks/segment-context-ZDnXDkbz.js +34 -0
  48. package/dist/_chunks/segment-context-ZDnXDkbz.js.map +1 -0
  49. package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
  50. package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
  51. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BOWsq18U.js} +1 -1
  52. package/dist/_chunks/ssr-data-BOWsq18U.js.map +1 -0
  53. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-DFvWd-EA.js} +71 -26
  54. package/dist/_chunks/use-query-states-DFvWd-EA.js.map +1 -0
  55. package/dist/_chunks/use-segment-params-D1CzlgBo.js +151 -0
  56. package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +1 -0
  57. package/dist/_chunks/walkers-DCoE-LJf.js +1002 -0
  58. package/dist/_chunks/walkers-DCoE-LJf.js.map +1 -0
  59. package/dist/adapters/build-output-helper.d.ts +29 -0
  60. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  61. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  62. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  63. package/dist/adapters/cloudflare-dev.js +73 -0
  64. package/dist/adapters/cloudflare-dev.js.map +1 -0
  65. package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
  66. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  67. package/dist/adapters/cloudflare-kv-cache.js +124 -0
  68. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  69. package/dist/adapters/cloudflare.d.ts +189 -21
  70. package/dist/adapters/cloudflare.d.ts.map +1 -1
  71. package/dist/adapters/cloudflare.js +2 -188
  72. package/dist/adapters/compress-module.d.ts +5 -4
  73. package/dist/adapters/compress-module.d.ts.map +1 -1
  74. package/dist/adapters/nitro.d.ts +41 -3
  75. package/dist/adapters/nitro.d.ts.map +1 -1
  76. package/dist/adapters/nitro.js +224 -172
  77. package/dist/adapters/nitro.js.map +1 -1
  78. package/dist/adapters/shared.d.ts +6 -0
  79. package/dist/adapters/shared.d.ts.map +1 -0
  80. package/dist/adapters/types.d.ts +2 -6
  81. package/dist/adapters/types.d.ts.map +1 -1
  82. package/dist/cache/cache-api.d.ts +48 -0
  83. package/dist/cache/cache-api.d.ts.map +1 -0
  84. package/dist/cache/handler-store.d.ts +33 -0
  85. package/dist/cache/handler-store.d.ts.map +1 -0
  86. package/dist/cache/index.d.ts +31 -8
  87. package/dist/cache/index.d.ts.map +1 -1
  88. package/dist/cache/index.js +3 -326
  89. package/dist/cache/invalidation-epoch.d.ts +43 -0
  90. package/dist/cache/invalidation-epoch.d.ts.map +1 -0
  91. package/dist/cache/json-lossy-check.d.ts +11 -0
  92. package/dist/cache/json-lossy-check.d.ts.map +1 -0
  93. package/dist/cache/redis-handler.d.ts +140 -8
  94. package/dist/cache/redis-handler.d.ts.map +1 -1
  95. package/dist/cache/singleflight.d.ts +19 -2
  96. package/dist/cache/singleflight.d.ts.map +1 -1
  97. package/dist/cache/sizeof.d.ts +22 -0
  98. package/dist/cache/sizeof.d.ts.map +1 -0
  99. package/dist/cache/stable-stringify.d.ts +9 -0
  100. package/dist/cache/stable-stringify.d.ts.map +1 -1
  101. package/dist/cache/store.d.ts +53 -0
  102. package/dist/cache/store.d.ts.map +1 -0
  103. package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
  104. package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
  105. package/dist/cache/stores/cloudflare-kv.js +29 -0
  106. package/dist/cache/stores/cloudflare-kv.js.map +1 -0
  107. package/dist/cache/stores/memory.d.ts +42 -0
  108. package/dist/cache/stores/memory.d.ts.map +1 -0
  109. package/dist/cache/stores/memory.js +90 -0
  110. package/dist/cache/stores/memory.js.map +1 -0
  111. package/dist/cache/stores/redis.d.ts +69 -0
  112. package/dist/cache/stores/redis.d.ts.map +1 -0
  113. package/dist/cache/stores/redis.js +35 -0
  114. package/dist/cache/stores/redis.js.map +1 -0
  115. package/dist/cache/stores/vercel.d.ts +36 -0
  116. package/dist/cache/stores/vercel.d.ts.map +1 -0
  117. package/dist/cache/stores/vercel.js +33 -0
  118. package/dist/cache/stores/vercel.js.map +1 -0
  119. package/dist/cache/tag-aware-handler.d.ts +52 -0
  120. package/dist/cache/tag-aware-handler.d.ts.map +1 -0
  121. package/dist/cache/timber-cache.d.ts +20 -10
  122. package/dist/cache/timber-cache.d.ts.map +1 -1
  123. package/dist/cdn/cloudflare-purge.d.ts +23 -0
  124. package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
  125. package/dist/cdn/fastly-purge.d.ts +25 -0
  126. package/dist/cdn/fastly-purge.d.ts.map +1 -0
  127. package/dist/cdn/headers.d.ts +97 -0
  128. package/dist/cdn/headers.d.ts.map +1 -0
  129. package/dist/cdn/index.d.ts +5 -0
  130. package/dist/cdn/index.d.ts.map +1 -0
  131. package/dist/cdn/purge-store.d.ts +23 -0
  132. package/dist/cdn/purge-store.d.ts.map +1 -0
  133. package/dist/cdn/workers-cache-purge.d.ts +16 -0
  134. package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
  135. package/dist/cli-schema-sync.d.ts +59 -0
  136. package/dist/cli-schema-sync.d.ts.map +1 -0
  137. package/dist/cli.d.ts +34 -2
  138. package/dist/cli.d.ts.map +1 -1
  139. package/dist/cli.js +109 -34
  140. package/dist/cli.js.map +1 -1
  141. package/dist/client/browser-dev.d.ts +37 -1
  142. package/dist/client/browser-dev.d.ts.map +1 -1
  143. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  144. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  145. package/dist/client/browser-entry/hmr.d.ts +21 -0
  146. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  147. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  148. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  149. package/dist/client/browser-entry/index.d.ts +29 -0
  150. package/dist/client/browser-entry/index.d.ts.map +1 -0
  151. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  152. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  153. package/dist/client/browser-entry/router-init.d.ts +27 -0
  154. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  155. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  156. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  157. package/dist/client/browser-entry/scroll.d.ts +28 -0
  158. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  159. package/dist/client/child-segment-context.d.ts +22 -0
  160. package/dist/client/child-segment-context.d.ts.map +1 -0
  161. package/dist/client/child-segment-outlet.d.ts +18 -0
  162. package/dist/client/child-segment-outlet.d.ts.map +1 -0
  163. package/dist/client/child-segment-provider.d.ts +21 -0
  164. package/dist/client/child-segment-provider.d.ts.map +1 -0
  165. package/dist/client/error-boundary.d.ts +12 -5
  166. package/dist/client/error-boundary.d.ts.map +1 -1
  167. package/dist/client/error-boundary.js +47 -10
  168. package/dist/client/error-boundary.js.map +1 -1
  169. package/dist/client/error-reconstituter.d.ts +61 -0
  170. package/dist/client/error-reconstituter.d.ts.map +1 -0
  171. package/dist/client/form.d.ts +16 -27
  172. package/dist/client/form.d.ts.map +1 -1
  173. package/dist/client/history.d.ts +21 -6
  174. package/dist/client/history.d.ts.map +1 -1
  175. package/dist/client/index.d.ts +10 -24
  176. package/dist/client/index.d.ts.map +1 -1
  177. package/dist/client/index.js +185 -1134
  178. package/dist/client/index.js.map +1 -1
  179. package/dist/client/internal.d.ts +19 -0
  180. package/dist/client/internal.d.ts.map +1 -0
  181. package/dist/client/internal.js +849 -0
  182. package/dist/client/internal.js.map +1 -0
  183. package/dist/client/link.d.ts +69 -60
  184. package/dist/client/link.d.ts.map +1 -1
  185. package/dist/client/navigation-api.d.ts +120 -0
  186. package/dist/client/navigation-api.d.ts.map +1 -0
  187. package/dist/client/navigation-context.d.ts +3 -2
  188. package/dist/client/navigation-context.d.ts.map +1 -1
  189. package/dist/client/navigation-root.d.ts +119 -0
  190. package/dist/client/navigation-root.d.ts.map +1 -0
  191. package/dist/client/nuqs-adapter.d.ts +1 -1
  192. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  193. package/dist/client/router-ref.d.ts +1 -1
  194. package/dist/client/router.d.ts +93 -14
  195. package/dist/client/router.d.ts.map +1 -1
  196. package/dist/client/rsc-fetch.d.ts +47 -14
  197. package/dist/client/rsc-fetch.d.ts.map +1 -1
  198. package/dist/client/segment-cache.d.ts +4 -4
  199. package/dist/client/segment-cache.d.ts.map +1 -1
  200. package/dist/client/segment-outlet.d.ts +49 -0
  201. package/dist/client/segment-outlet.d.ts.map +1 -0
  202. package/dist/client/segment-update-context.d.ts +21 -0
  203. package/dist/client/segment-update-context.d.ts.map +1 -0
  204. package/dist/client/shallow-url.d.ts +10 -0
  205. package/dist/client/shallow-url.d.ts.map +1 -0
  206. package/dist/client/slot-context.d.ts +29 -0
  207. package/dist/client/slot-context.d.ts.map +1 -0
  208. package/dist/client/slot-outlet.d.ts +16 -0
  209. package/dist/client/slot-outlet.d.ts.map +1 -0
  210. package/dist/client/slot-provider.d.ts +20 -0
  211. package/dist/client/slot-provider.d.ts.map +1 -0
  212. package/dist/client/ssr-data.d.ts +13 -4
  213. package/dist/client/ssr-data.d.ts.map +1 -1
  214. package/dist/client/state.d.ts +1 -1
  215. package/dist/client/top-loader.d.ts +5 -5
  216. package/dist/client/top-loader.d.ts.map +1 -1
  217. package/dist/client/use-cookie.d.ts +12 -0
  218. package/dist/client/use-cookie.d.ts.map +1 -1
  219. package/dist/client/use-link-status.d.ts +5 -5
  220. package/dist/client/use-link-status.d.ts.map +1 -1
  221. package/dist/client/use-pathname.d.ts.map +1 -1
  222. package/dist/client/use-pending-navigation.d.ts +23 -0
  223. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  224. package/dist/client/use-query-states.d.ts +1 -1
  225. package/dist/client/use-query-states.d.ts.map +1 -1
  226. package/dist/client/use-router.d.ts +1 -1
  227. package/dist/client/use-router.d.ts.map +1 -1
  228. package/dist/client/use-search-params.d.ts +12 -5
  229. package/dist/client/use-search-params.d.ts.map +1 -1
  230. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  231. package/dist/client/use-segment-params.d.ts.map +1 -0
  232. package/dist/codec.d.ts +69 -0
  233. package/dist/codec.d.ts.map +1 -0
  234. package/dist/codec.js +76 -0
  235. package/dist/codec.js.map +1 -0
  236. package/dist/config-types.d.ts +284 -0
  237. package/dist/config-types.d.ts.map +1 -0
  238. package/dist/config-validation.d.ts +51 -0
  239. package/dist/config-validation.d.ts.map +1 -0
  240. package/dist/content/index.d.ts +1 -10
  241. package/dist/content/index.d.ts.map +1 -1
  242. package/dist/content/index.js +0 -2
  243. package/dist/cookies/define-cookie.d.ts +58 -25
  244. package/dist/cookies/define-cookie.d.ts.map +1 -1
  245. package/dist/cookies/index.d.ts +2 -1
  246. package/dist/cookies/index.d.ts.map +1 -1
  247. package/dist/cookies/index.js +257 -36
  248. package/dist/cookies/index.js.map +1 -1
  249. package/dist/cookies/json-cookie.d.ts +64 -0
  250. package/dist/cookies/json-cookie.d.ts.map +1 -0
  251. package/dist/cookies/validation.d.ts +34 -0
  252. package/dist/cookies/validation.d.ts.map +1 -0
  253. package/dist/dev-tools/404-page.d.ts +50 -0
  254. package/dist/dev-tools/404-page.d.ts.map +1 -0
  255. package/dist/dev-tools/browser-logs.d.ts +40 -0
  256. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  257. package/dist/dev-tools/dev-page-shell.d.ts +78 -0
  258. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  259. package/dist/dev-tools/error-page.d.ts +32 -0
  260. package/dist/dev-tools/error-page.d.ts.map +1 -0
  261. package/dist/dev-tools/holding-server.d.ts +54 -0
  262. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  263. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  264. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  265. package/dist/dev-tools/index.d.ts +31 -0
  266. package/dist/dev-tools/index.d.ts.map +1 -0
  267. package/dist/dev-tools/instrumentation.d.ts +59 -0
  268. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  269. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  270. package/dist/dev-tools/logger.d.ts.map +1 -0
  271. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
  272. package/dist/dev-tools/logs.d.ts.map +1 -0
  273. package/dist/dev-tools/overlay.d.ts +91 -0
  274. package/dist/dev-tools/overlay.d.ts.map +1 -0
  275. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  276. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  277. package/dist/dev-tools/terminal.d.ts +28 -0
  278. package/dist/dev-tools/terminal.d.ts.map +1 -0
  279. package/dist/fonts/ast-walk.d.ts +68 -0
  280. package/dist/fonts/ast-walk.d.ts.map +1 -0
  281. package/dist/fonts/ast.d.ts +110 -6
  282. package/dist/fonts/ast.d.ts.map +1 -1
  283. package/dist/fonts/bundle.d.ts +50 -0
  284. package/dist/fonts/bundle.d.ts.map +1 -0
  285. package/dist/fonts/dev-middleware.d.ts +22 -0
  286. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  287. package/dist/fonts/fallbacks.d.ts +0 -7
  288. package/dist/fonts/fallbacks.d.ts.map +1 -1
  289. package/dist/fonts/google.d.ts +4 -2
  290. package/dist/fonts/google.d.ts.map +1 -1
  291. package/dist/fonts/local.d.ts +4 -4
  292. package/dist/fonts/local.d.ts.map +1 -1
  293. package/dist/fonts/paths.d.ts +43 -0
  294. package/dist/fonts/paths.d.ts.map +1 -0
  295. package/dist/fonts/pipeline.d.ts +177 -0
  296. package/dist/fonts/pipeline.d.ts.map +1 -0
  297. package/dist/fonts/transform.d.ts +82 -0
  298. package/dist/fonts/transform.d.ts.map +1 -0
  299. package/dist/fonts/types.d.ts +47 -1
  300. package/dist/fonts/types.d.ts.map +1 -1
  301. package/dist/fonts/virtual-modules.d.ts +77 -0
  302. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  303. package/dist/index.d.ts +46 -180
  304. package/dist/index.d.ts.map +1 -1
  305. package/dist/index.js +8542 -13615
  306. package/dist/index.js.map +1 -1
  307. package/dist/params/codec-registry.d.ts +26 -0
  308. package/dist/params/codec-registry.d.ts.map +1 -0
  309. package/dist/params/define-schema.d.ts +81 -0
  310. package/dist/params/define-schema.d.ts.map +1 -0
  311. package/dist/params/index.d.ts +5 -0
  312. package/dist/params/index.d.ts.map +1 -0
  313. package/dist/params/index.js +34 -0
  314. package/dist/params/index.js.map +1 -0
  315. package/dist/params/resolve-schema.d.ts +34 -0
  316. package/dist/params/resolve-schema.d.ts.map +1 -0
  317. package/dist/plugin-context.d.ts +217 -0
  318. package/dist/plugin-context.d.ts.map +1 -0
  319. package/dist/plugins/adapter-build.d.ts +21 -1
  320. package/dist/plugins/adapter-build.d.ts.map +1 -1
  321. package/dist/plugins/build-manifest.d.ts +7 -3
  322. package/dist/plugins/build-manifest.d.ts.map +1 -1
  323. package/dist/plugins/build-report.d.ts +43 -7
  324. package/dist/plugins/build-report.d.ts.map +1 -1
  325. package/dist/plugins/cache.d.ts +64 -0
  326. package/dist/plugins/cache.d.ts.map +1 -0
  327. package/dist/plugins/callsite-ast.d.ts +117 -0
  328. package/dist/plugins/callsite-ast.d.ts.map +1 -0
  329. package/dist/plugins/callsite-jsx.d.ts +35 -0
  330. package/dist/plugins/callsite-jsx.d.ts.map +1 -0
  331. package/dist/plugins/chunks.d.ts +11 -4
  332. package/dist/plugins/chunks.d.ts.map +1 -1
  333. package/dist/plugins/client-chunks.d.ts +40 -0
  334. package/dist/plugins/client-chunks.d.ts.map +1 -0
  335. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  336. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  337. package/dist/plugins/content.d.ts +1 -1
  338. package/dist/plugins/content.d.ts.map +1 -1
  339. package/dist/plugins/dev-server.d.ts +17 -1
  340. package/dist/plugins/dev-server.d.ts.map +1 -1
  341. package/dist/plugins/entries.d.ts +28 -4
  342. package/dist/plugins/entries.d.ts.map +1 -1
  343. package/dist/plugins/fonts.d.ts +16 -73
  344. package/dist/plugins/fonts.d.ts.map +1 -1
  345. package/dist/plugins/mdx.d.ts +1 -1
  346. package/dist/plugins/mdx.d.ts.map +1 -1
  347. package/dist/plugins/prebuilt-capture.d.ts +60 -0
  348. package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
  349. package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
  350. package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
  351. package/dist/plugins/prebuilt.d.ts +82 -0
  352. package/dist/plugins/prebuilt.d.ts.map +1 -0
  353. package/dist/plugins/prerender-sugar.d.ts +42 -0
  354. package/dist/plugins/prerender-sugar.d.ts.map +1 -0
  355. package/dist/plugins/routing.d.ts +1 -1
  356. package/dist/plugins/routing.d.ts.map +1 -1
  357. package/dist/plugins/server-bundle.d.ts.map +1 -1
  358. package/dist/plugins/shims.d.ts +29 -5
  359. package/dist/plugins/shims.d.ts.map +1 -1
  360. package/dist/plugins/static-build.d.ts +5 -26
  361. package/dist/plugins/static-build.d.ts.map +1 -1
  362. package/dist/routing/codegen-shared.d.ts +67 -0
  363. package/dist/routing/codegen-shared.d.ts.map +1 -0
  364. package/dist/routing/codegen-types.d.ts +64 -0
  365. package/dist/routing/codegen-types.d.ts.map +1 -0
  366. package/dist/routing/codegen.d.ts +7 -2
  367. package/dist/routing/codegen.d.ts.map +1 -1
  368. package/dist/routing/convention-lint.d.ts +41 -0
  369. package/dist/routing/convention-lint.d.ts.map +1 -0
  370. package/dist/routing/export-detect.d.ts +56 -0
  371. package/dist/routing/export-detect.d.ts.map +1 -0
  372. package/dist/routing/file-cache.d.ts +8 -0
  373. package/dist/routing/file-cache.d.ts.map +1 -0
  374. package/dist/routing/index.d.ts +7 -1
  375. package/dist/routing/index.d.ts.map +1 -1
  376. package/dist/routing/index.js +4 -2
  377. package/dist/routing/interception.d.ts +0 -5
  378. package/dist/routing/interception.d.ts.map +1 -1
  379. package/dist/routing/link-codegen.d.ts +90 -0
  380. package/dist/routing/link-codegen.d.ts.map +1 -0
  381. package/dist/routing/manifest-codegen.d.ts +32 -0
  382. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  383. package/dist/routing/scanner.d.ts +1 -10
  384. package/dist/routing/scanner.d.ts.map +1 -1
  385. package/dist/routing/schema-validation.d.ts +35 -0
  386. package/dist/routing/schema-validation.d.ts.map +1 -0
  387. package/dist/routing/segment-classify.d.ts +81 -0
  388. package/dist/routing/segment-classify.d.ts.map +1 -0
  389. package/dist/routing/segment-codegen.d.ts +38 -0
  390. package/dist/routing/segment-codegen.d.ts.map +1 -0
  391. package/dist/routing/types.d.ts +81 -25
  392. package/dist/routing/types.d.ts.map +1 -1
  393. package/dist/routing/walkers.d.ts +51 -0
  394. package/dist/routing/walkers.d.ts.map +1 -0
  395. package/dist/rsc-runtime/rsc.d.ts +1 -1
  396. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  397. package/dist/rsc-runtime/ssr.d.ts +12 -0
  398. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  399. package/dist/schema-bridge.d.ts +91 -0
  400. package/dist/schema-bridge.d.ts.map +1 -0
  401. package/dist/search-params/define.d.ts +188 -0
  402. package/dist/search-params/define.d.ts.map +1 -0
  403. package/dist/search-params/index.d.ts +4 -7
  404. package/dist/search-params/index.d.ts.map +1 -1
  405. package/dist/search-params/index.js +34 -441
  406. package/dist/search-params/index.js.map +1 -1
  407. package/dist/search-params/registry.d.ts +2 -2
  408. package/dist/search-params/registry.d.ts.map +1 -1
  409. package/dist/search-params/wrappers.d.ts +53 -0
  410. package/dist/search-params/wrappers.d.ts.map +1 -0
  411. package/dist/segment-params/define.d.ts +89 -0
  412. package/dist/segment-params/define.d.ts.map +1 -0
  413. package/dist/segment-params/index.d.ts +3 -0
  414. package/dist/segment-params/index.d.ts.map +1 -0
  415. package/dist/segment-params/index.js +2 -0
  416. package/dist/server/access-gate.d.ts +8 -3
  417. package/dist/server/access-gate.d.ts.map +1 -1
  418. package/dist/server/action-client.d.ts +42 -7
  419. package/dist/server/action-client.d.ts.map +1 -1
  420. package/dist/server/action-encryption.d.ts +76 -0
  421. package/dist/server/action-encryption.d.ts.map +1 -0
  422. package/dist/server/action-handler.d.ts +35 -1
  423. package/dist/server/action-handler.d.ts.map +1 -1
  424. package/dist/server/actions.d.ts +6 -30
  425. package/dist/server/actions.d.ts.map +1 -1
  426. package/dist/server/als-registry.d.ts +93 -11
  427. package/dist/server/als-registry.d.ts.map +1 -1
  428. package/dist/server/asset-headers.d.ts +8 -18
  429. package/dist/server/asset-headers.d.ts.map +1 -1
  430. package/dist/server/body-limits.d.ts.map +1 -1
  431. package/dist/server/build-manifest.d.ts +6 -29
  432. package/dist/server/build-manifest.d.ts.map +1 -1
  433. package/dist/server/canonicalize.d.ts +10 -0
  434. package/dist/server/canonicalize.d.ts.map +1 -1
  435. package/dist/server/coalesce-tick.d.ts +40 -0
  436. package/dist/server/coalesce-tick.d.ts.map +1 -0
  437. package/dist/server/cookie-context.d.ts +170 -0
  438. package/dist/server/cookie-context.d.ts.map +1 -0
  439. package/dist/server/cookie-parsing.d.ts +65 -0
  440. package/dist/server/cookie-parsing.d.ts.map +1 -0
  441. package/dist/server/csrf.d.ts +3 -2
  442. package/dist/server/csrf.d.ts.map +1 -1
  443. package/dist/server/default-logger.d.ts +22 -0
  444. package/dist/server/default-logger.d.ts.map +1 -0
  445. package/dist/server/deny-boundary.d.ts +117 -0
  446. package/dist/server/deny-boundary.d.ts.map +1 -0
  447. package/dist/server/deny-renderer.d.ts +2 -2
  448. package/dist/server/deny-renderer.d.ts.map +1 -1
  449. package/dist/server/dev-source-map.d.ts +22 -0
  450. package/dist/server/dev-source-map.d.ts.map +1 -0
  451. package/dist/server/early-hints-sender.d.ts.map +1 -1
  452. package/dist/server/early-hints.d.ts +13 -11
  453. package/dist/server/early-hints.d.ts.map +1 -1
  454. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  455. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  456. package/dist/server/fallback-error.d.ts +12 -7
  457. package/dist/server/fallback-error.d.ts.map +1 -1
  458. package/dist/server/flight-injection-state.d.ts +66 -0
  459. package/dist/server/flight-injection-state.d.ts.map +1 -0
  460. package/dist/server/flight-scripts.d.ts +42 -0
  461. package/dist/server/flight-scripts.d.ts.map +1 -0
  462. package/dist/server/form-data.d.ts +41 -0
  463. package/dist/server/form-data.d.ts.map +1 -1
  464. package/dist/server/html-injector-core.d.ts +242 -0
  465. package/dist/server/html-injector-core.d.ts.map +1 -0
  466. package/dist/server/html-injectors.d.ts +82 -41
  467. package/dist/server/html-injectors.d.ts.map +1 -1
  468. package/dist/server/index.d.ts +11 -47
  469. package/dist/server/index.d.ts.map +1 -1
  470. package/dist/server/index.js +182 -2906
  471. package/dist/server/index.js.map +1 -1
  472. package/dist/server/internal.d.ts +49 -0
  473. package/dist/server/internal.d.ts.map +1 -0
  474. package/dist/server/internal.js +3945 -0
  475. package/dist/server/internal.js.map +1 -0
  476. package/dist/server/logger.d.ts +39 -7
  477. package/dist/server/logger.d.ts.map +1 -1
  478. package/dist/server/metadata-routes.d.ts +47 -11
  479. package/dist/server/metadata-routes.d.ts.map +1 -1
  480. package/dist/server/middleware-runner.d.ts +19 -4
  481. package/dist/server/middleware-runner.d.ts.map +1 -1
  482. package/dist/server/node-stream-transforms.d.ts +119 -0
  483. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  484. package/dist/server/param-coercion.d.ts +54 -0
  485. package/dist/server/param-coercion.d.ts.map +1 -0
  486. package/dist/server/pipeline-helpers.d.ts +95 -0
  487. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  488. package/dist/server/pipeline-interception.d.ts +1 -1
  489. package/dist/server/pipeline-interception.d.ts.map +1 -1
  490. package/dist/server/pipeline-metadata.d.ts +6 -0
  491. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  492. package/dist/server/pipeline-outcome.d.ts +49 -0
  493. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  494. package/dist/server/pipeline-phases.d.ts +59 -0
  495. package/dist/server/pipeline-phases.d.ts.map +1 -0
  496. package/dist/server/pipeline.d.ts +140 -19
  497. package/dist/server/pipeline.d.ts.map +1 -1
  498. package/dist/server/port-resolution.d.ts +117 -0
  499. package/dist/server/port-resolution.d.ts.map +1 -0
  500. package/dist/server/prebuilt/cache-key.d.ts +62 -0
  501. package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
  502. package/dist/server/prebuilt/capture-state.d.ts +57 -0
  503. package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
  504. package/dist/server/prebuilt/key-discipline.d.ts +23 -0
  505. package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
  506. package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
  507. package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
  508. package/dist/server/prebuilt/overlay.d.ts +100 -0
  509. package/dist/server/prebuilt/overlay.d.ts.map +1 -0
  510. package/dist/server/prebuilt/payload-source.d.ts +78 -0
  511. package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
  512. package/dist/server/prebuilt/slots.d.ts +74 -0
  513. package/dist/server/prebuilt/slots.d.ts.map +1 -0
  514. package/dist/server/prebuilt/synthetic-store.d.ts +66 -0
  515. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
  516. package/dist/server/prebuilt-builder.d.ts +120 -0
  517. package/dist/server/prebuilt-builder.d.ts.map +1 -0
  518. package/dist/server/prebuilt-runtime.d.ts +111 -0
  519. package/dist/server/prebuilt-runtime.d.ts.map +1 -0
  520. package/dist/server/primitives.d.ts +88 -43
  521. package/dist/server/primitives.d.ts.map +1 -1
  522. package/dist/server/render-timeout.d.ts +51 -0
  523. package/dist/server/render-timeout.d.ts.map +1 -0
  524. package/dist/server/render-utils.d.ts +25 -0
  525. package/dist/server/render-utils.d.ts.map +1 -0
  526. package/dist/server/request-context.d.ts +62 -107
  527. package/dist/server/request-context.d.ts.map +1 -1
  528. package/dist/server/route-element-builder.d.ts +55 -25
  529. package/dist/server/route-element-builder.d.ts.map +1 -1
  530. package/dist/server/route-handler.d.ts.map +1 -1
  531. package/dist/server/route-matcher.d.ts +25 -36
  532. package/dist/server/route-matcher.d.ts.map +1 -1
  533. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  534. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  535. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  536. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  537. package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
  538. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
  539. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  540. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  541. package/dist/server/rsc-entry/helpers.d.ts +51 -28
  542. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  543. package/dist/server/rsc-entry/index.d.ts +28 -6
  544. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  545. package/dist/server/rsc-entry/render-route.d.ts +51 -0
  546. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  547. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  548. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  549. package/dist/server/rsc-entry/rsc-payload.d.ts +5 -6
  550. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  551. package/dist/server/rsc-entry/rsc-stream.d.ts +25 -1
  552. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  553. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  554. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  555. package/dist/server/rsc-entry/ssr-renderer.d.ts +34 -4
  556. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  557. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
  558. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  559. package/dist/server/safe-load.d.ts +46 -0
  560. package/dist/server/safe-load.d.ts.map +1 -0
  561. package/dist/server/sensitive-fields.d.ts +74 -0
  562. package/dist/server/sensitive-fields.d.ts.map +1 -0
  563. package/dist/server/sitemap-generator.d.ts +129 -0
  564. package/dist/server/sitemap-generator.d.ts.map +1 -0
  565. package/dist/server/sitemap-handler.d.ts +22 -0
  566. package/dist/server/sitemap-handler.d.ts.map +1 -0
  567. package/dist/server/slot-resolver.d.ts +7 -5
  568. package/dist/server/slot-resolver.d.ts.map +1 -1
  569. package/dist/server/ssr-bridge-types.d.ts +121 -0
  570. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  571. package/dist/server/ssr-entry.d.ts +2 -43
  572. package/dist/server/ssr-entry.d.ts.map +1 -1
  573. package/dist/server/ssr-render.d.ts +64 -21
  574. package/dist/server/ssr-render.d.ts.map +1 -1
  575. package/dist/server/ssr-wrappers.d.ts +50 -0
  576. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  577. package/dist/server/state-tree-diff.d.ts +36 -6
  578. package/dist/server/state-tree-diff.d.ts.map +1 -1
  579. package/dist/server/status-code-resolver.d.ts +22 -11
  580. package/dist/server/status-code-resolver.d.ts.map +1 -1
  581. package/dist/server/stream-utils.d.ts +47 -0
  582. package/dist/server/stream-utils.d.ts.map +1 -0
  583. package/dist/server/tracing.d.ts +44 -9
  584. package/dist/server/tracing.d.ts.map +1 -1
  585. package/dist/server/tree-builder.d.ts +62 -30
  586. package/dist/server/tree-builder.d.ts.map +1 -1
  587. package/dist/server/tree-match.d.ts +49 -0
  588. package/dist/server/tree-match.d.ts.map +1 -0
  589. package/dist/server/types.d.ts +71 -6
  590. package/dist/server/types.d.ts.map +1 -1
  591. package/dist/server/utils/escape-html.d.ts +14 -0
  592. package/dist/server/utils/escape-html.d.ts.map +1 -0
  593. package/dist/server/utils/mdx-file.d.ts +15 -0
  594. package/dist/server/utils/mdx-file.d.ts.map +1 -0
  595. package/dist/server/version-skew.d.ts +61 -0
  596. package/dist/server/version-skew.d.ts.map +1 -0
  597. package/dist/server/workers-cache-bridge.d.ts +26 -0
  598. package/dist/server/workers-cache-bridge.d.ts.map +1 -0
  599. package/dist/shared/href-validation.d.ts +49 -0
  600. package/dist/shared/href-validation.d.ts.map +1 -0
  601. package/dist/shared/merge-search-params.d.ts +22 -0
  602. package/dist/shared/merge-search-params.d.ts.map +1 -0
  603. package/dist/shared/redirect-type.d.ts +17 -0
  604. package/dist/shared/redirect-type.d.ts.map +1 -0
  605. package/dist/shims/font-google.d.ts +1 -1
  606. package/dist/shims/font-google.d.ts.map +1 -1
  607. package/dist/shims/font-google.js +42 -0
  608. package/dist/shims/font-google.js.map +1 -0
  609. package/dist/shims/font-local.d.ts +26 -0
  610. package/dist/shims/font-local.d.ts.map +1 -0
  611. package/dist/shims/font-local.js +20 -0
  612. package/dist/shims/font-local.js.map +1 -0
  613. package/dist/shims/headers.d.ts +53 -1
  614. package/dist/shims/headers.d.ts.map +1 -1
  615. package/dist/shims/image.d.ts +120 -120
  616. package/dist/shims/image.d.ts.map +1 -1
  617. package/dist/shims/navigation-client.d.ts +35 -11
  618. package/dist/shims/navigation-client.d.ts.map +1 -1
  619. package/dist/shims/navigation.d.ts +11 -5
  620. package/dist/shims/navigation.d.ts.map +1 -1
  621. package/dist/utils/state-machine.d.ts +80 -0
  622. package/dist/utils/state-machine.d.ts.map +1 -0
  623. package/docs/api/30-api-server.mdx +233 -0
  624. package/docs/api/31-api-client.mdx +161 -0
  625. package/docs/api/32-api-cache.mdx +311 -0
  626. package/docs/api/33-api-search-params.mdx +154 -0
  627. package/docs/api/34-api-config.mdx +325 -0
  628. package/docs/api/35-api-typescript.mdx +170 -0
  629. package/docs/api/36-cli.mdx +143 -0
  630. package/docs/learn/00-introduction.mdx +109 -0
  631. package/docs/learn/01-quick-start.mdx +94 -0
  632. package/docs/learn/02-pages-and-layouts.mdx +147 -0
  633. package/docs/learn/03-fetching-data.mdx +211 -0
  634. package/docs/learn/03b-access-control.mdx +130 -0
  635. package/docs/learn/04-loading-states.mdx +67 -0
  636. package/docs/learn/04b-the-flush-point.mdx +115 -0
  637. package/docs/learn/05-typed-params.mdx +275 -0
  638. package/docs/learn/06-forms-and-actions.mdx +146 -0
  639. package/docs/learn/07-typed-routes.mdx +127 -0
  640. package/docs/learn/08-streaming.mdx +146 -0
  641. package/docs/learn/09-caching.mdx +252 -0
  642. package/docs/learn/10-middleware.mdx +157 -0
  643. package/docs/learn/11-error-handling.mdx +156 -0
  644. package/docs/learn/12-client-navigation.mdx +176 -0
  645. package/docs/learn/13-configuration.mdx +162 -0
  646. package/docs/learn/14-deploying.mdx +264 -0
  647. package/docs/more/01-advanced-routing.mdx +173 -0
  648. package/docs/more/02-advanced-forms.mdx +137 -0
  649. package/docs/more/03-coming-from-nextjs.mdx +186 -0
  650. package/docs/more/04-metadata-and-fonts.mdx +193 -0
  651. package/docs/more/04b-mdx.mdx +209 -0
  652. package/docs/more/05-content-collections.mdx +90 -0
  653. package/docs/more/06-instrumentation.mdx +214 -0
  654. package/docs/more/07-security.mdx +129 -0
  655. package/docs/more/08-developer-experience.mdx +134 -0
  656. package/docs/more/40-why-timber.mdx +50 -0
  657. package/docs/more/41-timber-vs-nextjs.mdx +81 -0
  658. package/docs/more/42-timber-vs-others.mdx +68 -0
  659. package/docs/more/50-ai-agent-instructions.mdx +169 -0
  660. package/llms.txt +55 -0
  661. package/package.json +105 -26
  662. package/src/adapters/build-output-helper.ts +199 -0
  663. package/src/adapters/cloudflare-dev.ts +177 -0
  664. package/src/adapters/cloudflare-kv-cache.ts +204 -0
  665. package/src/adapters/cloudflare.ts +620 -129
  666. package/src/adapters/compress-module.ts +27 -92
  667. package/src/adapters/nitro.ts +266 -122
  668. package/src/adapters/raw-imports.d.ts +5 -0
  669. package/src/adapters/shared.ts +68 -0
  670. package/src/adapters/types.ts +2 -7
  671. package/src/adapters/wrangler.d.ts +7 -0
  672. package/src/cache/cache-api.ts +107 -0
  673. package/src/cache/handler-store.ts +76 -0
  674. package/src/cache/index.ts +114 -21
  675. package/src/cache/invalidation-epoch.ts +93 -0
  676. package/src/cache/json-lossy-check.ts +75 -0
  677. package/src/cache/redis-handler.ts +197 -19
  678. package/src/cache/singleflight.ts +64 -6
  679. package/src/cache/sizeof.ts +33 -0
  680. package/src/cache/stable-stringify.ts +65 -2
  681. package/src/cache/store.ts +71 -0
  682. package/src/cache/stores/cloudflare-kv.ts +52 -0
  683. package/src/cache/stores/memory.ts +125 -0
  684. package/src/cache/stores/redis.ts +97 -0
  685. package/src/cache/stores/vercel.ts +59 -0
  686. package/src/cache/tag-aware-handler.ts +237 -0
  687. package/src/cache/timber-cache.ts +161 -36
  688. package/src/cdn/cloudflare-purge.ts +50 -0
  689. package/src/cdn/fastly-purge.ts +63 -0
  690. package/src/cdn/headers.ts +153 -0
  691. package/src/cdn/index.ts +17 -0
  692. package/src/cdn/purge-store.ts +34 -0
  693. package/src/cdn/workers-cache-purge.ts +30 -0
  694. package/src/cli-schema-sync.ts +401 -0
  695. package/src/cli.ts +157 -34
  696. package/src/client/browser-dev.ts +156 -1
  697. package/src/client/browser-entry/action-dispatch.ts +124 -0
  698. package/src/client/browser-entry/hmr.ts +70 -0
  699. package/src/client/browser-entry/hydrate.ts +187 -0
  700. package/src/client/browser-entry/index.ts +113 -0
  701. package/src/client/browser-entry/post-hydration.ts +110 -0
  702. package/src/client/browser-entry/router-init.ts +289 -0
  703. package/src/client/browser-entry/rsc-stream.ts +157 -0
  704. package/src/client/browser-entry/scroll.ts +50 -0
  705. package/src/client/child-segment-context.ts +40 -0
  706. package/src/client/child-segment-outlet.tsx +25 -0
  707. package/src/client/child-segment-provider.tsx +27 -0
  708. package/src/client/error-boundary.tsx +127 -22
  709. package/src/client/error-reconstituter.tsx +79 -0
  710. package/src/client/form.tsx +31 -32
  711. package/src/client/history.ts +21 -6
  712. package/src/client/index.ts +67 -45
  713. package/src/client/internal.ts +58 -0
  714. package/src/client/link.tsx +349 -150
  715. package/src/client/navigation-api.ts +341 -0
  716. package/src/client/navigation-context.ts +15 -7
  717. package/src/client/navigation-root.tsx +355 -0
  718. package/src/client/nuqs-adapter.tsx +16 -3
  719. package/src/client/router-ref.ts +1 -1
  720. package/src/client/router.ts +538 -206
  721. package/src/client/rsc-fetch.ts +214 -33
  722. package/src/client/segment-cache.ts +11 -12
  723. package/src/client/segment-outlet.tsx +77 -0
  724. package/src/client/segment-update-context.ts +42 -0
  725. package/src/client/shallow-url.ts +22 -0
  726. package/src/client/slot-context.ts +48 -0
  727. package/src/client/slot-outlet.tsx +22 -0
  728. package/src/client/slot-provider.tsx +25 -0
  729. package/src/client/ssr-data.ts +13 -5
  730. package/src/client/state.ts +2 -2
  731. package/src/client/top-loader.tsx +11 -9
  732. package/src/client/use-cookie.ts +60 -15
  733. package/src/client/use-link-status.ts +7 -7
  734. package/src/client/use-pathname.ts +1 -0
  735. package/src/client/use-pending-navigation.ts +40 -0
  736. package/src/client/use-query-states.ts +108 -10
  737. package/src/client/use-router.ts +4 -1
  738. package/src/client/use-search-params.ts +31 -44
  739. package/src/client/{use-params.ts → use-segment-params.ts} +9 -6
  740. package/src/codec.ts +149 -0
  741. package/src/config-types.ts +282 -0
  742. package/src/config-validation.ts +330 -0
  743. package/src/content/index.ts +5 -13
  744. package/src/cookies/define-cookie.ts +217 -53
  745. package/src/cookies/index.ts +12 -1
  746. package/src/cookies/json-cookie.ts +105 -0
  747. package/src/cookies/validation.ts +192 -0
  748. package/src/dev-tools/404-page.ts +286 -0
  749. package/src/dev-tools/browser-logs.ts +55 -0
  750. package/src/dev-tools/dev-page-shell.ts +260 -0
  751. package/src/dev-tools/error-page.ts +331 -0
  752. package/src/dev-tools/holding-server.ts +187 -0
  753. package/src/dev-tools/hydration-overlay.ts +158 -0
  754. package/src/dev-tools/index.ts +83 -0
  755. package/src/dev-tools/instrumentation.ts +213 -0
  756. package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
  757. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
  758. package/src/dev-tools/overlay.ts +469 -0
  759. package/src/dev-tools/stack-classifier.ts +75 -0
  760. package/src/dev-tools/terminal.ts +182 -0
  761. package/src/fonts/ast-walk.ts +235 -0
  762. package/src/fonts/ast.ts +477 -126
  763. package/src/fonts/bundle.ts +138 -0
  764. package/src/fonts/dev-middleware.ts +85 -0
  765. package/src/fonts/fallbacks.ts +0 -23
  766. package/src/fonts/google.ts +100 -18
  767. package/src/fonts/local.ts +9 -8
  768. package/src/fonts/paths.ts +58 -0
  769. package/src/fonts/pipeline.ts +348 -0
  770. package/src/fonts/transform.ts +311 -0
  771. package/src/fonts/types.ts +52 -1
  772. package/src/fonts/virtual-modules.ts +179 -0
  773. package/src/index.ts +444 -352
  774. package/src/params/codec-registry.ts +34 -0
  775. package/src/params/define-schema.ts +115 -0
  776. package/src/params/index.ts +17 -0
  777. package/src/params/resolve-schema.ts +84 -0
  778. package/src/plugin-context.ts +432 -0
  779. package/src/plugins/adapter-build.ts +220 -7
  780. package/src/plugins/build-manifest.ts +168 -23
  781. package/src/plugins/build-report.ts +253 -35
  782. package/src/plugins/cache.ts +243 -0
  783. package/src/plugins/callsite-ast.ts +472 -0
  784. package/src/plugins/callsite-jsx.ts +243 -0
  785. package/src/plugins/chunks.ts +74 -5
  786. package/src/plugins/client-chunks.ts +185 -0
  787. package/src/plugins/cloudflare-wasm.ts +141 -0
  788. package/src/plugins/content.ts +1 -1
  789. package/src/plugins/dev-server.ts +284 -94
  790. package/src/plugins/entries.ts +134 -16
  791. package/src/plugins/fonts.ts +225 -660
  792. package/src/plugins/mdx.ts +47 -10
  793. package/src/plugins/prebuilt-capture.ts +217 -0
  794. package/src/plugins/prebuilt-options-analysis.ts +175 -0
  795. package/src/plugins/prebuilt.ts +655 -0
  796. package/src/plugins/prerender-sugar.ts +328 -0
  797. package/src/plugins/routing.ts +237 -241
  798. package/src/plugins/server-bundle.ts +89 -12
  799. package/src/plugins/shims.ts +241 -64
  800. package/src/plugins/static-build.ts +15 -90
  801. package/src/routing/codegen-shared.ts +115 -0
  802. package/src/routing/codegen-types.ts +65 -0
  803. package/src/routing/codegen.ts +372 -178
  804. package/src/routing/convention-lint.ts +394 -0
  805. package/src/routing/export-detect.ts +304 -0
  806. package/src/routing/file-cache.ts +23 -0
  807. package/src/routing/index.ts +10 -1
  808. package/src/routing/interception.ts +3 -22
  809. package/src/routing/link-codegen.ts +313 -0
  810. package/src/routing/manifest-codegen.ts +287 -0
  811. package/src/routing/scanner.ts +338 -189
  812. package/src/routing/schema-validation.ts +155 -0
  813. package/src/routing/segment-classify.ts +223 -0
  814. package/src/routing/segment-codegen.ts +98 -0
  815. package/src/routing/types.ts +82 -25
  816. package/src/routing/walkers.ts +90 -0
  817. package/src/rsc-runtime/rsc.ts +9 -0
  818. package/src/rsc-runtime/ssr.ts +50 -0
  819. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  820. package/src/schema-bridge.ts +253 -0
  821. package/src/search-params/define.ts +576 -0
  822. package/src/search-params/index.ts +14 -20
  823. package/src/search-params/registry.ts +2 -2
  824. package/src/search-params/wrappers.ts +101 -0
  825. package/src/segment-params/define.ts +249 -0
  826. package/src/segment-params/index.ts +9 -0
  827. package/src/server/access-gate.tsx +84 -34
  828. package/src/server/action-client.ts +120 -29
  829. package/src/server/action-encryption.ts +144 -0
  830. package/src/server/action-handler.ts +123 -33
  831. package/src/server/actions.ts +48 -54
  832. package/src/server/als-registry.ts +137 -20
  833. package/src/server/asset-headers.ts +15 -37
  834. package/src/server/body-limits.ts +10 -2
  835. package/src/server/build-manifest.ts +13 -56
  836. package/src/server/canonicalize.ts +6 -3
  837. package/src/server/coalesce-tick.ts +75 -0
  838. package/src/server/compress.ts +34 -7
  839. package/src/server/cookie-context.ts +484 -0
  840. package/src/server/cookie-parsing.ts +163 -0
  841. package/src/server/csrf.ts +39 -6
  842. package/src/server/default-logger.ts +99 -0
  843. package/src/server/deny-boundary.ts +314 -0
  844. package/src/server/deny-renderer.ts +85 -77
  845. package/src/server/dev-source-map.ts +31 -0
  846. package/src/server/early-hints-sender.ts +3 -2
  847. package/src/server/early-hints.ts +37 -27
  848. package/src/server/error-boundary-wrapper.ts +61 -22
  849. package/src/server/fallback-error.ts +79 -102
  850. package/src/server/flight-injection-state.ts +113 -0
  851. package/src/server/flight-scripts.ts +62 -0
  852. package/src/server/form-data.ts +124 -12
  853. package/src/server/html-injector-core.ts +495 -0
  854. package/src/server/html-injectors.ts +271 -254
  855. package/src/server/index.ts +31 -185
  856. package/src/server/internal.ts +181 -0
  857. package/src/server/logger.ts +72 -36
  858. package/src/server/metadata-routes.ts +110 -24
  859. package/src/server/middleware-runner.ts +31 -4
  860. package/src/server/node-stream-transforms.ts +336 -0
  861. package/src/server/param-coercion.ts +207 -0
  862. package/src/server/pipeline-helpers.ts +204 -0
  863. package/src/server/pipeline-interception.ts +45 -18
  864. package/src/server/pipeline-metadata.ts +14 -0
  865. package/src/server/pipeline-outcome.ts +197 -0
  866. package/src/server/pipeline-phases.ts +545 -0
  867. package/src/server/pipeline.ts +274 -382
  868. package/src/server/port-resolution.ts +215 -0
  869. package/src/server/prebuilt/cache-key.ts +298 -0
  870. package/src/server/prebuilt/capture-state.ts +89 -0
  871. package/src/server/prebuilt/key-discipline.ts +53 -0
  872. package/src/server/prebuilt/manifest-tag-index.ts +46 -0
  873. package/src/server/prebuilt/overlay.ts +256 -0
  874. package/src/server/prebuilt/payload-source.ts +201 -0
  875. package/src/server/prebuilt/slots.ts +167 -0
  876. package/src/server/prebuilt/synthetic-store.ts +121 -0
  877. package/src/server/prebuilt-builder.ts +808 -0
  878. package/src/server/prebuilt-runtime.ts +815 -0
  879. package/src/server/primitives.ts +160 -83
  880. package/src/server/render-timeout.ts +108 -0
  881. package/src/server/render-utils.ts +31 -0
  882. package/src/server/request-context.ts +168 -337
  883. package/src/server/route-element-builder.ts +661 -278
  884. package/src/server/route-handler.ts +31 -4
  885. package/src/server/route-matcher.ts +158 -277
  886. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  887. package/src/server/rsc-entry/api-handler.ts +69 -32
  888. package/src/server/rsc-entry/deny-fallback.ts +92 -0
  889. package/src/server/rsc-entry/error-renderer.ts +306 -89
  890. package/src/server/rsc-entry/helpers.ts +165 -79
  891. package/src/server/rsc-entry/index.ts +332 -341
  892. package/src/server/rsc-entry/render-route.ts +292 -0
  893. package/src/server/rsc-entry/revalidate-renderer.ts +349 -0
  894. package/src/server/rsc-entry/rsc-payload.ts +95 -39
  895. package/src/server/rsc-entry/rsc-stream.ts +93 -13
  896. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  897. package/src/server/rsc-entry/ssr-renderer.ts +273 -43
  898. package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
  899. package/src/server/safe-load.ts +60 -0
  900. package/src/server/sensitive-fields.ts +230 -0
  901. package/src/server/server-only-guard-noop.js +3 -0
  902. package/src/server/sitemap-generator.ts +345 -0
  903. package/src/server/sitemap-handler.ts +157 -0
  904. package/src/server/slot-resolver.ts +264 -257
  905. package/src/server/ssr-bridge-types.ts +124 -0
  906. package/src/server/ssr-entry.ts +206 -78
  907. package/src/server/ssr-render.ts +345 -82
  908. package/src/server/ssr-wrappers.tsx +141 -0
  909. package/src/server/state-tree-diff.ts +76 -24
  910. package/src/server/status-code-resolver.ts +115 -130
  911. package/src/server/stream-utils.ts +288 -0
  912. package/src/server/tracing.ts +126 -14
  913. package/src/server/tree-builder.ts +204 -90
  914. package/src/server/tree-match.ts +262 -0
  915. package/src/server/types.ts +78 -9
  916. package/src/server/utils/escape-html.ts +20 -0
  917. package/src/server/utils/mdx-file.ts +22 -0
  918. package/src/server/version-skew.ts +104 -0
  919. package/src/server/workers-cache-bridge.ts +33 -0
  920. package/src/shared/href-validation.ts +159 -0
  921. package/src/shared/merge-search-params.ts +55 -0
  922. package/src/shared/redirect-type.ts +17 -0
  923. package/src/shims/font-google.ts +1 -1
  924. package/src/shims/font-local.ts +34 -0
  925. package/src/shims/headers.ts +122 -1
  926. package/src/shims/navigation-client.ts +51 -29
  927. package/src/shims/navigation.ts +14 -7
  928. package/src/utils/state-machine.ts +111 -0
  929. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  930. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  931. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  932. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  933. package/dist/_chunks/format-RyoGQL74.js +0 -164
  934. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  935. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  936. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  937. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js +0 -153
  938. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  939. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  940. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  941. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  942. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  943. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  944. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  945. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  946. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  947. package/dist/adapters/cloudflare.js.map +0 -1
  948. package/dist/cache/index.js.map +0 -1
  949. package/dist/cache/register-cached-function.d.ts +0 -17
  950. package/dist/cache/register-cached-function.d.ts.map +0 -1
  951. package/dist/client/browser-entry.d.ts +0 -21
  952. package/dist/client/browser-entry.d.ts.map +0 -1
  953. package/dist/client/head.d.ts +0 -16
  954. package/dist/client/head.d.ts.map +0 -1
  955. package/dist/client/link-status-provider.d.ts +0 -11
  956. package/dist/client/link-status-provider.d.ts.map +0 -1
  957. package/dist/client/segment-merger.d.ts +0 -119
  958. package/dist/client/segment-merger.d.ts.map +0 -1
  959. package/dist/client/stale-reload.d.ts +0 -44
  960. package/dist/client/stale-reload.d.ts.map +0 -1
  961. package/dist/client/transition-root.d.ts +0 -74
  962. package/dist/client/transition-root.d.ts.map +0 -1
  963. package/dist/client/use-navigation-pending.d.ts +0 -26
  964. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  965. package/dist/client/use-params.d.ts.map +0 -1
  966. package/dist/plugins/cache-transform.d.ts +0 -36
  967. package/dist/plugins/cache-transform.d.ts.map +0 -1
  968. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  969. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  970. package/dist/plugins/dev-logs.d.ts.map +0 -1
  971. package/dist/plugins/dynamic-transform.d.ts +0 -72
  972. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  973. package/dist/plugins/server-action-exports.d.ts +0 -26
  974. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  975. package/dist/routing/status-file-lint.d.ts +0 -33
  976. package/dist/routing/status-file-lint.d.ts.map +0 -1
  977. package/dist/search-params/analyze.d.ts +0 -54
  978. package/dist/search-params/analyze.d.ts.map +0 -1
  979. package/dist/search-params/builtin-codecs.d.ts +0 -105
  980. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  981. package/dist/search-params/codecs.d.ts +0 -53
  982. package/dist/search-params/codecs.d.ts.map +0 -1
  983. package/dist/search-params/create.d.ts +0 -106
  984. package/dist/search-params/create.d.ts.map +0 -1
  985. package/dist/server/client-module-map.d.ts +0 -47
  986. package/dist/server/client-module-map.d.ts.map +0 -1
  987. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  988. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  989. package/dist/server/dev-logger.d.ts.map +0 -1
  990. package/dist/server/dev-span-processor.d.ts +0 -29
  991. package/dist/server/dev-span-processor.d.ts.map +0 -1
  992. package/dist/server/dev-warnings.d.ts +0 -129
  993. package/dist/server/dev-warnings.d.ts.map +0 -1
  994. package/dist/server/flush.d.ts +0 -74
  995. package/dist/server/flush.d.ts.map +0 -1
  996. package/dist/server/manifest-status-resolver.d.ts +0 -58
  997. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  998. package/dist/server/prerender.d.ts +0 -77
  999. package/dist/server/prerender.d.ts.map +0 -1
  1000. package/dist/utils/directive-parser.d.ts +0 -70
  1001. package/dist/utils/directive-parser.d.ts.map +0 -1
  1002. package/src/cache/register-cached-function.ts +0 -103
  1003. package/src/client/browser-entry.ts +0 -678
  1004. package/src/client/head.ts +0 -61
  1005. package/src/client/link-status-provider.tsx +0 -30
  1006. package/src/client/segment-merger.ts +0 -339
  1007. package/src/client/stale-reload.ts +0 -87
  1008. package/src/client/transition-root.tsx +0 -166
  1009. package/src/client/use-navigation-pending.ts +0 -38
  1010. package/src/plugins/cache-transform.ts +0 -199
  1011. package/src/plugins/dev-error-overlay.ts +0 -230
  1012. package/src/plugins/dynamic-transform.ts +0 -161
  1013. package/src/plugins/server-action-exports.ts +0 -220
  1014. package/src/routing/status-file-lint.ts +0 -112
  1015. package/src/search-params/analyze.ts +0 -192
  1016. package/src/search-params/builtin-codecs.ts +0 -228
  1017. package/src/search-params/codecs.ts +0 -153
  1018. package/src/search-params/create.ts +0 -321
  1019. package/src/server/client-module-map.ts +0 -58
  1020. package/src/server/dev-fetch-instrumentation.ts +0 -96
  1021. package/src/server/dev-span-processor.ts +0 -78
  1022. package/src/server/dev-warnings.ts +0 -283
  1023. package/src/server/flush.ts +0 -182
  1024. package/src/server/manifest-status-resolver.ts +0 -215
  1025. package/src/server/prerender.ts +0 -139
  1026. package/src/utils/directive-parser.ts +0 -529
@@ -16,33 +16,71 @@
16
16
  * See design/02-rendering-pipeline.md §"Parallel Slots"
17
17
  */
18
18
 
19
- import { TimberErrorBoundary } from '#/client/error-boundary.js';
20
- import SlotErrorFallback from '#/client/slot-error-fallback.js';
19
+ import { TimberErrorBoundary } from '../client/error-boundary.js';
20
+ import SlotErrorFallback from '../client/slot-error-fallback.js';
21
21
  import { SlotAccessGate } from './access-gate.js';
22
22
  import { wrapSegmentWithErrorBoundaries } from './error-boundary-wrapper.js';
23
+ import { isClientReference } from './route-element-builder.js';
24
+ import { loadModule } from './safe-load.js';
23
25
  import type { InterceptionContext, RouteMatch } from './pipeline.js';
24
- import { DenySignal } from './primitives.js';
26
+ import { DenySignal, RedirectSignal } from './primitives.js';
27
+ import { logRenderError } from './logger.js';
25
28
  import type { ManifestSegmentNode } from './route-matcher.js';
29
+ import { setSlotParams } from './request-context.js';
30
+ import { coerceSlotParams } from './param-coercion.js';
31
+ import { matchUrlParts } from './tree-match.js';
26
32
 
27
33
  type CreateElementFn = (...args: unknown[]) => React.ReactElement;
28
34
 
35
+ // ─── Module Loading Helpers ─────────────────────────────────────────────────
36
+
37
+ /**
38
+ * Load a module and extract its default export as a component function.
39
+ * Returns undefined if no default export exists.
40
+ */
41
+ async function loadComponent(loader: {
42
+ load: () => Promise<unknown>;
43
+ filePath: string;
44
+ }): Promise<((...args: unknown[]) => unknown) | undefined> {
45
+ const mod = await loadModule(loader);
46
+ return mod.default as ((...args: unknown[]) => unknown) | undefined;
47
+ }
48
+
49
+ /**
50
+ * Load and render the default.tsx fallback for a slot node.
51
+ * Returns null if the slot has no default.tsx or it has no default export.
52
+ */
53
+ async function renderDefaultFallback(
54
+ slotNode: ManifestSegmentNode,
55
+ h: CreateElementFn
56
+ ): Promise<React.ReactElement | null> {
57
+ if (!slotNode.default) return null;
58
+ const DefaultComp = await loadComponent(slotNode.default);
59
+ if (!DefaultComp) return null;
60
+ return h(DefaultComp, {});
61
+ }
62
+
63
+ // ─── Slot Element Resolution ────────────────────────────────────────────────
64
+
29
65
  /**
30
66
  * Resolve the element for a parallel slot.
31
67
  *
32
68
  * Finds a matching page in the slot's sub-tree for the current route.
33
69
  * Falls back to default.tsx if no match, or null if no default.
34
70
  *
35
- * When a match is found, the element is wrapped with:
36
- * 1. Error boundaries from each segment in the slot's matched chain
37
- * 2. Layouts from each segment in the slot's matched chain
38
- * 3. SlotAccessGate if the slot root has access.ts
71
+ * When a match is found, the element is wrapped per segment in the slot's
72
+ * matched chain with (innermost → outermost):
73
+ * 1. Error boundaries
74
+ * 2. Layout
75
+ * 3. SlotAccessGate if the segment has access.ts (gate OUTSIDE the layout,
76
+ * so a denied layout never executes — see TIM-1074)
39
77
  */
40
78
  export async function resolveSlotElement(
41
79
  slotNode: ManifestSegmentNode,
42
80
  match: RouteMatch,
43
- paramsPromise: Promise<Record<string, string | string[]>>,
44
81
  h: CreateElementFn,
45
- interception?: InterceptionContext
82
+ interception?: InterceptionContext,
83
+ parentTreePath?: string
46
84
  ): Promise<React.ReactElement | null> {
47
85
  // When interception is active, try to match intercepting children in this
48
86
  // slot against the target pathname. If an intercepting child matches, render
@@ -54,125 +92,89 @@ export async function resolveSlotElement(
54
92
  : findSlotMatch(slotNode, match);
55
93
 
56
94
  if (slotMatch) {
57
- const mod = (await slotMatch.page.load()) as Record<string, unknown>;
58
- if (mod.default) {
59
- const SlotPage = mod.default as (...args: unknown[]) => unknown;
95
+ // Store per-slot params in ALS so getSegmentParams(segmentPath) returns
96
+ // the slot's own param types (e.g. catch-all → string[] vs dynamic → string).
97
+ if (parentTreePath && Object.keys(slotMatch.slotParams).length > 0) {
98
+ // Build the full tree path: parent prefix + slot chain segment names.
99
+ const slotSuffix = slotMatch.chain
100
+ .map((s) => s.segmentName)
101
+ .filter(Boolean)
102
+ .join('/');
103
+ const prefix = parentTreePath === '/' ? '' : parentTreePath;
104
+ const fullSlotPath = `${prefix}/${slotSuffix}`;
105
+
106
+ // Coerce slot params through global schema codecs (same as main route).
107
+ const coerced = coerceSlotParams(slotMatch.chain, slotMatch.slotParams);
108
+ setSlotParams(fullSlotPath, coerced);
109
+ }
60
110
 
111
+ const SlotPage = await loadComponent(slotMatch.page);
112
+ if (SlotPage) {
61
113
  // Load default.tsx fallback for notFound() handling in the slot page.
62
114
  // When a slot page calls notFound() or deny(), it should gracefully
63
115
  // degrade to default.tsx or null — not crash the page. This matches
64
116
  // Next.js behavior. See design/02-rendering-pipeline.md
65
117
  // §"Slot Access Failure = Graceful Degradation"
66
- let denyFallback: React.ReactElement | null = null;
67
- if (slotNode.default) {
68
- const defaultMod = (await slotNode.default.load()) as Record<string, unknown>;
69
- const DefaultComp = defaultMod.default as ((...args: unknown[]) => unknown) | undefined;
70
- if (DefaultComp) {
71
- denyFallback = h(DefaultComp, { params: paramsPromise, searchParams: {} });
72
- }
73
- }
74
-
75
- // Wrap the slot page to catch DenySignal (from notFound() or deny())
76
- // at the component level. This prevents the signal from reaching the
77
- // RSC onError callback and being tracked as a page-level denial, which
78
- // would cause the pipeline to replace the entire successful SSR response
79
- // with a deny page. Instead, the slot gracefully degrades.
80
- const denyFallbackCapture = denyFallback;
81
- const SafeSlotPage = async (props: Record<string, unknown>) => {
82
- try {
83
- return await (SlotPage as (props: Record<string, unknown>) => unknown)(props);
84
- } catch (error) {
85
- if (error instanceof DenySignal) {
86
- return denyFallbackCapture;
87
- }
88
- throw error;
89
- }
90
- };
91
-
92
- let element: React.ReactElement = h(SafeSlotPage, {
93
- params: paramsPromise,
94
- searchParams: {},
95
- });
96
-
97
- // Wrap with error boundaries and layouts from intermediate slot segments
98
- // (everything between slot root and leaf). Process innermost-first, same
99
- // order as route-element-builder.ts handles main segments. The slot root
100
- // (index 0) is handled separately after the access gate below.
101
- for (let i = slotMatch.chain.length - 1; i > 0; i--) {
102
- const seg = slotMatch.chain[i];
103
-
104
- // Error boundaries from this segment
105
- element = await wrapSegmentWithErrorBoundaries(seg, element, h);
106
-
107
- // Layout from this segment
108
- if (seg.layout) {
109
- const layoutMod = (await seg.layout.load()) as Record<string, unknown>;
110
- if (layoutMod.default) {
111
- const Layout = layoutMod.default as (...args: unknown[]) => unknown;
112
- element = h(Layout, {
113
- params: paramsPromise,
114
- searchParams: {},
115
- children: element,
116
- });
117
- }
118
- }
119
- }
120
-
121
- // Wrap in SlotAccessGate if slot root has access.ts.
122
- // On denial: denied.tsx → default.tsx → null (graceful degradation).
123
- // See design/04-authorization.md §"Slot-Level Auth".
124
- if (slotNode.access) {
125
- const accessMod = (await slotNode.access.load()) as Record<string, unknown>;
126
- const accessFn = accessMod.default as
127
- | ((ctx: { params: Record<string, string | string[]>; searchParams: unknown }) => unknown)
128
- | undefined;
129
- if (accessFn) {
130
- // Load denied.tsx fallback
131
- let deniedFallback: React.ReactElement | null = null;
132
- if (slotNode.denied) {
133
- const deniedMod = (await slotNode.denied.load()) as Record<string, unknown>;
134
- const DeniedComponent = deniedMod.default as
135
- | ((...args: unknown[]) => unknown)
136
- | undefined;
137
- if (DeniedComponent) {
138
- deniedFallback = h(DeniedComponent, {});
118
+ const denyFallback = await renderDefaultFallback(slotNode, h);
119
+
120
+ // Build the slot page element.
121
+ // Client references ('use client' pages) must NOT be called as functions —
122
+ // they are proxy objects that throw when invoked. For client references,
123
+ // use createElement directly. Error catching is unnecessary because client
124
+ // references are serialized as references in the RSC Flight stream — they
125
+ // don't execute on the server. See TIM-627.
126
+ //
127
+ // For server components, wrap in SafeSlotPage to catch ALL errors at the
128
+ // component level. This prevents errors from leaving unresolved Flight
129
+ // rows in the RSC stream — see TIM-524 for details.
130
+ let element: React.ReactElement;
131
+ if (isClientReference(SlotPage)) {
132
+ element = h(SlotPage, {});
133
+ } else {
134
+ const SafeSlotPage = async (props: Record<string, unknown>) => {
135
+ try {
136
+ return await (SlotPage as (props: Record<string, unknown>) => unknown)(props);
137
+ } catch (error) {
138
+ // RedirectSignal must propagate — the pipeline handles redirects
139
+ // at the top level. Swallowing it here would silently return
140
+ // fallback content instead of redirecting. See TIM-554.
141
+ if (error instanceof RedirectSignal) {
142
+ throw error;
139
143
  }
140
- }
141
-
142
- // Load default.tsx fallback
143
- let defaultFallback: React.ReactElement | null = null;
144
- if (slotNode.default) {
145
- const defaultMod = (await slotNode.default.load()) as Record<string, unknown>;
146
- const DefaultComp = defaultMod.default as ((...args: unknown[]) => unknown) | undefined;
147
- if (DefaultComp) {
148
- defaultFallback = h(DefaultComp, { params: paramsPromise, searchParams: {} });
144
+ if (error instanceof DenySignal) {
145
+ return denyFallback;
149
146
  }
147
+ // Log the error but don't re-throw — returning fallback ensures
148
+ // the Flight row is resolved and the page hydrates correctly.
149
+ logRenderError({
150
+ method: '',
151
+ path: '',
152
+ error,
153
+ });
154
+ return denyFallback;
150
155
  }
151
-
152
- const params = await paramsPromise;
153
- element = h(SlotAccessGate, {
154
- accessFn,
155
- params,
156
- searchParams: {},
157
- deniedFallback,
158
- defaultFallback,
159
- children: element,
160
- });
161
- }
156
+ };
157
+ element = h(SafeSlotPage, {});
162
158
  }
163
159
 
164
- // Wrap with slot root's layout (outermost, outside access gate)
165
- if (slotNode.layout) {
166
- const layoutMod = (await slotNode.layout.load()) as Record<string, unknown>;
167
- if (layoutMod.default) {
168
- const Layout = layoutMod.default as (...args: unknown[]) => unknown;
169
- element = h(Layout, {
170
- params: paramsPromise,
171
- searchParams: {},
172
- children: element,
173
- });
174
- }
175
- }
160
+ // Wrap with error boundaries, layouts, and access gates from
161
+ // intermediate slot segments (everything between slot root and leaf).
162
+ // Process innermost-first, same order as route-element-builder.ts
163
+ // handles main segments. The slot root (index 0) is handled below.
164
+ element = await wrapWithIntermediateSegments(slotMatch.chain, element, h);
165
+
166
+ // Wrap with slot root's layout — INSIDE the access gate, so the layout
167
+ // server component never executes when access.ts denies. See TIM-1074.
168
+ element = await wrapWithLayout(slotNode, element, h);
169
+
170
+ // Wrap in SlotAccessGate if slot root has access.ts. The gate is
171
+ // OUTSIDE the layout, matching the segment model in
172
+ // route-element-builder.ts: a denied layout must not render, or it
173
+ // would fetch/serialize protected data into the RSC Flight stream.
174
+ // On denial: denied.tsx → default.tsx → null (graceful degradation),
175
+ // rendered WITHOUT the denied slot's own layout.
176
+ // See design/04-authorization.md §"Slot-Level Auth".
177
+ element = await wrapWithAccessGate(slotNode, element, h);
176
178
 
177
179
  // Wrap with slot root's error boundaries (outermost)
178
180
  element = await wrapSegmentWithErrorBoundaries(slotNode, element, h);
@@ -180,7 +182,7 @@ export async function resolveSlotElement(
180
182
  // Catch-all error boundary: ensures slot errors NEVER propagate to the
181
183
  // parent layout. Without this, a slot without error.tsx that throws
182
184
  // causes SSR's renderToReadableStream to reject, triggering renderDenyPage
183
- // which re-executes all layout server components (including headers() calls
185
+ // which re-executes all layout server components (including getHeaders() calls
184
186
  // that fail in the SSR environment). The null fallback means the slot
185
187
  // degrades to nothing — consistent with the slot access denial behavior.
186
188
  // See design/02-rendering-pipeline.md §"Slot Access Failure = Graceful Degradation"
@@ -195,24 +197,101 @@ export async function resolveSlotElement(
195
197
  }
196
198
 
197
199
  // No matching page — render default.tsx fallback
198
- if (slotNode.default) {
199
- const mod = (await slotNode.default.load()) as Record<string, unknown>;
200
- if (mod.default) {
201
- const DefaultComponent = mod.default as (...args: unknown[]) => unknown;
202
- return h(DefaultComponent, { params: paramsPromise, searchParams: {} });
203
- }
200
+ return renderDefaultFallback(slotNode, h);
201
+ }
202
+
203
+ // ─── Element Wrapping Helpers ───────────────────────────────────────────────
204
+
205
+ /**
206
+ * Wrap an element with error boundaries, access gates, and layouts from
207
+ * intermediate slot segments (indices 1..n, skipping the slot root at index 0).
208
+ * Processes innermost-first to match route-element-builder.ts ordering.
209
+ *
210
+ * Access gates are enforced for every intermediate segment that has access.ts,
211
+ * not just the slot root. Without this, nested slot children (e.g.,
212
+ * @admin/reports/access.ts) and intercepting route children with access.ts
213
+ * would bypass authorization. See TIM-999.
214
+ *
215
+ * Wrap order per segment (innermost → outermost): error boundaries → layout
216
+ * → access gate. The gate must be OUTSIDE the layout so a denying access.ts
217
+ * prevents the layout server component from executing — otherwise the layout
218
+ * would fetch/serialize protected data into the RSC Flight stream. Matches
219
+ * route-element-builder.ts. See TIM-1074.
220
+ */
221
+ async function wrapWithIntermediateSegments(
222
+ chain: ManifestSegmentNode[],
223
+ element: React.ReactElement,
224
+ h: CreateElementFn
225
+ ): Promise<React.ReactElement> {
226
+ for (let i = chain.length - 1; i > 0; i--) {
227
+ const seg = chain[i];
228
+ element = await wrapSegmentWithErrorBoundaries(seg, element, h);
229
+ element = await wrapWithLayout(seg, element, h);
230
+ element = await wrapWithAccessGate(seg, element, h);
204
231
  }
232
+ return element;
233
+ }
205
234
 
206
- // No page and no default — slot renders nothing
207
- return null;
235
+ /**
236
+ * Wrap an element with a segment's layout component, if present.
237
+ */
238
+ async function wrapWithLayout(
239
+ node: ManifestSegmentNode,
240
+ element: React.ReactElement,
241
+ h: CreateElementFn
242
+ ): Promise<React.ReactElement> {
243
+ if (!node.layout) return element;
244
+ const Layout = await loadComponent(node.layout);
245
+ if (!Layout) return element;
246
+ return h(Layout, { children: element });
247
+ }
248
+
249
+ /**
250
+ * Wrap an element with a SlotAccessGate if the node has access.ts.
251
+ * On denial: denied.tsx → default.tsx → null (graceful degradation).
252
+ */
253
+ async function wrapWithAccessGate(
254
+ slotNode: ManifestSegmentNode,
255
+ element: React.ReactElement,
256
+ h: CreateElementFn
257
+ ): Promise<React.ReactElement> {
258
+ if (!slotNode.access) return element;
259
+
260
+ const accessFn = await loadComponent(slotNode.access);
261
+ if (!accessFn) return element;
262
+
263
+ // Pass the component (not pre-built element) so SlotAccessGate can
264
+ // forward DenySignal.data as dangerouslyPassData dynamically. See TIM-488.
265
+ let DeniedComponent: ((...args: unknown[]) => unknown) | null = null;
266
+ if (slotNode.denied) {
267
+ DeniedComponent = (await loadComponent(slotNode.denied)) ?? null;
268
+ }
269
+
270
+ // Extract slot name from the directory name (strip @ prefix)
271
+ const slotName = slotNode.segmentName?.replace(/^@/, '') ?? '';
272
+
273
+ const defaultFallback = await renderDefaultFallback(slotNode, h);
274
+
275
+ return h(SlotAccessGate, {
276
+ accessFn,
277
+ DeniedComponent,
278
+ slotName,
279
+ createElement: h,
280
+ defaultFallback,
281
+ children: element,
282
+ });
208
283
  }
209
284
 
285
+ // ─── Slot Matching ──────────────────────────────────────────────────────────
286
+
210
287
  /** Result of matching a slot's sub-tree against the current route. */
211
288
  interface SlotMatchResult {
212
289
  /** The page file at the matched leaf. */
213
290
  page: NonNullable<ManifestSegmentNode['page']>;
214
291
  /** The full chain of slot nodes traversed (slot root → … → leaf with page). */
215
292
  chain: ManifestSegmentNode[];
293
+ /** Params collected from the slot's segment chain (may differ from main route params). */
294
+ slotParams: Record<string, string | string[]>;
216
295
  }
217
296
 
218
297
  /**
@@ -231,7 +310,7 @@ interface SlotMatchResult {
231
310
  * to find the deepest matching page.
232
311
  */
233
312
  function findSlotMatch(slotNode: ManifestSegmentNode, match: RouteMatch): SlotMatchResult | null {
234
- const segments = match.segments as unknown as ManifestSegmentNode[];
313
+ const segments = match.segments;
235
314
 
236
315
  // Find the parent segment that owns this slot by comparing urlPaths.
237
316
  // The slot's urlPath matches its parent's urlPath (slots don't add URL depth).
@@ -253,90 +332,60 @@ function findSlotMatch(slotNode: ManifestSegmentNode, match: RouteMatch): SlotMa
253
332
  // against the slot's children.
254
333
  const remainingSegments = parentIndex >= 0 ? segments.slice(parentIndex + 1) : [];
255
334
 
256
- // If no remaining segments, the slot's own page matches
257
- if (remainingSegments.length === 0) {
258
- if (slotNode.page) {
259
- return { page: slotNode.page, chain: [slotNode] };
260
- }
261
- // Check for optional-catch-all child — [[...slug]] matches zero segments
262
- for (const child of slotNode.children ?? []) {
263
- if (child.segmentType === 'optional-catch-all' && child.page) {
264
- return { page: child.page, chain: [slotNode, child] };
265
- }
266
- }
267
- return null;
268
- }
335
+ // Extract raw URL parts from the remaining main-route segments.
336
+ // Use rawSegmentParams (pre-coercion) to ensure we get actual URL strings,
337
+ // not codec-transformed values. Fall back to segmentParams for tests/compat.
338
+ const rawParams = match.rawSegmentParams ?? match.segmentParams ?? {};
339
+ const urlParts = extractUrlParts(remainingSegments, rawParams);
269
340
 
270
- // Walk the slot's children to match remaining URL segments.
271
- // Track the chain so we can apply error boundaries and layouts.
272
- const chain: ManifestSegmentNode[] = [slotNode];
273
- let currentNode = slotNode;
274
- for (const seg of remainingSegments) {
275
- const childName = seg.segmentName;
276
- const directChildren = currentNode.children ?? [];
277
-
278
- let found: ManifestSegmentNode | null = null;
279
- for (const child of directChildren) {
280
- // Exact static match
281
- if (child.segmentType === 'static' && child.segmentName === childName) {
282
- found = child;
283
- break;
284
- }
285
- }
341
+ // Match URL parts against the slot's segment tree using the shared walker.
342
+ // Handles zero parts (slot's own page), catch-all, optional-catch-all,
343
+ // groups, backtracking, and correct priority ordering.
344
+ const result = matchUrlParts(slotNode, urlParts);
345
+ if (!result) return null;
286
346
 
287
- // Try dynamic segments if no static match
288
- if (!found) {
289
- for (const child of directChildren) {
290
- if (child.segmentType === 'dynamic') {
291
- found = child;
292
- break;
293
- }
294
- }
295
- }
347
+ const leaf = result.chain[result.chain.length - 1];
348
+ if (!leaf.page) return null;
296
349
 
297
- // Try catch-all segments — these consume ALL remaining URL segments,
298
- // so we break out of the outer loop immediately.
299
- if (!found) {
300
- for (const child of directChildren) {
301
- if (child.segmentType === 'catch-all' || child.segmentType === 'optional-catch-all') {
302
- found = child;
303
- break;
304
- }
305
- }
306
- if (found) {
307
- chain.push(found);
308
- currentNode = found;
309
- break;
310
- }
311
- }
350
+ return { page: leaf.page, chain: result.chain, slotParams: result.params };
351
+ }
312
352
 
313
- // Try group children (transparent)
314
- if (!found) {
315
- for (const child of directChildren) {
316
- if (child.segmentType === 'group') {
317
- for (const groupChild of child.children ?? []) {
318
- if (groupChild.segmentName === childName) {
319
- found = groupChild;
320
- break;
321
- }
322
- }
323
- if (found) break;
324
- }
353
+ /**
354
+ * Extract raw URL path parts from a main-route segment chain.
355
+ *
356
+ * Each dynamic segment consumed one URL part (its param value).
357
+ * Static segments consumed their own name. Groups are transparent.
358
+ * Catch-all segments consumed multiple parts (their param value is string[]).
359
+ *
360
+ * Uses rawSegmentParams (pre-coercion) to get actual URL strings.
361
+ * Values are coerced to String() defensively in case a codec leaked
362
+ * a non-string value into the params map.
363
+ */
364
+ function extractUrlParts(
365
+ segments: ManifestSegmentNode[],
366
+ mainParams: Record<string, string | string[]>
367
+ ): string[] {
368
+ const parts: string[] = [];
369
+ for (const seg of segments) {
370
+ if (seg.segmentType === 'group') continue;
371
+ if (seg.segmentType === 'static') {
372
+ parts.push(seg.segmentName);
373
+ } else if (seg.paramName) {
374
+ const value = mainParams[seg.paramName];
375
+ if (Array.isArray(value)) {
376
+ parts.push(...value.map(String));
377
+ } else if (value !== undefined) {
378
+ // Reconstruct the original URL part for affixed segments.
379
+ // The param value is the stripped middle (e.g. "123" for [id].png
380
+ // matching "123.png"), so we re-attach prefix/suffix so that slot
381
+ // matching through matchUrlParts sees the original part.
382
+ const prefix = seg.paramPrefix ?? '';
383
+ const suffix = seg.paramSuffix ?? '';
384
+ parts.push(prefix + String(value) + suffix);
325
385
  }
326
386
  }
327
-
328
- if (!found) {
329
- // No matching child in slot tree — slot doesn't match this URL
330
- return null;
331
- }
332
- chain.push(found);
333
- currentNode = found;
334
- }
335
-
336
- if (currentNode.page) {
337
- return { page: currentNode.page, chain };
338
387
  }
339
- return null;
388
+ return parts;
340
389
  }
341
390
 
342
391
  /**
@@ -372,61 +421,19 @@ function findInterceptingMatch(
372
421
  }
373
422
  if (matchIdx < 0) continue;
374
423
 
375
- // Walk the intercepting child's sub-tree to match remaining target parts
424
+ // Match remaining target parts against the intercepting child's sub-tree.
376
425
  const remaining = targetParts.slice(matchIdx + 1);
377
- const chain: ManifestSegmentNode[] = [slotNode, child];
378
-
379
- if (remaining.length === 0) {
380
- if (child.page) {
381
- return { page: child.page, chain };
382
- }
383
- continue;
384
- }
385
-
386
- let currentNode = child;
387
- let matched = true;
388
- for (const part of remaining) {
389
- const children = currentNode.children ?? [];
390
- let found: ManifestSegmentNode | null = null;
391
-
392
- // Static match
393
- for (const c of children) {
394
- if (c.segmentType === 'static' && c.segmentName === part) {
395
- found = c;
396
- break;
397
- }
426
+ const result = matchUrlParts(child, remaining);
427
+ if (result) {
428
+ const leaf = result.chain[result.chain.length - 1];
429
+ if (leaf.page) {
430
+ return {
431
+ page: leaf.page,
432
+ // Prepend slotNode — matchUrlParts starts from child, not slot root
433
+ chain: [slotNode, ...result.chain],
434
+ slotParams: result.params,
435
+ };
398
436
  }
399
-
400
- // Dynamic match
401
- if (!found) {
402
- for (const c of children) {
403
- if (c.segmentType === 'dynamic') {
404
- found = c;
405
- break;
406
- }
407
- }
408
- }
409
-
410
- // Catch-all match
411
- if (!found) {
412
- for (const c of children) {
413
- if (c.segmentType === 'catch-all' || c.segmentType === 'optional-catch-all') {
414
- found = c;
415
- break;
416
- }
417
- }
418
- }
419
-
420
- if (!found) {
421
- matched = false;
422
- break;
423
- }
424
- chain.push(found);
425
- currentNode = found;
426
- }
427
-
428
- if (matched && currentNode.page) {
429
- return { page: currentNode.page, chain };
430
437
  }
431
438
  }
432
439