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

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 (784) hide show
  1. package/dist/_chunks/actions-BNhpxrnV.js +1104 -0
  2. package/dist/_chunks/actions-BNhpxrnV.js.map +1 -0
  3. package/dist/_chunks/build-output-helper-K7oUCRqU.js +102 -0
  4. package/dist/_chunks/build-output-helper-K7oUCRqU.js.map +1 -0
  5. package/dist/_chunks/cli-schema-sync-CObqjGWF.js +2 -0
  6. package/dist/_chunks/cli-schema-sync-q-Ce6-iG.js +785 -0
  7. package/dist/_chunks/cli-schema-sync-q-Ce6-iG.js.map +1 -0
  8. package/dist/_chunks/codec-registry-DqkeAydt.js +21 -0
  9. package/dist/_chunks/codec-registry-DqkeAydt.js.map +1 -0
  10. package/dist/_chunks/define-DMq-Yjp7.js +112 -0
  11. package/dist/_chunks/define-DMq-Yjp7.js.map +1 -0
  12. package/dist/_chunks/define-jeHDXZGq.js +195 -0
  13. package/dist/_chunks/define-jeHDXZGq.js.map +1 -0
  14. package/dist/_chunks/format-BjN9HLu9.js +14 -0
  15. package/dist/_chunks/format-BjN9HLu9.js.map +1 -0
  16. package/dist/_chunks/handler-store-bIAstrxQ.js +54 -0
  17. package/dist/_chunks/handler-store-bIAstrxQ.js.map +1 -0
  18. package/dist/_chunks/logger-CMd9P1xQ.js +291 -0
  19. package/dist/_chunks/logger-CMd9P1xQ.js.map +1 -0
  20. package/dist/_chunks/merge-search-params-Cm1j99HC.js +41 -0
  21. package/dist/_chunks/merge-search-params-Cm1j99HC.js.map +1 -0
  22. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DESG8uk5.js} +32 -19
  23. package/dist/_chunks/metadata-routes-DESG8uk5.js.map +1 -0
  24. package/dist/_chunks/navigation-root-B5-RmsPi.js +103 -0
  25. package/dist/_chunks/navigation-root-B5-RmsPi.js.map +1 -0
  26. package/dist/_chunks/registry-BI9cgCt7.js +20 -0
  27. package/dist/_chunks/registry-BI9cgCt7.js.map +1 -0
  28. package/dist/_chunks/resolve-schema-DU2nbVOi.js +77 -0
  29. package/dist/_chunks/resolve-schema-DU2nbVOi.js.map +1 -0
  30. package/dist/_chunks/router-ref-B2-2kIIC.js +28 -0
  31. package/dist/_chunks/router-ref-B2-2kIIC.js.map +1 -0
  32. package/dist/_chunks/schema-bridge-o0SwFtXW.js +86 -0
  33. package/dist/_chunks/schema-bridge-o0SwFtXW.js.map +1 -0
  34. package/dist/_chunks/segment-classify-BjfuctV2.js +137 -0
  35. package/dist/_chunks/segment-classify-BjfuctV2.js.map +1 -0
  36. package/dist/_chunks/segment-context-Bg0pFbLT.js +34 -0
  37. package/dist/_chunks/segment-context-Bg0pFbLT.js.map +1 -0
  38. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-DVX8S7vj.js} +1 -1
  39. package/dist/_chunks/ssr-data-DVX8S7vj.js.map +1 -0
  40. package/dist/_chunks/stale-reload-CCqb62Z3.js +84 -0
  41. package/dist/_chunks/stale-reload-CCqb62Z3.js.map +1 -0
  42. package/dist/_chunks/tracing-DP5djRq5.js +358 -0
  43. package/dist/_chunks/tracing-DP5djRq5.js.map +1 -0
  44. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-C9G6LP0F.js} +7 -20
  45. package/dist/_chunks/use-query-states-C9G6LP0F.js.map +1 -0
  46. package/dist/_chunks/use-segment-params-CIeinIx2.js +151 -0
  47. package/dist/_chunks/use-segment-params-CIeinIx2.js.map +1 -0
  48. package/dist/_chunks/validation-AfEFM5ze.js +84 -0
  49. package/dist/_chunks/validation-AfEFM5ze.js.map +1 -0
  50. package/dist/_chunks/walkers-BbEu2_Pp.js +724 -0
  51. package/dist/_chunks/walkers-BbEu2_Pp.js.map +1 -0
  52. package/dist/_chunks/{format-DviM89f0.js → warnings-CAzunaGo.js} +6 -45
  53. package/dist/_chunks/warnings-CAzunaGo.js.map +1 -0
  54. package/dist/adapters/build-output-helper.d.ts +28 -0
  55. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  56. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  57. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  58. package/dist/adapters/cloudflare-dev.js +73 -0
  59. package/dist/adapters/cloudflare-dev.js.map +1 -0
  60. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  61. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  62. package/dist/adapters/cloudflare-kv-cache.js +95 -0
  63. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  64. package/dist/adapters/cloudflare.d.ts +148 -12
  65. package/dist/adapters/cloudflare.d.ts.map +1 -1
  66. package/dist/adapters/cloudflare.js +142 -38
  67. package/dist/adapters/cloudflare.js.map +1 -1
  68. package/dist/adapters/compress-module.d.ts.map +1 -1
  69. package/dist/adapters/nitro.d.ts +17 -1
  70. package/dist/adapters/nitro.d.ts.map +1 -1
  71. package/dist/adapters/nitro.js +143 -45
  72. package/dist/adapters/nitro.js.map +1 -1
  73. package/dist/adapters/shared.d.ts +16 -0
  74. package/dist/adapters/shared.d.ts.map +1 -0
  75. package/dist/cache/cache-api.d.ts +24 -0
  76. package/dist/cache/cache-api.d.ts.map +1 -0
  77. package/dist/cache/handler-store.d.ts +31 -0
  78. package/dist/cache/handler-store.d.ts.map +1 -0
  79. package/dist/cache/index.d.ts +23 -7
  80. package/dist/cache/index.d.ts.map +1 -1
  81. package/dist/cache/index.js +151 -81
  82. package/dist/cache/index.js.map +1 -1
  83. package/dist/cache/singleflight.d.ts +18 -1
  84. package/dist/cache/singleflight.d.ts.map +1 -1
  85. package/dist/cache/sizeof.d.ts +22 -0
  86. package/dist/cache/sizeof.d.ts.map +1 -0
  87. package/dist/cache/timber-cache.d.ts +1 -1
  88. package/dist/cache/timber-cache.d.ts.map +1 -1
  89. package/dist/cli-schema-sync.d.ts +39 -0
  90. package/dist/cli-schema-sync.d.ts.map +1 -0
  91. package/dist/cli.d.ts +14 -2
  92. package/dist/cli.d.ts.map +1 -1
  93. package/dist/cli.js +48 -6
  94. package/dist/cli.js.map +1 -1
  95. package/dist/client/browser-dev.d.ts +34 -1
  96. package/dist/client/browser-dev.d.ts.map +1 -1
  97. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  98. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  99. package/dist/client/browser-entry/hmr.d.ts +21 -0
  100. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  101. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  102. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  103. package/dist/client/browser-entry/index.d.ts +30 -0
  104. package/dist/client/browser-entry/index.d.ts.map +1 -0
  105. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  106. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  107. package/dist/client/browser-entry/router-init.d.ts +26 -0
  108. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  109. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  110. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  111. package/dist/client/browser-entry/scroll.d.ts +19 -0
  112. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  113. package/dist/client/error-boundary.d.ts +12 -5
  114. package/dist/client/error-boundary.d.ts.map +1 -1
  115. package/dist/client/error-boundary.js +29 -6
  116. package/dist/client/error-boundary.js.map +1 -1
  117. package/dist/client/error-reconstituter.d.ts +54 -0
  118. package/dist/client/error-reconstituter.d.ts.map +1 -0
  119. package/dist/client/form.d.ts +16 -27
  120. package/dist/client/form.d.ts.map +1 -1
  121. package/dist/client/history.d.ts +19 -4
  122. package/dist/client/history.d.ts.map +1 -1
  123. package/dist/client/index.d.ts +10 -24
  124. package/dist/client/index.d.ts.map +1 -1
  125. package/dist/client/index.js +180 -1119
  126. package/dist/client/index.js.map +1 -1
  127. package/dist/client/internal.d.ts +19 -0
  128. package/dist/client/internal.d.ts.map +1 -0
  129. package/dist/client/internal.js +845 -0
  130. package/dist/client/internal.js.map +1 -0
  131. package/dist/client/link-pending-store.d.ts +65 -0
  132. package/dist/client/link-pending-store.d.ts.map +1 -0
  133. package/dist/client/link.d.ts +67 -56
  134. package/dist/client/link.d.ts.map +1 -1
  135. package/dist/client/nav-link-store.d.ts +27 -0
  136. package/dist/client/nav-link-store.d.ts.map +1 -0
  137. package/dist/client/navigation-api-types.d.ts +90 -0
  138. package/dist/client/navigation-api-types.d.ts.map +1 -0
  139. package/dist/client/navigation-api.d.ts +115 -0
  140. package/dist/client/navigation-api.d.ts.map +1 -0
  141. package/dist/client/navigation-context.d.ts +14 -2
  142. package/dist/client/navigation-context.d.ts.map +1 -1
  143. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +46 -9
  144. package/dist/client/navigation-root.d.ts.map +1 -0
  145. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  146. package/dist/client/router-ref.d.ts +1 -1
  147. package/dist/client/router.d.ts +79 -10
  148. package/dist/client/router.d.ts.map +1 -1
  149. package/dist/client/rsc-fetch.d.ts +46 -3
  150. package/dist/client/rsc-fetch.d.ts.map +1 -1
  151. package/dist/client/segment-cache.d.ts +3 -1
  152. package/dist/client/segment-cache.d.ts.map +1 -1
  153. package/dist/client/segment-outlet.d.ts +49 -0
  154. package/dist/client/segment-outlet.d.ts.map +1 -0
  155. package/dist/client/segment-update-context.d.ts +21 -0
  156. package/dist/client/segment-update-context.d.ts.map +1 -0
  157. package/dist/client/shallow-url.d.ts +10 -0
  158. package/dist/client/shallow-url.d.ts.map +1 -0
  159. package/dist/client/ssr-data.d.ts +13 -4
  160. package/dist/client/ssr-data.d.ts.map +1 -1
  161. package/dist/client/stale-reload.d.ts +15 -0
  162. package/dist/client/stale-reload.d.ts.map +1 -1
  163. package/dist/client/state.d.ts +1 -1
  164. package/dist/client/top-loader.d.ts +5 -5
  165. package/dist/client/top-loader.d.ts.map +1 -1
  166. package/dist/client/use-cookie.d.ts +12 -0
  167. package/dist/client/use-cookie.d.ts.map +1 -1
  168. package/dist/client/use-link-status.d.ts +5 -5
  169. package/dist/client/use-link-status.d.ts.map +1 -1
  170. package/dist/client/use-pending-navigation.d.ts +23 -0
  171. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  172. package/dist/client/use-query-states.d.ts +1 -1
  173. package/dist/client/use-query-states.d.ts.map +1 -1
  174. package/dist/client/use-router.d.ts +1 -1
  175. package/dist/client/use-search-params.d.ts +7 -5
  176. package/dist/client/use-search-params.d.ts.map +1 -1
  177. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  178. package/dist/client/use-segment-params.d.ts.map +1 -0
  179. package/dist/codec.d.ts +69 -0
  180. package/dist/codec.d.ts.map +1 -0
  181. package/dist/codec.js +75 -0
  182. package/dist/codec.js.map +1 -0
  183. package/dist/config-types.d.ts +294 -0
  184. package/dist/config-types.d.ts.map +1 -0
  185. package/dist/config-validation.d.ts +51 -0
  186. package/dist/config-validation.d.ts.map +1 -0
  187. package/dist/content/index.d.ts +1 -10
  188. package/dist/content/index.d.ts.map +1 -1
  189. package/dist/content/index.js +0 -2
  190. package/dist/cookies/define-cookie.d.ts +58 -25
  191. package/dist/cookies/define-cookie.d.ts.map +1 -1
  192. package/dist/cookies/index.d.ts +2 -1
  193. package/dist/cookies/index.d.ts.map +1 -1
  194. package/dist/cookies/index.js +251 -36
  195. package/dist/cookies/index.js.map +1 -1
  196. package/dist/cookies/json-cookie.d.ts +64 -0
  197. package/dist/cookies/json-cookie.d.ts.map +1 -0
  198. package/dist/cookies/validation.d.ts +46 -0
  199. package/dist/cookies/validation.d.ts.map +1 -0
  200. package/dist/dev-tools/404-page.d.ts +46 -0
  201. package/dist/dev-tools/404-page.d.ts.map +1 -0
  202. package/dist/dev-tools/browser-logs.d.ts +84 -0
  203. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  204. package/dist/dev-tools/error-page.d.ts +58 -0
  205. package/dist/dev-tools/error-page.d.ts.map +1 -0
  206. package/dist/dev-tools/holding-server.d.ts +54 -0
  207. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  208. package/dist/dev-tools/index.d.ts +31 -0
  209. package/dist/dev-tools/index.d.ts.map +1 -0
  210. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  211. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  212. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  213. package/dist/dev-tools/logger.d.ts.map +1 -0
  214. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  215. package/dist/dev-tools/logs.d.ts.map +1 -0
  216. package/dist/dev-tools/overlay.d.ts +91 -0
  217. package/dist/dev-tools/overlay.d.ts.map +1 -0
  218. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  219. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  220. package/dist/dev-tools/terminal.d.ts +28 -0
  221. package/dist/dev-tools/terminal.d.ts.map +1 -0
  222. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  223. package/dist/dev-tools/warnings.d.ts.map +1 -0
  224. package/dist/fonts/ast.d.ts +98 -6
  225. package/dist/fonts/ast.d.ts.map +1 -1
  226. package/dist/fonts/bundle.d.ts +48 -0
  227. package/dist/fonts/bundle.d.ts.map +1 -0
  228. package/dist/fonts/dev-middleware.d.ts +22 -0
  229. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  230. package/dist/fonts/local.d.ts +1 -1
  231. package/dist/fonts/pipeline.d.ts +167 -0
  232. package/dist/fonts/pipeline.d.ts.map +1 -0
  233. package/dist/fonts/transform.d.ts +78 -0
  234. package/dist/fonts/transform.d.ts.map +1 -0
  235. package/dist/fonts/types.d.ts +45 -1
  236. package/dist/fonts/types.d.ts.map +1 -1
  237. package/dist/fonts/virtual-modules.d.ts +94 -0
  238. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  239. package/dist/index.d.ts +46 -164
  240. package/dist/index.d.ts.map +1 -1
  241. package/dist/index.js +5584 -13386
  242. package/dist/index.js.map +1 -1
  243. package/dist/params/codec-registry.d.ts +26 -0
  244. package/dist/params/codec-registry.d.ts.map +1 -0
  245. package/dist/params/define-schema.d.ts +81 -0
  246. package/dist/params/define-schema.d.ts.map +1 -0
  247. package/dist/params/index.d.ts +5 -0
  248. package/dist/params/index.d.ts.map +1 -0
  249. package/dist/params/index.js +34 -0
  250. package/dist/params/index.js.map +1 -0
  251. package/dist/params/resolve-schema.d.ts +34 -0
  252. package/dist/params/resolve-schema.d.ts.map +1 -0
  253. package/dist/plugin-context.d.ts +107 -0
  254. package/dist/plugin-context.d.ts.map +1 -0
  255. package/dist/plugins/adapter-build.d.ts +1 -1
  256. package/dist/plugins/adapter-build.d.ts.map +1 -1
  257. package/dist/plugins/build-manifest.d.ts +2 -2
  258. package/dist/plugins/build-manifest.d.ts.map +1 -1
  259. package/dist/plugins/build-report.d.ts +9 -7
  260. package/dist/plugins/build-report.d.ts.map +1 -1
  261. package/dist/plugins/client-chunks.d.ts +32 -0
  262. package/dist/plugins/client-chunks.d.ts.map +1 -0
  263. package/dist/plugins/cloudflare-wasm.d.ts +18 -0
  264. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  265. package/dist/plugins/content.d.ts +1 -1
  266. package/dist/plugins/content.d.ts.map +1 -1
  267. package/dist/plugins/dev-server.d.ts +1 -1
  268. package/dist/plugins/dev-server.d.ts.map +1 -1
  269. package/dist/plugins/entries.d.ts +1 -1
  270. package/dist/plugins/entries.d.ts.map +1 -1
  271. package/dist/plugins/fonts.d.ts +17 -73
  272. package/dist/plugins/fonts.d.ts.map +1 -1
  273. package/dist/plugins/mdx.d.ts +1 -1
  274. package/dist/plugins/mdx.d.ts.map +1 -1
  275. package/dist/plugins/routing.d.ts +1 -1
  276. package/dist/plugins/routing.d.ts.map +1 -1
  277. package/dist/plugins/server-bundle.d.ts.map +1 -1
  278. package/dist/plugins/shims.d.ts +6 -5
  279. package/dist/plugins/shims.d.ts.map +1 -1
  280. package/dist/plugins/static-build.d.ts +5 -26
  281. package/dist/plugins/static-build.d.ts.map +1 -1
  282. package/dist/routing/codegen-shared.d.ts +67 -0
  283. package/dist/routing/codegen-shared.d.ts.map +1 -0
  284. package/dist/routing/codegen-types.d.ts +60 -0
  285. package/dist/routing/codegen-types.d.ts.map +1 -0
  286. package/dist/routing/codegen.d.ts +7 -2
  287. package/dist/routing/codegen.d.ts.map +1 -1
  288. package/dist/routing/convention-lint.d.ts +41 -0
  289. package/dist/routing/convention-lint.d.ts.map +1 -0
  290. package/dist/routing/index.d.ts +7 -1
  291. package/dist/routing/index.d.ts.map +1 -1
  292. package/dist/routing/index.js +4 -2
  293. package/dist/routing/link-codegen.d.ts +90 -0
  294. package/dist/routing/link-codegen.d.ts.map +1 -0
  295. package/dist/routing/scanner.d.ts +1 -10
  296. package/dist/routing/scanner.d.ts.map +1 -1
  297. package/dist/routing/schema-validation.d.ts +35 -0
  298. package/dist/routing/schema-validation.d.ts.map +1 -0
  299. package/dist/routing/segment-classify.d.ts +75 -0
  300. package/dist/routing/segment-classify.d.ts.map +1 -0
  301. package/dist/routing/segment-codegen.d.ts +38 -0
  302. package/dist/routing/segment-codegen.d.ts.map +1 -0
  303. package/dist/routing/types.d.ts +77 -25
  304. package/dist/routing/types.d.ts.map +1 -1
  305. package/dist/routing/walkers.d.ts +51 -0
  306. package/dist/routing/walkers.d.ts.map +1 -0
  307. package/dist/rsc-runtime/rsc.d.ts +1 -1
  308. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  309. package/dist/rsc-runtime/ssr.d.ts +12 -0
  310. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  311. package/dist/schema-bridge.d.ts +76 -0
  312. package/dist/schema-bridge.d.ts.map +1 -0
  313. package/dist/search-params/define.d.ts +157 -0
  314. package/dist/search-params/define.d.ts.map +1 -0
  315. package/dist/search-params/index.d.ts +4 -7
  316. package/dist/search-params/index.d.ts.map +1 -1
  317. package/dist/search-params/index.js +34 -441
  318. package/dist/search-params/index.js.map +1 -1
  319. package/dist/search-params/registry.d.ts +2 -2
  320. package/dist/search-params/registry.d.ts.map +1 -1
  321. package/dist/search-params/wrappers.d.ts +53 -0
  322. package/dist/search-params/wrappers.d.ts.map +1 -0
  323. package/dist/segment-params/define.d.ts +89 -0
  324. package/dist/segment-params/define.d.ts.map +1 -0
  325. package/dist/segment-params/index.d.ts +3 -0
  326. package/dist/segment-params/index.d.ts.map +1 -0
  327. package/dist/segment-params/index.js +2 -0
  328. package/dist/server/access-gate.d.ts +8 -3
  329. package/dist/server/access-gate.d.ts.map +1 -1
  330. package/dist/server/action-client.d.ts +41 -6
  331. package/dist/server/action-client.d.ts.map +1 -1
  332. package/dist/server/action-encryption.d.ts +76 -0
  333. package/dist/server/action-encryption.d.ts.map +1 -0
  334. package/dist/server/action-handler.d.ts +35 -1
  335. package/dist/server/action-handler.d.ts.map +1 -1
  336. package/dist/server/actions.d.ts +6 -14
  337. package/dist/server/actions.d.ts.map +1 -1
  338. package/dist/server/als-registry.d.ts +70 -11
  339. package/dist/server/als-registry.d.ts.map +1 -1
  340. package/dist/server/asset-headers.d.ts +1 -15
  341. package/dist/server/asset-headers.d.ts.map +1 -1
  342. package/dist/server/build-manifest.d.ts +8 -2
  343. package/dist/server/build-manifest.d.ts.map +1 -1
  344. package/dist/server/coalesce-tick.d.ts +40 -0
  345. package/dist/server/coalesce-tick.d.ts.map +1 -0
  346. package/dist/server/cookie-context.d.ts +170 -0
  347. package/dist/server/cookie-context.d.ts.map +1 -0
  348. package/dist/server/cookie-parsing.d.ts +51 -0
  349. package/dist/server/cookie-parsing.d.ts.map +1 -0
  350. package/dist/server/debug.d.ts +1 -1
  351. package/dist/server/default-logger.d.ts +22 -0
  352. package/dist/server/default-logger.d.ts.map +1 -0
  353. package/dist/server/deny-boundary.d.ts +90 -0
  354. package/dist/server/deny-boundary.d.ts.map +1 -0
  355. package/dist/server/deny-renderer.d.ts +1 -1
  356. package/dist/server/deny-renderer.d.ts.map +1 -1
  357. package/dist/server/dev-source-map.d.ts +22 -0
  358. package/dist/server/dev-source-map.d.ts.map +1 -0
  359. package/dist/server/early-hints-sender.d.ts.map +1 -1
  360. package/dist/server/early-hints.d.ts +13 -5
  361. package/dist/server/early-hints.d.ts.map +1 -1
  362. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  363. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  364. package/dist/server/fallback-error.d.ts +12 -7
  365. package/dist/server/fallback-error.d.ts.map +1 -1
  366. package/dist/server/flight-injection-state.d.ts +66 -0
  367. package/dist/server/flight-injection-state.d.ts.map +1 -0
  368. package/dist/server/flight-scripts.d.ts +42 -0
  369. package/dist/server/flight-scripts.d.ts.map +1 -0
  370. package/dist/server/flush.d.ts.map +1 -1
  371. package/dist/server/form-data.d.ts +29 -0
  372. package/dist/server/form-data.d.ts.map +1 -1
  373. package/dist/server/html-injector-core.d.ts +213 -0
  374. package/dist/server/html-injector-core.d.ts.map +1 -0
  375. package/dist/server/html-injectors.d.ts +81 -41
  376. package/dist/server/html-injectors.d.ts.map +1 -1
  377. package/dist/server/index.d.ts +10 -46
  378. package/dist/server/index.d.ts.map +1 -1
  379. package/dist/server/index.js +155 -2905
  380. package/dist/server/index.js.map +1 -1
  381. package/dist/server/internal.d.ts +48 -0
  382. package/dist/server/internal.d.ts.map +1 -0
  383. package/dist/server/internal.js +3073 -0
  384. package/dist/server/internal.js.map +1 -0
  385. package/dist/server/logger.d.ts +39 -7
  386. package/dist/server/logger.d.ts.map +1 -1
  387. package/dist/server/metadata-routes.d.ts +23 -7
  388. package/dist/server/metadata-routes.d.ts.map +1 -1
  389. package/dist/server/middleware-runner.d.ts +36 -4
  390. package/dist/server/middleware-runner.d.ts.map +1 -1
  391. package/dist/server/node-stream-transforms.d.ts +112 -0
  392. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  393. package/dist/server/param-coercion.d.ts +54 -0
  394. package/dist/server/param-coercion.d.ts.map +1 -0
  395. package/dist/server/pipeline-helpers.d.ts +95 -0
  396. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  397. package/dist/server/pipeline-interception.d.ts +1 -1
  398. package/dist/server/pipeline-interception.d.ts.map +1 -1
  399. package/dist/server/pipeline-metadata.d.ts +6 -0
  400. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  401. package/dist/server/pipeline-outcome.d.ts +49 -0
  402. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  403. package/dist/server/pipeline-phases.d.ts +52 -0
  404. package/dist/server/pipeline-phases.d.ts.map +1 -0
  405. package/dist/server/pipeline.d.ts +118 -23
  406. package/dist/server/pipeline.d.ts.map +1 -1
  407. package/dist/server/port-resolution.d.ts +117 -0
  408. package/dist/server/port-resolution.d.ts.map +1 -0
  409. package/dist/server/primitives.d.ts +69 -18
  410. package/dist/server/primitives.d.ts.map +1 -1
  411. package/dist/server/render-timeout.d.ts +51 -0
  412. package/dist/server/render-timeout.d.ts.map +1 -0
  413. package/dist/server/request-context.d.ts +62 -107
  414. package/dist/server/request-context.d.ts.map +1 -1
  415. package/dist/server/route-element-builder.d.ts +28 -2
  416. package/dist/server/route-element-builder.d.ts.map +1 -1
  417. package/dist/server/route-handler.d.ts.map +1 -1
  418. package/dist/server/route-matcher.d.ts +25 -36
  419. package/dist/server/route-matcher.d.ts.map +1 -1
  420. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  421. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  422. package/dist/server/rsc-entry/api-handler.d.ts +2 -2
  423. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  424. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  425. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  426. package/dist/server/rsc-entry/helpers.d.ts +50 -6
  427. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  428. package/dist/server/rsc-entry/index.d.ts +19 -8
  429. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  430. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  431. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  432. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  433. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  434. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  435. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  436. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  437. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  438. package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
  439. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  440. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  441. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  442. package/dist/server/safe-load.d.ts +46 -0
  443. package/dist/server/safe-load.d.ts.map +1 -0
  444. package/dist/server/sensitive-fields.d.ts +74 -0
  445. package/dist/server/sensitive-fields.d.ts.map +1 -0
  446. package/dist/server/sitemap-generator.d.ts +129 -0
  447. package/dist/server/sitemap-generator.d.ts.map +1 -0
  448. package/dist/server/sitemap-handler.d.ts +22 -0
  449. package/dist/server/sitemap-handler.d.ts.map +1 -0
  450. package/dist/server/slot-resolver.d.ts +1 -1
  451. package/dist/server/slot-resolver.d.ts.map +1 -1
  452. package/dist/server/ssr-bridge-types.d.ts +121 -0
  453. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  454. package/dist/server/ssr-entry.d.ts +2 -43
  455. package/dist/server/ssr-entry.d.ts.map +1 -1
  456. package/dist/server/ssr-render.d.ts +64 -21
  457. package/dist/server/ssr-render.d.ts.map +1 -1
  458. package/dist/server/ssr-wrappers.d.ts +50 -0
  459. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  460. package/dist/server/state-tree-diff.d.ts +12 -5
  461. package/dist/server/state-tree-diff.d.ts.map +1 -1
  462. package/dist/server/status-code-resolver.d.ts +16 -11
  463. package/dist/server/status-code-resolver.d.ts.map +1 -1
  464. package/dist/server/stream-utils.d.ts +36 -0
  465. package/dist/server/stream-utils.d.ts.map +1 -0
  466. package/dist/server/tracing.d.ts +5 -5
  467. package/dist/server/tracing.d.ts.map +1 -1
  468. package/dist/server/tree-builder.d.ts +62 -30
  469. package/dist/server/tree-builder.d.ts.map +1 -1
  470. package/dist/server/tree-match.d.ts +49 -0
  471. package/dist/server/tree-match.d.ts.map +1 -0
  472. package/dist/server/types.d.ts +49 -4
  473. package/dist/server/types.d.ts.map +1 -1
  474. package/dist/server/utils/escape-html.d.ts +14 -0
  475. package/dist/server/utils/escape-html.d.ts.map +1 -0
  476. package/dist/server/version-skew.d.ts +61 -0
  477. package/dist/server/version-skew.d.ts.map +1 -0
  478. package/dist/shared/merge-search-params.d.ts +22 -0
  479. package/dist/shared/merge-search-params.d.ts.map +1 -0
  480. package/dist/shims/font-google.d.ts +1 -1
  481. package/dist/shims/font-google.d.ts.map +1 -1
  482. package/dist/shims/font-google.js +42 -0
  483. package/dist/shims/font-google.js.map +1 -0
  484. package/dist/shims/font-local.d.ts +26 -0
  485. package/dist/shims/font-local.d.ts.map +1 -0
  486. package/dist/shims/font-local.js +20 -0
  487. package/dist/shims/font-local.js.map +1 -0
  488. package/dist/shims/headers.d.ts +2 -1
  489. package/dist/shims/headers.d.ts.map +1 -1
  490. package/dist/shims/navigation-client.d.ts +3 -1
  491. package/dist/shims/navigation-client.d.ts.map +1 -1
  492. package/dist/shims/navigation.d.ts +11 -5
  493. package/dist/shims/navigation.d.ts.map +1 -1
  494. package/dist/utils/state-machine.d.ts +80 -0
  495. package/dist/utils/state-machine.d.ts.map +1 -0
  496. package/package.json +56 -16
  497. package/src/adapters/build-output-helper.ts +139 -0
  498. package/src/adapters/cloudflare-dev.ts +177 -0
  499. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  500. package/src/adapters/cloudflare.ts +350 -76
  501. package/src/adapters/compress-module.ts +24 -4
  502. package/src/adapters/nitro.ts +142 -59
  503. package/src/adapters/shared.ts +40 -0
  504. package/src/adapters/wrangler.d.ts +7 -0
  505. package/src/cache/cache-api.ts +38 -0
  506. package/src/cache/handler-store.ts +68 -0
  507. package/src/cache/index.ts +81 -18
  508. package/src/cache/singleflight.ts +62 -4
  509. package/src/cache/sizeof.ts +33 -0
  510. package/src/cache/timber-cache.ts +25 -20
  511. package/src/cli-schema-sync.ts +295 -0
  512. package/src/cli.ts +76 -8
  513. package/src/client/browser-dev.ts +153 -1
  514. package/src/client/browser-entry/action-dispatch.ts +125 -0
  515. package/src/client/browser-entry/hmr.ts +81 -0
  516. package/src/client/browser-entry/hydrate.ts +153 -0
  517. package/src/client/browser-entry/index.ts +151 -0
  518. package/src/client/browser-entry/post-hydration.ts +113 -0
  519. package/src/client/browser-entry/router-init.ts +219 -0
  520. package/src/client/browser-entry/rsc-stream.ts +157 -0
  521. package/src/client/browser-entry/scroll.ts +27 -0
  522. package/src/client/error-boundary.tsx +99 -22
  523. package/src/client/error-reconstituter.tsx +65 -0
  524. package/src/client/form.tsx +31 -32
  525. package/src/client/history.ts +26 -4
  526. package/src/client/index.ts +66 -45
  527. package/src/client/internal.ts +58 -0
  528. package/src/client/link-pending-store.ts +116 -0
  529. package/src/client/link.tsx +336 -119
  530. package/src/client/nav-link-store.ts +37 -0
  531. package/src/client/navigation-api-types.ts +112 -0
  532. package/src/client/navigation-api.ts +332 -0
  533. package/src/client/navigation-context.ts +33 -7
  534. package/src/client/navigation-root.tsx +347 -0
  535. package/src/client/nuqs-adapter.tsx +16 -3
  536. package/src/client/router-ref.ts +1 -1
  537. package/src/client/router.ts +418 -128
  538. package/src/client/rsc-fetch.ts +208 -10
  539. package/src/client/segment-cache.ts +6 -3
  540. package/src/client/segment-outlet.tsx +77 -0
  541. package/src/client/segment-update-context.ts +42 -0
  542. package/src/client/shallow-url.ts +22 -0
  543. package/src/client/ssr-data.ts +13 -5
  544. package/src/client/stale-reload.ts +72 -3
  545. package/src/client/state.ts +2 -2
  546. package/src/client/top-loader.tsx +11 -9
  547. package/src/client/use-cookie.ts +31 -2
  548. package/src/client/use-link-status.ts +7 -7
  549. package/src/client/use-pending-navigation.ts +40 -0
  550. package/src/client/use-query-states.ts +9 -3
  551. package/src/client/use-router.ts +1 -1
  552. package/src/client/use-search-params.ts +25 -44
  553. package/src/client/{use-params.ts → use-segment-params.ts} +8 -6
  554. package/src/codec.ts +147 -0
  555. package/src/config-types.ts +292 -0
  556. package/src/config-validation.ts +303 -0
  557. package/src/content/index.ts +5 -13
  558. package/src/cookies/define-cookie.ts +233 -53
  559. package/src/cookies/index.ts +12 -1
  560. package/src/cookies/json-cookie.ts +105 -0
  561. package/src/cookies/validation.ts +134 -0
  562. package/src/dev-tools/404-page.ts +387 -0
  563. package/src/dev-tools/browser-logs.ts +291 -0
  564. package/src/dev-tools/error-page.ts +506 -0
  565. package/src/dev-tools/holding-server.ts +187 -0
  566. package/src/dev-tools/index.ts +90 -0
  567. package/src/dev-tools/instrumentation.ts +176 -0
  568. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  569. package/src/dev-tools/overlay.ts +469 -0
  570. package/src/dev-tools/stack-classifier.ts +75 -0
  571. package/src/dev-tools/terminal.ts +183 -0
  572. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
  573. package/src/fonts/ast.ts +525 -16
  574. package/src/fonts/bundle.ts +142 -0
  575. package/src/fonts/dev-middleware.ts +74 -0
  576. package/src/fonts/local.ts +1 -1
  577. package/src/fonts/pipeline.ts +314 -0
  578. package/src/fonts/transform.ts +317 -0
  579. package/src/fonts/types.ts +50 -1
  580. package/src/fonts/virtual-modules.ts +233 -0
  581. package/src/index.ts +411 -329
  582. package/src/params/codec-registry.ts +34 -0
  583. package/src/params/define-schema.ts +114 -0
  584. package/src/params/index.ts +17 -0
  585. package/src/params/resolve-schema.ts +116 -0
  586. package/src/plugin-context.ts +240 -0
  587. package/src/plugins/adapter-build.ts +12 -4
  588. package/src/plugins/build-manifest.ts +69 -6
  589. package/src/plugins/build-report.ts +16 -25
  590. package/src/plugins/client-chunks.ts +65 -0
  591. package/src/plugins/cloudflare-wasm.ts +103 -0
  592. package/src/plugins/content.ts +1 -1
  593. package/src/plugins/dev-server.ts +179 -37
  594. package/src/plugins/entries.ts +111 -8
  595. package/src/plugins/fonts.ts +165 -654
  596. package/src/plugins/mdx.ts +47 -10
  597. package/src/plugins/routing.ts +386 -47
  598. package/src/plugins/server-bundle.ts +59 -3
  599. package/src/plugins/shims.ts +136 -35
  600. package/src/plugins/static-build.ts +15 -89
  601. package/src/routing/codegen-shared.ts +115 -0
  602. package/src/routing/codegen-types.ts +61 -0
  603. package/src/routing/codegen.ts +321 -177
  604. package/src/routing/convention-lint.ts +357 -0
  605. package/src/routing/index.ts +10 -1
  606. package/src/routing/interception.ts +1 -1
  607. package/src/routing/link-codegen.ts +308 -0
  608. package/src/routing/scanner.ts +165 -110
  609. package/src/routing/schema-validation.ts +149 -0
  610. package/src/routing/segment-classify.ts +188 -0
  611. package/src/routing/segment-codegen.ts +98 -0
  612. package/src/routing/types.ts +78 -25
  613. package/src/routing/walkers.ts +90 -0
  614. package/src/rsc-runtime/rsc.ts +2 -0
  615. package/src/rsc-runtime/ssr.ts +50 -0
  616. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  617. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  618. package/src/search-params/define.ts +538 -0
  619. package/src/search-params/index.ts +14 -20
  620. package/src/search-params/registry.ts +2 -2
  621. package/src/search-params/wrappers.ts +92 -0
  622. package/src/segment-params/define.ts +309 -0
  623. package/src/segment-params/index.ts +9 -0
  624. package/src/server/access-gate.tsx +76 -34
  625. package/src/server/action-client.ts +88 -15
  626. package/src/server/action-encryption.ts +144 -0
  627. package/src/server/action-handler.ts +112 -14
  628. package/src/server/actions.ts +14 -23
  629. package/src/server/als-registry.ts +108 -20
  630. package/src/server/asset-headers.ts +8 -34
  631. package/src/server/build-manifest.ts +17 -4
  632. package/src/server/coalesce-tick.ts +75 -0
  633. package/src/server/compress.ts +25 -7
  634. package/src/server/cookie-context.ts +468 -0
  635. package/src/server/cookie-parsing.ts +135 -0
  636. package/src/server/debug.ts +1 -1
  637. package/src/server/default-logger.ts +99 -0
  638. package/src/server/deny-boundary.ts +218 -0
  639. package/src/server/deny-renderer.ts +32 -51
  640. package/src/server/dev-source-map.ts +31 -0
  641. package/src/server/early-hints-sender.ts +3 -2
  642. package/src/server/early-hints.ts +36 -15
  643. package/src/server/error-boundary-wrapper.ts +74 -22
  644. package/src/server/fallback-error.ts +74 -102
  645. package/src/server/flight-injection-state.ts +113 -0
  646. package/src/server/flight-scripts.ts +62 -0
  647. package/src/server/flush.ts +2 -1
  648. package/src/server/form-data.ts +101 -5
  649. package/src/server/html-injector-core.ts +417 -0
  650. package/src/server/html-injectors.ts +235 -223
  651. package/src/server/index.ts +29 -183
  652. package/src/server/internal.ts +182 -0
  653. package/src/server/logger.ts +67 -36
  654. package/src/server/metadata-routes.ts +44 -19
  655. package/src/server/middleware-runner.ts +75 -4
  656. package/src/server/node-stream-transforms.ts +361 -0
  657. package/src/server/param-coercion.ts +206 -0
  658. package/src/server/pipeline-helpers.ts +204 -0
  659. package/src/server/pipeline-interception.ts +31 -18
  660. package/src/server/pipeline-metadata.ts +13 -0
  661. package/src/server/pipeline-outcome.ts +197 -0
  662. package/src/server/pipeline-phases.ts +497 -0
  663. package/src/server/pipeline.ts +194 -394
  664. package/src/server/port-resolution.ts +215 -0
  665. package/src/server/primitives.ts +111 -28
  666. package/src/server/render-timeout.ts +108 -0
  667. package/src/server/request-context.ts +168 -337
  668. package/src/server/route-element-builder.ts +435 -208
  669. package/src/server/route-handler.ts +24 -4
  670. package/src/server/route-matcher.ts +128 -277
  671. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  672. package/src/server/rsc-entry/api-handler.ts +16 -17
  673. package/src/server/rsc-entry/error-renderer.ts +315 -89
  674. package/src/server/rsc-entry/helpers.ts +155 -26
  675. package/src/server/rsc-entry/index.ts +316 -327
  676. package/src/server/rsc-entry/render-route.ts +313 -0
  677. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  678. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  679. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  680. package/src/server/rsc-entry/ssr-renderer.ts +195 -41
  681. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  682. package/src/server/safe-load.ts +60 -0
  683. package/src/server/sensitive-fields.ts +230 -0
  684. package/src/server/sitemap-generator.ts +338 -0
  685. package/src/server/sitemap-handler.ts +126 -0
  686. package/src/server/slot-resolver.ts +228 -246
  687. package/src/server/ssr-bridge-types.ts +124 -0
  688. package/src/server/ssr-entry.ts +217 -78
  689. package/src/server/ssr-render.ts +344 -71
  690. package/src/server/ssr-wrappers.tsx +139 -0
  691. package/src/server/state-tree-diff.ts +30 -23
  692. package/src/server/status-code-resolver.ts +112 -128
  693. package/src/server/stream-utils.ts +213 -0
  694. package/src/server/tracing.ts +21 -10
  695. package/src/server/tree-builder.ts +202 -90
  696. package/src/server/tree-match.ts +210 -0
  697. package/src/server/types.ts +55 -6
  698. package/src/server/utils/escape-html.ts +20 -0
  699. package/src/server/version-skew.ts +104 -0
  700. package/src/shared/merge-search-params.ts +55 -0
  701. package/src/shims/font-google.ts +1 -1
  702. package/src/shims/font-local.ts +34 -0
  703. package/src/shims/headers.ts +5 -1
  704. package/src/shims/navigation-client.ts +4 -3
  705. package/src/shims/navigation.ts +14 -7
  706. package/src/utils/state-machine.ts +111 -0
  707. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  708. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  709. package/dist/_chunks/debug-gwlJkDuf.js +0 -108
  710. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  711. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  712. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  713. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  714. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  715. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  716. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  717. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  718. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  719. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  720. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  721. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  722. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  723. package/dist/cache/register-cached-function.d.ts +0 -17
  724. package/dist/cache/register-cached-function.d.ts.map +0 -1
  725. package/dist/client/browser-entry.d.ts +0 -21
  726. package/dist/client/browser-entry.d.ts.map +0 -1
  727. package/dist/client/link-status-provider.d.ts +0 -11
  728. package/dist/client/link-status-provider.d.ts.map +0 -1
  729. package/dist/client/segment-merger.d.ts +0 -119
  730. package/dist/client/segment-merger.d.ts.map +0 -1
  731. package/dist/client/transition-root.d.ts.map +0 -1
  732. package/dist/client/use-navigation-pending.d.ts +0 -26
  733. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  734. package/dist/client/use-params.d.ts.map +0 -1
  735. package/dist/plugins/cache-transform.d.ts +0 -36
  736. package/dist/plugins/cache-transform.d.ts.map +0 -1
  737. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  738. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  739. package/dist/plugins/dev-logs.d.ts.map +0 -1
  740. package/dist/plugins/dynamic-transform.d.ts +0 -72
  741. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  742. package/dist/plugins/server-action-exports.d.ts +0 -26
  743. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  744. package/dist/routing/status-file-lint.d.ts +0 -33
  745. package/dist/routing/status-file-lint.d.ts.map +0 -1
  746. package/dist/search-params/analyze.d.ts +0 -54
  747. package/dist/search-params/analyze.d.ts.map +0 -1
  748. package/dist/search-params/builtin-codecs.d.ts +0 -105
  749. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  750. package/dist/search-params/codecs.d.ts +0 -53
  751. package/dist/search-params/codecs.d.ts.map +0 -1
  752. package/dist/search-params/create.d.ts +0 -106
  753. package/dist/search-params/create.d.ts.map +0 -1
  754. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  755. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  756. package/dist/server/dev-logger.d.ts.map +0 -1
  757. package/dist/server/dev-span-processor.d.ts.map +0 -1
  758. package/dist/server/dev-warnings.d.ts.map +0 -1
  759. package/dist/server/manifest-status-resolver.d.ts +0 -58
  760. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  761. package/dist/server/prerender.d.ts +0 -77
  762. package/dist/server/prerender.d.ts.map +0 -1
  763. package/dist/utils/directive-parser.d.ts +0 -70
  764. package/dist/utils/directive-parser.d.ts.map +0 -1
  765. package/src/cache/register-cached-function.ts +0 -103
  766. package/src/client/browser-entry.ts +0 -678
  767. package/src/client/link-status-provider.tsx +0 -30
  768. package/src/client/segment-merger.ts +0 -339
  769. package/src/client/transition-root.tsx +0 -166
  770. package/src/client/use-navigation-pending.ts +0 -38
  771. package/src/plugins/cache-transform.ts +0 -199
  772. package/src/plugins/dev-error-overlay.ts +0 -230
  773. package/src/plugins/dynamic-transform.ts +0 -161
  774. package/src/plugins/server-action-exports.ts +0 -220
  775. package/src/routing/status-file-lint.ts +0 -112
  776. package/src/search-params/analyze.ts +0 -192
  777. package/src/search-params/builtin-codecs.ts +0 -228
  778. package/src/search-params/create.ts +0 -321
  779. package/src/server/dev-fetch-instrumentation.ts +0 -96
  780. package/src/server/dev-span-processor.ts +0 -78
  781. package/src/server/manifest-status-resolver.ts +0 -215
  782. package/src/server/prerender.ts +0 -139
  783. package/src/utils/directive-parser.ts +0 -529
  784. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -16,16 +16,52 @@
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
  *
