@timber-js/app 0.2.0-alpha.14 → 0.2.0-alpha.141

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 (801) hide show
  1. package/dist/_chunks/actions-DzFMnUAR.js +1147 -0
  2. package/dist/_chunks/actions-DzFMnUAR.js.map +1 -0
  3. package/dist/_chunks/build-output-helper-B20ZuTSA.js +102 -0
  4. package/dist/_chunks/build-output-helper-B20ZuTSA.js.map +1 -0
  5. package/dist/_chunks/cli-schema-sync-D2IpXicg.js +785 -0
  6. package/dist/_chunks/cli-schema-sync-D2IpXicg.js.map +1 -0
  7. package/dist/_chunks/cli-schema-sync-DH-M8Poy.js +2 -0
  8. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  9. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  10. package/dist/_chunks/define-C3RvHQPK.js +195 -0
  11. package/dist/_chunks/define-C3RvHQPK.js.map +1 -0
  12. package/dist/_chunks/define-DMVhsipD.js +112 -0
  13. package/dist/_chunks/define-DMVhsipD.js.map +1 -0
  14. package/dist/_chunks/fast-hash-D6hIVt1Y.js +36 -0
  15. package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +1 -0
  16. package/dist/_chunks/format-CfwjgPz9.js +14 -0
  17. package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
  18. package/dist/_chunks/handler-store-DjISKYEB.js +54 -0
  19. package/dist/_chunks/handler-store-DjISKYEB.js.map +1 -0
  20. package/dist/_chunks/href-validation-EZktELp8.js +124 -0
  21. package/dist/_chunks/href-validation-EZktELp8.js.map +1 -0
  22. package/dist/_chunks/logger-Dt-jQaBO.js +291 -0
  23. package/dist/_chunks/logger-Dt-jQaBO.js.map +1 -0
  24. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-BjepjefT.js} +32 -19
  25. package/dist/_chunks/metadata-routes-BjepjefT.js.map +1 -0
  26. package/dist/_chunks/navigation-root-DLc4s4ZC.js +103 -0
  27. package/dist/_chunks/navigation-root-DLc4s4ZC.js.map +1 -0
  28. package/dist/_chunks/registry-DbJPKoBp.js +20 -0
  29. package/dist/_chunks/registry-DbJPKoBp.js.map +1 -0
  30. package/dist/_chunks/resolve-schema-Dj8tQloi.js +77 -0
  31. package/dist/_chunks/resolve-schema-Dj8tQloi.js.map +1 -0
  32. package/dist/_chunks/router-ref-CtmF-aPv.js +28 -0
  33. package/dist/_chunks/router-ref-CtmF-aPv.js.map +1 -0
  34. package/dist/_chunks/schema-bridge-DK_89h8O.js +86 -0
  35. package/dist/_chunks/schema-bridge-DK_89h8O.js.map +1 -0
  36. package/dist/_chunks/segment-classify-CDDRVKs7.js +137 -0
  37. package/dist/_chunks/segment-classify-CDDRVKs7.js.map +1 -0
  38. package/dist/_chunks/segment-context-ZDnXDkbz.js +34 -0
  39. package/dist/_chunks/segment-context-ZDnXDkbz.js.map +1 -0
  40. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BOWsq18U.js} +1 -1
  41. package/dist/_chunks/ssr-data-BOWsq18U.js.map +1 -0
  42. package/dist/_chunks/tracing-M_zKubhk.js +358 -0
  43. package/dist/_chunks/tracing-M_zKubhk.js.map +1 -0
  44. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-CbeQmext.js} +7 -20
  45. package/dist/_chunks/use-query-states-CbeQmext.js.map +1 -0
  46. package/dist/_chunks/use-segment-params-D1CzlgBo.js +151 -0
  47. package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +1 -0
  48. package/dist/_chunks/validation-taUkvA4Q.js +113 -0
  49. package/dist/_chunks/validation-taUkvA4Q.js.map +1 -0
  50. package/dist/_chunks/walkers-7FBPM-hX.js +724 -0
  51. package/dist/_chunks/walkers-7FBPM-hX.js.map +1 -0
  52. package/dist/_chunks/{format-RyoGQL74.js → warnings-CNPXaypM.js} +6 -45
  53. package/dist/_chunks/warnings-CNPXaypM.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 +154 -48
  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 +165 -117
  82. package/dist/cache/index.js.map +1 -1
  83. package/dist/cache/singleflight.d.ts +18 -1
  84. package/dist/cache/singleflight.d.ts.map +1 -1
  85. package/dist/cache/sizeof.d.ts +22 -0
  86. package/dist/cache/sizeof.d.ts.map +1 -0
  87. package/dist/cache/timber-cache.d.ts +1 -1
  88. package/dist/cache/timber-cache.d.ts.map +1 -1
  89. package/dist/cli-schema-sync.d.ts +39 -0
  90. package/dist/cli-schema-sync.d.ts.map +1 -0
  91. package/dist/cli.d.ts +14 -2
  92. package/dist/cli.d.ts.map +1 -1
  93. package/dist/cli.js +48 -6
  94. package/dist/cli.js.map +1 -1
  95. package/dist/client/browser-dev.d.ts +34 -1
  96. package/dist/client/browser-dev.d.ts.map +1 -1
  97. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  98. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  99. package/dist/client/browser-entry/hmr.d.ts +21 -0
  100. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  101. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  102. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  103. package/dist/client/browser-entry/index.d.ts +30 -0
  104. package/dist/client/browser-entry/index.d.ts.map +1 -0
  105. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  106. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  107. package/dist/client/browser-entry/router-init.d.ts +26 -0
  108. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  109. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  110. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  111. package/dist/client/browser-entry/scroll.d.ts +19 -0
  112. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  113. package/dist/client/error-boundary.d.ts +12 -5
  114. package/dist/client/error-boundary.d.ts.map +1 -1
  115. package/dist/client/error-boundary.js +29 -6
  116. package/dist/client/error-boundary.js.map +1 -1
  117. package/dist/client/error-reconstituter.d.ts +54 -0
  118. package/dist/client/error-reconstituter.d.ts.map +1 -0
  119. package/dist/client/form.d.ts +16 -27
  120. package/dist/client/form.d.ts.map +1 -1
  121. package/dist/client/history.d.ts +19 -4
  122. package/dist/client/history.d.ts.map +1 -1
  123. package/dist/client/index.d.ts +10 -24
  124. package/dist/client/index.d.ts.map +1 -1
  125. package/dist/client/index.js +183 -1134
  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 +925 -0
  130. package/dist/client/internal.js.map +1 -0
  131. package/dist/client/link-pending-store.d.ts +65 -0
  132. package/dist/client/link-pending-store.d.ts.map +1 -0
  133. package/dist/client/link.d.ts +69 -60
  134. package/dist/client/link.d.ts.map +1 -1
  135. package/dist/client/nav-link-store.d.ts +27 -0
  136. package/dist/client/nav-link-store.d.ts.map +1 -0
  137. package/dist/client/navigation-api-types.d.ts +90 -0
  138. package/dist/client/navigation-api-types.d.ts.map +1 -0
  139. package/dist/client/navigation-api.d.ts +115 -0
  140. package/dist/client/navigation-api.d.ts.map +1 -0
  141. package/dist/client/navigation-context.d.ts +14 -2
  142. package/dist/client/navigation-context.d.ts.map +1 -1
  143. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +46 -9
  144. package/dist/client/navigation-root.d.ts.map +1 -0
  145. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  146. package/dist/client/router-ref.d.ts +1 -1
  147. package/dist/client/router.d.ts +79 -10
  148. package/dist/client/router.d.ts.map +1 -1
  149. package/dist/client/rsc-fetch.d.ts +46 -3
  150. package/dist/client/rsc-fetch.d.ts.map +1 -1
  151. package/dist/client/segment-cache.d.ts +3 -1
  152. package/dist/client/segment-cache.d.ts.map +1 -1
  153. package/dist/client/segment-outlet.d.ts +49 -0
  154. package/dist/client/segment-outlet.d.ts.map +1 -0
  155. package/dist/client/segment-update-context.d.ts +21 -0
  156. package/dist/client/segment-update-context.d.ts.map +1 -0
  157. package/dist/client/shallow-url.d.ts +10 -0
  158. package/dist/client/shallow-url.d.ts.map +1 -0
  159. package/dist/client/ssr-data.d.ts +13 -4
  160. package/dist/client/ssr-data.d.ts.map +1 -1
  161. package/dist/client/stale-reload.d.ts +15 -0
  162. package/dist/client/stale-reload.d.ts.map +1 -1
  163. package/dist/client/state.d.ts +1 -1
  164. package/dist/client/top-loader.d.ts +5 -5
  165. package/dist/client/top-loader.d.ts.map +1 -1
  166. package/dist/client/use-cookie.d.ts +12 -0
  167. package/dist/client/use-cookie.d.ts.map +1 -1
  168. package/dist/client/use-link-status.d.ts +5 -5
  169. package/dist/client/use-link-status.d.ts.map +1 -1
  170. package/dist/client/use-pathname.d.ts.map +1 -1
  171. package/dist/client/use-pending-navigation.d.ts +23 -0
  172. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  173. package/dist/client/use-query-states.d.ts +1 -1
  174. package/dist/client/use-query-states.d.ts.map +1 -1
  175. package/dist/client/use-router.d.ts +1 -1
  176. package/dist/client/use-router.d.ts.map +1 -1
  177. package/dist/client/use-search-params.d.ts +7 -5
  178. package/dist/client/use-search-params.d.ts.map +1 -1
  179. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  180. package/dist/client/use-segment-params.d.ts.map +1 -0
  181. package/dist/codec.d.ts +69 -0
  182. package/dist/codec.d.ts.map +1 -0
  183. package/dist/codec.js +75 -0
  184. package/dist/codec.js.map +1 -0
  185. package/dist/config-types.d.ts +294 -0
  186. package/dist/config-types.d.ts.map +1 -0
  187. package/dist/config-validation.d.ts +51 -0
  188. package/dist/config-validation.d.ts.map +1 -0
  189. package/dist/content/index.d.ts +1 -10
  190. package/dist/content/index.d.ts.map +1 -1
  191. package/dist/content/index.js +0 -2
  192. package/dist/cookies/define-cookie.d.ts +58 -25
  193. package/dist/cookies/define-cookie.d.ts.map +1 -1
  194. package/dist/cookies/index.d.ts +2 -1
  195. package/dist/cookies/index.d.ts.map +1 -1
  196. package/dist/cookies/index.js +251 -36
  197. package/dist/cookies/index.js.map +1 -1
  198. package/dist/cookies/json-cookie.d.ts +64 -0
  199. package/dist/cookies/json-cookie.d.ts.map +1 -0
  200. package/dist/cookies/validation.d.ts +34 -0
  201. package/dist/cookies/validation.d.ts.map +1 -0
  202. package/dist/dev-tools/404-page.d.ts +46 -0
  203. package/dist/dev-tools/404-page.d.ts.map +1 -0
  204. package/dist/dev-tools/browser-logs.d.ts +84 -0
  205. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  206. package/dist/dev-tools/error-page.d.ts +58 -0
  207. package/dist/dev-tools/error-page.d.ts.map +1 -0
  208. package/dist/dev-tools/holding-server.d.ts +54 -0
  209. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  210. package/dist/dev-tools/index.d.ts +31 -0
  211. package/dist/dev-tools/index.d.ts.map +1 -0
  212. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  213. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  214. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  215. package/dist/dev-tools/logger.d.ts.map +1 -0
  216. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  217. package/dist/dev-tools/logs.d.ts.map +1 -0
  218. package/dist/dev-tools/overlay.d.ts +91 -0
  219. package/dist/dev-tools/overlay.d.ts.map +1 -0
  220. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  221. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  222. package/dist/dev-tools/terminal.d.ts +28 -0
  223. package/dist/dev-tools/terminal.d.ts.map +1 -0
  224. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  225. package/dist/dev-tools/warnings.d.ts.map +1 -0
  226. package/dist/fonts/ast.d.ts +98 -6
  227. package/dist/fonts/ast.d.ts.map +1 -1
  228. package/dist/fonts/bundle.d.ts +48 -0
  229. package/dist/fonts/bundle.d.ts.map +1 -0
  230. package/dist/fonts/dev-middleware.d.ts +22 -0
  231. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  232. package/dist/fonts/local.d.ts +1 -1
  233. package/dist/fonts/pipeline.d.ts +172 -0
  234. package/dist/fonts/pipeline.d.ts.map +1 -0
  235. package/dist/fonts/transform.d.ts +78 -0
  236. package/dist/fonts/transform.d.ts.map +1 -0
  237. package/dist/fonts/types.d.ts +47 -1
  238. package/dist/fonts/types.d.ts.map +1 -1
  239. package/dist/fonts/virtual-modules.d.ts +94 -0
  240. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  241. package/dist/index.d.ts +46 -180
  242. package/dist/index.d.ts.map +1 -1
  243. package/dist/index.js +5315 -12687
  244. package/dist/index.js.map +1 -1
  245. package/dist/params/codec-registry.d.ts +26 -0
  246. package/dist/params/codec-registry.d.ts.map +1 -0
  247. package/dist/params/define-schema.d.ts +81 -0
  248. package/dist/params/define-schema.d.ts.map +1 -0
  249. package/dist/params/index.d.ts +5 -0
  250. package/dist/params/index.d.ts.map +1 -0
  251. package/dist/params/index.js +34 -0
  252. package/dist/params/index.js.map +1 -0
  253. package/dist/params/resolve-schema.d.ts +34 -0
  254. package/dist/params/resolve-schema.d.ts.map +1 -0
  255. package/dist/plugin-context.d.ts +114 -0
  256. package/dist/plugin-context.d.ts.map +1 -0
  257. package/dist/plugins/adapter-build.d.ts +20 -1
  258. package/dist/plugins/adapter-build.d.ts.map +1 -1
  259. package/dist/plugins/build-manifest.d.ts +7 -3
  260. package/dist/plugins/build-manifest.d.ts.map +1 -1
  261. package/dist/plugins/build-report.d.ts +9 -7
  262. package/dist/plugins/build-report.d.ts.map +1 -1
  263. package/dist/plugins/cache.d.ts +31 -0
  264. package/dist/plugins/cache.d.ts.map +1 -0
  265. package/dist/plugins/client-chunks.d.ts +39 -0
  266. package/dist/plugins/client-chunks.d.ts.map +1 -0
  267. package/dist/plugins/cloudflare-wasm.d.ts +18 -0
  268. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  269. package/dist/plugins/content.d.ts +1 -1
  270. package/dist/plugins/content.d.ts.map +1 -1
  271. package/dist/plugins/dev-server.d.ts +1 -1
  272. package/dist/plugins/dev-server.d.ts.map +1 -1
  273. package/dist/plugins/entries.d.ts +1 -1
  274. package/dist/plugins/entries.d.ts.map +1 -1
  275. package/dist/plugins/fonts.d.ts +17 -73
  276. package/dist/plugins/fonts.d.ts.map +1 -1
  277. package/dist/plugins/mdx.d.ts +1 -1
  278. package/dist/plugins/mdx.d.ts.map +1 -1
  279. package/dist/plugins/routing.d.ts +1 -1
  280. package/dist/plugins/routing.d.ts.map +1 -1
  281. package/dist/plugins/server-bundle.d.ts.map +1 -1
  282. package/dist/plugins/shims.d.ts +6 -5
  283. package/dist/plugins/shims.d.ts.map +1 -1
  284. package/dist/plugins/static-build.d.ts +5 -26
  285. package/dist/plugins/static-build.d.ts.map +1 -1
  286. package/dist/routing/codegen-shared.d.ts +67 -0
  287. package/dist/routing/codegen-shared.d.ts.map +1 -0
  288. package/dist/routing/codegen-types.d.ts +60 -0
  289. package/dist/routing/codegen-types.d.ts.map +1 -0
  290. package/dist/routing/codegen.d.ts +7 -2
  291. package/dist/routing/codegen.d.ts.map +1 -1
  292. package/dist/routing/convention-lint.d.ts +41 -0
  293. package/dist/routing/convention-lint.d.ts.map +1 -0
  294. package/dist/routing/index.d.ts +7 -1
  295. package/dist/routing/index.d.ts.map +1 -1
  296. package/dist/routing/index.js +4 -2
  297. package/dist/routing/link-codegen.d.ts +90 -0
  298. package/dist/routing/link-codegen.d.ts.map +1 -0
  299. package/dist/routing/scanner.d.ts +1 -10
  300. package/dist/routing/scanner.d.ts.map +1 -1
  301. package/dist/routing/schema-validation.d.ts +35 -0
  302. package/dist/routing/schema-validation.d.ts.map +1 -0
  303. package/dist/routing/segment-classify.d.ts +75 -0
  304. package/dist/routing/segment-classify.d.ts.map +1 -0
  305. package/dist/routing/segment-codegen.d.ts +38 -0
  306. package/dist/routing/segment-codegen.d.ts.map +1 -0
  307. package/dist/routing/types.d.ts +77 -25
  308. package/dist/routing/types.d.ts.map +1 -1
  309. package/dist/routing/walkers.d.ts +51 -0
  310. package/dist/routing/walkers.d.ts.map +1 -0
  311. package/dist/rsc-runtime/rsc.d.ts +1 -1
  312. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  313. package/dist/rsc-runtime/ssr.d.ts +12 -0
  314. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  315. package/dist/schema-bridge.d.ts +76 -0
  316. package/dist/schema-bridge.d.ts.map +1 -0
  317. package/dist/search-params/define.d.ts +157 -0
  318. package/dist/search-params/define.d.ts.map +1 -0
  319. package/dist/search-params/index.d.ts +4 -7
  320. package/dist/search-params/index.d.ts.map +1 -1
  321. package/dist/search-params/index.js +34 -441
  322. package/dist/search-params/index.js.map +1 -1
  323. package/dist/search-params/registry.d.ts +2 -2
  324. package/dist/search-params/registry.d.ts.map +1 -1
  325. package/dist/search-params/wrappers.d.ts +53 -0
  326. package/dist/search-params/wrappers.d.ts.map +1 -0
  327. package/dist/segment-params/define.d.ts +89 -0
  328. package/dist/segment-params/define.d.ts.map +1 -0
  329. package/dist/segment-params/index.d.ts +3 -0
  330. package/dist/segment-params/index.d.ts.map +1 -0
  331. package/dist/segment-params/index.js +2 -0
  332. package/dist/server/access-gate.d.ts +8 -3
  333. package/dist/server/access-gate.d.ts.map +1 -1
  334. package/dist/server/action-client.d.ts +41 -6
  335. package/dist/server/action-client.d.ts.map +1 -1
  336. package/dist/server/action-encryption.d.ts +76 -0
  337. package/dist/server/action-encryption.d.ts.map +1 -0
  338. package/dist/server/action-handler.d.ts +35 -1
  339. package/dist/server/action-handler.d.ts.map +1 -1
  340. package/dist/server/actions.d.ts +6 -14
  341. package/dist/server/actions.d.ts.map +1 -1
  342. package/dist/server/als-registry.d.ts +70 -11
  343. package/dist/server/als-registry.d.ts.map +1 -1
  344. package/dist/server/asset-headers.d.ts +1 -15
  345. package/dist/server/asset-headers.d.ts.map +1 -1
  346. package/dist/server/body-limits.d.ts.map +1 -1
  347. package/dist/server/build-manifest.d.ts +8 -2
  348. package/dist/server/build-manifest.d.ts.map +1 -1
  349. package/dist/server/coalesce-tick.d.ts +40 -0
  350. package/dist/server/coalesce-tick.d.ts.map +1 -0
  351. package/dist/server/cookie-context.d.ts +170 -0
  352. package/dist/server/cookie-context.d.ts.map +1 -0
  353. package/dist/server/cookie-parsing.d.ts +51 -0
  354. package/dist/server/cookie-parsing.d.ts.map +1 -0
  355. package/dist/server/csrf.d.ts +3 -2
  356. package/dist/server/csrf.d.ts.map +1 -1
  357. package/dist/server/default-logger.d.ts +22 -0
  358. package/dist/server/default-logger.d.ts.map +1 -0
  359. package/dist/server/deny-boundary.d.ts +90 -0
  360. package/dist/server/deny-boundary.d.ts.map +1 -0
  361. package/dist/server/deny-renderer.d.ts +1 -1
  362. package/dist/server/deny-renderer.d.ts.map +1 -1
  363. package/dist/server/dev-source-map.d.ts +22 -0
  364. package/dist/server/dev-source-map.d.ts.map +1 -0
  365. package/dist/server/early-hints-sender.d.ts.map +1 -1
  366. package/dist/server/early-hints.d.ts +13 -11
  367. package/dist/server/early-hints.d.ts.map +1 -1
  368. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  369. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  370. package/dist/server/fallback-error.d.ts +12 -7
  371. package/dist/server/fallback-error.d.ts.map +1 -1
  372. package/dist/server/flight-injection-state.d.ts +66 -0
  373. package/dist/server/flight-injection-state.d.ts.map +1 -0
  374. package/dist/server/flight-scripts.d.ts +42 -0
  375. package/dist/server/flight-scripts.d.ts.map +1 -0
  376. package/dist/server/flush.d.ts.map +1 -1
  377. package/dist/server/form-data.d.ts +29 -0
  378. package/dist/server/form-data.d.ts.map +1 -1
  379. package/dist/server/html-injector-core.d.ts +213 -0
  380. package/dist/server/html-injector-core.d.ts.map +1 -0
  381. package/dist/server/html-injectors.d.ts +81 -41
  382. package/dist/server/html-injectors.d.ts.map +1 -1
  383. package/dist/server/index.d.ts +10 -46
  384. package/dist/server/index.d.ts.map +1 -1
  385. package/dist/server/index.js +170 -2911
  386. package/dist/server/index.js.map +1 -1
  387. package/dist/server/internal.d.ts +48 -0
  388. package/dist/server/internal.d.ts.map +1 -0
  389. package/dist/server/internal.js +3126 -0
  390. package/dist/server/internal.js.map +1 -0
  391. package/dist/server/logger.d.ts +39 -7
  392. package/dist/server/logger.d.ts.map +1 -1
  393. package/dist/server/metadata-routes.d.ts +23 -7
  394. package/dist/server/metadata-routes.d.ts.map +1 -1
  395. package/dist/server/middleware-runner.d.ts +36 -4
  396. package/dist/server/middleware-runner.d.ts.map +1 -1
  397. package/dist/server/node-stream-transforms.d.ts +112 -0
  398. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  399. package/dist/server/param-coercion.d.ts +54 -0
  400. package/dist/server/param-coercion.d.ts.map +1 -0
  401. package/dist/server/pipeline-helpers.d.ts +95 -0
  402. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  403. package/dist/server/pipeline-interception.d.ts +1 -1
  404. package/dist/server/pipeline-interception.d.ts.map +1 -1
  405. package/dist/server/pipeline-metadata.d.ts +6 -0
  406. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  407. package/dist/server/pipeline-outcome.d.ts +49 -0
  408. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  409. package/dist/server/pipeline-phases.d.ts +56 -0
  410. package/dist/server/pipeline-phases.d.ts.map +1 -0
  411. package/dist/server/pipeline.d.ts +111 -19
  412. package/dist/server/pipeline.d.ts.map +1 -1
  413. package/dist/server/port-resolution.d.ts +117 -0
  414. package/dist/server/port-resolution.d.ts.map +1 -0
  415. package/dist/server/primitives.d.ts +74 -20
  416. package/dist/server/primitives.d.ts.map +1 -1
  417. package/dist/server/render-timeout.d.ts +51 -0
  418. package/dist/server/render-timeout.d.ts.map +1 -0
  419. package/dist/server/request-context.d.ts +62 -107
  420. package/dist/server/request-context.d.ts.map +1 -1
  421. package/dist/server/route-element-builder.d.ts +28 -2
  422. package/dist/server/route-element-builder.d.ts.map +1 -1
  423. package/dist/server/route-handler.d.ts.map +1 -1
  424. package/dist/server/route-matcher.d.ts +25 -36
  425. package/dist/server/route-matcher.d.ts.map +1 -1
  426. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  427. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  428. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  429. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  430. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  431. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  432. package/dist/server/rsc-entry/helpers.d.ts +50 -6
  433. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  434. package/dist/server/rsc-entry/index.d.ts +19 -8
  435. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  436. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  437. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  438. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  439. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  440. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  441. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  442. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  443. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  444. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  445. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  446. package/dist/server/rsc-entry/ssr-renderer.d.ts +34 -4
  447. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  448. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  449. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  450. package/dist/server/safe-load.d.ts +46 -0
  451. package/dist/server/safe-load.d.ts.map +1 -0
  452. package/dist/server/sensitive-fields.d.ts +74 -0
  453. package/dist/server/sensitive-fields.d.ts.map +1 -0
  454. package/dist/server/sitemap-generator.d.ts +129 -0
  455. package/dist/server/sitemap-generator.d.ts.map +1 -0
  456. package/dist/server/sitemap-handler.d.ts +22 -0
  457. package/dist/server/sitemap-handler.d.ts.map +1 -0
  458. package/dist/server/slot-resolver.d.ts +1 -1
  459. package/dist/server/slot-resolver.d.ts.map +1 -1
  460. package/dist/server/ssr-bridge-types.d.ts +121 -0
  461. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  462. package/dist/server/ssr-entry.d.ts +2 -43
  463. package/dist/server/ssr-entry.d.ts.map +1 -1
  464. package/dist/server/ssr-render.d.ts +64 -21
  465. package/dist/server/ssr-render.d.ts.map +1 -1
  466. package/dist/server/ssr-wrappers.d.ts +50 -0
  467. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  468. package/dist/server/state-tree-diff.d.ts +12 -5
  469. package/dist/server/state-tree-diff.d.ts.map +1 -1
  470. package/dist/server/status-code-resolver.d.ts +16 -11
  471. package/dist/server/status-code-resolver.d.ts.map +1 -1
  472. package/dist/server/stream-utils.d.ts +36 -0
  473. package/dist/server/stream-utils.d.ts.map +1 -0
  474. package/dist/server/tracing.d.ts +5 -5
  475. package/dist/server/tracing.d.ts.map +1 -1
  476. package/dist/server/tree-builder.d.ts +62 -30
  477. package/dist/server/tree-builder.d.ts.map +1 -1
  478. package/dist/server/tree-match.d.ts +49 -0
  479. package/dist/server/tree-match.d.ts.map +1 -0
  480. package/dist/server/types.d.ts +71 -6
  481. package/dist/server/types.d.ts.map +1 -1
  482. package/dist/server/utils/escape-html.d.ts +14 -0
  483. package/dist/server/utils/escape-html.d.ts.map +1 -0
  484. package/dist/server/version-skew.d.ts +61 -0
  485. package/dist/server/version-skew.d.ts.map +1 -0
  486. package/dist/shared/href-validation.d.ts +38 -0
  487. package/dist/shared/href-validation.d.ts.map +1 -0
  488. package/dist/shared/merge-search-params.d.ts +22 -0
  489. package/dist/shared/merge-search-params.d.ts.map +1 -0
  490. package/dist/shims/font-google.d.ts +1 -1
  491. package/dist/shims/font-google.d.ts.map +1 -1
  492. package/dist/shims/font-google.js +42 -0
  493. package/dist/shims/font-google.js.map +1 -0
  494. package/dist/shims/font-local.d.ts +26 -0
  495. package/dist/shims/font-local.d.ts.map +1 -0
  496. package/dist/shims/font-local.js +20 -0
  497. package/dist/shims/font-local.js.map +1 -0
  498. package/dist/shims/headers.d.ts +2 -1
  499. package/dist/shims/headers.d.ts.map +1 -1
  500. package/dist/shims/image.d.ts +1 -1
  501. package/dist/shims/navigation-client.d.ts +3 -1
  502. package/dist/shims/navigation-client.d.ts.map +1 -1
  503. package/dist/shims/navigation.d.ts +11 -5
  504. package/dist/shims/navigation.d.ts.map +1 -1
  505. package/dist/utils/state-machine.d.ts +80 -0
  506. package/dist/utils/state-machine.d.ts.map +1 -0
  507. package/package.json +63 -22
  508. package/src/adapters/build-output-helper.ts +139 -0
  509. package/src/adapters/cloudflare-dev.ts +177 -0
  510. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  511. package/src/adapters/cloudflare.ts +350 -76
  512. package/src/adapters/compress-module.ts +24 -4
  513. package/src/adapters/nitro.ts +147 -60
  514. package/src/adapters/shared.ts +40 -0
  515. package/src/adapters/wrangler.d.ts +7 -0
  516. package/src/cache/cache-api.ts +39 -0
  517. package/src/cache/handler-store.ts +68 -0
  518. package/src/cache/index.ts +81 -18
  519. package/src/cache/singleflight.ts +62 -4
  520. package/src/cache/sizeof.ts +33 -0
  521. package/src/cache/timber-cache.ts +52 -24
  522. package/src/cli-schema-sync.ts +295 -0
  523. package/src/cli.ts +76 -8
  524. package/src/client/browser-dev.ts +153 -1
  525. package/src/client/browser-entry/action-dispatch.ts +125 -0
  526. package/src/client/browser-entry/hmr.ts +81 -0
  527. package/src/client/browser-entry/hydrate.ts +153 -0
  528. package/src/client/browser-entry/index.ts +151 -0
  529. package/src/client/browser-entry/post-hydration.ts +113 -0
  530. package/src/client/browser-entry/router-init.ts +219 -0
  531. package/src/client/browser-entry/rsc-stream.ts +157 -0
  532. package/src/client/browser-entry/scroll.ts +27 -0
  533. package/src/client/error-boundary.tsx +99 -22
  534. package/src/client/error-reconstituter.tsx +65 -0
  535. package/src/client/form.tsx +31 -32
  536. package/src/client/history.ts +26 -4
  537. package/src/client/index.ts +67 -45
  538. package/src/client/internal.ts +58 -0
  539. package/src/client/link-pending-store.ts +116 -0
  540. package/src/client/link.tsx +343 -150
  541. package/src/client/nav-link-store.ts +37 -0
  542. package/src/client/navigation-api-types.ts +112 -0
  543. package/src/client/navigation-api.ts +338 -0
  544. package/src/client/navigation-context.ts +35 -7
  545. package/src/client/navigation-root.tsx +347 -0
  546. package/src/client/nuqs-adapter.tsx +16 -3
  547. package/src/client/router-ref.ts +1 -1
  548. package/src/client/router.ts +418 -128
  549. package/src/client/rsc-fetch.ts +208 -10
  550. package/src/client/segment-cache.ts +6 -3
  551. package/src/client/segment-outlet.tsx +77 -0
  552. package/src/client/segment-update-context.ts +42 -0
  553. package/src/client/shallow-url.ts +22 -0
  554. package/src/client/ssr-data.ts +13 -5
  555. package/src/client/stale-reload.ts +72 -3
  556. package/src/client/state.ts +2 -2
  557. package/src/client/top-loader.tsx +11 -9
  558. package/src/client/use-cookie.ts +31 -2
  559. package/src/client/use-link-status.ts +7 -7
  560. package/src/client/use-pathname.ts +1 -0
  561. package/src/client/use-pending-navigation.ts +40 -0
  562. package/src/client/use-query-states.ts +9 -3
  563. package/src/client/use-router.ts +4 -1
  564. package/src/client/use-search-params.ts +26 -44
  565. package/src/client/{use-params.ts → use-segment-params.ts} +9 -6
  566. package/src/codec.ts +147 -0
  567. package/src/config-types.ts +292 -0
  568. package/src/config-validation.ts +303 -0
  569. package/src/content/index.ts +5 -13
  570. package/src/cookies/define-cookie.ts +233 -53
  571. package/src/cookies/index.ts +12 -1
  572. package/src/cookies/json-cookie.ts +105 -0
  573. package/src/cookies/validation.ts +192 -0
  574. package/src/dev-tools/404-page.ts +387 -0
  575. package/src/dev-tools/browser-logs.ts +291 -0
  576. package/src/dev-tools/error-page.ts +507 -0
  577. package/src/dev-tools/holding-server.ts +187 -0
  578. package/src/dev-tools/index.ts +90 -0
  579. package/src/dev-tools/instrumentation.ts +176 -0
  580. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  581. package/src/dev-tools/overlay.ts +469 -0
  582. package/src/dev-tools/stack-classifier.ts +75 -0
  583. package/src/dev-tools/terminal.ts +183 -0
  584. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
  585. package/src/fonts/ast.ts +525 -16
  586. package/src/fonts/bundle.ts +131 -0
  587. package/src/fonts/dev-middleware.ts +74 -0
  588. package/src/fonts/local.ts +3 -3
  589. package/src/fonts/pipeline.ts +337 -0
  590. package/src/fonts/transform.ts +317 -0
  591. package/src/fonts/types.ts +52 -1
  592. package/src/fonts/virtual-modules.ts +235 -0
  593. package/src/index.ts +415 -345
  594. package/src/params/codec-registry.ts +34 -0
  595. package/src/params/define-schema.ts +115 -0
  596. package/src/params/index.ts +17 -0
  597. package/src/params/resolve-schema.ts +116 -0
  598. package/src/plugin-context.ts +247 -0
  599. package/src/plugins/adapter-build.ts +98 -4
  600. package/src/plugins/build-manifest.ts +168 -23
  601. package/src/plugins/build-report.ts +16 -25
  602. package/src/plugins/cache.ts +180 -0
  603. package/src/plugins/client-chunks.ts +113 -0
  604. package/src/plugins/cloudflare-wasm.ts +103 -0
  605. package/src/plugins/content.ts +1 -1
  606. package/src/plugins/dev-server.ts +179 -37
  607. package/src/plugins/entries.ts +110 -8
  608. package/src/plugins/fonts.ts +167 -655
  609. package/src/plugins/mdx.ts +47 -10
  610. package/src/plugins/routing.ts +386 -47
  611. package/src/plugins/server-bundle.ts +59 -3
  612. package/src/plugins/shims.ts +136 -35
  613. package/src/plugins/static-build.ts +15 -89
  614. package/src/routing/codegen-shared.ts +115 -0
  615. package/src/routing/codegen-types.ts +61 -0
  616. package/src/routing/codegen.ts +321 -177
  617. package/src/routing/convention-lint.ts +357 -0
  618. package/src/routing/index.ts +10 -1
  619. package/src/routing/interception.ts +1 -1
  620. package/src/routing/link-codegen.ts +310 -0
  621. package/src/routing/scanner.ts +165 -110
  622. package/src/routing/schema-validation.ts +149 -0
  623. package/src/routing/segment-classify.ts +188 -0
  624. package/src/routing/segment-codegen.ts +98 -0
  625. package/src/routing/types.ts +78 -25
  626. package/src/routing/walkers.ts +90 -0
  627. package/src/rsc-runtime/rsc.ts +2 -0
  628. package/src/rsc-runtime/ssr.ts +50 -0
  629. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  630. package/src/{search-params/codecs.ts → schema-bridge.ts} +60 -22
  631. package/src/search-params/define.ts +538 -0
  632. package/src/search-params/index.ts +14 -20
  633. package/src/search-params/registry.ts +2 -2
  634. package/src/search-params/wrappers.ts +92 -0
  635. package/src/segment-params/define.ts +309 -0
  636. package/src/segment-params/index.ts +9 -0
  637. package/src/server/access-gate.tsx +76 -34
  638. package/src/server/action-client.ts +119 -28
  639. package/src/server/action-encryption.ts +144 -0
  640. package/src/server/action-handler.ts +112 -14
  641. package/src/server/actions.ts +34 -26
  642. package/src/server/als-registry.ts +108 -20
  643. package/src/server/asset-headers.ts +8 -34
  644. package/src/server/body-limits.ts +10 -2
  645. package/src/server/build-manifest.ts +17 -4
  646. package/src/server/coalesce-tick.ts +75 -0
  647. package/src/server/compress.ts +25 -7
  648. package/src/server/cookie-context.ts +473 -0
  649. package/src/server/cookie-parsing.ts +135 -0
  650. package/src/server/csrf.ts +39 -6
  651. package/src/server/default-logger.ts +99 -0
  652. package/src/server/deny-boundary.ts +218 -0
  653. package/src/server/deny-renderer.ts +32 -52
  654. package/src/server/dev-source-map.ts +31 -0
  655. package/src/server/early-hints-sender.ts +3 -2
  656. package/src/server/early-hints.ts +35 -27
  657. package/src/server/error-boundary-wrapper.ts +74 -22
  658. package/src/server/fallback-error.ts +74 -102
  659. package/src/server/flight-injection-state.ts +113 -0
  660. package/src/server/flight-scripts.ts +62 -0
  661. package/src/server/flush.ts +2 -1
  662. package/src/server/form-data.ts +101 -5
  663. package/src/server/html-injector-core.ts +418 -0
  664. package/src/server/html-injectors.ts +238 -223
  665. package/src/server/index.ts +29 -183
  666. package/src/server/internal.ts +182 -0
  667. package/src/server/logger.ts +67 -36
  668. package/src/server/metadata-routes.ts +44 -19
  669. package/src/server/middleware-runner.ts +75 -4
  670. package/src/server/node-stream-transforms.ts +361 -0
  671. package/src/server/param-coercion.ts +206 -0
  672. package/src/server/pipeline-helpers.ts +204 -0
  673. package/src/server/pipeline-interception.ts +32 -18
  674. package/src/server/pipeline-metadata.ts +13 -0
  675. package/src/server/pipeline-outcome.ts +197 -0
  676. package/src/server/pipeline-phases.ts +527 -0
  677. package/src/server/pipeline.ts +201 -382
  678. package/src/server/port-resolution.ts +215 -0
  679. package/src/server/primitives.ts +130 -46
  680. package/src/server/render-timeout.ts +108 -0
  681. package/src/server/request-context.ts +168 -337
  682. package/src/server/route-element-builder.ts +437 -208
  683. package/src/server/route-handler.ts +31 -4
  684. package/src/server/route-matcher.ts +128 -277
  685. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  686. package/src/server/rsc-entry/api-handler.ts +69 -32
  687. package/src/server/rsc-entry/error-renderer.ts +316 -89
  688. package/src/server/rsc-entry/helpers.ts +155 -26
  689. package/src/server/rsc-entry/index.ts +283 -329
  690. package/src/server/rsc-entry/render-route.ts +313 -0
  691. package/src/server/rsc-entry/revalidate-renderer.ts +344 -0
  692. package/src/server/rsc-entry/rsc-payload.ts +65 -22
  693. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  694. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  695. package/src/server/rsc-entry/ssr-renderer.ts +271 -41
  696. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  697. package/src/server/safe-load.ts +60 -0
  698. package/src/server/sensitive-fields.ts +230 -0
  699. package/src/server/sitemap-generator.ts +338 -0
  700. package/src/server/sitemap-handler.ts +148 -0
  701. package/src/server/slot-resolver.ts +234 -246
  702. package/src/server/ssr-bridge-types.ts +124 -0
  703. package/src/server/ssr-entry.ts +217 -78
  704. package/src/server/ssr-render.ts +344 -71
  705. package/src/server/ssr-wrappers.tsx +141 -0
  706. package/src/server/state-tree-diff.ts +30 -23
  707. package/src/server/status-code-resolver.ts +112 -128
  708. package/src/server/stream-utils.ts +213 -0
  709. package/src/server/tracing.ts +21 -10
  710. package/src/server/tree-builder.ts +204 -90
  711. package/src/server/tree-match.ts +210 -0
  712. package/src/server/types.ts +78 -9
  713. package/src/server/utils/escape-html.ts +20 -0
  714. package/src/server/version-skew.ts +104 -0
  715. package/src/shared/href-validation.ts +127 -0
  716. package/src/shared/merge-search-params.ts +55 -0
  717. package/src/shims/font-google.ts +1 -1
  718. package/src/shims/font-local.ts +34 -0
  719. package/src/shims/headers.ts +5 -1
  720. package/src/shims/navigation-client.ts +4 -3
  721. package/src/shims/navigation.ts +14 -7
  722. package/src/utils/state-machine.ts +111 -0
  723. package/LICENSE +0 -8
  724. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  725. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  726. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  727. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  728. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  729. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  730. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  731. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  732. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  733. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  734. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  735. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  736. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  737. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  738. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  739. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  740. package/dist/cache/register-cached-function.d.ts +0 -17
  741. package/dist/cache/register-cached-function.d.ts.map +0 -1
  742. package/dist/client/browser-entry.d.ts +0 -21
  743. package/dist/client/browser-entry.d.ts.map +0 -1
  744. package/dist/client/link-status-provider.d.ts +0 -11
  745. package/dist/client/link-status-provider.d.ts.map +0 -1
  746. package/dist/client/segment-merger.d.ts +0 -119
  747. package/dist/client/segment-merger.d.ts.map +0 -1
  748. package/dist/client/transition-root.d.ts.map +0 -1
  749. package/dist/client/use-navigation-pending.d.ts +0 -26
  750. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  751. package/dist/client/use-params.d.ts.map +0 -1
  752. package/dist/plugins/cache-transform.d.ts +0 -36
  753. package/dist/plugins/cache-transform.d.ts.map +0 -1
  754. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  755. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  756. package/dist/plugins/dev-logs.d.ts.map +0 -1
  757. package/dist/plugins/dynamic-transform.d.ts +0 -72
  758. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  759. package/dist/plugins/server-action-exports.d.ts +0 -26
  760. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  761. package/dist/routing/status-file-lint.d.ts +0 -33
  762. package/dist/routing/status-file-lint.d.ts.map +0 -1
  763. package/dist/search-params/analyze.d.ts +0 -54
  764. package/dist/search-params/analyze.d.ts.map +0 -1
  765. package/dist/search-params/builtin-codecs.d.ts +0 -105
  766. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  767. package/dist/search-params/codecs.d.ts +0 -53
  768. package/dist/search-params/codecs.d.ts.map +0 -1
  769. package/dist/search-params/create.d.ts +0 -106
  770. package/dist/search-params/create.d.ts.map +0 -1
  771. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  772. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  773. package/dist/server/dev-logger.d.ts.map +0 -1
  774. package/dist/server/dev-span-processor.d.ts.map +0 -1
  775. package/dist/server/dev-warnings.d.ts.map +0 -1
  776. package/dist/server/manifest-status-resolver.d.ts +0 -58
  777. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  778. package/dist/server/prerender.d.ts +0 -77
  779. package/dist/server/prerender.d.ts.map +0 -1
  780. package/dist/utils/directive-parser.d.ts +0 -70
  781. package/dist/utils/directive-parser.d.ts.map +0 -1
  782. package/src/cache/register-cached-function.ts +0 -103
  783. package/src/client/browser-entry.ts +0 -678
  784. package/src/client/link-status-provider.tsx +0 -30
  785. package/src/client/segment-merger.ts +0 -339
  786. package/src/client/transition-root.tsx +0 -166
  787. package/src/client/use-navigation-pending.ts +0 -38
  788. package/src/plugins/cache-transform.ts +0 -199
  789. package/src/plugins/dev-error-overlay.ts +0 -230
  790. package/src/plugins/dynamic-transform.ts +0 -161
  791. package/src/plugins/server-action-exports.ts +0 -220
  792. package/src/routing/status-file-lint.ts +0 -112
  793. package/src/search-params/analyze.ts +0 -192
  794. package/src/search-params/builtin-codecs.ts +0 -228
  795. package/src/search-params/create.ts +0 -321
  796. package/src/server/dev-fetch-instrumentation.ts +0 -96
  797. package/src/server/dev-span-processor.ts +0 -78
  798. package/src/server/manifest-status-resolver.ts +0 -215
  799. package/src/server/prerender.ts +0 -139
  800. package/src/utils/directive-parser.ts +0 -529
  801. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * - revalidatePath(path) re-renders the route at that path and returns the RSC
