@timber-js/app 0.2.0-alpha.15 → 0.2.0-alpha.150

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 (854) hide show
  1. package/LICENSE +8 -0
  2. package/dist/_chunks/actions-a0RczDnB.js +1106 -0
  3. package/dist/_chunks/actions-a0RczDnB.js.map +1 -0
  4. package/dist/_chunks/build-output-helper-B20ZuTSA.js +102 -0
  5. package/dist/_chunks/build-output-helper-B20ZuTSA.js.map +1 -0
  6. package/dist/_chunks/cache-api-Co-yI-gP.js +424 -0
  7. package/dist/_chunks/cache-api-Co-yI-gP.js.map +1 -0
  8. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → canonicalize-P41GR6tY.js} +94 -18
  9. package/dist/_chunks/canonicalize-P41GR6tY.js.map +1 -0
  10. package/dist/_chunks/cli-schema-sync-DJDdyEae.js +629 -0
  11. package/dist/_chunks/cli-schema-sync-DJDdyEae.js.map +1 -0
  12. package/dist/_chunks/cli-schema-sync-D_IhHEUW.js +2 -0
  13. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  14. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  15. package/dist/_chunks/define-Bssfp6ot.js +82 -0
  16. package/dist/_chunks/define-Bssfp6ot.js.map +1 -0
  17. package/dist/_chunks/define-CFmvb4Bt.js +203 -0
  18. package/dist/_chunks/define-CFmvb4Bt.js.map +1 -0
  19. package/dist/_chunks/fast-hash-D6hIVt1Y.js +36 -0
  20. package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +1 -0
  21. package/dist/_chunks/format-CfwjgPz9.js +14 -0
  22. package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
  23. package/dist/_chunks/href-validation-FiA_rToW.js +141 -0
  24. package/dist/_chunks/href-validation-FiA_rToW.js.map +1 -0
  25. package/dist/_chunks/logger-CM0clugc.js +645 -0
  26. package/dist/_chunks/logger-CM0clugc.js.map +1 -0
  27. package/dist/_chunks/navigation-root-bUDZLw74.js +124 -0
  28. package/dist/_chunks/navigation-root-bUDZLw74.js.map +1 -0
  29. package/dist/_chunks/plugin-context-DurqFBuY.js +2 -0
  30. package/dist/_chunks/plugin-context-GfDWsdd2.js +268 -0
  31. package/dist/_chunks/plugin-context-GfDWsdd2.js.map +1 -0
  32. package/dist/_chunks/registry-DbJPKoBp.js +20 -0
  33. package/dist/_chunks/registry-DbJPKoBp.js.map +1 -0
  34. package/dist/_chunks/resolve-schema-3iUvBV5T.js +50 -0
  35. package/dist/_chunks/resolve-schema-3iUvBV5T.js.map +1 -0
  36. package/dist/_chunks/router-ref-CtmF-aPv.js +28 -0
  37. package/dist/_chunks/router-ref-CtmF-aPv.js.map +1 -0
  38. package/dist/_chunks/schema-bridge-BY3QLBL7.js +119 -0
  39. package/dist/_chunks/schema-bridge-BY3QLBL7.js.map +1 -0
  40. package/dist/_chunks/segment-classify-CDDRVKs7.js +137 -0
  41. package/dist/_chunks/segment-classify-CDDRVKs7.js.map +1 -0
  42. package/dist/_chunks/segment-context-ZDnXDkbz.js +34 -0
  43. package/dist/_chunks/segment-context-ZDnXDkbz.js.map +1 -0
  44. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BOWsq18U.js} +1 -1
  45. package/dist/_chunks/ssr-data-BOWsq18U.js.map +1 -0
  46. package/dist/_chunks/tree-match-D2l830j2.js +102 -0
  47. package/dist/_chunks/tree-match-D2l830j2.js.map +1 -0
  48. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-CbeQmext.js} +7 -20
  49. package/dist/_chunks/use-query-states-CbeQmext.js.map +1 -0
  50. package/dist/_chunks/use-segment-params-D1CzlgBo.js +151 -0
  51. package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +1 -0
  52. package/dist/_chunks/validation-taUkvA4Q.js +113 -0
  53. package/dist/_chunks/validation-taUkvA4Q.js.map +1 -0
  54. package/dist/_chunks/walkers-DvWDj453.js +790 -0
  55. package/dist/_chunks/walkers-DvWDj453.js.map +1 -0
  56. package/dist/adapters/build-output-helper.d.ts +28 -0
  57. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  58. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  59. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  60. package/dist/adapters/cloudflare-dev.js +73 -0
  61. package/dist/adapters/cloudflare-dev.js.map +1 -0
  62. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  63. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  64. package/dist/adapters/cloudflare-kv-cache.js +117 -0
  65. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  66. package/dist/adapters/cloudflare.d.ts +142 -20
  67. package/dist/adapters/cloudflare.d.ts.map +1 -1
  68. package/dist/adapters/cloudflare.js +150 -64
  69. package/dist/adapters/cloudflare.js.map +1 -1
  70. package/dist/adapters/compress-module.d.ts +5 -4
  71. package/dist/adapters/compress-module.d.ts.map +1 -1
  72. package/dist/adapters/nitro.d.ts +17 -3
  73. package/dist/adapters/nitro.d.ts.map +1 -1
  74. package/dist/adapters/nitro.js +146 -147
  75. package/dist/adapters/nitro.js.map +1 -1
  76. package/dist/adapters/shared.d.ts +16 -0
  77. package/dist/adapters/shared.d.ts.map +1 -0
  78. package/dist/cache/cache-api.d.ts +24 -0
  79. package/dist/cache/cache-api.d.ts.map +1 -0
  80. package/dist/cache/handler-store.d.ts +31 -0
  81. package/dist/cache/handler-store.d.ts.map +1 -0
  82. package/dist/cache/index.d.ts +25 -7
  83. package/dist/cache/index.d.ts.map +1 -1
  84. package/dist/cache/index.js +100 -240
  85. package/dist/cache/index.js.map +1 -1
  86. package/dist/cache/invalidation-epoch.d.ts +43 -0
  87. package/dist/cache/invalidation-epoch.d.ts.map +1 -0
  88. package/dist/cache/redis-handler.d.ts +85 -8
  89. package/dist/cache/redis-handler.d.ts.map +1 -1
  90. package/dist/cache/singleflight.d.ts +18 -1
  91. package/dist/cache/singleflight.d.ts.map +1 -1
  92. package/dist/cache/sizeof.d.ts +22 -0
  93. package/dist/cache/sizeof.d.ts.map +1 -0
  94. package/dist/cache/stable-stringify.d.ts +9 -0
  95. package/dist/cache/stable-stringify.d.ts.map +1 -1
  96. package/dist/cache/timber-cache.d.ts +20 -10
  97. package/dist/cache/timber-cache.d.ts.map +1 -1
  98. package/dist/cli-schema-sync.d.ts +59 -0
  99. package/dist/cli-schema-sync.d.ts.map +1 -0
  100. package/dist/cli.d.ts +26 -2
  101. package/dist/cli.d.ts.map +1 -1
  102. package/dist/cli.js +70 -33
  103. package/dist/cli.js.map +1 -1
  104. package/dist/client/browser-dev.d.ts +34 -1
  105. package/dist/client/browser-dev.d.ts.map +1 -1
  106. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  107. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  108. package/dist/client/browser-entry/hmr.d.ts +21 -0
  109. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  110. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  111. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  112. package/dist/client/browser-entry/index.d.ts +29 -0
  113. package/dist/client/browser-entry/index.d.ts.map +1 -0
  114. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  115. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  116. package/dist/client/browser-entry/router-init.d.ts +26 -0
  117. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  118. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  119. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  120. package/dist/client/browser-entry/scroll.d.ts +28 -0
  121. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  122. package/dist/client/error-boundary.d.ts +12 -5
  123. package/dist/client/error-boundary.d.ts.map +1 -1
  124. package/dist/client/error-boundary.js +47 -10
  125. package/dist/client/error-boundary.js.map +1 -1
  126. package/dist/client/error-reconstituter.d.ts +61 -0
  127. package/dist/client/error-reconstituter.d.ts.map +1 -0
  128. package/dist/client/form.d.ts +16 -27
  129. package/dist/client/form.d.ts.map +1 -1
  130. package/dist/client/history.d.ts +11 -3
  131. package/dist/client/history.d.ts.map +1 -1
  132. package/dist/client/index.d.ts +10 -24
  133. package/dist/client/index.d.ts.map +1 -1
  134. package/dist/client/index.js +183 -1134
  135. package/dist/client/index.js.map +1 -1
  136. package/dist/client/internal.d.ts +19 -0
  137. package/dist/client/internal.d.ts.map +1 -0
  138. package/dist/client/internal.js +900 -0
  139. package/dist/client/internal.js.map +1 -0
  140. package/dist/client/link.d.ts +69 -60
  141. package/dist/client/link.d.ts.map +1 -1
  142. package/dist/client/navigation-api-types.d.ts +90 -0
  143. package/dist/client/navigation-api-types.d.ts.map +1 -0
  144. package/dist/client/navigation-api.d.ts +122 -0
  145. package/dist/client/navigation-api.d.ts.map +1 -0
  146. package/dist/client/navigation-context.d.ts +3 -2
  147. package/dist/client/navigation-context.d.ts.map +1 -1
  148. package/dist/client/navigation-root.d.ts +119 -0
  149. package/dist/client/navigation-root.d.ts.map +1 -0
  150. package/dist/client/nuqs-adapter.d.ts +1 -1
  151. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  152. package/dist/client/router-ref.d.ts +1 -1
  153. package/dist/client/router.d.ts +86 -10
  154. package/dist/client/router.d.ts.map +1 -1
  155. package/dist/client/rsc-fetch.d.ts +46 -3
  156. package/dist/client/rsc-fetch.d.ts.map +1 -1
  157. package/dist/client/segment-cache.d.ts +3 -1
  158. package/dist/client/segment-cache.d.ts.map +1 -1
  159. package/dist/client/segment-outlet.d.ts +49 -0
  160. package/dist/client/segment-outlet.d.ts.map +1 -0
  161. package/dist/client/segment-update-context.d.ts +21 -0
  162. package/dist/client/segment-update-context.d.ts.map +1 -0
  163. package/dist/client/shallow-url.d.ts +10 -0
  164. package/dist/client/shallow-url.d.ts.map +1 -0
  165. package/dist/client/ssr-data.d.ts +13 -4
  166. package/dist/client/ssr-data.d.ts.map +1 -1
  167. package/dist/client/state.d.ts +1 -1
  168. package/dist/client/top-loader.d.ts +5 -5
  169. package/dist/client/top-loader.d.ts.map +1 -1
  170. package/dist/client/use-cookie.d.ts +12 -0
  171. package/dist/client/use-cookie.d.ts.map +1 -1
  172. package/dist/client/use-link-status.d.ts +5 -5
  173. package/dist/client/use-link-status.d.ts.map +1 -1
  174. package/dist/client/use-pathname.d.ts.map +1 -1
  175. package/dist/client/use-pending-navigation.d.ts +23 -0
  176. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  177. package/dist/client/use-query-states.d.ts +1 -1
  178. package/dist/client/use-query-states.d.ts.map +1 -1
  179. package/dist/client/use-router.d.ts +1 -1
  180. package/dist/client/use-router.d.ts.map +1 -1
  181. package/dist/client/use-search-params.d.ts +12 -5
  182. package/dist/client/use-search-params.d.ts.map +1 -1
  183. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  184. package/dist/client/use-segment-params.d.ts.map +1 -0
  185. package/dist/codec.d.ts +69 -0
  186. package/dist/codec.d.ts.map +1 -0
  187. package/dist/codec.js +75 -0
  188. package/dist/codec.js.map +1 -0
  189. package/dist/config-types.d.ts +294 -0
  190. package/dist/config-types.d.ts.map +1 -0
  191. package/dist/config-validation.d.ts +51 -0
  192. package/dist/config-validation.d.ts.map +1 -0
  193. package/dist/content/index.d.ts +1 -10
  194. package/dist/content/index.d.ts.map +1 -1
  195. package/dist/content/index.js +0 -2
  196. package/dist/cookies/define-cookie.d.ts +58 -25
  197. package/dist/cookies/define-cookie.d.ts.map +1 -1
  198. package/dist/cookies/index.d.ts +2 -1
  199. package/dist/cookies/index.d.ts.map +1 -1
  200. package/dist/cookies/index.js +249 -36
  201. package/dist/cookies/index.js.map +1 -1
  202. package/dist/cookies/json-cookie.d.ts +64 -0
  203. package/dist/cookies/json-cookie.d.ts.map +1 -0
  204. package/dist/cookies/validation.d.ts +34 -0
  205. package/dist/cookies/validation.d.ts.map +1 -0
  206. package/dist/dev-tools/404-page.d.ts +50 -0
  207. package/dist/dev-tools/404-page.d.ts.map +1 -0
  208. package/dist/dev-tools/browser-logs.d.ts +84 -0
  209. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  210. package/dist/dev-tools/dev-page-shell.d.ts +78 -0
  211. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  212. package/dist/dev-tools/error-page.d.ts +32 -0
  213. package/dist/dev-tools/error-page.d.ts.map +1 -0
  214. package/dist/dev-tools/holding-server.d.ts +54 -0
  215. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  216. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  217. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  218. package/dist/dev-tools/index.d.ts +31 -0
  219. package/dist/dev-tools/index.d.ts.map +1 -0
  220. package/dist/dev-tools/instrumentation.d.ts +59 -0
  221. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  222. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  223. package/dist/dev-tools/logger.d.ts.map +1 -0
  224. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  225. package/dist/dev-tools/logs.d.ts.map +1 -0
  226. package/dist/dev-tools/overlay.d.ts +91 -0
  227. package/dist/dev-tools/overlay.d.ts.map +1 -0
  228. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  229. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  230. package/dist/dev-tools/terminal.d.ts +28 -0
  231. package/dist/dev-tools/terminal.d.ts.map +1 -0
  232. package/dist/fonts/ast-walk.d.ts +68 -0
  233. package/dist/fonts/ast-walk.d.ts.map +1 -0
  234. package/dist/fonts/ast.d.ts +110 -6
  235. package/dist/fonts/ast.d.ts.map +1 -1
  236. package/dist/fonts/bundle.d.ts +50 -0
  237. package/dist/fonts/bundle.d.ts.map +1 -0
  238. package/dist/fonts/dev-middleware.d.ts +22 -0
  239. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  240. package/dist/fonts/fallbacks.d.ts +0 -7
  241. package/dist/fonts/fallbacks.d.ts.map +1 -1
  242. package/dist/fonts/google.d.ts +4 -2
  243. package/dist/fonts/google.d.ts.map +1 -1
  244. package/dist/fonts/local.d.ts +4 -4
  245. package/dist/fonts/local.d.ts.map +1 -1
  246. package/dist/fonts/paths.d.ts +43 -0
  247. package/dist/fonts/paths.d.ts.map +1 -0
  248. package/dist/fonts/pipeline.d.ts +158 -0
  249. package/dist/fonts/pipeline.d.ts.map +1 -0
  250. package/dist/fonts/transform.d.ts +78 -0
  251. package/dist/fonts/transform.d.ts.map +1 -0
  252. package/dist/fonts/types.d.ts +47 -1
  253. package/dist/fonts/types.d.ts.map +1 -1
  254. package/dist/fonts/virtual-modules.d.ts +77 -0
  255. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  256. package/dist/index.d.ts +46 -180
  257. package/dist/index.d.ts.map +1 -1
  258. package/dist/index.js +6432 -13423
  259. package/dist/index.js.map +1 -1
  260. package/dist/params/codec-registry.d.ts +26 -0
  261. package/dist/params/codec-registry.d.ts.map +1 -0
  262. package/dist/params/define-schema.d.ts +81 -0
  263. package/dist/params/define-schema.d.ts.map +1 -0
  264. package/dist/params/index.d.ts +5 -0
  265. package/dist/params/index.d.ts.map +1 -0
  266. package/dist/params/index.js +34 -0
  267. package/dist/params/index.js.map +1 -0
  268. package/dist/params/resolve-schema.d.ts +34 -0
  269. package/dist/params/resolve-schema.d.ts.map +1 -0
  270. package/dist/plugin-context.d.ts +137 -0
  271. package/dist/plugin-context.d.ts.map +1 -0
  272. package/dist/plugins/adapter-build.d.ts +20 -1
  273. package/dist/plugins/adapter-build.d.ts.map +1 -1
  274. package/dist/plugins/build-manifest.d.ts +7 -3
  275. package/dist/plugins/build-manifest.d.ts.map +1 -1
  276. package/dist/plugins/build-report.d.ts +9 -7
  277. package/dist/plugins/build-report.d.ts.map +1 -1
  278. package/dist/plugins/cache.d.ts +73 -0
  279. package/dist/plugins/cache.d.ts.map +1 -0
  280. package/dist/plugins/client-chunks.d.ts +39 -0
  281. package/dist/plugins/client-chunks.d.ts.map +1 -0
  282. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  283. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  284. package/dist/plugins/content.d.ts +1 -1
  285. package/dist/plugins/content.d.ts.map +1 -1
  286. package/dist/plugins/dev-server.d.ts +17 -1
  287. package/dist/plugins/dev-server.d.ts.map +1 -1
  288. package/dist/plugins/entries.d.ts +1 -1
  289. package/dist/plugins/entries.d.ts.map +1 -1
  290. package/dist/plugins/fonts.d.ts +16 -73
  291. package/dist/plugins/fonts.d.ts.map +1 -1
  292. package/dist/plugins/mdx.d.ts +1 -1
  293. package/dist/plugins/mdx.d.ts.map +1 -1
  294. package/dist/plugins/routing.d.ts +1 -1
  295. package/dist/plugins/routing.d.ts.map +1 -1
  296. package/dist/plugins/server-bundle.d.ts.map +1 -1
  297. package/dist/plugins/shims.d.ts +29 -5
  298. package/dist/plugins/shims.d.ts.map +1 -1
  299. package/dist/plugins/static-build.d.ts +5 -26
  300. package/dist/plugins/static-build.d.ts.map +1 -1
  301. package/dist/routing/codegen-shared.d.ts +67 -0
  302. package/dist/routing/codegen-shared.d.ts.map +1 -0
  303. package/dist/routing/codegen-types.d.ts +64 -0
  304. package/dist/routing/codegen-types.d.ts.map +1 -0
  305. package/dist/routing/codegen.d.ts +7 -2
  306. package/dist/routing/codegen.d.ts.map +1 -1
  307. package/dist/routing/convention-lint.d.ts +41 -0
  308. package/dist/routing/convention-lint.d.ts.map +1 -0
  309. package/dist/routing/file-cache.d.ts +8 -0
  310. package/dist/routing/file-cache.d.ts.map +1 -0
  311. package/dist/routing/index.d.ts +7 -1
  312. package/dist/routing/index.d.ts.map +1 -1
  313. package/dist/routing/index.js +4 -2
  314. package/dist/routing/interception.d.ts +0 -5
  315. package/dist/routing/interception.d.ts.map +1 -1
  316. package/dist/routing/link-codegen.d.ts +90 -0
  317. package/dist/routing/link-codegen.d.ts.map +1 -0
  318. package/dist/routing/manifest-codegen.d.ts +32 -0
  319. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  320. package/dist/routing/scanner.d.ts +1 -10
  321. package/dist/routing/scanner.d.ts.map +1 -1
  322. package/dist/routing/schema-validation.d.ts +35 -0
  323. package/dist/routing/schema-validation.d.ts.map +1 -0
  324. package/dist/routing/segment-classify.d.ts +75 -0
  325. package/dist/routing/segment-classify.d.ts.map +1 -0
  326. package/dist/routing/segment-codegen.d.ts +38 -0
  327. package/dist/routing/segment-codegen.d.ts.map +1 -0
  328. package/dist/routing/types.d.ts +77 -25
  329. package/dist/routing/types.d.ts.map +1 -1
  330. package/dist/routing/walkers.d.ts +51 -0
  331. package/dist/routing/walkers.d.ts.map +1 -0
  332. package/dist/rsc-runtime/rsc.d.ts +1 -1
  333. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  334. package/dist/rsc-runtime/ssr.d.ts +12 -0
  335. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  336. package/dist/schema-bridge.d.ts +91 -0
  337. package/dist/schema-bridge.d.ts.map +1 -0
  338. package/dist/search-params/define.d.ts +157 -0
  339. package/dist/search-params/define.d.ts.map +1 -0
  340. package/dist/search-params/index.d.ts +4 -7
  341. package/dist/search-params/index.d.ts.map +1 -1
  342. package/dist/search-params/index.js +37 -440
  343. package/dist/search-params/index.js.map +1 -1
  344. package/dist/search-params/registry.d.ts +2 -2
  345. package/dist/search-params/registry.d.ts.map +1 -1
  346. package/dist/search-params/wrappers.d.ts +53 -0
  347. package/dist/search-params/wrappers.d.ts.map +1 -0
  348. package/dist/segment-params/define.d.ts +89 -0
  349. package/dist/segment-params/define.d.ts.map +1 -0
  350. package/dist/segment-params/index.d.ts +3 -0
  351. package/dist/segment-params/index.d.ts.map +1 -0
  352. package/dist/segment-params/index.js +2 -0
  353. package/dist/server/access-gate.d.ts +8 -3
  354. package/dist/server/access-gate.d.ts.map +1 -1
  355. package/dist/server/action-client.d.ts +41 -6
  356. package/dist/server/action-client.d.ts.map +1 -1
  357. package/dist/server/action-encryption.d.ts +76 -0
  358. package/dist/server/action-encryption.d.ts.map +1 -0
  359. package/dist/server/action-handler.d.ts +35 -1
  360. package/dist/server/action-handler.d.ts.map +1 -1
  361. package/dist/server/actions.d.ts +9 -30
  362. package/dist/server/actions.d.ts.map +1 -1
  363. package/dist/server/als-registry.d.ts +70 -11
  364. package/dist/server/als-registry.d.ts.map +1 -1
  365. package/dist/server/asset-headers.d.ts +1 -15
  366. package/dist/server/asset-headers.d.ts.map +1 -1
  367. package/dist/server/body-limits.d.ts.map +1 -1
  368. package/dist/server/build-manifest.d.ts +6 -29
  369. package/dist/server/build-manifest.d.ts.map +1 -1
  370. package/dist/server/canonicalize.d.ts +10 -0
  371. package/dist/server/canonicalize.d.ts.map +1 -1
  372. package/dist/server/coalesce-tick.d.ts +40 -0
  373. package/dist/server/coalesce-tick.d.ts.map +1 -0
  374. package/dist/server/cookie-context.d.ts +170 -0
  375. package/dist/server/cookie-context.d.ts.map +1 -0
  376. package/dist/server/cookie-parsing.d.ts +51 -0
  377. package/dist/server/cookie-parsing.d.ts.map +1 -0
  378. package/dist/server/csrf.d.ts +3 -2
  379. package/dist/server/csrf.d.ts.map +1 -1
  380. package/dist/server/default-logger.d.ts +22 -0
  381. package/dist/server/default-logger.d.ts.map +1 -0
  382. package/dist/server/deny-boundary.d.ts +115 -0
  383. package/dist/server/deny-boundary.d.ts.map +1 -0
  384. package/dist/server/deny-renderer.d.ts +2 -2
  385. package/dist/server/deny-renderer.d.ts.map +1 -1
  386. package/dist/server/dev-source-map.d.ts +22 -0
  387. package/dist/server/dev-source-map.d.ts.map +1 -0
  388. package/dist/server/early-hints-sender.d.ts.map +1 -1
  389. package/dist/server/early-hints.d.ts +13 -11
  390. package/dist/server/early-hints.d.ts.map +1 -1
  391. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  392. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  393. package/dist/server/fallback-error.d.ts +12 -7
  394. package/dist/server/fallback-error.d.ts.map +1 -1
  395. package/dist/server/flight-injection-state.d.ts +66 -0
  396. package/dist/server/flight-injection-state.d.ts.map +1 -0
  397. package/dist/server/flight-scripts.d.ts +42 -0
  398. package/dist/server/flight-scripts.d.ts.map +1 -0
  399. package/dist/server/form-data.d.ts +29 -0
  400. package/dist/server/form-data.d.ts.map +1 -1
  401. package/dist/server/html-injector-core.d.ts +221 -0
  402. package/dist/server/html-injector-core.d.ts.map +1 -0
  403. package/dist/server/html-injectors.d.ts +81 -41
  404. package/dist/server/html-injectors.d.ts.map +1 -1
  405. package/dist/server/index.d.ts +10 -46
  406. package/dist/server/index.d.ts.map +1 -1
  407. package/dist/server/index.js +170 -2911
  408. package/dist/server/index.js.map +1 -1
  409. package/dist/server/internal.d.ts +44 -0
  410. package/dist/server/internal.d.ts.map +1 -0
  411. package/dist/server/internal.js +3015 -0
  412. package/dist/server/internal.js.map +1 -0
  413. package/dist/server/logger.d.ts +39 -7
  414. package/dist/server/logger.d.ts.map +1 -1
  415. package/dist/server/metadata-routes.d.ts +23 -7
  416. package/dist/server/metadata-routes.d.ts.map +1 -1
  417. package/dist/server/middleware-runner.d.ts +36 -4
  418. package/dist/server/middleware-runner.d.ts.map +1 -1
  419. package/dist/server/node-stream-transforms.d.ts +119 -0
  420. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  421. package/dist/server/param-coercion.d.ts +54 -0
  422. package/dist/server/param-coercion.d.ts.map +1 -0
  423. package/dist/server/pipeline-helpers.d.ts +95 -0
  424. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  425. package/dist/server/pipeline-interception.d.ts +1 -1
  426. package/dist/server/pipeline-interception.d.ts.map +1 -1
  427. package/dist/server/pipeline-metadata.d.ts +6 -0
  428. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  429. package/dist/server/pipeline-outcome.d.ts +49 -0
  430. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  431. package/dist/server/pipeline-phases.d.ts +56 -0
  432. package/dist/server/pipeline-phases.d.ts.map +1 -0
  433. package/dist/server/pipeline.d.ts +122 -19
  434. package/dist/server/pipeline.d.ts.map +1 -1
  435. package/dist/server/port-resolution.d.ts +117 -0
  436. package/dist/server/port-resolution.d.ts.map +1 -0
  437. package/dist/server/primitives.d.ts +75 -31
  438. package/dist/server/primitives.d.ts.map +1 -1
  439. package/dist/server/render-timeout.d.ts +51 -0
  440. package/dist/server/render-timeout.d.ts.map +1 -0
  441. package/dist/server/render-utils.d.ts +25 -0
  442. package/dist/server/render-utils.d.ts.map +1 -0
  443. package/dist/server/request-context.d.ts +62 -107
  444. package/dist/server/request-context.d.ts.map +1 -1
  445. package/dist/server/route-element-builder.d.ts +30 -18
  446. package/dist/server/route-element-builder.d.ts.map +1 -1
  447. package/dist/server/route-handler.d.ts.map +1 -1
  448. package/dist/server/route-matcher.d.ts +25 -36
  449. package/dist/server/route-matcher.d.ts.map +1 -1
  450. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  451. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  452. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  453. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  454. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  455. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  456. package/dist/server/rsc-entry/helpers.d.ts +51 -23
  457. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  458. package/dist/server/rsc-entry/index.d.ts +19 -8
  459. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  460. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  461. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  462. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  463. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  464. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  465. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  466. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  467. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  468. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  469. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  470. package/dist/server/rsc-entry/ssr-renderer.d.ts +34 -4
  471. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  472. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  473. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  474. package/dist/server/safe-load.d.ts +46 -0
  475. package/dist/server/safe-load.d.ts.map +1 -0
  476. package/dist/server/sensitive-fields.d.ts +74 -0
  477. package/dist/server/sensitive-fields.d.ts.map +1 -0
  478. package/dist/server/sitemap-generator.d.ts +129 -0
  479. package/dist/server/sitemap-generator.d.ts.map +1 -0
  480. package/dist/server/sitemap-handler.d.ts +22 -0
  481. package/dist/server/sitemap-handler.d.ts.map +1 -0
  482. package/dist/server/slot-resolver.d.ts +7 -5
  483. package/dist/server/slot-resolver.d.ts.map +1 -1
  484. package/dist/server/ssr-bridge-types.d.ts +121 -0
  485. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  486. package/dist/server/ssr-entry.d.ts +2 -43
  487. package/dist/server/ssr-entry.d.ts.map +1 -1
  488. package/dist/server/ssr-render.d.ts +64 -21
  489. package/dist/server/ssr-render.d.ts.map +1 -1
  490. package/dist/server/ssr-wrappers.d.ts +50 -0
  491. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  492. package/dist/server/state-tree-diff.d.ts +12 -5
  493. package/dist/server/state-tree-diff.d.ts.map +1 -1
  494. package/dist/server/status-code-resolver.d.ts +22 -11
  495. package/dist/server/status-code-resolver.d.ts.map +1 -1
  496. package/dist/server/stream-utils.d.ts +36 -0
  497. package/dist/server/stream-utils.d.ts.map +1 -0
  498. package/dist/server/tracing.d.ts +7 -6
  499. package/dist/server/tracing.d.ts.map +1 -1
  500. package/dist/server/tree-builder.d.ts +62 -30
  501. package/dist/server/tree-builder.d.ts.map +1 -1
  502. package/dist/server/tree-match.d.ts +49 -0
  503. package/dist/server/tree-match.d.ts.map +1 -0
  504. package/dist/server/types.d.ts +71 -6
  505. package/dist/server/types.d.ts.map +1 -1
  506. package/dist/server/utils/escape-html.d.ts +14 -0
  507. package/dist/server/utils/escape-html.d.ts.map +1 -0
  508. package/dist/server/utils/mdx-file.d.ts +15 -0
  509. package/dist/server/utils/mdx-file.d.ts.map +1 -0
  510. package/dist/server/version-skew.d.ts +61 -0
  511. package/dist/server/version-skew.d.ts.map +1 -0
  512. package/dist/shared/head-header.d.ts +54 -0
  513. package/dist/shared/head-header.d.ts.map +1 -0
  514. package/dist/shared/href-validation.d.ts +49 -0
  515. package/dist/shared/href-validation.d.ts.map +1 -0
  516. package/dist/shared/merge-search-params.d.ts +22 -0
  517. package/dist/shared/merge-search-params.d.ts.map +1 -0
  518. package/dist/shared/redirect-type.d.ts +17 -0
  519. package/dist/shared/redirect-type.d.ts.map +1 -0
  520. package/dist/shims/font-google.d.ts +1 -1
  521. package/dist/shims/font-google.d.ts.map +1 -1
  522. package/dist/shims/font-google.js +42 -0
  523. package/dist/shims/font-google.js.map +1 -0
  524. package/dist/shims/font-local.d.ts +26 -0
  525. package/dist/shims/font-local.d.ts.map +1 -0
  526. package/dist/shims/font-local.js +20 -0
  527. package/dist/shims/font-local.js.map +1 -0
  528. package/dist/shims/headers.d.ts +53 -1
  529. package/dist/shims/headers.d.ts.map +1 -1
  530. package/dist/shims/image.d.ts +16 -16
  531. package/dist/shims/navigation-client.d.ts +35 -11
  532. package/dist/shims/navigation-client.d.ts.map +1 -1
  533. package/dist/shims/navigation.d.ts +11 -5
  534. package/dist/shims/navigation.d.ts.map +1 -1
  535. package/dist/utils/state-machine.d.ts +80 -0
  536. package/dist/utils/state-machine.d.ts.map +1 -0
  537. package/package.json +63 -24
  538. package/src/adapters/build-output-helper.ts +139 -0
  539. package/src/adapters/cloudflare-dev.ts +177 -0
  540. package/src/adapters/cloudflare-kv-cache.ts +179 -0
  541. package/src/adapters/cloudflare.ts +356 -116
  542. package/src/adapters/compress-module.ts +27 -92
  543. package/src/adapters/nitro.ts +155 -99
  544. package/src/adapters/raw-imports.d.ts +5 -0
  545. package/src/adapters/shared.ts +40 -0
  546. package/src/adapters/wrangler.d.ts +7 -0
  547. package/src/cache/cache-api.ts +47 -0
  548. package/src/cache/handler-store.ts +68 -0
  549. package/src/cache/index.ts +84 -18
  550. package/src/cache/invalidation-epoch.ts +93 -0
  551. package/src/cache/redis-handler.ts +110 -15
  552. package/src/cache/singleflight.ts +62 -4
  553. package/src/cache/sizeof.ts +33 -0
  554. package/src/cache/stable-stringify.ts +65 -2
  555. package/src/cache/timber-cache.ts +132 -36
  556. package/src/cli-schema-sync.ts +388 -0
  557. package/src/cli.ts +98 -34
  558. package/src/client/browser-dev.ts +153 -1
  559. package/src/client/browser-entry/action-dispatch.ts +119 -0
  560. package/src/client/browser-entry/hmr.ts +70 -0
  561. package/src/client/browser-entry/hydrate.ts +187 -0
  562. package/src/client/browser-entry/index.ts +111 -0
  563. package/src/client/browser-entry/post-hydration.ts +104 -0
  564. package/src/client/browser-entry/router-init.ts +292 -0
  565. package/src/client/browser-entry/rsc-stream.ts +157 -0
  566. package/src/client/browser-entry/scroll.ts +50 -0
  567. package/src/client/error-boundary.tsx +127 -22
  568. package/src/client/error-reconstituter.tsx +79 -0
  569. package/src/client/form.tsx +31 -32
  570. package/src/client/history.ts +11 -3
  571. package/src/client/index.ts +67 -45
  572. package/src/client/internal.ts +58 -0
  573. package/src/client/link.tsx +346 -150
  574. package/src/client/navigation-api-types.ts +112 -0
  575. package/src/client/navigation-api.ts +347 -0
  576. package/src/client/navigation-context.ts +15 -7
  577. package/src/client/navigation-root.tsx +355 -0
  578. package/src/client/nuqs-adapter.tsx +16 -3
  579. package/src/client/router-ref.ts +1 -1
  580. package/src/client/router.ts +490 -140
  581. package/src/client/rsc-fetch.ts +220 -17
  582. package/src/client/segment-cache.ts +6 -3
  583. package/src/client/segment-outlet.tsx +77 -0
  584. package/src/client/segment-update-context.ts +42 -0
  585. package/src/client/shallow-url.ts +22 -0
  586. package/src/client/ssr-data.ts +13 -5
  587. package/src/client/state.ts +2 -2
  588. package/src/client/top-loader.tsx +11 -9
  589. package/src/client/use-cookie.ts +31 -2
  590. package/src/client/use-link-status.ts +7 -7
  591. package/src/client/use-pathname.ts +1 -0
  592. package/src/client/use-pending-navigation.ts +40 -0
  593. package/src/client/use-query-states.ts +9 -3
  594. package/src/client/use-router.ts +4 -1
  595. package/src/client/use-search-params.ts +31 -44
  596. package/src/client/{use-params.ts → use-segment-params.ts} +9 -6
  597. package/src/codec.ts +147 -0
  598. package/src/config-types.ts +292 -0
  599. package/src/config-validation.ts +311 -0
  600. package/src/content/index.ts +5 -13
  601. package/src/cookies/define-cookie.ts +217 -53
  602. package/src/cookies/index.ts +12 -1
  603. package/src/cookies/json-cookie.ts +105 -0
  604. package/src/cookies/validation.ts +192 -0
  605. package/src/dev-tools/404-page.ts +286 -0
  606. package/src/dev-tools/browser-logs.ts +291 -0
  607. package/src/dev-tools/dev-page-shell.ts +260 -0
  608. package/src/dev-tools/error-page.ts +331 -0
  609. package/src/dev-tools/holding-server.ts +187 -0
  610. package/src/dev-tools/hydration-overlay.ts +158 -0
  611. package/src/dev-tools/index.ts +83 -0
  612. package/src/dev-tools/instrumentation.ts +213 -0
  613. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  614. package/src/dev-tools/overlay.ts +469 -0
  615. package/src/dev-tools/stack-classifier.ts +75 -0
  616. package/src/dev-tools/terminal.ts +183 -0
  617. package/src/fonts/ast-walk.ts +235 -0
  618. package/src/fonts/ast.ts +477 -126
  619. package/src/fonts/bundle.ts +138 -0
  620. package/src/fonts/dev-middleware.ts +85 -0
  621. package/src/fonts/fallbacks.ts +0 -23
  622. package/src/fonts/google.ts +7 -3
  623. package/src/fonts/local.ts +9 -8
  624. package/src/fonts/paths.ts +58 -0
  625. package/src/fonts/pipeline.ts +316 -0
  626. package/src/fonts/transform.ts +344 -0
  627. package/src/fonts/types.ts +52 -1
  628. package/src/fonts/virtual-modules.ts +179 -0
  629. package/src/index.ts +417 -346
  630. package/src/params/codec-registry.ts +34 -0
  631. package/src/params/define-schema.ts +115 -0
  632. package/src/params/index.ts +17 -0
  633. package/src/params/resolve-schema.ts +84 -0
  634. package/src/plugin-context.ts +325 -0
  635. package/src/plugins/adapter-build.ts +98 -4
  636. package/src/plugins/build-manifest.ts +168 -23
  637. package/src/plugins/build-report.ts +16 -25
  638. package/src/plugins/cache.ts +285 -0
  639. package/src/plugins/client-chunks.ts +113 -0
  640. package/src/plugins/cloudflare-wasm.ts +141 -0
  641. package/src/plugins/content.ts +1 -1
  642. package/src/plugins/dev-server.ts +264 -46
  643. package/src/plugins/entries.ts +110 -8
  644. package/src/plugins/fonts.ts +170 -663
  645. package/src/plugins/mdx.ts +47 -10
  646. package/src/plugins/routing.ts +237 -241
  647. package/src/plugins/server-bundle.ts +85 -12
  648. package/src/plugins/shims.ts +207 -64
  649. package/src/plugins/static-build.ts +15 -89
  650. package/src/routing/codegen-shared.ts +115 -0
  651. package/src/routing/codegen-types.ts +65 -0
  652. package/src/routing/codegen.ts +380 -178
  653. package/src/routing/convention-lint.ts +358 -0
  654. package/src/routing/file-cache.ts +23 -0
  655. package/src/routing/index.ts +10 -1
  656. package/src/routing/interception.ts +3 -22
  657. package/src/routing/link-codegen.ts +310 -0
  658. package/src/routing/manifest-codegen.ts +290 -0
  659. package/src/routing/scanner.ts +248 -188
  660. package/src/routing/schema-validation.ts +149 -0
  661. package/src/routing/segment-classify.ts +188 -0
  662. package/src/routing/segment-codegen.ts +98 -0
  663. package/src/routing/types.ts +78 -25
  664. package/src/routing/walkers.ts +90 -0
  665. package/src/rsc-runtime/rsc.ts +2 -0
  666. package/src/rsc-runtime/ssr.ts +50 -0
  667. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  668. package/src/schema-bridge.ts +252 -0
  669. package/src/search-params/define.ts +570 -0
  670. package/src/search-params/index.ts +14 -20
  671. package/src/search-params/registry.ts +2 -2
  672. package/src/search-params/wrappers.ts +110 -0
  673. package/src/segment-params/define.ts +249 -0
  674. package/src/segment-params/index.ts +9 -0
  675. package/src/server/access-gate.tsx +84 -34
  676. package/src/server/action-client.ts +119 -28
  677. package/src/server/action-encryption.ts +144 -0
  678. package/src/server/action-handler.ts +122 -16
  679. package/src/server/actions.ts +39 -53
  680. package/src/server/als-registry.ts +108 -20
  681. package/src/server/asset-headers.ts +8 -34
  682. package/src/server/body-limits.ts +10 -2
  683. package/src/server/build-manifest.ts +13 -56
  684. package/src/server/canonicalize.ts +6 -3
  685. package/src/server/coalesce-tick.ts +75 -0
  686. package/src/server/compress.ts +34 -7
  687. package/src/server/cookie-context.ts +484 -0
  688. package/src/server/cookie-parsing.ts +147 -0
  689. package/src/server/csrf.ts +39 -6
  690. package/src/server/default-logger.ts +99 -0
  691. package/src/server/deny-boundary.ts +311 -0
  692. package/src/server/deny-renderer.ts +80 -64
  693. package/src/server/dev-source-map.ts +31 -0
  694. package/src/server/early-hints-sender.ts +3 -2
  695. package/src/server/early-hints.ts +37 -27
  696. package/src/server/error-boundary-wrapper.ts +61 -22
  697. package/src/server/fallback-error.ts +79 -102
  698. package/src/server/flight-injection-state.ts +113 -0
  699. package/src/server/flight-scripts.ts +62 -0
  700. package/src/server/form-data.ts +101 -5
  701. package/src/server/html-injector-core.ts +437 -0
  702. package/src/server/html-injectors.ts +256 -251
  703. package/src/server/index.ts +29 -183
  704. package/src/server/internal.ts +165 -0
  705. package/src/server/logger.ts +67 -36
  706. package/src/server/metadata-routes.ts +44 -19
  707. package/src/server/middleware-runner.ts +75 -4
  708. package/src/server/node-stream-transforms.ts +331 -0
  709. package/src/server/param-coercion.ts +206 -0
  710. package/src/server/pipeline-helpers.ts +204 -0
  711. package/src/server/pipeline-interception.ts +32 -18
  712. package/src/server/pipeline-metadata.ts +13 -0
  713. package/src/server/pipeline-outcome.ts +197 -0
  714. package/src/server/pipeline-phases.ts +527 -0
  715. package/src/server/pipeline.ts +213 -382
  716. package/src/server/port-resolution.ts +215 -0
  717. package/src/server/primitives.ts +126 -63
  718. package/src/server/render-timeout.ts +108 -0
  719. package/src/server/render-utils.ts +31 -0
  720. package/src/server/request-context.ts +168 -337
  721. package/src/server/route-element-builder.ts +481 -222
  722. package/src/server/route-handler.ts +31 -4
  723. package/src/server/route-matcher.ts +144 -277
  724. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  725. package/src/server/rsc-entry/api-handler.ts +69 -32
  726. package/src/server/rsc-entry/error-renderer.ts +306 -89
  727. package/src/server/rsc-entry/helpers.ts +160 -59
  728. package/src/server/rsc-entry/index.ts +299 -329
  729. package/src/server/rsc-entry/render-route.ts +311 -0
  730. package/src/server/rsc-entry/revalidate-renderer.ts +344 -0
  731. package/src/server/rsc-entry/rsc-payload.ts +71 -26
  732. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  733. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  734. package/src/server/rsc-entry/ssr-renderer.ts +273 -43
  735. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  736. package/src/server/safe-load.ts +60 -0
  737. package/src/server/sensitive-fields.ts +230 -0
  738. package/src/server/sitemap-generator.ts +338 -0
  739. package/src/server/sitemap-handler.ts +148 -0
  740. package/src/server/slot-resolver.ts +258 -257
  741. package/src/server/ssr-bridge-types.ts +124 -0
  742. package/src/server/ssr-entry.ts +206 -78
  743. package/src/server/ssr-render.ts +345 -82
  744. package/src/server/ssr-wrappers.tsx +141 -0
  745. package/src/server/state-tree-diff.ts +30 -23
  746. package/src/server/status-code-resolver.ts +115 -130
  747. package/src/server/stream-utils.ts +213 -0
  748. package/src/server/tracing.ts +38 -11
  749. package/src/server/tree-builder.ts +204 -90
  750. package/src/server/tree-match.ts +220 -0
  751. package/src/server/types.ts +78 -9
  752. package/src/server/utils/escape-html.ts +20 -0
  753. package/src/server/utils/mdx-file.ts +22 -0
  754. package/src/server/version-skew.ts +104 -0
  755. package/src/shared/head-header.ts +69 -0
  756. package/src/shared/href-validation.ts +159 -0
  757. package/src/shared/merge-search-params.ts +55 -0
  758. package/src/shared/redirect-type.ts +17 -0
  759. package/src/shims/font-google.ts +1 -1
  760. package/src/shims/font-local.ts +34 -0
  761. package/src/shims/headers.ts +122 -1
  762. package/src/shims/navigation-client.ts +51 -29
  763. package/src/shims/navigation.ts +14 -7
  764. package/src/utils/state-machine.ts +111 -0
  765. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  766. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  767. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  768. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  769. package/dist/_chunks/format-RyoGQL74.js +0 -164
  770. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  771. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  772. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  773. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  774. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  775. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  776. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  777. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  778. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  779. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  780. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  781. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  782. package/dist/cache/register-cached-function.d.ts +0 -17
  783. package/dist/cache/register-cached-function.d.ts.map +0 -1
  784. package/dist/client/browser-entry.d.ts +0 -21
  785. package/dist/client/browser-entry.d.ts.map +0 -1
  786. package/dist/client/link-status-provider.d.ts +0 -11
  787. package/dist/client/link-status-provider.d.ts.map +0 -1
  788. package/dist/client/segment-merger.d.ts +0 -119
  789. package/dist/client/segment-merger.d.ts.map +0 -1
  790. package/dist/client/stale-reload.d.ts +0 -44
  791. package/dist/client/stale-reload.d.ts.map +0 -1
  792. package/dist/client/transition-root.d.ts +0 -74
  793. package/dist/client/transition-root.d.ts.map +0 -1
  794. package/dist/client/use-navigation-pending.d.ts +0 -26
  795. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  796. package/dist/client/use-params.d.ts.map +0 -1
  797. package/dist/plugins/cache-transform.d.ts +0 -36
  798. package/dist/plugins/cache-transform.d.ts.map +0 -1
  799. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  800. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  801. package/dist/plugins/dev-logs.d.ts.map +0 -1
  802. package/dist/plugins/dynamic-transform.d.ts +0 -72
  803. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  804. package/dist/plugins/server-action-exports.d.ts +0 -26
  805. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  806. package/dist/routing/status-file-lint.d.ts +0 -33
  807. package/dist/routing/status-file-lint.d.ts.map +0 -1
  808. package/dist/search-params/analyze.d.ts +0 -54
  809. package/dist/search-params/analyze.d.ts.map +0 -1
  810. package/dist/search-params/builtin-codecs.d.ts +0 -105
  811. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  812. package/dist/search-params/codecs.d.ts +0 -53
  813. package/dist/search-params/codecs.d.ts.map +0 -1
  814. package/dist/search-params/create.d.ts +0 -106
  815. package/dist/search-params/create.d.ts.map +0 -1
  816. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  817. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  818. package/dist/server/dev-logger.d.ts.map +0 -1
  819. package/dist/server/dev-span-processor.d.ts +0 -29
  820. package/dist/server/dev-span-processor.d.ts.map +0 -1
  821. package/dist/server/dev-warnings.d.ts +0 -129
  822. package/dist/server/dev-warnings.d.ts.map +0 -1
  823. package/dist/server/flush.d.ts +0 -74
  824. package/dist/server/flush.d.ts.map +0 -1
  825. package/dist/server/manifest-status-resolver.d.ts +0 -58
  826. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  827. package/dist/server/prerender.d.ts +0 -77
  828. package/dist/server/prerender.d.ts.map +0 -1
  829. package/dist/utils/directive-parser.d.ts +0 -70
  830. package/dist/utils/directive-parser.d.ts.map +0 -1
  831. package/src/cache/register-cached-function.ts +0 -103
  832. package/src/client/browser-entry.ts +0 -678
  833. package/src/client/link-status-provider.tsx +0 -30
  834. package/src/client/segment-merger.ts +0 -339
  835. package/src/client/stale-reload.ts +0 -87
  836. package/src/client/transition-root.tsx +0 -166
  837. package/src/client/use-navigation-pending.ts +0 -38
  838. package/src/plugins/cache-transform.ts +0 -199
  839. package/src/plugins/dev-error-overlay.ts +0 -230
  840. package/src/plugins/dynamic-transform.ts +0 -161
  841. package/src/plugins/server-action-exports.ts +0 -220
  842. package/src/routing/status-file-lint.ts +0 -112
  843. package/src/search-params/analyze.ts +0 -192
  844. package/src/search-params/builtin-codecs.ts +0 -228
  845. package/src/search-params/codecs.ts +0 -153
  846. package/src/search-params/create.ts +0 -321
  847. package/src/server/dev-fetch-instrumentation.ts +0 -96
  848. package/src/server/dev-span-processor.ts +0 -78
  849. package/src/server/dev-warnings.ts +0 -283
  850. package/src/server/flush.ts +0 -182
  851. package/src/server/manifest-status-resolver.ts +0 -215
  852. package/src/server/prerender.ts +0 -139
  853. package/src/utils/directive-parser.ts +0 -529
  854. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -3,36 +3,39 @@
