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

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 (800) 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 +143 -45
  72. package/dist/adapters/nitro.js.map +1 -1
  73. package/dist/adapters/shared.d.ts +16 -0
  74. package/dist/adapters/shared.d.ts.map +1 -0
  75. package/dist/cache/cache-api.d.ts +24 -0
  76. package/dist/cache/cache-api.d.ts.map +1 -0
  77. package/dist/cache/handler-store.d.ts +31 -0
  78. package/dist/cache/handler-store.d.ts.map +1 -0
  79. package/dist/cache/index.d.ts +23 -7
  80. package/dist/cache/index.d.ts.map +1 -1
  81. package/dist/cache/index.js +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 +57 -17
  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 +142 -59
  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/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  724. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  725. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  726. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  727. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  728. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  729. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  730. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  731. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  732. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  733. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  734. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  735. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  736. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  737. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  738. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  739. package/dist/cache/register-cached-function.d.ts +0 -17
  740. package/dist/cache/register-cached-function.d.ts.map +0 -1
  741. package/dist/client/browser-entry.d.ts +0 -21
  742. package/dist/client/browser-entry.d.ts.map +0 -1
  743. package/dist/client/link-status-provider.d.ts +0 -11
  744. package/dist/client/link-status-provider.d.ts.map +0 -1
  745. package/dist/client/segment-merger.d.ts +0 -119
  746. package/dist/client/segment-merger.d.ts.map +0 -1
  747. package/dist/client/transition-root.d.ts.map +0 -1
  748. package/dist/client/use-navigation-pending.d.ts +0 -26
  749. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  750. package/dist/client/use-params.d.ts.map +0 -1
  751. package/dist/plugins/cache-transform.d.ts +0 -36
  752. package/dist/plugins/cache-transform.d.ts.map +0 -1
  753. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  754. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  755. package/dist/plugins/dev-logs.d.ts.map +0 -1
  756. package/dist/plugins/dynamic-transform.d.ts +0 -72
  757. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  758. package/dist/plugins/server-action-exports.d.ts +0 -26
  759. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  760. package/dist/routing/status-file-lint.d.ts +0 -33
  761. package/dist/routing/status-file-lint.d.ts.map +0 -1
  762. package/dist/search-params/analyze.d.ts +0 -54
  763. package/dist/search-params/analyze.d.ts.map +0 -1
  764. package/dist/search-params/builtin-codecs.d.ts +0 -105
  765. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  766. package/dist/search-params/codecs.d.ts +0 -53
  767. package/dist/search-params/codecs.d.ts.map +0 -1
  768. package/dist/search-params/create.d.ts +0 -106
  769. package/dist/search-params/create.d.ts.map +0 -1
  770. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  771. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  772. package/dist/server/dev-logger.d.ts.map +0 -1
  773. package/dist/server/dev-span-processor.d.ts.map +0 -1
  774. package/dist/server/dev-warnings.d.ts.map +0 -1
  775. package/dist/server/manifest-status-resolver.d.ts +0 -58
  776. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  777. package/dist/server/prerender.d.ts +0 -77
  778. package/dist/server/prerender.d.ts.map +0 -1
  779. package/dist/utils/directive-parser.d.ts +0 -70
  780. package/dist/utils/directive-parser.d.ts.map +0 -1
  781. package/src/cache/register-cached-function.ts +0 -103
  782. package/src/client/browser-entry.ts +0 -678
  783. package/src/client/link-status-provider.tsx +0 -30
  784. package/src/client/segment-merger.ts +0 -339
  785. package/src/client/transition-root.tsx +0 -166
  786. package/src/client/use-navigation-pending.ts +0 -38
  787. package/src/plugins/cache-transform.ts +0 -199
  788. package/src/plugins/dev-error-overlay.ts +0 -230
  789. package/src/plugins/dynamic-transform.ts +0 -161
  790. package/src/plugins/server-action-exports.ts +0 -220
  791. package/src/routing/status-file-lint.ts +0 -112
  792. package/src/search-params/analyze.ts +0 -192
  793. package/src/search-params/builtin-codecs.ts +0 -228
  794. package/src/search-params/create.ts +0 -321
  795. package/src/server/dev-fetch-instrumentation.ts +0 -96
  796. package/src/server/dev-span-processor.ts +0 -78
  797. package/src/server/manifest-status-resolver.ts +0 -215
  798. package/src/server/prerender.ts +0 -139
  799. package/src/utils/directive-parser.ts +0 -529
  800. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -5,8 +5,23 @@
