@timber-js/app 0.2.0-alpha.12 → 0.2.0-alpha.120

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 (758) hide show
  1. package/dist/_chunks/actions-Cw-7NfJJ.js +1101 -0
  2. package/dist/_chunks/actions-Cw-7NfJJ.js.map +1 -0
  3. package/dist/_chunks/build-output-helper-DhxiT18k.js +61 -0
  4. package/dist/_chunks/build-output-helper-DhxiT18k.js.map +1 -0
  5. package/dist/_chunks/cli-schema-sync-XV0I47Gj.js +2 -0
  6. package/dist/_chunks/cli-schema-sync-q2wB0DyJ.js +358 -0
  7. package/dist/_chunks/cli-schema-sync-q2wB0DyJ.js.map +1 -0
  8. package/dist/_chunks/codec-registry-V7ARyeLN.js +21 -0
  9. package/dist/_chunks/codec-registry-V7ARyeLN.js.map +1 -0
  10. package/dist/_chunks/define-8zQ8Vm7x.js +195 -0
  11. package/dist/_chunks/define-8zQ8Vm7x.js.map +1 -0
  12. package/dist/_chunks/define-zQX6e1tN.js +124 -0
  13. package/dist/_chunks/define-zQX6e1tN.js.map +1 -0
  14. package/dist/_chunks/format-CR6v1pWE.js +14 -0
  15. package/dist/_chunks/format-CR6v1pWE.js.map +1 -0
  16. package/dist/_chunks/handler-store-iqnt2ghN.js +54 -0
  17. package/dist/_chunks/handler-store-iqnt2ghN.js.map +1 -0
  18. package/dist/_chunks/logger-DDmK5skc.js +291 -0
  19. package/dist/_chunks/logger-DDmK5skc.js.map +1 -0
  20. package/dist/_chunks/merge-search-params-CwxJzBLS.js +41 -0
  21. package/dist/_chunks/merge-search-params-CwxJzBLS.js.map +1 -0
  22. package/dist/_chunks/navigation-root-DKsJ5Di7.js +96 -0
  23. package/dist/_chunks/navigation-root-DKsJ5Di7.js.map +1 -0
  24. package/dist/_chunks/registry-Dp_hJL4s.js +20 -0
  25. package/dist/_chunks/registry-Dp_hJL4s.js.map +1 -0
  26. package/dist/_chunks/resolve-schema-23Mc8aLi.js +65 -0
  27. package/dist/_chunks/resolve-schema-23Mc8aLi.js.map +1 -0
  28. package/dist/_chunks/router-ref-sektkr-t.js +28 -0
  29. package/dist/_chunks/router-ref-sektkr-t.js.map +1 -0
  30. package/dist/_chunks/scanner-DmfoB7iK.js +336 -0
  31. package/dist/_chunks/scanner-DmfoB7iK.js.map +1 -0
  32. package/dist/_chunks/schema-bridge-eL5vQDSA.js +86 -0
  33. package/dist/_chunks/schema-bridge-eL5vQDSA.js.map +1 -0
  34. package/dist/_chunks/segment-classify-CnfLLvir.js +137 -0
  35. package/dist/_chunks/segment-classify-CnfLLvir.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-BO5OvEvg.js} +1 -1
  39. package/dist/_chunks/ssr-data-BO5OvEvg.js.map +1 -0
  40. package/dist/_chunks/stale-reload-BCPRG0Cv.js +64 -0
  41. package/dist/_chunks/stale-reload-BCPRG0Cv.js.map +1 -0
  42. package/dist/_chunks/tracing-DvKLzCFa.js +329 -0
  43. package/dist/_chunks/tracing-DvKLzCFa.js.map +1 -0
  44. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-D9SBlAfp.js} +7 -20
  45. package/dist/_chunks/use-query-states-D9SBlAfp.js.map +1 -0
  46. package/dist/_chunks/use-segment-params-CskiK-59.js +185 -0
  47. package/dist/_chunks/use-segment-params-CskiK-59.js.map +1 -0
  48. package/dist/_chunks/validation-Bm3Je-09.js +84 -0
  49. package/dist/_chunks/validation-Bm3Je-09.js.map +1 -0
  50. package/dist/_chunks/walkers-DgOXkTts.js +609 -0
  51. package/dist/_chunks/walkers-DgOXkTts.js.map +1 -0
  52. package/dist/_chunks/{format-DviM89f0.js → warnings-B30wpfaS.js} +6 -45
  53. package/dist/_chunks/warnings-B30wpfaS.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 +37 -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 +42 -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 +23 -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 +9 -24
  124. package/dist/client/index.d.ts.map +1 -1
  125. package/dist/client/index.js +172 -1100
  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 +964 -0
  130. package/dist/client/internal.js.map +1 -0
  131. package/dist/client/link-pending-store.d.ts +63 -0
  132. package/dist/client/link-pending-store.d.ts.map +1 -0
  133. package/dist/client/link.d.ts +62 -55
  134. package/dist/client/link.d.ts.map +1 -1
  135. package/dist/client/nav-link-store.d.ts +36 -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 +13 -2
  142. package/dist/client/navigation-context.d.ts.map +1 -1
  143. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
  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 +70 -4
  148. package/dist/client/router.d.ts.map +1 -1
  149. package/dist/client/rsc-fetch.d.ts +38 -3
  150. package/dist/client/rsc-fetch.d.ts.map +1 -1
  151. package/dist/client/segment-cache.d.ts +1 -1
  152. package/dist/client/segment-cache.d.ts.map +1 -1
  153. package/dist/client/segment-outlet.d.ts +63 -0
  154. package/dist/client/segment-outlet.d.ts.map +1 -0
  155. package/dist/client/ssr-data.d.ts +13 -4
  156. package/dist/client/ssr-data.d.ts.map +1 -1
  157. package/dist/client/stale-reload.d.ts +15 -0
  158. package/dist/client/stale-reload.d.ts.map +1 -1
  159. package/dist/client/state.d.ts +1 -1
  160. package/dist/client/top-loader.d.ts +5 -5
  161. package/dist/client/top-loader.d.ts.map +1 -1
  162. package/dist/client/use-cookie.d.ts +12 -0
  163. package/dist/client/use-cookie.d.ts.map +1 -1
  164. package/dist/client/use-link-status.d.ts +5 -5
  165. package/dist/client/use-link-status.d.ts.map +1 -1
  166. package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
  167. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  168. package/dist/client/use-query-states.d.ts +1 -1
  169. package/dist/client/use-query-states.d.ts.map +1 -1
  170. package/dist/client/use-router.d.ts +1 -1
  171. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  172. package/dist/client/use-segment-params.d.ts.map +1 -0
  173. package/dist/codec.d.ts +51 -0
  174. package/dist/codec.d.ts.map +1 -0
  175. package/dist/codec.js +46 -0
  176. package/dist/codec.js.map +1 -0
  177. package/dist/config-types.d.ts +294 -0
  178. package/dist/config-types.d.ts.map +1 -0
  179. package/dist/config-validation.d.ts +51 -0
  180. package/dist/config-validation.d.ts.map +1 -0
  181. package/dist/content/index.d.ts +1 -10
  182. package/dist/content/index.d.ts.map +1 -1
  183. package/dist/content/index.js +0 -2
  184. package/dist/cookies/define-cookie.d.ts +58 -25
  185. package/dist/cookies/define-cookie.d.ts.map +1 -1
  186. package/dist/cookies/index.d.ts +2 -1
  187. package/dist/cookies/index.d.ts.map +1 -1
  188. package/dist/cookies/index.js +251 -36
  189. package/dist/cookies/index.js.map +1 -1
  190. package/dist/cookies/json-cookie.d.ts +64 -0
  191. package/dist/cookies/json-cookie.d.ts.map +1 -0
  192. package/dist/cookies/validation.d.ts +46 -0
  193. package/dist/cookies/validation.d.ts.map +1 -0
  194. package/dist/dev-tools/404-page.d.ts +46 -0
  195. package/dist/dev-tools/404-page.d.ts.map +1 -0
  196. package/dist/dev-tools/browser-logs.d.ts +84 -0
  197. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  198. package/dist/dev-tools/error-page.d.ts +58 -0
  199. package/dist/dev-tools/error-page.d.ts.map +1 -0
  200. package/dist/dev-tools/holding-server.d.ts +54 -0
  201. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  202. package/dist/dev-tools/index.d.ts +31 -0
  203. package/dist/dev-tools/index.d.ts.map +1 -0
  204. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  205. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  206. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  207. package/dist/dev-tools/logger.d.ts.map +1 -0
  208. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  209. package/dist/dev-tools/logs.d.ts.map +1 -0
  210. package/dist/dev-tools/overlay.d.ts +91 -0
  211. package/dist/dev-tools/overlay.d.ts.map +1 -0
  212. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  213. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  214. package/dist/dev-tools/terminal.d.ts +28 -0
  215. package/dist/dev-tools/terminal.d.ts.map +1 -0
  216. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  217. package/dist/dev-tools/warnings.d.ts.map +1 -0
  218. package/dist/fonts/ast.d.ts +98 -6
  219. package/dist/fonts/ast.d.ts.map +1 -1
  220. package/dist/fonts/bundle.d.ts +48 -0
  221. package/dist/fonts/bundle.d.ts.map +1 -0
  222. package/dist/fonts/dev-middleware.d.ts +22 -0
  223. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  224. package/dist/fonts/local.d.ts +1 -1
  225. package/dist/fonts/pipeline.d.ts +167 -0
  226. package/dist/fonts/pipeline.d.ts.map +1 -0
  227. package/dist/fonts/transform.d.ts +78 -0
  228. package/dist/fonts/transform.d.ts.map +1 -0
  229. package/dist/fonts/types.d.ts +45 -1
  230. package/dist/fonts/types.d.ts.map +1 -1
  231. package/dist/fonts/virtual-modules.d.ts +94 -0
  232. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  233. package/dist/index.d.ts +46 -190
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +4799 -12730
  236. package/dist/index.js.map +1 -1
  237. package/dist/params/codec-registry.d.ts +26 -0
  238. package/dist/params/codec-registry.d.ts.map +1 -0
  239. package/dist/params/define-schema.d.ts +53 -0
  240. package/dist/params/define-schema.d.ts.map +1 -0
  241. package/dist/params/index.d.ts +5 -0
  242. package/dist/params/index.d.ts.map +1 -0
  243. package/dist/params/index.js +34 -0
  244. package/dist/params/index.js.map +1 -0
  245. package/dist/params/resolve-schema.d.ts +34 -0
  246. package/dist/params/resolve-schema.d.ts.map +1 -0
  247. package/dist/plugin-context.d.ts +107 -0
  248. package/dist/plugin-context.d.ts.map +1 -0
  249. package/dist/plugins/adapter-build.d.ts +1 -1
  250. package/dist/plugins/adapter-build.d.ts.map +1 -1
  251. package/dist/plugins/build-manifest.d.ts +2 -2
  252. package/dist/plugins/build-manifest.d.ts.map +1 -1
  253. package/dist/plugins/build-report.d.ts +9 -7
  254. package/dist/plugins/build-report.d.ts.map +1 -1
  255. package/dist/plugins/client-chunks.d.ts +32 -0
  256. package/dist/plugins/client-chunks.d.ts.map +1 -0
  257. package/dist/plugins/content.d.ts +1 -1
  258. package/dist/plugins/content.d.ts.map +1 -1
  259. package/dist/plugins/dev-server.d.ts +1 -1
  260. package/dist/plugins/dev-server.d.ts.map +1 -1
  261. package/dist/plugins/entries.d.ts +1 -1
  262. package/dist/plugins/entries.d.ts.map +1 -1
  263. package/dist/plugins/fonts.d.ts +17 -73
  264. package/dist/plugins/fonts.d.ts.map +1 -1
  265. package/dist/plugins/mdx.d.ts +1 -1
  266. package/dist/plugins/mdx.d.ts.map +1 -1
  267. package/dist/plugins/routing.d.ts +1 -1
  268. package/dist/plugins/routing.d.ts.map +1 -1
  269. package/dist/plugins/server-bundle.d.ts.map +1 -1
  270. package/dist/plugins/shims.d.ts +6 -5
  271. package/dist/plugins/shims.d.ts.map +1 -1
  272. package/dist/plugins/static-build.d.ts +5 -26
  273. package/dist/plugins/static-build.d.ts.map +1 -1
  274. package/dist/routing/codegen-shared.d.ts +63 -0
  275. package/dist/routing/codegen-shared.d.ts.map +1 -0
  276. package/dist/routing/codegen-types.d.ts +60 -0
  277. package/dist/routing/codegen-types.d.ts.map +1 -0
  278. package/dist/routing/codegen.d.ts +7 -2
  279. package/dist/routing/codegen.d.ts.map +1 -1
  280. package/dist/routing/convention-lint.d.ts +41 -0
  281. package/dist/routing/convention-lint.d.ts.map +1 -0
  282. package/dist/routing/index.d.ts +5 -1
  283. package/dist/routing/index.d.ts.map +1 -1
  284. package/dist/routing/index.js +4 -2
  285. package/dist/routing/link-codegen.d.ts +90 -0
  286. package/dist/routing/link-codegen.d.ts.map +1 -0
  287. package/dist/routing/scanner.d.ts +1 -10
  288. package/dist/routing/scanner.d.ts.map +1 -1
  289. package/dist/routing/segment-classify.d.ts +75 -0
  290. package/dist/routing/segment-classify.d.ts.map +1 -0
  291. package/dist/routing/segment-codegen.d.ts +38 -0
  292. package/dist/routing/segment-codegen.d.ts.map +1 -0
  293. package/dist/routing/types.d.ts +77 -25
  294. package/dist/routing/types.d.ts.map +1 -1
  295. package/dist/routing/walkers.d.ts +51 -0
  296. package/dist/routing/walkers.d.ts.map +1 -0
  297. package/dist/rsc-runtime/rsc.d.ts +1 -1
  298. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  299. package/dist/rsc-runtime/ssr.d.ts +12 -0
  300. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  301. package/dist/schema-bridge.d.ts +76 -0
  302. package/dist/schema-bridge.d.ts.map +1 -0
  303. package/dist/search-params/define.d.ts +157 -0
  304. package/dist/search-params/define.d.ts.map +1 -0
  305. package/dist/search-params/index.d.ts +4 -7
  306. package/dist/search-params/index.d.ts.map +1 -1
  307. package/dist/search-params/index.js +34 -441
  308. package/dist/search-params/index.js.map +1 -1
  309. package/dist/search-params/registry.d.ts +2 -2
  310. package/dist/search-params/registry.d.ts.map +1 -1
  311. package/dist/search-params/wrappers.d.ts +53 -0
  312. package/dist/search-params/wrappers.d.ts.map +1 -0
  313. package/dist/segment-params/define.d.ts +95 -0
  314. package/dist/segment-params/define.d.ts.map +1 -0
  315. package/dist/segment-params/index.d.ts +3 -0
  316. package/dist/segment-params/index.d.ts.map +1 -0
  317. package/dist/segment-params/index.js +2 -0
  318. package/dist/server/access-gate.d.ts +8 -3
  319. package/dist/server/access-gate.d.ts.map +1 -1
  320. package/dist/server/action-client.d.ts +41 -6
  321. package/dist/server/action-client.d.ts.map +1 -1
  322. package/dist/server/action-encryption.d.ts +76 -0
  323. package/dist/server/action-encryption.d.ts.map +1 -0
  324. package/dist/server/action-handler.d.ts +35 -1
  325. package/dist/server/action-handler.d.ts.map +1 -1
  326. package/dist/server/actions.d.ts +3 -6
  327. package/dist/server/actions.d.ts.map +1 -1
  328. package/dist/server/als-registry.d.ts +53 -5
  329. package/dist/server/als-registry.d.ts.map +1 -1
  330. package/dist/server/asset-headers.d.ts +1 -15
  331. package/dist/server/asset-headers.d.ts.map +1 -1
  332. package/dist/server/build-manifest.d.ts +2 -2
  333. package/dist/server/build-manifest.d.ts.map +1 -1
  334. package/dist/server/coalesce-tick.d.ts +40 -0
  335. package/dist/server/coalesce-tick.d.ts.map +1 -0
  336. package/dist/server/cookie-context.d.ts +170 -0
  337. package/dist/server/cookie-context.d.ts.map +1 -0
  338. package/dist/server/cookie-parsing.d.ts +51 -0
  339. package/dist/server/cookie-parsing.d.ts.map +1 -0
  340. package/dist/server/debug.d.ts +1 -1
  341. package/dist/server/default-logger.d.ts +22 -0
  342. package/dist/server/default-logger.d.ts.map +1 -0
  343. package/dist/server/deny-boundary.d.ts +90 -0
  344. package/dist/server/deny-boundary.d.ts.map +1 -0
  345. package/dist/server/deny-renderer.d.ts.map +1 -1
  346. package/dist/server/dev-source-map.d.ts +22 -0
  347. package/dist/server/dev-source-map.d.ts.map +1 -0
  348. package/dist/server/early-hints-sender.d.ts.map +1 -1
  349. package/dist/server/early-hints.d.ts +13 -5
  350. package/dist/server/early-hints.d.ts.map +1 -1
  351. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  352. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  353. package/dist/server/fallback-error.d.ts +12 -7
  354. package/dist/server/fallback-error.d.ts.map +1 -1
  355. package/dist/server/flight-injection-state.d.ts +66 -0
  356. package/dist/server/flight-injection-state.d.ts.map +1 -0
  357. package/dist/server/flight-scripts.d.ts +42 -0
  358. package/dist/server/flight-scripts.d.ts.map +1 -0
  359. package/dist/server/flush.d.ts.map +1 -1
  360. package/dist/server/form-data.d.ts +29 -0
  361. package/dist/server/form-data.d.ts.map +1 -1
  362. package/dist/server/html-injector-core.d.ts +213 -0
  363. package/dist/server/html-injector-core.d.ts.map +1 -0
  364. package/dist/server/html-injectors.d.ts +81 -41
  365. package/dist/server/html-injectors.d.ts.map +1 -1
  366. package/dist/server/index.d.ts +10 -46
  367. package/dist/server/index.d.ts.map +1 -1
  368. package/dist/server/index.js +155 -2905
  369. package/dist/server/index.js.map +1 -1
  370. package/dist/server/internal.d.ts +48 -0
  371. package/dist/server/internal.d.ts.map +1 -0
  372. package/dist/server/internal.js +2947 -0
  373. package/dist/server/internal.js.map +1 -0
  374. package/dist/server/logger.d.ts +39 -7
  375. package/dist/server/logger.d.ts.map +1 -1
  376. package/dist/server/middleware-runner.d.ts +36 -4
  377. package/dist/server/middleware-runner.d.ts.map +1 -1
  378. package/dist/server/node-stream-transforms.d.ts +112 -0
  379. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  380. package/dist/server/param-coercion.d.ts +54 -0
  381. package/dist/server/param-coercion.d.ts.map +1 -0
  382. package/dist/server/pipeline-helpers.d.ts +95 -0
  383. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  384. package/dist/server/pipeline-interception.d.ts +1 -1
  385. package/dist/server/pipeline-interception.d.ts.map +1 -1
  386. package/dist/server/pipeline-metadata.d.ts +6 -0
  387. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  388. package/dist/server/pipeline-outcome.d.ts +49 -0
  389. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  390. package/dist/server/pipeline-phases.d.ts +52 -0
  391. package/dist/server/pipeline-phases.d.ts.map +1 -0
  392. package/dist/server/pipeline.d.ts +118 -23
  393. package/dist/server/pipeline.d.ts.map +1 -1
  394. package/dist/server/port-resolution.d.ts +117 -0
  395. package/dist/server/port-resolution.d.ts.map +1 -0
  396. package/dist/server/primitives.d.ts +69 -18
  397. package/dist/server/primitives.d.ts.map +1 -1
  398. package/dist/server/render-timeout.d.ts +51 -0
  399. package/dist/server/render-timeout.d.ts.map +1 -0
  400. package/dist/server/request-context.d.ts +62 -107
  401. package/dist/server/request-context.d.ts.map +1 -1
  402. package/dist/server/route-element-builder.d.ts +27 -1
  403. package/dist/server/route-element-builder.d.ts.map +1 -1
  404. package/dist/server/route-handler.d.ts.map +1 -1
  405. package/dist/server/route-matcher.d.ts +21 -34
  406. package/dist/server/route-matcher.d.ts.map +1 -1
  407. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  408. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  409. package/dist/server/rsc-entry/api-handler.d.ts +2 -2
  410. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  411. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  412. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  413. package/dist/server/rsc-entry/helpers.d.ts +49 -6
  414. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  415. package/dist/server/rsc-entry/index.d.ts +19 -8
  416. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  417. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  418. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  419. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  420. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  421. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  422. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  423. package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
  424. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  425. package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
  426. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  427. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  428. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  429. package/dist/server/safe-load.d.ts +46 -0
  430. package/dist/server/safe-load.d.ts.map +1 -0
  431. package/dist/server/sensitive-fields.d.ts +74 -0
  432. package/dist/server/sensitive-fields.d.ts.map +1 -0
  433. package/dist/server/sitemap-generator.d.ts +129 -0
  434. package/dist/server/sitemap-generator.d.ts.map +1 -0
  435. package/dist/server/sitemap-handler.d.ts +22 -0
  436. package/dist/server/sitemap-handler.d.ts.map +1 -0
  437. package/dist/server/slot-resolver.d.ts +1 -1
  438. package/dist/server/slot-resolver.d.ts.map +1 -1
  439. package/dist/server/ssr-entry.d.ts +30 -0
  440. package/dist/server/ssr-entry.d.ts.map +1 -1
  441. package/dist/server/ssr-render.d.ts +39 -21
  442. package/dist/server/ssr-render.d.ts.map +1 -1
  443. package/dist/server/ssr-wrappers.d.ts +50 -0
  444. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  445. package/dist/server/state-tree-diff.d.ts.map +1 -1
  446. package/dist/server/status-code-resolver.d.ts +16 -11
  447. package/dist/server/status-code-resolver.d.ts.map +1 -1
  448. package/dist/server/stream-utils.d.ts +36 -0
  449. package/dist/server/stream-utils.d.ts.map +1 -0
  450. package/dist/server/tracing.d.ts +5 -5
  451. package/dist/server/tracing.d.ts.map +1 -1
  452. package/dist/server/tree-builder.d.ts +62 -30
  453. package/dist/server/tree-builder.d.ts.map +1 -1
  454. package/dist/server/tree-match.d.ts +41 -0
  455. package/dist/server/tree-match.d.ts.map +1 -0
  456. package/dist/server/types.d.ts +49 -4
  457. package/dist/server/types.d.ts.map +1 -1
  458. package/dist/server/utils/escape-html.d.ts +14 -0
  459. package/dist/server/utils/escape-html.d.ts.map +1 -0
  460. package/dist/server/version-skew.d.ts +61 -0
  461. package/dist/server/version-skew.d.ts.map +1 -0
  462. package/dist/shared/merge-search-params.d.ts +22 -0
  463. package/dist/shared/merge-search-params.d.ts.map +1 -0
  464. package/dist/shims/font-google.d.ts +1 -1
  465. package/dist/shims/font-google.d.ts.map +1 -1
  466. package/dist/shims/font-google.js +42 -0
  467. package/dist/shims/font-google.js.map +1 -0
  468. package/dist/shims/font-local.d.ts +26 -0
  469. package/dist/shims/font-local.d.ts.map +1 -0
  470. package/dist/shims/font-local.js +20 -0
  471. package/dist/shims/font-local.js.map +1 -0
  472. package/dist/shims/headers.d.ts +2 -1
  473. package/dist/shims/headers.d.ts.map +1 -1
  474. package/dist/shims/navigation-client.d.ts +3 -1
  475. package/dist/shims/navigation-client.d.ts.map +1 -1
  476. package/dist/shims/navigation.d.ts +11 -5
  477. package/dist/shims/navigation.d.ts.map +1 -1
  478. package/dist/utils/state-machine.d.ts +80 -0
  479. package/dist/utils/state-machine.d.ts.map +1 -0
  480. package/package.json +56 -16
  481. package/src/adapters/build-output-helper.ts +77 -0
  482. package/src/adapters/cloudflare-dev.ts +177 -0
  483. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  484. package/src/adapters/cloudflare.ts +350 -76
  485. package/src/adapters/compress-module.ts +24 -4
  486. package/src/adapters/nitro.ts +142 -59
  487. package/src/adapters/shared.ts +40 -0
  488. package/src/adapters/wrangler.d.ts +7 -0
  489. package/src/cache/cache-api.ts +38 -0
  490. package/src/cache/handler-store.ts +68 -0
  491. package/src/cache/index.ts +81 -18
  492. package/src/cache/singleflight.ts +62 -4
  493. package/src/cache/sizeof.ts +33 -0
  494. package/src/cache/timber-cache.ts +25 -20
  495. package/src/cli-schema-sync.ts +207 -0
  496. package/src/cli.ts +65 -8
  497. package/src/client/browser-dev.ts +153 -1
  498. package/src/client/browser-entry/action-dispatch.ts +126 -0
  499. package/src/client/browser-entry/hmr.ts +81 -0
  500. package/src/client/browser-entry/hydrate.ts +145 -0
  501. package/src/client/browser-entry/index.ts +149 -0
  502. package/src/client/browser-entry/post-hydration.ts +119 -0
  503. package/src/client/browser-entry/router-init.ts +193 -0
  504. package/src/client/browser-entry/rsc-stream.ts +157 -0
  505. package/src/client/browser-entry/scroll.ts +27 -0
  506. package/src/client/error-boundary.tsx +99 -22
  507. package/src/client/error-reconstituter.tsx +65 -0
  508. package/src/client/form.tsx +31 -32
  509. package/src/client/history.ts +26 -4
  510. package/src/client/index.ts +69 -44
  511. package/src/client/internal.ts +58 -0
  512. package/src/client/link-pending-store.ts +111 -0
  513. package/src/client/link.tsx +366 -113
  514. package/src/client/nav-link-store.ts +47 -0
  515. package/src/client/navigation-api-types.ts +112 -0
  516. package/src/client/navigation-api.ts +332 -0
  517. package/src/client/navigation-context.ts +31 -6
  518. package/src/client/navigation-root.tsx +342 -0
  519. package/src/client/nuqs-adapter.tsx +16 -3
  520. package/src/client/router-ref.ts +1 -1
  521. package/src/client/router.ts +300 -73
  522. package/src/client/rsc-fetch.ts +112 -8
  523. package/src/client/segment-cache.ts +1 -1
  524. package/src/client/segment-outlet.tsx +86 -0
  525. package/src/client/ssr-data.ts +13 -5
  526. package/src/client/stale-reload.ts +72 -3
  527. package/src/client/state.ts +2 -2
  528. package/src/client/top-loader.tsx +18 -6
  529. package/src/client/use-cookie.ts +31 -2
  530. package/src/client/use-link-status.ts +7 -7
  531. package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
  532. package/src/client/use-query-states.ts +9 -3
  533. package/src/client/use-router.ts +1 -1
  534. package/src/client/{use-params.ts → use-segment-params.ts} +8 -6
  535. package/src/codec.ts +97 -0
  536. package/src/config-types.ts +292 -0
  537. package/src/config-validation.ts +303 -0
  538. package/src/content/index.ts +5 -13
  539. package/src/cookies/define-cookie.ts +233 -53
  540. package/src/cookies/index.ts +12 -1
  541. package/src/cookies/json-cookie.ts +105 -0
  542. package/src/cookies/validation.ts +134 -0
  543. package/src/dev-tools/404-page.ts +387 -0
  544. package/src/dev-tools/browser-logs.ts +291 -0
  545. package/src/dev-tools/error-page.ts +506 -0
  546. package/src/dev-tools/holding-server.ts +187 -0
  547. package/src/dev-tools/index.ts +90 -0
  548. package/src/dev-tools/instrumentation.ts +176 -0
  549. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  550. package/src/dev-tools/overlay.ts +469 -0
  551. package/src/dev-tools/stack-classifier.ts +75 -0
  552. package/src/dev-tools/terminal.ts +183 -0
  553. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
  554. package/src/fonts/ast.ts +525 -16
  555. package/src/fonts/bundle.ts +142 -0
  556. package/src/fonts/dev-middleware.ts +74 -0
  557. package/src/fonts/local.ts +1 -1
  558. package/src/fonts/pipeline.ts +314 -0
  559. package/src/fonts/transform.ts +317 -0
  560. package/src/fonts/types.ts +50 -1
  561. package/src/fonts/virtual-modules.ts +233 -0
  562. package/src/index.ts +409 -357
  563. package/src/params/codec-registry.ts +34 -0
  564. package/src/params/define-schema.ts +73 -0
  565. package/src/params/index.ts +11 -0
  566. package/src/params/resolve-schema.ts +88 -0
  567. package/src/plugin-context.ts +240 -0
  568. package/src/plugins/adapter-build.ts +12 -4
  569. package/src/plugins/build-manifest.ts +13 -2
  570. package/src/plugins/build-report.ts +16 -25
  571. package/src/plugins/client-chunks.ts +65 -0
  572. package/src/plugins/content.ts +1 -1
  573. package/src/plugins/dev-server.ts +175 -35
  574. package/src/plugins/entries.ts +111 -9
  575. package/src/plugins/fonts.ts +157 -654
  576. package/src/plugins/mdx.ts +47 -10
  577. package/src/plugins/routing.ts +374 -45
  578. package/src/plugins/server-bundle.ts +32 -1
  579. package/src/plugins/shims.ts +136 -35
  580. package/src/plugins/static-build.ts +15 -89
  581. package/src/routing/codegen-shared.ts +109 -0
  582. package/src/routing/codegen-types.ts +61 -0
  583. package/src/routing/codegen.ts +269 -179
  584. package/src/routing/convention-lint.ts +357 -0
  585. package/src/routing/index.ts +5 -1
  586. package/src/routing/interception.ts +1 -1
  587. package/src/routing/link-codegen.ts +308 -0
  588. package/src/routing/scanner.ts +107 -110
  589. package/src/routing/segment-classify.ts +188 -0
  590. package/src/routing/segment-codegen.ts +98 -0
  591. package/src/routing/types.ts +78 -25
  592. package/src/routing/walkers.ts +90 -0
  593. package/src/rsc-runtime/rsc.ts +2 -0
  594. package/src/rsc-runtime/ssr.ts +50 -0
  595. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  596. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  597. package/src/search-params/define.ts +538 -0
  598. package/src/search-params/index.ts +14 -20
  599. package/src/search-params/registry.ts +2 -2
  600. package/src/search-params/wrappers.ts +92 -0
  601. package/src/segment-params/define.ts +336 -0
  602. package/src/segment-params/index.ts +9 -0
  603. package/src/server/access-gate.tsx +76 -34
  604. package/src/server/action-client.ts +88 -15
  605. package/src/server/action-encryption.ts +144 -0
  606. package/src/server/action-handler.ts +112 -14
  607. package/src/server/actions.ts +10 -9
  608. package/src/server/als-registry.ts +55 -7
  609. package/src/server/asset-headers.ts +8 -34
  610. package/src/server/build-manifest.ts +10 -4
  611. package/src/server/coalesce-tick.ts +75 -0
  612. package/src/server/compress.ts +25 -7
  613. package/src/server/cookie-context.ts +468 -0
  614. package/src/server/cookie-parsing.ts +135 -0
  615. package/src/server/debug.ts +1 -1
  616. package/src/server/default-logger.ts +99 -0
  617. package/src/server/deny-boundary.ts +218 -0
  618. package/src/server/deny-renderer.ts +31 -50
  619. package/src/server/dev-source-map.ts +31 -0
  620. package/src/server/early-hints-sender.ts +3 -2
  621. package/src/server/early-hints.ts +36 -15
  622. package/src/server/error-boundary-wrapper.ts +74 -22
  623. package/src/server/fallback-error.ts +74 -102
  624. package/src/server/flight-injection-state.ts +113 -0
  625. package/src/server/flight-scripts.ts +62 -0
  626. package/src/server/flush.ts +2 -1
  627. package/src/server/form-data.ts +76 -0
  628. package/src/server/html-injector-core.ts +417 -0
  629. package/src/server/html-injectors.ts +235 -223
  630. package/src/server/index.ts +29 -183
  631. package/src/server/internal.ts +176 -0
  632. package/src/server/logger.ts +67 -36
  633. package/src/server/middleware-runner.ts +75 -4
  634. package/src/server/node-stream-transforms.ts +361 -0
  635. package/src/server/param-coercion.ts +206 -0
  636. package/src/server/pipeline-helpers.ts +204 -0
  637. package/src/server/pipeline-interception.ts +17 -16
  638. package/src/server/pipeline-metadata.ts +13 -0
  639. package/src/server/pipeline-outcome.ts +176 -0
  640. package/src/server/pipeline-phases.ts +460 -0
  641. package/src/server/pipeline.ts +154 -394
  642. package/src/server/port-resolution.ts +215 -0
  643. package/src/server/primitives.ts +111 -28
  644. package/src/server/render-timeout.ts +108 -0
  645. package/src/server/request-context.ts +168 -333
  646. package/src/server/route-element-builder.ts +309 -195
  647. package/src/server/route-handler.ts +24 -4
  648. package/src/server/route-matcher.ts +50 -231
  649. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  650. package/src/server/rsc-entry/api-handler.ts +16 -17
  651. package/src/server/rsc-entry/error-renderer.ts +305 -89
  652. package/src/server/rsc-entry/helpers.ts +137 -12
  653. package/src/server/rsc-entry/index.ts +316 -352
  654. package/src/server/rsc-entry/render-route.ts +307 -0
  655. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  656. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  657. package/src/server/rsc-entry/ssr-bridge.ts +14 -5
  658. package/src/server/rsc-entry/ssr-renderer.ts +187 -38
  659. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  660. package/src/server/safe-load.ts +60 -0
  661. package/src/server/sensitive-fields.ts +230 -0
  662. package/src/server/sitemap-generator.ts +338 -0
  663. package/src/server/sitemap-handler.ts +126 -0
  664. package/src/server/slot-resolver.ts +228 -246
  665. package/src/server/ssr-entry.ts +229 -32
  666. package/src/server/ssr-render.ts +289 -67
  667. package/src/server/ssr-wrappers.tsx +139 -0
  668. package/src/server/state-tree-diff.ts +4 -1
  669. package/src/server/status-code-resolver.ts +112 -128
  670. package/src/server/stream-utils.ts +213 -0
  671. package/src/server/tracing.ts +21 -10
  672. package/src/server/tree-builder.ts +202 -90
  673. package/src/server/tree-match.ts +198 -0
  674. package/src/server/types.ts +55 -6
  675. package/src/server/utils/escape-html.ts +20 -0
  676. package/src/server/version-skew.ts +104 -0
  677. package/src/shared/merge-search-params.ts +55 -0
  678. package/src/shims/font-google.ts +1 -1
  679. package/src/shims/font-local.ts +34 -0
  680. package/src/shims/headers.ts +5 -1
  681. package/src/shims/navigation-client.ts +4 -3
  682. package/src/shims/navigation.ts +14 -7
  683. package/src/utils/state-machine.ts +111 -0
  684. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  685. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  686. package/dist/_chunks/debug-gwlJkDuf.js +0 -108
  687. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  688. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  689. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  690. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  691. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  692. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  693. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  694. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  695. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  696. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  697. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  698. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  699. package/dist/cache/register-cached-function.d.ts +0 -17
  700. package/dist/cache/register-cached-function.d.ts.map +0 -1
  701. package/dist/client/browser-entry.d.ts +0 -21
  702. package/dist/client/browser-entry.d.ts.map +0 -1
  703. package/dist/client/link-status-provider.d.ts +0 -11
  704. package/dist/client/link-status-provider.d.ts.map +0 -1
  705. package/dist/client/transition-root.d.ts.map +0 -1
  706. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  707. package/dist/client/use-params.d.ts.map +0 -1
  708. package/dist/plugins/cache-transform.d.ts +0 -36
  709. package/dist/plugins/cache-transform.d.ts.map +0 -1
  710. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  711. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  712. package/dist/plugins/dev-logs.d.ts.map +0 -1
  713. package/dist/plugins/dynamic-transform.d.ts +0 -72
  714. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  715. package/dist/plugins/server-action-exports.d.ts +0 -26
  716. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  717. package/dist/routing/status-file-lint.d.ts +0 -33
  718. package/dist/routing/status-file-lint.d.ts.map +0 -1
  719. package/dist/search-params/analyze.d.ts +0 -54
  720. package/dist/search-params/analyze.d.ts.map +0 -1
  721. package/dist/search-params/builtin-codecs.d.ts +0 -105
  722. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  723. package/dist/search-params/codecs.d.ts +0 -53
  724. package/dist/search-params/codecs.d.ts.map +0 -1
  725. package/dist/search-params/create.d.ts +0 -106
  726. package/dist/search-params/create.d.ts.map +0 -1
  727. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  728. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  729. package/dist/server/dev-logger.d.ts.map +0 -1
  730. package/dist/server/dev-span-processor.d.ts.map +0 -1
  731. package/dist/server/dev-warnings.d.ts.map +0 -1
  732. package/dist/server/manifest-status-resolver.d.ts +0 -58
  733. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  734. package/dist/server/prerender.d.ts +0 -77
  735. package/dist/server/prerender.d.ts.map +0 -1
  736. package/dist/server/response-cache.d.ts +0 -54
  737. package/dist/server/response-cache.d.ts.map +0 -1
  738. package/dist/utils/directive-parser.d.ts +0 -70
  739. package/dist/utils/directive-parser.d.ts.map +0 -1
  740. package/src/cache/register-cached-function.ts +0 -103
  741. package/src/client/browser-entry.ts +0 -678
  742. package/src/client/link-status-provider.tsx +0 -30
  743. package/src/client/transition-root.tsx +0 -166
  744. package/src/plugins/cache-transform.ts +0 -199
  745. package/src/plugins/dev-error-overlay.ts +0 -230
  746. package/src/plugins/dynamic-transform.ts +0 -161
  747. package/src/plugins/server-action-exports.ts +0 -220
  748. package/src/routing/status-file-lint.ts +0 -112
  749. package/src/search-params/analyze.ts +0 -192
  750. package/src/search-params/builtin-codecs.ts +0 -228
  751. package/src/search-params/create.ts +0 -321
  752. package/src/server/dev-fetch-instrumentation.ts +0 -96
  753. package/src/server/dev-span-processor.ts +0 -78
  754. package/src/server/manifest-status-resolver.ts +0 -215
  755. package/src/server/prerender.ts +0 -139
  756. package/src/server/response-cache.ts +0 -410
  757. package/src/utils/directive-parser.ts +0 -529
  758. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -0,0 +1,357 @@
