@timber-js/app 0.2.0-alpha.11 → 0.2.0-alpha.111

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 (755) hide show
  1. package/dist/_chunks/actions-ILhDUzES.js +1094 -0
  2. package/dist/_chunks/actions-ILhDUzES.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-BvvuK8Rp.js +137 -0
  6. package/dist/_chunks/cli-schema-sync-BvvuK8Rp.js.map +1 -0
  7. package/dist/_chunks/cli-schema-sync-i2OEL2-p.js +2 -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-a0CCE6Nx.js +124 -0
  13. package/dist/_chunks/define-a0CCE6Nx.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-CY3pRMxF.js +96 -0
  23. package/dist/_chunks/navigation-root-CY3pRMxF.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-DO8B0mO9.js +65 -0
  27. package/dist/_chunks/resolve-schema-DO8B0mO9.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-EsfQpS--.js +34 -0
  37. package/dist/_chunks/segment-context-EsfQpS--.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-BSt_O2cb.js +185 -0
  47. package/dist/_chunks/use-segment-params-BSt_O2cb.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-DGTmJT0f.js +606 -0
  51. package/dist/_chunks/walkers-DGTmJT0f.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} +7 -5
  172. package/dist/client/use-segment-params.d.ts.map +1 -0
  173. package/dist/codec.d.ts +33 -0
  174. package/dist/codec.d.ts.map +1 -0
  175. package/dist/codec.js +2 -0
  176. package/dist/config-types.d.ts +294 -0
  177. package/dist/config-types.d.ts.map +1 -0
  178. package/dist/config-validation.d.ts +51 -0
  179. package/dist/config-validation.d.ts.map +1 -0
  180. package/dist/content/index.d.ts +1 -10
  181. package/dist/content/index.d.ts.map +1 -1
  182. package/dist/content/index.js +0 -2
  183. package/dist/cookies/define-cookie.d.ts +58 -25
  184. package/dist/cookies/define-cookie.d.ts.map +1 -1
  185. package/dist/cookies/index.d.ts +2 -1
  186. package/dist/cookies/index.d.ts.map +1 -1
  187. package/dist/cookies/index.js +251 -36
  188. package/dist/cookies/index.js.map +1 -1
  189. package/dist/cookies/json-cookie.d.ts +64 -0
  190. package/dist/cookies/json-cookie.d.ts.map +1 -0
  191. package/dist/cookies/validation.d.ts +46 -0
  192. package/dist/cookies/validation.d.ts.map +1 -0
  193. package/dist/dev-tools/404-page.d.ts +46 -0
  194. package/dist/dev-tools/404-page.d.ts.map +1 -0
  195. package/dist/dev-tools/browser-logs.d.ts +84 -0
  196. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  197. package/dist/dev-tools/error-page.d.ts +58 -0
  198. package/dist/dev-tools/error-page.d.ts.map +1 -0
  199. package/dist/dev-tools/holding-server.d.ts +54 -0
  200. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  201. package/dist/dev-tools/index.d.ts +31 -0
  202. package/dist/dev-tools/index.d.ts.map +1 -0
  203. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  204. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  205. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  206. package/dist/dev-tools/logger.d.ts.map +1 -0
  207. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  208. package/dist/dev-tools/logs.d.ts.map +1 -0
  209. package/dist/dev-tools/overlay.d.ts +91 -0
  210. package/dist/dev-tools/overlay.d.ts.map +1 -0
  211. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  212. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  213. package/dist/dev-tools/terminal.d.ts +28 -0
  214. package/dist/dev-tools/terminal.d.ts.map +1 -0
  215. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  216. package/dist/dev-tools/warnings.d.ts.map +1 -0
  217. package/dist/fonts/ast.d.ts +98 -6
  218. package/dist/fonts/ast.d.ts.map +1 -1
  219. package/dist/fonts/bundle.d.ts +48 -0
  220. package/dist/fonts/bundle.d.ts.map +1 -0
  221. package/dist/fonts/css.d.ts +1 -0
  222. package/dist/fonts/css.d.ts.map +1 -1
  223. package/dist/fonts/dev-middleware.d.ts +22 -0
  224. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  225. package/dist/fonts/local.d.ts +1 -1
  226. package/dist/fonts/pipeline.d.ts +167 -0
  227. package/dist/fonts/pipeline.d.ts.map +1 -0
  228. package/dist/fonts/transform.d.ts +78 -0
  229. package/dist/fonts/transform.d.ts.map +1 -0
  230. package/dist/fonts/types.d.ts +45 -1
  231. package/dist/fonts/types.d.ts.map +1 -1
  232. package/dist/fonts/virtual-modules.d.ts +103 -0
  233. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  234. package/dist/index.d.ts +47 -190
  235. package/dist/index.d.ts.map +1 -1
  236. package/dist/index.js +4796 -12595
  237. package/dist/index.js.map +1 -1
  238. package/dist/params/codec-registry.d.ts +26 -0
  239. package/dist/params/codec-registry.d.ts.map +1 -0
  240. package/dist/params/define-schema.d.ts +52 -0
  241. package/dist/params/define-schema.d.ts.map +1 -0
  242. package/dist/params/index.d.ts +5 -0
  243. package/dist/params/index.d.ts.map +1 -0
  244. package/dist/params/index.js +33 -0
  245. package/dist/params/index.js.map +1 -0
  246. package/dist/params/resolve-schema.d.ts +34 -0
  247. package/dist/params/resolve-schema.d.ts.map +1 -0
  248. package/dist/plugin-context.d.ts +107 -0
  249. package/dist/plugin-context.d.ts.map +1 -0
  250. package/dist/plugins/adapter-build.d.ts +1 -1
  251. package/dist/plugins/adapter-build.d.ts.map +1 -1
  252. package/dist/plugins/build-manifest.d.ts +2 -2
  253. package/dist/plugins/build-manifest.d.ts.map +1 -1
  254. package/dist/plugins/build-report.d.ts +9 -7
  255. package/dist/plugins/build-report.d.ts.map +1 -1
  256. package/dist/plugins/client-chunks.d.ts +32 -0
  257. package/dist/plugins/client-chunks.d.ts.map +1 -0
  258. package/dist/plugins/content.d.ts +1 -1
  259. package/dist/plugins/content.d.ts.map +1 -1
  260. package/dist/plugins/dev-server.d.ts +1 -1
  261. package/dist/plugins/dev-server.d.ts.map +1 -1
  262. package/dist/plugins/entries.d.ts +1 -1
  263. package/dist/plugins/entries.d.ts.map +1 -1
  264. package/dist/plugins/fonts.d.ts +17 -73
  265. package/dist/plugins/fonts.d.ts.map +1 -1
  266. package/dist/plugins/mdx.d.ts +1 -1
  267. package/dist/plugins/mdx.d.ts.map +1 -1
  268. package/dist/plugins/routing.d.ts +1 -1
  269. package/dist/plugins/routing.d.ts.map +1 -1
  270. package/dist/plugins/server-bundle.d.ts.map +1 -1
  271. package/dist/plugins/shims.d.ts +6 -5
  272. package/dist/plugins/shims.d.ts.map +1 -1
  273. package/dist/plugins/static-build.d.ts +5 -26
  274. package/dist/plugins/static-build.d.ts.map +1 -1
  275. package/dist/routing/codegen-shared.d.ts +63 -0
  276. package/dist/routing/codegen-shared.d.ts.map +1 -0
  277. package/dist/routing/codegen-types.d.ts +57 -0
  278. package/dist/routing/codegen-types.d.ts.map +1 -0
  279. package/dist/routing/codegen.d.ts +7 -2
  280. package/dist/routing/codegen.d.ts.map +1 -1
  281. package/dist/routing/convention-lint.d.ts +41 -0
  282. package/dist/routing/convention-lint.d.ts.map +1 -0
  283. package/dist/routing/index.d.ts +5 -1
  284. package/dist/routing/index.d.ts.map +1 -1
  285. package/dist/routing/index.js +4 -2
  286. package/dist/routing/link-codegen.d.ts +90 -0
  287. package/dist/routing/link-codegen.d.ts.map +1 -0
  288. package/dist/routing/scanner.d.ts +1 -10
  289. package/dist/routing/scanner.d.ts.map +1 -1
  290. package/dist/routing/segment-classify.d.ts +75 -0
  291. package/dist/routing/segment-classify.d.ts.map +1 -0
  292. package/dist/routing/types.d.ts +77 -25
  293. package/dist/routing/types.d.ts.map +1 -1
  294. package/dist/routing/walkers.d.ts +51 -0
  295. package/dist/routing/walkers.d.ts.map +1 -0
  296. package/dist/rsc-runtime/rsc.d.ts +1 -1
  297. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  298. package/dist/rsc-runtime/ssr.d.ts +12 -0
  299. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  300. package/dist/schema-bridge.d.ts +76 -0
  301. package/dist/schema-bridge.d.ts.map +1 -0
  302. package/dist/search-params/define.d.ts +157 -0
  303. package/dist/search-params/define.d.ts.map +1 -0
  304. package/dist/search-params/index.d.ts +4 -7
  305. package/dist/search-params/index.d.ts.map +1 -1
  306. package/dist/search-params/index.js +34 -441
  307. package/dist/search-params/index.js.map +1 -1
  308. package/dist/search-params/registry.d.ts +2 -2
  309. package/dist/search-params/registry.d.ts.map +1 -1
  310. package/dist/search-params/wrappers.d.ts +53 -0
  311. package/dist/search-params/wrappers.d.ts.map +1 -0
  312. package/dist/segment-params/define.d.ts +95 -0
  313. package/dist/segment-params/define.d.ts.map +1 -0
  314. package/dist/segment-params/index.d.ts +3 -0
  315. package/dist/segment-params/index.d.ts.map +1 -0
  316. package/dist/segment-params/index.js +2 -0
  317. package/dist/server/access-gate.d.ts +8 -3
  318. package/dist/server/access-gate.d.ts.map +1 -1
  319. package/dist/server/action-client.d.ts +41 -6
  320. package/dist/server/action-client.d.ts.map +1 -1
  321. package/dist/server/action-encryption.d.ts +76 -0
  322. package/dist/server/action-encryption.d.ts.map +1 -0
  323. package/dist/server/action-handler.d.ts +35 -1
  324. package/dist/server/action-handler.d.ts.map +1 -1
  325. package/dist/server/actions.d.ts +3 -6
  326. package/dist/server/actions.d.ts.map +1 -1
  327. package/dist/server/als-registry.d.ts +40 -5
  328. package/dist/server/als-registry.d.ts.map +1 -1
  329. package/dist/server/asset-headers.d.ts +1 -15
  330. package/dist/server/asset-headers.d.ts.map +1 -1
  331. package/dist/server/build-manifest.d.ts +2 -2
  332. package/dist/server/build-manifest.d.ts.map +1 -1
  333. package/dist/server/coalesce-tick.d.ts +40 -0
  334. package/dist/server/coalesce-tick.d.ts.map +1 -0
  335. package/dist/server/cookie-context.d.ts +170 -0
  336. package/dist/server/cookie-context.d.ts.map +1 -0
  337. package/dist/server/cookie-parsing.d.ts +51 -0
  338. package/dist/server/cookie-parsing.d.ts.map +1 -0
  339. package/dist/server/debug.d.ts +1 -1
  340. package/dist/server/default-logger.d.ts +22 -0
  341. package/dist/server/default-logger.d.ts.map +1 -0
  342. package/dist/server/deny-boundary.d.ts +90 -0
  343. package/dist/server/deny-boundary.d.ts.map +1 -0
  344. package/dist/server/deny-renderer.d.ts.map +1 -1
  345. package/dist/server/dev-source-map.d.ts +22 -0
  346. package/dist/server/dev-source-map.d.ts.map +1 -0
  347. package/dist/server/early-hints-sender.d.ts.map +1 -1
  348. package/dist/server/early-hints.d.ts +13 -5
  349. package/dist/server/early-hints.d.ts.map +1 -1
  350. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  351. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  352. package/dist/server/fallback-error.d.ts +12 -7
  353. package/dist/server/fallback-error.d.ts.map +1 -1
  354. package/dist/server/flight-injection-state.d.ts +66 -0
  355. package/dist/server/flight-injection-state.d.ts.map +1 -0
  356. package/dist/server/flight-scripts.d.ts +42 -0
  357. package/dist/server/flight-scripts.d.ts.map +1 -0
  358. package/dist/server/flush.d.ts.map +1 -1
  359. package/dist/server/form-data.d.ts +29 -0
  360. package/dist/server/form-data.d.ts.map +1 -1
  361. package/dist/server/html-injector-core.d.ts +212 -0
  362. package/dist/server/html-injector-core.d.ts.map +1 -0
  363. package/dist/server/html-injectors.d.ts +81 -41
  364. package/dist/server/html-injectors.d.ts.map +1 -1
  365. package/dist/server/index.d.ts +9 -46
  366. package/dist/server/index.d.ts.map +1 -1
  367. package/dist/server/index.js +155 -2905
  368. package/dist/server/index.js.map +1 -1
  369. package/dist/server/internal.d.ts +48 -0
  370. package/dist/server/internal.d.ts.map +1 -0
  371. package/dist/server/internal.js +2946 -0
  372. package/dist/server/internal.js.map +1 -0
  373. package/dist/server/logger.d.ts +39 -7
  374. package/dist/server/logger.d.ts.map +1 -1
  375. package/dist/server/middleware-runner.d.ts +36 -4
  376. package/dist/server/middleware-runner.d.ts.map +1 -1
  377. package/dist/server/node-stream-transforms.d.ts +110 -0
  378. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  379. package/dist/server/param-coercion.d.ts +36 -0
  380. package/dist/server/param-coercion.d.ts.map +1 -0
  381. package/dist/server/pipeline-helpers.d.ts +95 -0
  382. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  383. package/dist/server/pipeline-interception.d.ts +1 -1
  384. package/dist/server/pipeline-interception.d.ts.map +1 -1
  385. package/dist/server/pipeline-metadata.d.ts +6 -0
  386. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  387. package/dist/server/pipeline-outcome.d.ts +49 -0
  388. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  389. package/dist/server/pipeline-phases.d.ts +52 -0
  390. package/dist/server/pipeline-phases.d.ts.map +1 -0
  391. package/dist/server/pipeline.d.ts +111 -23
  392. package/dist/server/pipeline.d.ts.map +1 -1
  393. package/dist/server/port-resolution.d.ts +117 -0
  394. package/dist/server/port-resolution.d.ts.map +1 -0
  395. package/dist/server/primitives.d.ts +69 -18
  396. package/dist/server/primitives.d.ts.map +1 -1
  397. package/dist/server/render-timeout.d.ts +51 -0
  398. package/dist/server/render-timeout.d.ts.map +1 -0
  399. package/dist/server/request-context.d.ts +54 -108
  400. package/dist/server/request-context.d.ts.map +1 -1
  401. package/dist/server/route-element-builder.d.ts +27 -1
  402. package/dist/server/route-element-builder.d.ts.map +1 -1
  403. package/dist/server/route-handler.d.ts.map +1 -1
  404. package/dist/server/route-matcher.d.ts +21 -34
  405. package/dist/server/route-matcher.d.ts.map +1 -1
  406. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  407. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  408. package/dist/server/rsc-entry/api-handler.d.ts +2 -2
  409. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  410. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  411. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  412. package/dist/server/rsc-entry/helpers.d.ts +49 -6
  413. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  414. package/dist/server/rsc-entry/index.d.ts +19 -8
  415. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  416. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  417. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  418. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  419. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  420. package/dist/server/rsc-entry/rsc-stream.d.ts +14 -1
  421. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  422. package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
  423. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  424. package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
  425. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  426. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  427. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  428. package/dist/server/safe-load.d.ts +46 -0
  429. package/dist/server/safe-load.d.ts.map +1 -0
  430. package/dist/server/sensitive-fields.d.ts +74 -0
  431. package/dist/server/sensitive-fields.d.ts.map +1 -0
  432. package/dist/server/sitemap-generator.d.ts +129 -0
  433. package/dist/server/sitemap-generator.d.ts.map +1 -0
  434. package/dist/server/sitemap-handler.d.ts +22 -0
  435. package/dist/server/sitemap-handler.d.ts.map +1 -0
  436. package/dist/server/slot-resolver.d.ts +1 -1
  437. package/dist/server/slot-resolver.d.ts.map +1 -1
  438. package/dist/server/ssr-entry.d.ts +23 -0
  439. package/dist/server/ssr-entry.d.ts.map +1 -1
  440. package/dist/server/ssr-render.d.ts +39 -21
  441. package/dist/server/ssr-render.d.ts.map +1 -1
  442. package/dist/server/ssr-wrappers.d.ts +50 -0
  443. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  444. package/dist/server/state-tree-diff.d.ts.map +1 -1
  445. package/dist/server/status-code-resolver.d.ts +16 -11
  446. package/dist/server/status-code-resolver.d.ts.map +1 -1
  447. package/dist/server/stream-utils.d.ts +36 -0
  448. package/dist/server/stream-utils.d.ts.map +1 -0
  449. package/dist/server/tracing.d.ts +5 -5
  450. package/dist/server/tracing.d.ts.map +1 -1
  451. package/dist/server/tree-builder.d.ts +62 -30
  452. package/dist/server/tree-builder.d.ts.map +1 -1
  453. package/dist/server/types.d.ts +49 -4
  454. package/dist/server/types.d.ts.map +1 -1
  455. package/dist/server/utils/escape-html.d.ts +14 -0
  456. package/dist/server/utils/escape-html.d.ts.map +1 -0
  457. package/dist/server/version-skew.d.ts +61 -0
  458. package/dist/server/version-skew.d.ts.map +1 -0
  459. package/dist/shared/merge-search-params.d.ts +22 -0
  460. package/dist/shared/merge-search-params.d.ts.map +1 -0
  461. package/dist/shims/font-google.d.ts +1 -1
  462. package/dist/shims/font-google.d.ts.map +1 -1
  463. package/dist/shims/font-google.js +42 -0
  464. package/dist/shims/font-google.js.map +1 -0
  465. package/dist/shims/font-local.d.ts +26 -0
  466. package/dist/shims/font-local.d.ts.map +1 -0
  467. package/dist/shims/font-local.js +20 -0
  468. package/dist/shims/font-local.js.map +1 -0
  469. package/dist/shims/headers.d.ts +2 -1
  470. package/dist/shims/headers.d.ts.map +1 -1
  471. package/dist/shims/navigation-client.d.ts +3 -1
  472. package/dist/shims/navigation-client.d.ts.map +1 -1
  473. package/dist/shims/navigation.d.ts +11 -5
  474. package/dist/shims/navigation.d.ts.map +1 -1
  475. package/dist/utils/state-machine.d.ts +80 -0
  476. package/dist/utils/state-machine.d.ts.map +1 -0
  477. package/package.json +62 -21
  478. package/src/adapters/build-output-helper.ts +77 -0
  479. package/src/adapters/cloudflare-dev.ts +177 -0
  480. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  481. package/src/adapters/cloudflare.ts +350 -76
  482. package/src/adapters/compress-module.ts +24 -4
  483. package/src/adapters/nitro.ts +142 -59
  484. package/src/adapters/shared.ts +40 -0
  485. package/src/adapters/wrangler.d.ts +7 -0
  486. package/src/cache/cache-api.ts +38 -0
  487. package/src/cache/handler-store.ts +68 -0
  488. package/src/cache/index.ts +81 -18
  489. package/src/cache/singleflight.ts +62 -4
  490. package/src/cache/sizeof.ts +33 -0
  491. package/src/cache/timber-cache.ts +25 -20
  492. package/src/cli-schema-sync.ts +209 -0
  493. package/src/cli.ts +65 -8
  494. package/src/client/browser-dev.ts +153 -1
  495. package/src/client/browser-entry/action-dispatch.ts +126 -0
  496. package/src/client/browser-entry/hmr.ts +81 -0
  497. package/src/client/browser-entry/hydrate.ts +145 -0
  498. package/src/client/browser-entry/index.ts +149 -0
  499. package/src/client/browser-entry/post-hydration.ts +119 -0
  500. package/src/client/browser-entry/router-init.ts +193 -0
  501. package/src/client/browser-entry/rsc-stream.ts +157 -0
  502. package/src/client/browser-entry/scroll.ts +27 -0
  503. package/src/client/error-boundary.tsx +99 -22
  504. package/src/client/error-reconstituter.tsx +65 -0
  505. package/src/client/form.tsx +31 -32
  506. package/src/client/history.ts +26 -4
  507. package/src/client/index.ts +69 -44
  508. package/src/client/internal.ts +58 -0
  509. package/src/client/link-pending-store.ts +111 -0
  510. package/src/client/link.tsx +366 -113
  511. package/src/client/nav-link-store.ts +47 -0
  512. package/src/client/navigation-api-types.ts +112 -0
  513. package/src/client/navigation-api.ts +332 -0
  514. package/src/client/navigation-context.ts +31 -6
  515. package/src/client/navigation-root.tsx +342 -0
  516. package/src/client/nuqs-adapter.tsx +16 -3
  517. package/src/client/router-ref.ts +1 -1
  518. package/src/client/router.ts +300 -73
  519. package/src/client/rsc-fetch.ts +112 -8
  520. package/src/client/segment-cache.ts +1 -1
  521. package/src/client/segment-outlet.tsx +86 -0
  522. package/src/client/ssr-data.ts +13 -5
  523. package/src/client/stale-reload.ts +72 -3
  524. package/src/client/state.ts +2 -2
  525. package/src/client/top-loader.tsx +18 -6
  526. package/src/client/use-cookie.ts +31 -2
  527. package/src/client/use-link-status.ts +7 -7
  528. package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
  529. package/src/client/use-query-states.ts +9 -3
  530. package/src/client/use-router.ts +1 -1
  531. package/src/client/{use-params.ts → use-segment-params.ts} +7 -5
  532. package/src/codec.ts +45 -0
  533. package/src/config-types.ts +292 -0
  534. package/src/config-validation.ts +303 -0
  535. package/src/content/index.ts +5 -13
  536. package/src/cookies/define-cookie.ts +233 -53
  537. package/src/cookies/index.ts +12 -1
  538. package/src/cookies/json-cookie.ts +105 -0
  539. package/src/cookies/validation.ts +134 -0
  540. package/src/dev-tools/404-page.ts +387 -0
  541. package/src/dev-tools/browser-logs.ts +291 -0
  542. package/src/dev-tools/error-page.ts +506 -0
  543. package/src/dev-tools/holding-server.ts +187 -0
  544. package/src/dev-tools/index.ts +90 -0
  545. package/src/dev-tools/instrumentation.ts +176 -0
  546. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  547. package/src/dev-tools/overlay.ts +469 -0
  548. package/src/dev-tools/stack-classifier.ts +75 -0
  549. package/src/dev-tools/terminal.ts +183 -0
  550. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
  551. package/src/fonts/ast.ts +525 -16
  552. package/src/fonts/bundle.ts +142 -0
  553. package/src/fonts/css.ts +2 -1
  554. package/src/fonts/dev-middleware.ts +74 -0
  555. package/src/fonts/local.ts +1 -1
  556. package/src/fonts/pipeline.ts +314 -0
  557. package/src/fonts/transform.ts +317 -0
  558. package/src/fonts/types.ts +50 -1
  559. package/src/fonts/virtual-modules.ts +227 -0
  560. package/src/index.ts +413 -356
  561. package/src/params/codec-registry.ts +34 -0
  562. package/src/params/define-schema.ts +72 -0
  563. package/src/params/index.ts +11 -0
  564. package/src/params/resolve-schema.ts +88 -0
  565. package/src/plugin-context.ts +240 -0
  566. package/src/plugins/adapter-build.ts +12 -4
  567. package/src/plugins/build-manifest.ts +13 -2
  568. package/src/plugins/build-report.ts +16 -25
  569. package/src/plugins/client-chunks.ts +65 -0
  570. package/src/plugins/content.ts +1 -1
  571. package/src/plugins/dev-server.ts +175 -35
  572. package/src/plugins/entries.ts +111 -9
  573. package/src/plugins/fonts.ts +155 -654
  574. package/src/plugins/mdx.ts +47 -10
  575. package/src/plugins/routing.ts +322 -44
  576. package/src/plugins/server-bundle.ts +32 -1
  577. package/src/plugins/shims.ts +136 -35
  578. package/src/plugins/static-build.ts +15 -89
  579. package/src/routing/codegen-shared.ts +109 -0
  580. package/src/routing/codegen-types.ts +58 -0
  581. package/src/routing/codegen.ts +253 -178
  582. package/src/routing/convention-lint.ts +357 -0
  583. package/src/routing/index.ts +5 -1
  584. package/src/routing/interception.ts +1 -1
  585. package/src/routing/link-codegen.ts +308 -0
  586. package/src/routing/scanner.ts +107 -110
  587. package/src/routing/segment-classify.ts +188 -0
  588. package/src/routing/types.ts +78 -25
  589. package/src/routing/walkers.ts +90 -0
  590. package/src/rsc-runtime/rsc.ts +2 -0
  591. package/src/rsc-runtime/ssr.ts +50 -0
  592. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  593. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  594. package/src/search-params/define.ts +538 -0
  595. package/src/search-params/index.ts +14 -20
  596. package/src/search-params/registry.ts +2 -2
  597. package/src/search-params/wrappers.ts +92 -0
  598. package/src/segment-params/define.ts +336 -0
  599. package/src/segment-params/index.ts +9 -0
  600. package/src/server/access-gate.tsx +76 -34
  601. package/src/server/action-client.ts +88 -15
  602. package/src/server/action-encryption.ts +144 -0
  603. package/src/server/action-handler.ts +112 -14
  604. package/src/server/actions.ts +10 -9
  605. package/src/server/als-registry.ts +42 -7
  606. package/src/server/asset-headers.ts +8 -34
  607. package/src/server/build-manifest.ts +10 -4
  608. package/src/server/coalesce-tick.ts +75 -0
  609. package/src/server/compress.ts +25 -7
  610. package/src/server/cookie-context.ts +468 -0
  611. package/src/server/cookie-parsing.ts +135 -0
  612. package/src/server/debug.ts +1 -1
  613. package/src/server/default-logger.ts +99 -0
  614. package/src/server/deny-boundary.ts +218 -0
  615. package/src/server/deny-renderer.ts +31 -50
  616. package/src/server/dev-source-map.ts +31 -0
  617. package/src/server/early-hints-sender.ts +3 -2
  618. package/src/server/early-hints.ts +36 -15
  619. package/src/server/error-boundary-wrapper.ts +74 -22
  620. package/src/server/fallback-error.ts +74 -102
  621. package/src/server/flight-injection-state.ts +113 -0
  622. package/src/server/flight-scripts.ts +62 -0
  623. package/src/server/flush.ts +2 -1
  624. package/src/server/form-data.ts +76 -0
  625. package/src/server/html-injector-core.ts +403 -0
  626. package/src/server/html-injectors.ts +233 -223
  627. package/src/server/index.ts +31 -184
  628. package/src/server/internal.ts +176 -0
  629. package/src/server/logger.ts +67 -36
  630. package/src/server/middleware-runner.ts +75 -4
  631. package/src/server/node-stream-transforms.ts +359 -0
  632. package/src/server/param-coercion.ts +148 -0
  633. package/src/server/pipeline-helpers.ts +204 -0
  634. package/src/server/pipeline-interception.ts +17 -16
  635. package/src/server/pipeline-metadata.ts +13 -0
  636. package/src/server/pipeline-outcome.ts +176 -0
  637. package/src/server/pipeline-phases.ts +453 -0
  638. package/src/server/pipeline.ts +147 -394
  639. package/src/server/port-resolution.ts +215 -0
  640. package/src/server/primitives.ts +111 -28
  641. package/src/server/render-timeout.ts +108 -0
  642. package/src/server/request-context.ts +138 -334
  643. package/src/server/route-element-builder.ts +297 -193
  644. package/src/server/route-handler.ts +24 -4
  645. package/src/server/route-matcher.ts +44 -65
  646. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  647. package/src/server/rsc-entry/api-handler.ts +16 -17
  648. package/src/server/rsc-entry/error-renderer.ts +305 -89
  649. package/src/server/rsc-entry/helpers.ts +137 -12
  650. package/src/server/rsc-entry/index.ts +316 -352
  651. package/src/server/rsc-entry/render-route.ts +307 -0
  652. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  653. package/src/server/rsc-entry/rsc-stream.ts +81 -13
  654. package/src/server/rsc-entry/ssr-bridge.ts +14 -5
  655. package/src/server/rsc-entry/ssr-renderer.ts +171 -38
  656. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  657. package/src/server/safe-load.ts +60 -0
  658. package/src/server/sensitive-fields.ts +230 -0
  659. package/src/server/sitemap-generator.ts +338 -0
  660. package/src/server/sitemap-handler.ts +126 -0
  661. package/src/server/slot-resolver.ts +245 -230
  662. package/src/server/ssr-entry.ts +215 -32
  663. package/src/server/ssr-render.ts +289 -67
  664. package/src/server/ssr-wrappers.tsx +139 -0
  665. package/src/server/state-tree-diff.ts +4 -1
  666. package/src/server/status-code-resolver.ts +112 -128
  667. package/src/server/stream-utils.ts +213 -0
  668. package/src/server/tracing.ts +21 -10
  669. package/src/server/tree-builder.ts +202 -90
  670. package/src/server/types.ts +55 -6
  671. package/src/server/utils/escape-html.ts +20 -0
  672. package/src/server/version-skew.ts +104 -0
  673. package/src/shared/merge-search-params.ts +55 -0
  674. package/src/shims/font-google.ts +1 -1
  675. package/src/shims/font-local.ts +34 -0
  676. package/src/shims/headers.ts +5 -1
  677. package/src/shims/navigation-client.ts +4 -3
  678. package/src/shims/navigation.ts +14 -7
  679. package/src/utils/state-machine.ts +111 -0
  680. package/LICENSE +0 -8
  681. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  682. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  683. package/dist/_chunks/debug-gwlJkDuf.js +0 -108
  684. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  685. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  686. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  687. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  688. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  689. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  690. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  691. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  692. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  693. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  694. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  695. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  696. package/dist/cache/register-cached-function.d.ts +0 -17
  697. package/dist/cache/register-cached-function.d.ts.map +0 -1
  698. package/dist/client/browser-entry.d.ts +0 -21
  699. package/dist/client/browser-entry.d.ts.map +0 -1
  700. package/dist/client/link-status-provider.d.ts +0 -11
  701. package/dist/client/link-status-provider.d.ts.map +0 -1
  702. package/dist/client/transition-root.d.ts.map +0 -1
  703. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  704. package/dist/client/use-params.d.ts.map +0 -1
  705. package/dist/plugins/cache-transform.d.ts +0 -36
  706. package/dist/plugins/cache-transform.d.ts.map +0 -1
  707. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  708. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  709. package/dist/plugins/dev-logs.d.ts.map +0 -1
  710. package/dist/plugins/dynamic-transform.d.ts +0 -72
  711. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  712. package/dist/plugins/server-action-exports.d.ts +0 -26
  713. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  714. package/dist/routing/status-file-lint.d.ts +0 -33
  715. package/dist/routing/status-file-lint.d.ts.map +0 -1
  716. package/dist/search-params/analyze.d.ts +0 -54
  717. package/dist/search-params/analyze.d.ts.map +0 -1
  718. package/dist/search-params/builtin-codecs.d.ts +0 -105
  719. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  720. package/dist/search-params/codecs.d.ts +0 -53
  721. package/dist/search-params/codecs.d.ts.map +0 -1
  722. package/dist/search-params/create.d.ts +0 -106
  723. package/dist/search-params/create.d.ts.map +0 -1
  724. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  725. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  726. package/dist/server/dev-logger.d.ts.map +0 -1
  727. package/dist/server/dev-span-processor.d.ts.map +0 -1
  728. package/dist/server/dev-warnings.d.ts.map +0 -1
  729. package/dist/server/manifest-status-resolver.d.ts +0 -58
  730. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  731. package/dist/server/prerender.d.ts +0 -77
  732. package/dist/server/prerender.d.ts.map +0 -1
  733. package/dist/server/response-cache.d.ts +0 -54
  734. package/dist/server/response-cache.d.ts.map +0 -1
  735. package/dist/utils/directive-parser.d.ts +0 -70
  736. package/dist/utils/directive-parser.d.ts.map +0 -1
  737. package/src/cache/register-cached-function.ts +0 -103
  738. package/src/client/browser-entry.ts +0 -678
  739. package/src/client/link-status-provider.tsx +0 -30
  740. package/src/client/transition-root.tsx +0 -166
  741. package/src/plugins/cache-transform.ts +0 -199
  742. package/src/plugins/dev-error-overlay.ts +0 -230
  743. package/src/plugins/dynamic-transform.ts +0 -161
  744. package/src/plugins/server-action-exports.ts +0 -220
  745. package/src/routing/status-file-lint.ts +0 -112
  746. package/src/search-params/analyze.ts +0 -192
  747. package/src/search-params/builtin-codecs.ts +0 -228
  748. package/src/search-params/create.ts +0 -321
  749. package/src/server/dev-fetch-instrumentation.ts +0 -96
  750. package/src/server/dev-span-processor.ts +0 -78
  751. package/src/server/manifest-status-resolver.ts +0 -215
  752. package/src/server/prerender.ts +0 -139
  753. package/src/server/response-cache.ts +0 -410
  754. package/src/utils/directive-parser.ts +0 -529
  755. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -18,8 +18,10 @@ import type {
18
18
  ScannerConfig,
19
19
  InterceptionMarker,
20
20
  } from './types.js';