5
5
  * See design/10-error-handling.md.
6
6
  */
7
7
 
8
- import { TimberErrorBoundary } from '#/client/error-boundary.js';
8
+ import { TimberErrorBoundary } from '../client/error-boundary.js';
9
9
  import type { ManifestSegmentNode } from './route-matcher.js';
10
+ import { loadModule } from './safe-load.js';
11
+
12
+ /** MDX/markdown extensions — server components that cannot be passed as function props. */
13
+ const MDX_EXTENSIONS = new Set(['.mdx', '.md']);
14
+
15
+ /**
16
+ * Check if a manifest file path ends with an MDX/markdown extension.
17
+ * MDX components are server components and cannot cross the RSC→client
18
+ * boundary as function props to TimberErrorBoundary.
19
+ */
20
+ function isMdxFilePath(filePath: string): boolean {
21
+ const dotIndex = filePath.lastIndexOf('.');
22
+ if (dotIndex === -1) return false;
23
+ return MDX_EXTENSIONS.has(filePath.slice(dotIndex));
24
+ }
10
25
 
11
26
  /**
12
27
  * Wrap an element in error boundaries defined by a route segment.
@@ -15,11 +30,17 @@ import type { ManifestSegmentNode } from './route-matcher.js';
15
30
  * 1. Specific status files (e.g., 404.tsx, 500.tsx) — highest priority at runtime
16
31
  * 2. Category catch-alls (4xx.tsx, 5xx.tsx)
17
32
  * 3. error.tsx — catches anything not matched by status files
33
+ *
34
+ * MDX status files are server components and cannot be passed as function
35
+ * props to TimberErrorBoundary (a 'use client' component). Instead, they
36
+ * are pre-rendered as elements and passed as fallbackElement. See TIM-503.
18
37
  */
