@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
@@ -1,20 +1,137 @@
1
1
  /**
2
- * HTML stream injectors — TransformStreams that modify streamed HTML.
2
+ * HTML stream injectors — Web `TransformStream` wrappers around the
3
+ * pure helpers in `html-injector-core.ts`.
3
4
  *
4
- * These are extracted into a separate module so they can be tested
5
- * independently of rsc-entry.ts (which imports virtual modules).
5
+ * Used on edge runtimes (Cloudflare Workers, Deno, browser SSR) where
6
+ * Web Streams are the native shape. The Node.js / Bun adapters live in
7
+ * `node-stream-transforms.ts` and wrap the same core in Node `Transform`s.
8
+ * Both wrappers must stay byte-for-byte equivalent — the core enforces
9
+ * that. If you fix a streaming bug here, you almost certainly need to
10
+ * fix it (or its cause) in the core, not in the Node wrapper.
11
+ *
12
+ * Also exports the `buildClientScripts` helper used by RSC entry to
13
+ * resolve bootstrap script URLs from the build manifest. That helper
14
+ * is unrelated to streaming but lives here for historical reasons (it
15
+ * shares no code with the core and was previously co-located with the
16
+ * Web stream transforms).
6
17
  *
7
18
  * Design docs: 02-rendering-pipeline.md, 18-build-system.md §"Entry Files"
8
19
  */
9
20
 
21
+ import {
22
+ BufferAggregator,
23
+ FlightInjectorCore,
24
+ createInjectorState,
25
+ createSuffixState,
26
+ encodeUtf8,
27
+ injectorFlush,
28
+ processInjectorChunk,
29
+ processSuffixChunk,
30
+ suffixFlush,
31
+ } from './html-injector-core.js';
32
+ import { flightChunkScript } from './flight-scripts.js';
33
+ import { withTimeout, RenderTimeoutError } from './render-timeout.js';
34
+ import { createTickCoalescer } from './coalesce-tick.js';
35
+
36
+ // ─── Buffered Transform ──────────────────────────────────────────────────────
37
+
38
+ export interface BufferedTransformOptions {
39
+ /**
40
+ * Flush synchronously once the buffer reaches this many bytes.
41
+ * Prevents unbounded memory growth for very large Fizz flushes.
42
+ * Default: Infinity (no byte limit — flush only on tick boundary).
43
+ */
44
+ readonly maxBufferByteLength?: number;
45
+ }
46
+
47
+ /**
48
+ * Buffer incoming chunks and coalesce them within a single event loop tick.
49
+ *
50
+ * React Fizz may emit multiple micro-chunks within a single flush. Without
51
+ * coalescing, downstream transforms (especially flight injection) could
52
+ * see chunk boundaries in the middle of HTML tags. This transform collects
53
+ * everything that arrives in the same tick and emits it as one concatenated
54
+ * chunk on the next `setImmediate` — a single-shot schedule, not a poll.
55
+ *
56
+ * See design/02 §"No Polling" and §"Scripts at Chunk Boundaries Only".
57
+ */
58
+ export function createBufferedTransformStream(
59
+ options: BufferedTransformOptions = {}
60
+ ): TransformStream<Uint8Array, Uint8Array> {
61
+ const buffer = new BufferAggregator(options.maxBufferByteLength ?? Infinity);
62
+ let controller: TransformStreamDefaultController<Uint8Array> | null = null;
63
+
64
+ const drainTo = () => {
65
+ const merged = buffer.drain();
66
+ if (!merged || !controller) return;
67
+ try {
68
+ controller.enqueue(merged);
69
+ } catch {
70
+ // Controller may be errored (e.g. cancelled) — ignore.
71
+ }
72
+ };
73
+
74
+ const coalescer = createTickCoalescer(drainTo);
75
+
76
+ return new TransformStream<Uint8Array, Uint8Array>({
77
+ transform(chunk, ctrl) {
78
+ controller = ctrl;
79
+ const overCap = buffer.append(chunk);
80
+ if (overCap) {
81
+ drainTo();
82
+ return;
83
+ }
84
+ coalescer.schedule();
85
+ },
86
+ flush() {
87
+ return coalescer.pending;
88
+ },
89
+ });
90
+ }
91
+
92
+ // ─── Move Suffix Transform ───────────────────────────────────────────────────
93
+
94
+ /**
95
+ * Move `</body></html>` to the end of the stream.
96
+ *
97
+ * React's renderToReadableStream emits the closing tags as part of the
98
+ * shell chunk. Content arriving after the shell (Suspense resolutions,
99
+ * RSC scripts) would otherwise appear after `</html>` and produce invalid
100
+ * HTML. This transform strips the suffix on first sight and re-emits it
101
+ * from `flush()` — after every other byte has passed through. If the
102
+ * suffix never appeared in the input, it is appended anyway so output
103
+ * is well-formed.
104
+ *
105
+ * Equivalent to Next.js's `createMoveSuffixStream`.
106
+ */
107
+ export function createMoveSuffixStream(): TransformStream<Uint8Array, Uint8Array> {
108
+ const state = createSuffixState();
109
+
110
+ return new TransformStream<Uint8Array, Uint8Array>({
111
+ transform(chunk, controller) {
112
+ const result = processSuffixChunk(state, chunk);
113
+ if (result.kind === 'passthrough' || result.kind === 'noSuffix') {
114
+ controller.enqueue(chunk);
115
+ return;
116
+ }
117
+ if (result.before) controller.enqueue(result.before);
118
+ if (result.after) controller.enqueue(result.after);
119
+ },
120
+ flush(controller) {
121
+ controller.enqueue(suffixFlush(state));
122
+ },
123
+ });
124
+ }
125
+
126
+ // ─── Tag Injection ───────────────────────────────────────────────────────────
127
+
10
128
  /**
11
- * Inject HTML content before a closing tag in the stream.
129
+ * Inject `content` immediately before (or after) `targetTag` in the stream.
12
130
  *
13
- * Streams chunks through immediately, keeping only a small trailing
14
- * buffer (the length of the target tag minus one) to handle the case
15
- * where the target tag spans two chunks. This preserves React's
16
- * streaming behavior for Suspense boundaries — chunks are not held
17
- * back waiting for the closing tag.
131
+ * Streams chunks through immediately, keeping only a small trailing buffer
132
+ * (length of target tag minus one) so a tag split across chunks is still
133
+ * detected. Suspense streaming chunks are never held back waiting for the
134
+ * closing tag.
18
135
  */