21
- import { DEFAULT_PAGE_EXTENSIONS, INTERCEPTION_MARKERS } from './types.js';
22
- import { classifyMetadataRoute, isDynamicMetadataExtension } from '#/server/metadata-routes.js';
21
+ import { classifySegment } from './segment-classify.js';
22
+ import { DEFAULT_PAGE_EXTENSIONS } from './types.js';
23
+ import { classifyMetadataRoute, isDynamicMetadataExtension } from '../server/metadata-routes.js';
24
+ import { swallow } from '../server/logger.js';
23
25
 
24
26
  /**
25
27
  * Pattern matching encoded path delimiters that must be rejected during route discovery.
@@ -53,7 +55,7 @@ const LEGACY_STATUS_FILES: Record<string, number> = {
53
55
  /**
54
56
  * File convention names that are always .ts/.tsx (never .mdx etc.)
55
57
  */
56
- const FIXED_CONVENTIONS = new Set(['middleware', 'access', 'route', 'prerender', 'search-params']);
58
+ const FIXED_CONVENTIONS = new Set(['middleware', 'access', 'route', 'params']);
57
59
 
58
60
  /**
59
61
  * Status-code file patterns:
@@ -83,6 +85,14 @@ export function scanRoutes(appDir: string, config: ScannerConfig = {}): RouteTre
83
85
  tree.proxy = proxyFile;
84
86
  }
85
87
 
88
+ // Check for global-error.{tsx,ts,jsx,js} at app root.
89
+ // Tier 2 error page — renders standalone (no layouts) when no segment-level
90
+ // error file is found. See design/10-error-handling.md §"Tier 2".
91
+ const globalErrorFile = findPageExtFile(appDir, 'global-error', extSet);
92
+ if (globalErrorFile) {
93
+ tree.globalError = globalErrorFile;
94
+ }
95
+
86
96
  // Scan the root directory's files
87
97
  scanSegmentFiles(appDir, tree.root, extSet);
88
98
 
@@ -92,6 +102,10 @@ export function scanRoutes(appDir: string, config: ScannerConfig = {}): RouteTre
92
102
  // Validate: detect route group collisions (different groups producing pages at the same URL)
93
103
  validateRouteGroupCollisions(tree.root);
94
104
 
105
+ // Validate: detect duplicate param names in nested dynamic segments
106
+ // e.g., /[id]/items/[id] — same param name in ancestor and descendant
107
+ validateDuplicateParamNames(tree.root);
108
+
95
109
  return tree;
96
110
  }
97
111
 
@@ -114,96 +128,10 @@ function createSegmentNode(
114
128
  interceptionMarker,
115
129
  interceptedSegmentName,
116
130
  children: [],
117
- slots: new Map(),
131
+ slots: {},
118
132
  };
119
133
  }
120
134
 
121
- /**
122
- * Classify a directory name into its segment type.
123
- */
124
- export function classifySegment(dirName: string): {
125
- type: SegmentType;
126
- paramName?: string;
127
- interceptionMarker?: InterceptionMarker;
128
- interceptedSegmentName?: string;
129
- } {
130
- // Private folder: _name (excluded from routing)
131
- if (dirName.startsWith('_')) {
132
- return { type: 'private' };
133
- }
134
-
135
- // Parallel route slot: @name
136
- if (dirName.startsWith('@')) {
137
- return { type: 'slot' };
138
- }
139
-
140
- // Intercepting routes: (.)name, (..)name, (...)name, (..)(..)name
141
- // Check before route groups since intercepting markers also start with (
142
- const interception = parseInterceptionMarker(dirName);
143
- if (interception) {
144
- return {
145
- type: 'intercepting',
146
- interceptionMarker: interception.marker,
147
- interceptedSegmentName: interception.segmentName,
148
- };
149
- }
150
-
151
- // Route group: (name)
152
- if (dirName.startsWith('(') && dirName.endsWith(')')) {
153
- return { type: 'group' };
154
- }
155
-
156
- // Optional catch-all: [[...name]]
157
- if (dirName.startsWith('[[...') && dirName.endsWith(']]')) {
158
- const paramName = dirName.slice(5, -2);
159
- return { type: 'optional-catch-all', paramName };
160
- }
161
-
162
- // Catch-all: [...name]
163
- if (dirName.startsWith('[...') && dirName.endsWith(']')) {
164
- const paramName = dirName.slice(4, -1);
165
- return { type: 'catch-all', paramName };
166
- }
167
-
168
- // Dynamic: [name]
169
- if (dirName.startsWith('[') && dirName.endsWith(']')) {
170
- const paramName = dirName.slice(1, -1);
171
- return { type: 'dynamic', paramName };
172
- }
173
-
174
- return { type: 'static' };
175
- }
176
-
177
- /**
178
- * Parse an interception marker from a directory name.
179
- *
180
- * Returns the marker and the remaining segment name, or null if not an
181
- * intercepting route. Markers are checked longest-first to avoid (..)
182
- * matching before (..)(..).
183
- *
184
- * Examples:
185
- * "(.)photo" → { marker: "(.)", segmentName: "photo" }
186
- * "(..)feed" → { marker: "(..)", segmentName: "feed" }
187
- * "(...)photos" → { marker: "(...)", segmentName: "photos" }
188
- * "(..)(..)admin" → { marker: "(..)(..)", segmentName: "admin" }
189
- * "(marketing)" → null (route group, not interception)
190
- */
191
- function parseInterceptionMarker(
192
- dirName: string
193
- ): { marker: InterceptionMarker; segmentName: string } | null {
194
- for (const marker of INTERCEPTION_MARKERS) {
195
- if (dirName.startsWith(marker)) {
196
- const rest = dirName.slice(marker.length);
197
- // Must have a segment name after the marker, and the rest must not
198
- // be empty or end with ) (which would be a route group like "(auth)")
199
- if (rest.length > 0 && !rest.endsWith(')')) {
200
- return { marker, segmentName: rest };
201
- }
202
- }
203
- }
204
- return null;
205
- }
206
-
207
135
  /**
208
136
  * Compute the URL path for a child segment given its parent's URL path.
209
137
  * Route groups, slots, and intercepting routes do NOT add URL depth.
@@ -225,7 +153,8 @@ function scanSegmentFiles(dirPath: string, node: SegmentNode, extSet: Set<string
225
153
  let entries: string[];
226
154
  try {
227
155
  entries = readdirSync(dirPath);
228
- } catch {
156
+ } catch (err) {
157
+ swallow(err, `scanSegmentFiles: unreadable directory ${dirPath}`, { level: 'warn' });
229
158
  return;
230
159
  }
231
160
 
@@ -278,11 +207,8 @@ function scanSegmentFiles(dirPath: string, node: SegmentNode, extSet: Set<string
278
207
  case 'route':
279
208
  node.route = file;
280
209
  break;
281
- case 'prerender':
282
- node.prerender = file;
283
- break;
284
- case 'search-params':
285
- node.searchParams = file;
210
+ case 'params':
211
+ node.params = file;
286
212
  break;
287
213
  }
288
214
  continue;
@@ -292,27 +218,27 @@ function scanSegmentFiles(dirPath: string, node: SegmentNode, extSet: Set<string
292
218
  // Recognized regardless of pageExtensions — .json is a data format, not a page extension.
293
219
  if (STATUS_CODE_PATTERN.test(name) && ext === 'json') {
294
220
  if (!node.jsonStatusFiles) {
295
- node.jsonStatusFiles = new Map();
221
+ node.jsonStatusFiles = {};
296
222
  }
297
- node.jsonStatusFiles.set(name, { filePath: fullPath, extension: ext });
223
+ node.jsonStatusFiles[name] = { filePath: fullPath, extension: ext };
298
224
  continue;
299
225
  }
300
226
 
301
227
  // Status-code files (401.tsx, 4xx.tsx, 503.tsx, 5xx.tsx)
302
228
  if (STATUS_CODE_PATTERN.test(name) && extSet.has(ext)) {
303
229
  if (!node.statusFiles) {
304
- node.statusFiles = new Map();
230
+ node.statusFiles = {};
305
231
  }
306
- node.statusFiles.set(name, { filePath: fullPath, extension: ext });
232
+ node.statusFiles[name] = { filePath: fullPath, extension: ext };
307
233
  continue;
308
234
  }
309
235
 
310
236
  // Legacy compat files (not-found.tsx, forbidden.tsx, unauthorized.tsx)
311
237
  if (name in LEGACY_STATUS_FILES && extSet.has(ext)) {
312
238
  if (!node.legacyStatusFiles) {
313
- node.legacyStatusFiles = new Map();
239
+ node.legacyStatusFiles = {};
314
240
  }
315
- node.legacyStatusFiles.set(name, { filePath: fullPath, extension: ext });
241
+ node.legacyStatusFiles[name] = { filePath: fullPath, extension: ext };
316
242
  continue;
317
243
  }
318
244
 
@@ -323,19 +249,19 @@ function scanSegmentFiles(dirPath: string, node: SegmentNode, extSet: Set<string
323
249
  const metaInfo = classifyMetadataRoute(entry);
324
250
  if (metaInfo) {
325
251
  if (!node.metadataRoutes) {
326
- node.metadataRoutes = new Map();
252
+ node.metadataRoutes = {};
327
253
  }
328
- const existing = node.metadataRoutes.get(name);
254
+ const existing = node.metadataRoutes[name];
329
255
  if (existing) {
330
256
  // Dynamic > static precedence: only overwrite if the new file is dynamic
331
257
  // or the existing file is static (dynamic always wins).
332
258
  const existingIsDynamic = isDynamicMetadataExtension(name, existing.extension);
333
259
  const newIsDynamic = isDynamicMetadataExtension(name, ext);
334
260
  if (newIsDynamic || !existingIsDynamic) {
335
- node.metadataRoutes.set(name, { filePath: fullPath, extension: ext });
261
+ node.metadataRoutes[name] = { filePath: fullPath, extension: ext };
336
262
  }
337
263
  } else {
338
- node.metadataRoutes.set(name, { filePath: fullPath, extension: ext });
264
+ node.metadataRoutes[name] = { filePath: fullPath, extension: ext };
339
265
  }
340
266
  }
341
267
  }
@@ -358,7 +284,8 @@ function scanChildren(dirPath: string, parentNode: SegmentNode, extSet: Set<stri
358
284
  let entries: string[];
359
285
  try {
360
286
  entries = readdirSync(dirPath);
361
- } catch {
287
+ } catch (err) {
288
+ swallow(err, `scanChildren: unreadable directory ${dirPath}`, { level: 'warn' });
362
289
  return;
363
290
  }
364
291
 
@@ -412,10 +339,10 @@ function scanChildren(dirPath: string, parentNode: SegmentNode, extSet: Set<stri
412
339
  // Recurse into subdirectories
413
340
  scanChildren(fullPath, childNode, extSet);
414
341
 
415
- // Attach to parent: slots go into slots map, everything else is a child
342
+ // Attach to parent: slots go into slots record, everything else is a child
416
343
  if (type === 'slot') {
417
344
  const slotName = entry.slice(1); // remove @
418
- parentNode.slots.set(slotName, childNode);
345
+ parentNode.slots[slotName] = childNode;
419
346
  } else {
420
347
  parentNode.children.push(childNode);
421
348
  }
@@ -477,11 +404,59 @@ function collectRoutableLeaves(
477
404
  }
478
405
 
479
406
  // Recurse into slots — each slot is its own parallel route space
480
- for (const [, slotNode] of node.slots) {
407
+ for (const slotNode of Object.values(node.slots)) {
481
408
  collectRoutableLeaves(slotNode, seen, currentPath, true);
482
409
  }
483
410
  }
484
411
 
412
+ /**
413
+ * Validate that no route chain contains duplicate dynamic param names.
414
+ *
415
+ * Example violation:
416
+ * app/[id]/items/[id]/page.tsx — 'id' appears twice in the ancestor chain.
417
+ *
418
+ * Route groups are transparent — params accumulate through them.
419
+ * Slots are independent — duplicate detection does NOT cross slot boundaries.
420
+ *
421
+ * See design/07-routing.md §"Duplicate Param Name Detection"
422
+ */
423
+ function validateDuplicateParamNames(root: SegmentNode): void {
424
+ walkForDuplicateParams(root, new Map());
425
+ }
426
+
427
+ /**
428
+ * Recursively walk the segment tree, tracking seen param names → segment paths.
429
+ * Throws on the first duplicate found.
430
+ */
431
+ function walkForDuplicateParams(node: SegmentNode, seen: Map<string, string>): void {
432
+ // If this node introduces a param name, check for duplicates
433
+ if (node.paramName) {
434
+ const existing = seen.get(node.paramName);
435
+ if (existing) {
436
+ throw new Error(
437
+ `[timber] Duplicate param name '${node.paramName}' in route chain.\n` +
438
+ ` First defined at: ${existing}\n` +
439
+ ` Duplicate at: ${node.urlPath || '/'}\n` +
440
+ ` Rename one of the segments to avoid ambiguity.`
441
+ );
442
+ }
443
+ // Add to seen for descendants (use a new Map to avoid polluting siblings)
444
+ seen = new Map(seen);
445
+ seen.set(node.paramName, node.urlPath || '/');
446
+ }
447
+
448
+ // Recurse into children (they inherit the accumulated params)
449
+ for (const child of node.children) {
450
+ walkForDuplicateParams(child, seen);
451
+ }
452
+
453
+ // Slots are independent parallel routes — start fresh param tracking
454
+ // (a slot's params don't conflict with the main route's params)
455
+ for (const slotNode of Object.values(node.slots)) {
456
+ walkForDuplicateParams(slotNode, new Map(seen));
457
+ }
458
+ }
459
+
485
460
  /**
486
461
  * Find a fixed-extension file (proxy.ts) in a directory.
487
462
  */