3
3
  // Primary deployment target. Generates a Workers-compatible entry point
4
4
  // and wrangler.jsonc configuration. See design/11-platform.md §"Cloudflare Workers".
5
5
 
6
- import { writeFile, mkdir, cp } from 'node:fs/promises';
6
+ import { writeFile } from 'node:fs/promises';
7
7
  import { execFile } from 'node:child_process';
8
8
  import { join, relative } from 'node:path';
9
9
  import { AsyncLocalStorage } from 'node:async_hooks';
10
10
  import type { TimberPlatformAdapter, TimberConfig } from './types';
11
- // Inlined from server/asset-headers.ts — adapters are loaded by Node at
12
- // Vite startup time, before Vite's module resolver is available, so cross-
13
- // directory .ts imports don't resolve.
14
- const IMMUTABLE_CACHE = 'public, max-age=31536000, immutable';
15
- const STATIC_CACHE = 'public, max-age=3600, must-revalidate';
16
-
17
- function generateHeadersFile(): string {
18
- return `# Auto-generated by @timber-js/app — static asset cache headers.
19
- # See design/25-production-deployments.md §"CDN / Edge Cache"
20
-
21
- /assets/*
22
- Cache-Control: ${IMMUTABLE_CACHE}
23
-
24
- /*
25
- Cache-Control: ${STATIC_CACHE}
26
- `;
27
- }
11
+ import { runSharedBuildSteps } from './build-output-helper.js';
28
12
 