5
5
  * flight payload for inline reconciliation.
6
- * - revalidateTag(tag) invalidates cached shells and 'use cache' entries by tag.
6
+ * - revalidateTag(tag) invalidates timber.cache entries by tag.
7
7
  *
8
8
  * Both are callable from anywhere on the server — actions, API routes, handlers.
9
9
  *
@@ -14,8 +14,8 @@
14
14
  * See design/08-forms-and-actions.md
15
15
  */
16
16
 
17
- import type { CacheHandler } from '#/cache/index';
18
- import { RedirectSignal } from './primitives';
17
+ import { getCacheHandler } from '../cache/handler-store';
18
+ import { DenySignal, RedirectSignal } from './primitives';
19
19
  import { withSpan } from './tracing';
20
20
  import { revalidationAls, type RevalidationState } from './als-registry.js';
21
21
 
@@ -37,8 +37,6 @@ export type { RevalidationState } from './als-registry.js';
37
37
 
38
38
  /** Options for creating the action handler. */
39
39
  export interface ActionHandlerConfig {
40
- /** Cache handler for tag invalidation. */
41
- cacheHandler?: CacheHandler;
42
40
  /** Renderer for producing RSC payloads during revalidation. */
43
41
  renderer?: RevalidateRenderer;
44
42
  }