@@ -40,9 +76,9 @@ type CreateElementFn = (...args: unknown[]) => React.ReactElement;
40
76
  export async function resolveSlotElement(
41
77
  slotNode: ManifestSegmentNode,
42
78
  match: RouteMatch,
43
- paramsPromise: Promise<Record<string, string | string[]>>,
44
79
  h: CreateElementFn,
45
- interception?: InterceptionContext
80
+ interception?: InterceptionContext,
81
+ parentTreePath?: string
46
82
  ): Promise<React.ReactElement | null> {
47
83
  // When interception is active, try to match intercepting children in this
48
84
  // slot against the target pathname. If an intercepting child matches, render
@@ -54,125 +90,84 @@ export async function resolveSlotElement(
54
90
  : findSlotMatch(slotNode, match);
55
91
 
56
92
  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;
93
+ // Store per-slot params in ALS so getSegmentParams(segmentPath) returns
94
+ // the slot's own param types (e.g. catch-all → string[] vs dynamic → string).
95
+ if (parentTreePath && Object.keys(slotMatch.slotParams).length > 0) {
96
+ // Build the full tree path: parent prefix + slot chain segment names.
97
+ const slotSuffix = slotMatch.chain
98
+ .map((s) => s.segmentName)
99
+ .filter(Boolean)
100
+ .join('/');
101
+ const prefix = parentTreePath === '/' ? '' : parentTreePath;
102
+ const fullSlotPath = `${prefix}/${slotSuffix}`;
103
+
104
+ // Coerce slot params through global schema codecs (same as main route).
105
+ const coerced = coerceSlotParams(slotMatch.chain, slotMatch.slotParams);
106
+ setSlotParams(fullSlotPath, coerced);
107
+ }
60
108
 
109
+ const SlotPage = await loadComponent(slotMatch.page);
110
+ if (SlotPage) {
61
111
  // Load default.tsx fallback for notFound() handling in the slot page.
62
112
  // When a slot page calls notFound() or deny(), it should gracefully
63
113
  // degrade to default.tsx or null — not crash the page. This matches
64
114
  // Next.js behavior. See design/02-rendering-pipeline.md
65
115
  // §"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;
116
+ const denyFallback = await renderDefaultFallback(slotNode, h);
117
+
118
+ // Build the slot page element.
119
+ // Client references ('use client' pages) must NOT be called as functions —
120
+ // they are proxy objects that throw when invoked. For client references,
121
+ // use createElement directly. Error catching is unnecessary because client
122
+ // references are serialized as references in the RSC Flight stream — they
123
+ // don't execute on the server. See TIM-627.
124
+ //
125
+ // For server components, wrap in SafeSlotPage to catch ALL errors at the
126
+ // component level. This prevents errors from leaving unresolved Flight
127
+ // rows in the RSC stream — see TIM-524 for details.
128
+ let element: React.ReactElement;
129
+ if (isClientReference(SlotPage)) {
130
+ element = h(SlotPage, {});
131
+ } else {
132
+ const SafeSlotPage = async (props: Record<string, unknown>) => {
133
+ try {
134
+ return await (SlotPage as (props: Record<string, unknown>) => unknown)(props);
135
+ } catch (error) {
136
+ // RedirectSignal must propagate — the pipeline handles redirects
137
+ // at the top level. Swallowing it here would silently return
138
+ // fallback content instead of redirecting. See TIM-554.
139
+ if (error instanceof RedirectSignal) {
140
+ throw error;
141
+ }
142
+ if (error instanceof DenySignal) {
143
+ return denyFallback;
144
+ }
145
+ // Log the error but don't re-throw — returning fallback ensures
146
+ // the Flight row is resolved and the page hydrates correctly.
147
+ logRenderError({
148
+ method: '',
149
+ path: '',
150
+ error,
151
+ });
152
+ return denyFallback;
87
153
  }
88
- throw error;
89
- }
90
- };
91
-
92
- let element: React.ReactElement = h(SafeSlotPage, {
93
- params: paramsPromise,
94
- searchParams: {},
95
- });
154
+ };
155
+ element = h(SafeSlotPage, {});
156
+ }
96
157
 
97
158
  // Wrap with error boundaries and layouts from intermediate slot segments
98
159
  // (everything between slot root and leaf). Process innermost-first, same
99
160
  // order as route-element-builder.ts handles main segments. The slot root
100
161
  // (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
- }
162
+ element = await wrapWithIntermediateSegments(slotMatch.chain, element, h);
120
163
 
