@timber-js/app 0.2.0-alpha.12 → 0.2.0-alpha.120

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 (758) hide show
  1. package/dist/_chunks/actions-Cw-7NfJJ.js +1101 -0
  2. package/dist/_chunks/actions-Cw-7NfJJ.js.map +1 -0
  3. package/dist/_chunks/build-output-helper-DhxiT18k.js +61 -0
  4. package/dist/_chunks/build-output-helper-DhxiT18k.js.map +1 -0
  5. package/dist/_chunks/cli-schema-sync-XV0I47Gj.js +2 -0
  6. package/dist/_chunks/cli-schema-sync-q2wB0DyJ.js +358 -0
  7. package/dist/_chunks/cli-schema-sync-q2wB0DyJ.js.map +1 -0
  8. package/dist/_chunks/codec-registry-V7ARyeLN.js +21 -0
  9. package/dist/_chunks/codec-registry-V7ARyeLN.js.map +1 -0
  10. package/dist/_chunks/define-8zQ8Vm7x.js +195 -0
  11. package/dist/_chunks/define-8zQ8Vm7x.js.map +1 -0
  12. package/dist/_chunks/define-zQX6e1tN.js +124 -0
  13. package/dist/_chunks/define-zQX6e1tN.js.map +1 -0
  14. package/dist/_chunks/format-CR6v1pWE.js +14 -0
  15. package/dist/_chunks/format-CR6v1pWE.js.map +1 -0
  16. package/dist/_chunks/handler-store-iqnt2ghN.js +54 -0
  17. package/dist/_chunks/handler-store-iqnt2ghN.js.map +1 -0
  18. package/dist/_chunks/logger-DDmK5skc.js +291 -0
  19. package/dist/_chunks/logger-DDmK5skc.js.map +1 -0
  20. package/dist/_chunks/merge-search-params-CwxJzBLS.js +41 -0
  21. package/dist/_chunks/merge-search-params-CwxJzBLS.js.map +1 -0
  22. package/dist/_chunks/navigation-root-DKsJ5Di7.js +96 -0
  23. package/dist/_chunks/navigation-root-DKsJ5Di7.js.map +1 -0
  24. package/dist/_chunks/registry-Dp_hJL4s.js +20 -0
  25. package/dist/_chunks/registry-Dp_hJL4s.js.map +1 -0
  26. package/dist/_chunks/resolve-schema-23Mc8aLi.js +65 -0
  27. package/dist/_chunks/resolve-schema-23Mc8aLi.js.map +1 -0
  28. package/dist/_chunks/router-ref-sektkr-t.js +28 -0
  29. package/dist/_chunks/router-ref-sektkr-t.js.map +1 -0
  30. package/dist/_chunks/scanner-DmfoB7iK.js +336 -0
  31. package/dist/_chunks/scanner-DmfoB7iK.js.map +1 -0
  32. package/dist/_chunks/schema-bridge-eL5vQDSA.js +86 -0
  33. package/dist/_chunks/schema-bridge-eL5vQDSA.js.map +1 -0
  34. package/dist/_chunks/segment-classify-CnfLLvir.js +137 -0
  35. package/dist/_chunks/segment-classify-CnfLLvir.js.map +1 -0
  36. package/dist/_chunks/segment-context-Bg0pFbLT.js +34 -0
  37. package/dist/_chunks/segment-context-Bg0pFbLT.js.map +1 -0
  38. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BO5OvEvg.js} +1 -1
  39. package/dist/_chunks/ssr-data-BO5OvEvg.js.map +1 -0
  40. package/dist/_chunks/stale-reload-BCPRG0Cv.js +64 -0
  41. package/dist/_chunks/stale-reload-BCPRG0Cv.js.map +1 -0
  42. package/dist/_chunks/tracing-DvKLzCFa.js +329 -0
  43. package/dist/_chunks/tracing-DvKLzCFa.js.map +1 -0
  44. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-D9SBlAfp.js} +7 -20
  45. package/dist/_chunks/use-query-states-D9SBlAfp.js.map +1 -0
  46. package/dist/_chunks/use-segment-params-CskiK-59.js +185 -0
  47. package/dist/_chunks/use-segment-params-CskiK-59.js.map +1 -0
  48. package/dist/_chunks/validation-Bm3Je-09.js +84 -0
  49. package/dist/_chunks/validation-Bm3Je-09.js.map +1 -0
  50. package/dist/_chunks/walkers-DgOXkTts.js +609 -0
  51. package/dist/_chunks/walkers-DgOXkTts.js.map +1 -0
  52. package/dist/_chunks/{format-DviM89f0.js → warnings-B30wpfaS.js} +6 -45
  53. package/dist/_chunks/warnings-B30wpfaS.js.map +1 -0
  54. package/dist/adapters/build-output-helper.d.ts +28 -0
  55. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  56. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  57. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  58. package/dist/adapters/cloudflare-dev.js +73 -0
  59. package/dist/adapters/cloudflare-dev.js.map +1 -0
  60. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  61. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  62. package/dist/adapters/cloudflare-kv-cache.js +95 -0
  63. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  64. package/dist/adapters/cloudflare.d.ts +148 -12
  65. package/dist/adapters/cloudflare.d.ts.map +1 -1
  66. package/dist/adapters/cloudflare.js +142 -38
  67. package/dist/adapters/cloudflare.js.map +1 -1
  68. package/dist/adapters/compress-module.d.ts.map +1 -1
  69. package/dist/adapters/nitro.d.ts +17 -1
  70. package/dist/adapters/nitro.d.ts.map +1 -1
  71. package/dist/adapters/nitro.js +143 -45
  72. package/dist/adapters/nitro.js.map +1 -1
  73. package/dist/adapters/shared.d.ts +16 -0
  74. package/dist/adapters/shared.d.ts.map +1 -0
  75. package/dist/cache/cache-api.d.ts +24 -0
  76. package/dist/cache/cache-api.d.ts.map +1 -0
  77. package/dist/cache/handler-store.d.ts +31 -0
  78. package/dist/cache/handler-store.d.ts.map +1 -0
  79. package/dist/cache/index.d.ts +23 -7
  80. package/dist/cache/index.d.ts.map +1 -1
  81. package/dist/cache/index.js +151 -81
  82. package/dist/cache/index.js.map +1 -1
  83. package/dist/cache/singleflight.d.ts +18 -1
  84. package/dist/cache/singleflight.d.ts.map +1 -1
  85. package/dist/cache/sizeof.d.ts +22 -0
  86. package/dist/cache/sizeof.d.ts.map +1 -0
  87. package/dist/cache/timber-cache.d.ts +1 -1
  88. package/dist/cache/timber-cache.d.ts.map +1 -1
  89. package/dist/cli-schema-sync.d.ts +37 -0
  90. package/dist/cli-schema-sync.d.ts.map +1 -0
  91. package/dist/cli.d.ts +14 -2
  92. package/dist/cli.d.ts.map +1 -1
  93. package/dist/cli.js +42 -6
  94. package/dist/cli.js.map +1 -1
  95. package/dist/client/browser-dev.d.ts +34 -1
  96. package/dist/client/browser-dev.d.ts.map +1 -1
  97. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  98. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  99. package/dist/client/browser-entry/hmr.d.ts +21 -0
  100. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  101. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  102. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  103. package/dist/client/browser-entry/index.d.ts +30 -0
  104. package/dist/client/browser-entry/index.d.ts.map +1 -0
  105. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  106. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  107. package/dist/client/browser-entry/router-init.d.ts +23 -0
  108. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  109. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  110. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  111. package/dist/client/browser-entry/scroll.d.ts +19 -0
  112. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  113. package/dist/client/error-boundary.d.ts +12 -5
  114. package/dist/client/error-boundary.d.ts.map +1 -1
  115. package/dist/client/error-boundary.js +29 -6
  116. package/dist/client/error-boundary.js.map +1 -1
  117. package/dist/client/error-reconstituter.d.ts +54 -0
  118. package/dist/client/error-reconstituter.d.ts.map +1 -0
  119. package/dist/client/form.d.ts +16 -27
  120. package/dist/client/form.d.ts.map +1 -1
  121. package/dist/client/history.d.ts +19 -4
  122. package/dist/client/history.d.ts.map +1 -1
  123. package/dist/client/index.d.ts +9 -24
  124. package/dist/client/index.d.ts.map +1 -1
  125. package/dist/client/index.js +172 -1100
  126. package/dist/client/index.js.map +1 -1
  127. package/dist/client/internal.d.ts +19 -0
  128. package/dist/client/internal.d.ts.map +1 -0
  129. package/dist/client/internal.js +964 -0
  130. package/dist/client/internal.js.map +1 -0
  131. package/dist/client/link-pending-store.d.ts +63 -0
  132. package/dist/client/link-pending-store.d.ts.map +1 -0
  133. package/dist/client/link.d.ts +62 -55
  134. package/dist/client/link.d.ts.map +1 -1
  135. package/dist/client/nav-link-store.d.ts +36 -0
  136. package/dist/client/nav-link-store.d.ts.map +1 -0
  137. package/dist/client/navigation-api-types.d.ts +90 -0
  138. package/dist/client/navigation-api-types.d.ts.map +1 -0
  139. package/dist/client/navigation-api.d.ts +115 -0
  140. package/dist/client/navigation-api.d.ts.map +1 -0
  141. package/dist/client/navigation-context.d.ts +13 -2
  142. package/dist/client/navigation-context.d.ts.map +1 -1
  143. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
  144. package/dist/client/navigation-root.d.ts.map +1 -0
  145. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  146. package/dist/client/router-ref.d.ts +1 -1
  147. package/dist/client/router.d.ts +70 -4
  148. package/dist/client/router.d.ts.map +1 -1
  149. package/dist/client/rsc-fetch.d.ts +38 -3
  150. package/dist/client/rsc-fetch.d.ts.map +1 -1
  151. package/dist/client/segment-cache.d.ts +1 -1
  152. package/dist/client/segment-cache.d.ts.map +1 -1
  153. package/dist/client/segment-outlet.d.ts +63 -0
  154. package/dist/client/segment-outlet.d.ts.map +1 -0
  155. package/dist/client/ssr-data.d.ts +13 -4
  156. package/dist/client/ssr-data.d.ts.map +1 -1
  157. package/dist/client/stale-reload.d.ts +15 -0
  158. package/dist/client/stale-reload.d.ts.map +1 -1
  159. package/dist/client/state.d.ts +1 -1
  160. package/dist/client/top-loader.d.ts +5 -5
  161. package/dist/client/top-loader.d.ts.map +1 -1
  162. package/dist/client/use-cookie.d.ts +12 -0
  163. package/dist/client/use-cookie.d.ts.map +1 -1
  164. package/dist/client/use-link-status.d.ts +5 -5
  165. package/dist/client/use-link-status.d.ts.map +1 -1
  166. package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
  167. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  168. package/dist/client/use-query-states.d.ts +1 -1
  169. package/dist/client/use-query-states.d.ts.map +1 -1
  170. package/dist/client/use-router.d.ts +1 -1
  171. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  172. package/dist/client/use-segment-params.d.ts.map +1 -0
  173. package/dist/codec.d.ts +51 -0
  174. package/dist/codec.d.ts.map +1 -0
  175. package/dist/codec.js +46 -0
  176. package/dist/codec.js.map +1 -0
  177. package/dist/config-types.d.ts +294 -0
  178. package/dist/config-types.d.ts.map +1 -0
  179. package/dist/config-validation.d.ts +51 -0
  180. package/dist/config-validation.d.ts.map +1 -0
  181. package/dist/content/index.d.ts +1 -10
  182. package/dist/content/index.d.ts.map +1 -1
  183. package/dist/content/index.js +0 -2
  184. package/dist/cookies/define-cookie.d.ts +58 -25
  185. package/dist/cookies/define-cookie.d.ts.map +1 -1
  186. package/dist/cookies/index.d.ts +2 -1
  187. package/dist/cookies/index.d.ts.map +1 -1
  188. package/dist/cookies/index.js +251 -36
  189. package/dist/cookies/index.js.map +1 -1
  190. package/dist/cookies/json-cookie.d.ts +64 -0
  191. package/dist/cookies/json-cookie.d.ts.map +1 -0
  192. package/dist/cookies/validation.d.ts +46 -0
  193. package/dist/cookies/validation.d.ts.map +1 -0
  194. package/dist/dev-tools/404-page.d.ts +46 -0
  195. package/dist/dev-tools/404-page.d.ts.map +1 -0
  196. package/dist/dev-tools/browser-logs.d.ts +84 -0
  197. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  198. package/dist/dev-tools/error-page.d.ts +58 -0
  199. package/dist/dev-tools/error-page.d.ts.map +1 -0
  200. package/dist/dev-tools/holding-server.d.ts +54 -0
  201. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  202. package/dist/dev-tools/index.d.ts +31 -0
  203. package/dist/dev-tools/index.d.ts.map +1 -0
  204. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  205. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  206. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  207. package/dist/dev-tools/logger.d.ts.map +1 -0
  208. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  209. package/dist/dev-tools/logs.d.ts.map +1 -0
  210. package/dist/dev-tools/overlay.d.ts +91 -0
  211. package/dist/dev-tools/overlay.d.ts.map +1 -0
  212. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  213. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  214. package/dist/dev-tools/terminal.d.ts +28 -0
  215. package/dist/dev-tools/terminal.d.ts.map +1 -0
  216. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  217. package/dist/dev-tools/warnings.d.ts.map +1 -0
  218. package/dist/fonts/ast.d.ts +98 -6
  219. package/dist/fonts/ast.d.ts.map +1 -1
  220. package/dist/fonts/bundle.d.ts +48 -0
  221. package/dist/fonts/bundle.d.ts.map +1 -0
  222. package/dist/fonts/dev-middleware.d.ts +22 -0
  223. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  224. package/dist/fonts/local.d.ts +1 -1
  225. package/dist/fonts/pipeline.d.ts +167 -0
  226. package/dist/fonts/pipeline.d.ts.map +1 -0
  227. package/dist/fonts/transform.d.ts +78 -0
  228. package/dist/fonts/transform.d.ts.map +1 -0
  229. package/dist/fonts/types.d.ts +45 -1
  230. package/dist/fonts/types.d.ts.map +1 -1
  231. package/dist/fonts/virtual-modules.d.ts +94 -0
  232. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  233. package/dist/index.d.ts +46 -190
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +4799 -12730
  236. package/dist/index.js.map +1 -1
  237. package/dist/params/codec-registry.d.ts +26 -0
  238. package/dist/params/codec-registry.d.ts.map +1 -0
  239. package/dist/params/define-schema.d.ts +53 -0
  240. package/dist/params/define-schema.d.ts.map +1 -0
  241. package/dist/params/index.d.ts +5 -0
  242. package/dist/params/index.d.ts.map +1 -0
  243. package/dist/params/index.js +34 -0
  244. package/dist/params/index.js.map +1 -0
  245. package/dist/params/resolve-schema.d.ts +34 -0
  246. package/dist/params/resolve-schema.d.ts.map +1 -0
  247. package/dist/plugin-context.d.ts +107 -0
  248. package/dist/plugin-context.d.ts.map +1 -0
  249. package/dist/plugins/adapter-build.d.ts +1 -1
  250. package/dist/plugins/adapter-build.d.ts.map +1 -1
  251. package/dist/plugins/build-manifest.d.ts +2 -2
  252. package/dist/plugins/build-manifest.d.ts.map +1 -1
  253. package/dist/plugins/build-report.d.ts +9 -7
  254. package/dist/plugins/build-report.d.ts.map +1 -1
  255. package/dist/plugins/client-chunks.d.ts +32 -0
  256. package/dist/plugins/client-chunks.d.ts.map +1 -0
  257. package/dist/plugins/content.d.ts +1 -1
  258. package/dist/plugins/content.d.ts.map +1 -1
  259. package/dist/plugins/dev-server.d.ts +1 -1
  260. package/dist/plugins/dev-server.d.ts.map +1 -1
  261. package/dist/plugins/entries.d.ts +1 -1
  262. package/dist/plugins/entries.d.ts.map +1 -1
  263. package/dist/plugins/fonts.d.ts +17 -73
  264. package/dist/plugins/fonts.d.ts.map +1 -1
  265. package/dist/plugins/mdx.d.ts +1 -1
  266. package/dist/plugins/mdx.d.ts.map +1 -1
  267. package/dist/plugins/routing.d.ts +1 -1
  268. package/dist/plugins/routing.d.ts.map +1 -1
  269. package/dist/plugins/server-bundle.d.ts.map +1 -1
  270. package/dist/plugins/shims.d.ts +6 -5
  271. package/dist/plugins/shims.d.ts.map +1 -1
  272. package/dist/plugins/static-build.d.ts +5 -26
  273. package/dist/plugins/static-build.d.ts.map +1 -1
  274. package/dist/routing/codegen-shared.d.ts +63 -0
  275. package/dist/routing/codegen-shared.d.ts.map +1 -0
  276. package/dist/routing/codegen-types.d.ts +60 -0
  277. package/dist/routing/codegen-types.d.ts.map +1 -0
  278. package/dist/routing/codegen.d.ts +7 -2
  279. package/dist/routing/codegen.d.ts.map +1 -1
  280. package/dist/routing/convention-lint.d.ts +41 -0
  281. package/dist/routing/convention-lint.d.ts.map +1 -0
  282. package/dist/routing/index.d.ts +5 -1
  283. package/dist/routing/index.d.ts.map +1 -1
  284. package/dist/routing/index.js +4 -2
  285. package/dist/routing/link-codegen.d.ts +90 -0
  286. package/dist/routing/link-codegen.d.ts.map +1 -0
  287. package/dist/routing/scanner.d.ts +1 -10
  288. package/dist/routing/scanner.d.ts.map +1 -1
  289. package/dist/routing/segment-classify.d.ts +75 -0
  290. package/dist/routing/segment-classify.d.ts.map +1 -0
  291. package/dist/routing/segment-codegen.d.ts +38 -0
  292. package/dist/routing/segment-codegen.d.ts.map +1 -0
  293. package/dist/routing/types.d.ts +77 -25
  294. package/dist/routing/types.d.ts.map +1 -1
  295. package/dist/routing/walkers.d.ts +51 -0
  296. package/dist/routing/walkers.d.ts.map +1 -0
  297. package/dist/rsc-runtime/rsc.d.ts +1 -1
  298. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  299. package/dist/rsc-runtime/ssr.d.ts +12 -0
  300. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  301. package/dist/schema-bridge.d.ts +76 -0
  302. package/dist/schema-bridge.d.ts.map +1 -0
  303. package/dist/search-params/define.d.ts +157 -0
  304. package/dist/search-params/define.d.ts.map +1 -0
  305. package/dist/search-params/index.d.ts +4 -7
  306. package/dist/search-params/index.d.ts.map +1 -1
  307. package/dist/search-params/index.js +34 -441
  308. package/dist/search-params/index.js.map +1 -1
  309. package/dist/search-params/registry.d.ts +2 -2
  310. package/dist/search-params/registry.d.ts.map +1 -1
  311. package/dist/search-params/wrappers.d.ts +53 -0
  312. package/dist/search-params/wrappers.d.ts.map +1 -0
  313. package/dist/segment-params/define.d.ts +95 -0
  314. package/dist/segment-params/define.d.ts.map +1 -0
  315. package/dist/segment-params/index.d.ts +3 -0
  316. package/dist/segment-params/index.d.ts.map +1 -0
  317. package/dist/segment-params/index.js +2 -0
  318. package/dist/server/access-gate.d.ts +8 -3
  319. package/dist/server/access-gate.d.ts.map +1 -1
  320. package/dist/server/action-client.d.ts +41 -6
  321. package/dist/server/action-client.d.ts.map +1 -1
  322. package/dist/server/action-encryption.d.ts +76 -0
  323. package/dist/server/action-encryption.d.ts.map +1 -0
  324. package/dist/server/action-handler.d.ts +35 -1
  325. package/dist/server/action-handler.d.ts.map +1 -1
  326. package/dist/server/actions.d.ts +3 -6
  327. package/dist/server/actions.d.ts.map +1 -1
  328. package/dist/server/als-registry.d.ts +53 -5
  329. package/dist/server/als-registry.d.ts.map +1 -1
  330. package/dist/server/asset-headers.d.ts +1 -15
  331. package/dist/server/asset-headers.d.ts.map +1 -1
  332. package/dist/server/build-manifest.d.ts +2 -2
  333. package/dist/server/build-manifest.d.ts.map +1 -1
  334. package/dist/server/coalesce-tick.d.ts +40 -0
  335. package/dist/server/coalesce-tick.d.ts.map +1 -0
  336. package/dist/server/cookie-context.d.ts +170 -0
  337. package/dist/server/cookie-context.d.ts.map +1 -0
  338. package/dist/server/cookie-parsing.d.ts +51 -0
  339. package/dist/server/cookie-parsing.d.ts.map +1 -0
  340. package/dist/server/debug.d.ts +1 -1
  341. package/dist/server/default-logger.d.ts +22 -0
  342. package/dist/server/default-logger.d.ts.map +1 -0
  343. package/dist/server/deny-boundary.d.ts +90 -0
  344. package/dist/server/deny-boundary.d.ts.map +1 -0
  345. package/dist/server/deny-renderer.d.ts.map +1 -1
  346. package/dist/server/dev-source-map.d.ts +22 -0
  347. package/dist/server/dev-source-map.d.ts.map +1 -0
  348. package/dist/server/early-hints-sender.d.ts.map +1 -1
  349. package/dist/server/early-hints.d.ts +13 -5
  350. package/dist/server/early-hints.d.ts.map +1 -1
  351. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  352. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  353. package/dist/server/fallback-error.d.ts +12 -7
  354. package/dist/server/fallback-error.d.ts.map +1 -1
  355. package/dist/server/flight-injection-state.d.ts +66 -0
  356. package/dist/server/flight-injection-state.d.ts.map +1 -0
  357. package/dist/server/flight-scripts.d.ts +42 -0
  358. package/dist/server/flight-scripts.d.ts.map +1 -0
  359. package/dist/server/flush.d.ts.map +1 -1
  360. package/dist/server/form-data.d.ts +29 -0
  361. package/dist/server/form-data.d.ts.map +1 -1
  362. package/dist/server/html-injector-core.d.ts +213 -0
  363. package/dist/server/html-injector-core.d.ts.map +1 -0
  364. package/dist/server/html-injectors.d.ts +81 -41
  365. package/dist/server/html-injectors.d.ts.map +1 -1
  366. package/dist/server/index.d.ts +10 -46
  367. package/dist/server/index.d.ts.map +1 -1
  368. package/dist/server/index.js +155 -2905
  369. package/dist/server/index.js.map +1 -1
  370. package/dist/server/internal.d.ts +48 -0
  371. package/dist/server/internal.d.ts.map +1 -0
  372. package/dist/server/internal.js +2947 -0
  373. package/dist/server/internal.js.map +1 -0
  374. package/dist/server/logger.d.ts +39 -7
  375. package/dist/server/logger.d.ts.map +1 -1
  376. package/dist/server/middleware-runner.d.ts +36 -4
  377. package/dist/server/middleware-runner.d.ts.map +1 -1
  378. package/dist/server/node-stream-transforms.d.ts +112 -0
  379. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  380. package/dist/server/param-coercion.d.ts +54 -0
  381. package/dist/server/param-coercion.d.ts.map +1 -0
  382. package/dist/server/pipeline-helpers.d.ts +95 -0
  383. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  384. package/dist/server/pipeline-interception.d.ts +1 -1
  385. package/dist/server/pipeline-interception.d.ts.map +1 -1
  386. package/dist/server/pipeline-metadata.d.ts +6 -0
  387. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  388. package/dist/server/pipeline-outcome.d.ts +49 -0
  389. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  390. package/dist/server/pipeline-phases.d.ts +52 -0
  391. package/dist/server/pipeline-phases.d.ts.map +1 -0
  392. package/dist/server/pipeline.d.ts +118 -23
  393. package/dist/server/pipeline.d.ts.map +1 -1
  394. package/dist/server/port-resolution.d.ts +117 -0
  395. package/dist/server/port-resolution.d.ts.map +1 -0
  396. package/dist/server/primitives.d.ts +69 -18
  397. package/dist/server/primitives.d.ts.map +1 -1
  398. package/dist/server/render-timeout.d.ts +51 -0
  399. package/dist/server/render-timeout.d.ts.map +1 -0
  400. package/dist/server/request-context.d.ts +62 -107
  401. package/dist/server/request-context.d.ts.map +1 -1
  402. package/dist/server/route-element-builder.d.ts +27 -1
  403. package/dist/server/route-element-builder.d.ts.map +1 -1
  404. package/dist/server/route-handler.d.ts.map +1 -1
  405. package/dist/server/route-matcher.d.ts +21 -34
  406. package/dist/server/route-matcher.d.ts.map +1 -1
  407. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  408. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  409. package/dist/server/rsc-entry/api-handler.d.ts +2 -2
  410. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  411. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  412. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  413. package/dist/server/rsc-entry/helpers.d.ts +49 -6
  414. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  415. package/dist/server/rsc-entry/index.d.ts +19 -8
  416. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  417. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  418. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  419. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  420. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  421. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  422. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  423. package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
  424. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  425. package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
  426. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  427. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  428. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  429. package/dist/server/safe-load.d.ts +46 -0
  430. package/dist/server/safe-load.d.ts.map +1 -0
  431. package/dist/server/sensitive-fields.d.ts +74 -0
  432. package/dist/server/sensitive-fields.d.ts.map +1 -0
  433. package/dist/server/sitemap-generator.d.ts +129 -0
  434. package/dist/server/sitemap-generator.d.ts.map +1 -0
  435. package/dist/server/sitemap-handler.d.ts +22 -0
  436. package/dist/server/sitemap-handler.d.ts.map +1 -0
  437. package/dist/server/slot-resolver.d.ts +1 -1
  438. package/dist/server/slot-resolver.d.ts.map +1 -1
  439. package/dist/server/ssr-entry.d.ts +30 -0
  440. package/dist/server/ssr-entry.d.ts.map +1 -1
  441. package/dist/server/ssr-render.d.ts +39 -21
  442. package/dist/server/ssr-render.d.ts.map +1 -1
  443. package/dist/server/ssr-wrappers.d.ts +50 -0
  444. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  445. package/dist/server/state-tree-diff.d.ts.map +1 -1
  446. package/dist/server/status-code-resolver.d.ts +16 -11
  447. package/dist/server/status-code-resolver.d.ts.map +1 -1
  448. package/dist/server/stream-utils.d.ts +36 -0
  449. package/dist/server/stream-utils.d.ts.map +1 -0
  450. package/dist/server/tracing.d.ts +5 -5
  451. package/dist/server/tracing.d.ts.map +1 -1
  452. package/dist/server/tree-builder.d.ts +62 -30
  453. package/dist/server/tree-builder.d.ts.map +1 -1
  454. package/dist/server/tree-match.d.ts +41 -0
  455. package/dist/server/tree-match.d.ts.map +1 -0
  456. package/dist/server/types.d.ts +49 -4
  457. package/dist/server/types.d.ts.map +1 -1
  458. package/dist/server/utils/escape-html.d.ts +14 -0
  459. package/dist/server/utils/escape-html.d.ts.map +1 -0
  460. package/dist/server/version-skew.d.ts +61 -0
  461. package/dist/server/version-skew.d.ts.map +1 -0
  462. package/dist/shared/merge-search-params.d.ts +22 -0
  463. package/dist/shared/merge-search-params.d.ts.map +1 -0
  464. package/dist/shims/font-google.d.ts +1 -1
  465. package/dist/shims/font-google.d.ts.map +1 -1
  466. package/dist/shims/font-google.js +42 -0
  467. package/dist/shims/font-google.js.map +1 -0
  468. package/dist/shims/font-local.d.ts +26 -0
  469. package/dist/shims/font-local.d.ts.map +1 -0
  470. package/dist/shims/font-local.js +20 -0
  471. package/dist/shims/font-local.js.map +1 -0
  472. package/dist/shims/headers.d.ts +2 -1
  473. package/dist/shims/headers.d.ts.map +1 -1
  474. package/dist/shims/navigation-client.d.ts +3 -1
  475. package/dist/shims/navigation-client.d.ts.map +1 -1
  476. package/dist/shims/navigation.d.ts +11 -5
  477. package/dist/shims/navigation.d.ts.map +1 -1
  478. package/dist/utils/state-machine.d.ts +80 -0
  479. package/dist/utils/state-machine.d.ts.map +1 -0
  480. package/package.json +56 -16
  481. package/src/adapters/build-output-helper.ts +77 -0
  482. package/src/adapters/cloudflare-dev.ts +177 -0
  483. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  484. package/src/adapters/cloudflare.ts +350 -76
  485. package/src/adapters/compress-module.ts +24 -4
  486. package/src/adapters/nitro.ts +142 -59
  487. package/src/adapters/shared.ts +40 -0
  488. package/src/adapters/wrangler.d.ts +7 -0
  489. package/src/cache/cache-api.ts +38 -0
  490. package/src/cache/handler-store.ts +68 -0
  491. package/src/cache/index.ts +81 -18
  492. package/src/cache/singleflight.ts +62 -4
  493. package/src/cache/sizeof.ts +33 -0
  494. package/src/cache/timber-cache.ts +25 -20
  495. package/src/cli-schema-sync.ts +207 -0
  496. package/src/cli.ts +65 -8
  497. package/src/client/browser-dev.ts +153 -1
  498. package/src/client/browser-entry/action-dispatch.ts +126 -0
  499. package/src/client/browser-entry/hmr.ts +81 -0
  500. package/src/client/browser-entry/hydrate.ts +145 -0
  501. package/src/client/browser-entry/index.ts +149 -0
  502. package/src/client/browser-entry/post-hydration.ts +119 -0
  503. package/src/client/browser-entry/router-init.ts +193 -0
  504. package/src/client/browser-entry/rsc-stream.ts +157 -0
  505. package/src/client/browser-entry/scroll.ts +27 -0
  506. package/src/client/error-boundary.tsx +99 -22
  507. package/src/client/error-reconstituter.tsx +65 -0
  508. package/src/client/form.tsx +31 -32
  509. package/src/client/history.ts +26 -4
  510. package/src/client/index.ts +69 -44
  511. package/src/client/internal.ts +58 -0
  512. package/src/client/link-pending-store.ts +111 -0
  513. package/src/client/link.tsx +366 -113
  514. package/src/client/nav-link-store.ts +47 -0
  515. package/src/client/navigation-api-types.ts +112 -0
  516. package/src/client/navigation-api.ts +332 -0
  517. package/src/client/navigation-context.ts +31 -6
  518. package/src/client/navigation-root.tsx +342 -0
  519. package/src/client/nuqs-adapter.tsx +16 -3
  520. package/src/client/router-ref.ts +1 -1
  521. package/src/client/router.ts +300 -73
  522. package/src/client/rsc-fetch.ts +112 -8
  523. package/src/client/segment-cache.ts +1 -1
  524. package/src/client/segment-outlet.tsx +86 -0
  525. package/src/client/ssr-data.ts +13 -5
  526. package/src/client/stale-reload.ts +72 -3
  527. package/src/client/state.ts +2 -2
  528. package/src/client/top-loader.tsx +18 -6
  529. package/src/client/use-cookie.ts +31 -2
  530. package/src/client/use-link-status.ts +7 -7
  531. package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
  532. package/src/client/use-query-states.ts +9 -3
  533. package/src/client/use-router.ts +1 -1
  534. package/src/client/{use-params.ts → use-segment-params.ts} +8 -6
  535. package/src/codec.ts +97 -0
  536. package/src/config-types.ts +292 -0
  537. package/src/config-validation.ts +303 -0
  538. package/src/content/index.ts +5 -13
  539. package/src/cookies/define-cookie.ts +233 -53
  540. package/src/cookies/index.ts +12 -1
  541. package/src/cookies/json-cookie.ts +105 -0
  542. package/src/cookies/validation.ts +134 -0
  543. package/src/dev-tools/404-page.ts +387 -0
  544. package/src/dev-tools/browser-logs.ts +291 -0
  545. package/src/dev-tools/error-page.ts +506 -0
  546. package/src/dev-tools/holding-server.ts +187 -0
  547. package/src/dev-tools/index.ts +90 -0
  548. package/src/dev-tools/instrumentation.ts +176 -0
  549. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  550. package/src/dev-tools/overlay.ts +469 -0
  551. package/src/dev-tools/stack-classifier.ts +75 -0
  552. package/src/dev-tools/terminal.ts +183 -0
  553. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
  554. package/src/fonts/ast.ts +525 -16
  555. package/src/fonts/bundle.ts +142 -0
  556. package/src/fonts/dev-middleware.ts +74 -0
  557. package/src/fonts/local.ts +1 -1
  558. package/src/fonts/pipeline.ts +314 -0
  559. package/src/fonts/transform.ts +317 -0
  560. package/src/fonts/types.ts +50 -1
  561. package/src/fonts/virtual-modules.ts +233 -0
  562. package/src/index.ts +409 -357
  563. package/src/params/codec-registry.ts +34 -0
  564. package/src/params/define-schema.ts +73 -0
  565. package/src/params/index.ts +11 -0
  566. package/src/params/resolve-schema.ts +88 -0
  567. package/src/plugin-context.ts +240 -0
  568. package/src/plugins/adapter-build.ts +12 -4
  569. package/src/plugins/build-manifest.ts +13 -2
  570. package/src/plugins/build-report.ts +16 -25
  571. package/src/plugins/client-chunks.ts +65 -0
  572. package/src/plugins/content.ts +1 -1
  573. package/src/plugins/dev-server.ts +175 -35
  574. package/src/plugins/entries.ts +111 -9
  575. package/src/plugins/fonts.ts +157 -654
  576. package/src/plugins/mdx.ts +47 -10
  577. package/src/plugins/routing.ts +374 -45
  578. package/src/plugins/server-bundle.ts +32 -1
  579. package/src/plugins/shims.ts +136 -35
  580. package/src/plugins/static-build.ts +15 -89
  581. package/src/routing/codegen-shared.ts +109 -0
  582. package/src/routing/codegen-types.ts +61 -0
  583. package/src/routing/codegen.ts +269 -179
  584. package/src/routing/convention-lint.ts +357 -0
  585. package/src/routing/index.ts +5 -1
  586. package/src/routing/interception.ts +1 -1
  587. package/src/routing/link-codegen.ts +308 -0
  588. package/src/routing/scanner.ts +107 -110
  589. package/src/routing/segment-classify.ts +188 -0
  590. package/src/routing/segment-codegen.ts +98 -0
  591. package/src/routing/types.ts +78 -25
  592. package/src/routing/walkers.ts +90 -0
  593. package/src/rsc-runtime/rsc.ts +2 -0
  594. package/src/rsc-runtime/ssr.ts +50 -0
  595. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  596. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  597. package/src/search-params/define.ts +538 -0
  598. package/src/search-params/index.ts +14 -20
  599. package/src/search-params/registry.ts +2 -2
  600. package/src/search-params/wrappers.ts +92 -0
  601. package/src/segment-params/define.ts +336 -0
  602. package/src/segment-params/index.ts +9 -0
  603. package/src/server/access-gate.tsx +76 -34
  604. package/src/server/action-client.ts +88 -15
  605. package/src/server/action-encryption.ts +144 -0
  606. package/src/server/action-handler.ts +112 -14
  607. package/src/server/actions.ts +10 -9
  608. package/src/server/als-registry.ts +55 -7
  609. package/src/server/asset-headers.ts +8 -34
  610. package/src/server/build-manifest.ts +10 -4
  611. package/src/server/coalesce-tick.ts +75 -0
  612. package/src/server/compress.ts +25 -7
  613. package/src/server/cookie-context.ts +468 -0
  614. package/src/server/cookie-parsing.ts +135 -0
  615. package/src/server/debug.ts +1 -1
  616. package/src/server/default-logger.ts +99 -0
  617. package/src/server/deny-boundary.ts +218 -0
  618. package/src/server/deny-renderer.ts +31 -50
  619. package/src/server/dev-source-map.ts +31 -0
  620. package/src/server/early-hints-sender.ts +3 -2
  621. package/src/server/early-hints.ts +36 -15
  622. package/src/server/error-boundary-wrapper.ts +74 -22
  623. package/src/server/fallback-error.ts +74 -102
  624. package/src/server/flight-injection-state.ts +113 -0
  625. package/src/server/flight-scripts.ts +62 -0
  626. package/src/server/flush.ts +2 -1
  627. package/src/server/form-data.ts +76 -0
  628. package/src/server/html-injector-core.ts +417 -0
  629. package/src/server/html-injectors.ts +235 -223
  630. package/src/server/index.ts +29 -183
  631. package/src/server/internal.ts +176 -0
  632. package/src/server/logger.ts +67 -36
  633. package/src/server/middleware-runner.ts +75 -4
  634. package/src/server/node-stream-transforms.ts +361 -0
  635. package/src/server/param-coercion.ts +206 -0
  636. package/src/server/pipeline-helpers.ts +204 -0
  637. package/src/server/pipeline-interception.ts +17 -16
  638. package/src/server/pipeline-metadata.ts +13 -0
  639. package/src/server/pipeline-outcome.ts +176 -0
  640. package/src/server/pipeline-phases.ts +460 -0
  641. package/src/server/pipeline.ts +154 -394
  642. package/src/server/port-resolution.ts +215 -0
  643. package/src/server/primitives.ts +111 -28
  644. package/src/server/render-timeout.ts +108 -0
  645. package/src/server/request-context.ts +168 -333
  646. package/src/server/route-element-builder.ts +309 -195
  647. package/src/server/route-handler.ts +24 -4
  648. package/src/server/route-matcher.ts +50 -231
  649. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  650. package/src/server/rsc-entry/api-handler.ts +16 -17
  651. package/src/server/rsc-entry/error-renderer.ts +305 -89
  652. package/src/server/rsc-entry/helpers.ts +137 -12
  653. package/src/server/rsc-entry/index.ts +316 -352
  654. package/src/server/rsc-entry/render-route.ts +307 -0
  655. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  656. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  657. package/src/server/rsc-entry/ssr-bridge.ts +14 -5
  658. package/src/server/rsc-entry/ssr-renderer.ts +187 -38
  659. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  660. package/src/server/safe-load.ts +60 -0
  661. package/src/server/sensitive-fields.ts +230 -0
  662. package/src/server/sitemap-generator.ts +338 -0
  663. package/src/server/sitemap-handler.ts +126 -0
  664. package/src/server/slot-resolver.ts +228 -246
  665. package/src/server/ssr-entry.ts +229 -32
  666. package/src/server/ssr-render.ts +289 -67
  667. package/src/server/ssr-wrappers.tsx +139 -0
  668. package/src/server/state-tree-diff.ts +4 -1
  669. package/src/server/status-code-resolver.ts +112 -128
  670. package/src/server/stream-utils.ts +213 -0
  671. package/src/server/tracing.ts +21 -10
  672. package/src/server/tree-builder.ts +202 -90
  673. package/src/server/tree-match.ts +198 -0
  674. package/src/server/types.ts +55 -6
  675. package/src/server/utils/escape-html.ts +20 -0
  676. package/src/server/version-skew.ts +104 -0
  677. package/src/shared/merge-search-params.ts +55 -0
  678. package/src/shims/font-google.ts +1 -1
  679. package/src/shims/font-local.ts +34 -0
  680. package/src/shims/headers.ts +5 -1
  681. package/src/shims/navigation-client.ts +4 -3
  682. package/src/shims/navigation.ts +14 -7
  683. package/src/utils/state-machine.ts +111 -0
  684. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  685. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  686. package/dist/_chunks/debug-gwlJkDuf.js +0 -108
  687. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  688. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  689. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  690. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  691. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  692. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  693. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  694. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  695. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  696. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  697. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  698. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  699. package/dist/cache/register-cached-function.d.ts +0 -17
  700. package/dist/cache/register-cached-function.d.ts.map +0 -1
  701. package/dist/client/browser-entry.d.ts +0 -21
  702. package/dist/client/browser-entry.d.ts.map +0 -1
  703. package/dist/client/link-status-provider.d.ts +0 -11
  704. package/dist/client/link-status-provider.d.ts.map +0 -1
  705. package/dist/client/transition-root.d.ts.map +0 -1
  706. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  707. package/dist/client/use-params.d.ts.map +0 -1
  708. package/dist/plugins/cache-transform.d.ts +0 -36
  709. package/dist/plugins/cache-transform.d.ts.map +0 -1
  710. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  711. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  712. package/dist/plugins/dev-logs.d.ts.map +0 -1
  713. package/dist/plugins/dynamic-transform.d.ts +0 -72
  714. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  715. package/dist/plugins/server-action-exports.d.ts +0 -26
  716. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  717. package/dist/routing/status-file-lint.d.ts +0 -33
  718. package/dist/routing/status-file-lint.d.ts.map +0 -1
  719. package/dist/search-params/analyze.d.ts +0 -54
  720. package/dist/search-params/analyze.d.ts.map +0 -1
  721. package/dist/search-params/builtin-codecs.d.ts +0 -105
  722. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  723. package/dist/search-params/codecs.d.ts +0 -53
  724. package/dist/search-params/codecs.d.ts.map +0 -1
  725. package/dist/search-params/create.d.ts +0 -106
  726. package/dist/search-params/create.d.ts.map +0 -1
  727. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  728. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  729. package/dist/server/dev-logger.d.ts.map +0 -1
  730. package/dist/server/dev-span-processor.d.ts.map +0 -1
  731. package/dist/server/dev-warnings.d.ts.map +0 -1
  732. package/dist/server/manifest-status-resolver.d.ts +0 -58
  733. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  734. package/dist/server/prerender.d.ts +0 -77
  735. package/dist/server/prerender.d.ts.map +0 -1
  736. package/dist/server/response-cache.d.ts +0 -54
  737. package/dist/server/response-cache.d.ts.map +0 -1
  738. package/dist/utils/directive-parser.d.ts +0 -70
  739. package/dist/utils/directive-parser.d.ts.map +0 -1
  740. package/src/cache/register-cached-function.ts +0 -103
  741. package/src/client/browser-entry.ts +0 -678
  742. package/src/client/link-status-provider.tsx +0 -30
  743. package/src/client/transition-root.tsx +0 -166
  744. package/src/plugins/cache-transform.ts +0 -199
  745. package/src/plugins/dev-error-overlay.ts +0 -230
  746. package/src/plugins/dynamic-transform.ts +0 -161
  747. package/src/plugins/server-action-exports.ts +0 -220
  748. package/src/routing/status-file-lint.ts +0 -112
  749. package/src/search-params/analyze.ts +0 -192
  750. package/src/search-params/builtin-codecs.ts +0 -228
  751. package/src/search-params/create.ts +0 -321
  752. package/src/server/dev-fetch-instrumentation.ts +0 -96
  753. package/src/server/dev-span-processor.ts +0 -78
  754. package/src/server/manifest-status-resolver.ts +0 -215
  755. package/src/server/prerender.ts +0 -139
  756. package/src/server/response-cache.ts +0 -410
  757. package/src/utils/directive-parser.ts +0 -529
  758. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -0,0 +1,303 @@