@@ -498,3 +473,25 @@ function findFixedFile(dirPath: string, name: string): RouteFile | undefined {
498
473
  }
499
474
  return undefined;
500
475
  }
476
+
477
+ /**
478
+ * Find a file using the configured page extensions (tsx, ts, jsx, js, mdx, etc.).
479
+ * Used for app-root conventions like global-error that aren't per-segment.
480
+ */
481
+ function findPageExtFile(
482
+ dirPath: string,
483
+ name: string,
484
+ extSet: Set<string>
485
+ ): RouteFile | undefined {
486
+ for (const ext of extSet) {
487
+ const fullPath = join(dirPath, `${name}.${ext}`);
488
+ try {
489
+ if (statSync(fullPath).isFile()) {
490
+ return { filePath: fullPath, extension: ext };
491
+ }
492
+ } catch {
493
+ // File doesn't exist
494
+ }
495
+ }
496
+ return undefined;
497
+ }
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Shared segment classifier — both URL tokens and filesystem directory names.
3
+ *
4
+ * `classifyUrlSegment(token)` is a pure single-pass character parser that
5
+ * classifies a route segment token (e.g. "dashboard", "[id]", "[...slug]",
6
+ * "[[...path]]") into a typed discriminated union. NO regex, NO Node.js-only
7
+ * APIs — safe to import from browser code (used by `Link` interpolation).
8
+ *
9
+ * `classifySegment(dirName)` is the build-time directory-name classifier
10
+ * used by the scanner. It recognizes timber-only conventions (private
11
+ * `_*`, parallel `@*`, route groups `(name)`, intercepting routes
12
+ * `(.)`/`(..)`/`(...)`/`(..)(..)`) and delegates bracket syntax to
13
+ * `classifyUrlSegment`. It is the **single source of truth** for what
14
+ * counts as a routing segment — there is no separate copy in the
15
+ * scanner. (TIM-848.)
16
+ *
17
+ * Malformed input falls through to `{ kind: 'static' }` — the safe default.
18
+ *
19
+ * If you change the bracket syntax, update ONLY this file. Every
20
+ * consumer imports from here.
21
+ *
22
+ * See design/07-routing.md §"Route Segments"
23
+ */
24
+
25
+ import type { InterceptionMarker, SegmentType } from './types.js';
26
+ import { INTERCEPTION_MARKERS } from './types.js';
27
+
28
+ export type UrlSegment =
29
+ | { kind: 'static'; value: string }
30
+ | { kind: 'dynamic'; name: string }
31
+ | { kind: 'catch-all'; name: string }
32
+ | { kind: 'optional-catch-all'; name: string };
33
+
34
+ /**
35
+ * Classify a URL path segment token.
36
+ *
37
+ * Walks the string left-to-right in one pass:
38
+ * 1. If it doesn't start with '[', it's static.
39
+ * 2. Count opening brackets (1 or 2) to detect optional.
40
+ * 3. Check for '...' to detect catch-all.
41
+ * 4. Read the param name up to the closing bracket.
42
+ * 5. Validate the expected closing sequence (']' or ']]').
43
+ * 6. Reject if there are leftover characters after the close.
44
+ *
45
+ * Any structural violation → static (safe default).
46
+ */
47
+ export function classifyUrlSegment(token: string): UrlSegment {
48
+ const len = token.length;
49
+
50
+ // Must start with '[' to be dynamic
51
+ if (len === 0 || token[0] !== '[') {
52
+ return { kind: 'static', value: token };
53
+ }
54
+
55
+ let i = 1;
56
+
57
+ // Check for optional: '[[...'
58
+ const optional = token[i] === '[';
59
+ if (optional) i++;
60
+
61
+ // Check for catch-all: '...'
62
+ const catchAll = i + 2 < len && token[i] === '.' && token[i + 1] === '.' && token[i + 2] === '.';
63
+ if (catchAll) i += 3;
64
+
65
+ // Read param name — everything up to ']'
66
+ const nameStart = i;
67
+ while (i < len && token[i] !== ']') i++;
68
+
69
+ // Must have found a ']' and name must be non-empty
70
+ if (i >= len || i === nameStart) {
71
+ return { kind: 'static', value: token };
72
+ }
73
+
74
+ const name = token.slice(nameStart, i);
75
+ i++; // skip first ']'
76
+
77
+ // Optional requires a second ']'
78
+ if (optional) {
79
+ if (i >= len || token[i] !== ']') {
80
+ return { kind: 'static', value: token };
81
+ }
82
+ i++;
83
+ }
84
+
85
+ // Must be at end of string — no trailing characters
86
+ if (i !== len) {
87
+ return { kind: 'static', value: token };
88
+ }
89
+
90
+ if (optional && catchAll) return { kind: 'optional-catch-all', name };
91
+ if (catchAll) return { kind: 'catch-all', name };
92
+ if (optional) {
93
+ // '[[name]]' without '...' is malformed — not a valid segment syntax
94
+ return { kind: 'static', value: token };
95
+ }
96
+ return { kind: 'dynamic', name };
97
+ }
98
+
99
+ // ─── Directory-name classifier (build-time scanner) ─────────────────────────
100
+
101
+ /** Result of classifying a filesystem directory name. */
102
+ export interface SegmentClassification {
103
+ type: SegmentType;
104
+ paramName?: string;
105
+ interceptionMarker?: InterceptionMarker;
106
+ interceptedSegmentName?: string;
107
+ }
108
+
109
+ /**
110
+ * Classify a directory name into its segment type.
111
+ *
112
+ * Recognizes all timber file-system conventions in priority order:
113
+ * 1. Private folders: `_name` (excluded from routing)
114
+ * 2. Parallel route slots: `@name`
115
+ * 3. Intercepting routes: `(.)name`, `(..)name`, `(...)name`, `(..)(..)name`
116
+ * 4. Route groups: `(name)`
117
+ * 5. Bracket syntax: `[id]`, `[...slug]`, `[[...path]]` (delegated to
118
+ * `classifyUrlSegment`)
119
+ * 6. Static: anything else
120
+ *
121
+ * If you change the bracket syntax, update only `classifyUrlSegment`.
122
+ * If you change the directory-prefix conventions, update this function.
123
+ */
124
+ export function classifySegment(dirName: string): SegmentClassification {
125
+ // Private folder: _name (excluded from routing)
126
+ if (dirName.startsWith('_')) {
127
+ return { type: 'private' };
128
+ }
129
+
130
+ // Parallel route slot: @name
131
+ if (dirName.startsWith('@')) {
132
+ return { type: 'slot' };
133
+ }
134
+
135
+ // Intercepting routes: (.)name, (..)name, (...)name, (..)(..)name
136
+ // Check before route groups since intercepting markers also start with (
137
+ const interception = parseInterceptionMarker(dirName);
138
+ if (interception) {
139
+ return {
140
+ type: 'intercepting',
141
+ interceptionMarker: interception.marker,
142
+ interceptedSegmentName: interception.segmentName,
143
+ };
144
+ }
145
+
146
+ // Route group: (name)
147
+ if (dirName.startsWith('(') && dirName.endsWith(')')) {
148
+ return { type: 'group' };
149
+ }
150
+
151
+ // Bracket-syntax segments: [param], [...param], [[...param]]
152
+ const urlSeg = classifyUrlSegment(dirName);
153
+ if (urlSeg.kind !== 'static') {
154
+ return { type: urlSeg.kind, paramName: urlSeg.name };
155
+ }
156
+
157
+ return { type: 'static' };
158
+ }
159
+
160
+ /**
161
+ * Parse an interception marker from a directory name.
162
+ *
163
+ * Returns the marker and the remaining segment name, or null if not an
164
+ * intercepting route. Markers are checked longest-first to avoid `(..)`
165
+ * matching before `(..)(..)`.
166
+ *
167
+ * Examples:
168
+ * "(.)photo" → { marker: "(.)", segmentName: "photo" }
169
+ * "(..)feed" → { marker: "(..)", segmentName: "feed" }
170
+ * "(...)photos" → { marker: "(...)", segmentName: "photos" }
171
+ * "(..)(..)admin" → { marker: "(..)(..)", segmentName: "admin" }
172
+ * "(marketing)" → null (route group, not interception)
173
+ */
174
+ function parseInterceptionMarker(
175
+ dirName: string
176
+ ): { marker: InterceptionMarker; segmentName: string } | null {
177
+ for (const marker of INTERCEPTION_MARKERS) {
178
+ if (dirName.startsWith(marker)) {
179
+ const rest = dirName.slice(marker.length);
180
+ // Must have a segment name after the marker, and the rest must not
181
+ // be empty or end with ) (which would be a route group like "(auth)")
182
+ if (rest.length > 0 && !rest.endsWith(')')) {
183
+ return { marker, segmentName: rest };
184
+ }
185
+ }
186
+ }
187
+ return null;
188
+ }
@@ -3,6 +3,23 @@
3
3
  *