121
164
  // Wrap in SlotAccessGate if slot root has access.ts.
122
165
  // On denial: denied.tsx → default.tsx → null (graceful degradation).
123
166
  // 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, {});
139
- }
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: {} });
149
- }
150
- }
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
- }
162
- }
167
+ element = await wrapWithAccessGate(slotNode, element, h);
163
168
 
164
169
  // 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
- }
170
+ element = await wrapWithLayout(slotNode, element, h);
176
171
 
177
172
  // Wrap with slot root's error boundaries (outermost)
178
173
  element = await wrapSegmentWithErrorBoundaries(slotNode, element, h);
@@ -180,7 +175,7 @@ export async function resolveSlotElement(
180
175
  // Catch-all error boundary: ensures slot errors NEVER propagate to the
181
176
  // parent layout. Without this, a slot without error.tsx that throws
182
177
  // causes SSR's renderToReadableStream to reject, triggering renderDenyPage
183
- // which re-executes all layout server components (including headers() calls
178
+ // which re-executes all layout server components (including getHeaders() calls
184
179
  // that fail in the SSR environment). The null fallback means the slot
185
180
  // degrades to nothing — consistent with the slot access denial behavior.
186
181
  // See design/02-rendering-pipeline.md §"Slot Access Failure = Graceful Degradation"
@@ -195,24 +190,89 @@ export async function resolveSlotElement(
195
190
  }
196
191
 
197
192
  // 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
- }
193
+ return renderDefaultFallback(slotNode, h);
194
+ }
195
+
196
+ // ─── Element Wrapping Helpers ───────────────────────────────────────────────
197
+
198
+ /**
199
+ * Wrap an element with error boundaries and layouts from intermediate
200
+ * slot segments (indices 1..n, skipping the slot root at index 0).
201
+ * Processes innermost-first to match route-element-builder.ts ordering.
202
+ */
203
+ async function wrapWithIntermediateSegments(
204
+ chain: ManifestSegmentNode[],
205
+ element: React.ReactElement,
206
+ h: CreateElementFn
207
+ ): Promise<React.ReactElement> {
208
+ for (let i = chain.length - 1; i > 0; i--) {
209
+ const seg = chain[i];
210
+ element = await wrapSegmentWithErrorBoundaries(seg, element, h);
211
+ element = await wrapWithLayout(seg, element, h);
204
212
  }
213
+ return element;
214
+ }
205
215
 
