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

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 (760) hide show
  1. package/dist/_chunks/actions-Dy8vOjFt.js +1101 -0
  2. package/dist/_chunks/actions-Dy8vOjFt.js.map +1 -0
  3. package/dist/_chunks/build-output-helper-B1n0sUqj.js +61 -0
  4. package/dist/_chunks/build-output-helper-B1n0sUqj.js.map +1 -0
  5. package/dist/_chunks/cli-schema-sync-ByZPGGmS.js +724 -0
  6. package/dist/_chunks/cli-schema-sync-ByZPGGmS.js.map +1 -0
  7. package/dist/_chunks/cli-schema-sync-DHQLjFu3.js +2 -0
  8. package/dist/_chunks/codec-registry-G9hD5LOq.js +21 -0
  9. package/dist/_chunks/codec-registry-G9hD5LOq.js.map +1 -0
  10. package/dist/_chunks/define-CPVQaWbx.js +124 -0
  11. package/dist/_chunks/define-CPVQaWbx.js.map +1 -0
  12. package/dist/_chunks/define-jeHDXZGq.js +195 -0
  13. package/dist/_chunks/define-jeHDXZGq.js.map +1 -0
  14. package/dist/_chunks/format-BjN9HLu9.js +14 -0
  15. package/dist/_chunks/format-BjN9HLu9.js.map +1 -0
  16. package/dist/_chunks/handler-store-CcwNX-gk.js +54 -0
  17. package/dist/_chunks/handler-store-CcwNX-gk.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-az6ZiBeU.js +41 -0
  21. package/dist/_chunks/merge-search-params-az6ZiBeU.js.map +1 -0
  22. package/dist/_chunks/navigation-root-DoRTeBm5.js +96 -0
  23. package/dist/_chunks/navigation-root-DoRTeBm5.js.map +1 -0
  24. package/dist/_chunks/registry-BI9cgCt7.js +20 -0
  25. package/dist/_chunks/registry-BI9cgCt7.js.map +1 -0
  26. package/dist/_chunks/resolve-schema-Bf8eC6q6.js +73 -0
  27. package/dist/_chunks/resolve-schema-Bf8eC6q6.js.map +1 -0
  28. package/dist/_chunks/router-ref-CpvjBqdu.js +28 -0
  29. package/dist/_chunks/router-ref-CpvjBqdu.js.map +1 -0
  30. package/dist/_chunks/schema-bridge-o0SwFtXW.js +86 -0
  31. package/dist/_chunks/schema-bridge-o0SwFtXW.js.map +1 -0
  32. package/dist/_chunks/segment-classify-CnfLLvir.js +137 -0
  33. package/dist/_chunks/segment-classify-CnfLLvir.js.map +1 -0
  34. package/dist/_chunks/segment-context-EsfQpS--.js +34 -0
  35. package/dist/_chunks/segment-context-EsfQpS--.js.map +1 -0
  36. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-m9-cNEIw.js} +1 -1
  37. package/dist/_chunks/ssr-data-m9-cNEIw.js.map +1 -0
  38. package/dist/_chunks/stale-reload-BN2kcE06.js +64 -0
  39. package/dist/_chunks/stale-reload-BN2kcE06.js.map +1 -0
  40. package/dist/_chunks/tracing-DvKLzCFa.js +329 -0
  41. package/dist/_chunks/tracing-DvKLzCFa.js.map +1 -0
  42. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-C9G6LP0F.js} +7 -20
  43. package/dist/_chunks/use-query-states-C9G6LP0F.js.map +1 -0
  44. package/dist/_chunks/use-segment-params-CtIAjqK0.js +185 -0
  45. package/dist/_chunks/use-segment-params-CtIAjqK0.js.map +1 -0
  46. package/dist/_chunks/validation-BMU5MPzP.js +84 -0
  47. package/dist/_chunks/validation-BMU5MPzP.js.map +1 -0
  48. package/dist/_chunks/walkers-DNp9tHyV.js +719 -0
  49. package/dist/_chunks/walkers-DNp9tHyV.js.map +1 -0
  50. package/dist/_chunks/{format-DviM89f0.js → warnings-B30wpfaS.js} +6 -45
  51. package/dist/_chunks/warnings-B30wpfaS.js.map +1 -0
  52. package/dist/adapters/build-output-helper.d.ts +28 -0
  53. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  54. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  55. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  56. package/dist/adapters/cloudflare-dev.js +73 -0
  57. package/dist/adapters/cloudflare-dev.js.map +1 -0
  58. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  59. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  60. package/dist/adapters/cloudflare-kv-cache.js +95 -0
  61. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  62. package/dist/adapters/cloudflare.d.ts +148 -12
  63. package/dist/adapters/cloudflare.d.ts.map +1 -1
  64. package/dist/adapters/cloudflare.js +142 -38
  65. package/dist/adapters/cloudflare.js.map +1 -1
  66. package/dist/adapters/compress-module.d.ts.map +1 -1
  67. package/dist/adapters/nitro.d.ts +17 -1
  68. package/dist/adapters/nitro.d.ts.map +1 -1
  69. package/dist/adapters/nitro.js +143 -45
  70. package/dist/adapters/nitro.js.map +1 -1
  71. package/dist/adapters/shared.d.ts +16 -0
  72. package/dist/adapters/shared.d.ts.map +1 -0
  73. package/dist/cache/cache-api.d.ts +24 -0
  74. package/dist/cache/cache-api.d.ts.map +1 -0
  75. package/dist/cache/handler-store.d.ts +31 -0
  76. package/dist/cache/handler-store.d.ts.map +1 -0
  77. package/dist/cache/index.d.ts +23 -7
  78. package/dist/cache/index.d.ts.map +1 -1
  79. package/dist/cache/index.js +151 -81
  80. package/dist/cache/index.js.map +1 -1
  81. package/dist/cache/singleflight.d.ts +18 -1
  82. package/dist/cache/singleflight.d.ts.map +1 -1
  83. package/dist/cache/sizeof.d.ts +22 -0
  84. package/dist/cache/sizeof.d.ts.map +1 -0
  85. package/dist/cache/timber-cache.d.ts +1 -1
  86. package/dist/cache/timber-cache.d.ts.map +1 -1
  87. package/dist/cli-schema-sync.d.ts +37 -0
  88. package/dist/cli-schema-sync.d.ts.map +1 -0
  89. package/dist/cli.d.ts +14 -2
  90. package/dist/cli.d.ts.map +1 -1
  91. package/dist/cli.js +42 -6
  92. package/dist/cli.js.map +1 -1
  93. package/dist/client/browser-dev.d.ts +34 -1
  94. package/dist/client/browser-dev.d.ts.map +1 -1
  95. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  96. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  97. package/dist/client/browser-entry/hmr.d.ts +21 -0
  98. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  99. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  100. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  101. package/dist/client/browser-entry/index.d.ts +30 -0
  102. package/dist/client/browser-entry/index.d.ts.map +1 -0
  103. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  104. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  105. package/dist/client/browser-entry/router-init.d.ts +23 -0
  106. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  107. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  108. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  109. package/dist/client/browser-entry/scroll.d.ts +19 -0
  110. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  111. package/dist/client/error-boundary.d.ts +12 -5
  112. package/dist/client/error-boundary.d.ts.map +1 -1
  113. package/dist/client/error-boundary.js +29 -6
  114. package/dist/client/error-boundary.js.map +1 -1
  115. package/dist/client/error-reconstituter.d.ts +54 -0
  116. package/dist/client/error-reconstituter.d.ts.map +1 -0
  117. package/dist/client/form.d.ts +16 -27
  118. package/dist/client/form.d.ts.map +1 -1
  119. package/dist/client/history.d.ts +19 -4
  120. package/dist/client/history.d.ts.map +1 -1
  121. package/dist/client/index.d.ts +9 -24
  122. package/dist/client/index.d.ts.map +1 -1
  123. package/dist/client/index.js +172 -1100
  124. package/dist/client/index.js.map +1 -1
  125. package/dist/client/internal.d.ts +19 -0
  126. package/dist/client/internal.d.ts.map +1 -0
  127. package/dist/client/internal.js +964 -0
  128. package/dist/client/internal.js.map +1 -0
  129. package/dist/client/link-pending-store.d.ts +63 -0
  130. package/dist/client/link-pending-store.d.ts.map +1 -0
  131. package/dist/client/link.d.ts +62 -55
  132. package/dist/client/link.d.ts.map +1 -1
  133. package/dist/client/nav-link-store.d.ts +36 -0
  134. package/dist/client/nav-link-store.d.ts.map +1 -0
  135. package/dist/client/navigation-api-types.d.ts +90 -0
  136. package/dist/client/navigation-api-types.d.ts.map +1 -0
  137. package/dist/client/navigation-api.d.ts +115 -0
  138. package/dist/client/navigation-api.d.ts.map +1 -0
  139. package/dist/client/navigation-context.d.ts +13 -2
  140. package/dist/client/navigation-context.d.ts.map +1 -1
  141. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
  142. package/dist/client/navigation-root.d.ts.map +1 -0
  143. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  144. package/dist/client/router-ref.d.ts +1 -1
  145. package/dist/client/router.d.ts +70 -4
  146. package/dist/client/router.d.ts.map +1 -1
  147. package/dist/client/rsc-fetch.d.ts +38 -3
  148. package/dist/client/rsc-fetch.d.ts.map +1 -1
  149. package/dist/client/segment-cache.d.ts +1 -1
  150. package/dist/client/segment-cache.d.ts.map +1 -1
  151. package/dist/client/segment-outlet.d.ts +63 -0
  152. package/dist/client/segment-outlet.d.ts.map +1 -0
  153. package/dist/client/ssr-data.d.ts +13 -4
  154. package/dist/client/ssr-data.d.ts.map +1 -1
  155. package/dist/client/stale-reload.d.ts +15 -0
  156. package/dist/client/stale-reload.d.ts.map +1 -1
  157. package/dist/client/state.d.ts +1 -1
  158. package/dist/client/top-loader.d.ts +5 -5
  159. package/dist/client/top-loader.d.ts.map +1 -1
  160. package/dist/client/use-cookie.d.ts +12 -0
  161. package/dist/client/use-cookie.d.ts.map +1 -1
  162. package/dist/client/use-link-status.d.ts +5 -5
  163. package/dist/client/use-link-status.d.ts.map +1 -1
  164. package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
  165. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  166. package/dist/client/use-query-states.d.ts +1 -1
  167. package/dist/client/use-query-states.d.ts.map +1 -1
  168. package/dist/client/use-router.d.ts +1 -1
  169. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  170. package/dist/client/use-segment-params.d.ts.map +1 -0
  171. package/dist/codec.d.ts +69 -0
  172. package/dist/codec.d.ts.map +1 -0
  173. package/dist/codec.js +75 -0
  174. package/dist/codec.js.map +1 -0
  175. package/dist/config-types.d.ts +294 -0
  176. package/dist/config-types.d.ts.map +1 -0
  177. package/dist/config-validation.d.ts +51 -0
  178. package/dist/config-validation.d.ts.map +1 -0
  179. package/dist/content/index.d.ts +1 -10
  180. package/dist/content/index.d.ts.map +1 -1
  181. package/dist/content/index.js +0 -2
  182. package/dist/cookies/define-cookie.d.ts +58 -25
  183. package/dist/cookies/define-cookie.d.ts.map +1 -1
  184. package/dist/cookies/index.d.ts +2 -1
  185. package/dist/cookies/index.d.ts.map +1 -1
  186. package/dist/cookies/index.js +251 -36
  187. package/dist/cookies/index.js.map +1 -1
  188. package/dist/cookies/json-cookie.d.ts +64 -0
  189. package/dist/cookies/json-cookie.d.ts.map +1 -0
  190. package/dist/cookies/validation.d.ts +46 -0
  191. package/dist/cookies/validation.d.ts.map +1 -0
  192. package/dist/dev-tools/404-page.d.ts +46 -0
  193. package/dist/dev-tools/404-page.d.ts.map +1 -0
  194. package/dist/dev-tools/browser-logs.d.ts +84 -0
  195. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  196. package/dist/dev-tools/error-page.d.ts +58 -0
  197. package/dist/dev-tools/error-page.d.ts.map +1 -0
  198. package/dist/dev-tools/holding-server.d.ts +54 -0
  199. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  200. package/dist/dev-tools/index.d.ts +31 -0
  201. package/dist/dev-tools/index.d.ts.map +1 -0
  202. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  203. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  204. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  205. package/dist/dev-tools/logger.d.ts.map +1 -0
  206. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  207. package/dist/dev-tools/logs.d.ts.map +1 -0
  208. package/dist/dev-tools/overlay.d.ts +91 -0
  209. package/dist/dev-tools/overlay.d.ts.map +1 -0
  210. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  211. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  212. package/dist/dev-tools/terminal.d.ts +28 -0
  213. package/dist/dev-tools/terminal.d.ts.map +1 -0
  214. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  215. package/dist/dev-tools/warnings.d.ts.map +1 -0
  216. package/dist/fonts/ast.d.ts +98 -6
  217. package/dist/fonts/ast.d.ts.map +1 -1
  218. package/dist/fonts/bundle.d.ts +48 -0
  219. package/dist/fonts/bundle.d.ts.map +1 -0
  220. package/dist/fonts/dev-middleware.d.ts +22 -0
  221. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  222. package/dist/fonts/local.d.ts +1 -1
  223. package/dist/fonts/pipeline.d.ts +167 -0
  224. package/dist/fonts/pipeline.d.ts.map +1 -0
  225. package/dist/fonts/transform.d.ts +78 -0
  226. package/dist/fonts/transform.d.ts.map +1 -0
  227. package/dist/fonts/types.d.ts +45 -1
  228. package/dist/fonts/types.d.ts.map +1 -1
  229. package/dist/fonts/virtual-modules.d.ts +94 -0
  230. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  231. package/dist/index.d.ts +46 -190
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/index.js +4807 -12729
  234. package/dist/index.js.map +1 -1
  235. package/dist/params/codec-registry.d.ts +26 -0
  236. package/dist/params/codec-registry.d.ts.map +1 -0
  237. package/dist/params/define-schema.d.ts +81 -0
  238. package/dist/params/define-schema.d.ts.map +1 -0
  239. package/dist/params/index.d.ts +5 -0
  240. package/dist/params/index.d.ts.map +1 -0
  241. package/dist/params/index.js +34 -0
  242. package/dist/params/index.js.map +1 -0
  243. package/dist/params/resolve-schema.d.ts +34 -0
  244. package/dist/params/resolve-schema.d.ts.map +1 -0
  245. package/dist/plugin-context.d.ts +107 -0
  246. package/dist/plugin-context.d.ts.map +1 -0
  247. package/dist/plugins/adapter-build.d.ts +1 -1
  248. package/dist/plugins/adapter-build.d.ts.map +1 -1
  249. package/dist/plugins/build-manifest.d.ts +2 -2
  250. package/dist/plugins/build-manifest.d.ts.map +1 -1
  251. package/dist/plugins/build-report.d.ts +9 -7
  252. package/dist/plugins/build-report.d.ts.map +1 -1
  253. package/dist/plugins/client-chunks.d.ts +32 -0
  254. package/dist/plugins/client-chunks.d.ts.map +1 -0
  255. package/dist/plugins/content.d.ts +1 -1
  256. package/dist/plugins/content.d.ts.map +1 -1
  257. package/dist/plugins/dev-server.d.ts +1 -1
  258. package/dist/plugins/dev-server.d.ts.map +1 -1
  259. package/dist/plugins/entries.d.ts +1 -1
  260. package/dist/plugins/entries.d.ts.map +1 -1
  261. package/dist/plugins/fonts.d.ts +17 -73
  262. package/dist/plugins/fonts.d.ts.map +1 -1
  263. package/dist/plugins/mdx.d.ts +1 -1
  264. package/dist/plugins/mdx.d.ts.map +1 -1
  265. package/dist/plugins/routing.d.ts +1 -1
  266. package/dist/plugins/routing.d.ts.map +1 -1
  267. package/dist/plugins/server-bundle.d.ts.map +1 -1
  268. package/dist/plugins/shims.d.ts +6 -5
  269. package/dist/plugins/shims.d.ts.map +1 -1
  270. package/dist/plugins/static-build.d.ts +5 -26
  271. package/dist/plugins/static-build.d.ts.map +1 -1
  272. package/dist/routing/codegen-shared.d.ts +63 -0
  273. package/dist/routing/codegen-shared.d.ts.map +1 -0
  274. package/dist/routing/codegen-types.d.ts +60 -0
  275. package/dist/routing/codegen-types.d.ts.map +1 -0
  276. package/dist/routing/codegen.d.ts +7 -2
  277. package/dist/routing/codegen.d.ts.map +1 -1
  278. package/dist/routing/convention-lint.d.ts +41 -0
  279. package/dist/routing/convention-lint.d.ts.map +1 -0
  280. package/dist/routing/index.d.ts +7 -1
  281. package/dist/routing/index.d.ts.map +1 -1
  282. package/dist/routing/index.js +4 -2
  283. package/dist/routing/link-codegen.d.ts +90 -0
  284. package/dist/routing/link-codegen.d.ts.map +1 -0
  285. package/dist/routing/scanner.d.ts +1 -10
  286. package/dist/routing/scanner.d.ts.map +1 -1
  287. package/dist/routing/schema-validation.d.ts +35 -0
  288. package/dist/routing/schema-validation.d.ts.map +1 -0
  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 +62 -21
  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 +147 -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 +114 -0
  565. package/src/params/index.ts +17 -0
  566. package/src/params/resolve-schema.ts +101 -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 +371 -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 +316 -177
  584. package/src/routing/convention-lint.ts +357 -0
  585. package/src/routing/index.ts +10 -1
  586. package/src/routing/interception.ts +1 -1
  587. package/src/routing/link-codegen.ts +308 -0
  588. package/src/routing/scanner.ts +165 -110
  589. package/src/routing/schema-validation.ts +149 -0
  590. package/src/routing/segment-classify.ts +188 -0
  591. package/src/routing/segment-codegen.ts +98 -0
  592. package/src/routing/types.ts +78 -25
  593. package/src/routing/walkers.ts +90 -0
  594. package/src/rsc-runtime/rsc.ts +2 -0
  595. package/src/rsc-runtime/ssr.ts +50 -0
  596. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  597. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  598. package/src/search-params/define.ts +538 -0
  599. package/src/search-params/index.ts +14 -20
  600. package/src/search-params/registry.ts +2 -2
  601. package/src/search-params/wrappers.ts +92 -0
  602. package/src/segment-params/define.ts +336 -0
  603. package/src/segment-params/index.ts +9 -0
  604. package/src/server/access-gate.tsx +76 -34
  605. package/src/server/action-client.ts +88 -15
  606. package/src/server/action-encryption.ts +144 -0
  607. package/src/server/action-handler.ts +112 -14
  608. package/src/server/actions.ts +10 -9
  609. package/src/server/als-registry.ts +55 -7
  610. package/src/server/asset-headers.ts +8 -34
  611. package/src/server/build-manifest.ts +10 -4
  612. package/src/server/coalesce-tick.ts +75 -0
  613. package/src/server/compress.ts +25 -7
  614. package/src/server/cookie-context.ts +468 -0
  615. package/src/server/cookie-parsing.ts +135 -0
  616. package/src/server/debug.ts +1 -1
  617. package/src/server/default-logger.ts +99 -0
  618. package/src/server/deny-boundary.ts +218 -0
  619. package/src/server/deny-renderer.ts +31 -50
  620. package/src/server/dev-source-map.ts +31 -0
  621. package/src/server/early-hints-sender.ts +3 -2
  622. package/src/server/early-hints.ts +36 -15
  623. package/src/server/error-boundary-wrapper.ts +74 -22
  624. package/src/server/fallback-error.ts +74 -102
  625. package/src/server/flight-injection-state.ts +113 -0
  626. package/src/server/flight-scripts.ts +62 -0
  627. package/src/server/flush.ts +2 -1
  628. package/src/server/form-data.ts +76 -0
  629. package/src/server/html-injector-core.ts +417 -0
  630. package/src/server/html-injectors.ts +235 -223
  631. package/src/server/index.ts +29 -183
  632. package/src/server/internal.ts +176 -0
  633. package/src/server/logger.ts +67 -36
  634. package/src/server/middleware-runner.ts +75 -4
  635. package/src/server/node-stream-transforms.ts +361 -0
  636. package/src/server/param-coercion.ts +206 -0
  637. package/src/server/pipeline-helpers.ts +204 -0
  638. package/src/server/pipeline-interception.ts +17 -16
  639. package/src/server/pipeline-metadata.ts +13 -0
  640. package/src/server/pipeline-outcome.ts +176 -0
  641. package/src/server/pipeline-phases.ts +460 -0
  642. package/src/server/pipeline.ts +154 -394
  643. package/src/server/port-resolution.ts +215 -0
  644. package/src/server/primitives.ts +111 -28
  645. package/src/server/render-timeout.ts +108 -0
  646. package/src/server/request-context.ts +168 -333
  647. package/src/server/route-element-builder.ts +309 -195
  648. package/src/server/route-handler.ts +24 -4
  649. package/src/server/route-matcher.ts +50 -231
  650. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  651. package/src/server/rsc-entry/api-handler.ts +16 -17
  652. package/src/server/rsc-entry/error-renderer.ts +305 -89
  653. package/src/server/rsc-entry/helpers.ts +137 -12
  654. package/src/server/rsc-entry/index.ts +316 -352
  655. package/src/server/rsc-entry/render-route.ts +307 -0
  656. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  657. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  658. package/src/server/rsc-entry/ssr-bridge.ts +14 -5
  659. package/src/server/rsc-entry/ssr-renderer.ts +187 -38
  660. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  661. package/src/server/safe-load.ts +60 -0
  662. package/src/server/sensitive-fields.ts +230 -0
  663. package/src/server/sitemap-generator.ts +338 -0
  664. package/src/server/sitemap-handler.ts +126 -0
  665. package/src/server/slot-resolver.ts +228 -246
  666. package/src/server/ssr-entry.ts +229 -32
  667. package/src/server/ssr-render.ts +289 -67
  668. package/src/server/ssr-wrappers.tsx +139 -0
  669. package/src/server/state-tree-diff.ts +4 -1
  670. package/src/server/status-code-resolver.ts +112 -128
  671. package/src/server/stream-utils.ts +213 -0
  672. package/src/server/tracing.ts +21 -10
  673. package/src/server/tree-builder.ts +202 -90
  674. package/src/server/tree-match.ts +198 -0
  675. package/src/server/types.ts +55 -6
  676. package/src/server/utils/escape-html.ts +20 -0
  677. package/src/server/version-skew.ts +104 -0
  678. package/src/shared/merge-search-params.ts +55 -0
  679. package/src/shims/font-google.ts +1 -1
  680. package/src/shims/font-local.ts +34 -0
  681. package/src/shims/headers.ts +5 -1
  682. package/src/shims/navigation-client.ts +4 -3
  683. package/src/shims/navigation.ts +14 -7
  684. package/src/utils/state-machine.ts +111 -0
  685. package/LICENSE +0 -8
  686. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  687. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  688. package/dist/_chunks/debug-gwlJkDuf.js +0 -108
  689. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  690. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  691. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  692. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  693. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  694. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  695. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  696. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  697. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  698. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  699. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  700. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  701. package/dist/cache/register-cached-function.d.ts +0 -17
  702. package/dist/cache/register-cached-function.d.ts.map +0 -1
  703. package/dist/client/browser-entry.d.ts +0 -21
  704. package/dist/client/browser-entry.d.ts.map +0 -1
  705. package/dist/client/link-status-provider.d.ts +0 -11
  706. package/dist/client/link-status-provider.d.ts.map +0 -1
  707. package/dist/client/transition-root.d.ts.map +0 -1
  708. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  709. package/dist/client/use-params.d.ts.map +0 -1
  710. package/dist/plugins/cache-transform.d.ts +0 -36
  711. package/dist/plugins/cache-transform.d.ts.map +0 -1
  712. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  713. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  714. package/dist/plugins/dev-logs.d.ts.map +0 -1
  715. package/dist/plugins/dynamic-transform.d.ts +0 -72
  716. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  717. package/dist/plugins/server-action-exports.d.ts +0 -26
  718. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  719. package/dist/routing/status-file-lint.d.ts +0 -33
  720. package/dist/routing/status-file-lint.d.ts.map +0 -1
  721. package/dist/search-params/analyze.d.ts +0 -54
  722. package/dist/search-params/analyze.d.ts.map +0 -1
  723. package/dist/search-params/builtin-codecs.d.ts +0 -105
  724. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  725. package/dist/search-params/codecs.d.ts +0 -53
  726. package/dist/search-params/codecs.d.ts.map +0 -1
  727. package/dist/search-params/create.d.ts +0 -106
  728. package/dist/search-params/create.d.ts.map +0 -1
  729. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  730. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  731. package/dist/server/dev-logger.d.ts.map +0 -1
  732. package/dist/server/dev-span-processor.d.ts.map +0 -1
  733. package/dist/server/dev-warnings.d.ts.map +0 -1
  734. package/dist/server/manifest-status-resolver.d.ts +0 -58
  735. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  736. package/dist/server/prerender.d.ts +0 -77
  737. package/dist/server/prerender.d.ts.map +0 -1
  738. package/dist/server/response-cache.d.ts +0 -54
  739. package/dist/server/response-cache.d.ts.map +0 -1
  740. package/dist/utils/directive-parser.d.ts +0 -70
  741. package/dist/utils/directive-parser.d.ts.map +0 -1
  742. package/src/cache/register-cached-function.ts +0 -103
  743. package/src/client/browser-entry.ts +0 -678
  744. package/src/client/link-status-provider.tsx +0 -30
  745. package/src/client/transition-root.tsx +0 -166
  746. package/src/plugins/cache-transform.ts +0 -199
  747. package/src/plugins/dev-error-overlay.ts +0 -230
  748. package/src/plugins/dynamic-transform.ts +0 -161
  749. package/src/plugins/server-action-exports.ts +0 -220
  750. package/src/routing/status-file-lint.ts +0 -112
  751. package/src/search-params/analyze.ts +0 -192
  752. package/src/search-params/builtin-codecs.ts +0 -228
  753. package/src/search-params/create.ts +0 -321
  754. package/src/server/dev-fetch-instrumentation.ts +0 -96
  755. package/src/server/dev-span-processor.ts +0 -78
  756. package/src/server/manifest-status-resolver.ts +0 -215
  757. package/src/server/prerender.ts +0 -139
  758. package/src/server/response-cache.ts +0 -410
  759. package/src/utils/directive-parser.ts +0 -529
  760. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -11,7 +11,9 @@