4
4
  * The route tree is built by scanning the app/ directory and recognizing
5
5
  * file conventions (page.*, layout.*, middleware.ts, access.ts, route.ts, etc.).
6
+ *
7
+ * **Single shape, two specializations** (TIM-848):
8
+ *
9
+ * `SegmentNode<TFile>` is the one canonical in-memory shape for the
10
+ * timber route tree. The same interface is used at build time (with
11
+ * `TFile = RouteFile`) and at request time (with `TFile = ManifestFile`,
12
+ * see `server/route-matcher.ts`). Walkers parameterized over `TFile`
13
+ * work on either, eliminating the previous duplication between
14
+ * `SegmentNode` (Map-based) and `ManifestSegmentNode` (object-based).
15
+ *
16
+ * Keyed groups (`slots`, `statusFiles`, `jsonStatusFiles`,
17
+ * `legacyStatusFiles`, `metadataRoutes`) are plain `Record<string, …>`
18
+ * objects rather than `Map`s so that the build-time tree can be
19
+ * serialized into the virtual route manifest with no shape transform.
20
+ *
21
+ * See design/07-routing.md §"Route Tree Shape" and design/18-build-system.md
22
+ * §"Route Manifest Shape".
6
23
  */
7
24
 
8
25
  /** Segment type classification */