1
+ /**
2
+ * Config validation — validates timber.config.ts at startup.
3
+ *
4
+ * Runs in the plugin's configResolved hook (once, at startup/build).
5
+ * Each check produces a clear error message with the invalid value,
6
+ * what's expected, and how to fix it.
7
+ *
8
+ * Design doc: 18-build-system.md
9
+ */
10
+
11
+ import { createRequire } from 'node:module';
12
+ import type { TimberUserConfig } from './config-types.js';
13
+
14
+ // ─── Types ──────────────────────────────────────────────────────────────────
15
+
16
+ export interface ConfigError {
17
+ field: string;
18
+ message: string;
19
+ value?: unknown;
20
+ suggestion?: string;
21
+ }
22
+
23
+ // ─── Validation ─────────────────────────────────────────────────────────────
24
+
25
+ /**
26
+ * Validate a TimberUserConfig object.
27
+ *
28
+ * Returns an array of errors. Empty array means the config is valid.
29
+ * Does not throw — the caller decides how to surface errors.
30
+ */
31
+ export function validateConfig(config: TimberUserConfig): ConfigError[] {
32
+ const errors: ConfigError[] = [];
33
+
34
+ // output
35
+ if (config.output !== undefined && config.output !== 'server' && config.output !== 'static') {
36
+ errors.push({
37
+ field: 'output',
38
+ message: `Invalid output mode: "${String(config.output)}". Must be "server" or "static".`,
39
+ value: config.output,
40
+ suggestion: 'Use output: "server" (default) or output: "static" for static site generation.',
41
+ });
42
+ }
43
+
44
+ // pageExtensions
45
+ if (config.pageExtensions !== undefined) {
46
+ if (!Array.isArray(config.pageExtensions)) {
47
+ errors.push({
48
+ field: 'pageExtensions',
49
+ message: 'pageExtensions must be an array of strings.',
50
+ value: config.pageExtensions,
51
+ suggestion: 'Example: pageExtensions: ["tsx", "ts", "jsx", "js", "mdx"]',
52
+ });
53
+ } else {
54
+ for (const ext of config.pageExtensions) {
55
+ if (typeof ext !== 'string') {
56
+ errors.push({
57
+ field: 'pageExtensions',
58
+ message: `pageExtensions contains a non-string value: ${JSON.stringify(ext)}`,
59
+ value: ext,
60
+ });
61
+ break;
62
+ }
63
+ if (ext.startsWith('.')) {
64
+ errors.push({
65
+ field: 'pageExtensions',
66
+ message: `pageExtensions should not include the leading dot: "${ext}"`,
67
+ value: ext,
68
+ suggestion: `Use "${ext.slice(1)}" instead of "${ext}".`,
69
+ });
70
+ break;
71
+ }
72
+ }
73
+ }
74
+ }
75
+
76
+ // slowRequestMs
77
+ if (config.slowRequestMs !== undefined) {
78
+ if (typeof config.slowRequestMs !== 'number' || config.slowRequestMs < 0) {
79
+ errors.push({
80
+ field: 'slowRequestMs',
81
+ message: `slowRequestMs must be a non-negative number (got ${JSON.stringify(config.slowRequestMs)}).`,
82
+ value: config.slowRequestMs,
83
+ suggestion: 'Use slowRequestMs: 3000 (default) or slowRequestMs: 0 to disable.',
84
+ });
85
+ }
86
+ }
87
+
88
+ // renderTimeoutMs
89
+ if (config.renderTimeoutMs !== undefined) {
90
+ if (typeof config.renderTimeoutMs !== 'number' || config.renderTimeoutMs < 0) {
91
+ errors.push({
92
+ field: 'renderTimeoutMs',
93
+ message: `renderTimeoutMs must be a non-negative number (got ${JSON.stringify(config.renderTimeoutMs)}).`,
94
+ value: config.renderTimeoutMs,
95
+ suggestion: 'Use renderTimeoutMs: 30000 (default) or renderTimeoutMs: 0 to disable.',
96
+ });
97
+ }
98
+ }
99
+
100
+ // serverTiming
101
+ if (config.serverTiming !== undefined) {
102
+ if (
103
+ config.serverTiming !== 'detailed' &&
104
+ config.serverTiming !== 'total' &&
105
+ config.serverTiming !== false
106
+ ) {
107
+ errors.push({
108
+ field: 'serverTiming',
109
+ message: `Invalid serverTiming value: ${JSON.stringify(config.serverTiming)}.`,
110
+ value: config.serverTiming,
111
+ suggestion: 'Use "detailed", "total", or false.',
112
+ });
113
+ }
114
+ }
115
+
116
+ // devBrowserLogs
117
+ if (config.devBrowserLogs !== undefined) {
118
+ const valid = ['error', 'warn', 'info', 'none'];
119
+ if (!valid.includes(config.devBrowserLogs)) {
120
+ errors.push({
121
+ field: 'devBrowserLogs',
122
+ message: `Invalid devBrowserLogs value: ${JSON.stringify(config.devBrowserLogs)}.`,
123
+ value: config.devBrowserLogs,
124
+ suggestion: `Use one of: ${valid.map((v) => `"${v}"`).join(', ')}.`,
125
+ });
126
+ }
127
+ }
128
+
129
+ // sitemap
130
+ if (config.sitemap != null && typeof config.sitemap === 'object') {
131
+ if (config.sitemap.enabled && !config.sitemap.baseUrl) {
132
+ errors.push({
133
+ field: 'sitemap.baseUrl',
134
+ message: 'sitemap.baseUrl is required when sitemap is enabled.',
135
+ suggestion: 'Add sitemap: { enabled: true, baseUrl: "https://example.com" }.',
136
+ });
137
+ }
138
+ if (
139
+ config.sitemap.defaultPriority !== undefined &&
140
+ (config.sitemap.defaultPriority < 0 || config.sitemap.defaultPriority > 1)
141
+ ) {
142
+ errors.push({
143
+ field: 'sitemap.defaultPriority',
144
+ message: `sitemap.defaultPriority must be between 0.0 and 1.0 (got ${config.sitemap.defaultPriority}).`,
145
+ value: config.sitemap.defaultPriority,
146
+ });
147
+ }
148
+ }
149
+
150
+ // Unknown top-level keys
151
+ const knownKeys = new Set([
152
+ 'output',
153
+ 'debug',
154
+ 'clientJavascript',
155
+ 'adapter',
156
+ 'cacheHandler',
157
+ 'allowedOrigins',
158
+ 'csrf',
159
+ 'limits',
160
+ 'pageExtensions',
161
+ 'slowRequestMs',
162
+ 'renderTimeoutMs',
163
+ 'devBrowserLogs',
164
+ 'dev',
165
+ 'serverTiming',
166
+ 'appDir',
167
+ 'mdx',
168
+ 'actionEncryption',
169
+ 'reactCompiler',
170
+ 'sitemap',
171
+ 'buildDir',
172
+ 'topLoader',
173
+ ]);
174
+
175
+ for (const key of Object.keys(config)) {
176
+ if (!knownKeys.has(key)) {
177
+ errors.push({
178
+ field: key,
179
+ message: `Unknown config option: "${key}".`,
180
+ suggestion: `Check for typos. Known options: ${[...knownKeys].sort().join(', ')}.`,
181
+ });
182
+ }
183
+ }
184
+
185
+ return errors;
186
+ }
187
+
188
+ // ─── Formatting ─────────────────────────────────────────────────────────────
189
+
190
+ const RED = '\x1b[31m';
191
+ const BOLD = '\x1b[1m';
192
+ const DIM = '\x1b[2m';
193
+ const RESET = '\x1b[0m';
194
+
195
+ /**
196
+ * Format config errors for terminal output.
197
+ */
198
+ export function formatConfigErrors(errors: ConfigError[]): string {
199
+ if (errors.length === 0) return '';
200
+
201
+ const lines: string[] = [];
202
+ lines.push(
203
+ `${RED}${BOLD}[timber]${RESET} ${RED}${errors.length} config error${errors.length !== 1 ? 's' : ''} in timber.config.ts:${RESET}`
204
+ );
205
+
206
+ for (const err of errors) {
207
+ lines.push('');
208
+ lines.push(` ${RED}✗${RESET} ${BOLD}${err.field}${RESET}: ${err.message}`);
209
+ if (err.suggestion) {
210
+ lines.push(` ${DIM}${err.suggestion}${RESET}`);
211
+ }
212
+ }
213
+
214
+ return lines.join('\n');
215
+ }
216
+
217
+ // ─── Virtual Module Name Mapping ────────────────────────────────────────────
218
+
219
+ const VIRTUAL_MODULE_NAMES: Record<string, string> = {
220
+ 'virtual:timber-rsc-entry': 'RSC entry (server component handler)',
221
+ 'virtual:timber-ssr-entry': 'SSR entry (HTML renderer)',
222
+ 'virtual:timber-browser-entry': 'Browser entry (client hydration)',
223
+ 'virtual:timber-config': 'Runtime config (timber.config.ts)',
224
+ 'virtual:timber-route-manifest': 'Route manifest (app/ file tree)',
225
+ 'virtual:timber-instrumentation': 'Instrumentation (instrumentation.ts)',
226
+ 'virtual:timber-cache-handler': 'Cache handler (cacheHandler config)',
227
+ 'virtual:timber-build-manifest': 'Build manifest (asset mapping)',
228
+ };
229
+
230
+ /**
231
+ * Add timber-specific context to an error message that references virtual modules.
232
+ *
233
+ * If the error message contains a `virtual:timber-*` ID, appends a
234
+ * human-readable explanation. Does not replace the original message.
235
+ */
236
+ export function addVirtualModuleContext(errorMessage: string): string {
237
+ for (const [id, name] of Object.entries(VIRTUAL_MODULE_NAMES)) {
238
+ if (errorMessage.includes(id)) {
239
+ return `${errorMessage}\n\n [timber] This error references "${id}" — timber's ${name}.\n This is an internal module. The issue is likely in your app code or timber configuration.`;
240
+ }
241
+ }
242
+ return errorMessage;
243
+ }
244
+
245
+ // ─── Peer Dependency Check ──────────────────────────────────────────────────
246
+
247
+ interface PeerDepResult {
248
+ name: string;
249
+ status: 'ok' | 'missing';
250
+ }
251
+
252
+ /**
253
+ * Required (non-optional) peer dependencies that must be installed.
254
+ */
255
+ const REQUIRED_PEERS = ['react', 'react-dom', '@vitejs/plugin-react', '@vitejs/plugin-rsc'];
256
+
257
+ /**
258
+ * Check that required peer dependencies are installed.
259
+ *
260
+ * Uses require.resolve with a try/catch — no fs scanning.
261
+ * Returns only the missing packages.
262
+ */
263
+ export function checkPeerDependencies(projectRoot: string): PeerDepResult[] {
264
+ const results: PeerDepResult[] = [];
265
+
266
+ // Use createRequire from the project root to resolve as the user would.
267
+ // `createRequire` MUST be a top-level ESM import — inline `require('node:module')`
268
+ // throws "Dynamic require not supported" in ESM and the catch below would
269
+ // mark every peer as missing. Same class of bug as TIM-796.
270
+ const userRequire = createRequire(`${projectRoot}/package.json`);
271
+
272
+ for (const name of REQUIRED_PEERS) {
273
+ try {
274
+ userRequire.resolve(name);
275
+ results.push({ name, status: 'ok' });
276
+ } catch {
277
+ results.push({ name, status: 'missing' });
278
+ }
279
+ }
280
+
281
+ return results;
282
+ }
283
+
284
+ /**
285
+ * Format missing peer dependencies as an actionable warning.
286
+ */
287
+ export function formatMissingPeers(results: PeerDepResult[]): string {
288
+ const missing = results.filter((r) => r.status === 'missing');
289
+ if (missing.length === 0) return '';
290
+
291
+ const names = missing.map((r) => r.name);
292
+ const lines: string[] = [];
293
+ lines.push(`${RED}${BOLD}[timber]${RESET} ${RED}Missing required dependencies:${RESET}`);
294
+ lines.push('');
295
+ for (const name of names) {
296
+ lines.push(` ${RED}✗${RESET} ${name}`);
297
+ }
298
+ lines.push('');
299
+ lines.push(` ${DIM}Install with:${RESET}`);
300
+ lines.push(` ${BOLD}pnpm add ${names.join(' ')}${RESET}`);
301
+
302
+ return lines.join('\n');
303
+ }
@@ -1,13 +1,5 @@
1
- /**
2
- * @timber-js/app/content — Public API for content collections.
3
- *
4
- * Re-exports from content-collections and provides timber-specific utilities.
5
- * Users can import directly from 'content-collections' for generated types,
6
- * or use this module for the re-exports.
7
- *
8
- * Design doc: 20-content-collections.md §"Querying Collections"
9
- */
10
-
11
- // Re-export defineCollection and defineConfig for convenience.
12
- // Users can also import these directly from @content-collections/core.
13
- export { defineCollection, defineConfig } from '@content-collections/core';
1
+ // @timber-js/app/content entry point removed per TIM-722.
2
+ //
3
+ // Import defineCollection and defineConfig directly from @content-collections/core.
4
+ // This file is kept for the content plugin which uses other files in this directory.
5
+ export {};
@@ -2,58 +2,170 @@
2
2
  * defineCookie — typed cookie definitions.