29
13
  // ─── Bindings passthrough ─────────────────────────────────────────────────
30
14
  // ALS stores the env object per-request so server components and middleware
31
15
  // can access KV, D1, DO, R2, Queues, etc. via getCloudflareBindings().
32
16
  // No global fallback — if called outside a request, it throws.
33
17
  // See design/11-platform.md §"Platform Target" and design/25-production-deployments.md.
34
-
35
- const bindingsAls = new AsyncLocalStorage<Record<string, unknown>>();
18
+ //
19
+ // The ALS is stored on globalThis via Symbol.for so it survives Vite's
20
+ // module instance split in dev mode. The Vite host process (where
21
+ // cloudflareDevBindings → runWithBindings runs) and the RSC module runner
22
+ // (where getCloudflareBindings runs) load separate instances of this file,
23
+ // each with their own module-level variables. globalThis + Symbol.for
24
+ // ensures both share the same ALS — same pattern React uses for
25
+ // Symbol.for('react.element').
26
+
27
+ const BINDINGS_ALS_KEY = Symbol.for('timber:cf-bindings-als');
28
+
29
+ function getBindingsAls(): AsyncLocalStorage<Record<string, unknown>> {
30
+ let als = (globalThis as any)[BINDINGS_ALS_KEY] as
31
+ | AsyncLocalStorage<Record<string, unknown>>
32
+ | undefined;
33
+ if (!als) {
34
+ als = new AsyncLocalStorage<Record<string, unknown>>();
35
+ (globalThis as any)[BINDINGS_ALS_KEY] = als;
36
+ }
37
+ return als;
38
+ }
36
39
 
