@timber-js/app 0.2.0-alpha.185 → 0.2.0-alpha.187

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 (570) hide show
  1. package/dist/_chunks/{actions-O_LsyCE4.js → actions-35jnMdeJ.js} +4 -3
  2. package/dist/_chunks/{actions-O_LsyCE4.js.map → actions-35jnMdeJ.js.map} +1 -1
  3. package/dist/_chunks/als-registry-C6kcfprT.js +41 -0
  4. package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -0
  5. package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
  6. package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
  7. package/dist/_chunks/base-path-DaQrzbez.js +80 -0
  8. package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
  9. package/dist/_chunks/build-manifest-DWppEdLB.js +86 -0
  10. package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
  11. package/dist/_chunks/build-output-helper-C3DrfzZR.js +369 -0
  12. package/dist/_chunks/build-output-helper-C3DrfzZR.js.map +1 -0
  13. package/dist/_chunks/{cache-api-B-lhk9p4.js → cache-api-DjNrIWRR.js} +8 -14
  14. package/dist/_chunks/cache-api-DjNrIWRR.js.map +1 -0
  15. package/dist/_chunks/cli-check-CpmN7Nh-.js +256 -0
  16. package/dist/_chunks/cli-check-CpmN7Nh-.js.map +1 -0
  17. package/dist/_chunks/cli-schema-sync-CGMp_Psg.js +298 -0
  18. package/dist/_chunks/cli-schema-sync-CGMp_Psg.js.map +1 -0
  19. package/dist/_chunks/{cloudflare-CnT5Lr7U.js → cloudflare-CGP6BZKO.js} +92 -14
  20. package/dist/_chunks/{cloudflare-CnT5Lr7U.js.map → cloudflare-CGP6BZKO.js.map} +1 -1
  21. package/dist/_chunks/convention-lint-kXsgc_-7.js +784 -0
  22. package/dist/_chunks/convention-lint-kXsgc_-7.js.map +1 -0
  23. package/dist/_chunks/error-boundary-D-ODYX41.js +353 -0
  24. package/dist/_chunks/error-boundary-D-ODYX41.js.map +1 -0
  25. package/dist/_chunks/{fast-hash-D6hIVt1Y.js → fast-hash-C-tVYrLb.js} +6 -1
  26. package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
  27. package/dist/_chunks/file-cache-DmX7OqZP.js +454 -0
  28. package/dist/_chunks/file-cache-DmX7OqZP.js.map +1 -0
  29. package/dist/_chunks/fs-identity-D7vb6GdI.js +208 -0
  30. package/dist/_chunks/fs-identity-D7vb6GdI.js.map +1 -0
  31. package/dist/_chunks/{logger-AWfuX-KJ.js → logger-D8xJZXIN.js} +34 -51
  32. package/dist/_chunks/logger-D8xJZXIN.js.map +1 -0
  33. package/dist/_chunks/mdx-file-C005ay-P.js +25 -0
  34. package/dist/_chunks/mdx-file-C005ay-P.js.map +1 -0
  35. package/dist/_chunks/{plugin-context---kTF5v8.js → plugin-context-rCinWLiE.js} +8 -2
  36. package/dist/_chunks/plugin-context-rCinWLiE.js.map +1 -0
  37. package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
  38. package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
  39. package/dist/_chunks/{resolve-schema-Dz3fcFUo.js → resolve-schema-5ma5pp1b.js} +2 -2
  40. package/dist/_chunks/{resolve-schema-Dz3fcFUo.js.map → resolve-schema-5ma5pp1b.js.map} +1 -1
  41. package/dist/_chunks/{router-ref-CtmF-aPv.js → router-ref-DuYuV_0Q.js} +2 -2
  42. package/dist/_chunks/router-ref-DuYuV_0Q.js.map +1 -0
  43. package/dist/_chunks/rsc-cache-key-DD0fl_-s.js +243 -0
  44. package/dist/_chunks/rsc-cache-key-DD0fl_-s.js.map +1 -0
  45. package/dist/_chunks/rsc-error-envelope-tT5PJs4q.js +40 -0
  46. package/dist/_chunks/rsc-error-envelope-tT5PJs4q.js.map +1 -0
  47. package/dist/_chunks/rsc-media-type-DRqE_lD_.js +46 -0
  48. package/dist/_chunks/rsc-media-type-DRqE_lD_.js.map +1 -0
  49. package/dist/_chunks/rsc-payload-path-B_LBodc2.js +48 -0
  50. package/dist/_chunks/rsc-payload-path-B_LBodc2.js.map +1 -0
  51. package/dist/_chunks/scanner-C8b0Gcw3.js +1564 -0
  52. package/dist/_chunks/scanner-C8b0Gcw3.js.map +1 -0
  53. package/dist/_chunks/schema-bridge-Cc2Gngu1.js +199 -0
  54. package/dist/_chunks/schema-bridge-Cc2Gngu1.js.map +1 -0
  55. package/dist/_chunks/{segment-classify-Byy425ng.js → segment-classify-C539Pa2O.js} +23 -2
  56. package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
  57. package/dist/_chunks/segment-context-CjOlyB8Y.js +97 -0
  58. package/dist/_chunks/segment-context-CjOlyB8Y.js.map +1 -0
  59. package/dist/_chunks/{canonicalize-DQHyFClh.js → segment-keys-BawYuNFO.js} +61 -2
  60. package/dist/_chunks/segment-keys-BawYuNFO.js.map +1 -0
  61. package/dist/_chunks/slot-params-BCTmZkQB.js +76 -0
  62. package/dist/_chunks/slot-params-BCTmZkQB.js.map +1 -0
  63. package/dist/_chunks/{ssr-data-BOWsq18U.js → ssr-data-14MXm7Pj.js} +17 -2
  64. package/dist/_chunks/ssr-data-14MXm7Pj.js.map +1 -0
  65. package/dist/_chunks/{use-query-states-DFvWd-EA.js → use-query-states-BbU5Ge1V.js} +74 -26
  66. package/dist/_chunks/use-query-states-BbU5Ge1V.js.map +1 -0
  67. package/dist/_chunks/use-segment-params-C4r4BD9T.js +398 -0
  68. package/dist/_chunks/use-segment-params-C4r4BD9T.js.map +1 -0
  69. package/dist/_chunks/walkers-RzN6AFjr.js +141 -0
  70. package/dist/_chunks/walkers-RzN6AFjr.js.map +1 -0
  71. package/dist/adapters/build-output-helper.d.ts +37 -0
  72. package/dist/adapters/build-output-helper.d.ts.map +1 -1
  73. package/dist/adapters/cloudflare-dev.js +1 -1
  74. package/dist/adapters/cloudflare-kv-cache.js +1 -1
  75. package/dist/adapters/cloudflare.d.ts.map +1 -1
  76. package/dist/adapters/cloudflare.js +1 -1
  77. package/dist/adapters/compress-module.d.ts +12 -0
  78. package/dist/adapters/compress-module.d.ts.map +1 -1
  79. package/dist/adapters/fs-identity.d.ts +64 -0
  80. package/dist/adapters/fs-identity.d.ts.map +1 -0
  81. package/dist/adapters/nitro.d.ts.map +1 -1
  82. package/dist/adapters/nitro.js +56 -5
  83. package/dist/adapters/nitro.js.map +1 -1
  84. package/dist/adapters/shared.d.ts +57 -1
  85. package/dist/adapters/shared.d.ts.map +1 -1
  86. package/dist/adapters/types.d.ts +13 -1
  87. package/dist/adapters/types.d.ts.map +1 -1
  88. package/dist/cache/fast-hash.d.ts +5 -0
  89. package/dist/cache/fast-hash.d.ts.map +1 -1
  90. package/dist/cache/index.js +1 -1
  91. package/dist/cdn/cloudflare-purge.js +30 -0
  92. package/dist/cdn/cloudflare-purge.js.map +1 -0
  93. package/dist/cdn/fastly-purge.js +33 -0
  94. package/dist/cdn/fastly-purge.js.map +1 -0
  95. package/dist/cdn/index.js +94 -0
  96. package/dist/cdn/index.js.map +1 -0
  97. package/dist/cdn/workers-cache-purge.js +35 -0
  98. package/dist/cdn/workers-cache-purge.js.map +1 -0
  99. package/dist/cli-check.d.ts +153 -0
  100. package/dist/cli-check.d.ts.map +1 -0
  101. package/dist/cli.d.ts +34 -8
  102. package/dist/cli.d.ts.map +1 -1
  103. package/dist/cli.js +46 -21
  104. package/dist/cli.js.map +1 -1
  105. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -1
  106. package/dist/client/browser-entry/hydrate.d.ts +20 -9
  107. package/dist/client/browser-entry/hydrate.d.ts.map +1 -1
  108. package/dist/client/browser-entry/index.d.ts +1 -1
  109. package/dist/client/browser-entry/index.d.ts.map +1 -1
  110. package/dist/client/browser-entry/post-hydration.d.ts +4 -1
  111. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -1
  112. package/dist/client/browser-entry/router-init.d.ts +3 -0
  113. package/dist/client/browser-entry/router-init.d.ts.map +1 -1
  114. package/dist/client/browser-entry/rsc-stream.d.ts +8 -0
  115. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -1
  116. package/dist/client/error-boundary.d.ts +7 -0
  117. package/dist/client/error-boundary.d.ts.map +1 -1
  118. package/dist/client/error-boundary.js +1 -162
  119. package/dist/client/history.d.ts +13 -6
  120. package/dist/client/history.d.ts.map +1 -1
  121. package/dist/client/index.d.ts +1 -0
  122. package/dist/client/index.d.ts.map +1 -1
  123. package/dist/client/index.js +42 -41
  124. package/dist/client/index.js.map +1 -1
  125. package/dist/client/internal.d.ts +4 -3
  126. package/dist/client/internal.d.ts.map +1 -1
  127. package/dist/client/internal.js +877 -311
  128. package/dist/client/internal.js.map +1 -1
  129. package/dist/client/link.d.ts +1 -7
  130. package/dist/client/link.d.ts.map +1 -1
  131. package/dist/client/navigation-api.d.ts +2 -2
  132. package/dist/client/navigation-commit.d.ts +87 -0
  133. package/dist/client/navigation-commit.d.ts.map +1 -0
  134. package/dist/client/navigation-context.d.ts +37 -20
  135. package/dist/client/navigation-context.d.ts.map +1 -1
  136. package/dist/client/navigation-root.d.ts +63 -23
  137. package/dist/client/navigation-root.d.ts.map +1 -1
  138. package/dist/client/params-context.d.ts +81 -0
  139. package/dist/client/params-context.d.ts.map +1 -0
  140. package/dist/client/router-effects.d.ts +129 -0
  141. package/dist/client/router-effects.d.ts.map +1 -0
  142. package/dist/client/router-lifecycle.d.ts +55 -0
  143. package/dist/client/router-lifecycle.d.ts.map +1 -0
  144. package/dist/client/router-pipeline.d.ts +84 -0
  145. package/dist/client/router-pipeline.d.ts.map +1 -0
  146. package/dist/client/router-ref.d.ts +1 -1
  147. package/dist/client/router-ref.d.ts.map +1 -1
  148. package/dist/client/router-skew.d.ts +21 -0
  149. package/dist/client/router-skew.d.ts.map +1 -0
  150. package/dist/client/router-types.d.ts +207 -0
  151. package/dist/client/router-types.d.ts.map +1 -0
  152. package/dist/client/router.d.ts +1 -182
  153. package/dist/client/router.d.ts.map +1 -1
  154. package/dist/client/rsc-fetch.d.ts +47 -26
  155. package/dist/client/rsc-fetch.d.ts.map +1 -1
  156. package/dist/client/segment-cache.d.ts +87 -34
  157. package/dist/client/segment-cache.d.ts.map +1 -1
  158. package/dist/client/ssr-data.d.ts +6 -0
  159. package/dist/client/ssr-data.d.ts.map +1 -1
  160. package/dist/client/stale-client.d.ts +69 -0
  161. package/dist/client/stale-client.d.ts.map +1 -0
  162. package/dist/client/state.d.ts +10 -1
  163. package/dist/client/state.d.ts.map +1 -1
  164. package/dist/client/top-loader.d.ts +2 -1
  165. package/dist/client/top-loader.d.ts.map +1 -1
  166. package/dist/client/unload-guard.d.ts +5 -0
  167. package/dist/client/unload-guard.d.ts.map +1 -1
  168. package/dist/client/use-cookie.d.ts.map +1 -1
  169. package/dist/client/use-query-states.d.ts +9 -3
  170. package/dist/client/use-query-states.d.ts.map +1 -1
  171. package/dist/client/use-router.d.ts +1 -1
  172. package/dist/client/use-segment-params.d.ts +18 -8
  173. package/dist/client/use-segment-params.d.ts.map +1 -1
  174. package/dist/codec.js +1 -1
  175. package/dist/cookies/define-cookie.d.ts.map +1 -1
  176. package/dist/cookies/index.js +5 -5
  177. package/dist/cookies/index.js.map +1 -1
  178. package/dist/index.d.ts +4 -1
  179. package/dist/index.d.ts.map +1 -1
  180. package/dist/index.js +1009 -759
  181. package/dist/index.js.map +1 -1
  182. package/dist/params/index.js +1 -1
  183. package/dist/plugin-context.d.ts +46 -0
  184. package/dist/plugin-context.d.ts.map +1 -1
  185. package/dist/plugins/adapter-build.d.ts.map +1 -1
  186. package/dist/plugins/build-manifest.d.ts +1 -1
  187. package/dist/plugins/build-manifest.d.ts.map +1 -1
  188. package/dist/plugins/entries.d.ts.map +1 -1
  189. package/dist/plugins/fonts.d.ts.map +1 -1
  190. package/dist/plugins/request-dep/analysis.d.ts +106 -0
  191. package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
  192. package/dist/plugins/request-dep/index.d.ts +75 -0
  193. package/dist/plugins/request-dep/index.d.ts.map +1 -0
  194. package/dist/plugins/request-dep/origin.d.ts +61 -0
  195. package/dist/plugins/request-dep/origin.d.ts.map +1 -0
  196. package/dist/plugins/routing.d.ts.map +1 -1
  197. package/dist/plugins/shims.d.ts.map +1 -1
  198. package/dist/plugins/static-build.d.ts +160 -8
  199. package/dist/plugins/static-build.d.ts.map +1 -1
  200. package/dist/routing/codegen-shared.d.ts +3 -44
  201. package/dist/routing/codegen-shared.d.ts.map +1 -1
  202. package/dist/routing/codegen-types.d.ts +28 -31
  203. package/dist/routing/codegen-types.d.ts.map +1 -1
  204. package/dist/routing/codegen-write.d.ts +51 -0
  205. package/dist/routing/codegen-write.d.ts.map +1 -0
  206. package/dist/routing/codegen.d.ts.map +1 -1
  207. package/dist/routing/collision-probe.d.ts +104 -0
  208. package/dist/routing/collision-probe.d.ts.map +1 -0
  209. package/dist/routing/collision-spaces.d.ts +26 -0
  210. package/dist/routing/collision-spaces.d.ts.map +1 -0
  211. package/dist/routing/convention-lint.d.ts +18 -4
  212. package/dist/routing/convention-lint.d.ts.map +1 -1
  213. package/dist/routing/export-detect.d.ts +16 -0
  214. package/dist/routing/export-detect.d.ts.map +1 -1
  215. package/dist/routing/index.js +4 -3
  216. package/dist/routing/interception.d.ts +235 -6
  217. package/dist/routing/interception.d.ts.map +1 -1
  218. package/dist/routing/link-codegen.d.ts +19 -4
  219. package/dist/routing/link-codegen.d.ts.map +1 -1
  220. package/dist/routing/manifest-codegen.d.ts +1 -7
  221. package/dist/routing/manifest-codegen.d.ts.map +1 -1
  222. package/dist/routing/scanner.d.ts.map +1 -1
  223. package/dist/routing/segment-classify.d.ts +33 -0
  224. package/dist/routing/segment-classify.d.ts.map +1 -1
  225. package/dist/routing/segment-keys.d.ts +95 -0
  226. package/dist/routing/segment-keys.d.ts.map +1 -0
  227. package/dist/routing/slot-placement.d.ts +48 -0
  228. package/dist/routing/slot-placement.d.ts.map +1 -0
  229. package/dist/routing/types.d.ts +0 -6
  230. package/dist/routing/types.d.ts.map +1 -1
  231. package/dist/routing/walkers.d.ts +6 -0
  232. package/dist/routing/walkers.d.ts.map +1 -1
  233. package/dist/schema-bridge.d.ts +60 -9
  234. package/dist/schema-bridge.d.ts.map +1 -1
  235. package/dist/search-params/define.d.ts +62 -14
  236. package/dist/search-params/define.d.ts.map +1 -1
  237. package/dist/search-params/index.d.ts +0 -1
  238. package/dist/search-params/index.d.ts.map +1 -1
  239. package/dist/search-params/index.js +221 -10
  240. package/dist/search-params/index.js.map +1 -1
  241. package/dist/search-params/parse-total.d.ts +70 -0
  242. package/dist/search-params/parse-total.d.ts.map +1 -0
  243. package/dist/search-params/wrappers.d.ts +26 -3
  244. package/dist/search-params/wrappers.d.ts.map +1 -1
  245. package/dist/server/access-gate.d.ts +19 -8
  246. package/dist/server/access-gate.d.ts.map +1 -1
  247. package/dist/server/action-handler.d.ts.map +1 -1
  248. package/dist/server/actions.d.ts +6 -3
  249. package/dist/server/actions.d.ts.map +1 -1
  250. package/dist/server/als-registry.d.ts +18 -1
  251. package/dist/server/als-registry.d.ts.map +1 -1
  252. package/dist/server/build-manifest.d.ts +13 -1
  253. package/dist/server/build-manifest.d.ts.map +1 -1
  254. package/dist/server/chain-url-parts.d.ts +82 -0
  255. package/dist/server/chain-url-parts.d.ts.map +1 -0
  256. package/dist/server/children-interception.d.ts +49 -0
  257. package/dist/server/children-interception.d.ts.map +1 -0
  258. package/dist/server/compress.d.ts.map +1 -1
  259. package/dist/server/default-status-page.d.ts +45 -0
  260. package/dist/server/default-status-page.d.ts.map +1 -0
  261. package/dist/server/deny-boundary.d.ts +148 -15
  262. package/dist/server/deny-boundary.d.ts.map +1 -1
  263. package/dist/server/deny-renderer.d.ts +15 -4
  264. package/dist/server/deny-renderer.d.ts.map +1 -1
  265. package/dist/server/error-boundary-wrapper.d.ts +85 -15
  266. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  267. package/dist/server/head-response.d.ts +35 -0
  268. package/dist/server/head-response.d.ts.map +1 -0
  269. package/dist/server/index.d.ts +0 -1
  270. package/dist/server/index.d.ts.map +1 -1
  271. package/dist/server/index.js +3 -2
  272. package/dist/server/index.js.map +1 -1
  273. package/dist/server/internal.d.ts +3 -1
  274. package/dist/server/internal.d.ts.map +1 -1
  275. package/dist/server/internal.js +712 -418
  276. package/dist/server/internal.js.map +1 -1
  277. package/dist/server/metadata-collector.d.ts +52 -0
  278. package/dist/server/metadata-collector.d.ts.map +1 -0
  279. package/dist/server/param-coercion.d.ts +22 -6
  280. package/dist/server/param-coercion.d.ts.map +1 -1
  281. package/dist/server/pipeline-helpers.d.ts +0 -18
  282. package/dist/server/pipeline-helpers.d.ts.map +1 -1
  283. package/dist/server/pipeline-interception.d.ts +59 -9
  284. package/dist/server/pipeline-interception.d.ts.map +1 -1
  285. package/dist/server/pipeline-outcome.d.ts.map +1 -1
  286. package/dist/server/pipeline-phases.d.ts.map +1 -1
  287. package/dist/server/pipeline.d.ts +11 -0
  288. package/dist/server/pipeline.d.ts.map +1 -1
  289. package/dist/server/primitives.d.ts +23 -0
  290. package/dist/server/primitives.d.ts.map +1 -1
  291. package/dist/server/publish-params.d.ts +33 -0
  292. package/dist/server/publish-params.d.ts.map +1 -0
  293. package/dist/server/request-context.d.ts +48 -0
  294. package/dist/server/request-context.d.ts.map +1 -1
  295. package/dist/server/route-element-builder.d.ts +22 -3
  296. package/dist/server/route-element-builder.d.ts.map +1 -1
  297. package/dist/server/route-handler.d.ts.map +1 -1
  298. package/dist/server/route-matcher.d.ts +13 -0
  299. package/dist/server/route-matcher.d.ts.map +1 -1
  300. package/dist/server/rsc-cache-key-guard.d.ts +78 -0
  301. package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
  302. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  303. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -1
  304. package/dist/server/rsc-entry/error-renderer.d.ts +15 -3
  305. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  306. package/dist/server/rsc-entry/helpers.d.ts +2 -17
  307. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  308. package/dist/server/rsc-entry/index.d.ts +0 -1
  309. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  310. package/dist/server/rsc-entry/render-route.d.ts.map +1 -1
  311. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -1
  312. package/dist/server/rsc-entry/rsc-payload.d.ts +1 -2
  313. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  314. package/dist/server/rsc-entry/rsc-stream.d.ts +15 -2
  315. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  316. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  317. package/dist/server/skippable-prefix.d.ts +23 -0
  318. package/dist/server/skippable-prefix.d.ts.map +1 -0
  319. package/dist/server/slot-interception.d.ts +80 -0
  320. package/dist/server/slot-interception.d.ts.map +1 -0
  321. package/dist/server/slot-resolver.d.ts +70 -8
  322. package/dist/server/slot-resolver.d.ts.map +1 -1
  323. package/dist/server/ssr-bridge-types.d.ts +17 -0
  324. package/dist/server/ssr-bridge-types.d.ts.map +1 -1
  325. package/dist/server/ssr-entry.d.ts +0 -1
  326. package/dist/server/ssr-entry.d.ts.map +1 -1
  327. package/dist/server/ssr-wrappers.d.ts +24 -13
  328. package/dist/server/ssr-wrappers.d.ts.map +1 -1
  329. package/dist/server/state-tree-diff.d.ts +6 -27
  330. package/dist/server/state-tree-diff.d.ts.map +1 -1
  331. package/dist/server/static-generator.d.ts +6 -0
  332. package/dist/server/static-generator.d.ts.map +1 -1
  333. package/dist/server/static-not-found.d.ts +52 -0
  334. package/dist/server/static-not-found.d.ts.map +1 -0
  335. package/dist/server/status-code-resolver.d.ts +8 -1
  336. package/dist/server/status-code-resolver.d.ts.map +1 -1
  337. package/dist/server/tree-builder.d.ts +28 -36
  338. package/dist/server/tree-builder.d.ts.map +1 -1
  339. package/dist/server/types.d.ts +12 -7
  340. package/dist/server/types.d.ts.map +1 -1
  341. package/dist/server/utils/element-type.d.ts +40 -0
  342. package/dist/server/utils/element-type.d.ts.map +1 -0
  343. package/dist/shared/als-slots.d.ts +41 -0
  344. package/dist/shared/als-slots.d.ts.map +1 -0
  345. package/dist/shared/base-path.d.ts +56 -0
  346. package/dist/shared/base-path.d.ts.map +1 -0
  347. package/dist/shared/param-value.d.ts +80 -0
  348. package/dist/shared/param-value.d.ts.map +1 -0
  349. package/dist/shared/payload-root.d.ts +108 -0
  350. package/dist/shared/payload-root.d.ts.map +1 -0
  351. package/dist/shared/rsc-cache-key.d.ts +163 -0
  352. package/dist/shared/rsc-cache-key.d.ts.map +1 -0
  353. package/dist/shared/rsc-error-envelope.d.ts +25 -0
  354. package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
  355. package/dist/shared/rsc-manifest.d.ts +28 -0
  356. package/dist/shared/rsc-manifest.d.ts.map +1 -0
  357. package/dist/shared/rsc-media-type.d.ts +40 -0
  358. package/dist/shared/rsc-media-type.d.ts.map +1 -0
  359. package/dist/shared/rsc-payload-path.d.ts +42 -0
  360. package/dist/shared/rsc-payload-path.d.ts.map +1 -0
  361. package/dist/shared/segment-info.d.ts +59 -0
  362. package/dist/shared/segment-info.d.ts.map +1 -0
  363. package/dist/shared/slot-params.d.ts +51 -0
  364. package/dist/shared/slot-params.d.ts.map +1 -0
  365. package/dist/shared/static-platform-files.d.ts +71 -0
  366. package/dist/shared/static-platform-files.d.ts.map +1 -0
  367. package/docs/api/30-api-server.mdx +1 -1
  368. package/docs/api/31-api-client.mdx +4 -2
  369. package/docs/api/33-api-search-params.mdx +38 -16
  370. package/docs/api/35-api-typescript.mdx +3 -3
  371. package/docs/api/36-cli.mdx +34 -7
  372. package/docs/learn/00-introduction.mdx +1 -1
  373. package/docs/learn/02-pages-and-layouts.mdx +2 -2
  374. package/docs/learn/05-typed-params.mdx +8 -8
  375. package/docs/learn/07-typed-routes.mdx +12 -7
  376. package/docs/learn/11-error-handling.mdx +18 -0
  377. package/docs/learn/12-client-navigation.mdx +2 -2
  378. package/docs/learn/14-deploying.mdx +23 -0
  379. package/docs/more/01-advanced-routing.mdx +173 -3
  380. package/docs/more/03-coming-from-nextjs.mdx +2 -2
  381. package/docs/more/04-metadata-and-fonts.mdx +1 -1
  382. package/docs/more/50-ai-agent-instructions.mdx +6 -4
  383. package/package.json +9 -6
  384. package/src/adapters/build-output-helper.ts +116 -3
  385. package/src/adapters/cloudflare.ts +90 -12
  386. package/src/adapters/compress-module.ts +79 -1
  387. package/src/adapters/fs-identity.ts +156 -0
  388. package/src/adapters/nitro.ts +6 -6
  389. package/src/adapters/shared.ts +196 -21
  390. package/src/adapters/types.ts +13 -1
  391. package/src/cache/fast-hash.ts +5 -0
  392. package/src/cli-check.ts +458 -0
  393. package/src/cli.ts +59 -24
  394. package/src/client/browser-entry/action-dispatch.ts +11 -5
  395. package/src/client/browser-entry/hydrate.ts +40 -29
  396. package/src/client/browser-entry/index.ts +15 -6
  397. package/src/client/browser-entry/post-hydration.ts +10 -9
  398. package/src/client/browser-entry/router-init.ts +104 -48
  399. package/src/client/browser-entry/rsc-stream.ts +11 -2
  400. package/src/client/error-boundary.tsx +85 -16
  401. package/src/client/history.ts +13 -6
  402. package/src/client/index.ts +14 -3
  403. package/src/client/internal.ts +4 -3
  404. package/src/client/link.tsx +120 -72
  405. package/src/client/navigation-api.ts +3 -3
  406. package/src/client/navigation-commit.ts +197 -0
  407. package/src/client/navigation-context.ts +40 -67
  408. package/src/client/navigation-root.tsx +326 -101
  409. package/src/client/params-context.ts +192 -0
  410. package/src/client/router-effects.ts +231 -0
  411. package/src/client/router-lifecycle.ts +288 -0
  412. package/src/client/router-pipeline.ts +393 -0
  413. package/src/client/router-ref.ts +1 -1
  414. package/src/client/router-skew.ts +30 -0
  415. package/src/client/router-types.ts +230 -0
  416. package/src/client/router.ts +243 -707
  417. package/src/client/rsc-fetch.ts +183 -106
  418. package/src/client/segment-cache.ts +129 -44
  419. package/src/client/ssr-data.ts +6 -0
  420. package/src/client/stale-client.ts +191 -0
  421. package/src/client/state.ts +14 -1
  422. package/src/client/top-loader.tsx +2 -1
  423. package/src/client/unload-guard.ts +34 -2
  424. package/src/client/use-cookie.ts +9 -2
  425. package/src/client/use-query-states.ts +102 -39
  426. package/src/client/use-router.ts +1 -1
  427. package/src/client/use-segment-params.ts +41 -18
  428. package/src/cookies/define-cookie.ts +6 -1
  429. package/src/index.ts +25 -4
  430. package/src/plugin-context.ts +58 -0
  431. package/src/plugins/adapter-build.ts +4 -0
  432. package/src/plugins/build-manifest.ts +34 -13
  433. package/src/plugins/entries.ts +4 -0
  434. package/src/plugins/fonts.ts +11 -8
  435. package/src/plugins/request-dep/analysis.ts +447 -0
  436. package/src/plugins/request-dep/index.ts +376 -0
  437. package/src/plugins/request-dep/origin.ts +310 -0
  438. package/src/plugins/routing.ts +97 -102
  439. package/src/plugins/shims.ts +0 -1
  440. package/src/plugins/static-build.ts +391 -95
  441. package/src/routing/codegen-shared.ts +3 -79
  442. package/src/routing/codegen-types.ts +28 -31
  443. package/src/routing/codegen-write.ts +139 -0
  444. package/src/routing/codegen.ts +86 -172
  445. package/src/routing/collision-probe.ts +438 -0
  446. package/src/routing/collision-spaces.ts +281 -0
  447. package/src/routing/convention-lint.ts +139 -40
  448. package/src/routing/export-detect.ts +151 -7
  449. package/src/routing/interception.ts +896 -50
  450. package/src/routing/link-codegen.ts +32 -65
  451. package/src/routing/manifest-codegen.ts +6 -62
  452. package/src/routing/scanner.ts +117 -92
  453. package/src/routing/segment-classify.ts +57 -0
  454. package/src/routing/segment-keys.ts +146 -0
  455. package/src/routing/slot-placement.ts +97 -0
  456. package/src/routing/types.ts +0 -6
  457. package/src/routing/walkers.ts +8 -0
  458. package/src/schema-bridge.ts +180 -58
  459. package/src/search-params/define.ts +108 -66
  460. package/src/search-params/index.ts +0 -1
  461. package/src/search-params/parse-total.ts +78 -0
  462. package/src/search-params/wrappers.ts +60 -11
  463. package/src/server/access-gate.tsx +60 -40
  464. package/src/server/action-handler.ts +4 -5
  465. package/src/server/actions.ts +6 -3
  466. package/src/server/als-registry.ts +18 -1
  467. package/src/server/build-manifest.ts +14 -1
  468. package/src/server/chain-url-parts.ts +163 -0
  469. package/src/server/children-interception.ts +115 -0
  470. package/src/server/compress.ts +9 -1
  471. package/src/server/default-status-page.ts +127 -0
  472. package/src/server/deny-boundary.ts +269 -41
  473. package/src/server/deny-renderer.ts +111 -39
  474. package/src/server/error-boundary-wrapper.ts +166 -79
  475. package/src/server/head-response.ts +54 -0
  476. package/src/server/index.ts +1 -3
  477. package/src/server/internal.ts +2 -2
  478. package/src/server/metadata-collector.ts +115 -0
  479. package/src/server/param-coercion.ts +51 -69
  480. package/src/server/pipeline-helpers.ts +2 -47
  481. package/src/server/pipeline-interception.ts +81 -32
  482. package/src/server/pipeline-outcome.ts +4 -5
  483. package/src/server/pipeline-phases.ts +77 -25
  484. package/src/server/pipeline.ts +57 -10
  485. package/src/server/prebuilt-runtime.ts +4 -4
  486. package/src/server/primitives.ts +25 -0
  487. package/src/server/publish-params.ts +42 -0
  488. package/src/server/request-context.ts +97 -18
  489. package/src/server/route-element-builder.ts +241 -253
  490. package/src/server/route-handler.ts +8 -8
  491. package/src/server/route-matcher.ts +21 -9
  492. package/src/server/rsc-cache-key-guard.ts +164 -0
  493. package/src/server/rsc-entry/api-handler.ts +6 -8
  494. package/src/server/rsc-entry/deny-fallback.ts +3 -2
  495. package/src/server/rsc-entry/error-renderer.ts +94 -35
  496. package/src/server/rsc-entry/helpers.ts +33 -28
  497. package/src/server/rsc-entry/index.ts +36 -33
  498. package/src/server/rsc-entry/render-route.ts +18 -10
  499. package/src/server/rsc-entry/revalidate-renderer.ts +3 -2
  500. package/src/server/rsc-entry/rsc-payload.ts +113 -40
  501. package/src/server/rsc-entry/rsc-stream.ts +29 -5
  502. package/src/server/rsc-entry/ssr-renderer.ts +38 -22
  503. package/src/server/skippable-prefix.ts +92 -0
  504. package/src/server/slot-interception.ts +168 -0
  505. package/src/server/slot-resolver.ts +263 -158
  506. package/src/server/ssr-bridge-types.ts +18 -0
  507. package/src/server/ssr-entry.ts +20 -10
  508. package/src/server/ssr-wrappers.tsx +33 -32
  509. package/src/server/state-tree-diff.ts +14 -55
  510. package/src/server/static-generator.ts +68 -29
  511. package/src/server/static-not-found.ts +134 -0
  512. package/src/server/status-code-resolver.ts +28 -11
  513. package/src/server/tree-builder.ts +35 -218
  514. package/src/server/types.ts +12 -7
  515. package/src/server/utils/element-type.ts +72 -0
  516. package/src/shared/als-slots.ts +72 -0
  517. package/src/shared/base-path.ts +80 -0
  518. package/src/shared/param-value.ts +244 -0
  519. package/src/shared/payload-root.ts +151 -0
  520. package/src/shared/rsc-cache-key.ts +269 -0
  521. package/src/shared/rsc-error-envelope.ts +31 -0
  522. package/src/shared/rsc-manifest.ts +29 -0
  523. package/src/shared/rsc-media-type.ts +43 -0
  524. package/src/shared/rsc-payload-path.ts +45 -0
  525. package/src/shared/segment-info.ts +60 -0
  526. package/src/shared/slot-params.ts +111 -0
  527. package/src/shared/static-platform-files.ts +75 -0
  528. package/dist/_chunks/build-output-helper-DOGYFb_X.js +0 -196
  529. package/dist/_chunks/build-output-helper-DOGYFb_X.js.map +0 -1
  530. package/dist/_chunks/cache-api-B-lhk9p4.js.map +0 -1
  531. package/dist/_chunks/canonicalize-DQHyFClh.js.map +0 -1
  532. package/dist/_chunks/cli-schema-sync-BTWEKJXo.js +0 -668
  533. package/dist/_chunks/cli-schema-sync-BTWEKJXo.js.map +0 -1
  534. package/dist/_chunks/define-COtkxMRT.js +0 -191
  535. package/dist/_chunks/define-COtkxMRT.js.map +0 -1
  536. package/dist/_chunks/define-c4au4I9R.js +0 -82
  537. package/dist/_chunks/define-c4au4I9R.js.map +0 -1
  538. package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +0 -1
  539. package/dist/_chunks/logger-AWfuX-KJ.js.map +0 -1
  540. package/dist/_chunks/navigation-root-bUDZLw74.js +0 -124
  541. package/dist/_chunks/navigation-root-bUDZLw74.js.map +0 -1
  542. package/dist/_chunks/plugin-context---kTF5v8.js.map +0 -1
  543. package/dist/_chunks/registry-DbJPKoBp.js +0 -20
  544. package/dist/_chunks/registry-DbJPKoBp.js.map +0 -1
  545. package/dist/_chunks/router-ref-CtmF-aPv.js.map +0 -1
  546. package/dist/_chunks/schema-bridge-DT_Tn0Xf.js +0 -119
  547. package/dist/_chunks/schema-bridge-DT_Tn0Xf.js.map +0 -1
  548. package/dist/_chunks/segment-classify-Byy425ng.js.map +0 -1
  549. package/dist/_chunks/segment-context-ZDnXDkbz.js +0 -34
  550. package/dist/_chunks/segment-context-ZDnXDkbz.js.map +0 -1
  551. package/dist/_chunks/ssr-data-BOWsq18U.js.map +0 -1
  552. package/dist/_chunks/use-query-states-DFvWd-EA.js.map +0 -1
  553. package/dist/_chunks/use-segment-params-D1CzlgBo.js +0 -151
  554. package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +0 -1
  555. package/dist/_chunks/walkers-_6zKFlch.js +0 -1002
  556. package/dist/_chunks/walkers-_6zKFlch.js.map +0 -1
  557. package/dist/client/error-boundary.js.map +0 -1
  558. package/dist/plugins/request-dep.d.ts +0 -32
  559. package/dist/plugins/request-dep.d.ts.map +0 -1
  560. package/dist/search-params/registry.d.ts +0 -20
  561. package/dist/search-params/registry.d.ts.map +0 -1
  562. package/dist/segment-params/define.d.ts +0 -89
  563. package/dist/segment-params/define.d.ts.map +0 -1
  564. package/dist/segment-params/index.d.ts +0 -3
  565. package/dist/segment-params/index.d.ts.map +0 -1
  566. package/dist/segment-params/index.js +0 -2
  567. package/src/plugins/request-dep.ts +0 -499
  568. package/src/search-params/registry.ts +0 -31
  569. package/src/segment-params/define.ts +0 -249
  570. package/src/segment-params/index.ts +0 -9