1
+ /**
2
+ * Convention linter — validates common misconfigurations in the route tree.
3
+ *
4
+ * Runs at scan time (build and dev startup). Each check produces a warning
5
+ * with the file path, what's wrong, and what to do about it.
6
+ *
7
+ * These are warnings, not errors — they don't block the build. The goal is
8
+ * to catch issues that would otherwise produce cryptic runtime behavior
9
+ * (silent 404s, empty pages, confusing React errors).
10
+ *
11
+ * Design doc: 07-routing.md, 10-error-handling.md
12
+ */
13
+
14
+ import { readFileSync, existsSync } from 'node:fs';
15
+ import type { RouteTree, SegmentNode } from './types.js';
16
+ import { swallow } from '../server/logger.js';
17
+
18
+ // ─── Types ──────────────────────────────────────────────────────────────────
19
+
20
+ export interface ConventionWarning {
21
+ /** Warning ID for deduplication and filtering. */
22
+ id: string;
23
+ /** Human-readable single-line summary. */
24
+ summary: string;
25
+ /** Multi-line details with file path and fix suggestion. */
26
+ details: string;
27
+ /** Severity: 'warn' for potential issues, 'error' for definite misconfigurations. */
28
+ level: 'warn' | 'error';
29
+ }
30
+
31
+ // ─── Lint Rules ─────────────────────────────────────────────────────────────
32
+
33
+ /**
34
+ * Run all convention lint checks on a route tree.
35
+ *
36
+ * Returns an array of warnings. Empty array means everything looks good.
37
+ */
38
+ export function lintConventions(tree: RouteTree, appDir: string): ConventionWarning[] {
39
+ const warnings: ConventionWarning[] = [];
40
+
41
+ // Check 1: app/ directory exists (caller should check before scanning,
42
+ // but we validate the root has at least one routable file)
43
+ checkEmptyApp(tree.root, appDir, warnings);
44
+
45
+ // Check 2: route.ts without recognized HTTP method exports
46
+ checkRouteExports(tree.root, warnings);
47
+
48
+ // Check 3: Segments with layout but no page/route anywhere in subtree
49
+ // (not a misconfiguration per se — layouts without pages are valid for
50
+ // route groups. Skip this check.)
51
+
52
+ // Check 4: Root segment has no layout.tsx (no HTML shell)
53
+ checkRootLayout(tree.root, warnings);
54
+
55
+ // Check 5: page.tsx / layout.tsx without default export
56
+ checkDefaultExports(tree.root, warnings);
57
+
58
+ return warnings;
59
+ }
60
+
61
+ // ─── Check: Empty App ───────────────────────────────────────────────────────
62
+
63
+ /**
64
+ * Warn when the app/ directory has no routable files at all.
65
+ *
66
+ * This catches the "I created app/ but didn't add any pages" case where
67
+ * every request silently 404s with no guidance.
68
+ */
69
+ function checkEmptyApp(root: SegmentNode, appDir: string, warnings: ConventionWarning[]): void {
70
+ if (hasAnyRoutable(root)) return;
71
+
72
+ warnings.push({
73
+ id: 'EMPTY_APP',
74
+ summary: 'No pages or route handlers found in app/',
75
+ details:
76
+ ` Directory: ${appDir}\n\n` +
77
+ ' Your app/ directory has no page.tsx or route.ts files.\n' +
78
+ ' Every request will return 404.\n\n' +
79
+ ' To fix: Create app/page.tsx with a default export:\n\n' +
80
+ ' export default function Home() {\n return <h1>Hello</h1>;\n }\n',
81
+ level: 'warn',
82
+ });
83
+ }
84
+
85
+ /**
86
+ * Check if a segment tree has any routable files (page or route) anywhere.
87
+ */
88
+ function hasAnyRoutable(node: SegmentNode): boolean {
89
+ if (node.page || node.route) return true;
90
+ for (const child of node.children) {
91
+ if (hasAnyRoutable(child)) return true;
92
+ }
93
+ for (const slot of Object.values(node.slots)) {
94
+ if (hasAnyRoutable(slot)) return true;
95
+ }
96
+ return false;
97
+ }
98
+
99
+ /**
100
+ * Check if a segment tree has any page files (not just route handlers).
101
+ * Used by checkRootLayout to avoid false positives for API-only apps (TIM-794).
102
+ * API-only apps (just route.ts handlers) don't need a root layout.
103
+ */
104
+ function hasAnyPage(node: SegmentNode): boolean {
105
+ if (node.page) return true;
106
+ for (const child of node.children) {
107
+ if (hasAnyPage(child)) return true;
108
+ }
109
+ for (const slot of Object.values(node.slots)) {
110
+ if (hasAnyPage(slot)) return true;
111
+ }
112
+ return false;
113
+ }
114
+
115
+ // ─── Check: Route Exports ───────────────────────────────────────────────────
116
+
117
+ /** HTTP methods that route.ts can export. */
118
+ const HTTP_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'];
119
+
120
+ /**
121
+ * Pattern to detect named exports that look like HTTP method handlers.
122
+ * Matches: export function GET, export const GET, export async function POST, etc.
123
+ * Also matches: export { GET } or re-exports like export { GET } from './handler'.
124
+ *
125
+ * The re-export branch uses word boundaries (\b) around method names to avoid
126
+ * matching substrings (e.g. TARGET should not match GET). See TIM-795.
127
+ */
128
+ const EXPORT_PATTERN = new RegExp(
129
+ `export\\s+(?:async\\s+)?(?:function|const|let|var)\\s+(${HTTP_METHODS.join('|')})\\b` +
130
+ `|export\\s*\\{[^}]*\\b(${HTTP_METHODS.join('|')})\\b[^}]*\\}`
131
+ );
132
+
133
+ /**
134
+ * Warn when a route.ts file doesn't appear to export any recognized HTTP methods.
135
+ *
136
+ * Uses static analysis (regex on source text) — not module loading.
137
+ * This is intentionally conservative: it may miss complex re-exports but
138
+ * catches the common case of an empty route.ts or one with wrong export names.
139
+ */
140
+ function checkRouteExports(node: SegmentNode, warnings: ConventionWarning[]): void {
141
+ if (node.route) {
142
+ const filePath = node.route.filePath;
143
+ try {
144
+ const source = readFileSync(filePath, 'utf-8');
145
+ if (!EXPORT_PATTERN.test(source)) {
146
+ // Check if there's a default export (common mistake)
147
+ const hasDefaultExport = /export\s+default\b/.test(source);
148
+ const hint = hasDefaultExport
149
+ ? ' It looks like you have a default export. route.ts uses named exports\n' +
150
+ ' for HTTP methods (GET, POST, etc.), not a default export.\n'
151
+ : '';
152
+
153
+ warnings.push({
154
+ id: 'ROUTE_NO_METHODS',
155
+ summary: `route.ts has no HTTP method exports: ${filePath}`,
156
+ details:
157
+ ` File: ${filePath}\n\n` +
158
+ ' route.ts files must export named HTTP method handlers.\n' +
159
+ ' Without them, the route matches but returns 405 Method Not Allowed.\n\n' +
160
+ hint +
161
+ ' Example:\n\n' +
162
+ ' export function GET(ctx: RouteContext) {\n' +
163
+ " return Response.json({ hello: 'world' });\n" +
164
+ ' }\n',
165
+ level: 'warn',
166
+ });
167
+ }
168
+ } catch (err) {
169
+ swallow(err, `convention-lint: unreadable route.ts ${filePath}`);
170
+ }
171
+ }
172
+
173
+ // Recurse
174
+ for (const child of node.children) {
175
+ checkRouteExports(child, warnings);
176
+ }
177
+ for (const slot of Object.values(node.slots)) {
178
+ checkRouteExports(slot, warnings);
179
+ }
180
+ }
181
+
182
+ // ─── Check: Root Layout ─────────────────────────────────────────────────────
183
+
184
+ /**
185
+ * Warn when the root segment has no layout.tsx.
186
+ *
187
+ * Without a root layout, there's no HTML shell (<html>, <body>).
188
+ * The page will render but may have hydration issues or no proper document structure.
189
+ */
190
+ function checkRootLayout(root: SegmentNode, warnings: ConventionWarning[]): void {
191
+ if (root.layout) return;
192
+
193
+ // Only warn if there are pages — API-only apps (just route.ts handlers)
194
+ // don't need a root layout (TIM-794).
195
+ if (!hasAnyPage(root)) return;
196
+
197
+ warnings.push({
198
+ id: 'NO_ROOT_LAYOUT',
199
+ summary: 'No root layout.tsx found',
200
+ details:
201
+ ' Your app has pages but no root layout.\n' +
202
+ ' Without app/layout.tsx, pages have no <html> or <body> wrapper.\n\n' +
203
+ ' To fix: Create app/layout.tsx:\n\n' +
204
+ ' export default function RootLayout({ children }: { children: React.ReactNode }) {\n' +
205
+ ' return (\n' +
206
+ ' <html lang="en">\n' +
207
+ ' <body>{children}</body>\n' +
208
+ ' </html>\n' +
209
+ ' );\n' +
210
+ ' }\n',
211
+ level: 'warn',
212
+ });
213
+ }
214
+
215
+ // ─── Check: Default Exports ───────────────────────────────────────────
216
+
217
+ /**
218
+ * Pattern to detect a default export in source code.
219
+ * Matches: export default function, export default class, export default
220
+ * Also matches: export { X as default }, export { default } from './Impl'
221
+ *
222
+ * The third alternative catches bare `default` re-exports (TIM-790).
223
+ * The negative lookahead (?!\s+as\b) prevents matching `export { default as X }`
224
+ * which is a named export, not a default export (TIM-806).
225
+ */
226
+ const DEFAULT_EXPORT_PATTERN =
227
+ /export\s+default\b|export\s*\{[^}]*\bas\s+default\b|export\s*\{[^}]*\bdefault\b(?!\s+as\b)[^}]*\}/;
228
+
229
+ /**
230
+ * Warn when page.tsx or layout.tsx files don't have a default export.
231
+ *
232
+ * Without a default export:
233
+ * - page.tsx: the page renders nothing (empty content)
234
+ * - layout.tsx: the layout module loads but has no component to render
235
+ *
236
+ * Uses static analysis (regex on source text) — intentionally conservative.
237
+ */
238
+ function checkDefaultExports(node: SegmentNode, warnings: ConventionWarning[]): void {
239
+ // Check page files (tsx/ts/jsx/js only — not mdx, which is default-exported by the mdx compiler)
240
+ if (node.page && isScriptExtension(node.page.extension)) {
241
+ checkFileDefaultExport(node.page.filePath, 'page', warnings);
242
+ }
243
+
244
+ // Check layout files
245
+ if (node.layout && isScriptExtension(node.layout.extension)) {
246
+ checkFileDefaultExport(node.layout.filePath, 'layout', warnings);
247
+ }
248
+
249
+ // Recurse
250
+ for (const child of node.children) {
251
+ checkDefaultExports(child, warnings);
252
+ }
253
+ for (const slot of Object.values(node.slots)) {
254
+ checkDefaultExports(slot, warnings);
255
+ }
256
+ }
257
+
258
+ function isScriptExtension(ext: string): boolean {
259
+ return ext === 'tsx' || ext === 'ts' || ext === 'jsx' || ext === 'js';
260
+ }
261
+
262
+ function checkFileDefaultExport(
263
+ filePath: string,
264
+ fileType: string,
265
+ warnings: ConventionWarning[]
266
+ ): void {
267
+ try {
268
+ const source = readFileSync(filePath, 'utf-8');
269
+ if (!DEFAULT_EXPORT_PATTERN.test(source)) {
270
+ warnings.push({
271
+ id: `NO_DEFAULT_EXPORT:${filePath}`,
272
+ summary: `${fileType}.tsx has no default export: ${filePath}`,
273
+ details:
274
+ ` File: ${filePath}\n\n` +
275
+ ` ${fileType}.tsx files must export a default React component.\n` +
276
+ ` Without a default export, the ${fileType === 'page' ? 'page renders nothing' : 'layout has no component to wrap children'}.\n\n` +
277
+ ` To fix: Add a default export:\n\n` +
278
+ ` export default function My${fileType === 'page' ? 'Page' : 'Layout'}(${fileType === 'layout' ? '{ children }' : ''}) {\n` +
279
+ ` return ${fileType === 'layout' ? '<div>{children}</div>' : '<h1>Hello</h1>'};\n` +
280
+ ` }\n`,
281
+ level: 'warn',
282
+ });
283
+ }
284
+ } catch (err) {
285
+ swallow(err, `convention-lint: unreadable ${fileType} file ${filePath}`);
286
+ }
287
+ }
288
+
289
+ // ─── Check: App Directory Exists ────────────────────────────────────────────
290
+
291
+ /**
292
+ * Check if the app/ directory exists. Called before scanning.
293
+ * Returns a warning if missing, or null if the directory exists.
294
+ */
295
+ export function checkAppDirExists(appDir: string): ConventionWarning | null {
296
+ if (existsSync(appDir)) return null;
297
+
298
+ return {
299
+ id: 'NO_APP_DIR',
300
+ summary: 'No app/ directory found',
301
+ details:
302
+ ` Expected: ${appDir}\n\n` +
303
+ ' timber.js requires an app/ directory for file-system routing.\n' +
304
+ ' Every request will return 404 until you create it.\n\n' +
305
+ ' To fix: Create the app/ directory with a page:\n\n' +
306
+ ' mkdir -p app\n' +
307
+ ' # Create app/layout.tsx and app/page.tsx\n',
308
+ level: 'error',
309
+ };
310
+ }
311
+
312
+ // ─── Formatting ─────────────────────────────────────────────────────────────
313
+
314
+ const YELLOW = '\x1b[33m';
315
+ const RED = '\x1b[31m';
316
+ const BOLD = '\x1b[1m';
317
+ const DIM = '\x1b[2m';
318
+ const RESET = '\x1b[0m';
319
+
320
+ /**
321
+ * Format warnings for terminal output.
322
+ *
323
+ * Groups by severity, uses colors, and includes fix suggestions.
324
+ */
325
+ export function formatConventionWarnings(warnings: ConventionWarning[]): string {
326
+ if (warnings.length === 0) return '';
327
+
328
+ const errors = warnings.filter((w) => w.level === 'error');
329
+ const warns = warnings.filter((w) => w.level === 'warn');
330
+
331
+ const lines: string[] = [];
332
+
333
+ if (errors.length > 0) {
334
+ lines.push(
335
+ `${RED}${BOLD}[timber]${RESET} ${RED}${errors.length} configuration error${errors.length !== 1 ? 's' : ''}:${RESET}`
336
+ );
337
+ for (const e of errors) {
338
+ lines.push('');
339
+ lines.push(` ${RED}✗${RESET} ${e.summary}`);
340
+ lines.push(`${DIM}${e.details}${RESET}`);
341
+ }
342
+ }
343
+
344
+ if (warns.length > 0) {
345
+ if (errors.length > 0) lines.push('');
346
+ lines.push(
347
+ `${YELLOW}${BOLD}[timber]${RESET} ${YELLOW}${warns.length} configuration warning${warns.length !== 1 ? 's' : ''}:${RESET}`
348
+ );
349
+ for (const w of warns) {
350
+ lines.push('');
351
+ lines.push(` ${YELLOW}⚠${RESET} ${w.summary}`);
352
+ lines.push(`${DIM}${w.details}${RESET}`);
353
+ }
354
+ }
355
+
356
+ return lines.join('\n');
357
+ }
@@ -1,4 +1,4 @@
1
- export { scanRoutes, classifySegment } from './scanner.js';
1
+ export { scanRoutes } from './scanner.js';
2
2
  export { generateRouteMap } from './codegen.js';