37
40
  /**
38
41
  * Get Cloudflare Worker bindings for the current request.
@@ -55,10 +58,8 @@ const bindingsAls = new AsyncLocalStorage<Record<string, unknown>>();
55
58
  * }
56
59
  * ```
57
60
  */
58
- export function getCloudflareBindings<
59
- T extends Record<string, unknown> = Record<string, unknown>,
60
- >(): T {
61
- const env = bindingsAls.getStore();
61
+ export function getCloudflareBindings<T = Record<string, unknown>>(): T {
62
+ const env = getBindingsAls().getStore();
62
63
  if (!env) {
63
64
  throw new Error(
64
65
  'getCloudflareBindings() called outside a Cloudflare Workers request context. ' +
@@ -71,10 +72,88 @@ export function getCloudflareBindings<
71
72
 
72
73
  /**
73
74
  * Run a function with Cloudflare bindings available via getCloudflareBindings().
74
- * @internal Used by wrapWithExecutionContext.
75
+ * @internal Used by cloudflareDevBindings() to wrap dev-server requests.
75
76
  */
76
77
  export function runWithBindings<T>(env: Record<string, unknown>, fn: () => T): T {
77
- return bindingsAls.run(env, fn);
78
+ return getBindingsAls().run(env, fn);
79
+ }
80
+
81
+ // ─── Binding configuration types ──────────────────────────────────────────────
82
+ // Declarative binding config that maps to wrangler.jsonc binding sections.
83
+ // See design/35-cloudflare-primitives.md §"Binding Declarations in Adapter Config".
84
+
85
+ /** KV namespace binding. `id` defaults to `''` (filled in by wrangler or dashboard). */
86
+ export interface CloudflareKVBinding {
87
+ name: string;
88
+ id?: string;
89
+ }
90
+
91
+ /** D1 database binding. `database_id` is required (from Cloudflare dashboard). */
92
+ export interface CloudflareD1Binding {
93
+ name: string;
94
+ database_id: string;
95
+ }
96
+
97
+ /** R2 bucket binding. `bucket_name` must match the bucket created in Cloudflare. */
98
+ export interface CloudflareR2Binding {
99
+ name: string;
100
+ bucket_name: string;
101
+ }
102
+
103
+ /** Queue producer binding. `queue` is the queue name in Cloudflare. */
104
+ export interface CloudflareQueueProducer {
105
+ name: string;
106
+ queue: string;
107
+ }
108
+
109
+ /** Queue consumer declaration. Attached to the worker, not a binding name. */
110
+ export interface CloudflareQueueConsumer {
111
+ queue: string;
112
+ max_batch_size?: number;
113
+ max_retries?: number;
114
+ dead_letter_queue?: string;
115
+ }
116
+
117
+ /** Durable Object binding. `script_name` is for external DO references. */
118
+ export interface CloudflareDurableObjectBinding {
119
+ name: string;
120
+ class_name: string;
121
+ script_name?: string;
122
+ }
123
+
124
+ /**
125
+ * Declarative Cloudflare bindings configuration.
126
+ *
127
+ * These are converted to the appropriate wrangler.jsonc sections
128
+ * (`kv_namespaces`, `d1_databases`, `r2_buckets`, `queues`, `durable_objects`).
129
+ * The `wrangler` escape hatch overrides any generated binding sections
130
+ * if there's a conflict.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * cloudflare({
135
+ * bindings: {
136
+ * kv: [{ name: 'TIMBER_CACHE' }],
137
+ * d1: [{ name: 'MY_DB', database_id: 'xxxx' }],
138
+ * r2: [{ name: 'MY_BUCKET', bucket_name: 'my-bucket' }],
139
+ * queues: {
140
+ * producers: [{ name: 'EMAIL_QUEUE', queue: 'email-queue' }],
141
+ * consumers: [{ queue: 'email-queue', max_batch_size: 10 }],
142
+ * },
143
+ * durableObjects: [{ name: 'MY_DO', class_name: 'MyDurableObject' }],
144
+ * },
145
+ * })
146
+ * ```
147
+ */
148
+ export interface CloudflareBindings {
149
+ kv?: CloudflareKVBinding[];
150
+ d1?: CloudflareD1Binding[];
151
+ r2?: CloudflareR2Binding[];
152
+ queues?: {
153
+ producers?: CloudflareQueueProducer[];
154
+ consumers?: CloudflareQueueConsumer[];
155
+ };
156
+ durableObjects?: CloudflareDurableObjectBinding[];
78
157
  }
79
158
 
80
159
  /** Options for the Cloudflare Workers adapter. */
@@ -91,11 +170,42 @@ export interface CloudflareAdapterOptions {
91
170
  */
92
171
  compatibilityFlags?: string[];
93
172
 
173
+ /**
174
+ * Declarative Cloudflare bindings. Generates the appropriate
175
+ * `kv_namespaces`, `d1_databases`, `r2_buckets`, `queues`, and
176
+ * `durable_objects` sections in wrangler.jsonc.
177
+ *
178
+ * If both `bindings` and `wrangler` specify the same section,
179
+ * `wrangler` wins (it's the escape hatch).
180
+ */
181
+ bindings?: CloudflareBindings;
182
+
94
183
  /**
95
184
  * Custom wrangler.jsonc fields to merge.
96
- * Overrides generated values.
185
+ * Overrides generated values (including bindings-generated sections).
97
186
  */
98
187
  wrangler?: Record<string, unknown>;
188
+
189
+ /**
190
+ * Path to a module that exports additional Worker handlers (queue, scheduled, email, etc.).
191
+ * The module is imported in the generated `_worker.js` and its named exports are
192
+ * spread into the default export alongside `fetch`.
193
+ *
194
+ * The module receives `(batch/event, env, ctx)` — standard Cloudflare handler signatures.
195
+ * It does NOT have access to timber's request pipeline (no ALS, no getCloudflareBindings).
196
+ * Use `env` directly for bindings.
197
+ *
198
+ * @example
199
+ * ```ts
200
+ * // timber.config.ts
201
+ * adapter: cloudflare({ workerHandlers: './src/worker-handlers.ts' })
202
+ *
203
+ * // src/worker-handlers.ts
204
+ * export async function queue(batch, env) { ... }
205
+ * export async function scheduled(controller, env, ctx) { ... }
206
+ * ```
207
+ */
208
+ workerHandlers?: string;
99
209
  }
100
210
 
101
211
  /**
@@ -117,43 +227,45 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
117
227
 
118
228
  async buildOutput(config: TimberConfig, buildDir: string) {
119
229
  const outDir = join(buildDir, 'cloudflare');
120
- await mkdir(outDir, { recursive: true });
121
-
122
- // Copy client assets to static output.
123
- // When client JavaScript is disabled, skip .js files — only CSS,
124
- // fonts, images, and other static assets are needed.
125
- const clientDir = join(buildDir, 'client');
126
- const staticDir = join(outDir, 'static');
127
- await mkdir(staticDir, { recursive: true });
128
- await cp(clientDir, staticDir, {
129
- recursive: true,
130
- filter: config.clientJavascriptDisabled ? (src: string) => !src.endsWith('.js') : undefined,
131
- }).catch(() => {
132
- // Client dir may not exist when client JavaScript is disabled
230
+
231
+ // Steps 1–5: shared across all adapters (mkdir, copy client/rsc/ssr,
232
+ // write _headers, write manifest-init).
233
+ await runSharedBuildSteps({
234
+ config,
235
+ buildDir,
236
+ outDir,
237
+ publicDirName: 'static',
133
238
  });
134
239
 
135
- // Write _headers file for static asset cache control.
136
- // Cloudflare Workers Static Assets reads this to set Cache-Control
137
- // headers on responses. Hashed assets get immutable; others get 1h.
138
- await writeFile(join(staticDir, '_headers'), generateHeadersFile());
139
-
140
- // Copy server bundles (rsc + ssr) into the output directory.
141
- // These are already fully bundled by Vite with resolve.noExternal: true.
142
- const rscDir = join(buildDir, 'rsc');
143
- const ssrDir = join(buildDir, 'ssr');
144
- await cp(rscDir, join(outDir, 'rsc'), { recursive: true });
145
- await cp(ssrDir, join(outDir, 'ssr'), { recursive: true });
146
-
147
- // Write the build manifest init module (if manifest data was produced).
148
- // This must be imported before the RSC handler so the global is set
149
- // when virtual:timber-build-manifest evaluates.
150
- if (config.manifestInit) {
151
- await writeFile(join(outDir, '_timber-manifest-init.js'), config.manifestInit);
240
+ // Compile optional worker handlers (queue, scheduled, etc.)
241
+ // Uses Vite's build API to bundle the TypeScript source into ESM.
242
+ let hasWorkerHandlers = false;
243
+ if (options.workerHandlers) {
244
+ const handlersEntry = join(process.cwd(), options.workerHandlers);
245
+ const { build: viteBuild } = await import('vite');
246
+ await viteBuild({
247
+ configFile: false,
248
+ logLevel: 'info',
249
+ build: {
250
+ lib: {
251
+ entry: handlersEntry,
252
+ formats: ['es'],
253
+ fileName: () => '_worker-handlers.js',
254
+ },
255
+ outDir,
256
+ emptyOutDir: false,
257
+ minify: false,
258
+ rollupOptions: {
259
+ external: [/^node:/],
260
+ },
261
+ },
262
+ });
263
+ hasWorkerHandlers = true;
152
264
  }
153
265
 
154
266
  // Generate the Workers entry point
155
267
  const hasManifestInit = !!config.manifestInit;
156
- const workerEntry = generateWorkerEntry(outDir, outDir, hasManifestInit);
268
+ const workerEntry = generateWorkerEntry(outDir, outDir, hasManifestInit, hasWorkerHandlers);
157
269
  await writeFile(join(outDir, '_worker.js'), workerEntry);
158
270
 
159
271
  // Generate wrangler.jsonc
@@ -166,45 +278,11 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
166
278
  await spawnPreviewProcess(cmd.command, cmd.args, cmd.cwd);
167
279
  },
168
280
 
169
- // Default no-op. wrapWithExecutionContext() replaces this per-request
170
- // with a function that routes to ctx.waitUntil().
171
- waitUntil(_promise: Promise<unknown>) {},
172
- };
173
- }
174
-
175
- /**
176
- * Wrap a timber request handler to bind the Cloudflare execution context
177
- * for `waitUntil()` support and env bindings passthrough.
178
- * Called from the generated worker entry.
179
- *
180
- * This function:
181
- * 1. Binds `adapter.waitUntil()` to `ctx.waitUntil()` per-request
182
- * 2. Makes `env` accessible via `getCloudflareBindings()` per-request via ALS
183
- */
184
- export function wrapWithExecutionContext(
185
- adapter: TimberPlatformAdapter,
186
- handler: (req: Request) => Promise<Response>
187
- ): ExportedHandler<Record<string, unknown>> {
188
- return {
189
- async fetch(
190
- request: Request,
191
- env: Record<string, unknown>,
192
- ctx: ExecutionContext
193
- ): Promise<Response> {
194
- // Bind the adapter's waitUntil to the Workers execution context
195
- const originalWaitUntil = adapter.waitUntil;
196
- adapter.waitUntil = (promise: Promise<unknown>) => {
197
- ctx.waitUntil(promise);
198
- };
199
-
200
- try {
201
- // Run the handler within ALS so getCloudflareBindings() works
202
- return await runWithBindings(env, () => handler(request));
203
- } finally {
204
- // Restore (in case adapter is reused across isolate resets)
205
- adapter.waitUntil = originalWaitUntil;
206
- }
207
- },
281
+ // No adapter-level waitUntil: on Workers there is no ambient
282
+ // ExecutionContext outside a request, so support is provided
283
+ // per-request by the generated _worker.js, which bridges
284
+ // ctx.waitUntil() into the ALS via runWithWaitUntil().
285
+ // See design/11-platform.md §"waitUntil()".
208
286
  };
209
287
  }
210
288
 
@@ -214,7 +292,8 @@ export function wrapWithExecutionContext(
214
292
  export function generateWorkerEntry(
215
293
  buildDir: string,
216
294
  outDir: string,
217
- hasManifestInit = false
295
+ hasManifestInit = false,
296
+ hasWorkerHandlers = false
218
297
  ): string {
219
298
  // The RSC entry is the main request handler — it exports the fetch handler as default.
220
299
  // The Vite RSC plugin outputs it to rsc/index.js.
@@ -229,20 +308,176 @@ export function generateWorkerEntry(
229
308
  // ESM guarantees imports are evaluated in order.
230
309
  const manifestImport = hasManifestInit ? "import './_timber-manifest-init.js'\n" : '';
231
310
 
311
+ // Optional additional Worker handlers (queue, scheduled, email, etc.)
312
+ // Compiled by buildOutput via Vite's build API into _worker-handlers.js.
313
+ // The module's named exports are spread into the default export alongside fetch.
314
+ const handlersImport = hasWorkerHandlers
315
+ ? "import * as workerHandlers from './_worker-handlers.js'\n"
316
+ : '';
317
+ const handlersSpread = hasWorkerHandlers ? ' ...workerHandlers,\n' : '';
318
+
232
319
  return `// Generated by @timber-js/app/adapters/cloudflare
233
320
  // Do not edit — this file is regenerated on each build.
234
321
 
235
- ${manifestImport}import handler from '${rscEntryRelative}'
236
-
322
+ import { AsyncLocalStorage } from 'node:async_hooks'
323
+ ${manifestImport}import handler, { runWithWaitUntil } from '${rscEntryRelative}'
324
+ ${handlersImport}
237
325
  // Set TIMBER_RUNTIME for instrumentation.ts conditional SDK initialization.
238
326
  // See design/25-production-deployments.md §"TIMBER_RUNTIME".
239
327
  globalThis.process ??= { env: {} }
240
328
  process.env.TIMBER_RUNTIME = 'cloudflare'
241
329
 
242
- export default { fetch: handler }
330
+ // Bind Cloudflare env to ALS so getCloudflareBindings() works at runtime.
331
+ // Uses the same Symbol.for key as getCloudflareBindings() reads from.
332
+ const ALS_KEY = Symbol.for('timber:cf-bindings-als')
333
+ let bindingsAls = globalThis[ALS_KEY]
334
+ if (!bindingsAls) {
335
+ bindingsAls = new AsyncLocalStorage()
336
+ globalThis[ALS_KEY] = bindingsAls
337
+ }
338
+
339
+ export default {
340
+ ${handlersSpread} async fetch(request, env, ctx) {
341
+ // Bridge ctx.waitUntil into the per-request ALS so waitUntil() calls in
342
+ // user code keep the isolate alive after the response is sent.
343
+ // See design/11-platform.md §"waitUntil()".
344
+ return bindingsAls.run(env, () =>
345
+ runWithWaitUntil((promise) => ctx.waitUntil(promise), () => handler(request))
346
+ )
347
+ }
348
+ }
243
349
  `;
244
350
  }
245
351
 
352
+ /** Wrangler binding sections generated from `CloudflareBindings`. */
353
+ export interface WranglerBindingsConfig {
354
+ kv_namespaces?: Array<{ binding: string; id: string }>;
355
+ d1_databases?: Array<{ binding: string; database_id: string }>;
356
+ r2_buckets?: Array<{ binding: string; bucket_name: string }>;
357
+ queues?: {
358
+ producers?: Array<{ binding: string; queue: string }>;
359
+ consumers?: Array<Record<string, unknown>>;
360
+ };
361
+ durable_objects?: {
362
+ bindings: Array<Record<string, string>>;
363
+ };
364
+ }
365
+
366
+ /**
367
+ * Convert declarative `CloudflareBindings` into wrangler.jsonc binding sections.
368
+ *
369
+ * Maps:
370
+ * - `kv` → `kv_namespaces`
371
+ * - `d1` → `d1_databases`
372
+ * - `r2` → `r2_buckets`
373
+ * - `queues` → `queues` (producers + consumers)
374
+ * - `durableObjects` → `durable_objects`
375
+ *
376
+ * Empty arrays are omitted from the output.
377
+ *
378
+ * @internal Exported for testing.
379
+ */
380
+ export function generateBindingsConfig(
381
+ bindings: CloudflareBindings | undefined
382
+ ): WranglerBindingsConfig {
383
+ if (!bindings) return {};
384
+
385
+ const result: WranglerBindingsConfig = {};
386
+
387
+ // KV namespaces
388
+ if (bindings.kv && bindings.kv.length > 0) {
389
+ result.kv_namespaces = bindings.kv.map((kv) => ({
390
+ binding: kv.name,
391
+ id: kv.id ?? '',
392
+ }));
393
+ }
394
+
395
+ // D1 databases
396
+ if (bindings.d1 && bindings.d1.length > 0) {
397
+ result.d1_databases = bindings.d1.map((d1) => ({
398
+ binding: d1.name,
399
+ database_id: d1.database_id,
400
+ }));
401
+ }
402
+
403
+ // R2 buckets
404
+ if (bindings.r2 && bindings.r2.length > 0) {
405
+ result.r2_buckets = bindings.r2.map((r2) => ({
406
+ binding: r2.name,
407
+ bucket_name: r2.bucket_name,
408
+ }));
409
+ }
410
+
411
+ // Queues (producers and/or consumers)
412
+ if (bindings.queues) {
413
+ const queues: Record<string, unknown> = {};
414
+ if (bindings.queues.producers && bindings.queues.producers.length > 0) {
415
+ queues.producers = bindings.queues.producers.map((p) => ({
416
+ binding: p.name,
417
+ queue: p.queue,
418
+ }));
419
+ }
420
+ if (bindings.queues.consumers && bindings.queues.consumers.length > 0) {
421
+ queues.consumers = bindings.queues.consumers.map((c) => {
422
+ const consumer: Record<string, unknown> = { queue: c.queue };
423
+ if (c.max_batch_size !== undefined) consumer.max_batch_size = c.max_batch_size;
424
+ if (c.max_retries !== undefined) consumer.max_retries = c.max_retries;
425
+ if (c.dead_letter_queue !== undefined) consumer.dead_letter_queue = c.dead_letter_queue;
426
+ return consumer;
427
+ });
428
+ }
429
+ if (Object.keys(queues).length > 0) {
430
+ result.queues = queues;
431
+ }
432
+ }
433
+
434
+ // Durable Objects
435
+ if (bindings.durableObjects && bindings.durableObjects.length > 0) {
436
+ result.durable_objects = {
437
+ bindings: bindings.durableObjects.map((dobj) => {
438
+ const entry: Record<string, string> = {
439
+ name: dobj.name,
440
+ class_name: dobj.class_name,
441
+ };
442
+ if (dobj.script_name) entry.script_name = dobj.script_name;
443
+ return entry;
444
+ }),
445
+ };
446
+ }
447
+
448
+ return result;
449
+ }
450
+
451
+ /**
452
+ * One-level deep merge: for each key in `override`, if both the base and
453
+ * override values are plain objects (not arrays, not null), merge their
454
+ * keys with override winning on conflicts. Everything else (primitives,
455
+ * arrays, null) is replaced outright — matching the intuitive behavior
456
+ * where `kv_namespaces: [...]` replaces fully but
457
+ * `durable_objects: { migrations }` merges with generated `bindings`.
458
+ */
459
+ function shallowDeepMerge(
460
+ base: Record<string, unknown>,
461
+ override: Record<string, unknown>
462
+ ): Record<string, unknown> {
463
+ const result = { ...base };
464
+ for (const key of Object.keys(override)) {
465
+ const baseVal = result[key];
466
+ const overVal = override[key];
467
+ if (isPlainObject(baseVal) && isPlainObject(overVal)) {
468
+ result[key] = { ...baseVal, ...overVal };
469
+ } else {
470
+ result[key] = overVal;
471
+ }
472
+ }
473
+ return result;
474
+ }
475
+
476
+ /** True for `{}` literals — false for arrays, null, Date, etc. */
477
+ function isPlainObject(val: unknown): val is Record<string, unknown> {
478
+ return val !== null && typeof val === 'object' && !Array.isArray(val);
479
+ }
480
+
246
481
  /** @internal Exported for testing. */
247
482
  export function generateWranglerConfig(
248
483
  config: TimberConfig,
@@ -267,12 +502,20 @@ export function generateWranglerConfig(
267
502
  },
268
503
  };
269
504
 
270
- // Merge user overrides
505
+ // Layer 1: merge bindings-generated sections into base
506
+ const bindingsConfig = generateBindingsConfig(options.bindings);
507
+ const merged = { ...base, ...bindingsConfig };
508
+
509
+ // Layer 2: wrangler escape hatch with deep merge for nested plain objects.
510
+ // A shallow spread would replace entire sections like durable_objects and
511
+ // queues — e.g. adding migrations via wrangler would drop the generated
512
+ // durable_objects.bindings. Deep merge preserves generated keys while
513
+ // letting wrangler override on actual key-level conflicts.
271
514
  if (options.wrangler) {
272
- return { ...base, ...options.wrangler };
515
+ return shallowDeepMerge(merged, options.wrangler);
273
516
  }
274
517
 
275
- return base;
518
+ return merged;
276
519
  }
277
520
 
278
521
  // ─── Preview ─────────────────────────────────────────────────────────────────
@@ -310,16 +553,13 @@ function spawnPreviewProcess(command: string, args: string[], cwd: string): Prom
310
553
  }
311
554
 
312
555
  // ─── Cloudflare Workers type stubs ───────────────────────────────────────────
313
- // Minimal type declarations so this file compiles without @cloudflare/workers-types.
314
- // In production builds, users install @cloudflare/workers-types themselves.
315
-
316
- declare global {
317
- interface ExecutionContext {
318
- waitUntil(promise: Promise<unknown>): void;
319
- passThroughOnException(): void;
320
- }
321
-
322
- interface ExportedHandler<Env = Record<string, unknown>> {
323
- fetch?(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> | Response;
324
- }
556
+ // Local type declarations so this file compiles without @cloudflare/workers-types.
557
+ // These are NOT declared globally — that would clash with @cloudflare/workers-types
558
+ // when users install it. Instead, they're module-scoped and used only within
559
+ // this file's function signatures.
560
+
561
+ /** @internal Minimal stub — use @cloudflare/workers-types for full types. */
562
+ export interface CfExecutionContext {
563
+ waitUntil(promise: Promise<unknown>): void;
564
+ passThroughOnException(): void;
325
565
  }