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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (801) hide show
  1. package/dist/_chunks/actions-DzFMnUAR.js +1147 -0
  2. package/dist/_chunks/actions-DzFMnUAR.js.map +1 -0
  3. package/dist/_chunks/build-output-helper-B20ZuTSA.js +102 -0
  4. package/dist/_chunks/build-output-helper-B20ZuTSA.js.map +1 -0
  5. package/dist/_chunks/cli-schema-sync-D2IpXicg.js +785 -0
  6. package/dist/_chunks/cli-schema-sync-D2IpXicg.js.map +1 -0
  7. package/dist/_chunks/cli-schema-sync-DH-M8Poy.js +2 -0
  8. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  9. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  10. package/dist/_chunks/define-C3RvHQPK.js +195 -0
  11. package/dist/_chunks/define-C3RvHQPK.js.map +1 -0
  12. package/dist/_chunks/define-DMVhsipD.js +112 -0
  13. package/dist/_chunks/define-DMVhsipD.js.map +1 -0
  14. package/dist/_chunks/fast-hash-D6hIVt1Y.js +36 -0
  15. package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +1 -0
  16. package/dist/_chunks/format-CfwjgPz9.js +14 -0
  17. package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
  18. package/dist/_chunks/handler-store-DjISKYEB.js +54 -0
  19. package/dist/_chunks/handler-store-DjISKYEB.js.map +1 -0
  20. package/dist/_chunks/href-validation-EZktELp8.js +124 -0
  21. package/dist/_chunks/href-validation-EZktELp8.js.map +1 -0
  22. package/dist/_chunks/logger-Dt-jQaBO.js +291 -0
  23. package/dist/_chunks/logger-Dt-jQaBO.js.map +1 -0
  24. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-BjepjefT.js} +32 -19
  25. package/dist/_chunks/metadata-routes-BjepjefT.js.map +1 -0
  26. package/dist/_chunks/navigation-root-DLc4s4ZC.js +103 -0
  27. package/dist/_chunks/navigation-root-DLc4s4ZC.js.map +1 -0
  28. package/dist/_chunks/registry-DbJPKoBp.js +20 -0
  29. package/dist/_chunks/registry-DbJPKoBp.js.map +1 -0
  30. package/dist/_chunks/resolve-schema-Dj8tQloi.js +77 -0
  31. package/dist/_chunks/resolve-schema-Dj8tQloi.js.map +1 -0
  32. package/dist/_chunks/router-ref-CtmF-aPv.js +28 -0
  33. package/dist/_chunks/router-ref-CtmF-aPv.js.map +1 -0
  34. package/dist/_chunks/schema-bridge-DK_89h8O.js +86 -0
  35. package/dist/_chunks/schema-bridge-DK_89h8O.js.map +1 -0
  36. package/dist/_chunks/segment-classify-CDDRVKs7.js +137 -0
  37. package/dist/_chunks/segment-classify-CDDRVKs7.js.map +1 -0
  38. package/dist/_chunks/segment-context-ZDnXDkbz.js +34 -0
  39. package/dist/_chunks/segment-context-ZDnXDkbz.js.map +1 -0
  40. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BOWsq18U.js} +1 -1
  41. package/dist/_chunks/ssr-data-BOWsq18U.js.map +1 -0
  42. package/dist/_chunks/tracing-M_zKubhk.js +358 -0
  43. package/dist/_chunks/tracing-M_zKubhk.js.map +1 -0
  44. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-CbeQmext.js} +7 -20
  45. package/dist/_chunks/use-query-states-CbeQmext.js.map +1 -0
  46. package/dist/_chunks/use-segment-params-D1CzlgBo.js +151 -0
  47. package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +1 -0
  48. package/dist/_chunks/validation-taUkvA4Q.js +113 -0
  49. package/dist/_chunks/validation-taUkvA4Q.js.map +1 -0
  50. package/dist/_chunks/walkers-7FBPM-hX.js +724 -0
  51. package/dist/_chunks/walkers-7FBPM-hX.js.map +1 -0
  52. package/dist/_chunks/{format-RyoGQL74.js → warnings-CNPXaypM.js} +6 -45
  53. package/dist/_chunks/warnings-CNPXaypM.js.map +1 -0
  54. package/dist/adapters/build-output-helper.d.ts +28 -0
  55. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  56. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  57. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  58. package/dist/adapters/cloudflare-dev.js +73 -0
  59. package/dist/adapters/cloudflare-dev.js.map +1 -0
  60. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  61. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  62. package/dist/adapters/cloudflare-kv-cache.js +95 -0
  63. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  64. package/dist/adapters/cloudflare.d.ts +148 -12
  65. package/dist/adapters/cloudflare.d.ts.map +1 -1
  66. package/dist/adapters/cloudflare.js +142 -38
  67. package/dist/adapters/cloudflare.js.map +1 -1
  68. package/dist/adapters/compress-module.d.ts.map +1 -1
  69. package/dist/adapters/nitro.d.ts +17 -1
  70. package/dist/adapters/nitro.d.ts.map +1 -1
  71. package/dist/adapters/nitro.js +154 -48
  72. package/dist/adapters/nitro.js.map +1 -1
  73. package/dist/adapters/shared.d.ts +16 -0
  74. package/dist/adapters/shared.d.ts.map +1 -0
  75. package/dist/cache/cache-api.d.ts +24 -0
  76. package/dist/cache/cache-api.d.ts.map +1 -0
  77. package/dist/cache/handler-store.d.ts +31 -0
  78. package/dist/cache/handler-store.d.ts.map +1 -0
  79. package/dist/cache/index.d.ts +23 -7
  80. package/dist/cache/index.d.ts.map +1 -1
  81. package/dist/cache/index.js +165 -117
  82. package/dist/cache/index.js.map +1 -1
  83. package/dist/cache/singleflight.d.ts +18 -1
  84. package/dist/cache/singleflight.d.ts.map +1 -1
  85. package/dist/cache/sizeof.d.ts +22 -0
  86. package/dist/cache/sizeof.d.ts.map +1 -0
  87. package/dist/cache/timber-cache.d.ts +1 -1
  88. package/dist/cache/timber-cache.d.ts.map +1 -1
  89. package/dist/cli-schema-sync.d.ts +39 -0
  90. package/dist/cli-schema-sync.d.ts.map +1 -0
  91. package/dist/cli.d.ts +14 -2
  92. package/dist/cli.d.ts.map +1 -1
  93. package/dist/cli.js +48 -6
  94. package/dist/cli.js.map +1 -1
  95. package/dist/client/browser-dev.d.ts +34 -1
  96. package/dist/client/browser-dev.d.ts.map +1 -1
  97. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  98. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  99. package/dist/client/browser-entry/hmr.d.ts +21 -0
  100. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  101. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  102. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  103. package/dist/client/browser-entry/index.d.ts +30 -0
  104. package/dist/client/browser-entry/index.d.ts.map +1 -0
  105. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  106. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  107. package/dist/client/browser-entry/router-init.d.ts +26 -0
  108. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  109. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  110. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  111. package/dist/client/browser-entry/scroll.d.ts +19 -0
  112. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  113. package/dist/client/error-boundary.d.ts +12 -5
  114. package/dist/client/error-boundary.d.ts.map +1 -1
  115. package/dist/client/error-boundary.js +29 -6
  116. package/dist/client/error-boundary.js.map +1 -1
  117. package/dist/client/error-reconstituter.d.ts +54 -0
  118. package/dist/client/error-reconstituter.d.ts.map +1 -0
  119. package/dist/client/form.d.ts +16 -27
  120. package/dist/client/form.d.ts.map +1 -1
  121. package/dist/client/history.d.ts +19 -4
  122. package/dist/client/history.d.ts.map +1 -1
  123. package/dist/client/index.d.ts +10 -24
  124. package/dist/client/index.d.ts.map +1 -1
  125. package/dist/client/index.js +183 -1134
  126. package/dist/client/index.js.map +1 -1
  127. package/dist/client/internal.d.ts +19 -0
  128. package/dist/client/internal.d.ts.map +1 -0
  129. package/dist/client/internal.js +925 -0
  130. package/dist/client/internal.js.map +1 -0
  131. package/dist/client/link-pending-store.d.ts +65 -0
  132. package/dist/client/link-pending-store.d.ts.map +1 -0
  133. package/dist/client/link.d.ts +69 -60
  134. package/dist/client/link.d.ts.map +1 -1
  135. package/dist/client/nav-link-store.d.ts +27 -0
  136. package/dist/client/nav-link-store.d.ts.map +1 -0
  137. package/dist/client/navigation-api-types.d.ts +90 -0
  138. package/dist/client/navigation-api-types.d.ts.map +1 -0
  139. package/dist/client/navigation-api.d.ts +115 -0
  140. package/dist/client/navigation-api.d.ts.map +1 -0
  141. package/dist/client/navigation-context.d.ts +14 -2
  142. package/dist/client/navigation-context.d.ts.map +1 -1
  143. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +46 -9
  144. package/dist/client/navigation-root.d.ts.map +1 -0
  145. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  146. package/dist/client/router-ref.d.ts +1 -1
  147. package/dist/client/router.d.ts +79 -10
  148. package/dist/client/router.d.ts.map +1 -1
  149. package/dist/client/rsc-fetch.d.ts +46 -3
  150. package/dist/client/rsc-fetch.d.ts.map +1 -1
  151. package/dist/client/segment-cache.d.ts +3 -1
  152. package/dist/client/segment-cache.d.ts.map +1 -1
  153. package/dist/client/segment-outlet.d.ts +49 -0
  154. package/dist/client/segment-outlet.d.ts.map +1 -0
  155. package/dist/client/segment-update-context.d.ts +21 -0
  156. package/dist/client/segment-update-context.d.ts.map +1 -0
  157. package/dist/client/shallow-url.d.ts +10 -0
  158. package/dist/client/shallow-url.d.ts.map +1 -0
  159. package/dist/client/ssr-data.d.ts +13 -4
  160. package/dist/client/ssr-data.d.ts.map +1 -1
  161. package/dist/client/stale-reload.d.ts +15 -0
  162. package/dist/client/stale-reload.d.ts.map +1 -1
  163. package/dist/client/state.d.ts +1 -1
  164. package/dist/client/top-loader.d.ts +5 -5
  165. package/dist/client/top-loader.d.ts.map +1 -1
  166. package/dist/client/use-cookie.d.ts +12 -0
  167. package/dist/client/use-cookie.d.ts.map +1 -1
  168. package/dist/client/use-link-status.d.ts +5 -5
  169. package/dist/client/use-link-status.d.ts.map +1 -1
  170. package/dist/client/use-pathname.d.ts.map +1 -1
  171. package/dist/client/use-pending-navigation.d.ts +23 -0
  172. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  173. package/dist/client/use-query-states.d.ts +1 -1
  174. package/dist/client/use-query-states.d.ts.map +1 -1
  175. package/dist/client/use-router.d.ts +1 -1
  176. package/dist/client/use-router.d.ts.map +1 -1
  177. package/dist/client/use-search-params.d.ts +7 -5
  178. package/dist/client/use-search-params.d.ts.map +1 -1
  179. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  180. package/dist/client/use-segment-params.d.ts.map +1 -0
  181. package/dist/codec.d.ts +69 -0
  182. package/dist/codec.d.ts.map +1 -0
  183. package/dist/codec.js +75 -0
  184. package/dist/codec.js.map +1 -0
  185. package/dist/config-types.d.ts +294 -0
  186. package/dist/config-types.d.ts.map +1 -0
  187. package/dist/config-validation.d.ts +51 -0
  188. package/dist/config-validation.d.ts.map +1 -0
  189. package/dist/content/index.d.ts +1 -10
  190. package/dist/content/index.d.ts.map +1 -1
  191. package/dist/content/index.js +0 -2
  192. package/dist/cookies/define-cookie.d.ts +58 -25
  193. package/dist/cookies/define-cookie.d.ts.map +1 -1
  194. package/dist/cookies/index.d.ts +2 -1
  195. package/dist/cookies/index.d.ts.map +1 -1
  196. package/dist/cookies/index.js +251 -36
  197. package/dist/cookies/index.js.map +1 -1
  198. package/dist/cookies/json-cookie.d.ts +64 -0
  199. package/dist/cookies/json-cookie.d.ts.map +1 -0
  200. package/dist/cookies/validation.d.ts +34 -0
  201. package/dist/cookies/validation.d.ts.map +1 -0
  202. package/dist/dev-tools/404-page.d.ts +46 -0
  203. package/dist/dev-tools/404-page.d.ts.map +1 -0
  204. package/dist/dev-tools/browser-logs.d.ts +84 -0
  205. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  206. package/dist/dev-tools/error-page.d.ts +58 -0
  207. package/dist/dev-tools/error-page.d.ts.map +1 -0
  208. package/dist/dev-tools/holding-server.d.ts +54 -0
  209. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  210. package/dist/dev-tools/index.d.ts +31 -0
  211. package/dist/dev-tools/index.d.ts.map +1 -0
  212. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  213. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  214. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  215. package/dist/dev-tools/logger.d.ts.map +1 -0
  216. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  217. package/dist/dev-tools/logs.d.ts.map +1 -0
  218. package/dist/dev-tools/overlay.d.ts +91 -0
  219. package/dist/dev-tools/overlay.d.ts.map +1 -0
  220. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  221. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  222. package/dist/dev-tools/terminal.d.ts +28 -0
  223. package/dist/dev-tools/terminal.d.ts.map +1 -0
  224. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  225. package/dist/dev-tools/warnings.d.ts.map +1 -0
  226. package/dist/fonts/ast.d.ts +98 -6
  227. package/dist/fonts/ast.d.ts.map +1 -1
  228. package/dist/fonts/bundle.d.ts +48 -0
  229. package/dist/fonts/bundle.d.ts.map +1 -0
  230. package/dist/fonts/dev-middleware.d.ts +22 -0
  231. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  232. package/dist/fonts/local.d.ts +1 -1
  233. package/dist/fonts/pipeline.d.ts +172 -0
  234. package/dist/fonts/pipeline.d.ts.map +1 -0
  235. package/dist/fonts/transform.d.ts +78 -0
  236. package/dist/fonts/transform.d.ts.map +1 -0
  237. package/dist/fonts/types.d.ts +47 -1
  238. package/dist/fonts/types.d.ts.map +1 -1
  239. package/dist/fonts/virtual-modules.d.ts +94 -0
  240. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  241. package/dist/index.d.ts +46 -180
  242. package/dist/index.d.ts.map +1 -1
  243. package/dist/index.js +5315 -12687
  244. package/dist/index.js.map +1 -1
  245. package/dist/params/codec-registry.d.ts +26 -0
  246. package/dist/params/codec-registry.d.ts.map +1 -0
  247. package/dist/params/define-schema.d.ts +81 -0
  248. package/dist/params/define-schema.d.ts.map +1 -0
  249. package/dist/params/index.d.ts +5 -0
  250. package/dist/params/index.d.ts.map +1 -0
  251. package/dist/params/index.js +34 -0
  252. package/dist/params/index.js.map +1 -0
  253. package/dist/params/resolve-schema.d.ts +34 -0
  254. package/dist/params/resolve-schema.d.ts.map +1 -0
  255. package/dist/plugin-context.d.ts +114 -0
  256. package/dist/plugin-context.d.ts.map +1 -0
  257. package/dist/plugins/adapter-build.d.ts +20 -1
  258. package/dist/plugins/adapter-build.d.ts.map +1 -1
  259. package/dist/plugins/build-manifest.d.ts +7 -3
  260. package/dist/plugins/build-manifest.d.ts.map +1 -1
  261. package/dist/plugins/build-report.d.ts +9 -7
  262. package/dist/plugins/build-report.d.ts.map +1 -1
  263. package/dist/plugins/cache.d.ts +31 -0
  264. package/dist/plugins/cache.d.ts.map +1 -0
  265. package/dist/plugins/client-chunks.d.ts +39 -0
  266. package/dist/plugins/client-chunks.d.ts.map +1 -0
  267. package/dist/plugins/cloudflare-wasm.d.ts +18 -0
  268. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  269. package/dist/plugins/content.d.ts +1 -1
  270. package/dist/plugins/content.d.ts.map +1 -1
  271. package/dist/plugins/dev-server.d.ts +1 -1
  272. package/dist/plugins/dev-server.d.ts.map +1 -1
  273. package/dist/plugins/entries.d.ts +1 -1
  274. package/dist/plugins/entries.d.ts.map +1 -1
  275. package/dist/plugins/fonts.d.ts +17 -73
  276. package/dist/plugins/fonts.d.ts.map +1 -1
  277. package/dist/plugins/mdx.d.ts +1 -1
  278. package/dist/plugins/mdx.d.ts.map +1 -1
  279. package/dist/plugins/routing.d.ts +1 -1
  280. package/dist/plugins/routing.d.ts.map +1 -1
  281. package/dist/plugins/server-bundle.d.ts.map +1 -1
  282. package/dist/plugins/shims.d.ts +6 -5
  283. package/dist/plugins/shims.d.ts.map +1 -1
  284. package/dist/plugins/static-build.d.ts +5 -26
  285. package/dist/plugins/static-build.d.ts.map +1 -1
  286. package/dist/routing/codegen-shared.d.ts +67 -0
  287. package/dist/routing/codegen-shared.d.ts.map +1 -0
  288. package/dist/routing/codegen-types.d.ts +60 -0
  289. package/dist/routing/codegen-types.d.ts.map +1 -0
  290. package/dist/routing/codegen.d.ts +7 -2
  291. package/dist/routing/codegen.d.ts.map +1 -1
  292. package/dist/routing/convention-lint.d.ts +41 -0
  293. package/dist/routing/convention-lint.d.ts.map +1 -0
  294. package/dist/routing/index.d.ts +7 -1
  295. package/dist/routing/index.d.ts.map +1 -1
  296. package/dist/routing/index.js +4 -2
  297. package/dist/routing/link-codegen.d.ts +90 -0
  298. package/dist/routing/link-codegen.d.ts.map +1 -0
  299. package/dist/routing/scanner.d.ts +1 -10
  300. package/dist/routing/scanner.d.ts.map +1 -1
  301. package/dist/routing/schema-validation.d.ts +35 -0
  302. package/dist/routing/schema-validation.d.ts.map +1 -0
  303. package/dist/routing/segment-classify.d.ts +75 -0
  304. package/dist/routing/segment-classify.d.ts.map +1 -0
  305. package/dist/routing/segment-codegen.d.ts +38 -0
  306. package/dist/routing/segment-codegen.d.ts.map +1 -0
  307. package/dist/routing/types.d.ts +77 -25
  308. package/dist/routing/types.d.ts.map +1 -1
  309. package/dist/routing/walkers.d.ts +51 -0
  310. package/dist/routing/walkers.d.ts.map +1 -0
  311. package/dist/rsc-runtime/rsc.d.ts +1 -1
  312. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  313. package/dist/rsc-runtime/ssr.d.ts +12 -0
  314. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  315. package/dist/schema-bridge.d.ts +76 -0
  316. package/dist/schema-bridge.d.ts.map +1 -0
  317. package/dist/search-params/define.d.ts +157 -0
  318. package/dist/search-params/define.d.ts.map +1 -0
  319. package/dist/search-params/index.d.ts +4 -7
  320. package/dist/search-params/index.d.ts.map +1 -1
  321. package/dist/search-params/index.js +34 -441
  322. package/dist/search-params/index.js.map +1 -1
  323. package/dist/search-params/registry.d.ts +2 -2
  324. package/dist/search-params/registry.d.ts.map +1 -1
  325. package/dist/search-params/wrappers.d.ts +53 -0
  326. package/dist/search-params/wrappers.d.ts.map +1 -0
  327. package/dist/segment-params/define.d.ts +89 -0
  328. package/dist/segment-params/define.d.ts.map +1 -0
  329. package/dist/segment-params/index.d.ts +3 -0
  330. package/dist/segment-params/index.d.ts.map +1 -0
  331. package/dist/segment-params/index.js +2 -0
  332. package/dist/server/access-gate.d.ts +8 -3
  333. package/dist/server/access-gate.d.ts.map +1 -1
  334. package/dist/server/action-client.d.ts +41 -6
  335. package/dist/server/action-client.d.ts.map +1 -1
  336. package/dist/server/action-encryption.d.ts +76 -0
  337. package/dist/server/action-encryption.d.ts.map +1 -0
  338. package/dist/server/action-handler.d.ts +35 -1
  339. package/dist/server/action-handler.d.ts.map +1 -1
  340. package/dist/server/actions.d.ts +6 -14
  341. package/dist/server/actions.d.ts.map +1 -1
  342. package/dist/server/als-registry.d.ts +70 -11
  343. package/dist/server/als-registry.d.ts.map +1 -1
  344. package/dist/server/asset-headers.d.ts +1 -15
  345. package/dist/server/asset-headers.d.ts.map +1 -1
  346. package/dist/server/body-limits.d.ts.map +1 -1
  347. package/dist/server/build-manifest.d.ts +8 -2
  348. package/dist/server/build-manifest.d.ts.map +1 -1
  349. package/dist/server/coalesce-tick.d.ts +40 -0
  350. package/dist/server/coalesce-tick.d.ts.map +1 -0
  351. package/dist/server/cookie-context.d.ts +170 -0
  352. package/dist/server/cookie-context.d.ts.map +1 -0
  353. package/dist/server/cookie-parsing.d.ts +51 -0
  354. package/dist/server/cookie-parsing.d.ts.map +1 -0
  355. package/dist/server/csrf.d.ts +3 -2
  356. package/dist/server/csrf.d.ts.map +1 -1
  357. package/dist/server/default-logger.d.ts +22 -0
  358. package/dist/server/default-logger.d.ts.map +1 -0
  359. package/dist/server/deny-boundary.d.ts +90 -0
  360. package/dist/server/deny-boundary.d.ts.map +1 -0
  361. package/dist/server/deny-renderer.d.ts +1 -1
  362. package/dist/server/deny-renderer.d.ts.map +1 -1
  363. package/dist/server/dev-source-map.d.ts +22 -0
  364. package/dist/server/dev-source-map.d.ts.map +1 -0
  365. package/dist/server/early-hints-sender.d.ts.map +1 -1
  366. package/dist/server/early-hints.d.ts +13 -11
  367. package/dist/server/early-hints.d.ts.map +1 -1
  368. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  369. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  370. package/dist/server/fallback-error.d.ts +12 -7
  371. package/dist/server/fallback-error.d.ts.map +1 -1
  372. package/dist/server/flight-injection-state.d.ts +66 -0
  373. package/dist/server/flight-injection-state.d.ts.map +1 -0
  374. package/dist/server/flight-scripts.d.ts +42 -0
  375. package/dist/server/flight-scripts.d.ts.map +1 -0
  376. package/dist/server/flush.d.ts.map +1 -1
  377. package/dist/server/form-data.d.ts +29 -0
  378. package/dist/server/form-data.d.ts.map +1 -1
  379. package/dist/server/html-injector-core.d.ts +213 -0
  380. package/dist/server/html-injector-core.d.ts.map +1 -0
  381. package/dist/server/html-injectors.d.ts +81 -41
  382. package/dist/server/html-injectors.d.ts.map +1 -1
  383. package/dist/server/index.d.ts +10 -46
  384. package/dist/server/index.d.ts.map +1 -1
  385. package/dist/server/index.js +170 -2911
  386. package/dist/server/index.js.map +1 -1
  387. package/dist/server/internal.d.ts +48 -0
  388. package/dist/server/internal.d.ts.map +1 -0
  389. package/dist/server/internal.js +3126 -0
  390. package/dist/server/internal.js.map +1 -0
  391. package/dist/server/logger.d.ts +39 -7
  392. package/dist/server/logger.d.ts.map +1 -1
  393. package/dist/server/metadata-routes.d.ts +23 -7
  394. package/dist/server/metadata-routes.d.ts.map +1 -1
  395. package/dist/server/middleware-runner.d.ts +36 -4
  396. package/dist/server/middleware-runner.d.ts.map +1 -1
  397. package/dist/server/node-stream-transforms.d.ts +112 -0
  398. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  399. package/dist/server/param-coercion.d.ts +54 -0
  400. package/dist/server/param-coercion.d.ts.map +1 -0
  401. package/dist/server/pipeline-helpers.d.ts +95 -0
  402. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  403. package/dist/server/pipeline-interception.d.ts +1 -1
  404. package/dist/server/pipeline-interception.d.ts.map +1 -1
  405. package/dist/server/pipeline-metadata.d.ts +6 -0
  406. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  407. package/dist/server/pipeline-outcome.d.ts +49 -0
  408. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  409. package/dist/server/pipeline-phases.d.ts +56 -0
  410. package/dist/server/pipeline-phases.d.ts.map +1 -0
  411. package/dist/server/pipeline.d.ts +111 -19
  412. package/dist/server/pipeline.d.ts.map +1 -1
  413. package/dist/server/port-resolution.d.ts +117 -0
  414. package/dist/server/port-resolution.d.ts.map +1 -0
  415. package/dist/server/primitives.d.ts +74 -20
  416. package/dist/server/primitives.d.ts.map +1 -1
  417. package/dist/server/render-timeout.d.ts +51 -0
  418. package/dist/server/render-timeout.d.ts.map +1 -0
  419. package/dist/server/request-context.d.ts +62 -107
  420. package/dist/server/request-context.d.ts.map +1 -1
  421. package/dist/server/route-element-builder.d.ts +28 -2
  422. package/dist/server/route-element-builder.d.ts.map +1 -1
  423. package/dist/server/route-handler.d.ts.map +1 -1
  424. package/dist/server/route-matcher.d.ts +25 -36
  425. package/dist/server/route-matcher.d.ts.map +1 -1
  426. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  427. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  428. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  429. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  430. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  431. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  432. package/dist/server/rsc-entry/helpers.d.ts +50 -6
  433. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  434. package/dist/server/rsc-entry/index.d.ts +19 -8
  435. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  436. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  437. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  438. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  439. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  440. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  441. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  442. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  443. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  444. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  445. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  446. package/dist/server/rsc-entry/ssr-renderer.d.ts +34 -4
  447. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  448. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  449. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  450. package/dist/server/safe-load.d.ts +46 -0
  451. package/dist/server/safe-load.d.ts.map +1 -0
  452. package/dist/server/sensitive-fields.d.ts +74 -0
  453. package/dist/server/sensitive-fields.d.ts.map +1 -0
  454. package/dist/server/sitemap-generator.d.ts +129 -0
  455. package/dist/server/sitemap-generator.d.ts.map +1 -0
  456. package/dist/server/sitemap-handler.d.ts +22 -0
  457. package/dist/server/sitemap-handler.d.ts.map +1 -0
  458. package/dist/server/slot-resolver.d.ts +1 -1
  459. package/dist/server/slot-resolver.d.ts.map +1 -1
  460. package/dist/server/ssr-bridge-types.d.ts +121 -0
  461. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  462. package/dist/server/ssr-entry.d.ts +2 -43
  463. package/dist/server/ssr-entry.d.ts.map +1 -1
  464. package/dist/server/ssr-render.d.ts +64 -21
  465. package/dist/server/ssr-render.d.ts.map +1 -1
  466. package/dist/server/ssr-wrappers.d.ts +50 -0
  467. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  468. package/dist/server/state-tree-diff.d.ts +12 -5
  469. package/dist/server/state-tree-diff.d.ts.map +1 -1
  470. package/dist/server/status-code-resolver.d.ts +16 -11
  471. package/dist/server/status-code-resolver.d.ts.map +1 -1
  472. package/dist/server/stream-utils.d.ts +36 -0
  473. package/dist/server/stream-utils.d.ts.map +1 -0
  474. package/dist/server/tracing.d.ts +5 -5
  475. package/dist/server/tracing.d.ts.map +1 -1
  476. package/dist/server/tree-builder.d.ts +62 -30
  477. package/dist/server/tree-builder.d.ts.map +1 -1
  478. package/dist/server/tree-match.d.ts +49 -0
  479. package/dist/server/tree-match.d.ts.map +1 -0
  480. package/dist/server/types.d.ts +71 -6
  481. package/dist/server/types.d.ts.map +1 -1
  482. package/dist/server/utils/escape-html.d.ts +14 -0
  483. package/dist/server/utils/escape-html.d.ts.map +1 -0
  484. package/dist/server/version-skew.d.ts +61 -0
  485. package/dist/server/version-skew.d.ts.map +1 -0
  486. package/dist/shared/href-validation.d.ts +38 -0
  487. package/dist/shared/href-validation.d.ts.map +1 -0
  488. package/dist/shared/merge-search-params.d.ts +22 -0
  489. package/dist/shared/merge-search-params.d.ts.map +1 -0
  490. package/dist/shims/font-google.d.ts +1 -1
  491. package/dist/shims/font-google.d.ts.map +1 -1
  492. package/dist/shims/font-google.js +42 -0
  493. package/dist/shims/font-google.js.map +1 -0
  494. package/dist/shims/font-local.d.ts +26 -0
  495. package/dist/shims/font-local.d.ts.map +1 -0
  496. package/dist/shims/font-local.js +20 -0
  497. package/dist/shims/font-local.js.map +1 -0
  498. package/dist/shims/headers.d.ts +2 -1
  499. package/dist/shims/headers.d.ts.map +1 -1
  500. package/dist/shims/image.d.ts +1 -1
  501. package/dist/shims/navigation-client.d.ts +3 -1
  502. package/dist/shims/navigation-client.d.ts.map +1 -1
  503. package/dist/shims/navigation.d.ts +11 -5
  504. package/dist/shims/navigation.d.ts.map +1 -1
  505. package/dist/utils/state-machine.d.ts +80 -0
  506. package/dist/utils/state-machine.d.ts.map +1 -0
  507. package/package.json +63 -22
  508. package/src/adapters/build-output-helper.ts +139 -0
  509. package/src/adapters/cloudflare-dev.ts +177 -0
  510. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  511. package/src/adapters/cloudflare.ts +350 -76
  512. package/src/adapters/compress-module.ts +24 -4
  513. package/src/adapters/nitro.ts +147 -60
  514. package/src/adapters/shared.ts +40 -0
  515. package/src/adapters/wrangler.d.ts +7 -0
  516. package/src/cache/cache-api.ts +39 -0
  517. package/src/cache/handler-store.ts +68 -0
  518. package/src/cache/index.ts +81 -18
  519. package/src/cache/singleflight.ts +62 -4
  520. package/src/cache/sizeof.ts +33 -0
  521. package/src/cache/timber-cache.ts +52 -24
  522. package/src/cli-schema-sync.ts +295 -0
  523. package/src/cli.ts +76 -8
  524. package/src/client/browser-dev.ts +153 -1
  525. package/src/client/browser-entry/action-dispatch.ts +125 -0
  526. package/src/client/browser-entry/hmr.ts +81 -0
  527. package/src/client/browser-entry/hydrate.ts +153 -0
  528. package/src/client/browser-entry/index.ts +151 -0
  529. package/src/client/browser-entry/post-hydration.ts +113 -0
  530. package/src/client/browser-entry/router-init.ts +219 -0
  531. package/src/client/browser-entry/rsc-stream.ts +157 -0
  532. package/src/client/browser-entry/scroll.ts +27 -0
  533. package/src/client/error-boundary.tsx +99 -22
  534. package/src/client/error-reconstituter.tsx +65 -0
  535. package/src/client/form.tsx +31 -32
  536. package/src/client/history.ts +26 -4
  537. package/src/client/index.ts +67 -45
  538. package/src/client/internal.ts +58 -0
  539. package/src/client/link-pending-store.ts +116 -0
  540. package/src/client/link.tsx +343 -150
  541. package/src/client/nav-link-store.ts +37 -0
  542. package/src/client/navigation-api-types.ts +112 -0
  543. package/src/client/navigation-api.ts +338 -0
  544. package/src/client/navigation-context.ts +35 -7
  545. package/src/client/navigation-root.tsx +347 -0
  546. package/src/client/nuqs-adapter.tsx +16 -3
  547. package/src/client/router-ref.ts +1 -1
  548. package/src/client/router.ts +418 -128
  549. package/src/client/rsc-fetch.ts +208 -10
  550. package/src/client/segment-cache.ts +6 -3
  551. package/src/client/segment-outlet.tsx +77 -0
  552. package/src/client/segment-update-context.ts +42 -0
  553. package/src/client/shallow-url.ts +22 -0
  554. package/src/client/ssr-data.ts +13 -5
  555. package/src/client/stale-reload.ts +72 -3
  556. package/src/client/state.ts +2 -2
  557. package/src/client/top-loader.tsx +11 -9
  558. package/src/client/use-cookie.ts +31 -2
  559. package/src/client/use-link-status.ts +7 -7
  560. package/src/client/use-pathname.ts +1 -0
  561. package/src/client/use-pending-navigation.ts +40 -0
  562. package/src/client/use-query-states.ts +9 -3
  563. package/src/client/use-router.ts +4 -1
  564. package/src/client/use-search-params.ts +26 -44
  565. package/src/client/{use-params.ts → use-segment-params.ts} +9 -6
  566. package/src/codec.ts +147 -0
  567. package/src/config-types.ts +292 -0
  568. package/src/config-validation.ts +303 -0
  569. package/src/content/index.ts +5 -13
  570. package/src/cookies/define-cookie.ts +233 -53
  571. package/src/cookies/index.ts +12 -1
  572. package/src/cookies/json-cookie.ts +105 -0
  573. package/src/cookies/validation.ts +192 -0
  574. package/src/dev-tools/404-page.ts +387 -0
  575. package/src/dev-tools/browser-logs.ts +291 -0
  576. package/src/dev-tools/error-page.ts +507 -0
  577. package/src/dev-tools/holding-server.ts +187 -0
  578. package/src/dev-tools/index.ts +90 -0
  579. package/src/dev-tools/instrumentation.ts +176 -0
  580. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  581. package/src/dev-tools/overlay.ts +469 -0
  582. package/src/dev-tools/stack-classifier.ts +75 -0
  583. package/src/dev-tools/terminal.ts +183 -0
  584. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
  585. package/src/fonts/ast.ts +525 -16
  586. package/src/fonts/bundle.ts +131 -0
  587. package/src/fonts/dev-middleware.ts +74 -0
  588. package/src/fonts/local.ts +3 -3
  589. package/src/fonts/pipeline.ts +337 -0
  590. package/src/fonts/transform.ts +317 -0
  591. package/src/fonts/types.ts +52 -1
  592. package/src/fonts/virtual-modules.ts +235 -0
  593. package/src/index.ts +415 -345
  594. package/src/params/codec-registry.ts +34 -0
  595. package/src/params/define-schema.ts +115 -0
  596. package/src/params/index.ts +17 -0
  597. package/src/params/resolve-schema.ts +116 -0
  598. package/src/plugin-context.ts +247 -0
  599. package/src/plugins/adapter-build.ts +98 -4
  600. package/src/plugins/build-manifest.ts +168 -23
  601. package/src/plugins/build-report.ts +16 -25
  602. package/src/plugins/cache.ts +180 -0
  603. package/src/plugins/client-chunks.ts +113 -0
  604. package/src/plugins/cloudflare-wasm.ts +103 -0
  605. package/src/plugins/content.ts +1 -1
  606. package/src/plugins/dev-server.ts +179 -37
  607. package/src/plugins/entries.ts +110 -8
  608. package/src/plugins/fonts.ts +167 -655
  609. package/src/plugins/mdx.ts +47 -10
  610. package/src/plugins/routing.ts +386 -47
  611. package/src/plugins/server-bundle.ts +59 -3
  612. package/src/plugins/shims.ts +136 -35
  613. package/src/plugins/static-build.ts +15 -89
  614. package/src/routing/codegen-shared.ts +115 -0
  615. package/src/routing/codegen-types.ts +61 -0
  616. package/src/routing/codegen.ts +321 -177
  617. package/src/routing/convention-lint.ts +357 -0
  618. package/src/routing/index.ts +10 -1
  619. package/src/routing/interception.ts +1 -1
  620. package/src/routing/link-codegen.ts +310 -0
  621. package/src/routing/scanner.ts +165 -110
  622. package/src/routing/schema-validation.ts +149 -0
  623. package/src/routing/segment-classify.ts +188 -0
  624. package/src/routing/segment-codegen.ts +98 -0
  625. package/src/routing/types.ts +78 -25
  626. package/src/routing/walkers.ts +90 -0
  627. package/src/rsc-runtime/rsc.ts +2 -0
  628. package/src/rsc-runtime/ssr.ts +50 -0
  629. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  630. package/src/{search-params/codecs.ts → schema-bridge.ts} +60 -22
  631. package/src/search-params/define.ts +538 -0
  632. package/src/search-params/index.ts +14 -20
  633. package/src/search-params/registry.ts +2 -2
  634. package/src/search-params/wrappers.ts +92 -0
  635. package/src/segment-params/define.ts +309 -0
  636. package/src/segment-params/index.ts +9 -0
  637. package/src/server/access-gate.tsx +76 -34
  638. package/src/server/action-client.ts +119 -28
  639. package/src/server/action-encryption.ts +144 -0
  640. package/src/server/action-handler.ts +112 -14
  641. package/src/server/actions.ts +34 -26
  642. package/src/server/als-registry.ts +108 -20
  643. package/src/server/asset-headers.ts +8 -34
  644. package/src/server/body-limits.ts +10 -2
  645. package/src/server/build-manifest.ts +17 -4
  646. package/src/server/coalesce-tick.ts +75 -0
  647. package/src/server/compress.ts +25 -7
  648. package/src/server/cookie-context.ts +473 -0
  649. package/src/server/cookie-parsing.ts +135 -0
  650. package/src/server/csrf.ts +39 -6
  651. package/src/server/default-logger.ts +99 -0
  652. package/src/server/deny-boundary.ts +218 -0
  653. package/src/server/deny-renderer.ts +32 -52
  654. package/src/server/dev-source-map.ts +31 -0
  655. package/src/server/early-hints-sender.ts +3 -2
  656. package/src/server/early-hints.ts +35 -27
  657. package/src/server/error-boundary-wrapper.ts +74 -22
  658. package/src/server/fallback-error.ts +74 -102
  659. package/src/server/flight-injection-state.ts +113 -0
  660. package/src/server/flight-scripts.ts +62 -0
  661. package/src/server/flush.ts +2 -1
  662. package/src/server/form-data.ts +101 -5
  663. package/src/server/html-injector-core.ts +418 -0
  664. package/src/server/html-injectors.ts +238 -223
  665. package/src/server/index.ts +29 -183
  666. package/src/server/internal.ts +182 -0
  667. package/src/server/logger.ts +67 -36
  668. package/src/server/metadata-routes.ts +44 -19
  669. package/src/server/middleware-runner.ts +75 -4
  670. package/src/server/node-stream-transforms.ts +361 -0
  671. package/src/server/param-coercion.ts +206 -0
  672. package/src/server/pipeline-helpers.ts +204 -0
  673. package/src/server/pipeline-interception.ts +32 -18
  674. package/src/server/pipeline-metadata.ts +13 -0
  675. package/src/server/pipeline-outcome.ts +197 -0
  676. package/src/server/pipeline-phases.ts +527 -0
  677. package/src/server/pipeline.ts +201 -382
  678. package/src/server/port-resolution.ts +215 -0
  679. package/src/server/primitives.ts +130 -46
  680. package/src/server/render-timeout.ts +108 -0
  681. package/src/server/request-context.ts +168 -337
  682. package/src/server/route-element-builder.ts +437 -208
  683. package/src/server/route-handler.ts +31 -4
  684. package/src/server/route-matcher.ts +128 -277
  685. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  686. package/src/server/rsc-entry/api-handler.ts +69 -32
  687. package/src/server/rsc-entry/error-renderer.ts +316 -89
  688. package/src/server/rsc-entry/helpers.ts +155 -26
  689. package/src/server/rsc-entry/index.ts +283 -329
  690. package/src/server/rsc-entry/render-route.ts +313 -0
  691. package/src/server/rsc-entry/revalidate-renderer.ts +344 -0
  692. package/src/server/rsc-entry/rsc-payload.ts +65 -22
  693. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  694. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  695. package/src/server/rsc-entry/ssr-renderer.ts +271 -41
  696. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  697. package/src/server/safe-load.ts +60 -0
  698. package/src/server/sensitive-fields.ts +230 -0
  699. package/src/server/sitemap-generator.ts +338 -0
  700. package/src/server/sitemap-handler.ts +148 -0
  701. package/src/server/slot-resolver.ts +234 -246
  702. package/src/server/ssr-bridge-types.ts +124 -0
  703. package/src/server/ssr-entry.ts +217 -78
  704. package/src/server/ssr-render.ts +344 -71
  705. package/src/server/ssr-wrappers.tsx +141 -0
  706. package/src/server/state-tree-diff.ts +30 -23
  707. package/src/server/status-code-resolver.ts +112 -128
  708. package/src/server/stream-utils.ts +213 -0
  709. package/src/server/tracing.ts +21 -10
  710. package/src/server/tree-builder.ts +204 -90
  711. package/src/server/tree-match.ts +210 -0
  712. package/src/server/types.ts +78 -9
  713. package/src/server/utils/escape-html.ts +20 -0
  714. package/src/server/version-skew.ts +104 -0
  715. package/src/shared/href-validation.ts +127 -0
  716. package/src/shared/merge-search-params.ts +55 -0
  717. package/src/shims/font-google.ts +1 -1
  718. package/src/shims/font-local.ts +34 -0
  719. package/src/shims/headers.ts +5 -1
  720. package/src/shims/navigation-client.ts +4 -3
  721. package/src/shims/navigation.ts +14 -7
  722. package/src/utils/state-machine.ts +111 -0
  723. package/LICENSE +0 -8
  724. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  725. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  726. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  727. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  728. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  729. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  730. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  731. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  732. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  733. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  734. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  735. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  736. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  737. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  738. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  739. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  740. package/dist/cache/register-cached-function.d.ts +0 -17
  741. package/dist/cache/register-cached-function.d.ts.map +0 -1
  742. package/dist/client/browser-entry.d.ts +0 -21
  743. package/dist/client/browser-entry.d.ts.map +0 -1
  744. package/dist/client/link-status-provider.d.ts +0 -11
  745. package/dist/client/link-status-provider.d.ts.map +0 -1
  746. package/dist/client/segment-merger.d.ts +0 -119
  747. package/dist/client/segment-merger.d.ts.map +0 -1
  748. package/dist/client/transition-root.d.ts.map +0 -1
  749. package/dist/client/use-navigation-pending.d.ts +0 -26
  750. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  751. package/dist/client/use-params.d.ts.map +0 -1
  752. package/dist/plugins/cache-transform.d.ts +0 -36
  753. package/dist/plugins/cache-transform.d.ts.map +0 -1
  754. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  755. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  756. package/dist/plugins/dev-logs.d.ts.map +0 -1
  757. package/dist/plugins/dynamic-transform.d.ts +0 -72
  758. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  759. package/dist/plugins/server-action-exports.d.ts +0 -26
  760. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  761. package/dist/routing/status-file-lint.d.ts +0 -33
  762. package/dist/routing/status-file-lint.d.ts.map +0 -1
  763. package/dist/search-params/analyze.d.ts +0 -54
  764. package/dist/search-params/analyze.d.ts.map +0 -1
  765. package/dist/search-params/builtin-codecs.d.ts +0 -105
  766. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  767. package/dist/search-params/codecs.d.ts +0 -53
  768. package/dist/search-params/codecs.d.ts.map +0 -1
  769. package/dist/search-params/create.d.ts +0 -106
  770. package/dist/search-params/create.d.ts.map +0 -1
  771. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  772. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  773. package/dist/server/dev-logger.d.ts.map +0 -1
  774. package/dist/server/dev-span-processor.d.ts.map +0 -1
  775. package/dist/server/dev-warnings.d.ts.map +0 -1
  776. package/dist/server/manifest-status-resolver.d.ts +0 -58
  777. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  778. package/dist/server/prerender.d.ts +0 -77
  779. package/dist/server/prerender.d.ts.map +0 -1
  780. package/dist/utils/directive-parser.d.ts +0 -70
  781. package/dist/utils/directive-parser.d.ts.map +0 -1
  782. package/src/cache/register-cached-function.ts +0 -103
  783. package/src/client/browser-entry.ts +0 -678
  784. package/src/client/link-status-provider.tsx +0 -30
  785. package/src/client/segment-merger.ts +0 -339
  786. package/src/client/transition-root.tsx +0 -166
  787. package/src/client/use-navigation-pending.ts +0 -38
  788. package/src/plugins/cache-transform.ts +0 -199
  789. package/src/plugins/dev-error-overlay.ts +0 -230
  790. package/src/plugins/dynamic-transform.ts +0 -161
  791. package/src/plugins/server-action-exports.ts +0 -220
  792. package/src/routing/status-file-lint.ts +0 -112
  793. package/src/search-params/analyze.ts +0 -192
  794. package/src/search-params/builtin-codecs.ts +0 -228
  795. package/src/search-params/create.ts +0 -321
  796. package/src/server/dev-fetch-instrumentation.ts +0 -96
  797. package/src/server/dev-span-processor.ts +0 -78
  798. package/src/server/manifest-status-resolver.ts +0 -215
  799. package/src/server/prerender.ts +0 -139
  800. package/src/utils/directive-parser.ts +0 -529
  801. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -1,11 +1,21 @@