206
- // No page and no default — slot renders nothing
207
- return null;
216
+ /**
217
+ * Wrap an element with a segment's layout component, if present.
218
+ */
219
+ async function wrapWithLayout(
220
+ node: ManifestSegmentNode,
221
+ element: React.ReactElement,
222
+ h: CreateElementFn
223
+ ): Promise<React.ReactElement> {
224
+ if (!node.layout) return element;
225
+ const Layout = await loadComponent(node.layout);
226
+ if (!Layout) return element;
227
+ return h(Layout, { children: element });
228
+ }
229
+
230
+ /**
231
+ * Wrap an element with a SlotAccessGate if the node has access.ts.
232
+ * On denial: denied.tsx → default.tsx → null (graceful degradation).
233
+ */
234
+ async function wrapWithAccessGate(
235
+ slotNode: ManifestSegmentNode,
236
+ element: React.ReactElement,
237
+ h: CreateElementFn
238
+ ): Promise<React.ReactElement> {
239
+ if (!slotNode.access) return element;
240
+
241
+ const accessFn = await loadComponent(slotNode.access);
242
+ if (!accessFn) return element;
243
+
244
+ // Pass the component (not pre-built element) so SlotAccessGate can
245
+ // forward DenySignal.data as dangerouslyPassData dynamically. See TIM-488.
246
+ let DeniedComponent: ((...args: unknown[]) => unknown) | null = null;
247
+ if (slotNode.denied) {
248
+ DeniedComponent = (await loadComponent(slotNode.denied)) ?? null;
249
+ }
250
+
251
+ // Extract slot name from the directory name (strip @ prefix)
252
+ const slotName = slotNode.segmentName?.replace(/^@/, '') ?? '';
253
+
254
+ const defaultFallback = await renderDefaultFallback(slotNode, h);
255
+
256
+ return h(SlotAccessGate, {
257
+ accessFn,
258
+ DeniedComponent,
259
+ slotName,
260
+ createElement: h,
261
+ defaultFallback,
262
+ children: element,
263
+ });
208
264
  }