@@ -12,13 +12,8 @@ import { existsSync } from 'node:fs';
12
12
  import { join, relative } from 'node:path';
13
13
  import type { RouteTree, SegmentNode } from './types.js';
14
14
  import type { ParamEntry, RouteEntry } from './codegen-types.js';
15
- import {
16
- buildCodecChainType,
17
- buildSchemaParamType,
18
- emitResolveSegmentFieldHelper,
19
- formatSearchParamsType,
20
- } from './codegen-shared.js';
21
- import { fileHasExport } from './export-detect.js';
15
+ import { buildSchemaParamType } from './codegen-shared.js';
16
+ import { effectiveUrlSegment, type UrlSegmentIdentity } from './segment-classify.js';
22
17
  import { formatLinkCatchAllOverloads, formatTypedLinkOverloads } from './link-codegen.js';
23
18
 
24
19
  /** Options for route map generation. */
@@ -49,7 +44,7 @@ export function generateRouteMap(tree: RouteTree, options: CodegenOptions = {}):
49
44
  const hasSchema = options.hasSchema ?? detectSchema(options.appDir);
50
45
 
51
46
  const routes: RouteEntry[] = [];
52
- collectRoutes(tree.root, [], [], '', routes, hasSchema, false);
47
+ collectRoutes(tree.root, [], '', routes, hasSchema, false);
53
48
 