1
1
  /**
2
- * Built-in codecs and the fromSchema bridge for Standard Schema-compatible
3
- * validation libraries (Zod, Valibot, ArkType).
2
+ * Standard Schema bridge — shared helpers for bridging Standard Schema-compatible
3
+ * validation libraries (Zod, Valibot, ArkType) to the Codec<T> protocol.
4
4
  *
5
- * Design doc: design/09-typescript.md §"The SearchParamCodec Protocol"
5
+ * This module is the single source of truth for:
6
+ * - StandardSchemaV1 interface (subset of the Standard Schema spec)
7
+ * - validateSync() helper
8
+ * - fromSchema() — bridge from Standard Schema to Codec<T>
9
+ * - fromArraySchema() — bridge for array-valued codecs
10
+ *
11
+ * These are re-exported from @timber-js/app/search-params, @timber-js/app/segment-params,
12
+ * and @timber-js/app/cookies for convenience. The canonical import is
13
+ * @timber-js/app/codec.
14
+ *
15
+ * Design doc: design/23a-search-params-triage.md §"Unify Codec<T> type"
6
16
  */
7
17
 
8
- import type { SearchParamCodec } from './create.js';
18
+ import type { Codec } from './codec.js';
9
19
 
10
20
  // ---------------------------------------------------------------------------