209
265
 
266
+ // ─── Slot Matching ──────────────────────────────────────────────────────────
267
+
210
268
  /** Result of matching a slot's sub-tree against the current route. */
211
269
  interface SlotMatchResult {
212
270
  /** The page file at the matched leaf. */
213
271
  page: NonNullable<ManifestSegmentNode['page']>;
214
272
  /** The full chain of slot nodes traversed (slot root → … → leaf with page). */
215
273
  chain: ManifestSegmentNode[];
274
+ /** Params collected from the slot's segment chain (may differ from main route params). */
275
+ slotParams: Record<string, string | string[]>;
216
276
  }
217
277
 
218
278
  /**
@@ -231,7 +291,7 @@ interface SlotMatchResult {
231
291
  * to find the deepest matching page.
232
292
  */
233
293
  function findSlotMatch(slotNode: ManifestSegmentNode, match: RouteMatch): SlotMatchResult | null {
234
- const segments = match.segments as unknown as ManifestSegmentNode[];
294
+ const segments = match.segments;
235
295
 
236
296
  // Find the parent segment that owns this slot by comparing urlPaths.
237
297
  // The slot's urlPath matches its parent's urlPath (slots don't add URL depth).
@@ -253,90 +313,54 @@ function findSlotMatch(slotNode: ManifestSegmentNode, match: RouteMatch): SlotMa
253
313
  // against the slot's children.
254
314
  const remainingSegments = parentIndex >= 0 ? segments.slice(parentIndex + 1) : [];
255
315
 
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
- }
316
+ // Extract raw URL parts from the remaining main-route segments.
317
+ // Use rawSegmentParams (pre-coercion) to ensure we get actual URL strings,
318
+ // not codec-transformed values. Fall back to segmentParams for tests/compat.
319
+ const rawParams = match.rawSegmentParams ?? match.segmentParams ?? {};
320
+ const urlParts = extractUrlParts(remainingSegments, rawParams);
269
321
 
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
- }
322
+ // Match URL parts against the slot's segment tree using the shared walker.
323
+ // Handles zero parts (slot's own page), catch-all, optional-catch-all,
324
+ // groups, backtracking, and correct priority ordering.
325
+ const result = matchUrlParts(slotNode, urlParts);
326
+ if (!result) return null;
286
327
 
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
- }
328
+ const leaf = result.chain[result.chain.length - 1];
329
+ if (!leaf.page) return null;
296
330
 
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
- }
331
+ return { page: leaf.page, chain: result.chain, slotParams: result.params };
332
+ }
312
333
 
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
- }
334
+ /**
335
+ * Extract raw URL path parts from a main-route segment chain.
336
+ *
337
+ * Each dynamic segment consumed one URL part (its param value).
338
+ * Static segments consumed their own name. Groups are transparent.
339
+ * Catch-all segments consumed multiple parts (their param value is string[]).
340
+ *
341
+ * Uses rawSegmentParams (pre-coercion) to get actual URL strings.
342
+ * Values are coerced to String() defensively in case a codec leaked
343
+ * a non-string value into the params map.
344
+ */
345
+ function extractUrlParts(
346
+ segments: ManifestSegmentNode[],
347
+ mainParams: Record<string, string | string[]>
348
+ ): string[] {
349
+ const parts: string[] = [];
350
+ for (const seg of segments) {
351
+ if (seg.segmentType === 'group') continue;
352
+ if (seg.segmentType === 'static') {
353
+ parts.push(seg.segmentName);
354
+ } else if (seg.paramName) {
355
+ const value = mainParams[seg.paramName];
356
+ if (Array.isArray(value)) {
357
+ parts.push(...value.map(String));
358
+ } else if (value !== undefined) {
359
+ parts.push(String(value));
325
360
  }
326
361
  }
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
362
  }
339
- return null;
363
+ return parts;
340
364
  }
341
365
 
342
366
  /**
@@ -372,61 +396,19 @@ function findInterceptingMatch(
372
396
  }
373
397
  if (matchIdx < 0) continue;
374
398
 
375
- // Walk the intercepting child's sub-tree to match remaining target parts
399
+ // Match remaining target parts against the intercepting child's sub-tree.
376
400
  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
- }
401
+ const result = matchUrlParts(child, remaining);
402
+ if (result) {
403
+ const leaf = result.chain[result.chain.length - 1];
404
+ if (leaf.page) {
405
+ return {
406
+ page: leaf.page,
407
+ // Prepend slotNode — matchUrlParts starts from child, not slot root
408
+ chain: [slotNode, ...result.chain],
409
+ slotParams: result.params,
410
+ };
398
411
  }
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
412
  }
431
413
  }
432
414