3
3
  export type { CodegenOptions } from './codegen.js';
4
4
  export type {
@@ -12,3 +12,7 @@ export type {
12
12
  export { DEFAULT_PAGE_EXTENSIONS, INTERCEPTION_MARKERS } from './types.js';
13
13
  export { collectInterceptionRewrites } from './interception.js';
14
14
  export type { InterceptionRewrite } from './interception.js';
15
+ export { classifyUrlSegment, classifySegment } from './segment-classify.js';
16
+ export type { UrlSegment, SegmentClassification } from './segment-classify.js';
17
+ export { collectLeafRoutes } from './walkers.js';
18
+ export type { LeafRoute, CollectLeafRoutesOptions } from './walkers.js';
@@ -70,7 +70,7 @@ function walkForInterceptions(
70
70
  }
71
71
 
72
72
  // Check slots (intercepting routes are typically inside slots like @modal)
73
- for (const [, slot] of node.slots) {
73
+ for (const slot of Object.values(node.slots)) {
74
74
  walkForInterceptions(slot, ancestors, rewrites);
75
75
  }
76
76
  }
@@ -0,0 +1,308 @@
1
+ /**
2
+ * Typed `<Link>` codegen — interface augmentation generation.
3
+ *
4
+ * Extracted from `codegen.ts` to keep that file under the project's
5
+ * 500-line cap. This module owns everything that emits the
6
+ * `interface LinkFunction { ... }` augmentation blocks in the generated
7
+ * `.timber/timber-routes.d.ts`.
8
+ *
9
+ * Two augmentation blocks are emitted:
10
+ *
11
+ * 1. **Per-route discriminated union** (`formatTypedLinkOverloads`) —
12
+ * one call signature whose props is a union keyed on `href`. TS
13
+ * narrows by literal href and reports prop errors against the
14
+ * matched variant. See TIM-835 and `design/09-typescript.md`.
15
+ *
16
+ * 2. **Catch-all overloads** (`formatLinkCatchAllOverloads`) — external
17
+ * href literals (`http://`, `mailto:`, etc.) and a computed-string
18
+ * `<H extends string>` signature for runtime-computed paths.
19
+ *
20
+ * Block ordering is critical for error UX: per-route is emitted FIRST
21
+ * so that, after TS's "later overload set ordered first" merge rule,
22
+ * the discriminated union ends up LAST in resolution order — the
23
+ * overload TS reports against on failure.
24
+ */
25
+
26
+ import type { ParamEntry, RouteEntry } from './codegen-types.js';
27
+ import {
28
+ buildCodecChainType,
29
+ buildSchemaParamType,
30
+ formatSearchParamsType,
31
+ } from './codegen-shared.js';
32
+
33
+ /** Shared Link base-props type literal used in every emitted call signature. */
34
+ export const LINK_BASE_PROPS_TYPE =
35
+ "Omit<import('react').AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> & { prefetch?: boolean; scroll?: boolean; preserveSearchParams?: true | string[]; onNavigate?: import('./client/link.js').OnNavigateHandler; children?: import('react').ReactNode }";
36
+
37
+ /**
38
+ * Build a TypeScript template literal pattern for a dynamic route.
39
+ * e.g. '/products/[id]' → '/products/${string}'
40
+ * '/blog/[...slug]' → '/blog/${string}'
41
+ * '/docs/[[...path]]' → '/docs/${string}' (also matches /docs)
42
+ * '/[org]/[repo]' → '/${string}/${string}'
43
+ */
44
+ export function buildResolvedPattern(route: RouteEntry): string | null {
45
+ const parts = route.urlPath.split('/');
46
+ const templateParts = parts.map((part) => {
47
+ if (part.startsWith('[[...') && part.endsWith(']]')) {
48
+ // Optional catch-all — matches any trailing path
49
+ return '${string}';
50
+ }
51
+ if (part.startsWith('[...') && part.endsWith(']')) {
52
+ // Catch-all — matches one or more segments
53
+ return '${string}';
54
+ }
55
+ if (part.startsWith('[') && part.endsWith(']')) {
56
+ // Dynamic segment
57
+ return '${string}';
58
+ }
59
+ return part;
60
+ });
61
+ return templateParts.join('/');
62
+ }
63
+
64
+ /**
65
+ * Format the segmentParams type for Link overloads.
66
+ *
67
+ * Link params accept `string | number` for single dynamic segments
68
+ * (convenience — values are stringified at runtime). Catch-all and
69
+ * optional catch-all remain `string[]` / `string[] | undefined`.
70
+ *
71
+ * When the segment's params chain (TIM-834) declares a typed codec, the
72
+ * inferred type from the codec wins via a nested conditional.
73
+ */
74
+ export function formatLinkParamsType(
75
+ params: ParamEntry[],
76
+ importBase?: string,
77
+ hasSchema?: boolean
78
+ ): string {
79
+ if (params.length === 0) {
80
+ return '{}';
81
+ }
82
+
83
+ const fields = params.map((p) => {
84
+ const fallback = p.type === 'string' ? 'string | number' : p.type;
85
+ const codecType = hasSchema
86
+ ? buildSchemaParamType(p)
87
+ : buildCodecChainType(p, importBase, fallback);
88
+ return `${p.name}: ${codecType}`;
89
+ });
90
+ return `{ ${fields.join('; ')} }`;
91
+ }
92
+
93
+ /**
94
+ * Catch-all call signatures for `<Link>` — external hrefs and computed
95
+ * `string` variables. Emitted from codegen in a SEPARATE
96
+ * `declare module` block (declared AFTER the per-route block) so the TS
97
+ * "later overload set ordered first" rule places these catch-all
98
+ * signatures ahead of per-route in resolution order, leaving per-route
99
+ * as the final overload whose error message is reported on failure.
100
+ *
101
+ * The conditional `string extends H ? ... : never` protection preserves
102
+ * TIM-624's guarantee that unknown internal path literals don't match
103
+ * the catch-all — typos like `<Link href="/typo" />` still error.
104
+ */
105
+ export function formatLinkCatchAllOverloads(): string[] {
106
+ const lines: string[] = [];
107
+ const baseProps = LINK_BASE_PROPS_TYPE;
108
+
109
+ // TIM-830: the catch-all signatures accept EITHER the legacy
110
+ // `{ definition, values }` wrapper OR a flat `Record<string, unknown>`
111
+ // values object. External/computed hrefs can't be looked up in the
112
+ // runtime registry, so the wrapped form is still the reliable path;
113
+ // the flat form is kept permissive for callers migrating from typed-
114
+ // route hrefs to computed strings. `resolveHref` discriminates at
115
+ // runtime via the presence of a `definition` key.
116
+ const catchAllSearchParams =
117
+ '{ definition: SearchParamsDefinition<Record<string, unknown>>; values: Record<string, unknown> } | Record<string, unknown>';
118
+
119
+ // ExternalHref inlined here rather than referenced as an exported
120
+ // alias so the generated .d.ts stands alone without source imports.
121
+ const externalHref =
122
+ '`http://${string}` | `https://${string}` | `mailto:${string}` | `tel:${string}` | `ftp://${string}` | `//${string}` | `#${string}` | `?${string}`';
123
+
124
+ lines.push(' // Typed Link overloads — catch-all (block 2 / emitted second)');
125
+ lines.push(' interface LinkFunction {');
126
+
127
+ // (1) External/literal-protocol hrefs.
128
+ //
129
+ // TIM-833: `segmentParams` is permissively typed as
130
+ // `Record<string, unknown>` (not `never`) so generic wrappers that
131
+ // forward a `LinkProps`-shaped object can compile when the wrapper
132
+ // happens to bottom out at an external href. There are no dynamic
133
+ // segments to interpolate for an external href, so this prop is
134
+ // ignored at runtime — accepting an open-shape object instead of
135
+ // forbidding it removes a footgun without changing behavior.
136
+ lines.push(` (props: ${baseProps} & {`);
137
+ lines.push(` href: ${externalHref}`);
138
+ lines.push(` segmentParams?: Record<string, unknown>`);
139
+ lines.push(` searchParams?: ${catchAllSearchParams}`);
140
+ lines.push(` }): import('react').JSX.Element`);
141
+
142
+ // (2) Computed/variable href — non-literal `string` only.
143
+ //
144
+ // `string extends H` is true only when H is the wide `string` type,
145
+ // not a specific literal. For literal hrefs, this overload must NOT
146
+ // be selectable so the per-route discriminated union (block 1) is
147
+ // the resolution target.
148
+ //
149
+ // TIM-833 follow-up: the previous shape used `string extends H ? {...} : never`
150
+ // on the WHOLE props type. For literal H, that collapsed `props` to
151
+ // `never`, and JSX type inference then read `(never).children` as
152
+ // `never` — producing the misleading
153
+ // `'children' prop expects type 'never' which requires multiple
154
+ // children, but only a single child was provided` (TS2745) error,
155
+ // which buried the actual prop-mismatch message under a noise diagnostic.
156
+ //
157
+ // Fix: move the `: never` from the whole props onto just the `href`
158
+ // field. The overload remains uncallable for literal H (since `"/x"`
159
+ // is not assignable to `never`), but `children` retains its real
160
+ // `ReactNode` type so JSX inference no longer collapses to never.
161
+ // The diagnostic surface becomes: TS reports the per-route block's
162
+ // error chain (the helpful "Type 'number' is not assignable to type
163
+ // 'string'" message) WITHOUT a leading TS2745 noise line.
164
+ lines.push(` <H extends string>(`);
165
+ lines.push(` props: ${baseProps} & {`);
166
+ lines.push(` href: string extends H ? H : never`);
167
+ lines.push(` segmentParams?: Record<string, string | number | string[]>`);
168
+ lines.push(` searchParams?: ${catchAllSearchParams}`);
169
+ lines.push(` }`);
170
+ lines.push(` ): import('react').JSX.Element`);
171
+
172
+ lines.push(' }');
173
+ return lines;
174
+ }
175
+
176
+ /**
177
+ * Generate typed per-route Link call signatures via LinkFunction
178
+ * interface merging.
179
+ *
180
+ * TIM-835: This emits a SINGLE call signature whose props is a
181
+ * discriminated union keyed on `href`. TypeScript narrows the union by
182
+ * the literal `href` at the call site, then checks the rest of the
183
+ * props against the matched variant. When `segmentParams` or
184
+ * `searchParams` is wrong, TS reports the error against the matched
185
+ * variant — naming the user's actual `href` and the offending field.
186
+ *
187
+ * Before TIM-835, this function emitted N separate per-route overloads
188
+ * (one per route, sometimes two for dynamic routes). When ALL overloads
189
+ * failed, TS would pick an arbitrary failed overload (heuristically the
190
+ * "last tried") to render the diagnostic, often pointing at a route
191
+ * completely unrelated to the one the user wrote. The discriminated
192
+ * union sidesteps overload-resolution heuristics entirely.
193
+ *
194
+ * Open property shapes (`Record<string, unknown>` instead of `never`)
195
+ * for `segmentParams` on routes that don't declare them keep generic
196
+ * `LinkProps`-spreading wrappers compiling. (Aligned with TIM-833.)
197
+ *
198
+ * TIM-832: this function still emits the per-route block FIRST and the
199
+ * catch-all block follows, so per-route remains the LAST overload set in
200
+ * resolution order — the one TS reports against on failure. With a
201
+ * discriminated union there is only one call signature in this block,
202
+ * so the resolved-template-vs-pattern ordering reduces to placing the
203
+ * pattern variant before the resolved-template variant inside the union.
204
+ */
205
+ export function formatTypedLinkOverloads(
206
+ routes: RouteEntry[],
207
+ importBase?: string,
208
+ hasSchema?: boolean
209
+ ): string[] {
210
+ const lines: string[] = [];
211
+ const baseProps = LINK_BASE_PROPS_TYPE;
212
+
213
+ // Build the union variants. Each route contributes one variant for the
214
+ // pattern href (e.g. '/products/[id]') and, for dynamic routes, an
215
+ // additional variant for the resolved-template href (e.g.
216
+ // `/products/${string}`).
217
+ //
218
+ // The PATTERN variant must be listed BEFORE the resolved-template
219
+ // variant for the same route so that when the user writes the literal
220
+ // pattern href (`<Link href="/products/[id]" />`), TS narrows to the
221
+ // pattern variant (which carries the typed `segmentParams` shape)
222
+ // rather than the looser resolved-template variant. Without this
223
+ // ordering, TS would silently match the resolved-template variant
224
+ // first — swallowing typed-segmentParams type errors.
225
+ const variants: string[] = [];
226
+ for (const route of routes) {
227
+ const hasDynamicParams = route.params.length > 0;
228
+ // For routes with no dynamic params, accept an absent OR open-shape
229
+ // segmentParams. `Record<string, unknown>` keeps generic spreads
230
+ // compiling and gives a readable error if a non-object is passed.
231
+ const paramsProp = hasDynamicParams
232
+ ? `segmentParams: ${formatLinkParamsType(route.params, importBase, hasSchema)}`
233
+ : 'segmentParams?: Record<string, unknown>';
234
+
235
+ const searchParamsType = route.hasSearchParams
236
+ ? formatSearchParamsType(route, importBase)
237
+ : null;
238
+ // TIM-830: pattern href uses the FLAT `Partial<T>` shape — the
239
+ // runtime registry is keyed by the un-interpolated pattern.
240
+ //
241
+ // TIM-833: when the route has NO searchParams definition, use
242
+ // `Record<string, unknown>` (open shape) instead of
243
+ // `Record<string, never>` so generic `LinkProps`-spreading wrappers
244
+ // compile. The trade-off vs the original TIM-835 strict shape is
245
+ // that excess searchParams keys on a no-def route no longer raise
246
+ // a type error — but those keys are runtime no-ops anyway, and
247
+ // wrapper compatibility is the more common pain point. Routes WITH
248
+ // a searchParams definition still get strict `Partial<T>` typing.
249
+ const patternSearchParamsProp = searchParamsType
250
+ ? `searchParams?: Partial<${searchParamsType}>`
251
+ : 'searchParams?: Record<string, unknown>';
252
+
253
+ // Pattern variant FIRST (more specific).
254
+ variants.push(
255
+ `${baseProps} & { href: '${route.urlPath}'; ${paramsProp}; ${patternSearchParamsProp} }`
256
+ );
257
+
258
+ // Resolved-template variant SECOND (looser, matches interpolated hrefs).
259
+ if (hasDynamicParams) {
260
+ const templatePattern = buildResolvedPattern(route);
261
+ if (templatePattern) {
262
+ // TIM-830: resolved-template href keeps the WRAPPED
263
+ // `{ definition, values }` shape — the registry can't be looked
264
+ // up by an already-interpolated href.
265
+ //
266
+ // TIM-833: searchParams falls back to `Record<string, unknown>`
267
+ // (was `Record<string, never>`) when the route has no
268
+ // definition, mirroring the pattern-variant change above. The
269
+ // resolved-template `segmentParams` is intentionally KEPT as
270
+ // `Record<string, never>` below to preserve TIM-835's
271
+ // pattern-variant typo detection: loosening segmentParams here
272
+ // would let the resolved-template variant shadow the pattern
273
+ // variant on literal pattern hrefs and silently swallow keyed
274
+ // typos like `<Link href="/[id]" segmentParams={{ idz: 1 }} />`.
275
+ const resolvedSearchParamsProp = searchParamsType
276
+ ? `searchParams?: { definition: SearchParamsDefinition<${searchParamsType}>; values: Partial<${searchParamsType}> }`
277
+ : 'searchParams?: Record<string, unknown>';
278
+ // TIM-835: `Record<string, never>` for segmentParams forbids ANY
279
+ // provided keys on the resolved-template variant. Without this,
280
+ // the resolved-template would shadow the pattern variant for
281
+ // literal pattern hrefs (`<Link href="/products/[id]" segmentParams={...} />`)
282
+ // because both variants accept the literal `'/products/[id]'`
283
+ // and the looser variant would silently swallow segmentParams
284
+ // type errors.
285
+ variants.push(
286
+ `${baseProps} & { href: \`${templatePattern}\`; segmentParams?: Record<string, never>; ${resolvedSearchParamsProp} }`
287
+ );
288
+ }
289
+ }
290
+ }
291
+
292
+ lines.push(' interface LinkFunction {');
293
+ if (variants.length === 0) {
294
+ // No page routes — emit nothing. The catch-all block in the second
295
+ // augmentation still provides external/computed-string signatures.
296
+ lines.push(' }');
297
+ return lines;
298
+ }
299
+ lines.push(' (');
300
+ lines.push(' props:');
301
+ for (const variant of variants) {
302
+ lines.push(` | (${variant})`);
303
+ }
304
+ lines.push(` ): import('react').JSX.Element`);
305
+ lines.push(' }');
306
+
307
+ return lines;
308
+ }