@@ -62,21 +60,11 @@ export interface ActionHandlerResult {
62
60
  // (the previous module-level global was vulnerable to cross-request pollution).
63
61
 
64
62
  /**
65
- * Set the revalidation state for the current action execution.
66
- * @internal — kept for test compatibility; prefer executeAction() which uses ALS.
63
+ * Run `fn` inside a revalidation ALS scope.
64
+ * @internal — for tests that call revalidatePath/Tag directly without executeAction().
67
65
  */
68
- export function _setRevalidationState(state: RevalidationState): void {
69
- // Enter ALS scope — this is only used by tests that call revalidatePath/Tag
70
- // directly without going through executeAction().
71
- revalidationAls.enterWith(state);
72
- }
73
-
74
- /**
75
- * Clear the revalidation state after action execution.
76
- * @internal — kept for test compatibility.
77
- */
78
- export function _clearRevalidationState(): void {
79
- revalidationAls.enterWith(undefined as unknown as RevalidationState);
66
+ export function _runWithRevalidationState<T>(state: RevalidationState, fn: () => T): T {
67
+ return revalidationAls.run(state, fn);
80
68
  }
81
69
 
82
70
  /**
@@ -112,8 +100,8 @@ export function revalidatePath(path: string): void {
112
100
  }
113
101
 
114
102
  /**
115
- * Invalidate all pre-rendered shells and 'use cache' entries tagged with `tag`.
116
- * Does not return a payload — the next request for an invalidated route re-renders fresh.
103
+ * Invalidate all timber.cache entries tagged with `tag`.
104
+ * Does not return a payload — the next request for an invalidated entry re-executes.
117
105
  *
118
106
  * @param tag - The cache tag to invalidate (e.g. 'products', 'user:123').
119
107
  */
@@ -172,9 +160,12 @@ export async function executeAction(
172
160
  }
173
161
  });