11
21
  // Standard Schema interface (subset)
@@ -15,13 +25,14 @@ import type { SearchParamCodec } from './create.js';
15
25
  // We depend only on `~standard.validate` to avoid coupling to any specific lib.
16
26
  // ---------------------------------------------------------------------------
17
27
 
18
- interface StandardSchemaV1<Output = unknown> {
28
+ /** Minimal Standard Schema interface for auto-detection. */
29
+ export interface StandardSchemaV1<Output = unknown> {
19
30
  '~standard': {
20
31
  validate(value: unknown): StandardSchemaResult<Output> | Promise<StandardSchemaResult<Output>>;
21
32
  };
22
33
  }
23
34
 
24
- type StandardSchemaResult<Output> =
35
+ export type StandardSchemaResult<Output> =
25
36
  | { value: Output; issues?: undefined }
26
37
  | { value?: undefined; issues: ReadonlyArray<{ message: string }> };
27
38
 
@@ -30,50 +41,77 @@ type StandardSchemaResult<Output> =
30
41
  // ---------------------------------------------------------------------------
31
42
 
32
43
  /**
33
- * Zod v4's ~standard.validate() signature includes Promise in the return union
34
- * to satisfy the Standard Schema spec, but in practice Zod always validates
35
- * synchronously for the schema types we use. We assert the result is sync and
36
- * throw if it isn't — search params parsing must be synchronous.
44
+ * Run a Standard Schema's `~standard.validate()` synchronously.
45
+ *
46
+ * Zod v4's signature includes `Promise` in the return union to satisfy the
47
+ * Standard Schema spec, but in practice Zod always validates synchronously
48
+ * for the schema types we use. We assert the result is sync and throw if
49
+ * it isn't — codec parsing must be synchronous.
37
50
  */
38
- function validateSync<Output>(
51
+ export function validateSync<Output>(
39
52
  schema: StandardSchemaV1<Output>,
40
53
  value: unknown
41
54
  ): StandardSchemaResult<Output> {
42
55
  const result = schema['~standard'].validate(value);
43
56
  if (result instanceof Promise) {
44
57
  throw new Error(
45
- '[timber] fromSchema: schema returned a Promise — only sync schemas are supported for search params.'
58
+ '[timber] fromSchema: schema returned a Promise — only sync schemas are supported.'
46
59
  );
47
60
  }
48
61
  return result;
49
62
  }
50
63
 
51
64
  // ---------------------------------------------------------------------------
52
- // fromSchema — bridge from Standard Schema to SearchParamCodec
65
+ // Type guards
66
+ // ---------------------------------------------------------------------------
67
+
68
+ /** Check if a value is a Standard Schema object. */
69
+ export function isStandardSchema(value: unknown): value is StandardSchemaV1 {
70
+ return (
71
+ typeof value === 'object' &&
72
+ value !== null &&
73
+ '~standard' in value &&
74
+ typeof (value as StandardSchemaV1)['~standard']?.validate === 'function'
75
+ );
76
+ }
77
+
78
+ /** Check if a value is a Codec (has parse + serialize methods). */
79
+ export function isCodec(value: unknown): value is Codec<unknown> {
80
+ return (
81
+ typeof value === 'object' &&
82
+ value !== null &&
83
+ typeof (value as Codec<unknown>).parse === 'function' &&
84
+ typeof (value as Codec<unknown>).serialize === 'function'
85
+ );
86
+ }
87
+
88
+ // ---------------------------------------------------------------------------
89
+ // fromSchema — bridge from Standard Schema to Codec<T>
53
90
  // ---------------------------------------------------------------------------
54
91
 
55
92
  /**
56
93
  * Bridge a Standard Schema-compatible schema (Zod, Valibot, ArkType) to a
57
- * SearchParamCodec.
94
+ * Codec<T>.
58
95
  *
59
- * Parse: coerces the raw URL string through the schema. On validation failure,
96
+ * Parse: coerces the raw string through the schema. On validation failure,
60
97
  * parses `undefined` to get the schema's default value (the schema should have
61
98
  * a `.default()` call). If that also fails, returns `undefined`.
62
99
  *
63
100
  * Serialize: uses `String()` for primitives, `null` for null/undefined.
64
101
  *
65
102
  * ```ts
66
- * import { fromSchema } from '@timber-js/app/search-params'
103
+ * import { fromSchema } from '@timber-js/app/codec'
67
104
  * import { z } from 'zod/v4'
68
105
  *
69
106
  * const pageCodec = fromSchema(z.coerce.number().int().min(1).default(1))
70
107
  * ```
71
108
  */
72
- export function fromSchema<T>(schema: StandardSchemaV1<T>): SearchParamCodec<T> {
109
+ export function fromSchema<T>(schema: StandardSchemaV1<T>): Codec<T> {
73
110
  return {
74
111
  parse(value: string | string[] | undefined): T {
75
- // For array inputs, take the last value (consistent with URLSearchParams.get())
76
- const input = Array.isArray(value) ? value[value.length - 1] : value;
112
+ // For array inputs (duplicate query keys), use the first value.
113
+ // Browsers and URLSearchParams.get() return the first occurrence.
114
+ const input = Array.isArray(value) ? value[0] : value;
77
115
 
78
116
  // Try parsing the raw value
79
117
  const result = validateSync(schema, input);
@@ -101,7 +139,7 @@ export function fromSchema<T>(schema: StandardSchemaV1<T>): SearchParamCodec<T>
101
139
  }
102
140
 
103
141
  // ---------------------------------------------------------------------------
104
- // fromArraySchema — bridge for array-valued search params
142
+ // fromArraySchema — bridge for array-valued codecs
105
143
  // ---------------------------------------------------------------------------
106
144
 
107
145
  /**
@@ -109,13 +147,13 @@ export function fromSchema<T>(schema: StandardSchemaV1<T>): SearchParamCodec<T>
109
147
  * and repeated query keys (`?tag=a&tag=b`).
110
148
  *
111
149
  * ```ts
112
- * import { fromArraySchema } from '@timber-js/app/search-params'
150
+ * import { fromArraySchema } from '@timber-js/app/codec'
113
151
  * import { z } from 'zod/v4'
114
152
  *
115
153
  * const tagsCodec = fromArraySchema(z.array(z.string()).default([]))
116
154
  * ```
117
155
  */
118
- export function fromArraySchema<T>(schema: StandardSchemaV1<T>): SearchParamCodec<T> {
156
+ export function fromArraySchema<T>(schema: StandardSchemaV1<T>): Codec<T> {
119
157
  return {
120
158
  parse(value: string | string[] | undefined): T {
121
159
  // Coerce single string to array for array schemas
@@ -0,0 +1,538 @@
1
+ /**
2
+ * defineSearchParams — factory for SearchParamsDefinition<T>.
3
+ *
4
+ * Creates a typed, composable definition for a route's search parameters.
5
+ * Accepts both SearchParamCodec values and Standard Schema objects (Zod,
6
+ * Valibot, ArkType) with auto-detection. Supports URL key aliasing via
7
+ * withUrlKey(), default-omission serialization, and composition via
8
+ * .extend() / .pick().
9
+ *
10
+ * Design doc: design/23-search-params.md §"defineSearchParams — The Factory"
11
+ */
12
+
13
+ import { useQueryStates as clientUseQueryStates } from '../client/use-query-states.js';
14
+ import { fromSchema, isStandardSchema, isCodec } from '../schema-bridge.js';
15
+ import type { StandardSchemaV1 } from '../schema-bridge.js';
16
+ import type { Codec } from '../codec.js';
17
+
18
+ // Server-only reference for .get() — avoids pulling server ALS into client bundles.
19
+ // In client environments, .get() throws before reaching this code path.
20
+ //
21
+ // IMPORTANT: This is set eagerly via _setGetSearchParamsFn() at server startup
22
+ // (called from request-context.ts module initialization). It must NOT use
23
+ // dynamic `await import()` at call time because the async microtask from the
24
+ // dynamic import loses AsyncLocalStorage context in React's RSC Flight renderer,
25
+ // breaking getSearchParams() in parallel slot pages. See TIM-523.
26
+ let _getSearchParamsFn: (() => URLSearchParams) | undefined;
27
+
28
+ /**
29
+ * Register the getSearchParams function. Called once at module load time
30
+ * from request-context.ts to avoid dynamic import at call time.
31
+ * @internal
32
+ */
33
+ export function _setGetSearchParamsFn(fn: () => URLSearchParams): void {
34
+ _getSearchParamsFn = fn;
35
+ }
36
+
37
+ function getSearchParamsFromAls(): URLSearchParams {
38
+ if (!_getSearchParamsFn) {
39
+ throw new Error(
40
+ '[timber] searchParams.get() is only available on the server. ' +
41
+ 'Use searchParams.useQueryStates() on the client.'
42
+ );
43
+ }
44
+ return _getSearchParamsFn();
45
+ }
46
+
47
+ // ---------------------------------------------------------------------------
48
+ // Types
49
+ // ---------------------------------------------------------------------------
50
+
51
+ /**
52
+ * A codec that converts between URL string values and typed values.
53
+ *
54
+ * nuqs parsers implement this interface natively — no adapter needed.
55
+ * Standard Schema objects (Zod, Valibot, ArkType) are auto-detected
56
+ * by defineSearchParams and wrapped via fromSchema.
57
+ */
58
+ export interface SearchParamCodec<T> extends Codec<T> {
59
+ /** Optional URL key alias, set by withUrlKey(). */
60
+ urlKey?: string;
61
+ }
62
+
63
+ /** A codec with a URL key alias attached via withUrlKey(). */
64
+ export interface SearchParamCodecWithUrlKey<T> extends SearchParamCodec<T> {
65
+ urlKey: string;
66
+ }
67
+
68
+ /** Infer the output type of a codec. */
69
+ export type InferCodec<C> = C extends SearchParamCodec<infer T> ? T : never;
70
+
71
+ /** Map of property names to codecs. */
72
+ export type CodecMap<T extends Record<string, unknown>> = {
73
+ [K in keyof T]: SearchParamCodec<T[K]>;
74
+ };
75
+
76
+ /** Options for useQueryStates setter. */
77
+ export interface SetParamsOptions {
78
+ /** Update URL without server roundtrip (default: false). */
79
+ shallow?: boolean;
80
+ /** Scroll to top after update (default: true). */
81
+ scroll?: boolean;
82
+ /** 'push' (default) or 'replace' for history state. */
83
+ history?: 'push' | 'replace';
84
+ }
85
+
86
+ /** Setter function returned by useQueryStates. */
87
+ export type SetParams<T> = (values: Partial<T>, options?: SetParamsOptions) => void;
88
+
89
+ /** Options for useQueryStates hook. */
90
+ export interface QueryStatesOptions {
91
+ /** Update URL without server roundtrip (default: false). */
92
+ shallow?: boolean;
93
+ /** Scroll to top after update (default: true). */
94
+ scroll?: boolean;
95
+ /** 'push' (default) or 'replace' for history state. */
96
+ history?: 'push' | 'replace';
97
+ }
98
+
99
+ /**
100
+ * A fully typed, composable search params definition.
101
+ *
102
+ * Returned by defineSearchParams(). Carries a phantom _type property
103
+ * for build-time type extraction.
104
+ */
105
+ export interface SearchParamsDefinition<T extends Record<string, unknown>> {
106
+ /** Parse raw URL search params into typed values. */
107
+ parse(raw: URLSearchParams | Record<string, string | string[] | undefined>): T;
108
+ /** Parse a Promise of URLSearchParams (e.g., from the ALS `searchParams()` API). */
109
+ parse(raw: Promise<URLSearchParams | Record<string, string | string[] | undefined>>): Promise<T>;
110
+
111
+ /**
112
+ * Get typed search params from the current request context (ALS-backed).
113
+ *
114
+ * Server-only, sync. Reads getSearchParams() from ALS and parses through codecs.
115
+ * Throws on client.
116
+ *
117
+ * ```tsx
118
+ * // app/products/page.tsx
119
+ * import { searchParams } from './params'
120
+ * export default function Page() {
121
+ * const { page, category } = searchParams.get()
122
+ * }
123
+ * ```
124
+ */
125
+ get(): T;
126
+
127
+ /** Client hook — reads current URL params and returns typed values + setter. */
128
+ useQueryStates(options?: QueryStatesOptions): [T, SetParams<T>];
129
+
130
+ /** Extend with additional codecs or Standard Schema objects. */
131
+ extend<U extends Record<string, SearchParamCodec<unknown> | StandardSchemaV1<unknown>>>(
132
+ codecs: U
133
+ ): SearchParamsDefinition<T & { [K in keyof U]: InferField<U[K]> }>;
134
+
135
+ /** Pick a subset of keys. Preserves codecs and aliases. */
136
+ pick<K extends keyof T & string>(...keys: K[]): SearchParamsDefinition<Pick<T, K>>;
137
+
138
+ /** Serialize values to a query string (no leading '?'), omitting defaults. */
139
+ serialize(values: Partial<T>): string;
140
+
141
+ /** Build a full path with query string, omitting defaults. */
142
+ href(pathname: string, values: Partial<T>): string;
143
+
144
+ /** Build a URLSearchParams instance, omitting defaults. */
145
+ toSearchParams(values: Partial<T>): URLSearchParams;
146
+
147
+ /** Read-only codec map for spreading into .extend(). */
148
+ codecs: { [K in keyof T]: SearchParamCodec<T[K]> };
149
+
150
+ /** Read-only URL key alias map. Maps property names to URL query parameter keys. */
151
+ readonly urlKeys: Readonly<Record<string, string>>;
152
+
153
+ /**
154
+ * Phantom property for build-time type extraction.
155
+ * Never set at runtime — exists only in the type system.
156
+ */
157
+ readonly _type?: T;
158
+ }
159
+
160
+ // StandardSchemaV1 is imported from schema-bridge.ts — single source of truth.
161
+ // Re-export for consumers that import it from this module.
162
+ export type { StandardSchemaV1 } from '../schema-bridge.js';
163
+
164
+ // ---------------------------------------------------------------------------
165
+ // Type-level helpers
166
+ // ---------------------------------------------------------------------------
167
+
168
+ /** Infer the output type from either a SearchParamCodec or a StandardSchemaV1. */
169
+ export type InferField<V> =
170
+ V extends SearchParamCodec<infer T> ? T : V extends StandardSchemaV1<infer T> ? T : never;
171
+
172
+ /** Acceptable field value for defineSearchParams: a codec or a Standard Schema. */
173
+ export type SearchParamField<T = unknown> = SearchParamCodec<T> | StandardSchemaV1<T>;
174
+
175
+ // ---------------------------------------------------------------------------
176
+ // Internal helpers
177
+ // ---------------------------------------------------------------------------
178
+
179
+ /**
180
+ * Convert URLSearchParams or a plain record to a normalized record
181
+ * where repeated keys produce arrays.
182
+ */
183
+ function normalizeRaw(
184
+ raw: URLSearchParams | Record<string, string | string[] | undefined>
185
+ ): Record<string, string | string[] | undefined> {
186
+ if (raw instanceof URLSearchParams) {
187
+ const result: Record<string, string | string[] | undefined> = {};
188
+ for (const key of new Set(raw.keys())) {
189
+ const values = raw.getAll(key);
190
+ result[key] = values.length === 1 ? values[0] : values;
191
+ }
192
+ return result;
193
+ }
194
+ return raw;
195
+ }
196
+
197
+ /**
198
+ * Compute the serialized default value for a codec. Used for
199
+ * default-omission: when serialize(value) === serialize(parse(undefined)),
200
+ * the field is omitted from the URL.
201
+ */
202
+ function getDefaultSerialized<T>(codec: SearchParamCodec<T>): string | null {
203
+ return codec.serialize(codec.parse(undefined));
204
+ }
205
+
206
+ // isStandardSchema and isCodec are imported from schema-bridge.ts.
207
+
208
+ /**
209
+ * Resolve a field value to a SearchParamCodec. Auto-detects Standard Schema
210
+ * objects and wraps them with fromSchema. Reads .urlKey from codecs.
211
+ */
212
+ function resolveField(
213
+ fieldName: string,
214
+ value: SearchParamField
215
+ ): { codec: SearchParamCodec<unknown>; urlKey?: string } {
216
+ // Check for codec first (codecs may also have '~standard' if they're nuqs parsers)
217
+ if (isCodec(value)) {
218
+ return { codec: value, urlKey: value.urlKey };
219
+ }
220
+
221
+ // Auto-detect Standard Schema
222
+ if (isStandardSchema(value)) {
223
+ return { codec: fromSchema(value) };
224
+ }
225
+
226
+ throw new Error(
227
+ `[timber] defineSearchParams: field '${fieldName}' is not a valid codec or Standard Schema. ` +
228
+ `Expected an object with { parse, serialize } methods, or a Standard Schema object ` +
229
+ `(Zod, Valibot, ArkType).`
230
+ );
231
+ }
232
+
233
+ /**
234
+ * Validate that all codecs handle absent params (parse(undefined) doesn't throw).
235
+ * Catches schemas that throw on missing input. `undefined` and `null` are both
236
+ * valid defaults — `undefined` is correct for optional fields (e.g., `z.string().optional()`).
237
+ */
238
+ function validateDefaults(codecMap: Record<string, SearchParamCodec<unknown>>): void {
239
+ for (const [key, codec] of Object.entries(codecMap)) {
240
+ try {
241
+ codec.parse(undefined);
242
+ } catch {
243
+ throw new Error(
244
+ `[timber] defineSearchParams: field '${key}' throws when the param is absent.\n` +
245
+ ` Search params are optional — the URL might not contain ?${key}=anything.\n` +
246
+ ` Add .default() or .optional() to your schema, or wrap with withDefault().`
247
+ );
248
+ }
249
+ }
250
+ }
251
+
252
+ // ---------------------------------------------------------------------------
253
+ // Factory
254
+ // ---------------------------------------------------------------------------
255
+
256
+ /**
257
+ * Create a SearchParamsDefinition from a map of codecs and/or Standard Schema
258
+ * objects. Accepts both SearchParamCodec values and raw Zod/Valibot/ArkType
259
+ * schemas with auto-detection.
260
+ *
261
+ * ```ts
262
+ * import { defineSearchParams, withDefault, withUrlKey } from '@timber-js/app/search-params'
263
+ * import { parseAsString, parseAsStringEnum } from 'nuqs'
264
+ * import { z } from 'zod/v4'
265
+ *
266
+ * export const searchParams = defineSearchParams({
267
+ * page: z.coerce.number().int().min(1).default(1), // Standard Schema — auto-wrapped
268
+ * q: withUrlKey(parseAsString, 'search'), // nuqs codec with URL alias
269
+ * sort: withDefault(parseAsStringEnum(['price', 'name']), 'price'),
270
+ * })
271
+ * ```
272
+ */
273
+ /**
274
+ * Overload: accept a Standard Schema object schema (e.g., z.object({...})).
275
+ *
276
+ * The schema must have a `.shape` property whose values are themselves
277
+ * Standard Schema objects. Each shape property becomes a field codec
278
+ * via fromSchema().
279
+ *
280
+ * ```ts
281
+ * const searchParams = defineSearchParams(
282
+ * z.object({ page: z.coerce.number().default(1), q: z.string().optional() })
283
+ * )
284
+ * ```
285
+ */
286
+ export function defineSearchParams<T extends Record<string, unknown>>(
287
+ schema: StandardSchemaV1<T> & { shape: Record<string, StandardSchemaV1<unknown>> }
288
+ ): SearchParamsDefinition<T>;
289
+
290
+ /**
291
+ * Overload: accept a map of codecs and/or Standard Schema objects.
292
+ */
293
+ export function defineSearchParams<C extends Record<string, SearchParamField>>(
294
+ codecs: C
295
+ ): SearchParamsDefinition<{ [K in keyof C]: InferField<C[K]> }>;
296
+
297
+ export function defineSearchParams(
298
+ codecsOrSchema:
299
+ | Record<string, SearchParamField>
300
+ | (StandardSchemaV1<unknown> & { shape: Record<string, StandardSchemaV1<unknown>> })
301
+ ): SearchParamsDefinition<Record<string, unknown>> {
302
+ // Detect Standard Schema object with .shape (e.g., z.object(...))
303
+ if (isStandardSchema(codecsOrSchema) && hasShape(codecsOrSchema)) {
304
+ const fieldCodecs: Record<string, SearchParamField> = {};
305
+ for (const [key, fieldSchema] of Object.entries(codecsOrSchema.shape)) {
306
+ if (isStandardSchema(fieldSchema)) {
307
+ fieldCodecs[key] = fieldSchema;
308
+ } else {
309
+ throw new Error(
310
+ `[timber] defineSearchParams: field '${key}' in schema.shape is not a Standard Schema. ` +
311
+ `All shape properties must be Standard Schema objects (Zod, Valibot, ArkType).`
312
+ );
313
+ }
314
+ }
315
+ return defineSearchParamsFromMap(fieldCodecs);
316
+ }
317
+
318
+ return defineSearchParamsFromMap(codecsOrSchema as Record<string, SearchParamField>);
319
+ }
320
+
321
+ /** Check if a schema has a .shape property with object-type values. */
322
+ function hasShape(schema: unknown): schema is { shape: Record<string, unknown> } {
323
+ return (
324
+ typeof schema === 'object' &&
325
+ schema !== null &&
326
+ 'shape' in schema &&
327
+ typeof (schema as { shape: unknown }).shape === 'object' &&
328
+ (schema as { shape: unknown }).shape !== null
329
+ );
330
+ }
331
+
332
+ function defineSearchParamsFromMap(
333
+ codecs: Record<string, SearchParamField>
334
+ ): SearchParamsDefinition<Record<string, unknown>> {
335
+ const resolvedCodecs: Record<string, SearchParamCodec<unknown>> = {};
336
+ const urlKeys: Record<string, string> = {};
337
+
338
+ for (const [key, value] of Object.entries(codecs)) {
339
+ const resolved = resolveField(key, value as SearchParamField);
340
+ resolvedCodecs[key] = resolved.codec;
341
+ if (resolved.urlKey) {
342
+ urlKeys[key] = resolved.urlKey;
343
+ }
344
+ }
345
+
346
+ // Validate that all codecs handle absent params
347
+ validateDefaults(resolvedCodecs);
348
+
349
+ return buildDefinition(resolvedCodecs as unknown as CodecMap<Record<string, unknown>>, urlKeys);
350
+ }
351
+
352
+ // ---------------------------------------------------------------------------
353
+ // Internal: build the definition object
354
+ // ---------------------------------------------------------------------------
355
+
356
+ /**
357
+ * Internal: build a SearchParamsDefinition from a typed codec map and url keys.
358
+ */
359
+ function buildDefinition<T extends Record<string, unknown>>(
360
+ codecMap: CodecMap<T>,
361
+ urlKeys: Record<string, string>
362
+ ): SearchParamsDefinition<T> {
363
+ // Pre-compute default serialized values for omission check
364
+ const defaultSerialized: Record<string, string | null> = {};
365
+ for (const key of Object.keys(codecMap)) {
366
+ defaultSerialized[key] = getDefaultSerialized(codecMap[key as keyof T]);
367
+ }
368
+
369
+ function getUrlKey(prop: string): string {
370
+ return urlKeys[prop] ?? prop;
371
+ }
372
+
373
+ // ---- parse ----
374
+ function parseSync(raw: URLSearchParams | Record<string, string | string[] | undefined>): T {
375
+ const normalized = normalizeRaw(raw);
376
+ const result: Record<string, unknown> = {};
377
+
378
+ for (const prop of Object.keys(codecMap)) {
379
+ const urlKey = getUrlKey(prop);
380
+ const rawValue = normalized[urlKey];
381
+ result[prop] = (codecMap[prop as keyof T] as SearchParamCodec<unknown>).parse(rawValue);
382
+ }
383
+
384
+ return result as T;
385
+ }
386
+
387
+ // Overloaded parse: sync when given raw params, async when given a Promise.
388
+ // This enables the ergonomic pattern: await def.parse(searchParams())
389
+ function parse(raw: URLSearchParams | Record<string, string | string[] | undefined>): T;
390
+ function parse(
391
+ raw: Promise<URLSearchParams | Record<string, string | string[] | undefined>>
392
+ ): Promise<T>;
393
+ function parse(
394
+ raw:
395
+ | URLSearchParams
396
+ | Record<string, string | string[] | undefined>
397
+ | Promise<URLSearchParams | Record<string, string | string[] | undefined>>
398
+ ): T | Promise<T> {
399
+ if (raw instanceof Promise) {
400
+ return raw.then(parseSync);
401
+ }
402
+ return parseSync(raw);
403
+ }
404
+
405
+ // ---- serialize ----
406
+ function serialize(values: Partial<T>): string {
407
+ const parts: string[] = [];
408
+
409
+ for (const prop of Object.keys(codecMap)) {
410
+ if (!(prop in values)) continue;
411
+ const codec = codecMap[prop as keyof T] as SearchParamCodec<unknown>;
412
+ const serialized = codec.serialize(values[prop as keyof T] as unknown);
413
+
414
+ // Omit if serialized value matches the default
415
+ if (serialized === defaultSerialized[prop]) continue;
416
+ if (serialized === null) continue;
417
+
418
+ parts.push(`${encodeURIComponent(getUrlKey(prop))}=${encodeURIComponent(serialized)}`);
419
+ }
420
+
421
+ return parts.join('&');
422
+ }
423
+
424
+ // ---- href ----
425
+ function href(pathname: string, values: Partial<T>): string {
426
+ const qs = serialize(values);
427
+ return qs ? `${pathname}?${qs}` : pathname;
428
+ }
429
+
430
+ // ---- toSearchParams ----
431
+ function toSearchParams(values: Partial<T>): URLSearchParams {
432
+ const usp = new URLSearchParams();
433
+
434
+ for (const prop of Object.keys(codecMap)) {
435
+ if (!(prop in values)) continue;
436
+ const codec = codecMap[prop as keyof T] as SearchParamCodec<unknown>;
437
+ const serialized = codec.serialize(values[prop as keyof T] as unknown);
438
+
439
+ if (serialized === defaultSerialized[prop]) continue;
440
+ if (serialized === null) continue;
441
+
442
+ usp.set(getUrlKey(prop), serialized);
443
+ }
444
+
445
+ return usp;
446
+ }
447
+
448
+ // ---- extend ----
449
+ function extend<U extends Record<string, SearchParamCodec<unknown> | StandardSchemaV1<unknown>>>(
450
+ newCodecs: U
451
+ ): SearchParamsDefinition<T & { [K in keyof U]: InferField<U[K]> }> {
452
+ type Combined = T & { [K in keyof U]: InferField<U[K]> };
453
+
454
+ // Resolve any Standard Schema objects in the extension
455
+ const resolvedNewCodecs: Record<string, SearchParamCodec<unknown>> = {};
456
+ const newUrlKeys: Record<string, string> = {};
457
+ for (const [key, value] of Object.entries(newCodecs)) {
458
+ const resolved = resolveField(key, value as SearchParamField);
459
+ resolvedNewCodecs[key] = resolved.codec;
460
+ if (resolved.urlKey) {
461
+ newUrlKeys[key] = resolved.urlKey;
462
+ }
463
+ }
464
+
465
+ const combinedCodecs = {
466
+ ...codecMap,
467
+ ...resolvedNewCodecs,
468
+ } as unknown as CodecMap<Combined>;
469
+
470
+ // Merge URL keys: base keys + new codec urlKeys from withUrlKey
471
+ const combinedUrlKeys: Record<string, string> = { ...urlKeys, ...newUrlKeys };
472
+
473
+ return buildDefinition<Combined>(combinedCodecs, combinedUrlKeys);
474
+ }
475
+
476
+ // ---- pick ----
477
+ function pick<K extends keyof T & string>(...keys: K[]): SearchParamsDefinition<Pick<T, K>> {
478
+ const pickedCodecs: Record<string, SearchParamCodec<unknown>> = {};
479
+ const pickedUrlKeys: Record<string, string> = {};
480
+
481
+ for (const key of keys) {
482
+ pickedCodecs[key] = codecMap[key] as SearchParamCodec<unknown>;
483
+ if (key in urlKeys) {
484
+ pickedUrlKeys[key] = urlKeys[key];
485
+ }
486
+ }
487
+
488
+ return buildDefinition<Pick<T, K>>(
489
+ pickedCodecs as unknown as CodecMap<Pick<T, K>>,
490
+ pickedUrlKeys
491
+ );
492
+ }
493
+
494
+ // ---- useQueryStates ----
495
+ // Delegates to the 'use client' implementation from use-query-states.ts.
496
+ //
497
+ // In the RSC environment: use-query-states.ts is transformed by the RSC
498
+ // plugin into a client reference proxy. Calling it throws — correct,
499
+ // because hooks can't run during server component rendering.
500
+ // In SSR: use-query-states.ts is the real nuqs-backed function. Hooks
501
+ // work during SSR's renderToReadableStream, so this works correctly.
502
+ // On the client: same as SSR — the real function is available.
503
+ function useQueryStates(options?: QueryStatesOptions): [T, SetParams<T>] {
504
+ return clientUseQueryStates(codecMap, options, Object.freeze({ ...urlKeys })) as [
505
+ T,
506
+ SetParams<T>,
507
+ ];
508
+ }
509
+
510
+ // ---- get ----
511
+ // ALS-backed: reads getSearchParams() from the current request context
512
+ // and parses through codecs. Server-only, sync.
513
+ function get(): T {
514
+ if (typeof window !== 'undefined') {
515
+ throw new Error(
516
+ '[timber] searchParams.get() is server-only. ' +
517
+ 'Use searchParams.useQueryStates() on the client.'
518
+ );
519
+ }
520
+ const raw = getSearchParamsFromAls();
521
+ return parseSync(raw);
522
+ }
523
+
524
+ const definition: SearchParamsDefinition<T> = {
525
+ parse,
526
+ get,
527
+ useQueryStates,
528
+ extend,
529
+ pick,
530
+ serialize,
531
+ href,
532
+ toSearchParams,
533
+ codecs: codecMap,
534
+ urlKeys: Object.freeze({ ...urlKeys }),
535
+ };
536
+
537
+ return definition;
538
+ }