19
136
  function createInjector(
20
137
  stream: ReadableStream<Uint8Array>,
@@ -23,57 +140,29 @@ function createInjector(
23
140
  position: 'before' | 'after' = 'before'
24
141
  ): ReadableStream<Uint8Array> {
25
142
  if (!content) return stream;
26
-
27
- const decoder = new TextDecoder();
28
- const encoder = new TextEncoder();
29
- let injected = false;
30
- // Keep a trailing buffer just large enough that the target tag
31
- // can't be split across the boundary without us seeing it.
32
- let tail = '';
33
- const tailLen = targetTag.length - 1;
143
+ const state = createInjectorState({ content, targetTag, position });
34
144
 
35
145
  return stream.pipeThrough(
36
146
  new TransformStream<Uint8Array, Uint8Array>({
37
147
  transform(chunk, controller) {
38
- if (injected) {
148
+ const result = processInjectorChunk(state, chunk);
149
+ if (result.kind === 'passthrough') {
39
150
  controller.enqueue(chunk);
40
151
  return;
41
152
  }
42
-
43
- // Combine the trailing buffer with the new chunk
44
- const text = tail + decoder.decode(chunk, { stream: true });
45
- const tagIndex = text.indexOf(targetTag);
46
-
47
- if (tagIndex !== -1) {
48
- const splitPoint = position === 'before' ? tagIndex : tagIndex + targetTag.length;
49
- const before = text.slice(0, splitPoint);
50
- const after = text.slice(splitPoint);
51
- controller.enqueue(encoder.encode(before + content + after));
52
- injected = true;
53
- tail = '';
54
- } else {
55
- // Flush everything except the last tailLen chars (which might
56
- // be the start of the target tag split across chunks).
57
- const safeEnd = Math.max(0, text.length - tailLen);
58
- if (safeEnd > 0) {
59
- controller.enqueue(encoder.encode(text.slice(0, safeEnd)));
60
- }
61
- tail = text.slice(safeEnd);
62
- }
153
+ if (result.bytes) controller.enqueue(result.bytes);
63
154
  },
64
155
  flush(controller) {
65
- if (!injected && tail) {
66
- controller.enqueue(encoder.encode(tail));
67
- }
156
+ const leftover = injectorFlush(state);
157
+ if (leftover) controller.enqueue(leftover);
68
158
  },
69
159
  })
70
160
  );
71
161
  }
72
162
 
73
163
  /**
74
- * Inject metadata elements before </head> in the HTML stream.
75
- *
76
- * If no </head> is found, the buffer is emitted as-is.
164
+ * Inject metadata elements before `</head>` in the HTML stream.
165
+ * If no `</head>` is found, the buffer is emitted as-is.
77
166
  */
78
167
  export function injectHead(
79
168
  stream: ReadableStream<Uint8Array>,
@@ -83,10 +172,9 @@ export function injectHead(
83
172
  }
84
173
 
85
174
  /**
86
- * Inject client bootstrap scripts before </body> in the HTML stream.
87
- *
88
- * Returns the stream unchanged if scriptsHtml is empty (client JS disabled mode).
89
- * If no </body> is found, the buffer is emitted as-is.
175
+ * Inject client bootstrap scripts before `</body>` in the HTML stream.
176
+ * Returns the stream unchanged if `scriptsHtml` is empty (client JS
177
+ * disabled mode). If no `</body>` is found, the buffer is emitted as-is.
90
178
  */
91
179
  export function injectScripts(
92
180
  stream: ReadableStream<Uint8Array>,
@@ -95,65 +183,49 @@ export function injectScripts(
95
183
  return createInjector(stream, scriptsHtml, '</body>');
96
184
  }
97
185
 
98
- /**
99
- * Escape a string for safe embedding inside a `<script>` tag within
100
- * a JSON-encoded value.
101
- *
102
- * Only needs to prevent `</script>` from closing the tag early and
103
- * handle U+2028/U+2029 (line/paragraph separators valid in JSON but
104
- * historically problematic in JS). Since we use JSON.stringify for the
105
- * outer encoding, we only escape `<` and the line separators.
106
- */
107
- function htmlEscapeJsonString(str: string): string {
108
- return str
109
- .replace(/</g, '\\u003c')
110
- .replace(/\u2028/g, '\\u2028')
111
- .replace(/\u2029/g, '\\u2029');
112
- }
186
+ // ─── RSC Flight Injection ────────────────────────────────────────────────────
113
187
 
114
188
  /**
115
189
  * Transform an RSC Flight stream into a stream of inline `<script>` tags.
116
190
  *
117
191
  * Uses a **pull-based** ReadableStream — the consumer (the injection
118
192
  * transform) drives reads from the RSC stream on demand. No background
119
- * reader, no shared mutable arrays, no race conditions.
120
- *
121
- * Each RSC chunk becomes:
122
- * <script>(self.__timber_f=self.__timber_f||[]).push([1,"escaped_chunk"])</script>
123
- *
124
- * The first chunk emitted is the bootstrap signal [0] which the client
125
- * uses to initialize its buffer.
126
- *
127
- * Uses JSON-encoded typed tuples matching the pattern from Next.js:
128
- * [0] — bootstrap signal
129
- * [1, data] — RSC Flight data chunk (UTF-8 string)
193
+ * reader, no shared mutable arrays, no race conditions. Each RSC chunk
194
+ * becomes `<script>self.__timber_f.push([1,"data"])</script>`. The
195
+ * init script (which creates `__timber_f`) is in `<head>` via
196
+ * `flightInitScript()` — see flight-scripts.ts.
130
197
  */
131
198
  export function createInlinedRscStream(
132
- rscStream: ReadableStream<Uint8Array>
199
+ rscStream: ReadableStream<Uint8Array>,
200
+ renderTimeoutMs?: number
133
201
  ): ReadableStream<Uint8Array> {
134
- const encoder = new TextEncoder();
135
202
  const rscReader = rscStream.getReader();
136
203
  const decoder = new TextDecoder('utf-8', { fatal: true });
204
+ // When renderTimeoutMs is 0 ("disabled"), enforce a safety ceiling
205
+ // so a stalled RSC stream can't hang the connection forever.
206
+ const timeoutMs = (renderTimeoutMs ?? 30_000) || 120_000;
137
207
 
138
208
  return new ReadableStream<Uint8Array>({
139
- start(controller) {
140
- // Emit bootstrap signal — tells the client that __timber_f is active
141
- const bootstrap = `<script>(self.__timber_f=self.__timber_f||[]).push(${htmlEscapeJsonString(JSON.stringify([0]))})</script>`;
142
- controller.enqueue(encoder.encode(bootstrap));
143
- },
144
209
  async pull(controller) {
145
210
  try {
146
- const { done, value } = await rscReader.read();
211
+ const readPromise = rscReader.read();
212
+ const { done, value } = await withTimeout(
213
+ readPromise,
214
+ timeoutMs,
215
+ 'RSC stream read timed out'
216
+ );
147
217
  if (done) {
148
218
  controller.close();
149
219
  return;
150
220
  }
151
221
  if (value) {
152
222
  const decoded = decoder.decode(value, { stream: true });
153
- const escaped = htmlEscapeJsonString(JSON.stringify([1, decoded]));
154
- controller.enqueue(encoder.encode(`<script>self.__timber_f.push(${escaped})</script>`));
223
+ controller.enqueue(encodeUtf8(flightChunkScript(decoded)));
155
224
  }
156
225
  } catch (error) {
226
+ if (error instanceof RenderTimeoutError) {
227
+ rscReader.cancel(error).catch(() => {});
228
+ }
157
229
  controller.error(error);
158
230
  }
159
231
  },
@@ -161,136 +233,71 @@ export function createInlinedRscStream(
161
233
  }
162
234
 
163
235
  /**
164
- * Merge RSC script stream into the HTML stream, injecting scripts
165
- * only as direct children of `<body>`.
236
+ * Merge a raw RSC byte stream into the HTML stream, wrapping each RSC
237
+ * chunk in a `<script>` and injecting it between HTML chunks at safe
238
+ * boundaries. Suffix stripping is handled upstream by
239
+ * `createMoveSuffixStream` — this transform only interleaves.
166
240
  *
167
- * This single transform replaces the previous two-stage pipeline
168
- * (createFlightInjectionTransform + createMoveSuffixStream). It:
241
+ * The state machine, pending queue, script wrapping (`flightChunkScript`),
242
+ * and pull loop all live in `FlightInjectorCore`. This wrapper only
243
+ * shuffles bytes between the core and the Web `TransformStream` controller.
169
244
  *
170
- * 1. Strips `</body></html>` from the shell chunk so all subsequent
171
- * content is at the `<body>` level.
172
- * 2. Buffers RSC `<script>` tags and drains them after the suffix
173
- * has been stripped — guaranteeing body-level injection.
174
- * 3. Re-emits `</body></html>` at the very end after all RSC scripts.
245
+ * **Input must be the raw RSC stream, not the pre-scripted output of
246
+ * `createInlinedRscStream`.** The core wraps each chunk itself; passing
247
+ * an already-wrapped stream would double-wrap and break hydration.
175
248
  *
176
- * Because the suffix is stripped before any scripts are injected,
177
- * scripts are always direct children of `<body>` regardless of how
178
- * React's renderToReadableStream chunks the HTML. No HTML structure
179
- * scanning or depth tracking needed — the suffix removal is the
180
- * structural guarantee.
249
+ * State machine phases: init → streaming → flushing → done; (any) → error.
181
250
  *
182
- * Inspired by Next.js createFlightDataInjectionTransformStream.
251
+ * Inspired by Next.js `createFlightDataInjectionTransformStream`. See
252
+ * design/02 §"Scripts at Chunk Boundaries Only".
183
253
  */
184
254
  function createFlightInjectionTransform(
185
- rscScriptStream: ReadableStream<Uint8Array>
255
+ rscStream: ReadableStream<Uint8Array>,
256
+ renderTimeoutMs?: number,
257
+ errorSignal?: AbortSignal
186
258
  ): TransformStream<Uint8Array, Uint8Array> {
187
- const encoder = new TextEncoder();
188
- const decoder = new TextDecoder();
189
- const suffix = '</body></html>';
190
- const suffixBytes = encoder.encode(suffix);
191
-
192
- const rscReader = rscScriptStream.getReader();
193
- let pullPromise: Promise<void> | null = null;
194
- let donePulling = false;
195
- let pullError: unknown = null;
196
- // Once the suffix is stripped, all content is body-level and
197
- // scripts can safely be drained after any HTML chunk.
198
- let foundSuffix = false;
199
-
200
- // RSC script chunks waiting to be injected at the body level.
201
- const pending: Uint8Array[] = [];
202
-
203
- async function pullLoop(): Promise<void> {
204
- // Wait one macrotask so the HTML shell chunk flows through
205
- // transform() first. The browser needs the shell HTML before
206
- // RSC data script tags arrive.
207
- await new Promise<void>((r) => setTimeout(r, 0));
259
+ const core = new FlightInjectorCore(rscStream, renderTimeoutMs, errorSignal);
260
+ // Controller reference — set on first transform() call so the pull
261
+ // loop can drain pending scripts between HTML chunks (after yielding).
262
+ let _controller: TransformStreamDefaultController<Uint8Array> | null = null;
208
263
 
209
- try {
210
- for (;;) {
211
- const { done, value } = await rscReader.read();
212
- if (done) {
213
- donePulling = true;
214
- return;
215
- }
216
- pending.push(value);
217
- // Yield between reads so HTML chunks get a chance to flow
218
- // through transform() first. RSC and HTML are driven by the
219
- // same source — each RSC chunk typically produces a
220
- // corresponding HTML chunk from SSR.
221
- await new Promise<void>((r) => setTimeout(r, 0));
222
- }
223
- } catch (err) {
224
- pullError = err;
225
- donePulling = true;
226
- }
227
- }
264
+ const drain = (controller: TransformStreamDefaultController<Uint8Array>): void => {
265
+ while (core.pending.length > 0) controller.enqueue(core.pending.shift()!);
266
+ const err = core.terminalError;
267
+ if (err !== null) controller.error(err);
268
+ };
228
269
 
229
- /** Drain all buffered RSC script chunks to the output. */
230
- function drainPending(controller: TransformStreamDefaultController<Uint8Array>): void {
231
- while (pending.length > 0) {
232
- controller.enqueue(pending.shift()!);
233
- }
234
- if (pullError) {
235
- const err = pullError;
236
- pullError = null;
237
- controller.error(err);
238
- }
239
- }
270
+ const onYieldDrain = (): void => {
271
+ if (_controller) drain(_controller);
272
+ };
240
273
 
241
274
  return new TransformStream<Uint8Array, Uint8Array>({
242
275
  transform(chunk, controller) {
243
- // Start pulling RSC scripts into the buffer (if not started)
244
- if (!pullPromise) {
245
- pullPromise = pullLoop();
246
- }
276
+ _controller = controller;
247
277
 
248
- if (foundSuffix) {
249
- // Post-suffix: everything is body-level (Suspense chunks).
250
- // Emit HTML, then drain any buffered scripts.
251
- controller.enqueue(chunk);
252
- if (pending.length > 0) drainPending(controller);
253
- return;
278
+ if (core.isInit) {
279
+ core.notifyFirstChunk();
280
+ core.ensurePullLoop(onYieldDrain);
254
281
  }
255
282
 
256
- // Look for </body></html> in the shell chunk.
257
- const text = decoder.decode(chunk, { stream: true });
258
- const idx = text.indexOf(suffix);
259
- if (idx !== -1) {
260
- foundSuffix = true;
261
- // Emit everything before the suffix (still inside <body>'s
262
- // child elements — don't inject scripts here).
263
- const before = text.slice(0, idx);
264
- const after = text.slice(idx + suffix.length);
265
- if (before) controller.enqueue(encoder.encode(before));
266
- // Now we're at body level — drain buffered scripts
267
- if (pending.length > 0) drainPending(controller);
268
- // Emit any content after the suffix (shouldn't normally exist)
269
- if (after) controller.enqueue(encoder.encode(after));
270
- } else {
271
- // Pre-suffix: inside nested elements. Pass through, don't
272
- // inject scripts (they'd become children of nested elements).
273
- controller.enqueue(chunk);
274
- }
283
+ // Emit the HTML chunk, then drain any buffered RSC scripts.
284
+ // Scripts always come AFTER a complete HTML chunk — never mid-tag.
285
+ // The buffered transform upstream (TIM-528) ensures coherent chunks.
286
+ // Suffix stripping is upstream via createMoveSuffixStream (TIM-530).
287
+ controller.enqueue(chunk);
288
+ if (core.pending.length > 0) drain(controller);
275
289
  },
276
290
  flush(controller) {
277
- // HTML stream is done — drain remaining RSC chunks at body level
278
- const finish = () => {
279
- drainPending(controller);
280
- // Re-emit the suffix at the very end so HTML is well-formed
281
- if (foundSuffix) {
282
- controller.enqueue(suffixBytes);
283
- }
284
- };
291
+ // All HTML chunks emitted. Pull loop stops yielding.
292
+ core.notifyHtmlDone();
285
293
 
286
- if (donePulling) {
294
+ const finish = () => drain(controller);
295
+
296
+ if (core.isPullDone) {
287
297
  finish();
288
298
  return;
289
299
  }
290
- if (!pullPromise) {
291
- pullPromise = pullLoop();
292
- }
293
- return pullPromise.then(finish);
300
+ return core.ensurePullLoop(onYieldDrain).then(finish);
294
301
  },
295
302
  });
296
303
  }
@@ -298,34 +305,42 @@ function createFlightInjectionTransform(
298
305
  /**
299
306
  * Progressively inline RSC Flight payload chunks into the HTML stream.
300
307
  *
301
- * Architecture (3 TransformStream pipeline):
302
- * 1. HTML stream → moveSuffix (captures </body></html>, re-emits at end)
303
- * 2. → flightInjection (merges RSC <script> tags between HTML chunks)
304
- * 3. → output (well-formed HTML with interleaved RSC data)
308
+ * Architecture (2 TransformStream pipeline):
309
+ * HTML stream → flightInjection → moveSuffix → output
305
310
  *
306
- * The RSC stream is transformed into <script> tags via createInlinedRscStream
307
- * (pull-based, no shared mutable state) and merged into the HTML pipeline
308
- * via createFlightInjectionTransform.
311
+ * 1. flightInjection wraps each RSC chunk in a `<script>` and interleaves
312
+ * them between HTML chunks.
313
+ * 2. moveSuffix strips `</body></html>` and re-emits at end so injected
314
+ * scripts appear before the closing tags.
315
+ *
316
+ * Wrapping happens inside `FlightInjectorCore` (via `flightChunkScript`).
317
+ * The raw RSC stream is passed straight to `createFlightInjectionTransform`
318
+ * — do not pre-wrap with `createInlinedRscStream` (that helper still
319
+ * exists for callers that want a standalone scripted stream).
309
320
  *
310
321
  * The client reads these script tags via `self.__timber_f` and feeds
311
- * them to `createFromReadableStream` for progressive hydration.
312
- * Stream completion is signaled by the DOMContentLoaded event on the
313
- * client side — no custom done flag needed.
322
+ * them to `createFromReadableStream` for progressive hydration. Stream
323
+ * completion is signaled by the `DOMContentLoaded` event on the client
324
+ * side — no custom done flag needed.
314
325
  */
315
326
  export function injectRscPayload(
316
327
  htmlStream: ReadableStream<Uint8Array>,
317
- rscStream: ReadableStream<Uint8Array> | undefined
328
+ rscStream: ReadableStream<Uint8Array> | undefined,
329
+ renderTimeoutMs?: number,
330
+ errorSignal?: AbortSignal
318
331
  ): ReadableStream<Uint8Array> {
319
332
  if (!rscStream) return htmlStream;
320
-
321
- // Transform RSC binary stream → stream of <script> tags
322
- const rscScriptStream = createInlinedRscStream(rscStream);
323
-
324
- // Single transform: strip </body></html>, inject RSC scripts at
325
- // body level, re-emit suffix at the very end.
326
- return htmlStream.pipeThrough(createFlightInjectionTransform(rscScriptStream));
333
+ // Pass the raw RSC stream directly to the flight injection transform.
334
+ // The transform's core (FlightInjectorCore) wraps each chunk in a
335
+ // <script> via flightChunkScript itself — do NOT pre-wrap with
336
+ // createInlinedRscStream here, that would double-wrap.
337
+ return htmlStream
338
+ .pipeThrough(createFlightInjectionTransform(rscStream, renderTimeoutMs, errorSignal))
339
+ .pipeThrough(createMoveSuffixStream());
327
340
  }
328
341
 
342
+ // ─── Client Bootstrap Script Resolution ──────────────────────────────────────
343
+
329
344
  /**
330
345
  * Client bootstrap configuration returned by buildClientScripts.
331
346
  *
@@ -344,7 +359,7 @@ export interface ClientBootstrapConfig {
344
359
  preloadLinks: string;
345
360
  }
346
361
 
347
- /** Find a manifest entry by matching the key suffix (e.g. 'client/browser-entry.ts'). */
362
+ /** Find a manifest entry by matching the key suffix (e.g. 'client/browser-entry/index.ts'). */
348
363
  function findManifestEntry(map: Record<string, string>, suffix: string): string | undefined {
349
364
  for (const [key, value] of Object.entries(map)) {
350
365
  if (key.endsWith(suffix)) return value;
@@ -366,19 +381,19 @@ function findManifestEntryArray(
366
381
  /**
367
382
  * Build client bootstrap configuration based on runtime config.
368
383
  *
369
- * Returns empty strings when client JavaScript is disabled,
370
- * which produces zero-JS output. When `enableHMRInDev` is true and
371
- * running in dev mode, injects only the Vite HMR client (no app
372
- * bootstrap) so hot reloading works during development.
384
+ * Returns empty strings when client JavaScript is disabled, which produces
385
+ * zero-JS output. When `enableHMRInDev` is true and running in dev mode,
386
+ * injects only the Vite HMR client (no app bootstrap) so hot reloading
387
+ * works during development.
373
388
  *
374
389
  * In production, uses hashed chunk URLs from the build manifest.
375
390
  *
376
391
  * The bootstrap uses dynamic `import()` inside a regular (non-module)
377
392
  * inline script so it executes immediately during HTML parsing. This
378
- * is critical for streaming: `<script type="module">` is deferred
379
- * until the document finishes parsing, which blocks hydration behind
380
- * Suspense boundaries. Dynamic `import()` starts module loading and
381
- * execution as soon as the shell HTML is parsed.
393
+ * is critical for streaming: `<script type="module">` is deferred until
394
+ * the document finishes parsing, which blocks hydration behind Suspense
395
+ * boundaries. Dynamic `import()` starts module loading and execution as
396
+ * soon as the shell HTML is parsed.
382
397
  */
383
398
  export function buildClientScripts(runtimeConfig: {
384
399
  output: string;
@@ -425,7 +440,7 @@ export function buildClientScripts(runtimeConfig: {
425
440
  // a monorepo). Match by suffix to handle both cases.
426
441
  const manifest = runtimeConfig.buildManifest;
427
442
  const browserEntryUrl = manifest
428
- ? findManifestEntry(manifest.js, 'client/browser-entry.ts')
443
+ ? findManifestEntry(manifest.js, 'client/browser-entry/index.ts')
429
444
  : undefined;
430
445
 
431
446
  let preloadLinks = '';
@@ -435,7 +450,7 @@ export function buildClientScripts(runtimeConfig: {
435
450
  // Modulepreload hints for browser entry dependencies
436
451
  const preloads =
437
452
  (manifest
438
- ? findManifestEntryArray(manifest.modulepreload, 'client/browser-entry.ts')
453
+ ? findManifestEntryArray(manifest.modulepreload, 'client/browser-entry/index.ts')
439
454
  : undefined) ?? [];
440
455
  for (const url of preloads) {
441
456
  preloadLinks += `<link rel="modulepreload" href="${url}">`;