54
49
  // Sort routes alphabetically for deterministic output
55
50
  routes.sort((a, b) => a.urlPath.localeCompare(b.urlPath));
@@ -80,124 +75,99 @@ function detectSchema(appDir: string | undefined): boolean {
80
75
  function collectRoutes(
81
76
  node: SegmentNode,
82
77
  ancestorParams: ParamEntry[],
83
- ancestorParamsFiles: string[],
84
78
  parentTreePath: string,
85
79
  routes: RouteEntry[],
86
80
  hasSchema: boolean,
87
- insideSlot: boolean
81
+ insideSlot: boolean,
82
+ insideIntercepting = false
88
83
  ): void {
89
84
  // Build the tree path (includes groups, slots — uniquely identifies this segment).
90
85
  // Root node has empty segmentName, producing treePath = ''.
91
86
  const treePath = node.segmentName ? `${parentTreePath}/${node.segmentName}` : parentTreePath;
92
- // TIM-834: Identify this segment's own params.ts (if it has a
93
- // segmentParams export). The full chain of params.ts files in the
94
- // route ancestry is threaded down via `ancestorParamsFiles`; codec
95
- // resolution for each ParamEntry is deferred until leaf time so that
96
- // descendant params.ts files can override ancestor codecs (closest-
97
- // to-leaf wins, matching the runtime semantics of
98
- // coerceSegmentParams which walks segments top-down and overwrites
99
- // earlier coercions).
100
- const ownParamsFile =
101
- node.params && fileHasExport(node.params.filePath, 'segmentParams')
102
- ? node.params.filePath
103
- : undefined;
104
-
105
- // Accumulate params from this segment. We attach `codecFilePaths`
106
- // later (at leaf time) using the FULL chain so descendant overrides
107
- // are visible. The legacy layout/page fallback is recorded now
108
- // because it is per-segment (and does not participate in inheritance).
87
+ // Accumulate params from this segment.
88
+ //
89
+ // The segment is read through `effectiveUrlSegment` for the same reason the
90
+ // runtime coercer is: an intercepting node's own `segmentType` is
91
+ // 'intercepting' and its `paramName` is unset — the param it binds lives in
92
+ // the intercepted name (`(.)[albumSlug]` → `[albumSlug]`). Reading the node
93
+ // directly emitted `{}` for a segment the router does bind and coerce, so
94
+ // the types disagreed with the values for every intercepting page with a
95
+ // dynamic intercepted segment, and for its descendants, which lost the
96
+ // ancestor param too.
97
+ const urlSegment = effectiveUrlSegment(node);
109
98
  const params = [...ancestorParams];
110
- if (node.paramName) {
111
- const legacyFallback = ownParamsFile ? undefined : findLegacyParamsExport(node);
99
+ if (urlSegment.paramName) {
112
100
  params.push({
113
- name: node.paramName,
114
- bracketName: bracketNameForSegment(node),
115
- type: paramTypeForSegment(node.segmentType),
116
- // Codec chain populated at leaf time. We carry the per-segment
117
- // legacy fallback (if any) so leaf-time resolution can fall back
118
- // to it when no params.ts in the chain declares this key.
119
- legacyCodecFilePath: legacyFallback,
101
+ name: urlSegment.paramName,
102
+ bracketName: bracketNameForSegment(urlSegment),
103
+ type: paramTypeForSegment(urlSegment.segmentType),
120
104
  });
121
105
  }
122
106
 
123
- // Extend the chain for descendants of this segment.
124
- const nextAncestorFiles = ownParamsFile
125
- ? [...ancestorParamsFiles, ownParamsFile]
126
- : ancestorParamsFiles;
127
-
128
107
  // Check if this segment is a leaf route (has page or route file)
129
108
  const isPage = !!node.page;
130
109
  const isApiRoute = !!node.route;
131
110
 
132
- if (isPage || isApiRoute) {
133
- // TIM-834 P1 fix: at LEAF time, the full chain of params.ts files
134
- // (root-to-leaf) is known. Resolve every ParamEntry's
135
- // `codecFilePaths` to the chain in LEAF-FIRST order so the
136
- // closest-to-leaf entry is checked first — matching runtime
137
- // closest-wins semantics. The chain is shared by all params in the
138
- // route, so we compute it once.
139
- const leafFirstChain = nextAncestorFiles.length > 0 ? [...nextAncestorFiles].reverse() : [];
140
- const resolvedParams: ParamEntry[] = params.map((p) => {
141
- const codecFilePaths =
142
- leafFirstChain.length > 0
143
- ? leafFirstChain
144
- : p.legacyCodecFilePath
145
- ? [p.legacyCodecFilePath]
146
- : undefined;
147
- return {
148
- name: p.name,
149
- bracketName: p.bracketName,
150
- type: p.type,
151
- codecFilePaths,
152
- };
153
- });
154
-
111
+ // A segment that hosts code but is not itself addressable — a layout,
112
+ // middleware, or access check above the leaf — still gets a `$segment`
113
+ // module, so `getSegmentParams(SEGMENT_PATH)` is callable from it and needs
114
+ // a matching typed overload. Emitting only leaves left those call sites on
115
+ // the broad `Record<string, string | string[]>` signature, which since
116
+ // TIM-1342 (which deleted `defineSegmentParams`) is their ONLY typed path.
117
+ // design/41-global-params.md's Type Summary promises layouts and middleware
118
+ // exact accumulated params.
119
+ //
120
+ // `isRoutable: false` keeps them out of the urlPath-keyed emissions — the
121
+ // `Routes` interface and `<Link>` variants — where they would publish a URL
122
+ // that no request can reach. They belong only to the segmentPath-keyed
123
+ // APIs: `getSegmentParams`, `useSegmentParams`, `TimberSegmentParams`.
124
+ const hostsCode = !!node.layout || !!node.middleware || !!node.access;
125
+
126
+ if (isPage || isApiRoute || hostsCode) {
155
127
  const entry: RouteEntry = {
156
128
  urlPath: node.urlPath,
157
129
  segmentPath: treePath || '/',
158
- params: resolvedParams,
159
- hasSearchParams: false,
130
+ params,
160
131
  isApiRoute,
132
+ isRoutable: isPage || isApiRoute,
161
133
  isSlotRoute: insideSlot,
134
+ isInterceptingRoute: insideIntercepting,
162
135
  hasSchema,
163
136
  };
164
137
 
165
- // Detect searchParams export from params.ts (primary) or page.tsx (fallback)
166
- if (isPage) {
167
- if (node.params && fileHasExport(node.params.filePath, 'searchParams')) {
168
- entry.hasSearchParams = true;
169
- entry.searchParamsPagePath = node.params.filePath;
170
- } else if (node.page && fileHasExport(node.page.filePath, 'searchParams')) {
171
- entry.hasSearchParams = true;
172
- entry.searchParamsPagePath = node.page.filePath;
173
- }
174
- }
175
-
176
138
  routes.push(entry);
177
139
  }
178
140
 
179
- // Recurse into children
141
+ // Recurse into children. An intercepting subtree is flagged, and the flag is
142
+ // sticky — the descendants are where the false URLs are. See
143
+ // `RouteEntry.isInterceptingRoute` for what the flag drops and why dedupe
144
+ // alone was not enough.
180
145
  for (const child of node.children) {
181
- collectRoutes(child, params, nextAncestorFiles, treePath, routes, hasSchema, insideSlot);
146
+ const childIntercepting = insideIntercepting || child.segmentType === 'intercepting';
147
+ collectRoutes(child, params, treePath, routes, hasSchema, insideSlot, childIntercepting);
182
148
  }
183
149
 
184
150
  // Recurse into slots (they share the parent's URL path, but may have their own pages)
185
151
  for (const slot of Object.values(node.slots)) {
186
- collectRoutes(slot, params, nextAncestorFiles, treePath, routes, hasSchema, true);
152
+ collectRoutes(slot, params, treePath, routes, hasSchema, true, insideIntercepting);
187
153
  }
188
154
  }
189
155
 
190
156
  /**
191
157
  * Dedupe route entries by urlPath for urlPath-keyed emissions (the Routes
192
- * interface, useQueryStates overloads, and typed Link variants).
158
+ * interface and typed Link variants).
193
159
  *
194
160
  * Parallel-slot pages share their parent's urlPath; emitting one entry per
195
161
  * slot page produced duplicate interface keys (TS2300/TS2717 under
196
162
  * skipLibCheck:false) and duplicate overloads. The non-slot entry is the
197
163
  * canonical one; when only slot entries exist (parent has no page), the
198
164
  * lexicographically smallest segmentPath wins so output is independent of
199
- * slot scan order. A slot's searchParams definition is carried onto the
200
- * merged entry when the canonical entry has none — never silently dropped.
165
+ * slot scan order.
166
+ *
167
+ * The loser is discarded outright. It used to donate its `searchParams`
168
+ * definition to the winner, because a slot could carry one the parent page
169
+ * lacked; since TIM-1343 no route entry carries a searchParams definition at
170
+ * all, there is nothing left to merge.
201
171
  *
202
172
  * segmentPath-keyed emissions (getSegmentParams, useSegmentParams,
203
173
  * TimberSegmentParams) must NOT use this — segmentPaths are already unique
@@ -212,25 +182,11 @@ function dedupeRoutesByUrlPath(routes: RouteEntry[]): RouteEntry[] {
212
182
  continue;
213
183
  }
214
184
 
215
- let winner = existing;
216
- let loser = route;
217
185
  const routeWins =
218
186
  (existing.isSlotRoute && !route.isSlotRoute) ||
219
187
  (!!existing.isSlotRoute === !!route.isSlotRoute &&
220
188
  route.segmentPath.localeCompare(existing.segmentPath) < 0);
221
- if (routeWins) {
222
- winner = route;
223
- loser = existing;
224
- }
225
-
226
- if (!winner.hasSearchParams && loser.hasSearchParams) {
227
- winner = {
228
- ...winner,
229
- hasSearchParams: true,
230
- searchParamsPagePath: loser.searchParamsPagePath,
231
- };
232
- }
233
- byPath.set(route.urlPath, winner);
189
+ byPath.set(route.urlPath, routeWins ? route : existing);
234
190
  }
235
191
  return [...byPath.values()];
236
192
  }
@@ -243,7 +199,7 @@ function dedupeRoutesByUrlPath(routes: RouteEntry[]): RouteEntry[] {
243
199
  * For bare segments like `[id]` this is the segmentName itself.
244
200
  * For affixed segments like `img-[id].png` this is `[id]` — the bare bracket form.
245
201
  */
246
- function bracketNameForSegment(node: SegmentNode): string {
202
+ function bracketNameForSegment(node: UrlSegmentIdentity): string {
247
203
  if (node.paramPrefix || node.paramSuffix) {
248
204
  return `[${node.paramName}]`;
249
205
  }
@@ -261,23 +217,6 @@ function paramTypeForSegment(segmentType: string): ParamEntry['type'] {
261
217
  }
262
218
  }
263
219
 
264
- /**
265
- * Find a legacy `segmentParams` export on layout.tsx or page.tsx.
266
- *
267
- * Backward-compat shim: TIM-508 made params.ts the canonical location
268
- * for `segmentParams`. Layout/page exports are still accepted for the
269
- * OWN segment only (not inherited by descendants — see TIM-834).
270
- */
271
- function findLegacyParamsExport(node: SegmentNode): string | undefined {
272
- if (node.layout && fileHasExport(node.layout.filePath, 'segmentParams')) {
273
- return node.layout.filePath;
274
- }
275
- if (node.page && fileHasExport(node.page.filePath, 'segmentParams')) {
276
- return node.page.filePath;
277
- }
278
- return undefined;
279
- }
280
-
281
220
  /**
282
221
  * Emit the schema-based type exports: TimberSegmentParams, TimberRoute,
283
222
  * AllSegmentParams, RoutesWithParams.
@@ -401,28 +340,30 @@ function formatDeclarationFile(
401
340
  lines.push('');
402
341
  }
403
342
 
404
- if (!hasSchema) {
405
- // TIM-834 P2: emit the shared codec-resolution helper type ONCE so the
406
- // per-param chain conditionals reference it instead of inlining the
407
- // fallback in both branches (which grows O(2^N) in chain depth).
408
- lines.push(emitResolveSegmentFieldHelper());
409
- lines.push('');
410
- }
411
-
412
343
  // urlPath-keyed emissions use the deduped list (slot pages share their
413
344
  // parent's urlPath); segmentPath-keyed emissions below keep all entries.
414
- const uniqueByUrlPath = dedupeRoutesByUrlPath(routes);
345
+ //
346
+ // Intercepting subtrees are dropped outright rather than deduped: their
347
+ // computed urlPath is not a route any request can reach, so a path that
348
+ // happens NOT to collide with a real one would otherwise be published as a
349
+ // real route. See `RouteEntry.isInterceptingRoute`.
350
+ const uniqueByUrlPath = dedupeRoutesByUrlPath(
351
+ routes.filter((r) => r.isRoutable && !r.isInterceptingRoute)
352
+ );
415
353
 
416
354
  lines.push("declare module '@timber-js/app' {");
417
355
  lines.push(' interface Routes {');
418
356
 
357
+ // TIM-1343: no `searchParams` member. With `params.ts` gone there is no
358
+ // convention file to read a definition from, so the framework has nothing
359
+ // to type it with — and an always-`{}` member is a claim that every route
360
+ // has no search params, which is false. Search-param types now come from
361
+ // the definition object itself, wherever the app chooses to keep it.
419
362
  for (const route of uniqueByUrlPath) {
420
- const paramsType = formatParamsType(route.params, importBase, hasSchema);
421
- const searchParamsType = formatSearchParamsType(route, importBase);
363
+ const paramsType = formatParamsType(route.params, hasSchema);
422
364
 
423
365
  lines.push(` '${route.urlPath}': {`);
424
366
  lines.push(` segmentParams: ${paramsType}`);
425
- lines.push(` searchParams: ${searchParamsType}`);
426
367
  lines.push(` }`);
427
368
  }
428
369
 
@@ -453,7 +394,7 @@ function formatDeclarationFile(
453
394
  lines.push(" import type { AllSegmentParams } from '@timber-js/app'");
454
395
  }
455
396
  for (const route of dynamicRoutes) {
456
- const paramsType = formatParamsType(route.params, importBase, hasSchema);
397
+ const paramsType = formatParamsType(route.params, hasSchema);
457
398
  lines.push(
458
399
  ` export function getSegmentParams(segmentPath: '${route.segmentPath}'): ${paramsType}`
459
400
  );
@@ -471,9 +412,7 @@ function formatDeclarationFile(
471
412
 
472
413
  if (dynamicRoutes.length > 0 || pageRoutes.length > 0) {
473
414
  lines.push("declare module '@timber-js/app/client' {");
474
- lines.push(
475
- " import type { SearchParamsDefinition, SetParams, QueryStatesOptions, SearchParamCodec } from '@timber-js/app/search-params'"
476
- );
415
+ lines.push(" import type { SearchParamsDefinition } from '@timber-js/app/search-params'");
477
416
  if (hasSchema) {
478
417
  lines.push(" import type { AllSegmentParams } from '@timber-js/app'");
479
418
  }
@@ -482,7 +421,7 @@ function formatDeclarationFile(
482
421
  // useSegmentParams overloads
483
422
  if (dynamicRoutes.length > 0) {
484
423
  for (const route of dynamicRoutes) {
485
- const paramsType = formatParamsType(route.params, importBase, hasSchema);
424
+ const paramsType = formatParamsType(route.params, hasSchema);
486
425
  lines.push(
487
426
  ` export function useSegmentParams(segmentPath: '${route.segmentPath}'): ${paramsType}`
488
427
  );
@@ -495,12 +434,6 @@ function formatDeclarationFile(
495
434
  lines.push('');
496
435
  }
497
436
 
498
- // useQueryStates overloads
499
- if (pageRoutes.length > 0) {
500
- lines.push(...formatUseQueryStatesOverloads(pageRoutes, importBase));
501
- lines.push('');
502
- }
503
-
504
437
  // Typed Link overloads — per-route with DIRECT types (no conditionals).
505
438
  // Direct types preserve TypeScript's excess property checking.
506
439
  //
@@ -515,7 +448,7 @@ function formatDeclarationFile(
515
448
  // confusing "Type 'string' is not assignable to type 'never'" cascade.
516
449
  if (pageRoutes.length > 0) {
517
450
  lines.push(' // Typed Link overloads — per-route (block 1 / emitted first)');
518
- lines.push(...formatTypedLinkOverloads(pageRoutes, importBase, hasSchema));
451
+ lines.push(...formatTypedLinkOverloads(pageRoutes, hasSchema));
519
452
  lines.push('');
520
453
  }
521
454
 
@@ -540,48 +473,29 @@ function formatDeclarationFile(
540
473
  /**
541
474
  * Format the params type for a route entry.
542
475
  */
543
- function formatParamsType(params: ParamEntry[], importBase?: string, hasSchema?: boolean): string {
476
+ function formatParamsType(params: ParamEntry[], hasSchema?: boolean): string {
544
477
  if (params.length === 0) {
545
478
  return '{}';
546
479
  }
547
480
 
481
+ // Without a schema a URL segment is an uninterpreted string — that IS
482
+ // its type. Per-segment codec chains used to narrow it here; TIM-1342
483
+ // deleted them along with params.ts.
548
484
  const fields = params.map((p) => {
549
- const codecType = hasSchema
550
- ? buildSchemaParamType(p)
551
- : buildCodecChainType(p, importBase, p.type);
485
+ const codecType = hasSchema ? buildSchemaParamType(p) : p.type;
552
486
  return `${p.name}: ${codecType}`;
553
487
  });
554
488
  return `{ ${fields.join('; ')} }`;
555
489
  }
556
490
 
557
- /**
558
- * Generate useQueryStates overloads.
559
- *
560
- * For each page route:
561
- * - Routes with search-params.ts get a typed overload returning the inferred T
562
- * - Routes without search-params.ts get an overload returning [{}, SetParams<{}>]
563
- *
564
- * A fallback overload for standalone codecs (existing API) is emitted last.
565
- */
566
- function formatUseQueryStatesOverloads(routes: RouteEntry[], importBase?: string): string[] {
567
- const lines: string[] = [];
568
-
569
- for (const route of routes) {
570
- const searchParamsType = route.hasSearchParams
571
- ? formatSearchParamsType(route, importBase)
572
- : '{}';
573
- lines.push(
574
- ` export function useQueryStates<R extends '${route.urlPath}'>(route: R, options?: QueryStatesOptions): [${searchParamsType}, SetParams<${searchParamsType}>]`
575
- );
576
- }
577
-
578
- // Fallback: standalone codecs (existing API)
579
- lines.push(
580
- ' export function useQueryStates<T extends Record<string, unknown>>(codecs: { [K in keyof T]: SearchParamCodec<T[K]> }, options?: QueryStatesOptions): [T, SetParams<T>]'
581
- );
582
-
583
- return lines;
584
- }
491
+ // TIM-1341: `useQueryStates` no longer has a route-string form, so the
492
+ // generated `.d.ts` emits no overloads for it. Its source signature —
493
+ // `useQueryStates(codecs, options?)` — is fully generic over the codec map
494
+ // and needs no per-route augmentation. Reaching another route's codecs is
495
+ // done by importing that route's `searchParams` definition from its
496
+ // `params.ts` and calling `definition.useQueryStates()`, which is typed by
497
+ // inference and cannot fail at runtime on an unpopulated registry.
498
+ // See design/23-search-params.md §"Client Access".
585
499
 
586
500
  // Link overload formatters and helpers (`formatTypedLinkOverloads`,
587
501
  // `formatLinkCatchAllOverloads`, `formatLinkParamsType`,