174
162
 
175
- // Process tag invalidation
176
- if (state.tags.length > 0 && config.cacheHandler) {
177
- await Promise.all(state.tags.map((tag) => config.cacheHandler!.invalidate({ tag })));
163
+ // Process tag invalidation via the module-level cache handler singleton.
164
+ // setCacheHandler() is called at boot from rsc-entry when timber.config.ts
165
+ // provides a cacheHandler; otherwise falls back to in-memory LRU (TIM-599).
166
+ if (state.tags.length > 0) {
167
+ const handler = getCacheHandler();
168
+ await Promise.all(state.tags.map((tag) => handler.invalidate({ tag })));
178
169
  }
179
170
 
180
171
  // Process path revalidation — build element tree (not yet serialized)
@@ -187,11 +178,28 @@ export async function executeAction(
187
178
  revalidation = await config.renderer(path);
188
179
  } catch (renderError) {
189
180
  if (renderError instanceof RedirectSignal) {
190
- // Revalidation triggered a redirect (e.g., session expired)
181
+ // Revalidation triggered a redirect (e.g., session expired,
182
+ // middleware on the target path called `redirect()`).
191
183
  redirectTo = renderError.location;
192
184
  redirectStatus = renderError.status;
185
+ } else if (renderError instanceof DenySignal) {
186
+ // Target path's middleware/access denied this user.
187
+ //
188
+ // Dropping the revalidation here is the security boundary added
189
+ // in TIM-996: without this branch, a DenySignal would fall into
190
+ // the `console.error` path AND the element tree would have
191
+ // already been built and serialized — leaking a privileged RSC
192
+ // payload to the action submitter. By the time the signal
193
+ // surfaces, the renderer has thrown BEFORE building the tree,
194
+ // so we simply drop `revalidation` and ship the action result
195
+ // alone. The action itself still succeeded.
196
+ console.error(
197
+ `[timber] revalidatePath dropped — target middleware denied (status ${renderError.status})`
198
+ );
193
199
  } else {
194
- // Log but don't fail the action — revalidation is best-effort
200
+ // Log but don't fail the action — revalidation is best-effort.
201
+ // Includes input-validation rejections from the renderer
202
+ // (e.g., revalidatePath('//evil.com/admin')).
195
203
  console.error('[timber] revalidatePath render failed:', renderError);
196
204
  }
197
205
  }
@@ -6,28 +6,63 @@
6
6
  * this registry and re-export public accessor functions.
7
7
  *
8
8
  * Why: ALS instances require singleton semantics — if two copies of the
9
- * same ALS exist (one from a relative import, one from a barrel import),
10
- * one module writes to its copy and another reads from an empty copy.
11
- * Centralizing ALS creation in a single module eliminates this class of bug.
9
+ * same ALS exist (one from a relative import, one from a barrel import,
10
+ * or the same file re-evaluated by Vite after an HMR invalidation), one
11
+ * module writes to its copy and another reads from an empty copy.
12
+ * Centralizing ALS creation in a single module + anchoring each instance
13
+ * on `globalThis` under a `Symbol.for(...)` key eliminates this class of
14
+ * bug, including the Vite-dev case where module instance split would
15
+ * otherwise hand two copies of this file out of a single evaluation cycle.
12
16
  *
13
- * The `timber-shims` plugin ensures `@timber-js/app/server` resolves to
14
- * src/ in RSC and SSR environments, so all import paths converge here.
17
+ * The `timber-shims` plugin remaps `@timber-js/app/server` to src/ in
18
+ * RSC and SSR environments so import-specifier paths converge here, and
19
+ * the `globalThis[SYMBOL_FOR]` anchor below closes the remaining gap: any
20
+ * second evaluation of this module picks up the ALS the first evaluation
21
+ * already stored rather than instantiating a fresh one. Same pattern the
22
+ * Cloudflare bindings ALS uses in `adapters/cloudflare.ts`.
15
23
  *
16
24
  * DO NOT create ALS instances outside this file. If you need a new ALS,
17
25
  * add it here and import from `./als-registry.js` in the consuming module.
26
+ * Inside this file, always route through `getOrCreateAls(symbol)` — a raw
27
+ * `new AsyncLocalStorage()` reintroduces the instance-split hazard.
18
28
  *
19
29
  * See design/18-build-system.md §"Module Singleton Strategy" and
20
- * §"Singleton State Registry".
30
+ * §"Singleton State Registry". Regression test:
31
+ * `tests/als-registry-singleton.test.ts`.
21
32
  */
22
33
 
23
34
  import { AsyncLocalStorage } from 'node:async_hooks';
35
+ import type { DebugComponentEntry } from './rsc-entry/helpers.js';
36
+
37
+ /**
38
+ * Return a process-wide singleton `AsyncLocalStorage` keyed by `symbol`.
39
+ *
40
+ * `Symbol.for(...)` keys live in the cross-realm symbol registry, and
41
+ * `globalThis` is shared across every module evaluation inside the same
42
+ * Node.js process. Together they give a stable anchor that survives
43
+ * re-evaluation of this file — the second evaluation observes the
44
+ * `globalThis[symbol]` slot already populated by the first and hands
45
+ * back the identical ALS instance.
46
+ */
47
+ function getOrCreateAls<T>(symbol: symbol): AsyncLocalStorage<T> {
48
+ const g = globalThis as unknown as Record<symbol, unknown>;
49
+ const existing = g[symbol];
50
+ if (existing instanceof AsyncLocalStorage) {
51
+ return existing as AsyncLocalStorage<T>;
52
+ }
53
+ const created = new AsyncLocalStorage<T>();
54
+ g[symbol] = created;
55
+ return created;
56
+ }
24
57
 
25
58
  // ─── Request Context ──────────────────────────────────────────────────────
26
- // Used by: request-context.ts (headers(), cookies(), searchParams())
59
+ // Used by: request-context.ts (getHeaders(), getCookies(), getSearchParams())
27
60
  // Design doc: design/04-authorization.md
28
61
 
29
62
  /** @internal — import via request-context.ts public API */
30
- export const requestContextAls = new AsyncLocalStorage<RequestContextStore>();
63
+ export const requestContextAls = getOrCreateAls<RequestContextStore>(
64
+ Symbol.for('timber:request-context-als')
65
+ );
31
66
 
32
67
  export interface RequestContextStore {
33
68
  /** Incoming request headers (read-only view). */
@@ -39,28 +74,75 @@ export interface RequestContextStore {
39
74
  /** Original (pre-overlay) frozen headers, kept for overlay merging. */
40
75
  originalHeaders: Headers;
41
76
  /**
42
- * Promise resolving to the route's typed search params (when search-params.ts
43
- * exists) or to the raw URLSearchParams. Stored as a Promise so the framework
44
- * can later support partial pre-rendering where param resolution is deferred.
77
+ * Raw URLSearchParams for the current request.
78
+ * To get typed parsed params, import a search params definition and
79
+ * call `.parse(searchParams())`.
80
+ */
81
+ searchParams: URLSearchParams;
82
+ /**
83
+ * Raw search string from the request URL (e.g. "?foo=bar&baz=1").
84
+ * Available synchronously for use in `redirect()` with `preserveSearchParams`.
85
+ */
86
+ searchString: string;
87
+ /**
88
+ * Coerced segment params for the current request.
89
+ * Set by the pipeline after route matching and param coercion, before
90
+ * middleware and rendering. Pages and layouts read params via
91
+ * `getSegmentParams()` instead of receiving them as a prop.
92
+ *
93
+ * See design/07-routing.md §"params.ts — Convention File for Typed Params"
45
94
  */
46
- searchParamsPromise: Promise<URLSearchParams | Record<string, unknown>>;
95
+ segmentParams?: Record<string, string | string[]>;
96
+ /**
97
+ * The matched segment path (e.g. '/(browse)/[artistSlug]/[year]').
98
+ * Includes route groups and parallel slots — uniquely identifies the
99
+ * segment in the route tree. Set by the pipeline alongside segmentParams.
100
+ * Used by getSegmentParams() for dev-mode validation.
101
+ * See design/41-global-params.md §Runtime Validation
102
+ */
103
+ matchedSegmentPath?: string;
104
+ /**
105
+ * Per-slot coerced segment params, keyed by the slot's full tree path
106
+ * (e.g. '/(browse)/@shows/[artistSlug]/[...year]').
107
+ *
108
+ * Each slot walks its own segment tree and may interpret URL parts
109
+ * differently from the main route (e.g. catch-all vs dynamic). This
110
+ * map stores slot-specific params so getSegmentParams(segmentPath)
111
+ * returns the correct types for slot pages.
112
+ *
113
+ * See design/07-routing.md §"Parallel Slot Params"
114
+ */
115
+ slotParamsMap?: Map<string, Record<string, string | string[]>>;
47
116
  /** Outgoing Set-Cookie entries (name → serialized value + options). Last write wins. */
48
117
  cookieJar: Map<string, CookieEntry>;
49
118
  /** Whether the response has flushed (headers committed). */
50
119
  flushed: boolean;
51
120
  /** Whether the current context allows cookie mutation. */
52
121
  mutableContext: boolean;
122
+ /**
123
+ * Set by AccessGate or PageDenyBoundary when a DenySignal is caught
124
+ * server-side (inside the React tree, before React Flight sees it).
125
+ * The pipeline reads this after render to set the HTTP status code.
126
+ * See TIM-666.
127
+ */
128
+ denyStatus?: number;
129
+ /**
130
+ * Dev-only: getter for the current request's RSC debug components.
131
+ * Set by renderRoute() so onPipelineError can include component tree
132
+ * context for render-phase errors without module-level shared state.
133
+ */
134
+ debugComponentsGetter?: () => DebugComponentEntry[];
53
135
  }
54
136
 
55
137
  /** A single outgoing cookie entry in the cookie jar. */
56
138
  export interface CookieEntry {
57
139
  name: string;
58
140
  value: string;
59
- options: import('./request-context.js').CookieOptions;
141
+ options: import('./cookie-context.js').CookieOptions;
60
142
  }
61
143
 
62
144
  // ─── Tracing ──────────────────────────────────────────────────────────────
63
- // Used by: tracing.ts (traceId(), spanId())
145
+ // Used by: tracing.ts (getTraceId(), getSpanId())
64
146
  // Design doc: design/17-logging.md
65
147
 
66
148
  export interface TraceStore {
@@ -71,7 +153,7 @@ export interface TraceStore {
71
153
  }
72
154
 
73
155
  /** @internal — import via tracing.ts public API */
74
- export const traceAls = new AsyncLocalStorage<TraceStore>();
156
+ export const traceAls = getOrCreateAls<TraceStore>(Symbol.for('timber:trace-als'));
75
157
 
76
158
  // ─── Server-Timing ────────────────────────────────────────────────────────
77
159
  // Used by: server-timing.ts (recordTiming(), withTiming())
@@ -82,7 +164,7 @@ export interface TimingStore {
82
164
  }
83
165
 
84
166
  /** @internal — import via server-timing.ts public API */
85
- export const timingAls = new AsyncLocalStorage<TimingStore>();
167
+ export const timingAls = getOrCreateAls<TimingStore>(Symbol.for('timber:timing-als'));
86
168
 
87
169
  // ─── Revalidation ─────────────────────────────────────────────────────────
88
170
  // Used by: actions.ts (revalidatePath(), revalidateTag())
@@ -96,14 +178,18 @@ export interface RevalidationState {
96
178
  }
97
179
 
98
180
  /** @internal — import via actions.ts public API */
99
- export const revalidationAls = new AsyncLocalStorage<RevalidationState>();
181
+ export const revalidationAls = getOrCreateAls<RevalidationState>(
182
+ Symbol.for('timber:revalidation-als')
183
+ );
100
184
 
101
185
  // ─── Form Flash ───────────────────────────────────────────────────────────
102
186
  // Used by: form-flash.ts (getFormFlash())
103
187
  // Design doc: design/08-forms-and-actions.md §"No-JS Error Round-Trip"
104
188
 
105
189
  /** @internal — import via form-flash.ts public API */
106
- export const formFlashAls = new AsyncLocalStorage<import('./form-flash.js').FormFlashData>();
190
+ export const formFlashAls = getOrCreateAls<import('./form-flash.js').FormFlashData>(
191
+ Symbol.for('timber:form-flash-als')
192
+ );
107
193
 
108
194
  // ─── Early Hints Sender ──────────────────────────────────────────────────
109
195
  // Used by: early-hints-sender.ts (sendEarlyHints103())
@@ -113,7 +199,9 @@ export const formFlashAls = new AsyncLocalStorage<import('./form-flash.js').Form
113
199
  export type EarlyHintsSenderFn = (links: string[]) => void;
114
200
 
115
201
  /** @internal — import via early-hints-sender.ts public API */
116
- export const earlyHintsSenderAls = new AsyncLocalStorage<EarlyHintsSenderFn>();
202
+ export const earlyHintsSenderAls = getOrCreateAls<EarlyHintsSenderFn>(
203
+ Symbol.for('timber:early-hints-sender-als')
204
+ );
117
205
 
118
206
  // ─── waitUntil Bridge ────────────────────────────────────────────────────
119
207
  // Used by: waituntil-bridge.ts (waitUntil())
@@ -123,4 +211,4 @@ export const earlyHintsSenderAls = new AsyncLocalStorage<EarlyHintsSenderFn>();
123
211
  export type WaitUntilFn = (promise: Promise<unknown>) => void;
124
212
 
125
213
  /** @internal — import via waituntil-bridge.ts public API */
126
- export const waitUntilAls = new AsyncLocalStorage<WaitUntilFn>();
214
+ export const waitUntilAls = getOrCreateAls<WaitUntilFn>(Symbol.for('timber:wait-until-als'));
@@ -15,6 +15,14 @@
15
15
  * Design docs: 18-build-system.md, 06-caching.md
16
16
  */
17
17
 
18
+ import { IMMUTABLE_CACHE, STATIC_CACHE } from '../adapters/shared.js';
19
+
20
+ // Re-export cache constants and generateHeadersFile from the shared adapter
21
+ // module. The canonical definitions live in adapters/shared.ts because
22
+ // adapters are loaded by Node before Vite's resolver is available — they
23
+ // can only import from within their own directory.
24
+ export { IMMUTABLE_CACHE, STATIC_CACHE, generateHeadersFile } from '../adapters/shared.js';
25
+
18
26
  /**
19
27
  * Regex matching Vite-hashed asset filenames.
20
28
  *
@@ -30,18 +38,6 @@
30
38
  */
31
39
  const HASHED_ASSET_RE = /[-.][\da-f]{8,}\.\w+$/;
32
40
 
33
- /** One year in seconds (365 days). */
34
- const ONE_YEAR = 31_536_000;
35
-
36
- /** One hour in seconds. */
37
- const ONE_HOUR = 3_600;
38
-
39
- /** Cache-Control value for hashed (immutable) assets. */
40
- export const IMMUTABLE_CACHE = `public, max-age=${ONE_YEAR}, immutable`;
41
-
42
- /** Cache-Control value for unhashed static assets. */
43
- export const STATIC_CACHE = `public, max-age=${ONE_HOUR}, must-revalidate`;
44
-
45
41
  /**
46
42
  * Check if a URL path looks like a hashed asset.
47
43
  */
@@ -57,25 +53,3 @@ export function isHashedAsset(pathname: string): boolean {
57
53
  export function getAssetCacheControl(pathname: string): string {
58
54
  return isHashedAsset(pathname) ? IMMUTABLE_CACHE : STATIC_CACHE;
59
55
  }
60
-
61
- /**
62
- * Generate a `_headers` file for static asset cache control.
63
- *
64
- * The `_headers` file is a platform convention supported by Cloudflare Workers
65
- * Static Assets, Cloudflare Pages, and Netlify. It maps URL patterns to
66
- * HTTP response headers.
67
- *
68
- * Vite places all hashed chunks under `/assets/` — these get immutable caching.
69
- * Everything else (favicon.ico, robots.txt, etc.) gets a shorter cache.
70
- */
71
- export function generateHeadersFile(): string {
72
- return `# Auto-generated by @timber-js/app — static asset cache headers.
73
- # See design/25-production-deployments.md §"CDN / Edge Cache"
74
-
75
- /assets/*
76
- Cache-Control: ${IMMUTABLE_CACHE}
77
-
78
- /*
79
- Cache-Control: ${STATIC_CACHE}
80
- `;
81
- }
@@ -53,6 +53,9 @@ export function parseBodySize(size: string): number {
53
53
  }
54
54
  }
55
55
 
56
+ /** Strict integer pattern: one or more digits, nothing else. */
57
+ const STRICT_INTEGER_RE = /^\d+$/;
58
+
56
59
  /** Check whether a request body exceeds the configured size limit (stateless, no ALS). */
57
60
  export function enforceBodyLimits(
58
61
  req: Request,
@@ -66,11 +69,16 @@ export function enforceBodyLimits(
66
69
  return { ok: false, status: 411 };
67
70
  }
68
71
 
69
- const bodySize = Number.parseInt(contentLength, 10);
70
- if (Number.isNaN(bodySize)) {
72
+ // Reject malformed values: multiple values ("100, 999999"), negative numbers,
73
+ // floats ("100.5"), or non-numeric strings. parseInt would silently parse
74
+ // the first number from "100, 999999" as 100, letting the real body through.
75
+ const trimmed = contentLength.trim();
76
+ if (!STRICT_INTEGER_RE.test(trimmed)) {
71
77
  return { ok: false, status: 411 };
72
78
  }
73
79
 
80
+ const bodySize = Number.parseInt(trimmed, 10);
81
+
74
82
  const limit = resolveLimit(kind, config);
75
83
  return bodySize <= limit ? { ok: true } : { ok: false, status: 413 };
76
84
  }
@@ -35,6 +35,12 @@ export interface BuildManifest {
35
35
  modulepreload: Record<string, string[]>;
36
36
  /** Map from input file path to font assets used by that module. */
37
37
  fonts: Record<string, ManifestFontEntry[]>;
38
+ /**
39
+ * Cache-busting hashes for metadata route files (opengraph-image, etc.).
40
+ * Map from file path (relative to project root) to short content hash.
41
+ * In dev mode this is empty — a startup nonce is used instead.
42
+ */
43
+ metadataRouteHashes?: Record<string, string>;
38
44
  }
39
45
 
40
46
  /** Empty build manifest used in dev mode. */
@@ -43,6 +49,7 @@ export const EMPTY_BUILD_MANIFEST: BuildManifest = {
43
49
  js: {},
44
50
  modulepreload: {},
45
51
  fonts: {},
52
+ metadataRouteHashes: {},
46
53
  };
47
54
 
48
55
  /** Segment shape expected by collectRouteCss (matches ManifestSegmentNode). */
@@ -85,6 +92,12 @@ export function collectRouteCss(segments: SegmentWithFiles[], manifest: BuildMan
85
92
  * via injectHead() before </head>.
86
93
  */
87
94
  export function buildCssLinkTags(cssUrls: string[]): string {
95
+ // Emit <link rel="stylesheet"> tags as a fallback for platforms where
96
+ // React's Float system (via @vitejs/plugin-rsc preinit with
97
+ // data-precedence) doesn't handle CSS injection. In practice, Float
98
+ // deduplicates and these may be dropped. No preload hints — Float
99
+ // already starts the fetch via preinit(), and redundant preloads
100
+ // cause "ignored due to unknown as/type" browser warnings.
88
101
  return cssUrls.map((url) => `<link rel="stylesheet" href="${url}">`).join('');
89
102
  }
90
103
 
@@ -95,10 +108,10 @@ export function buildCssLinkTags(cssUrls: string[]): string {
95
108
  * into 103 Early Hints responses. This avoids platform-specific 103
96
109
  * sending code.
97
110
  *
98
- * Example output: `</assets/root.css>; rel=preload; as=style, </assets/page.css>; rel=preload; as=style`
111
+ * Example output: `</assets/root.css>; as=style; rel=preload, </assets/page.css>; as=style; rel=preload`
99
112
  */
100
113
  export function buildLinkHeaders(cssUrls: string[]): string {
101
- return cssUrls.map((url) => `<${url}>; rel=preload; as=style`).join(', ');
114
+ return cssUrls.map((url) => `<${url}>; as=style; rel=preload`).join(', ');
102
115
  }
103
116
 
104
117
  // ─── Font utilities ──────────────────────────────────────────────────────
@@ -153,10 +166,10 @@ export function buildFontPreloadTags(fonts: ManifestFontEntry[]): string {
153
166
  *
154
167
  * Cloudflare CDN converts Link headers with rel=preload into 103 Early Hints.
155
168
  *
156
- * Example: `</fonts/inter.woff2>; rel=preload; as=font; crossorigin`
169
+ * Example: `</fonts/inter.woff2>; as=font; rel=preload; crossorigin`
157
170
  */
158
171
  export function buildFontLinkHeaders(fonts: ManifestFontEntry[]): string {
159
- return fonts.map((f) => `<${f.href}>; rel=preload; as=font; crossorigin`).join(', ');
172
+ return fonts.map((f) => `<${f.href}>; as=font; rel=preload; crossorigin`).join(', ');
160
173
  }
161
174
 
162
175
  // ─── JS chunk utilities ──────────────────────────────────────────────────
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Single-shot `setImmediate` coalescing primitive.
3
+ *
4
+ * Multiple synchronous `schedule()` calls within one event-loop tick
5
+ * result in exactly one `flush` invocation at the end of that tick.
6
+ * No recursive scheduling, no busy-wait, no polling loop.
7
+ *
8
+ * Both `createBufferedTransformStream` (Web) and
9
+ * `createNodeBufferedTransform` (Node) use this helper so the invariant
10
+ * — and this comment — live in one place.
11
+ *
12
+ * **Not a polling loop.** Uses a single-shot `setImmediate` per flush
13
+ * cycle — no recursive scheduling, no busy-wait. See design/02
14
+ * §"No Polling".
15
+ */
16
+
17
+ export interface TickCoalescer {
18
+ /**
19
+ * Request a flush at the end of the current tick. If a flush is already
20
+ * scheduled, this is a no-op. Returns the pending promise (or undefined
21
+ * if the flush already fired and no new one has been scheduled).
22
+ */
23
+ schedule(): void;
24
+
25
+ /**
26
+ * The pending flush promise, if any. Callers (e.g. `flush()` in a
27
+ * TransformStream) can `await` this to wait for the scheduled flush
28
+ * to complete before closing the stream.
29
+ */
30
+ readonly pending: Promise<void> | undefined;
31
+
32
+ /**
33
+ * Cancel any pending scheduled flush and invoke the flush callback
34
+ * synchronously. Used by Node `Transform.flush()` which needs to
35
+ * drain the buffer immediately before calling back.
36
+ */
37
+ flushSync(): void;
38
+ }
39
+
40
+ /**
41
+ * Create a tick coalescer that calls `onFlush` at most once per tick.
42
+ */
43
+ export function createTickCoalescer(onFlush: () => void): TickCoalescer {
44
+ let pending: Promise<void> | undefined;
45
+ let immediateHandle: ReturnType<typeof setImmediate> | null = null;
46
+
47
+ function doFlush(): void {
48
+ immediateHandle = null;
49
+ pending = undefined;
50
+ onFlush();
51
+ }
52
+
53
+ return {
54
+ schedule() {
55
+ if (immediateHandle !== null) return;
56
+ pending = new Promise<void>((resolve) => {
57
+ immediateHandle = setImmediate(() => {
58
+ doFlush();
59
+ resolve();
60
+ });
61
+ });
62
+ },
63
+
64
+ get pending() {
65
+ return pending;
66
+ },
67
+
68
+ flushSync() {
69
+ if (immediateHandle !== null) {
70
+ clearImmediate(immediateHandle);
71
+ doFlush();
72
+ }
73
+ },
74
+ };
75
+ }
@@ -160,15 +160,33 @@ export function compressResponse(request: Request, response: Response): Response
160
160
  });
161
161
  }
162
162
 
163
- // ─── Gzip (CompressionStream API) ────────────────────────────────────────
163
+ // ─── Gzip (node:zlib with Z_SYNC_FLUSH) ──────────────────────────────────
164
+ //
165
+ // Uses node:zlib's createGzip with Z_SYNC_FLUSH so each chunk is flushed
166
+ // to the output immediately. The Web Platform CompressionStream API buffers
167
+ // internally and does NOT flush per-chunk — this kills streaming because
168
+ // the browser doesn't receive the HTML shell until the gzip stream closes
169
+ // (i.e. after all Suspense boundaries resolve).
170
+ //
171
+ // Z_SYNC_FLUSH adds ~2–5% size overhead vs Z_NO_FLUSH but preserves
172
+ // correct streaming behavior: the shell renders instantly, Suspense
173
+ // fallbacks are visible immediately, and streamed content appears
174
+ // progressively.
175
+
176
+ import { createGzip, constants } from 'node:zlib';
177
+ import { Readable } from 'node:stream';
164
178
 
165
179
  /**
166
- * Compress a ReadableStream with gzip using the Web Platform CompressionStream API.
167
- * Available in Node 18+, Bun, and Deno — no npm dependency needed.
180
+ * Compress a ReadableStream with gzip, flushing each chunk immediately.
181
+ *
182
+ * Uses node:zlib's createGzip with Z_SYNC_FLUSH to ensure each HTML chunk
183
+ * (shell, Suspense resolution, RSC payload) is delivered to the browser
184
+ * as soon as it's available — preserving streaming semantics.
168
185
  */
169
186
  function compressWithGzip(body: ReadableStream<Uint8Array>): ReadableStream<Uint8Array> {
170
- const compressionStream = new CompressionStream('gzip');
171
- // Cast needed: CompressionStream's WritableStream<BufferSource> type is wider
172
- // than ReadableStream's Uint8Array, but Uint8Array is a valid BufferSource.
173
- return body.pipeThrough(compressionStream as unknown as TransformStream<Uint8Array, Uint8Array>);
187
+ const gzip = createGzip({ flush: constants.Z_SYNC_FLUSH });
188
+ const nodeInput = Readable.fromWeb(body as import('stream/web').ReadableStream);
189
+ nodeInput.pipe(gzip);
190
+
191
+ return Readable.toWeb(gzip) as ReadableStream<Uint8Array>;
174
192
  }