19
38
  export async function wrapSegmentWithErrorBoundaries(
20
39
  segment: ManifestSegmentNode,
21
40
  element: React.ReactElement,
22
- h: (...args: unknown[]) => React.ReactElement
41
+ h: (...args: unknown[]) => React.ReactElement,
42
+ /** When true, skip 4xx error boundaries — deny catching handles them in-tree. See TIM-666. */
43
+ skipDenyBoundaries = false
23
44
  ): Promise<React.ReactElement> {
24
45
  // Specific status files (innermost — highest priority at runtime)
25
46
  if (segment.statusFiles) {
@@ -27,13 +48,27 @@ export async function wrapSegmentWithErrorBoundaries(
27
48
  if (key !== '4xx' && key !== '5xx') {
28
49
  const status = parseInt(key, 10);
29
50
  if (!isNaN(status)) {
30
- const mod = (await file.load()) as Record<string, unknown>;
31
- if (mod.default) {
32
- element = h(TimberErrorBoundary, {
33
- fallbackComponent: mod.default,
34
- status,
35
- children: element,
36
- });
51
+ // Skip 4xx boundaries when deny catching is active — the deny
52
+ // page is rendered by AccessGate/PageDenyBoundary instead.
53
+ if (skipDenyBoundaries && status >= 400 && status <= 499) continue;
54
+ // .catch: error boundary construction must not fail if the
55
+ // error page module has a syntax error — skip this boundary.
56
+ const mod = await loadModule(file).catch(() => null);
57
+ if (mod?.default) {
58
+ if (isMdxFilePath(file.filePath)) {
59
+ // MDX: pre-render as element (server component can't be a function prop)
60
+ element = h(TimberErrorBoundary, {
61
+ fallbackElement: h(mod.default as never, { status }),
62
+ status,
63
+ children: element,
64
+ });
65
+ } else {
66
+ element = h(TimberErrorBoundary, {
67
+ fallbackComponent: mod.default,
68
+ status,
69
+ children: element,
70
+ });
71
+ }
37
72
  }
38
73
  }
39
74
  }
@@ -41,14 +76,24 @@ export async function wrapSegmentWithErrorBoundaries(
41
76
 
42
77
  // Category catch-alls (4xx.tsx, 5xx.tsx)
43
78
  for (const [key, file] of Object.entries(segment.statusFiles)) {
79
+ if (skipDenyBoundaries && key === '4xx') continue;
44
80
  if (key === '4xx' || key === '5xx') {
45
- const mod = (await file.load()) as Record<string, unknown>;
46
- if (mod.default) {
47
- element = h(TimberErrorBoundary, {
48
- fallbackComponent: mod.default,
49
- status: key === '4xx' ? 400 : 500,
50
- children: element,
51
- });
81
+ const mod = await loadModule(file).catch(() => null);
82
+ if (mod?.default) {
83
+ const categoryStatus = key === '4xx' ? 400 : 500;
84
+ if (isMdxFilePath(file.filePath)) {
85
+ element = h(TimberErrorBoundary, {
86
+ fallbackElement: h(mod.default as never, {}),
87
+ status: categoryStatus,
88
+ children: element,
89
+ });
90
+ } else {
91
+ element = h(TimberErrorBoundary, {
92
+ fallbackComponent: mod.default,
93
+ status: categoryStatus,
94
+ children: element,
95
+ });
96
+ }
52
97
  }
53
98
  }
54
99
  }
@@ -56,12 +101,19 @@ export async function wrapSegmentWithErrorBoundaries(
56
101
 
57
102
  // error.tsx (outermost — catches anything not matched by status files)
58
103
  if (segment.error) {
59
- const mod = (await segment.error.load()) as Record<string, unknown>;
60
- if (mod.default) {
61
- element = h(TimberErrorBoundary, {
62
- fallbackComponent: mod.default,
63
- children: element,
64
- });
104
+ const mod = await loadModule(segment.error).catch(() => null);
105
+ if (mod?.default) {
106
+ if (isMdxFilePath(segment.error.filePath)) {
107
+ element = h(TimberErrorBoundary, {
108
+ fallbackElement: h(mod.default as never, {}),
109
+ children: element,
110
+ });
111
+ } else {
112
+ element = h(TimberErrorBoundary, {
113
+ fallbackComponent: mod.default,
114
+ children: element,
115
+ });
116
+ }
65
117
  }
66
118
  }
67
119
 
@@ -10,10 +10,15 @@
10
10
  * exposed to the client (design/13-security.md principle 4).
11
11
  */
12
12
 
13
- import type { RouteMatch } from '#/server/pipeline.js';
14
- import type { ManifestSegmentNode } from '#/server/route-matcher.js';
15
- import type { ClientBootstrapConfig } from '#/server/html-injectors.js';
16
- import type { LayoutEntry } from '#/server/deny-renderer.js';
13
+ import type { RouteMatch } from './pipeline.js';
14
+ import type { ManifestSegmentNode } from './route-matcher.js';
15
+ import type { ClientBootstrapConfig } from './html-injectors.js';
16
+ import type { LayoutEntry } from './deny-renderer.js';
17
+ import type { GlobalErrorFile } from './rsc-entry/error-renderer.js';
18
+ import { swallow } from './logger.js';
19
+ import { logRenderError } from './logger.js';
20
+ import { loadModule } from './safe-load.js';
21
+ import { sourceMapError } from './dev-source-map.js';
17
22
 
18
23
  /**
19
24
  * Render a fallback error page when the render pipeline throws.
@@ -27,25 +32,42 @@ export async function renderFallbackError(
27
32
  responseHeaders: Headers,
28
33
  isDev: boolean,
29
34
  rootSegment: ManifestSegmentNode,
30
- clientBootstrap: ClientBootstrapConfig
35
+ clientBootstrap: ClientBootstrapConfig,
36
+ globalError?: GlobalErrorFile,
37
+ projectRoot?: string
31
38
  ): Promise<Response> {
39
+ // Source-map the error's stack trace in dev mode so the error page
40
+ // shows original source positions. See TIM-811.
41
+ sourceMapError(error);
42
+
32
43
  if (isDev) {
33
- return renderDevErrorPage(error);
44
+ return renderDevErrorPage(error, projectRoot);
34
45
  }
35
46
  // Lazy import to avoid loading error-renderer in the pipeline module
36
- const { renderErrorPage } = await import('#/server/rsc-entry/error-renderer.js');
47
+ const { renderErrorPage } = await import('./rsc-entry/error-renderer.js');
37
48
  const segments = [rootSegment];
38
49
  const layoutComponents: LayoutEntry[] = [];
39
- if (rootSegment.layout) {
40
- const mod = (await rootSegment.layout.load()) as Record<string, unknown>;
41
- if (mod.default) {
42
- layoutComponents.push({
43
- component: mod.default as (...args: unknown[]) => unknown,
44
- segment: rootSegment,
45
- });
50
+ // Wrap layout loading in try/catch — if the root layout module itself
51
+ // crashes (evaluation failure, syntax error, etc.), we still want to
52
+ // reach renderErrorPage so it can fall through to global-error.tsx
53
+ // (Tier 2), which renders without any layout wrapping.
54
+ try {
55
+ if (rootSegment.layout) {
56
+ const mod = await loadModule(rootSegment.layout);
57
+ if (mod.default) {
58
+ layoutComponents.push({
59
+ component: mod.default as (...args: unknown[]) => unknown,
60
+ segment: rootSegment,
61
+ });
62
+ }
46
63
  }
64
+ } catch (layoutError) {
65
+ // Layout failed to load — proceed without it. renderErrorPage will
66
+ // attempt segment-level error pages (without layout wrapping) and
67
+ // then fall through to global-error.tsx if those also fail.
68
+ logRenderError({ method: req.method, path: new URL(req.url).pathname, error: layoutError });
47
69
  }
48
- const match: RouteMatch = { segments: segments as never, params: {} };
70
+ const match: RouteMatch = { segments, segmentParams: {}, middlewareChain: [] };
49
71
  return renderErrorPage(
50
72
  error,
51
73
  500,
@@ -54,94 +76,40 @@ export async function renderFallbackError(
54
76
  req,
55
77
  match,
56
78
  responseHeaders,
57
- clientBootstrap
79
+ clientBootstrap,
80
+ globalError
58
81
  );
59
82
  }
60
83
 
61
84
  /**
62
- * Render a dev-mode 500 error page with error message and stack trace.
85
+ * Render a dev-mode 500 error page with error details, source context,
86
+ * classified stack trace, and copy button.
87
+ *
88
+ * Dynamically imports the shared template from `plugins/dev-error-page.ts`
89
+ * so it is NOT pulled into production server bundles. The Vite client script
90
+ * is injected so the error overlay fires when the HMR WebSocket connects.
63
91
  *
64
- * Returns an HTML Response that displays the error in a styled page.
65
- * The Vite HMR client script is included so the error overlay still fires.
92
+ * Dev-only — the dynamic import has zero production cost.
66
93
  */
67
- export function renderDevErrorPage(error: unknown): Response {
94
+ export async function renderDevErrorPage(error: unknown, projectRoot?: string): Promise<Response> {
68
95
  const err = error instanceof Error ? error : new Error(String(error));
69
- const title = err.name || 'Error';
70
- const message = escapeHtml(err.message);
71
- const stack = err.stack ? escapeHtml(err.stack) : '';
96
+ const root = projectRoot ?? process.cwd();
72
97
 
73
- const html = `<!DOCTYPE html>
74
- <html lang="en">
75
- <head>
76
- <meta charset="utf-8">
77
- <meta name="viewport" content="width=device-width, initial-scale=1">
78
- <title>500 — ${escapeHtml(title)}</title>
79
- <script type="module" src="/@vite/client"></script>
80
- <style>
81
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
82
- body {
83
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
84
- background: #1a1a2e;
85
- color: #e0e0e0;
86
- padding: 2rem;
87
- line-height: 1.6;
88
- }
89
- .container { max-width: 800px; margin: 0 auto; }
90
- .badge {
91
- display: inline-block;
92
- background: #e74c3c;
93
- color: white;
94
- font-size: 0.75rem;
95
- font-weight: 700;
96
- padding: 0.2rem 0.6rem;
97
- border-radius: 4px;
98
- text-transform: uppercase;
99
- letter-spacing: 0.05em;
100
- margin-bottom: 1rem;
101
- }
102
- h1 {
103
- font-size: 1.5rem;
104
- color: #ff6b6b;
105
- margin-bottom: 0.5rem;
106
- word-break: break-word;
107
- }
108
- .message {
109
- font-size: 1.1rem;
110
- color: #ccc;
111
- margin-bottom: 1.5rem;
112
- word-break: break-word;
113
- }
114
- .stack-container {
115
- background: #16213e;
116
- border: 1px solid #2a2a4a;
117
- border-radius: 8px;
118
- padding: 1rem;
119
- overflow-x: auto;
120
- }
121
- .stack {
122
- font-family: 'SF Mono', 'Fira Code', 'Fira Mono', Menlo, Consolas, monospace;
123
- font-size: 0.8rem;
124
- color: #a0a0c0;
125
- white-space: pre-wrap;
126
- word-break: break-all;
127
- }
128
- .hint {
129
- margin-top: 1.5rem;
130
- font-size: 0.85rem;
131
- color: #666;
132
- }
133
- </style>
134
- </head>
135
- <body>
136
- <div class="container">
137
- <span class="badge">500 Internal Server Error</span>
138
- <h1>${escapeHtml(title)}</h1>
139
- <p class="message">${message}</p>
140
- ${stack ? `<div class="stack-container"><pre class="stack">${stack}</pre></div>` : ''}
141
- <p class="hint">This error page is only shown in development.</p>
142
- </div>
143
- </body>
144
- </html>`;
98
+ let html: string;
99
+ try {
100
+ // Dynamic import — keeps dev-error-page.ts and its transitive deps
101
+ // (dev-error-overlay.ts, @jridgewell/trace-mapping) out of production bundles.
102
+ const { generateDevErrorPage } = await import('../dev-tools/error-page.js');
103
+ html = generateDevErrorPage(err, 'render', root);
104
+ // Inject Vite client script so the error overlay fires when HMR connects.
105
+ html = html.replace(
106
+ '</head>',
107
+ ' <script type="module" src="/@vite/client"></script>\n</head>'
108
+ );
109
+ } catch (e) {
110
+ swallow(e, 'dev error page template failed, using minimal fallback');
111
+ html = minimalErrorPage(err);
112
+ }
145
113
 
146
114
  return new Response(html, {
147
115
  status: 500,
@@ -149,11 +117,15 @@ export function renderDevErrorPage(error: unknown): Response {
149
117
  });
150
118
  }
151
119
 
152
- function escapeHtml(str: string): string {
153
- return str
154
- .replace(/&/g, '&amp;')
155
- .replace(/</g, '&lt;')
156
- .replace(/>/g, '&gt;')
157
- .replace(/"/g, '&quot;')
158
- .replace(/'/g, '&#x27;');
120
+ /**
121
+ * Minimal fallback error page — used only if the shared template fails to load.
122
+ */
123
+ function minimalErrorPage(err: Error): string {
124
+ const esc = (s: string) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
125
+ return `<!DOCTYPE html><html><head><meta charset="utf-8"><title>500</title>
126
+ <script type="module" src="/@vite/client"></script></head>
127
+ <body style="font-family:system-ui;padding:2rem;background:#1a1a2e;color:#e0e0e0">
128
+ <h1 style="color:#ff6b6b">500 Internal Server Error</h1>
129
+ <pre style="color:#a0a0c0;white-space:pre-wrap">${esc(err.stack ?? err.message)}</pre>
130
+ </body></html>`;
159
131
  }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Shared state machine types and transitions for RSC Flight injection.
3
+ *
4
+ * Both html-injectors.ts (Web Streams) and node-stream-transforms.ts
5
+ * (Node.js streams) implement identical state transitions — only the
6
+ * I/O primitives differ. This module defines the discriminated union
7
+ * states and the transition map once.
8
+ *
9
+ * Valid state flow:
10
+ * init → streaming → flushing → done
11
+ * (any) → error
12
+ *
13
+ * Suffix stripping (</body></html>) is handled by a separate
14
+ * createMoveSuffixStream / createNodeMoveSuffixTransform upstream
15
+ * in the pipeline (TIM-530). The flight injector only interleaves
16
+ * RSC scripts between HTML chunks — no suffix tracking needed.
17
+ *
18
+ * Design doc: 02-rendering-pipeline.md
19
+ */
20
+
21
+ import type { TransitionMap } from '../utils/state-machine.js';
22
+
23
+ // ─── States ──────────────────────────────────────────────────────────────────
24
+
25
+ /** Waiting for first HTML chunk. Pull loop not started. */
26
+ export interface InitState {
27
+ phase: 'init';
28
+ }
29
+
30
+ /** HTML chunks flowing, pull loop running. */
31
+ export interface StreamingState {
32
+ phase: 'streaming';
33
+ }
34
+
35
+ /** HTML stream done (flush fired). Draining remaining RSC chunks. */
36
+ export interface FlushingState {
37
+ phase: 'flushing';
38
+ }
39
+
40
+ /** All streams consumed. Terminal state. */
41
+ export interface DoneState {
42
+ phase: 'done';
43
+ }
44
+
45
+ /** Pull loop failed. Terminal state with captured error. */
46
+ export interface ErrorState {
47
+ phase: 'error';
48
+ error: unknown;
49
+ }
50
+
51
+ export type FlightInjectionState =
52
+ | InitState
53
+ | StreamingState
54
+ | FlushingState
55
+ | DoneState
56
+ | ErrorState;
57
+
58
+ // ─── Events ──────────────────────────────────────────────────────────────────
59
+
60
+ /** First HTML chunk arrived — start the pull loop. */
61
+ export interface FirstChunkEvent {
62
+ type: 'FIRST_CHUNK';
63
+ }
64
+
65
+ /** HTML stream finished (flush/end). */
66
+ export interface HtmlDoneEvent {
67
+ type: 'HTML_DONE';
68
+ }
69
+
70
+ /** RSC pull loop completed (all chunks read or stream closed). */
71
+ export interface PullDoneEvent {
72
+ type: 'PULL_DONE';
73
+ }
74
+
75
+ /** RSC pull loop encountered an error. */
76
+ export interface PullErrorEvent {
77
+ type: 'PULL_ERROR';
78
+ error: unknown;
79
+ }
80
+
81
+ export type FlightInjectionEvent = FirstChunkEvent | HtmlDoneEvent | PullDoneEvent | PullErrorEvent;
82
+
83
+ // ─── Transitions ─────────────────────────────────────────────────────────────
84
+
85
+ export const flightInjectionTransitions: TransitionMap<FlightInjectionState, FlightInjectionEvent> =
86
+ {
87
+ init: {
88
+ FIRST_CHUNK: (): StreamingState => ({ phase: 'streaming' }),
89
+ // Edge case: HTML stream ends immediately (empty body)
90
+ HTML_DONE: (): FlushingState => ({ phase: 'flushing' }),
91
+ },
92
+ streaming: {
93
+ HTML_DONE: (): FlushingState => ({ phase: 'flushing' }),
94
+ PULL_DONE: (): StreamingState => ({ phase: 'streaming' }),
95
+ PULL_ERROR: (_s, e): ErrorState => ({ phase: 'error', error: e.error }),
96
+ },
97
+ flushing: {
98
+ PULL_DONE: (): DoneState => ({ phase: 'done' }),
99
+ PULL_ERROR: (_s, e): ErrorState => ({ phase: 'error', error: e.error }),
100
+ },
101
+ };
102
+
103
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
104
+
105
+ /** Whether the HTML stream has finished (flush/end fired). */
106
+ export function isHtmlDone(state: FlightInjectionState): boolean {
107
+ return state.phase === 'flushing' || state.phase === 'done';
108
+ }
109
+
110
+ /** Whether the RSC pull loop has completed. */
111
+ export function isPullDone(state: FlightInjectionState): boolean {
112
+ return state.phase === 'done' || state.phase === 'error';
113
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Shared Flight data script generation.
3
+ *
4
+ * Both html-injectors.ts (Web Streams / dev) and node-stream-transforms.ts
5
+ * (Node streams / production) use this module to generate inline `<script>`
6
+ * tags for RSC Flight data injection.
7
+ *
8
+ * The init script goes in `<head>` as part of the HTML shell (guaranteed
9
+ * to execute before any streaming chunk scripts). Push scripts are emitted
10
+ * as RSC chunks arrive during streaming.
11
+ *
12
+ * See design/02-rendering-pipeline.md, LOCAL-415
13
+ */
14
+
15
+ // ─── JSON Escaping ────────────────────────────────────────────────────────
16
+
17
+ /**
18
+ * Escape a JSON string for safe embedding inside an HTML `<script>` tag.
19
+ *
20
+ * Prevents XSS via `</script>` injection and handles Unicode line/paragraph
21
+ * separators that are valid JSON but invalid in JS string literals (pre-ES2019).
22
+ */
23
+ export function htmlEscapeJsonString(str: string): string {
24
+ return str
25
+ .replace(/</g, '\\u003c')
26
+ .replace(/>/g, '\\u003e')
27
+ .replace(/\u2028/g, '\\u2028')
28
+ .replace(/\u2029/g, '\\u2029');
29
+ }
30
+
31
+ // ─── Script Generation ────────────────────────────────────────────────────
32
+
33
+ /** The global variable name used for Flight data on the client. */
34
+ const FLIGHT_VAR = 'self.__timber_f';
35
+
36
+ /**
37
+ * Generate the init script that creates the Flight data array.
38
+ *
39
+ * This MUST be included in `<head>` (via headHtml) so it executes before
40
+ * any streaming chunk scripts arrive in `<body>`. The array is created
41
+ * unconditionally — no `||[]` guard needed in push scripts.
42
+ *
43
+ * Also emits the bootstrap signal [0] which tells the client that
44
+ * Flight data is active for this page.
45
+ */
46
+ export function flightInitScript(): string {
47
+ return `<script>${FLIGHT_VAR}=[${htmlEscapeJsonString(JSON.stringify([0]))}]</script>`;
48
+ }
49
+
50
+ /**
51
+ * Generate a push script for a Flight data chunk.
52
+ *
53
+ * Normally the init script runs first (it's in `<head>`), so
54
+ * `self.__timber_f` already exists. However, shell-less status pages
55
+ * (e.g. standalone error pages) may have no `<head>` tag, so the init script
56
+ * never runs. The `||[]` guard ensures the array is created on first
57
+ * push if needed, preventing a TypeError. See TIM-559.
58
+ */
59
+ export function flightChunkScript(data: string): string {
60
+ const escaped = htmlEscapeJsonString(JSON.stringify([1, data]));
61
+ return `<script>(${FLIGHT_VAR}=${FLIGHT_VAR}||[]).push(${escaped})</script>`;
62
+ }
@@ -9,6 +9,7 @@
9
9
  */
10
10
 
11
11
  import { DenySignal, RedirectSignal, RenderError } from './primitives.js';
12
+ import { logRenderError } from './logger.js';
12
13
 
13
14
  // ─── Types ───────────────────────────────────────────────────────────────────
14
15
 
@@ -169,7 +170,7 @@ function handleSignal(error: unknown, responseHeaders: Headers): FlushResult {
169
170
  }
170
171
 
171
172
  // Unknown error → HTTP 500
172
- console.error('[timber] Unhandled render-phase error:', error);
173
+ logRenderError({ method: '', path: '', error });
173
174
  return {
174
175
  response: new Response(null, {
175
176
  status: 500,