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

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 (760) hide show
  1. package/dist/_chunks/actions-Dy8vOjFt.js +1101 -0
  2. package/dist/_chunks/actions-Dy8vOjFt.js.map +1 -0
  3. package/dist/_chunks/build-output-helper-B1n0sUqj.js +61 -0
  4. package/dist/_chunks/build-output-helper-B1n0sUqj.js.map +1 -0
  5. package/dist/_chunks/cli-schema-sync-ByZPGGmS.js +724 -0
  6. package/dist/_chunks/cli-schema-sync-ByZPGGmS.js.map +1 -0
  7. package/dist/_chunks/cli-schema-sync-DHQLjFu3.js +2 -0
  8. package/dist/_chunks/codec-registry-G9hD5LOq.js +21 -0
  9. package/dist/_chunks/codec-registry-G9hD5LOq.js.map +1 -0
  10. package/dist/_chunks/define-CPVQaWbx.js +124 -0
  11. package/dist/_chunks/define-CPVQaWbx.js.map +1 -0
  12. package/dist/_chunks/define-jeHDXZGq.js +195 -0
  13. package/dist/_chunks/define-jeHDXZGq.js.map +1 -0
  14. package/dist/_chunks/format-BjN9HLu9.js +14 -0
  15. package/dist/_chunks/format-BjN9HLu9.js.map +1 -0
  16. package/dist/_chunks/handler-store-CcwNX-gk.js +54 -0
  17. package/dist/_chunks/handler-store-CcwNX-gk.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-az6ZiBeU.js +41 -0
  21. package/dist/_chunks/merge-search-params-az6ZiBeU.js.map +1 -0
  22. package/dist/_chunks/navigation-root-DoRTeBm5.js +96 -0
  23. package/dist/_chunks/navigation-root-DoRTeBm5.js.map +1 -0
  24. package/dist/_chunks/registry-BI9cgCt7.js +20 -0
  25. package/dist/_chunks/registry-BI9cgCt7.js.map +1 -0
  26. package/dist/_chunks/resolve-schema-Bf8eC6q6.js +73 -0
  27. package/dist/_chunks/resolve-schema-Bf8eC6q6.js.map +1 -0
  28. package/dist/_chunks/router-ref-CpvjBqdu.js +28 -0
  29. package/dist/_chunks/router-ref-CpvjBqdu.js.map +1 -0
  30. package/dist/_chunks/schema-bridge-o0SwFtXW.js +86 -0
  31. package/dist/_chunks/schema-bridge-o0SwFtXW.js.map +1 -0
  32. package/dist/_chunks/segment-classify-CnfLLvir.js +137 -0
  33. package/dist/_chunks/segment-classify-CnfLLvir.js.map +1 -0
  34. package/dist/_chunks/segment-context-EsfQpS--.js +34 -0
  35. package/dist/_chunks/segment-context-EsfQpS--.js.map +1 -0
  36. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-m9-cNEIw.js} +1 -1
  37. package/dist/_chunks/ssr-data-m9-cNEIw.js.map +1 -0
  38. package/dist/_chunks/stale-reload-BN2kcE06.js +64 -0
  39. package/dist/_chunks/stale-reload-BN2kcE06.js.map +1 -0
  40. package/dist/_chunks/tracing-DvKLzCFa.js +329 -0
  41. package/dist/_chunks/tracing-DvKLzCFa.js.map +1 -0
  42. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-C9G6LP0F.js} +7 -20
  43. package/dist/_chunks/use-query-states-C9G6LP0F.js.map +1 -0
  44. package/dist/_chunks/use-segment-params-CtIAjqK0.js +185 -0
  45. package/dist/_chunks/use-segment-params-CtIAjqK0.js.map +1 -0
  46. package/dist/_chunks/validation-BMU5MPzP.js +84 -0
  47. package/dist/_chunks/validation-BMU5MPzP.js.map +1 -0
  48. package/dist/_chunks/walkers-DNp9tHyV.js +719 -0
  49. package/dist/_chunks/walkers-DNp9tHyV.js.map +1 -0
  50. package/dist/_chunks/{format-DviM89f0.js → warnings-B30wpfaS.js} +6 -45
  51. package/dist/_chunks/warnings-B30wpfaS.js.map +1 -0
  52. package/dist/adapters/build-output-helper.d.ts +28 -0
  53. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  54. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  55. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  56. package/dist/adapters/cloudflare-dev.js +73 -0
  57. package/dist/adapters/cloudflare-dev.js.map +1 -0
  58. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  59. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  60. package/dist/adapters/cloudflare-kv-cache.js +95 -0
  61. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  62. package/dist/adapters/cloudflare.d.ts +148 -12
  63. package/dist/adapters/cloudflare.d.ts.map +1 -1
  64. package/dist/adapters/cloudflare.js +142 -38
  65. package/dist/adapters/cloudflare.js.map +1 -1
  66. package/dist/adapters/compress-module.d.ts.map +1 -1
  67. package/dist/adapters/nitro.d.ts +17 -1
  68. package/dist/adapters/nitro.d.ts.map +1 -1
  69. package/dist/adapters/nitro.js +143 -45
  70. package/dist/adapters/nitro.js.map +1 -1
  71. package/dist/adapters/shared.d.ts +16 -0
  72. package/dist/adapters/shared.d.ts.map +1 -0
  73. package/dist/cache/cache-api.d.ts +24 -0
  74. package/dist/cache/cache-api.d.ts.map +1 -0
  75. package/dist/cache/handler-store.d.ts +31 -0
  76. package/dist/cache/handler-store.d.ts.map +1 -0
  77. package/dist/cache/index.d.ts +23 -7
  78. package/dist/cache/index.d.ts.map +1 -1
  79. package/dist/cache/index.js +151 -81
  80. package/dist/cache/index.js.map +1 -1
  81. package/dist/cache/singleflight.d.ts +18 -1
  82. package/dist/cache/singleflight.d.ts.map +1 -1
  83. package/dist/cache/sizeof.d.ts +22 -0
  84. package/dist/cache/sizeof.d.ts.map +1 -0
  85. package/dist/cache/timber-cache.d.ts +1 -1
  86. package/dist/cache/timber-cache.d.ts.map +1 -1
  87. package/dist/cli-schema-sync.d.ts +37 -0
  88. package/dist/cli-schema-sync.d.ts.map +1 -0
  89. package/dist/cli.d.ts +14 -2
  90. package/dist/cli.d.ts.map +1 -1
  91. package/dist/cli.js +42 -6
  92. package/dist/cli.js.map +1 -1
  93. package/dist/client/browser-dev.d.ts +34 -1
  94. package/dist/client/browser-dev.d.ts.map +1 -1
  95. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  96. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  97. package/dist/client/browser-entry/hmr.d.ts +21 -0
  98. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  99. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  100. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  101. package/dist/client/browser-entry/index.d.ts +30 -0
  102. package/dist/client/browser-entry/index.d.ts.map +1 -0
  103. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  104. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  105. package/dist/client/browser-entry/router-init.d.ts +23 -0
  106. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  107. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  108. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  109. package/dist/client/browser-entry/scroll.d.ts +19 -0
  110. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  111. package/dist/client/error-boundary.d.ts +12 -5
  112. package/dist/client/error-boundary.d.ts.map +1 -1
  113. package/dist/client/error-boundary.js +29 -6
  114. package/dist/client/error-boundary.js.map +1 -1
  115. package/dist/client/error-reconstituter.d.ts +54 -0
  116. package/dist/client/error-reconstituter.d.ts.map +1 -0
  117. package/dist/client/form.d.ts +16 -27
  118. package/dist/client/form.d.ts.map +1 -1
  119. package/dist/client/history.d.ts +19 -4
  120. package/dist/client/history.d.ts.map +1 -1
  121. package/dist/client/index.d.ts +9 -24
  122. package/dist/client/index.d.ts.map +1 -1
  123. package/dist/client/index.js +172 -1100
  124. package/dist/client/index.js.map +1 -1
  125. package/dist/client/internal.d.ts +19 -0
  126. package/dist/client/internal.d.ts.map +1 -0
  127. package/dist/client/internal.js +964 -0
  128. package/dist/client/internal.js.map +1 -0
  129. package/dist/client/link-pending-store.d.ts +63 -0
  130. package/dist/client/link-pending-store.d.ts.map +1 -0
  131. package/dist/client/link.d.ts +62 -55
  132. package/dist/client/link.d.ts.map +1 -1
  133. package/dist/client/nav-link-store.d.ts +36 -0
  134. package/dist/client/nav-link-store.d.ts.map +1 -0
  135. package/dist/client/navigation-api-types.d.ts +90 -0
  136. package/dist/client/navigation-api-types.d.ts.map +1 -0
  137. package/dist/client/navigation-api.d.ts +115 -0
  138. package/dist/client/navigation-api.d.ts.map +1 -0
  139. package/dist/client/navigation-context.d.ts +13 -2
  140. package/dist/client/navigation-context.d.ts.map +1 -1
  141. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
  142. package/dist/client/navigation-root.d.ts.map +1 -0
  143. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  144. package/dist/client/router-ref.d.ts +1 -1
  145. package/dist/client/router.d.ts +70 -4
  146. package/dist/client/router.d.ts.map +1 -1
  147. package/dist/client/rsc-fetch.d.ts +38 -3
  148. package/dist/client/rsc-fetch.d.ts.map +1 -1
  149. package/dist/client/segment-cache.d.ts +1 -1
  150. package/dist/client/segment-cache.d.ts.map +1 -1
  151. package/dist/client/segment-outlet.d.ts +63 -0
  152. package/dist/client/segment-outlet.d.ts.map +1 -0
  153. package/dist/client/ssr-data.d.ts +13 -4
  154. package/dist/client/ssr-data.d.ts.map +1 -1
  155. package/dist/client/stale-reload.d.ts +15 -0
  156. package/dist/client/stale-reload.d.ts.map +1 -1
  157. package/dist/client/state.d.ts +1 -1
  158. package/dist/client/top-loader.d.ts +5 -5
  159. package/dist/client/top-loader.d.ts.map +1 -1
  160. package/dist/client/use-cookie.d.ts +12 -0
  161. package/dist/client/use-cookie.d.ts.map +1 -1
  162. package/dist/client/use-link-status.d.ts +5 -5
  163. package/dist/client/use-link-status.d.ts.map +1 -1
  164. package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
  165. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  166. package/dist/client/use-query-states.d.ts +1 -1
  167. package/dist/client/use-query-states.d.ts.map +1 -1
  168. package/dist/client/use-router.d.ts +1 -1
  169. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  170. package/dist/client/use-segment-params.d.ts.map +1 -0
  171. package/dist/codec.d.ts +69 -0
  172. package/dist/codec.d.ts.map +1 -0
  173. package/dist/codec.js +75 -0
  174. package/dist/codec.js.map +1 -0
  175. package/dist/config-types.d.ts +294 -0
  176. package/dist/config-types.d.ts.map +1 -0
  177. package/dist/config-validation.d.ts +51 -0
  178. package/dist/config-validation.d.ts.map +1 -0
  179. package/dist/content/index.d.ts +1 -10
  180. package/dist/content/index.d.ts.map +1 -1
  181. package/dist/content/index.js +0 -2
  182. package/dist/cookies/define-cookie.d.ts +58 -25
  183. package/dist/cookies/define-cookie.d.ts.map +1 -1
  184. package/dist/cookies/index.d.ts +2 -1
  185. package/dist/cookies/index.d.ts.map +1 -1
  186. package/dist/cookies/index.js +251 -36
  187. package/dist/cookies/index.js.map +1 -1
  188. package/dist/cookies/json-cookie.d.ts +64 -0
  189. package/dist/cookies/json-cookie.d.ts.map +1 -0
  190. package/dist/cookies/validation.d.ts +46 -0
  191. package/dist/cookies/validation.d.ts.map +1 -0
  192. package/dist/dev-tools/404-page.d.ts +46 -0
  193. package/dist/dev-tools/404-page.d.ts.map +1 -0
  194. package/dist/dev-tools/browser-logs.d.ts +84 -0
  195. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  196. package/dist/dev-tools/error-page.d.ts +58 -0
  197. package/dist/dev-tools/error-page.d.ts.map +1 -0
  198. package/dist/dev-tools/holding-server.d.ts +54 -0
  199. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  200. package/dist/dev-tools/index.d.ts +31 -0
  201. package/dist/dev-tools/index.d.ts.map +1 -0
  202. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  203. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  204. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  205. package/dist/dev-tools/logger.d.ts.map +1 -0
  206. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  207. package/dist/dev-tools/logs.d.ts.map +1 -0
  208. package/dist/dev-tools/overlay.d.ts +91 -0
  209. package/dist/dev-tools/overlay.d.ts.map +1 -0
  210. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  211. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  212. package/dist/dev-tools/terminal.d.ts +28 -0
  213. package/dist/dev-tools/terminal.d.ts.map +1 -0
  214. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  215. package/dist/dev-tools/warnings.d.ts.map +1 -0
  216. package/dist/fonts/ast.d.ts +98 -6
  217. package/dist/fonts/ast.d.ts.map +1 -1
  218. package/dist/fonts/bundle.d.ts +48 -0
  219. package/dist/fonts/bundle.d.ts.map +1 -0
  220. package/dist/fonts/dev-middleware.d.ts +22 -0
  221. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  222. package/dist/fonts/local.d.ts +1 -1
  223. package/dist/fonts/pipeline.d.ts +167 -0
  224. package/dist/fonts/pipeline.d.ts.map +1 -0
  225. package/dist/fonts/transform.d.ts +78 -0
  226. package/dist/fonts/transform.d.ts.map +1 -0
  227. package/dist/fonts/types.d.ts +45 -1
  228. package/dist/fonts/types.d.ts.map +1 -1
  229. package/dist/fonts/virtual-modules.d.ts +94 -0
  230. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  231. package/dist/index.d.ts +46 -190
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/index.js +4807 -12729
  234. package/dist/index.js.map +1 -1
  235. package/dist/params/codec-registry.d.ts +26 -0
  236. package/dist/params/codec-registry.d.ts.map +1 -0
  237. package/dist/params/define-schema.d.ts +81 -0
  238. package/dist/params/define-schema.d.ts.map +1 -0
  239. package/dist/params/index.d.ts +5 -0
  240. package/dist/params/index.d.ts.map +1 -0
  241. package/dist/params/index.js +34 -0
  242. package/dist/params/index.js.map +1 -0
  243. package/dist/params/resolve-schema.d.ts +34 -0
  244. package/dist/params/resolve-schema.d.ts.map +1 -0
  245. package/dist/plugin-context.d.ts +107 -0
  246. package/dist/plugin-context.d.ts.map +1 -0
  247. package/dist/plugins/adapter-build.d.ts +1 -1
  248. package/dist/plugins/adapter-build.d.ts.map +1 -1
  249. package/dist/plugins/build-manifest.d.ts +2 -2
  250. package/dist/plugins/build-manifest.d.ts.map +1 -1
  251. package/dist/plugins/build-report.d.ts +9 -7
  252. package/dist/plugins/build-report.d.ts.map +1 -1
  253. package/dist/plugins/client-chunks.d.ts +32 -0
  254. package/dist/plugins/client-chunks.d.ts.map +1 -0
  255. package/dist/plugins/content.d.ts +1 -1
  256. package/dist/plugins/content.d.ts.map +1 -1
  257. package/dist/plugins/dev-server.d.ts +1 -1
  258. package/dist/plugins/dev-server.d.ts.map +1 -1
  259. package/dist/plugins/entries.d.ts +1 -1
  260. package/dist/plugins/entries.d.ts.map +1 -1
  261. package/dist/plugins/fonts.d.ts +17 -73
  262. package/dist/plugins/fonts.d.ts.map +1 -1
  263. package/dist/plugins/mdx.d.ts +1 -1
  264. package/dist/plugins/mdx.d.ts.map +1 -1
  265. package/dist/plugins/routing.d.ts +1 -1
  266. package/dist/plugins/routing.d.ts.map +1 -1
  267. package/dist/plugins/server-bundle.d.ts.map +1 -1
  268. package/dist/plugins/shims.d.ts +6 -5
  269. package/dist/plugins/shims.d.ts.map +1 -1
  270. package/dist/plugins/static-build.d.ts +5 -26
  271. package/dist/plugins/static-build.d.ts.map +1 -1
  272. package/dist/routing/codegen-shared.d.ts +63 -0
  273. package/dist/routing/codegen-shared.d.ts.map +1 -0
  274. package/dist/routing/codegen-types.d.ts +60 -0
  275. package/dist/routing/codegen-types.d.ts.map +1 -0
  276. package/dist/routing/codegen.d.ts +7 -2
  277. package/dist/routing/codegen.d.ts.map +1 -1
  278. package/dist/routing/convention-lint.d.ts +41 -0
  279. package/dist/routing/convention-lint.d.ts.map +1 -0
  280. package/dist/routing/index.d.ts +7 -1
  281. package/dist/routing/index.d.ts.map +1 -1
  282. package/dist/routing/index.js +4 -2
  283. package/dist/routing/link-codegen.d.ts +90 -0
  284. package/dist/routing/link-codegen.d.ts.map +1 -0
  285. package/dist/routing/scanner.d.ts +1 -10
  286. package/dist/routing/scanner.d.ts.map +1 -1
  287. package/dist/routing/schema-validation.d.ts +35 -0
  288. package/dist/routing/schema-validation.d.ts.map +1 -0
  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 +62 -21
  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 +147 -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 +114 -0
  565. package/src/params/index.ts +17 -0
  566. package/src/params/resolve-schema.ts +101 -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 +371 -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 +316 -177
  584. package/src/routing/convention-lint.ts +357 -0
  585. package/src/routing/index.ts +10 -1
  586. package/src/routing/interception.ts +1 -1
  587. package/src/routing/link-codegen.ts +308 -0
  588. package/src/routing/scanner.ts +165 -110
  589. package/src/routing/schema-validation.ts +149 -0
  590. package/src/routing/segment-classify.ts +188 -0
  591. package/src/routing/segment-codegen.ts +98 -0
  592. package/src/routing/types.ts +78 -25
  593. package/src/routing/walkers.ts +90 -0
  594. package/src/rsc-runtime/rsc.ts +2 -0
  595. package/src/rsc-runtime/ssr.ts +50 -0
  596. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  597. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  598. package/src/search-params/define.ts +538 -0
  599. package/src/search-params/index.ts +14 -20
  600. package/src/search-params/registry.ts +2 -2
  601. package/src/search-params/wrappers.ts +92 -0
  602. package/src/segment-params/define.ts +336 -0
  603. package/src/segment-params/index.ts +9 -0
  604. package/src/server/access-gate.tsx +76 -34
  605. package/src/server/action-client.ts +88 -15
  606. package/src/server/action-encryption.ts +144 -0
  607. package/src/server/action-handler.ts +112 -14
  608. package/src/server/actions.ts +10 -9
  609. package/src/server/als-registry.ts +55 -7
  610. package/src/server/asset-headers.ts +8 -34
  611. package/src/server/build-manifest.ts +10 -4
  612. package/src/server/coalesce-tick.ts +75 -0
  613. package/src/server/compress.ts +25 -7
  614. package/src/server/cookie-context.ts +468 -0
  615. package/src/server/cookie-parsing.ts +135 -0
  616. package/src/server/debug.ts +1 -1
  617. package/src/server/default-logger.ts +99 -0
  618. package/src/server/deny-boundary.ts +218 -0
  619. package/src/server/deny-renderer.ts +31 -50
  620. package/src/server/dev-source-map.ts +31 -0
  621. package/src/server/early-hints-sender.ts +3 -2
  622. package/src/server/early-hints.ts +36 -15
  623. package/src/server/error-boundary-wrapper.ts +74 -22
  624. package/src/server/fallback-error.ts +74 -102
  625. package/src/server/flight-injection-state.ts +113 -0
  626. package/src/server/flight-scripts.ts +62 -0
  627. package/src/server/flush.ts +2 -1
  628. package/src/server/form-data.ts +76 -0
  629. package/src/server/html-injector-core.ts +417 -0
  630. package/src/server/html-injectors.ts +235 -223
  631. package/src/server/index.ts +29 -183
  632. package/src/server/internal.ts +176 -0
  633. package/src/server/logger.ts +67 -36
  634. package/src/server/middleware-runner.ts +75 -4
  635. package/src/server/node-stream-transforms.ts +361 -0
  636. package/src/server/param-coercion.ts +206 -0
  637. package/src/server/pipeline-helpers.ts +204 -0
  638. package/src/server/pipeline-interception.ts +17 -16
  639. package/src/server/pipeline-metadata.ts +13 -0
  640. package/src/server/pipeline-outcome.ts +176 -0
  641. package/src/server/pipeline-phases.ts +460 -0
  642. package/src/server/pipeline.ts +154 -394
  643. package/src/server/port-resolution.ts +215 -0
  644. package/src/server/primitives.ts +111 -28
  645. package/src/server/render-timeout.ts +108 -0
  646. package/src/server/request-context.ts +168 -333
  647. package/src/server/route-element-builder.ts +309 -195
  648. package/src/server/route-handler.ts +24 -4
  649. package/src/server/route-matcher.ts +50 -231
  650. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  651. package/src/server/rsc-entry/api-handler.ts +16 -17
  652. package/src/server/rsc-entry/error-renderer.ts +305 -89
  653. package/src/server/rsc-entry/helpers.ts +137 -12
  654. package/src/server/rsc-entry/index.ts +316 -352
  655. package/src/server/rsc-entry/render-route.ts +307 -0
  656. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  657. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  658. package/src/server/rsc-entry/ssr-bridge.ts +14 -5
  659. package/src/server/rsc-entry/ssr-renderer.ts +187 -38
  660. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  661. package/src/server/safe-load.ts +60 -0
  662. package/src/server/sensitive-fields.ts +230 -0
  663. package/src/server/sitemap-generator.ts +338 -0
  664. package/src/server/sitemap-handler.ts +126 -0
  665. package/src/server/slot-resolver.ts +228 -246
  666. package/src/server/ssr-entry.ts +229 -32
  667. package/src/server/ssr-render.ts +289 -67
  668. package/src/server/ssr-wrappers.tsx +139 -0
  669. package/src/server/state-tree-diff.ts +4 -1
  670. package/src/server/status-code-resolver.ts +112 -128
  671. package/src/server/stream-utils.ts +213 -0
  672. package/src/server/tracing.ts +21 -10
  673. package/src/server/tree-builder.ts +202 -90
  674. package/src/server/tree-match.ts +198 -0
  675. package/src/server/types.ts +55 -6
  676. package/src/server/utils/escape-html.ts +20 -0
  677. package/src/server/version-skew.ts +104 -0
  678. package/src/shared/merge-search-params.ts +55 -0
  679. package/src/shims/font-google.ts +1 -1
  680. package/src/shims/font-local.ts +34 -0
  681. package/src/shims/headers.ts +5 -1
  682. package/src/shims/navigation-client.ts +4 -3
  683. package/src/shims/navigation.ts +14 -7
  684. package/src/utils/state-machine.ts +111 -0
  685. package/LICENSE +0 -8
  686. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  687. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  688. package/dist/_chunks/debug-gwlJkDuf.js +0 -108
  689. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  690. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  691. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  692. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  693. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  694. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  695. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  696. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  697. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  698. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  699. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  700. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  701. package/dist/cache/register-cached-function.d.ts +0 -17
  702. package/dist/cache/register-cached-function.d.ts.map +0 -1
  703. package/dist/client/browser-entry.d.ts +0 -21
  704. package/dist/client/browser-entry.d.ts.map +0 -1
  705. package/dist/client/link-status-provider.d.ts +0 -11
  706. package/dist/client/link-status-provider.d.ts.map +0 -1
  707. package/dist/client/transition-root.d.ts.map +0 -1
  708. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  709. package/dist/client/use-params.d.ts.map +0 -1
  710. package/dist/plugins/cache-transform.d.ts +0 -36
  711. package/dist/plugins/cache-transform.d.ts.map +0 -1
  712. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  713. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  714. package/dist/plugins/dev-logs.d.ts.map +0 -1
  715. package/dist/plugins/dynamic-transform.d.ts +0 -72
  716. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  717. package/dist/plugins/server-action-exports.d.ts +0 -26
  718. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  719. package/dist/routing/status-file-lint.d.ts +0 -33
  720. package/dist/routing/status-file-lint.d.ts.map +0 -1
  721. package/dist/search-params/analyze.d.ts +0 -54
  722. package/dist/search-params/analyze.d.ts.map +0 -1
  723. package/dist/search-params/builtin-codecs.d.ts +0 -105
  724. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  725. package/dist/search-params/codecs.d.ts +0 -53
  726. package/dist/search-params/codecs.d.ts.map +0 -1
  727. package/dist/search-params/create.d.ts +0 -106
  728. package/dist/search-params/create.d.ts.map +0 -1
  729. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  730. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  731. package/dist/server/dev-logger.d.ts.map +0 -1
  732. package/dist/server/dev-span-processor.d.ts.map +0 -1
  733. package/dist/server/dev-warnings.d.ts.map +0 -1
  734. package/dist/server/manifest-status-resolver.d.ts +0 -58
  735. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  736. package/dist/server/prerender.d.ts +0 -77
  737. package/dist/server/prerender.d.ts.map +0 -1
  738. package/dist/server/response-cache.d.ts +0 -54
  739. package/dist/server/response-cache.d.ts.map +0 -1
  740. package/dist/utils/directive-parser.d.ts +0 -70
  741. package/dist/utils/directive-parser.d.ts.map +0 -1
  742. package/src/cache/register-cached-function.ts +0 -103
  743. package/src/client/browser-entry.ts +0 -678
  744. package/src/client/link-status-provider.tsx +0 -30
  745. package/src/client/transition-root.tsx +0 -166
  746. package/src/plugins/cache-transform.ts +0 -199
  747. package/src/plugins/dev-error-overlay.ts +0 -230
  748. package/src/plugins/dynamic-transform.ts +0 -161
  749. package/src/plugins/server-action-exports.ts +0 -220
  750. package/src/routing/status-file-lint.ts +0 -112
  751. package/src/search-params/analyze.ts +0 -192
  752. package/src/search-params/builtin-codecs.ts +0 -228
  753. package/src/search-params/create.ts +0 -321
  754. package/src/server/dev-fetch-instrumentation.ts +0 -96
  755. package/src/server/dev-span-processor.ts +0 -78
  756. package/src/server/manifest-status-resolver.ts +0 -215
  757. package/src/server/prerender.ts +0 -139
  758. package/src/server/response-cache.ts +0 -410
  759. package/src/utils/directive-parser.ts +0 -529
  760. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -0,0 +1,964 @@