3
3
  *
4
4
  * Bundles name + codec + options into a reusable CookieDefinition<T>
5
- * with .get(), .set(), .delete() server methods and a .useCookie() client hook.
5
+ * with sync .get(), .set(), .delete() isomorphic methods (server + client)
6
+ * and a .useCookie() client hook.
6
7
  *
7
- * Reuses the SearchParamCodec protocol via fromSchema() bridge.
8
- * Validation on read returns the codec default (never throws).
8
+ * Environment detection is call-time: on the server, getCookieJar() is
9
+ * used directly (ALS-backed). On the client, document.cookie helpers
10
+ * and the useCookie hook are used. No registration pattern — imports
11
+ * resolve via the shims plugin (client bundle gets a stub for
12
+ * @timber-js/app/server).
13
+ *
14
+ * Standard Schema objects (Zod, Valibot, ArkType) are auto-detected in
15
+ * the codec option — no explicit fromSchema() wrapper needed.
9
16
  *
10
17
  * See design/29-cookies.md §"Typed Cookies with Schema Validation"
11
18
  */
12
19
 
13
- import { cookies } from '#/server/request-context.js';
14
- import type { CookieOptions } from '#/server/request-context.js';
15
- import { useCookie as useRawCookie } from '#/client/use-cookie.js';
16
- import type { ClientCookieOptions } from '#/client/use-cookie.js';
20
+ import type { CookieOptions } from '../server/cookie-context.js';
21
+ import type { ClientCookieOptions } from '../client/use-cookie.js';
17
22
 