11
11
  import type { Plugin } from 'vite';
12
12
  import { existsSync } from 'node:fs';
13
13
  import { join } from 'node:path';
14
- import type { PluginContext } from '#/index.js';
14
+ import { createRequire } from 'node:module';
15
+ import { pathToFileURL } from 'node:url';
16
+ import type { PluginContext } from '../plugin-context.js';
15
17
 
16
18
  const MDX_EXTENSIONS = ['mdx', 'md'];
17
19
 
@@ -54,15 +56,49 @@ function shouldActivate(ctx: PluginContext): boolean {
54
56
  }
55
57
 
56
58
  /**
57
- * Try to dynamically import a module by name. Returns the default export
58
- * or the module itself, or undefined if the module is not installed.
59
+ * Try to dynamically import a module by name, resolving from the user's
60
+ * project root rather than from `@timber-js/app`'s own location.
61
+ *
62
+ * Why this matters: pnpm only hoists declared (peer) dependencies into a
63
+ * package's resolution scope. The MDX integration's optional companions
64
+ * — `remark-frontmatter`, `remark-mdx-frontmatter`, `@mdx-js/rollup` — are
65
+ * installed as direct deps of the consumer (e.g. `packages/website`), not
66
+ * `@timber-js/app`. A bare `import('remark-frontmatter')` from inside this
67
+ * file resolves against `packages/timber-app/node_modules` and silently
68
+ * fails with `ERR_MODULE_NOT_FOUND`, which made `tryImport` return
69
+ * `undefined` and skipped frontmatter parsing entirely — leaving MDX to
70
+ * choke on YAML as JS expressions (TIM-840).
71
+ *
72
+ * Resolving relative to `projectRoot` (via `createRequire`) makes the
73
+ * lookup walk the consumer's `node_modules` tree first, which is where
74
+ * pnpm puts the user's deps.
75
+ *
76
+ * Returns the default export, the module itself, or undefined if the
77
+ * module is not installed.
59
78
  */