1
+ import { t as bindUseQueryStates } from "../_chunks/use-query-states-C9G6LP0F.js";
2
+ import { c as cachedSearchParams, i as _setCachedSearch, n as getSsrData, r as setSsrData, s as cachedSearch, t as clearSsrData } from "../_chunks/ssr-data-m9-cNEIw.js";
3
+ import { n as getRouterOrNull, r as setGlobalRouter, t as getRouter } from "../_chunks/router-ref-CpvjBqdu.js";
4
+ import { TimberErrorBoundary } from "./error-boundary.js";
5
+ import { n as useSegmentContext, t as SegmentProvider } from "../_chunks/segment-context-EsfQpS--.js";
6
+ import { t as setHardNavigating } from "../_chunks/navigation-root-DoRTeBm5.js";
7
+ import { a as getNavigationState, i as NavigationProvider, o as setNavigationState, t as setCurrentParams } from "../_chunks/use-segment-params-CtIAjqK0.js";
8
+ import { cloneElement, isValidElement, useSyncExternalStore } from "react";
9
+ //#region src/client/segment-cache.ts
10
+ /**
11
+ * Maintains the client-side segment tree representing currently mounted
12
+ * layouts and pages. Used for navigation reconciliation — the router diffs
13
+ * new routes against this tree to determine which segments to re-fetch.
14
+ */
15
+ var SegmentCache = class {
16
+ root;
17
+ get(segment) {
18
+ if (segment === "/" || segment === this.root?.segment) return this.root;
19
+ }
20
+ set(segment, node) {
21
+ if (segment === "/" || !this.root) this.root = node;
22
+ }
23
+ clear() {
24
+ this.root = void 0;
25
+ }
26
+ /**
27
+ * Serialize the mounted segment tree for the X-Timber-State-Tree header.
28
+ * Only includes sync segments — async segments are excluded because the
29
+ * server must always re-render them (they may depend on request context).
30
+ *
31
+ * When mergeableFilter is provided, only segments whose paths are in the
32
+ * set are included. This ensures the server only skips segments that the
33
+ * client can actually merge (i.e., segments whose cached element tree
34
+ * contains an inner SegmentProvider the merger can splice into).
35
+ *
36
+ * This is a performance optimization only, NOT a security boundary.
37
+ * The server always runs all access.ts files regardless of the state tree.
38
+ */
39
+ serializeStateTree(mergeableFilter) {
40
+ const segments = [];
41
+ if (this.root) collectSyncSegments(this.root, segments, mergeableFilter);
42
+ return { segments };
43
+ }
44
+ };
45
+ /** Recursively collect sync segment paths from the tree */
46
+ function collectSyncSegments(node, out, mergeableFilter) {
47
+ if (!node.isAsync && (!mergeableFilter || mergeableFilter.has(node.segment))) out.push(node.segment);
48
+ for (const child of node.children.values()) collectSyncSegments(child, out, mergeableFilter);
49
+ }
50
+ /**
51
+ * Build a SegmentNode tree from flat segment metadata.
52
+ *
53
+ * Takes an ordered list of segment descriptors (root → leaf) from the
54
+ * server's X-Timber-Segments header and constructs the hierarchical
55
+ * tree structure that SegmentCache expects.
56
+ *
57
+ * Each segment is nested as a child of the previous one, forming a
58
+ * linear chain from root to leaf. The leaf segment (page) is excluded
59
+ * from the tree — pages are never cached across navigations.
60
+ */
61
+ function buildSegmentTree(segments) {
62
+ if (segments.length === 0) return void 0;
63
+ const layouts = segments.length > 1 ? segments.slice(0, -1) : segments;
64
+ let root;
65
+ let parent;
66
+ for (const info of layouts) {
67
+ const node = {
68
+ segment: info.path,
69
+ payload: null,
70
+ isAsync: info.isAsync,
71
+ children: /* @__PURE__ */ new Map()
72
+ };
73
+ if (!root) root = node;
74
+ if (parent) parent.children.set(info.path, node);
75
+ parent = node;
76
+ }
77
+ return root;
78
+ }
79
+ /**
80
+ * Short-lived cache for hover-triggered prefetches. Entries expire after
81
+ * 30 seconds. When a link is clicked, the prefetched payload is consumed
82
+ * (moved to the history stack) and removed from this cache.
83
+ *
84
+ * timber.js does NOT prefetch on viewport intersection — only explicit
85
+ * hover on <Link prefetch> triggers a prefetch.
86
+ */
87
+ var PrefetchCache = class PrefetchCache {
88
+ static TTL_MS = 3e4;
89
+ entries = /* @__PURE__ */ new Map();
90
+ set(url, result) {
91
+ this.entries.set(url, {
92
+ result,
93
+ expiresAt: Date.now() + PrefetchCache.TTL_MS
94
+ });
95
+ }
96
+ get(url) {
97
+ const entry = this.entries.get(url);
98
+ if (!entry) return void 0;
99
+ if (Date.now() >= entry.expiresAt) {
100
+ this.entries.delete(url);
101
+ return;
102
+ }
103
+ return entry.result;
104
+ }
105
+ /** Get and remove the entry (used when navigation consumes a prefetch) */
106
+ consume(url) {
107
+ const result = this.get(url);
108
+ if (result !== void 0) this.entries.delete(url);
109
+ return result;
110
+ }
111
+ };
112
+ //#endregion
113
+ //#region src/client/history.ts
114
+ /**
115
+ * Session-lived history stack keyed by URL. Enables instant back/forward
116
+ * navigation without a server roundtrip.
117
+ *
118
+ * On forward navigation, the new page's payload is pushed onto the stack.
119
+ * On popstate, the cached payload is replayed instantly.
120
+ *
121
+ * Supports two keying modes:
122
+ * - **URL-keyed** (default): entries keyed by pathname + search.
123
+ * Used with the History API fallback.
124
+ * - **Entry-key + URL**: when the Navigation API is available,
125
+ * entries can also be stored by Navigation entry key for
126
+ * disambiguation of duplicate URLs in the history stack.
127
+ * Falls back to URL lookup when entry key is not found.
128
+ *
129
+ * Scroll positions are stored in history.state or Navigation API entry
130
+ * state, not in this stack — see design/19-client-navigation.md §Scroll Restoration.
131
+ *
132
+ * Entries persist for the session duration (no expiry) and are cleared
133
+ * when the tab is closed — matching browser back-button behavior.
134
+ */
135
+ var HistoryStack = class {
136
+ entries = /* @__PURE__ */ new Map();
137
+ /** Entries keyed by Navigation API entry key for duplicate URL disambiguation. */
138
+ entryKeyMap = /* @__PURE__ */ new Map();
139
+ push(url, entry, entryKey) {
140
+ this.entries.set(url, entry);
141
+ if (entryKey) this.entryKeyMap.set(entryKey, entry);
142
+ }
143
+ /**
144
+ * Get an entry. When an entry key is provided (Navigation API),
145
+ * tries the entry-key map first for accurate disambiguation of
146
+ * duplicate URLs, then falls back to URL lookup.
147
+ */
148
+ get(url, entryKey) {
149
+ if (entryKey) {
150
+ const byKey = this.entryKeyMap.get(entryKey);
151
+ if (byKey) return byKey;
152
+ }
153
+ return this.entries.get(url);
154
+ }
155
+ has(url) {
156
+ return this.entries.has(url);
157
+ }
158
+ };
159
+ //#endregion
160
+ //#region src/client/segment-merger.ts
161
+ /**
162
+ * Segment Merger — client-side tree merging for partial RSC payloads.
163
+ *
164
+ * When the server skips rendering sync layouts (because the client already
165
+ * has them cached), the RSC payload is missing outer segment wrappers.
166
+ * This module reconstructs the full element tree by splicing the partial
167
+ * payload into cached segment subtrees.
168
+ *
169
+ * The approach:
170
+ * 1. After each full RSC payload render, walk the decoded element tree
171
+ * and cache each segment's subtree (identified by SegmentProvider boundaries)
172
+ * 2. When a partial payload arrives, wrap it with cached segment elements
173
+ * using React.cloneElement to preserve component identity
174
+ *
175
+ * React.cloneElement preserves the element's `type` — React sees the same
176
+ * component at the same tree position and reconciles (preserving state)
177
+ * rather than remounting. This is how layout state survives navigations.
178
+ *
179
+ * Design docs: 19-client-navigation.md §"Navigation Reconciliation"
180
+ * Security: access.ts runs on the server regardless of skipping — this
181
+ * is a performance optimization only. See 13-security.md.
182
+ */
183
+ /**
184
+ * Cache of React element subtrees per segment path.
185
+ * Updated after each navigation with the full decoded RSC element tree.
186
+ */
187
+ var SegmentElementCache = class {
188
+ entries = /* @__PURE__ */ new Map();
189
+ get(segmentPath) {
190
+ return this.entries.get(segmentPath);
191
+ }
192
+ set(segmentPath, entry) {
193
+ this.entries.set(segmentPath, entry);
194
+ }
195
+ has(segmentPath) {
196
+ return this.entries.has(segmentPath);
197
+ }
198
+ clear() {
199
+ this.entries.clear();
200
+ }
201
+ get size() {
202
+ return this.entries.size;
203
+ }
204
+ /**
205
+ * Get the set of segment paths that are safe for the server to skip.
206
+ * Only segments with an inner SegmentProvider (hasMergeableChild) are
207
+ * included — the merger can only replace inner SegmentProviders, not
208
+ * pages embedded in layout output. Used to filter the state tree.
209
+ *
210
+ * Returns an empty set if the element cache is empty (no elements
211
+ * cached yet). This is the safe default — an empty set means no
212
+ * segments pass the filter, so the state tree is empty and the server
213
+ * does a full render. The element cache is populated lazily after the
214
+ * first SPA navigation (RSC-decoded elements from hydration are
215
+ * thenables that can't be walked until React resolves them).
216
+ */
217
+ getMergeablePaths() {
218
+ const paths = /* @__PURE__ */ new Set();
219
+ for (const [, entry] of this.entries) if (entry.hasMergeableChild) paths.add(entry.segmentPath);
220
+ return paths;
221
+ }
222
+ };
223
+ /**
224
+ * Check if a React element is a SegmentProvider by looking for the
225
+ * `segments` prop (an array of path segments). This is the only
226
+ * component that receives this prop shape.
227
+ */
228
+ function isSegmentProvider(element) {
229
+ if (!isValidElement(element)) return false;
230
+ const props = element.props;
231
+ return Array.isArray(props.segments);
232
+ }
233
+ /**
234
+ * Extract the segment path from a SegmentProvider element.
235
+ *
236
+ * Uses the `segmentId` prop if available (set by the server for route groups
237
+ * to distinguish siblings that share the same urlPath). Falls back to
238
+ * reconstructing from the `segments` array prop.
239
+ */
240
+ function getSegmentPath(element) {
241
+ const props = element.props;
242
+ if (props.segmentId) return props.segmentId;
243
+ const filtered = props.segments.filter(Boolean);
244
+ return filtered.length === 0 ? "/" : "/" + filtered.join("/");
245
+ }
246
+ /**
247
+ * Walk a React element tree and extract all SegmentProvider boundaries.
248
+ * Returns an ordered list of segment entries from outermost to innermost.
249
+ *
250
+ * This only finds SegmentProviders along the main children path — it does
251
+ * not descend into parallel routes/slots (those are separate subtrees).
252
+ */
253
+ function extractSegments(element) {
254
+ const segments = [];
255
+ walkForSegments(element, segments);
256
+ for (let i = 0; i < segments.length; i++) segments[i].hasMergeableChild = i < segments.length - 1;
257
+ return segments;
258
+ }
259
+ function walkForSegments(node, out) {
260
+ if (!isValidElement(node)) return;
261
+ const el = node;
262
+ const props = el.props;
263
+ if (isSegmentProvider(node)) {
264
+ out.push({
265
+ segmentPath: getSegmentPath(el),
266
+ element: el,
267
+ hasMergeableChild: false
268
+ });
269
+ walkChildren(props.children, out);
270
+ return;
271
+ }
272
+ walkChildren(props.children, out);
273
+ }
274
+ function walkChildren(children, out) {
275
+ if (children == null) return;
276
+ if (Array.isArray(children)) for (const child of children) walkForSegments(child, out);
277
+ else walkForSegments(children, out);
278
+ }
279
+ /**
280
+ * Cache all segment subtrees from a fully-rendered RSC element tree.
281
+ * Call this after every full RSC payload render (navigate, refresh, hydration).
282
+ */
283
+ function cacheSegmentElements(element, cache) {
284
+ const segments = extractSegments(element);
285
+ for (const entry of segments) cache.set(entry.segmentPath, entry);
286
+ }
287
+ function findSegmentProviderPath(node, targetPath) {
288
+ const children = node.props.children;
289
+ if (children == null) return null;
290
+ if (Array.isArray(children)) for (let i = 0; i < children.length; i++) {
291
+ const child = children[i];
292
+ if (!isValidElement(child)) continue;
293
+ if (isSegmentProvider(child)) {
294
+ if (!targetPath || getSegmentPath(child) === targetPath) return [{
295
+ element: node,
296
+ childIndex: i
297
+ }];
298
+ }
299
+ const deeper = findSegmentProviderPath(child, targetPath);
300
+ if (deeper) return [{
301
+ element: node,
302
+ childIndex: i
303
+ }, ...deeper];
304
+ }
305
+ else if (isValidElement(children)) {
306
+ if (isSegmentProvider(children)) {
307
+ if (!targetPath || getSegmentPath(children) === targetPath) return [{
308
+ element: node,
309
+ childIndex: -1
310
+ }];
311
+ }
312
+ const deeper = findSegmentProviderPath(children, targetPath);
313
+ if (deeper) return [{
314
+ element: node,
315
+ childIndex: -1
316
+ }, ...deeper];
317
+ }
318
+ return null;
319
+ }
320
+ /**
321
+ * Replace a nested SegmentProvider within a cached element tree with
322
+ * new content. Uses cloneElement along the path to produce a new tree
323
+ * with preserved component identity at every level except the replaced node.
324
+ *
325
+ * @param cachedElement The cached SegmentProvider element for this segment
326
+ * @param newInnerContent The new React element to splice in at the inner segment position
327
+ * @param innerSegmentPath The path of the inner segment to replace (optional — replaces first found)
328
+ * @returns New element tree with the inner segment replaced
329
+ */
330
+ function replaceInnerSegment(cachedElement, newInnerContent, innerSegmentPath) {
331
+ const path = findSegmentProviderPath(cachedElement, innerSegmentPath);
332
+ if (!path || path.length === 0) return cachedElement;
333
+ let replacement = newInnerContent;
334
+ for (let i = path.length - 1; i >= 0; i--) {
335
+ const { element, childIndex } = path[i];
336
+ if (childIndex === -1) replacement = cloneElement(element, {}, replacement);
337
+ else {
338
+ const newChildren = [...element.props.children];
339
+ newChildren[childIndex] = replacement;
340
+ replacement = cloneElement(element, {}, ...newChildren);
341
+ }
342
+ }
343
+ return replacement;
344
+ }
345
+ /**
346
+ * Merge a partial RSC payload with cached segment elements.
347
+ *
348
+ * When the server skips segments, the partial payload starts from the
349
+ * first non-skipped segment. This function wraps it with cached elements
350
+ * for the skipped segments, producing a full tree that React can
351
+ * reconcile with the mounted tree (preserving layout state).
352
+ *
353
+ * @param partialPayload The RSC payload element (may be partial)
354
+ * @param skippedSegments Ordered list of segment paths that were skipped (outermost first)
355
+ * @param cache The segment element cache
356
+ * @returns The merged full element tree, or the partial payload if merging isn't possible
357
+ */
358
+ function mergeSegmentTree(partialPayload, skippedSegments, cache) {
359
+ if (!isValidElement(partialPayload)) return partialPayload;
360
+ if (skippedSegments.length === 0) return partialPayload;
361
+ let result = partialPayload;
362
+ for (let i = skippedSegments.length - 1; i >= 0; i--) {
363
+ const segmentPath = skippedSegments[i];
364
+ const cached = cache.get(segmentPath);
365
+ if (!cached) return partialPayload;
366
+ result = replaceInnerSegment(cached.element, result);
367
+ }
368
+ return result;
369
+ }
370
+ //#endregion
371
+ //#region src/client/rsc-fetch.ts
372
+ var RSC_CONTENT_TYPE = "text/x-component";
373
+ /**
374
+ * Generate a short random cache-busting ID (5 chars, a-z0-9).
375
+ * Matches the format Next.js uses for _rsc params.
376
+ */
377
+ function generateCacheBustId() {
378
+ const chars = "abcdefghijklmnopqrstuvwxyz0123456789";
379
+ let id = "";
380
+ for (let i = 0; i < 5; i++) id += chars[Math.random() * 36 | 0];
381
+ return id;
382
+ }
383
+ /**
384
+ * Append a `_rsc=<id>` query parameter to the URL.
385
+ * Follows Next.js's pattern — prevents CDN/browser from serving cached HTML
386
+ * for RSC navigation requests and signals that this is an RSC fetch.
387
+ */
388
+ function appendRscParam(url) {
389
+ return `${url}${url.includes("?") ? "&" : "?"}_rsc=${generateCacheBustId()}`;
390
+ }
391
+ /**
392
+ * The client's deployment ID, set at bootstrap from the runtime config.
393
+ * Sent with every RSC/action request for version skew detection.
394
+ * Null in dev mode. See TIM-446.
395
+ */
396
+ var clientDeploymentId = null;
397
+ /** Header name used by the server to signal a version skew reload. */
398
+ var RELOAD_HEADER = "X-Timber-Reload";
399
+ /** Header name for the client's deployment ID. */
400
+ var DEPLOYMENT_ID_HEADER = "X-Timber-Deployment-Id";
401
+ /**
402
+ * Check if a response signals a version skew reload.
403
+ * Triggers a full page reload if the server indicates the client is stale.
404
+ */
405
+ function checkReloadSignal(response) {
406
+ return response.headers.get(RELOAD_HEADER) === "1";
407
+ }
408
+ function buildRscHeaders(stateTree, currentUrl) {
409
+ const headers = { Accept: RSC_CONTENT_TYPE };
410
+ if (stateTree) headers["X-Timber-State-Tree"] = JSON.stringify(stateTree);
411
+ if (currentUrl) headers["X-Timber-URL"] = currentUrl;
412
+ if (clientDeploymentId) headers[DEPLOYMENT_ID_HEADER] = clientDeploymentId;
413
+ return headers;
414
+ }
415
+ /** Dev-only warning for malformed framework headers. Tree-shaken in production. */
416
+ function warnMalformedHeader(headerName, raw) {
417
+ if (process.env.NODE_ENV !== "production") {
418
+ const preview = raw.length > 200 ? raw.slice(0, 200) + "…" : raw;
419
+ console.warn(`[timber] Malformed ${headerName} header \u2014 JSON.parse failed. This indicates a framework bug or header corruption. Raw (first 200 chars): ${preview}`);
420
+ }
421
+ }
422
+ /**
423
+ * Extract head elements from the X-Timber-Head response header.
424
+ * Returns null if the header is missing or malformed.
425
+ */
426
+ function extractHeadElements(response) {
427
+ const header = response.headers.get("X-Timber-Head");
428
+ if (!header) return null;
429
+ try {
430
+ return JSON.parse(decodeURIComponent(header));
431
+ } catch {
432
+ warnMalformedHeader("X-Timber-Head", header);
433
+ return null;
434
+ }
435
+ }
436
+ /**
437
+ * Extract segment metadata from the X-Timber-Segments response header.
438
+ * Returns null if the header is missing or malformed.
439
+ *
440
+ * Format: JSON array of {path, isAsync} objects describing the rendered
441
+ * segment chain from root to leaf. Used to populate the client-side
442
+ * segment cache for state tree diffing on subsequent navigations.
443
+ */
444
+ function extractSegmentInfo(response) {
445
+ const header = response.headers.get("X-Timber-Segments");
446
+ if (!header) return null;
447
+ try {
448
+ return JSON.parse(header);
449
+ } catch {
450
+ warnMalformedHeader("X-Timber-Segments", header);
451
+ return null;
452
+ }
453
+ }
454
+ /**
455
+ * Extract skipped segment paths from the X-Timber-Skipped-Segments header.
456
+ * Returns null if the header is missing or malformed.
457
+ *
458
+ * When the server skips sync layouts the client already has cached,
459
+ * it sends this header listing the skipped segment paths (outermost first).
460
+ * The client uses this to merge the partial payload with cached segments.
461
+ */
462
+ function extractSkippedSegments(response) {
463
+ const header = response.headers.get("X-Timber-Skipped-Segments");
464
+ if (!header) return null;
465
+ try {
466
+ const parsed = JSON.parse(header);
467
+ return Array.isArray(parsed) ? parsed : null;
468
+ } catch {
469
+ warnMalformedHeader("X-Timber-Skipped-Segments", header);
470
+ return null;
471
+ }
472
+ }
473
+ /**
474
+ * Extract route params from the X-Timber-Params response header.
475
+ * Returns null if the header is missing or malformed.
476
+ *
477
+ * Used to populate useSegmentParams() after client-side navigation.
478
+ */
479
+ function extractParams(response) {
480
+ const header = response.headers.get("X-Timber-Params");
481
+ if (!header) return null;
482
+ try {
483
+ return JSON.parse(header);
484
+ } catch {
485
+ warnMalformedHeader("X-Timber-Params", header);
486
+ return null;
487
+ }
488
+ }
489
+ /**
490
+ * Thrown when an RSC payload response contains X-Timber-Redirect header.
491
+ * Caught in navigate() to trigger a soft router navigation to the redirect target.
492
+ */
493
+ var RedirectError = class extends Error {
494
+ redirectUrl;
495
+ constructor(url) {
496
+ super(`Server redirect to ${url}`);
497
+ this.redirectUrl = url;
498
+ }
499
+ };
500
+ /**
501
+ * Thrown when the server signals a version skew (X-Timber-Reload header).
502
+ * Caught in navigate() to trigger a full page reload via triggerStaleReload().
503
+ * See TIM-446.
504
+ */
505
+ var VersionSkewError = class extends Error {
506
+ constructor() {
507
+ super("Version skew detected — server has been redeployed");
508
+ }
509
+ };
510
+ /**
511
+ * Thrown when the server returns an error for an RSC payload request.
512
+ * The server sends X-Timber-Error header and a JSON body instead of a
513
+ * broken RSC stream for any RenderError (4xx or 5xx). Caught in
514
+ * navigate() to trigger a hard navigation so the server can render
515
+ * the error page as HTML.
516
+ *
517
+ * See design/10-error-handling.md §"Error Page Rendering for Client Navigation"
518
+ */
519
+ var ServerErrorResponse = class extends Error {
520
+ status;
521
+ url;
522
+ constructor(status, url) {
523
+ super(`Server error ${status} during navigation to ${url}`);
524
+ this.status = status;
525
+ this.url = url;
526
+ }
527
+ };
528
+ /**
529
+ * Fetch an RSC payload from the server. If a decodeRsc function is provided,
530
+ * the response is decoded into a React element tree via createFromFetch.
531
+ * Otherwise, the raw response text is returned (test mode).
532
+ *
533
+ * Also extracts head elements from the X-Timber-Head response header
534
+ * so the client can update document.title and <meta> tags after navigation.
535
+ */
536
+ async function fetchRscPayload(url, deps, stateTree, currentUrl, signal) {
537
+ const rscUrl = appendRscParam(url);
538
+ const headers = buildRscHeaders(stateTree, currentUrl);
539
+ if (deps.decodeRsc) {
540
+ const fetchPromise = deps.fetch(rscUrl, {
541
+ headers,
542
+ redirect: "manual",
543
+ signal
544
+ });
545
+ let headElements = null;
546
+ let segmentInfo = null;
547
+ let params = null;
548
+ let skippedSegments = null;
549
+ const wrappedPromise = fetchPromise.then((response) => {
550
+ if (checkReloadSignal(response)) throw new VersionSkewError();
551
+ const redirectLocation = response.headers.get("X-Timber-Redirect") || (response.status >= 300 && response.status < 400 ? response.headers.get("Location") : null);
552
+ if (redirectLocation) throw new RedirectError(redirectLocation);
553
+ if (response.headers.get("X-Timber-Error") === "1") throw new ServerErrorResponse(response.status, url);
554
+ headElements = extractHeadElements(response);
555
+ segmentInfo = extractSegmentInfo(response);
556
+ params = extractParams(response);
557
+ skippedSegments = extractSkippedSegments(response);
558
+ return response;
559
+ });
560
+ await wrappedPromise;
561
+ return {
562
+ payload: await deps.decodeRsc(wrappedPromise),
563
+ headElements,
564
+ segmentInfo,
565
+ params,
566
+ skippedSegments
567
+ };
568
+ }
569
+ const response = await deps.fetch(rscUrl, {
570
+ headers,
571
+ redirect: "manual",
572
+ signal
573
+ });
574
+ if (response.status >= 300 && response.status < 400) {
575
+ const location = response.headers.get("Location");
576
+ if (location) throw new RedirectError(location);
577
+ }
578
+ return {
579
+ payload: await response.text(),
580
+ headElements: extractHeadElements(response),
581
+ segmentInfo: extractSegmentInfo(response),
582
+ params: extractParams(response),
583
+ skippedSegments: extractSkippedSegments(response)
584
+ };
585
+ }
586
+ //#endregion
587
+ //#region src/client/router.ts
588
+ /**
589
+ * Check if an error is an abort error (connection closed / fetch aborted).
590
+ * Browsers throw DOMException with name 'AbortError' when a fetch is aborted.
591
+ */
592
+ function isAbortError(error) {
593
+ if (error instanceof DOMException && error.name === "AbortError") return true;
594
+ if (error instanceof Error && error.name === "AbortError") return true;
595
+ return false;
596
+ }
597
+ function createRouter(deps) {
598
+ const segmentCache = new SegmentCache();
599
+ const prefetchCache = new PrefetchCache();
600
+ const historyStack = new HistoryStack();
601
+ const segmentElementCache = new SegmentElementCache();
602
+ let routerPhase = { phase: "idle" };
603
+ const pendingListeners = /* @__PURE__ */ new Set();
604
+ let currentNavAbort = null;
605
+ /**
606
+ * Create a new AbortController for a navigation, aborting any
607
+ * previous in-flight navigation. Optionally links to an external
608
+ * signal (e.g., from the Navigation API's NavigateEvent.signal).
609
+ */
610
+ function createNavAbort(externalSignal) {
611
+ currentNavAbort?.abort();
612
+ const controller = new AbortController();
613
+ currentNavAbort = controller;
614
+ if (externalSignal) if (externalSignal.aborted) controller.abort();
615
+ else externalSignal.addEventListener("abort", () => controller.abort(), { once: true });
616
+ return controller;
617
+ }
618
+ function setPending(value, url) {
619
+ const next = value && url ? {
620
+ phase: "navigating",
621
+ targetUrl: url
622
+ } : { phase: "idle" };
623
+ if (routerPhase.phase === next.phase && (routerPhase.phase === "idle" || routerPhase.phase === "navigating" && next.phase === "navigating" && routerPhase.targetUrl === next.targetUrl)) return;
624
+ routerPhase = next;
625
+ for (const listener of pendingListeners) listener(value);
626
+ }
627
+ /** Update the segment cache from server-provided segment metadata. */
628
+ function updateSegmentCache(segmentInfo) {
629
+ if (!segmentInfo || segmentInfo.length === 0) return;
630
+ const tree = buildSegmentTree(segmentInfo);
631
+ if (tree) segmentCache.set("/", tree);
632
+ }
633
+ /** Render a decoded RSC payload into the DOM if a renderer is available. */
634
+ function renderPayload(payload, navState) {
635
+ if (deps.renderRoot) deps.renderRoot(payload, navState);
636
+ }
637
+ /**
638
+ * Merge a partial RSC payload with cached segment elements if segments
639
+ * were skipped, then cache segments from the (merged) payload.
640
+ * Returns the merged payload ready for rendering.
641
+ */
642
+ function mergeAndCachePayload(payload, skippedSegments) {
643
+ let merged = payload;
644
+ if (skippedSegments && skippedSegments.length > 0) merged = mergeSegmentTree(payload, skippedSegments, segmentElementCache);
645
+ cacheSegmentElements(merged, segmentElementCache);
646
+ return merged;
647
+ }
648
+ /**
649
+ * Update navigation state (params + pathname) for the next render.
650
+ *
651
+ * Sets the module-level fallback (for tests and SSR) and the
652
+ * globalThis bridge, then returns the NavigationState so callers
653
+ * can pass it explicitly to renderRoot/wrapPayload — eliminating
654
+ * temporal coupling with getNavigationState().
655
+ */
656
+ function updateNavigationState(params, url) {
657
+ const resolvedParams = params ?? {};
658
+ setCurrentParams(resolvedParams);
659
+ const navState = {
660
+ params: resolvedParams,
661
+ pathname: url.startsWith("http") ? new URL(url).pathname : url.split("?")[0] || "/"
662
+ };
663
+ setNavigationState(navState);
664
+ return navState;
665
+ }
666
+ /**
667
+ * Render a payload via navigateTransition (production) or renderRoot (tests).
668
+ * The perform callback should fetch data, update state, and return the
669
+ * FetchResult plus the NavigationState (so it can be passed explicitly
670
+ * to wrapPayload/renderRoot without temporal coupling).
671
+ */
672
+ async function renderViaTransition(url, perform) {
673
+ if (deps.navigateTransition) {
674
+ let headElements = null;
675
+ await deps.navigateTransition(url, async (wrapPayload) => {
676
+ const result = await perform();
677
+ headElements = result.headElements;
678
+ const merged = mergeAndCachePayload(result.payload, result.skippedSegments);
679
+ historyStack.push(url, {
680
+ payload: merged,
681
+ headElements: result.headElements,
682
+ params: result.params
683
+ });
684
+ return wrapPayload(merged, result.navState);
685
+ });
686
+ return headElements;
687
+ }
688
+ const result = await perform();
689
+ const merged = mergeAndCachePayload(result.payload, result.skippedSegments);
690
+ historyStack.push(url, {
691
+ payload: merged,
692
+ headElements: result.headElements,
693
+ params: result.params
694
+ });
695
+ renderPayload(merged, result.navState);
696
+ return result.headElements;
697
+ }
698
+ /** Apply head elements (title, meta tags) to the DOM if available. */
699
+ function applyHead(elements) {
700
+ if (elements && deps.applyHead) deps.applyHead(elements);
701
+ }
702
+ /** Run a callback after the next paint (after React commit). */
703
+ function afterPaint(callback) {
704
+ if (deps.afterPaint) deps.afterPaint(callback);
705
+ else callback();
706
+ }
707
+ /**
708
+ * Schedule scroll restoration after the next paint and fire the
709
+ * scroll-restored event. Used by navigate, popstate, and refresh.
710
+ */
711
+ function restoreScrollAfterPaint(scrollY) {
712
+ afterPaint(() => {
713
+ deps.scrollTo(0, scrollY);
714
+ window.dispatchEvent(new Event("timber:scroll-restored"));
715
+ });
716
+ }
717
+ /**
718
+ * Core navigation logic shared between the transition and fallback paths.
719
+ * Fetches the RSC payload, updates all state, and returns the result.
720
+ */
721
+ async function performNavigationFetch(url, options) {
722
+ const prefetched = prefetchCache.consume(url);
723
+ let result = prefetched ? {
724
+ payload: prefetched.payload,
725
+ headElements: prefetched.headElements,
726
+ segmentInfo: prefetched.segmentInfo ?? null,
727
+ params: prefetched.params ?? null,
728
+ skippedSegments: prefetched.skippedSegments ?? null
729
+ } : void 0;
730
+ if (result === void 0) {
731
+ const stateTree = segmentCache.serializeStateTree(segmentElementCache.getMergeablePaths());
732
+ const rawCurrentUrl = deps.getCurrentUrl();
733
+ result = await fetchRscPayload(url, deps, stateTree, rawCurrentUrl.startsWith("http") ? new URL(rawCurrentUrl).pathname : new URL(rawCurrentUrl, "http://localhost").pathname, options.signal);
734
+ }
735
+ if (!options.skipHistory) {
736
+ deps.setRouterNavigating?.(true);
737
+ if (options.replace) deps.replaceState({
738
+ timber: true,
739
+ scrollY: 0
740
+ }, "", url);
741
+ else deps.pushState({
742
+ timber: true,
743
+ scrollY: 0
744
+ }, "", url);
745
+ deps.setRouterNavigating?.(false);
746
+ }
747
+ updateSegmentCache(result.segmentInfo);
748
+ const navState = updateNavigationState(result.params, url);
749
+ return {
750
+ ...result,
751
+ navState
752
+ };
753
+ }
754
+ async function navigate(url, options = {}) {
755
+ const scroll = options.scroll !== false;
756
+ const replace = options.replace === true;
757
+ const externalSignal = options._signal;
758
+ const skipHistory = options._skipHistory === true;
759
+ const navAbort = createNavAbort(externalSignal);
760
+ const currentScrollY = deps.getScrollY();
761
+ if (deps.saveNavigationEntryScroll) deps.saveNavigationEntryScroll(currentScrollY);
762
+ else deps.replaceState({
763
+ timber: true,
764
+ scrollY: currentScrollY
765
+ }, "", deps.getCurrentUrl());
766
+ let effectiveSkipHistory = skipHistory;
767
+ if (!skipHistory && deps.navigationNavigate) {
768
+ deps.setRouterNavigating?.(true);
769
+ deps.navigationNavigate(url, replace);
770
+ deps.setRouterNavigating?.(false);
771
+ effectiveSkipHistory = true;
772
+ }
773
+ setPending(true, url);
774
+ try {
775
+ applyHead(await renderViaTransition(url, () => performNavigationFetch(url, {
776
+ replace,
777
+ signal: navAbort.signal,
778
+ skipHistory: effectiveSkipHistory
779
+ })));
780
+ window.dispatchEvent(new Event("timber:navigation-end"));
781
+ restoreScrollAfterPaint(scroll ? 0 : currentScrollY);
782
+ } catch (error) {
783
+ if (error instanceof VersionSkewError) {
784
+ setHardNavigating(true);
785
+ const { triggerStaleReload } = await import("../_chunks/stale-reload-BN2kcE06.js");
786
+ triggerStaleReload();
787
+ return new Promise(() => {});
788
+ }
789
+ if (error instanceof RedirectError) {
790
+ setPending(false);
791
+ deps.completeRouterNavigation?.();
792
+ await navigate(error.redirectUrl, { replace: true });
793
+ return;
794
+ }
795
+ if (error instanceof ServerErrorResponse) {
796
+ setHardNavigating(true);
797
+ window.location.href = error.url;
798
+ return new Promise(() => {});
799
+ }
800
+ if (isAbortError(error)) return;
801
+ throw error;
802
+ } finally {
803
+ if (currentNavAbort === navAbort) currentNavAbort = null;
804
+ setPending(false);
805
+ deps.completeRouterNavigation?.();
806
+ }
807
+ }
808
+ async function refresh() {
809
+ const currentUrl = deps.getCurrentUrl();
810
+ const navAbort = createNavAbort();
811
+ setPending(true, currentUrl);
812
+ try {
813
+ applyHead(await renderViaTransition(currentUrl, async () => {
814
+ const result = await fetchRscPayload(currentUrl, deps, void 0, void 0, navAbort.signal);
815
+ updateSegmentCache(result.segmentInfo);
816
+ const navState = updateNavigationState(result.params, currentUrl);
817
+ return {
818
+ ...result,
819
+ navState
820
+ };
821
+ }));
822
+ } catch (error) {
823
+ if (isAbortError(error)) return;
824
+ throw error;
825
+ } finally {
826
+ if (currentNavAbort === navAbort) currentNavAbort = null;
827
+ setPending(false);
828
+ deps.completeRouterNavigation?.();
829
+ }
830
+ }
831
+ async function handlePopState(url, scrollY = 0, externalSignal) {
832
+ const entry = historyStack.get(url);
833
+ if (entry && entry.payload !== null) {
834
+ const navState = updateNavigationState(entry.params, url);
835
+ renderPayload(entry.payload, navState);
836
+ applyHead(entry.headElements);
837
+ restoreScrollAfterPaint(scrollY);
838
+ } else {
839
+ const navAbort = createNavAbort(externalSignal);
840
+ setPending(true, url);
841
+ try {
842
+ applyHead(await renderViaTransition(url, async () => {
843
+ const result = await fetchRscPayload(url, deps, segmentCache.serializeStateTree(segmentElementCache.getMergeablePaths()), void 0, navAbort.signal);
844
+ updateSegmentCache(result.segmentInfo);
845
+ const navState = updateNavigationState(result.params, url);
846
+ return {
847
+ ...result,
848
+ navState
849
+ };
850
+ }));
851
+ restoreScrollAfterPaint(scrollY);
852
+ } catch (error) {
853
+ if (isAbortError(error)) return;
854
+ throw error;
855
+ } finally {
856
+ if (currentNavAbort === navAbort) currentNavAbort = null;
857
+ setPending(false);
858
+ }
859
+ }
860
+ }
861
+ /**
862
+ * Prefetch an RSC payload for a URL and store it in the prefetch cache.
863
+ * Called on hover of <Link prefetch> elements.
864
+ */
865
+ function prefetch(url) {
866
+ if (prefetchCache.get(url) !== void 0) return;
867
+ if (historyStack.has(url)) return;
868
+ fetchRscPayload(url, deps, segmentCache.serializeStateTree(segmentElementCache.getMergeablePaths())).then((result) => {
869
+ prefetchCache.set(url, result);
870
+ }, () => {});
871
+ }
872
+ return {
873
+ navigate,
874
+ refresh,
875
+ handlePopState,
876
+ isPending: () => routerPhase.phase === "navigating",
877
+ getPendingUrl: () => routerPhase.phase === "navigating" ? routerPhase.targetUrl : null,
878
+ onPendingChange(listener) {
879
+ pendingListeners.add(listener);
880
+ return () => pendingListeners.delete(listener);
881
+ },
882
+ prefetch,
883
+ applyRevalidation(element, headElements) {
884
+ const currentUrl = deps.getCurrentUrl();
885
+ const merged = mergeAndCachePayload(element, null);
886
+ historyStack.push(currentUrl, {
887
+ payload: merged,
888
+ headElements
889
+ });
890
+ renderPayload(merged, getNavigationState());
891
+ applyHead(headElements);
892
+ },
893
+ initSegmentCache: (segments) => updateSegmentCache(segments),
894
+ cacheElementTree: (element) => cacheSegmentElements(element, segmentElementCache),
895
+ segmentCache,
896
+ prefetchCache,
897
+ historyStack
898
+ };
899
+ }
900
+ //#endregion
901
+ //#region src/client/use-search-params.ts
902
+ /**
903
+ * useSearchParams() — client-side hook for reading URL search params.
904
+ *
905
+ * Returns a read-only URLSearchParams instance reflecting the current
906
+ * URL's query string. Updates when client-side navigation changes the URL.
907
+ *
908
+ * This is a thin wrapper over window.location.search, provided for
909
+ * Next.js API compatibility (libraries like nuqs import useSearchParams
910
+ * from next/navigation).
911
+ *
912
+ * Unlike Next.js's ReadonlyURLSearchParams, this returns a standard
913
+ * URLSearchParams. Mutation methods (set, delete, append) work on the
914
+ * local copy but do NOT affect the URL — use the router or nuqs for that.
915
+ *
916
+ * During SSR, reads the request search params from the SSR ALS context
917
+ * (populated by ssr-entry.ts) instead of window.location.
918
+ *
919
+ * All mutable state is delegated to client/state.ts for singleton guarantees.
920
+ * See design/18-build-system.md §"Singleton State Registry"
921
+ */
922
+ function getSearch() {
923
+ if (typeof window !== "undefined") return window.location.search;
924
+ const data = getSsrData();
925
+ if (!data) return "";
926
+ const str = new URLSearchParams(data.searchParams).toString();
927
+ return str ? `?${str}` : "";
928
+ }
929
+ function getServerSearch() {
930
+ const data = getSsrData();
931
+ if (!data) return "";
932
+ const str = new URLSearchParams(data.searchParams).toString();
933
+ return str ? `?${str}` : "";
934
+ }
935
+ function subscribe(callback) {
936
+ window.addEventListener("popstate", callback);
937
+ return () => window.removeEventListener("popstate", callback);
938
+ }
939
+ function getSearchParams() {
940
+ const search = getSearch();
941
+ if (search !== cachedSearch) {
942
+ const params = new URLSearchParams(search);
943
+ _setCachedSearch(search, params);
944
+ return params;
945
+ }
946
+ return cachedSearchParams;
947
+ }
948
+ function getServerSearchParams() {
949
+ const data = getSsrData();
950
+ return data ? new URLSearchParams(data.searchParams) : new URLSearchParams();
951
+ }
952
+ /**
953
+ * Read the current URL search params.
954
+ *
955
+ * Compatible with Next.js's `useSearchParams()` from `next/navigation`.
956
+ */
957
+ function useSearchParams() {
958
+ useSyncExternalStore(subscribe, getSearch, getServerSearch);
959
+ return typeof window !== "undefined" ? getSearchParams() : getServerSearchParams();
960
+ }
961
+ //#endregion
962
+ export { HistoryStack, NavigationProvider, PrefetchCache, SegmentCache, SegmentProvider, TimberErrorBoundary, bindUseQueryStates, clearSsrData, createRouter, getNavigationState, getRouter, getRouterOrNull, getSsrData, setCurrentParams, setGlobalRouter, setNavigationState, setSsrData, useSearchParams, useSegmentContext };
963
+
964
+ //# sourceMappingURL=internal.js.map