18
23
  // ─── Types ────────────────────────────────────────────────────────────────
19
24
 
25
+ import type { Codec } from '../codec.js';
26
+ import type { StandardSchemaV1 } from '../schema-bridge.js';
27
+
20
28
  /**
21
29
  * A codec that converts between string cookie values and typed values.
22
- * Intentionally identical to SearchParamCodec<T>.
30
+ * Type alias for the shared Codec<T> protocol.
23
31
  */
24
- export interface CookieCodec<T> {
25
- parse(value: string | string[] | undefined): T;
26
- serialize(value: T): string | null;
27
- }
32
+ export type CookieCodec<T> = Codec<T>;
28
33
 
29
34
  /** Options for defineCookie: codec + CookieOptions merged. */
30
- export interface DefineCookieOptions<T> extends Omit<CookieOptions, 'signed'> {
31
- /** Codec for parsing/serializing the cookie value. */
32
- codec: CookieCodec<T>;
33
- /** Sign the cookie with HMAC-SHA256. */
34
- signed?: boolean;
35
+ export interface DefineCookieOptions<T, HttpOnly extends boolean = boolean> extends CookieOptions {
36
+ /**
37
+ * Codec for parsing/serializing the cookie value.
38
+ * Accepts a Codec<T> or a Standard Schema object (Zod, Valibot, ArkType)
39
+ * which is auto-wrapped via fromSchema.
40
+ */
41
+ codec: CookieCodec<T> | StandardSchemaV1<T>;
42
+ /**
43
+ * Prevent client-side JS access. Default: true.
44
+ * When true (or omitted), client methods (useCookie, get/set/delete on
45
+ * client) are omitted from the return type and throw at runtime.
46
+ */
47
+ httpOnly?: HttpOnly;
35
48
  }
36
49
 
37
- /** A fully typed cookie definition with server and client methods. */
38
- export interface CookieDefinition<T> {
39
- /** The cookie name. */
50
+ /**
51
+ * Server-only cookie definition. Returned when httpOnly is true or omitted.
52
+ * Client methods are absent from the type — accessing them is a TS error.
53
+ */
54
+ export interface ServerOnlyCookieDefinition<T> {
40
55
  readonly name: string;
41
- /** The resolved cookie options (without codec). */
42
56
  readonly options: CookieOptions;
43
- /** The codec used for parsing/serializing. */
44
57
  readonly codec: CookieCodec<T>;
45
58
 
46
- /** Server: read the typed value from the current request. */
59
+ /** Read the typed value. Sync, isomorphic (server + client). */
47
60
  get(): T;
48
- /** Server: set the typed value on the response. */
61
+ /** Set the typed value. Sync, isomorphic (server + client). */
49
62
  set(value: T): void;
50
- /** Server: delete the cookie. */
63
+ /** Delete the cookie. Sync, isomorphic (server + client). */
51
64
  delete(): void;
65
+ }
52
66
 
67
+ /**
68
+ * Full cookie definition with client methods. Returned when httpOnly: false.
69
+ */
70
+ export interface CookieDefinition<T> extends ServerOnlyCookieDefinition<T> {
53
71
  /** Client: React hook for reading/writing this cookie. Returns [value, setter, deleter]. */
54
72
  useCookie(): [T, (value: T) => void, () => void];
55
73
  }
56
74
 
75
+ // ─── Direct Imports (no registration) ─────────────────────────────────────
76
+ //
77
+ // Server: getCookieJar is imported from @timber-js/app/server. In the client
78
+ // bundle, the shims plugin replaces @timber-js/app/server with a stub module
79
+ // where getCookieJar throws on call. We detect the environment at call time
80
+ // by trying getCookieJar() — if it throws the stub error, we fall through
81
+ // to the client path.
82
+ //
83
+ // Client: useCookie, getCookieValue, notifyCookieChange
84
+ // are imported from use-cookie.ts. These are safe in all environments (no
85
+ // node:async_hooks dependency).
86
+ //
87
+ // Schema: fromSchema is a pure function — safe in all environments.
88
+
89
+ import { getCookieJar } from '@timber-js/app/server';
90
+ import { fromSchema } from '../schema-bridge.js';
91
+ import {
92
+ useCookie as useRawCookie,
93
+ notifyCookieChange,
94
+ getCookieValue,
95
+ } from '../client/use-cookie.js';
96
+
97
+ // ─── Environment Detection ────────────────────────────────────────────────
98
+
99
+ /**
100
+ * Try to get the server cookie jar. Returns null if we're in the client
101
+ * environment (stub throws) or if there's no request context.
102
+ *
103
+ * On the server, getCookieJar() throws "outside of a request context" if
104
+ * called without an ALS store — this is a real error and is re-thrown.
105
+ * The client stub throws a different message — that's caught and returns null.
106
+ */
107
+ function tryGetServerCookieJar(): ReturnType<typeof getCookieJar> | null {
108
+ try {
109
+ return getCookieJar();
110
+ } catch (e) {
111
+ // Server-side "no request context" error — re-throw as a real bug.
112
+ if (e instanceof Error && e.message.includes('outside of a request context')) {
113
+ throw e;
114
+ }
115
+ // Client stub error or other — fall through to client path.
116
+ return null;
117
+ }
118
+ }
119
+
120
+ // ─── Client Cookie Helpers ────────────────────────────────────────────────
121
+
122
+ /** Write a cookie via document.cookie and notify useCookie subscribers. */
123
+ function setClientCookie(name: string, value: string, options?: ClientCookieOptions): void {
124
+ const parts: string[] = [`${name}=${encodeURIComponent(value)}`];
125
+ const path = options?.path ?? '/';
126
+ parts.push(`Path=${path}`);
127
+ if (options?.domain) parts.push(`Domain=${options.domain}`);
128
+ if (options?.maxAge !== undefined) parts.push(`Max-Age=${options.maxAge}`);
129
+ if (options?.expires) parts.push(`Expires=${options.expires.toUTCString()}`);
130
+ const sameSite = options?.sameSite ?? 'lax';
131
+ parts.push(`SameSite=${sameSite.charAt(0).toUpperCase()}${sameSite.slice(1)}`);
132
+ if (options?.secure) parts.push('Secure');
133
+ document.cookie = parts.join('; ');
134
+ notifyCookieChange(name);
135
+ }
136
+
137
+ /** Delete a cookie via document.cookie and notify useCookie subscribers. */
138
+ function deleteClientCookie(name: string, options?: ClientCookieOptions): void {
139
+ const path = options?.path ?? '/';
140
+ const domain = options?.domain;
141
+ let cookieStr = `${name}=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Path=${path}`;
142
+ if (domain) cookieStr += `; Domain=${domain}`;
143
+ document.cookie = cookieStr;
144
+ notifyCookieChange(name);
145
+ }
146
+
147
+ // ─── Standard Schema Auto-Detection ───────────────────────────────────────
148
+
149
+ function resolveCodec<T>(codecOrSchema: CookieCodec<T> | StandardSchemaV1<T>): CookieCodec<T> {
150
+ // If it has parse + serialize, it's already a Codec
151
+ if (
152
+ typeof (codecOrSchema as Codec<T>).parse === 'function' &&
153
+ typeof (codecOrSchema as Codec<T>).serialize === 'function'
154
+ ) {
155
+ return codecOrSchema as CookieCodec<T>;
156
+ }
157
+
158
+ // Auto-detect Standard Schema
159
+ if (typeof codecOrSchema === 'object' && codecOrSchema !== null && '~standard' in codecOrSchema) {
160
+ return fromSchema(codecOrSchema as StandardSchemaV1<unknown>) as CookieCodec<T>;
161
+ }
162
+
163
+ throw new Error(
164
+ '[timber] defineCookie: codec must be a Codec<T> (with parse/serialize methods) ' +
165
+ 'or a Standard Schema object (Zod, Valibot, ArkType).'
166
+ );
167
+ }
168
+
57
169
  // ─── Factory ──────────────────────────────────────────────────────────────
58
170
 
59
171
  /**
@@ -61,64 +173,130 @@ export interface CookieDefinition<T> {
61
173
  *
62
174
  * ```ts
63
175
  * import { defineCookie } from '@timber-js/app/cookies';
64
- * import { fromSchema } from '@timber-js/app/search-params';
65
176
  * import { z } from 'zod/v4';
66
177
  *
178
+ * // httpOnly: false — client methods available
67
179
  * export const themeCookie = defineCookie('theme', {
68
- * codec: fromSchema(z.enum(['light', 'dark', 'system']).default('system')),
180
+ * codec: z.enum(['light', 'dark', 'system']).default('system'),
69
181
  * httpOnly: false,
70
182
  * maxAge: 60 * 60 * 24 * 365,
71
183
  * });
184
+ *
185
+ * // Server or client
186
+ * const theme = themeCookie.get();
187
+ * themeCookie.set('dark');
188
+ *
189
+ * // Client hook
190
+ * const [theme, setTheme] = themeCookie.useCookie();
191
+ *
192
+ * // httpOnly: true (default) — server-only, no client methods
193
+ * export const sessionCookie = defineCookie('session', {
194
+ * codec: z.string(),
195
+ * });
196
+ * sessionCookie.get(); // works on server
197
+ * sessionCookie.useCookie(); // TS error — httpOnly cookie
72
198
  * ```
73
199
  */
74
- export function defineCookie<T>(
200
+ export function defineCookie<T, HttpOnly extends boolean = true>(
75
201
  name: string,
76
- options: DefineCookieOptions<T>
77
- ): CookieDefinition<T> {
78
- const { codec, ...cookieOpts } = options;
202
+ options: DefineCookieOptions<T, HttpOnly>
203
+ ): HttpOnly extends false ? CookieDefinition<T> : ServerOnlyCookieDefinition<T> {
204
+ const { codec: codecOrSchema, ...cookieOpts } = options;
205
+ const codec = resolveCodec(codecOrSchema);
79
206
  const resolvedOptions: CookieOptions = { ...cookieOpts };
207
+ const isHttpOnly = options.httpOnly !== false; // default true
208
+
209
+ function getClientOpts(): ClientCookieOptions {
210
+ return {
211
+ path: resolvedOptions.path,
212
+ domain: resolvedOptions.domain,
213
+ maxAge: resolvedOptions.maxAge,
214
+ expires: resolvedOptions.expires,
215
+ sameSite: resolvedOptions.sameSite,
216
+ secure: resolvedOptions.secure,
217
+ };
218
+ }
80
219
 
81
- return {
220
+ const base: ServerOnlyCookieDefinition<T> = {
82
221
  name,
83
222
  options: resolvedOptions,
84
223
  codec,
85
224
 
86
225
  get(): T {
87
- const jar = cookies();
88
- const raw = resolvedOptions.signed ? jar.getSigned(name) : jar.get(name);
226
+ const serverJar = tryGetServerCookieJar();
227
+ if (serverJar) {
228
+ return codec.parse(serverJar.get(name));
229
+ }
230
+ // Client path
231
+ if (isHttpOnly) {
232
+ throw new Error(
233
+ `[timber] defineCookie('${name}').get() cannot be used with httpOnly cookies — ` +
234
+ `the browser cannot access them. Set httpOnly: false to enable client access.`
235
+ );
236
+ }
237
+ const raw = getCookieValue(name);
89
238
  return codec.parse(raw);
90
239
  },
91
240
 
92
241
  set(value: T): void {
242
+ const serverJar = tryGetServerCookieJar();
243
+ if (serverJar) {
244
+ const serialized = codec.serialize(value);
245
+ if (serialized === null) {
246
+ serverJar.delete(name, {
247
+ path: resolvedOptions.path,
248
+ domain: resolvedOptions.domain,
249
+ });
250
+ } else {
251
+ serverJar.set(name, serialized, resolvedOptions);
252
+ }
253
+ return;
254
+ }
255
+ // Client path
256
+ if (isHttpOnly) {
257
+ throw new Error(
258
+ `[timber] defineCookie('${name}').set() cannot be used with httpOnly cookies — ` +
259
+ `the browser cannot access them. Set httpOnly: false to enable client access.`
260
+ );
261
+ }
93
262
  const serialized = codec.serialize(value);
94
263
  if (serialized === null) {
95
- cookies().delete(name, {
96
- path: resolvedOptions.path,
97
- domain: resolvedOptions.domain,
98
- });
264
+ deleteClientCookie(name, getClientOpts());
99
265
  } else {
100
- cookies().set(name, serialized, resolvedOptions);
266
+ setClientCookie(name, serialized, getClientOpts());
101
267
  }
102
268
  },
103
269
 
104
270
  delete(): void {
105
- cookies().delete(name, {
106
- path: resolvedOptions.path,
107
- domain: resolvedOptions.domain,
108
- });
271
+ const serverJar = tryGetServerCookieJar();
272
+ if (serverJar) {
273
+ serverJar.delete(name, {
274
+ path: resolvedOptions.path,
275
+ domain: resolvedOptions.domain,
276
+ });
277
+ return;
278
+ }
279
+ // Client path
280
+ if (isHttpOnly) {
281
+ throw new Error(
282
+ `[timber] defineCookie('${name}').delete() cannot be used with httpOnly cookies — ` +
283
+ `the browser cannot access them. Set httpOnly: false to enable client access.`
284
+ );
285
+ }
286
+ deleteClientCookie(name, getClientOpts());
109
287
  },
288
+ };
110
289
 
111
- useCookie(): [T, (value: T) => void, () => void] {
112
- // Extract client-safe options (no httpOnly — client cookies can't be httpOnly)
113
- const clientOpts: ClientCookieOptions = {
114
- path: resolvedOptions.path,
115
- domain: resolvedOptions.domain,
116
- maxAge: resolvedOptions.maxAge,
117
- expires: resolvedOptions.expires,
118
- sameSite: resolvedOptions.sameSite,
119
- secure: resolvedOptions.secure,
120
- };
290
+ if (isHttpOnly) {
291
+ return base as HttpOnly extends false ? CookieDefinition<T> : ServerOnlyCookieDefinition<T>;
292
+ }
121
293
 
294
+ // httpOnly: false — add useCookie client hook
295
+ const full: CookieDefinition<T> = {
296
+ ...base,
297
+
298
+ useCookie(): [T, (value: T) => void, () => void] {
299
+ const clientOpts = getClientOpts();
122
300
  const [raw, setRaw, deleteRaw] = useRawCookie(name, clientOpts);
123
301
  const parsed = codec.parse(raw);
124
302
 
@@ -134,4 +312,6 @@ export function defineCookie<T>(
134
312
  return [parsed, setTyped, deleteRaw];
135
313
  },
136
314
  };
315
+
316
+ return full as HttpOnly extends false ? CookieDefinition<T> : ServerOnlyCookieDefinition<T>;
137
317
  }