60
- async function tryImport(name: string): Promise<unknown | undefined> {
79
+ async function tryImport(name: string, projectRoot: string): Promise<unknown | undefined> {
61
80
  try {
62
- const mod = await import(name);
81
+ // Anchor resolution at the consumer's package.json so we walk their
82
+ // node_modules tree, not @timber-js/app's. createRequire().resolve()
83
+ // returns an absolute file path that ESM dynamic import accepts when
84
+ // wrapped as a file:// URL.
85
+ const require = createRequire(join(projectRoot, 'package.json'));
86
+ const resolved = require.resolve(name);
87
+ const mod = await import(pathToFileURL(resolved).href);
63
88
  return mod.default ?? mod;
64
89
  } catch {
65
- return undefined;
90
+ // Fall back to a bare import — covers the rare case where the package
91
+ // lives next to @timber-js/app (e.g. monorepo with hoisted deps).
92
+ try {
93
+ const mod = await import(name);
94
+ return mod.default ?? mod;
95
+ } catch (e) {
96
+ console.debug(
97
+ `[timber] optional MDX dependency '${name}' not available:`,
98
+ e instanceof Error ? e.message : e
99
+ );
100
+ return undefined;
101
+ }
66
102
  }
67
103
  }
68
104
 
@@ -80,7 +116,7 @@ export function timberMdx(ctx: PluginContext): Plugin {
80
116
  async function activate(): Promise<void> {
81
117
  if (innerPlugin !== null || !shouldActivate(ctx)) return;
82
118
 
83
- const createMdxPlugin = (await tryImport('@mdx-js/rollup')) as
119
+ const createMdxPlugin = (await tryImport('@mdx-js/rollup', ctx.root)) as
84
120
  | ((options?: Record<string, unknown>) => Plugin)
85
121
  | undefined;
86
122
 
@@ -99,10 +135,11 @@ export function timberMdx(ctx: PluginContext): Plugin {
99
135
 
100
136
  const mdxConfig = ctx.config.mdx ?? {};
101
137
 
102
- // Auto-register frontmatter plugins
138
+ // Auto-register frontmatter plugins. Resolve from the consumer's root
139
+ // so pnpm finds packages declared in the user's package.json (TIM-840).
103
140
  const remarkPlugins: unknown[] = [];
104
- const remarkFrontmatter = await tryImport('remark-frontmatter');
105
- const remarkMdxFrontmatter = await tryImport('remark-mdx-frontmatter');
141
+ const remarkFrontmatter = await tryImport('remark-frontmatter', ctx.root);
142
+ const remarkMdxFrontmatter = await tryImport('remark-mdx-frontmatter', ctx.root);
106
143
  if (remarkFrontmatter) remarkPlugins.push(remarkFrontmatter);
107
144
  if (remarkMdxFrontmatter) remarkPlugins.push(remarkMdxFrontmatter);
108
145
 
@@ -10,25 +10,65 @@
10
10
 
11
11
  import type { Plugin, ViteDevServer } from 'vite';
12
12
  import { writeFile, mkdir } from 'node:fs/promises';
13
+ import { existsSync, readFileSync } from 'node:fs';
13
14
  import { join } from 'node:path';
14
- import { scanRoutes } from '#/routing/scanner.js';
15
- import { generateRouteMap } from '#/routing/codegen.js';
16
- import { collectInterceptionRewrites } from '#/routing/interception.js';
15
+ import { scanRoutes } from '../routing/scanner.js';
16
+ import { generateRouteMap } from '../routing/codegen.js';
17
+ import { collectInterceptionRewrites } from '../routing/interception.js';
17
18
  import {
18
- lintStatusFileDirectives,
19
- formatStatusFileLintWarnings,
20
- } from '#/routing/status-file-lint.js';
21
- import type { RouteTree, SegmentNode, RouteFile } from '#/routing/types.js';
22
- import type { PluginContext } from '#/index.js';
19
+ buildDirToRouteMap,
20
+ writeSegmentTypes,
21
+ type SegmentInfo,
22
+ } from '../routing/segment-codegen.js';
23
+ import { validateSchemaAgainstRoutes } from '../routing/schema-validation.js';
24
+
25
+ import {
26
+ lintConventions,
27
+ checkAppDirExists,
28
+ formatConventionWarnings,
29
+ } from '../routing/convention-lint.js';
30
+ import type { RouteTree, SegmentNode, RouteFile } from '../routing/types.js';
31
+ import type { PluginContext } from '../plugin-context.js';
23
32
 
24
33
  const VIRTUAL_MODULE_ID = 'virtual:timber-route-manifest';
25
34
  const RESOLVED_VIRTUAL_ID = `\0${VIRTUAL_MODULE_ID}`;
26
35
 
36
+ // TIM-830: Search-params registry virtual module.
37
+ //
38
+ // Statically imports the `searchParams` named export from every page
39
+ // that exports one, and registers each definition into the shared
40
+ // search-params registry keyed by the un-interpolated route pattern
41
+ // (e.g. '/products/[id]'). This lets `<Link>` serialize flat
42
+ // `Partial<T>` values at runtime without callers importing the
43
+ // definition at the call site.
44
+ //
45
+ // The imports are STATIC (`import { searchParams as r0 } from '...'`)
46
+ // so Vite/Rolldown tree-shakes each page's component body out of the
47
+ // registry chunk — only the `searchParams` named export is pulled in.
48
+ const SEARCH_PARAMS_REGISTRY_ID = 'virtual:timber-search-params-registry';
49
+ const RESOLVED_SEARCH_PARAMS_REGISTRY_ID = `\0${SEARCH_PARAMS_REGISTRY_ID}`;
50
+
51
+ // TIM-931: Schema virtual module.
52
+ //
53
+ // When app/schema.ts exists, this module imports it and resolves the
54
+ // bracket-keyed segmentParams codecs into a bare-name codec map for
55
+ // runtime coercion. When no schema exists, exports null.
56
+ const SCHEMA_ID = 'virtual:timber-schema';
57
+ const RESOLVED_SCHEMA_ID = `\0${SCHEMA_ID}`;
58
+
59
+ // TIM-935: $segment virtual module prefix.
60
+ // Resolved ID encodes segment info as JSON after the prefix.
61
+ //
62
+ // Each route directory gets a virtual module that exports the route
63
+ // and segmentPath. `import { route, segmentPath } from './$segment'`
64
+ // resolves to `\0$segment:<json>`.
65
+ const SEGMENT_PREFIX = '\0$segment:';
66
+
27
67
  /**
28
68
  * File convention names we track for changes that require manifest regeneration.
29
69
  */
30
70
  const ROUTE_FILE_PATTERNS =
31
- /\/(page|layout|middleware|access|route|error|default|denied|search-params|\d{3}|[45]xx|not-found|forbidden|unauthorized|sitemap|robots|manifest|favicon|icon|opengraph-image|twitter-image|apple-icon)\./;
71
+ /\/(page|layout|middleware|access|route|error|global-error|default|denied|params|schema|\d{3}|[45]xx|not-found|forbidden|unauthorized|sitemap|robots|manifest|favicon|icon|opengraph-image|twitter-image|apple-icon)\./;
32
72
 
33
73
  /**
34
74
  * Create the timber-routing Vite plugin.
@@ -70,6 +110,7 @@ function writeCodegen(ctx: PluginContext): void {
70
110
  Promise.all([
71
111
  writeFile(routesPath, content, 'utf-8'),
72
112
  writeFile(envPath, TIMBER_ENV_DTS, 'utf-8'),
113
+ writeSegmentTypes(ctx.routeTree!, ctx.appDir, ctx.root),
73
114
  ])
74
115
  )
75
116
  .catch((err) => {
@@ -82,20 +123,48 @@ export function timberRouting(ctx: PluginContext): Plugin {
82
123
  /** Track warned files to avoid repeating warnings on rescan. */
83
124
  const warnedFiles = new Set<string>();
84
125
 
126
+ /** Maps absolute filesystem directory → segment info for $segment resolution. */
127
+ let dirToRoute: Map<string, SegmentInfo> = new Map();
128
+
85
129
  function rescan(): void {
130
+ // Check app/ directory exists before scanning
131
+ const appDirWarning = checkAppDirExists(ctx.appDir);
132
+ if (appDirWarning) {
133
+ const formatted = formatConventionWarnings([appDirWarning]);
134
+ if (formatted) process.stderr.write(`${formatted}\n`);
135
+ // Still create an empty tree so the rest of the pipeline doesn't crash
136
+ ctx.routeTree = {
137
+ root: {
138
+ segmentName: '',
139
+ segmentType: 'static',
140
+ urlPath: '/',
141
+ children: [],
142
+ slots: {},
143
+ },
144
+ };
145
+ return;
146
+ }
147
+
86
148
  ctx.timer.start('route-scan');
87
149
  ctx.routeTree = scanRoutes(ctx.appDir, {
88
150
  pageExtensions: ctx.config.pageExtensions,
89
151
  });
90
152
  ctx.timer.end('route-scan');
153
+ dirToRoute = buildDirToRouteMap(ctx.routeTree, ctx.appDir);
91
154
  writeCodegen(ctx);
92
155
 
93
- // Lint status files for missing 'use client' directive
94
- const warnings = lintStatusFileDirectives(ctx.routeTree);
95
- const newWarnings = warnings.filter((w) => !warnedFiles.has(w.filePath));
96
- if (newWarnings.length > 0) {
97
- for (const w of newWarnings) warnedFiles.add(w.filePath);
98
- console.warn(formatStatusFileLintWarnings(newWarnings));
156
+ // Validate schema keys against filesystem segments.
157
+ // Warns on stale keys, bracket form mismatches, and missing keys.
158
+ // See design/41-global-params.md §Auto-Scaffolding
159
+ warnSchemaValidation(ctx);
160
+
161
+ // Lint conventions (empty app, missing methods, missing root layout)
162
+ const conventionWarnings = lintConventions(ctx.routeTree, ctx.appDir);
163
+ const newConventionWarnings = conventionWarnings.filter((w) => !warnedFiles.has(w.id));
164
+ if (newConventionWarnings.length > 0) {
165
+ for (const w of newConventionWarnings) warnedFiles.add(w.id);
166
+ const formatted = formatConventionWarnings(newConventionWarnings);
167
+ if (formatted) process.stderr.write(`${formatted}\n`);
99
168
  }
100
169
  }
101
170
 
@@ -110,7 +179,7 @@ export function timberRouting(ctx: PluginContext): Plugin {
110
179
  * - <root>/virtual:timber-route-manifest (Vite SSR build root prefix)
111
180
  * - \0virtual:timber-route-manifest (RSC plugin re-imports)
112
181
  */
113
- resolveId(id: string) {
182
+ resolveId(id: string, importer?: string) {
114
183
  // Strip \0 prefix if present (RSC plugin generates these)
115
184
  const cleanId = id.startsWith('\0') ? id.slice(1) : id;
116
185
 
@@ -123,6 +192,35 @@ export function timberRouting(ctx: PluginContext): Plugin {
123
192
  return RESOLVED_VIRTUAL_ID;
124
193
  }
125
194
 
195
+ // TIM-830: Search-params registry virtual module
196
+ if (
197
+ cleanId === SEARCH_PARAMS_REGISTRY_ID ||
198
+ cleanId.endsWith(`/${SEARCH_PARAMS_REGISTRY_ID}`)
199
+ ) {
200
+ return RESOLVED_SEARCH_PARAMS_REGISTRY_ID;
201
+ }
202
+
203
+ // TIM-931: Schema virtual module
204
+ if (cleanId === SCHEMA_ID || cleanId.endsWith(`/${SCHEMA_ID}`)) {
205
+ return RESOLVED_SCHEMA_ID;
206
+ }
207
+
208
+ // TIM-935: $segment virtual module.
209
+ // Resolves `import { route } from './$segment'` based on the
210
+ // importing file's directory in the app/ tree.
211
+ if (
212
+ importer &&
213
+ (cleanId === './$segment' || cleanId === './$segment.js' || cleanId === './$segment.ts')
214
+ ) {
215
+ // Strip \0 prefix from importer if present
216
+ const cleanImporter = importer.startsWith('\0') ? importer.slice(1) : importer;
217
+ const importerDir = cleanImporter.substring(0, cleanImporter.lastIndexOf('/'));
218
+ const segmentInfo = dirToRoute.get(importerDir);
219
+ if (segmentInfo !== undefined) {
220
+ return `${SEGMENT_PREFIX}${JSON.stringify(segmentInfo)}`;
221
+ }
222
+ }
223
+
126
224
  return null;
127
225
  },
128
226
 
@@ -133,14 +231,36 @@ export function timberRouting(ctx: PluginContext): Plugin {
133
231
  * with absolute import paths for all file references.
134
232
  */
135
233
  load(id: string) {
136
- if (id !== RESOLVED_VIRTUAL_ID) return null;
234
+ if (id === RESOLVED_VIRTUAL_ID) {
235
+ // If routeTree hasn't been built yet (shouldn't happen), scan now
236
+ if (!ctx.routeTree) {
237
+ rescan();
238
+ }
239
+ return generateManifestModule(ctx.routeTree!, ctx.root);
240
+ }
137
241
 
138
- // If routeTree hasn't been built yet (shouldn't happen), scan now
139
- if (!ctx.routeTree) {
140
- rescan();
242
+ if (id === RESOLVED_SEARCH_PARAMS_REGISTRY_ID) {
243
+ if (!ctx.routeTree) {
244
+ rescan();
245
+ }
246
+ return generateSearchParamsRegistryModule(ctx.routeTree!);
247
+ }
248
+
249
+ if (id === RESOLVED_SCHEMA_ID) {
250
+ return generateSchemaModule(ctx.appDir);
251
+ }
252
+
253
+ // TIM-935: $segment virtual module — exports route and segmentPath.
254
+ if (id.startsWith(SEGMENT_PREFIX)) {
255
+ const info: SegmentInfo = JSON.parse(id.slice(SEGMENT_PREFIX.length));
256
+ return [
257
+ `export const ROUTE = ${JSON.stringify(info.route)};`,
258
+ `export const SEGMENT_PATH = ${JSON.stringify(info.segmentPath)};`,
259
+ '',
260
+ ].join('\n');
141
261
  }
142
262
 
143
- return generateManifestModule(ctx.routeTree!);
263
+ return null;
144
264
  },
145
265
 
146
266
  /**
@@ -168,20 +288,49 @@ export function timberRouting(ctx: PluginContext): Plugin {
168
288
  // Watch the app directory
169
289
  devServer.watcher.add(ctx.appDir);
170
290
 
171
- const handleFileChange = (filePath: string) => {
172
- // Only react to route-significant files in the app directory
291
+ /** Snapshot of the last generated manifest, used to detect structural changes. */
292
+ let lastManifest = ctx.routeTree ? generateManifestModule(ctx.routeTree, ctx.root) : '';
293
+
294
+ /**
295
+ * Handle a route-significant file being added or removed.
296
+ * Always triggers a full-reload since the route tree structure changed.
297
+ */
298
+ const handleStructuralChange = (filePath: string) => {
173
299
  if (!filePath.startsWith(ctx.appDir)) return;
174
300
  if (!ROUTE_FILE_PATTERNS.test(filePath)) return;
175
301
 
176
- // Rescan the route tree
177
302
  rescan();
178
-
179
- // Invalidate the virtual module in all environments
303
+ lastManifest = ctx.routeTree ? generateManifestModule(ctx.routeTree, ctx.root) : '';
180
304
  invalidateManifest(devServer);
181
305
  };
182
306
 
183
- devServer.watcher.on('add', handleFileChange);
184
- devServer.watcher.on('unlink', handleFileChange);
307
+ /**
308
+ * Handle a route file's content changing.
309
+ *
310
+ * Most content edits (JSX changes, fixing typos) don't affect route
311
+ * metadata — Vite's React Fast Refresh handles those via normal HMR.
312
+ * Only rescan and full-reload when route metadata actually changed
313
+ * (e.g., searchParams export added/removed, metadata export changed).
314
+ */
315
+ const handleContentChange = (filePath: string) => {
316
+ if (!filePath.startsWith(ctx.appDir)) return;
317
+ if (!ROUTE_FILE_PATTERNS.test(filePath)) return;
318
+
319
+ rescan();
320
+ const newManifest = ctx.routeTree ? generateManifestModule(ctx.routeTree, ctx.root) : '';
321
+ if (newManifest !== lastManifest) {
322
+ lastManifest = newManifest;
323
+ invalidateManifest(devServer);
324
+ }
325
+ // Otherwise: content edit didn't change route metadata — let Vite HMR handle it
326
+ };
327
+
328
+ devServer.watcher.on('add', handleStructuralChange);
329
+ devServer.watcher.on('unlink', handleStructuralChange);
330
+ // Watch content changes to page files — searchParams detection depends
331
+ // on file contents (export const searchParams), not just file presence.
332
+ // But only full-reload when route metadata actually changes.
333
+ devServer.watcher.on('change', handleContentChange);
185
334
  // Also watch renames (which are add+unlink) — handled by the above
186
335
  },
187
336
  };
@@ -193,14 +342,58 @@ export function timberRouting(ctx: PluginContext): Plugin {
193
342
  * When the route tree changes, any environment that has imported the manifest
194
343
  * needs to be invalidated so the next request/transform picks up the new tree.
195
344
  */
345
+ /** Set of warning keys we've already emitted — avoid repeating on every rescan. */
346
+ const _warnedKeys = new Set<string>();
347
+
348
+ /**
349
+ * Validate schema keys against the filesystem route tree.
350
+ * Warns on stale keys, bracket form mismatches, and missing keys.
351
+ * Uses the already-scanned route tree instead of re-scanning.
352
+ */
353
+ function warnSchemaValidation(ctx: PluginContext): void {
354
+ if (!ctx.routeTree) return;
355
+ const warnings = validateSchemaAgainstRoutes(ctx.routeTree, ctx.appDir);
356
+
357
+ for (const w of warnings) {
358
+ const warnKey = `${w.type}:${w.key}`;
359
+ if (_warnedKeys.has(warnKey)) continue;
360
+ _warnedKeys.add(warnKey);
361
+
362
+ switch (w.type) {
363
+ case 'stale-key':
364
+ console.warn(`[timber] ${w.message}`);
365
+ break;
366
+ case 'bracket-mismatch':
367
+ console.warn(`[timber] ${w.message}`);
368
+ break;
369
+ case 'missing-key':
370
+ console.warn(`[timber] ${w.message}`);
371
+ break;
372
+ }
373
+ }
374
+ }
375
+
196
376
  function invalidateManifest(server: ViteDevServer): void {
197
377
  for (const envName of Object.keys(server.environments)) {
198
378
  const env = server.environments[envName];
199
379
  if (!env?.moduleGraph) continue;
200
380
 
201
- const mod = env.moduleGraph.getModuleById(RESOLVED_VIRTUAL_ID);
202
- if (mod) {
203
- env.moduleGraph.invalidateModule(mod);
381
+ for (const virtualId of [
382
+ RESOLVED_VIRTUAL_ID,
383
+ RESOLVED_SEARCH_PARAMS_REGISTRY_ID,
384
+ RESOLVED_SCHEMA_ID,
385
+ ]) {
386
+ const mod = env.moduleGraph.getModuleById(virtualId);
387
+ if (mod) {
388
+ env.moduleGraph.invalidateModule(mod);
389
+ }
390
+ }
391
+
392
+ // TIM-935: Invalidate all $segment virtual modules (prefixed \0$segment:)
393
+ for (const mod of env.moduleGraph.idToModuleMap.values()) {
394
+ if (mod.id?.startsWith(SEGMENT_PREFIX)) {
395
+ env.moduleGraph.invalidateModule(mod);
396
+ }
204
397
  }
205
398
  }
206
399
 
@@ -208,13 +401,132 @@ function invalidateManifest(server: ViteDevServer): void {
208
401
  server.hot.send({ type: 'full-reload' });
209
402
  }
210
403
 
404
+ /**
405
+ * TIM-830: Walk the route tree and collect every page that exports a
406
+ * `searchParams` definition, then emit a module that statically imports
407
+ * each export and registers it into the shared search-params registry.
408
+ *
409
+ * Keys use the un-interpolated route pattern (e.g. '/products/[id]') so
410
+ * <Link> can look up the definition from the original `href` prop before
411
+ * segmentParams are interpolated.
412
+ */
413
+ /** Schema file extensions to check, in priority order. */
414
+ const SCHEMA_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx'];
415
+
416
+ /**
417
+ * TIM-931: Generate the virtual:timber-schema module.
418
+ *
419
+ * When app/schema.{ts,tsx,js,jsx} exists, generates a module that
420
+ * imports the schema and resolves its segmentParams codecs into a
421
+ * bare-name codec map for runtime coercion.
422
+ *
423
+ * When no schema exists, exports null.
424
+ */
425
+ function generateSchemaModule(appDir: string): string {
426
+ let schemaPath: string | null = null;
427
+ for (const ext of SCHEMA_EXTENSIONS) {
428
+ const candidate = join(appDir, `schema${ext}`);
429
+ if (existsSync(candidate)) {
430
+ schemaPath = candidate;
431
+ break;
432
+ }
433
+ }
434
+
435
+ if (!schemaPath) {
436
+ return [
437
+ '// Auto-generated schema loader — no app/schema.ts found.',
438
+ 'export default null;',
439
+ ].join('\n');
440
+ }
441
+
442
+ return [
443
+ '// Auto-generated schema loader — do not edit.',
444
+ '// Generated by timber-routing plugin (TIM-931).',
445
+ '',
446
+ `import schema from ${JSON.stringify(schemaPath)};`,
447
+ `import { resolveSchemaCodecs } from '@timber-js/app/params';`,
448
+ '',
449
+ 'const globalCodecs = schema?.segmentParams',
450
+ ' ? resolveSchemaCodecs(schema.segmentParams)',
451
+ ' : null;',
452
+ '',
453
+ 'export default globalCodecs;',
454
+ ].join('\n');
455
+ }
456
+
457
+ function generateSearchParamsRegistryModule(tree: RouteTree): string {
458
+ const entries: Array<{ urlPath: string; filePath: string }> = [];
459
+
460
+ function walk(node: SegmentNode): void {
461
+ // params.ts is the canonical location for `export const searchParams`;
462
+ // page.tsx is the legacy fallback (see codegen.ts `collectRoutes`).
463
+ if (node.page) {
464
+ if (node.params && fileHasSearchParamsExport(node.params.filePath)) {
465
+ entries.push({ urlPath: node.urlPath, filePath: node.params.filePath });
466
+ } else if (fileHasSearchParamsExport(node.page.filePath)) {
467
+ entries.push({ urlPath: node.urlPath, filePath: node.page.filePath });
468
+ }
469
+ }
470
+ for (const child of node.children) walk(child);
471
+ for (const slot of Object.values(node.slots)) walk(slot);
472
+ }
473
+ walk(tree.root);
474
+
475
+ // Deterministic order for stable output / snapshots
476
+ entries.sort((a, b) => a.urlPath.localeCompare(b.urlPath));
477
+
478
+ const lines: string[] = [];
479
+ lines.push('// Auto-generated search-params registry — do not edit.');
480
+ lines.push('// Generated by timber-routing plugin (TIM-830).');
481
+ lines.push('');
482
+ lines.push("import { registerSearchParams } from '@timber-js/app/search-params';");
483
+ lines.push('');
484
+
485
+ // Static imports — Vite/Rolldown tree-shakes the page component body out
486
+ // of this chunk, leaving only the `searchParams` named export.
487
+ entries.forEach((entry, i) => {
488
+ lines.push(`import { searchParams as r${i} } from ${JSON.stringify(entry.filePath)};`);
489
+ });
490
+ lines.push('');
491
+
492
+ entries.forEach((entry, i) => {
493
+ lines.push(`registerSearchParams(${JSON.stringify(entry.urlPath)}, r${i});`);
494
+ });
495
+ lines.push('');
496
+
497
+ // Exporting an empty object keeps the module a real ESM module even
498
+ // when there are zero entries (no top-level imports in that case).
499
+ lines.push('export {};');
500
+ lines.push('');
501
+
502
+ return lines.join('\n');
503
+ }
504
+
505
+ /**
506
+ * Lightweight check for a `searchParams` named export. Mirrors
507
+ * `fileHasExport('searchParams')` in routing/codegen.ts so we stay
508
+ * in sync with what the type codegen detects.
509
+ */
510
+ function fileHasSearchParamsExport(filePath: string): boolean {
511
+ try {
512
+ if (!existsSync(filePath)) return false;
513
+ const content = readFileSync(filePath, 'utf-8');
514
+ return (
515
+ /export\s+(const|let|var)\s+searchParams\b/.test(content) ||
516
+ /export\s*\{[^}]*\bsearchParams\b[^}]*\}/.test(content)
517
+ );
518
+ } catch {
519
+ return false;
520
+ }
521
+ }
522
+
211
523
  /**
212
524
  * Generate the virtual module source code for the route manifest.
213
525
  *
214
526
  * The output is a default-exported object containing the serialized route tree.
215
527
  * All file references use absolute paths (required for virtual modules).
216
528
  */
217
- function generateManifestModule(tree: RouteTree): string {
529
+ function generateManifestModule(tree: RouteTree, viteRoot: string): string {
218
530
  const imports: string[] = [];
219
531
  let importIndex = 0;
220
532
 
@@ -301,17 +613,20 @@ function generateManifestModule(tree: RouteTree): string {
301
613
  `${nextIndent}denied: { load: ${v}, filePath: ${JSON.stringify(node.denied.filePath)} },`
302
614
  );
303
615
  }
304
- if (node.searchParams) {
305
- const v = addImport(node.searchParams);
616
+ if (node.params) {
617
+ const v = addImport(node.params);
306
618
  parts.push(
307
- `${nextIndent}searchParams: { load: ${v}, filePath: ${JSON.stringify(node.searchParams.filePath)} },`
619
+ `${nextIndent}params: { load: ${v}, filePath: ${JSON.stringify(node.params.filePath)} },`
308
620
  );
309
621
  }
622
+ // searchParams is now a named export from page.tsx, not a separate file.
623
+ // The page module's searchParams export is loaded via the page's lazy import.
624
+ // Runtime registration happens in the route loader using the page module.
310
625
 
311
626
  // Status-code files
312
- if (node.statusFiles && node.statusFiles.size > 0) {
627
+ if (node.statusFiles && Object.keys(node.statusFiles).length > 0) {
313
628
  const statusEntries: string[] = [];
314
- for (const [code, file] of node.statusFiles) {
629
+ for (const [code, file] of Object.entries(node.statusFiles)) {
315
630
  const v = addImport(file);
316
631
  statusEntries.push(
317
632
  `${nextIndent} ${JSON.stringify(code)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`
@@ -321,9 +636,9 @@ function generateManifestModule(tree: RouteTree): string {
321
636
  }
322
637
 
323
638
  // JSON status-code files
324
- if (node.jsonStatusFiles && node.jsonStatusFiles.size > 0) {
639
+ if (node.jsonStatusFiles && Object.keys(node.jsonStatusFiles).length > 0) {
325
640
  const jsonEntries: string[] = [];
326
- for (const [code, file] of node.jsonStatusFiles) {
641
+ for (const [code, file] of Object.entries(node.jsonStatusFiles)) {
327
642
  const v = addImport(file);
328
643
  jsonEntries.push(
329
644
  `${nextIndent} ${JSON.stringify(code)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`
@@ -333,9 +648,9 @@ function generateManifestModule(tree: RouteTree): string {
333
648
  }
334
649
 
335
650
  // Legacy status files
336
- if (node.legacyStatusFiles && node.legacyStatusFiles.size > 0) {
651
+ if (node.legacyStatusFiles && Object.keys(node.legacyStatusFiles).length > 0) {
337
652
  const legacyEntries: string[] = [];
338
- for (const [name, file] of node.legacyStatusFiles) {
653
+ for (const [name, file] of Object.entries(node.legacyStatusFiles)) {
339
654
  const v = addImport(file);
340
655
  legacyEntries.push(
341
656
  `${nextIndent} ${JSON.stringify(name)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`
@@ -347,9 +662,9 @@ function generateManifestModule(tree: RouteTree): string {
347
662
  }
348
663
 
349
664
  // Metadata route files (sitemap.ts, robots.ts, icon.tsx, etc.)
350
- if (node.metadataRoutes && node.metadataRoutes.size > 0) {
665
+ if (node.metadataRoutes && Object.keys(node.metadataRoutes).length > 0) {
351
666
  const metaEntries: string[] = [];
352
- for (const [name, file] of node.metadataRoutes) {
667
+ for (const [name, file] of Object.entries(node.metadataRoutes)) {
353
668
  const v = addImport(file);
354
669
  metaEntries.push(
355
670
  `${nextIndent} ${JSON.stringify(name)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`
@@ -367,9 +682,11 @@ function generateManifestModule(tree: RouteTree): string {
367
682
  }
368
683
 
369
684
  // Parallel slots
370
- if (node.slots.size > 0) {
685
+ const slotKeys = Object.keys(node.slots);
686
+ if (slotKeys.length > 0) {
371
687
  const slotEntries: string[] = [];
372
- for (const [slotName, slotNode] of node.slots) {
688
+ for (const slotName of slotKeys) {
689
+ const slotNode = node.slots[slotName]!;
373
690
  slotEntries.push(
374
691
  `${nextIndent} ${JSON.stringify(slotName)}: ${serializeNode(slotNode, nextIndent + ' ')}`
375
692
  );
@@ -391,6 +708,13 @@ function generateManifestModule(tree: RouteTree): string {
391
708
  proxyLine = ` proxy: { load: ${v}, filePath: ${JSON.stringify(tree.proxy.filePath)} },`;
392
709
  }
393
710
 
711
+ // Global error page (Tier 2)
712
+ let globalErrorLine = '';
713
+ if (tree.globalError) {
714
+ const v = addImport(tree.globalError);
715
+ globalErrorLine = ` globalError: { load: ${v}, filePath: ${JSON.stringify(tree.globalError.filePath)} },`;
716
+ }
717
+
394
718
  // Interception rewrites — computed at build time from the route tree.
395
719
  // Only interceptedPattern and interceptingPrefix are needed at runtime.
396
720
  const rewrites = collectInterceptionRewrites(tree.root);
@@ -406,7 +730,9 @@ function generateManifestModule(tree: RouteTree): string {
406
730
  ...imports,
407
731
  '',
408
732
  'const manifest = {',
733
+ ` viteRoot: ${JSON.stringify(viteRoot)},`,
409
734
  proxyLine,
735
+ globalErrorLine,
410
736
  rewritesLine,
411
737
  ` root: ${rootSerialized},`,
412
738
  '};',