@@ -27,7 +44,14 @@ export type InterceptionMarker = '(.)' | '(..)' | '(...)' | '(..)(..)';
27
44
  /** All recognized interception markers, ordered longest-first for parsing. */
28
45
  export const INTERCEPTION_MARKERS: InterceptionMarker[] = ['(..)(..)', '(.)', '(..)', '(...)'];
29
46
 
30
- /** A single file discovered in a route segment */
47
+ /**
48
+ * A single file discovered in a route segment at build time.
49
+ *
50
+ * The runtime equivalent (`ManifestFile`, defined in
51
+ * `server/route-matcher.ts`) replaces `extension` with a lazy `load`
52
+ * function. Walkers that only need `filePath` are parameterized over
53
+ * `TFile` and accept either.
54
+ */
31
55
  export interface RouteFile {
32
56
  /** Absolute path to the file */
33
57
  filePath: string;
@@ -35,8 +59,17 @@ export interface RouteFile {
35
59
  extension: string;
36
60
  }
37
61
 
38
- /** A node in the segment tree */
39
- export interface SegmentNode {
62
+ /**
63
+ * A node in the segment tree.
64
+ *
65
+ * Generic over `TFile` so the same interface describes both the
66
+ * build-time tree (`SegmentNode<RouteFile>`, the default) and the
67
+ * runtime manifest tree (`SegmentNode<ManifestFile>`, aliased as
68
+ * `ManifestSegmentNode`). All keyed groups use `Record` (not `Map`)
69
+ * so the build-time tree serializes to the virtual route manifest
70
+ * with no shape transform.
71
+ */
72
+ export interface SegmentNode<TFile = RouteFile> {
40
73
  /** The raw directory name (e.g. "dashboard", "[id]", "(auth)", "@sidebar") */
41
74
  segmentName: string;
42
75
  /** Classified segment type */
@@ -54,40 +87,60 @@ export interface SegmentNode {
54
87
  interceptedSegmentName?: string;
55
88
 
56
89
  // --- File conventions ---
57
- page?: RouteFile;
58
- layout?: RouteFile;
59
- middleware?: RouteFile;
60
- access?: RouteFile;
61
- route?: RouteFile;
62
- error?: RouteFile;
63
- default?: RouteFile;
90
+ page?: TFile;
91
+ layout?: TFile;
92
+ middleware?: TFile;
93
+ access?: TFile;
94
+ route?: TFile;
95
+ /**
96
+ * params.ts — isomorphic convention file exporting segmentParams and/or searchParams.
97
+ * Discovered by the scanner like middleware.ts and access.ts.
98
+ * See design/07-routing.md §"params.ts Convention File"
99
+ */
100
+ params?: TFile;
101
+ error?: TFile;
102
+ default?: TFile;
64
103
  /** Status-code files: 4xx.tsx, 5xx.tsx, {status}.tsx (component format) */
65
- statusFiles?: Map<string, RouteFile>;
104
+ statusFiles?: Record<string, TFile>;
66
105
  /** JSON status-code files: 4xx.json, 5xx.json, {status}.json */
67
- jsonStatusFiles?: Map<string, RouteFile>;
106
+ jsonStatusFiles?: Record<string, TFile>;
68
107
  /** denied.tsx — slot-only denial rendering */
69
- denied?: RouteFile;
108
+ denied?: TFile;
70
109
  /** Legacy compat: not-found.tsx (maps to 404), forbidden.tsx (403), unauthorized.tsx (401) */
71
- legacyStatusFiles?: Map<string, RouteFile>;
72
- /** prerender.ts — signals build-time pre-rendering for this segment's shell */
73
- prerender?: RouteFile;
74
- /** search-params.ts — typed search params definition for this route */
75
- searchParams?: RouteFile;
110
+ legacyStatusFiles?: Record<string, TFile>;
111
+
76
112
  /** Metadata route files (sitemap.ts, robots.ts, icon.tsx, etc.) keyed by base name */
77
- metadataRoutes?: Map<string, RouteFile>;
113
+ metadataRoutes?: Record<string, TFile>;
78
114
 
79
115
  // --- Children ---
80
- children: SegmentNode[];
116
+ children: SegmentNode<TFile>[];
81
117
  /** Parallel route slots (keyed by slot name without @) */
82
- slots: Map<string, SegmentNode>;
118
+ slots: Record<string, SegmentNode<TFile>>;
83
119
  }
84
120
 
85
- /** The full route tree output from the scanner */
86
- export interface RouteTree {
121
+ /**
122
+ * The full route tree output from the scanner (or the root of the
123
+ * runtime route manifest, when `TFile = ManifestFile`).
124
+ *
125
+ * Generic so the same wrapper carries app-root metadata for both
126
+ * shapes. The runtime manifest extends this with `viteRoot` (see
127
+ * `ManifestRoot` in `server/route-matcher.ts`).
128
+ */
129
+ export interface RouteTree<TFile = RouteFile> {
87
130
  /** The root segment node (representing app/) */
88
- root: SegmentNode;
131
+ root: SegmentNode<TFile>;
89
132
  /** All discovered proxy.ts files (should be at most one, in app/) */
90
- proxy?: RouteFile;
133
+ proxy?: TFile;
134
+ /**
135
+ * Global error page: app/global-error.{tsx,ts,jsx,js}
136
+ *
137
+ * Rendered as a standalone full-page replacement (no layout wrapping)
138
+ * when no segment-level error file is found. SSR-only render path.
139
+ * Must provide its own <html> and <body>.
140
+ *
141
+ * See design/10-error-handling.md §"Tier 2 — Global Error Page"
142
+ */
143
+ globalError?: TFile;
91
144
  }
92
145
 
93
146
  /** Configuration passed to the scanner */