@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
@@ -0,0 +1,925 @@
1
+ import { t as __exportAll } from "../index.js";
2
+ import { t as bindUseQueryStates } from "../_chunks/use-query-states-CbeQmext.js";
3
+ import { c as cachedSearchParams, i as _setCachedSearch, n as getSsrData, r as setSsrData, s as cachedSearch, t as clearSsrData } from "../_chunks/ssr-data-BOWsq18U.js";
4
+ import { a as setNavigationState, i as getNavigationState, o as useNavigationContext, r as NavigationProvider, t as setCurrentParams } from "../_chunks/use-segment-params-D1CzlgBo.js";
5
+ import { n as getRouterOrNull, r as setGlobalRouter, t as getRouter } from "../_chunks/router-ref-CtmF-aPv.js";
6
+ import { TimberErrorBoundary } from "./error-boundary.js";
7
+ import { n as useSegmentContext, t as SegmentProvider } from "../_chunks/segment-context-ZDnXDkbz.js";
8
+ import { t as setHardNavigating } from "../_chunks/navigation-root-DLc4s4ZC.js";
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 id = info.segmentId ?? info.path;
68
+ const node = {
69
+ segment: id,
70
+ payload: null,
71
+ isAsync: info.isAsync,
72
+ children: /* @__PURE__ */ new Map()
73
+ };
74
+ if (!root) root = node;
75
+ if (parent) parent.children.set(id, node);
76
+ parent = node;
77
+ }
78
+ return root;
79
+ }
80
+ /**
81
+ * Short-lived cache for hover-triggered prefetches. Entries expire after
82
+ * 30 seconds. When a link is clicked, the prefetched payload is consumed
83
+ * (moved to the history stack) and removed from this cache.
84
+ *
85
+ * timber.js does NOT prefetch on viewport intersection — only explicit
86
+ * hover on <Link prefetch> triggers a prefetch.
87
+ */
88
+ var PrefetchCache = class PrefetchCache {
89
+ static TTL_MS = 3e4;
90
+ entries = /* @__PURE__ */ new Map();
91
+ set(url, result) {
92
+ this.entries.set(url, {
93
+ result,
94
+ expiresAt: Date.now() + PrefetchCache.TTL_MS
95
+ });
96
+ }
97
+ get(url) {
98
+ const entry = this.entries.get(url);
99
+ if (!entry) return void 0;
100
+ if (Date.now() >= entry.expiresAt) {
101
+ this.entries.delete(url);
102
+ return;
103
+ }
104
+ return entry.result;
105
+ }
106
+ /** Get and remove the entry (used when navigation consumes a prefetch) */
107
+ consume(url) {
108
+ const result = this.get(url);
109
+ if (result !== void 0) this.entries.delete(url);
110
+ return result;
111
+ }
112
+ };
113
+ //#endregion
114
+ //#region src/client/history.ts
115
+ /**
116
+ * Session-lived history stack keyed by URL. Enables instant back/forward
117
+ * navigation without a server roundtrip.
118
+ *
119
+ * On forward navigation, the new page's payload is pushed onto the stack.
120
+ * On popstate, the cached payload is replayed instantly.
121
+ *
122
+ * Supports two keying modes:
123
+ * - **URL-keyed** (default): entries keyed by pathname + search.
124
+ * Used with the History API fallback.
125
+ * - **Entry-key + URL**: when the Navigation API is available,
126
+ * entries can also be stored by Navigation entry key for
127
+ * disambiguation of duplicate URLs in the history stack.
128
+ * Falls back to URL lookup when entry key is not found.
129
+ *
130
+ * Scroll positions are stored in history.state or Navigation API entry
131
+ * state, not in this stack — see design/19-client-navigation.md §Scroll Restoration.
132
+ *
133
+ * Entries persist for the session duration (no expiry) and are cleared
134
+ * when the tab is closed — matching browser back-button behavior.
135
+ */
136
+ var HistoryStack = class {
137
+ entries = /* @__PURE__ */ new Map();
138
+ /** Entries keyed by Navigation API entry key for duplicate URL disambiguation. */
139
+ entryKeyMap = /* @__PURE__ */ new Map();
140
+ push(url, entry, entryKey) {
141
+ this.entries.set(url, entry);
142
+ if (entryKey) this.entryKeyMap.set(entryKey, entry);
143
+ }
144
+ /**
145
+ * Get an entry. When an entry key is provided (Navigation API),
146
+ * tries the entry-key map first for accurate disambiguation of
147
+ * duplicate URLs, then falls back to URL lookup.
148
+ */
149
+ get(url, entryKey) {
150
+ if (entryKey) {
151
+ const byKey = this.entryKeyMap.get(entryKey);
152
+ if (byKey) return byKey;
153
+ }
154
+ return this.entries.get(url);
155
+ }
156
+ has(url) {
157
+ return this.entries.has(url);
158
+ }
159
+ };
160
+ //#endregion
161
+ //#region src/client/rsc-fetch.ts
162
+ var RSC_CONTENT_TYPE = "text/x-component";
163
+ /**
164
+ * Generate a short random cache-busting ID (5 chars, a-z0-9).
165
+ * Matches the format Next.js uses for _rsc params.
166
+ */
167
+ function generateCacheBustId() {
168
+ const chars = "abcdefghijklmnopqrstuvwxyz0123456789";
169
+ let id = "";
170
+ for (let i = 0; i < 5; i++) id += chars[Math.random() * 36 | 0];
171
+ return id;
172
+ }
173
+ /**
174
+ * Append a `_rsc=<id>` query parameter to the URL.
175
+ * Follows Next.js's pattern — prevents CDN/browser from serving cached HTML
176
+ * for RSC navigation requests and signals that this is an RSC fetch.
177
+ */
178
+ function appendRscParam(url) {
179
+ return `${url}${url.includes("?") ? "&" : "?"}_rsc=${generateCacheBustId()}`;
180
+ }
181
+ /**
182
+ * The client's deployment ID, set at bootstrap from the runtime config.
183
+ * Sent with every RSC/action request for version skew detection.
184
+ * Null in dev mode. See TIM-446.
185
+ */
186
+ var clientDeploymentId = null;
187
+ /** Header name used by the server to signal a version skew reload. */
188
+ var RELOAD_HEADER = "X-Timber-Reload";
189
+ /** Header name for the client's deployment ID. */
190
+ var DEPLOYMENT_ID_HEADER = "X-Timber-Deployment-Id";
191
+ /**
192
+ * Check if a response signals a version skew reload.
193
+ * Triggers a full page reload if the server indicates the client is stale.
194
+ */
195
+ function checkReloadSignal(response) {
196
+ return response.headers.get(RELOAD_HEADER) === "1";
197
+ }
198
+ function buildRscHeaders(stateTree, currentUrl) {
199
+ const headers = { Accept: RSC_CONTENT_TYPE };
200
+ if (stateTree) headers["X-Timber-State-Tree"] = JSON.stringify(stateTree);
201
+ if (currentUrl) headers["X-Timber-URL"] = currentUrl;
202
+ if (clientDeploymentId) headers[DEPLOYMENT_ID_HEADER] = clientDeploymentId;
203
+ return headers;
204
+ }
205
+ /** Dev-only warning for malformed framework headers. Tree-shaken in production. */
206
+ function warnMalformedHeader(headerName, raw) {
207
+ if (process.env.NODE_ENV !== "production") {
208
+ const preview = raw.length > 200 ? raw.slice(0, 200) + "…" : raw;
209
+ console.warn(`[timber] Malformed ${headerName} header \u2014 JSON.parse failed. This indicates a framework bug or header corruption. Raw (first 200 chars): ${preview}`);
210
+ }
211
+ }
212
+ /**
213
+ * Extract head elements from the X-Timber-Head response header.
214
+ * Returns null if the header is missing or malformed.
215
+ */
216
+ function extractHeadElements(response) {
217
+ const header = response.headers.get("X-Timber-Head");
218
+ if (!header) return null;
219
+ try {
220
+ return JSON.parse(decodeURIComponent(header));
221
+ } catch {
222
+ warnMalformedHeader("X-Timber-Head", header);
223
+ return null;
224
+ }
225
+ }
226
+ /**
227
+ * Extract segment metadata from the X-Timber-Segments response header.
228
+ * Returns null if the header is missing or malformed.
229
+ *
230
+ * Format: JSON array of {path, isAsync} objects describing the rendered
231
+ * segment chain from root to leaf. Used to populate the client-side
232
+ * segment cache for state tree diffing on subsequent navigations.
233
+ */
234
+ function extractSegmentInfo(response) {
235
+ const header = response.headers.get("X-Timber-Segments");
236
+ if (!header) return null;
237
+ try {
238
+ return JSON.parse(header);
239
+ } catch {
240
+ warnMalformedHeader("X-Timber-Segments", header);
241
+ return null;
242
+ }
243
+ }
244
+ /**
245
+ * Extract skipped segment paths from the X-Timber-Skipped-Segments header.
246
+ * Returns null if the header is missing or malformed.
247
+ *
248
+ * When the server skips sync layouts the client already has cached,
249
+ * it sends this header listing the skipped segment paths (outermost first).
250
+ * The client uses this to merge the partial payload with cached segments.
251
+ */
252
+ function extractSkippedSegments(response) {
253
+ const header = response.headers.get("X-Timber-Skipped-Segments");
254
+ if (!header) return null;
255
+ try {
256
+ const parsed = JSON.parse(header);
257
+ return Array.isArray(parsed) ? parsed : null;
258
+ } catch {
259
+ warnMalformedHeader("X-Timber-Skipped-Segments", header);
260
+ return null;
261
+ }
262
+ }
263
+ /**
264
+ * Extract route params from the X-Timber-Params response header.
265
+ * Returns null if the header is missing or malformed.
266
+ *
267
+ * Used to populate useSegmentParams() after client-side navigation.
268
+ */
269
+ function extractParams(response) {
270
+ const header = response.headers.get("X-Timber-Params");
271
+ if (!header) return null;
272
+ try {
273
+ return JSON.parse(header);
274
+ } catch {
275
+ warnMalformedHeader("X-Timber-Params", header);
276
+ return null;
277
+ }
278
+ }
279
+ /**
280
+ * Thrown when an RSC payload response contains X-Timber-Redirect header.
281
+ * Caught in navigate() to trigger a soft router navigation to the redirect target.
282
+ */
283
+ var RedirectError = class extends Error {
284
+ redirectUrl;
285
+ constructor(url) {
286
+ super(`Server redirect to ${url}`);
287
+ this.redirectUrl = url;
288
+ }
289
+ };
290
+ /**
291
+ * Thrown when the server signals a version skew (X-Timber-Reload header).
292
+ * Caught in navigate() to trigger a full page reload via triggerStaleReload().
293
+ * See TIM-446.
294
+ */
295
+ var VersionSkewError = class extends Error {
296
+ constructor() {
297
+ super("Version skew detected — server has been redeployed");
298
+ }
299
+ };
300
+ /**
301
+ * Thrown when the server returns an error for an RSC payload request.
302
+ * The server sends X-Timber-Error header and a JSON body instead of a
303
+ * broken RSC stream for any RenderError (4xx or 5xx). Caught in
304
+ * navigate() to trigger a hard navigation so the server can render
305
+ * the error page as HTML.
306
+ *
307
+ * See design/10-error-handling.md §"Error Page Rendering for Client Navigation"
308
+ */
309
+ var ServerErrorResponse = class extends Error {
310
+ status;
311
+ url;
312
+ constructor(status, url) {
313
+ super(`Server error ${status} during navigation to ${url}`);
314
+ this.status = status;
315
+ this.url = url;
316
+ }
317
+ };
318
+ /**
319
+ * Wrap a response body stream to track when it's fully consumed.
320
+ * Returns a new body that passes all chunks through unchanged, plus
321
+ * a `done` promise that resolves when the last chunk is read (or
322
+ * rejects if the stream errors).
323
+ *
324
+ * Used to keep React transitions open for the full RSC stream
325
+ * duration — createFromFetch's thenable resolves on shell arrival,
326
+ * but we need stream completion for useOptimistic pending state.
327
+ */
328
+ function trackStreamCompletion(body) {
329
+ let resolveDone;
330
+ let rejectDone;
331
+ const done = new Promise((res, rej) => {
332
+ resolveDone = res;
333
+ rejectDone = rej;
334
+ });
335
+ const reader = body.getReader();
336
+ return {
337
+ body: new ReadableStream({
338
+ async pull(controller) {
339
+ try {
340
+ const result = await reader.read();
341
+ if (result.done) {
342
+ controller.close();
343
+ resolveDone();
344
+ } else controller.enqueue(result.value);
345
+ } catch (error) {
346
+ controller.error(error);
347
+ rejectDone(error);
348
+ }
349
+ },
350
+ cancel(reason) {
351
+ reader.cancel(reason);
352
+ resolveDone();
353
+ }
354
+ }),
355
+ done
356
+ };
357
+ }
358
+ /**
359
+ * Fetch an RSC payload from the server. If a decodeRsc function is provided,
360
+ * the response is decoded into a React element tree via createFromFetch.
361
+ * Otherwise, the raw response text is returned (test mode).
362
+ *
363
+ * Also extracts head elements from the X-Timber-Head response header
364
+ * so the client can update document.title and <meta> tags after navigation.
365
+ */
366
+ async function fetchRscPayload(url, deps, stateTree, currentUrl, signal) {
367
+ const rscUrl = appendRscParam(url);
368
+ const headers = buildRscHeaders(stateTree, currentUrl);
369
+ if (deps.decodeRsc) {
370
+ const fetchPromise = deps.fetch(rscUrl, {
371
+ headers,
372
+ redirect: "manual",
373
+ signal
374
+ });
375
+ let headElements = null;
376
+ let segmentInfo = null;
377
+ let params = null;
378
+ let skippedSegments = null;
379
+ let streamDone = Promise.resolve();
380
+ const wrappedPromise = fetchPromise.then((response) => {
381
+ if (checkReloadSignal(response)) throw new VersionSkewError();
382
+ const redirectLocation = response.headers.get("X-Timber-Redirect") || (response.status >= 300 && response.status < 400 ? response.headers.get("Location") : null);
383
+ if (redirectLocation) throw new RedirectError(redirectLocation);
384
+ if (response.headers.get("X-Timber-Error") === "1") throw new ServerErrorResponse(response.status, url);
385
+ headElements = extractHeadElements(response);
386
+ segmentInfo = extractSegmentInfo(response);
387
+ params = extractParams(response);
388
+ skippedSegments = extractSkippedSegments(response);
389
+ if (response.body) {
390
+ const tracked = trackStreamCompletion(response.body);
391
+ streamDone = tracked.done;
392
+ streamDone.catch(() => {});
393
+ return new Response(tracked.body, {
394
+ headers: response.headers,
395
+ status: response.status
396
+ });
397
+ }
398
+ return response;
399
+ });
400
+ await wrappedPromise;
401
+ const payload = deps.decodeRsc(wrappedPromise);
402
+ const payloadError = new Promise((_, reject) => {
403
+ Promise.resolve(payload).then(() => {}, reject);
404
+ });
405
+ payloadError.catch(() => {});
406
+ return {
407
+ payload,
408
+ decodePromise: Promise.race([streamDone, payloadError]),
409
+ headElements,
410
+ segmentInfo,
411
+ params,
412
+ skippedSegments
413
+ };
414
+ }
415
+ const response = await deps.fetch(rscUrl, {
416
+ headers,
417
+ redirect: "manual",
418
+ signal
419
+ });
420
+ if (response.status >= 300 && response.status < 400) {
421
+ const location = response.headers.get("Location");
422
+ if (location) throw new RedirectError(location);
423
+ }
424
+ return {
425
+ payload: await response.text(),
426
+ decodePromise: null,
427
+ headElements: extractHeadElements(response),
428
+ segmentInfo: extractSegmentInfo(response),
429
+ params: extractParams(response),
430
+ skippedSegments: extractSkippedSegments(response)
431
+ };
432
+ }
433
+ //#endregion
434
+ //#region src/client/stale-reload.ts
435
+ var stale_reload_exports = /* @__PURE__ */ __exportAll({
436
+ isStaleClientReference: () => isStaleClientReference,
437
+ triggerStaleReload: () => triggerStaleReload
438
+ });
439
+ /**
440
+ * Stale Client Reference Reload
441
+ *
442
+ * When a new deployment ships updated bundles, clients running stale
443
+ * JavaScript may encounter "Could not find the module" errors during
444
+ * RSC Flight stream decoding. This happens because the RSC payload
445
+ * references module IDs from the new bundle that don't exist in the
446
+ * old client bundle.
447
+ *
448
+ * This module detects these specific errors and triggers a full page
449
+ * reload so the browser fetches the new bundle. A sessionStorage flag
450
+ * guards against infinite reload loops.
451
+ *
452
+ * See: LOCAL-332
453
+ */
454
+ var RELOAD_FLAG_KEY = "__timber_stale_reload";
455
+ /**
456
+ * In-memory fallback counter for environments where sessionStorage is
457
+ * unavailable (private browsing, storage full, extension interference).
458
+ * Incremented each time triggerStaleReload() falls into the catch path.
459
+ * If the counter exceeds 0 on a subsequent call, the reload is suppressed
460
+ * to prevent an infinite loop. Resets naturally on page load (module
461
+ * re-evaluates) and can be manually reset via clearStaleReloadFlag().
462
+ */
463
+ var memoryReloadCount = 0;
464
+ /**
465
+ * Check if an error is a stale client reference error from React's
466
+ * Flight client. These errors have the message pattern:
467
+ * "Could not find the module \"<id>\""
468
+ *
469
+ * This is thrown by react-server-dom-webpack's client when the RSC
470
+ * payload references a module ID that doesn't exist in the client's
471
+ * module map — typically because the server has been redeployed with
472
+ * new bundle hashes while the client is still running old JavaScript.
473
+ */
474
+ function isStaleClientReference(error) {
475
+ if (!(error instanceof Error)) return false;
476
+ const msg = error.message;
477
+ return msg.includes("Could not find the module") || msg.includes("client reference not found");
478
+ }
479
+ /**
480
+ * Trigger a full page reload to pick up new bundles.
481
+ *
482
+ * Sets a sessionStorage flag before reloading. If the flag is already
483
+ * set (meaning we already reloaded once for this reason), we don't
484
+ * reload again — this prevents infinite reload loops if the error
485
+ * persists after reload (e.g., a genuine bug rather than a stale bundle).
486
+ *
487
+ * @returns true if a reload was triggered, false if suppressed (loop guard)
488
+ */
489
+ function triggerStaleReload() {
490
+ try {
491
+ if (sessionStorage.getItem(RELOAD_FLAG_KEY)) {
492
+ console.warn("[timber] Stale client reference detected again after reload. Not reloading to prevent infinite loop. This may indicate a deployment issue — try a hard refresh.");
493
+ return false;
494
+ }
495
+ sessionStorage.setItem(RELOAD_FLAG_KEY, "1");
496
+ console.warn("[timber] Stale client reference detected — the server has been redeployed with new bundles. Reloading to pick up the new version.");
497
+ window.location.reload();
498
+ return true;
499
+ } catch {
500
+ if (document.cookie.includes("__timber_stale_reload=1") || memoryReloadCount > 0) {
501
+ console.warn("[timber] Stale client reference detected again after reload. Not reloading to prevent infinite loop. This may indicate a deployment issue — try a hard refresh.");
502
+ return false;
503
+ }
504
+ memoryReloadCount++;
505
+ try {
506
+ document.cookie = `${RELOAD_FLAG_KEY}=1; max-age=60; path=/; SameSite=Lax`;
507
+ } catch {}
508
+ console.warn("[timber] Stale client reference detected — the server has been redeployed with new bundles. Reloading to pick up the new version.");
509
+ window.location.reload();
510
+ return true;
511
+ }
512
+ }
513
+ //#endregion
514
+ //#region src/client/router.ts
515
+ /**
516
+ * Check if an error is an abort error (connection closed / fetch aborted).
517
+ * Browsers throw DOMException with name 'AbortError' when a fetch is aborted.
518
+ */
519
+ function isAbortError(error) {
520
+ if (error instanceof DOMException && error.name === "AbortError") return true;
521
+ if (error instanceof Error && error.name === "AbortError") return true;
522
+ return false;
523
+ }
524
+ function createRouter(deps) {
525
+ const segmentCache = new SegmentCache();
526
+ const prefetchCache = new PrefetchCache();
527
+ const historyStack = new HistoryStack();
528
+ let routerPhase = { phase: "idle" };
529
+ const pendingListeners = /* @__PURE__ */ new Set();
530
+ let currentNavAbort = null;
531
+ /**
532
+ * Create a new AbortController for a navigation, aborting any
533
+ * previous in-flight navigation. Optionally links to an external
534
+ * signal (e.g., from the Navigation API's NavigateEvent.signal).
535
+ */
536
+ function createNavAbort(externalSignal) {
537
+ currentNavAbort?.abort();
538
+ const controller = new AbortController();
539
+ currentNavAbort = controller;
540
+ if (externalSignal) if (externalSignal.aborted) controller.abort();
541
+ else externalSignal.addEventListener("abort", () => controller.abort(), { once: true });
542
+ return controller;
543
+ }
544
+ function setPending(value, url) {
545
+ const next = value && url ? {
546
+ phase: "navigating",
547
+ targetUrl: url
548
+ } : { phase: "idle" };
549
+ if (routerPhase.phase === next.phase && (routerPhase.phase === "idle" || routerPhase.phase === "navigating" && next.phase === "navigating" && routerPhase.targetUrl === next.targetUrl)) return;
550
+ routerPhase = next;
551
+ for (const listener of pendingListeners) listener(value);
552
+ }
553
+ /** Update the segment cache from server-provided segment metadata. */
554
+ function updateSegmentCache(segmentInfo) {
555
+ if (!segmentInfo || segmentInfo.length === 0) return;
556
+ const tree = buildSegmentTree(segmentInfo);
557
+ if (tree) segmentCache.set("/", tree);
558
+ }
559
+ /** Render a decoded RSC payload into the DOM if a renderer is available. */
560
+ function renderPayload(payload, navState) {
561
+ if (deps.renderRoot) deps.renderRoot(payload, navState);
562
+ }
563
+ function isPartialNavigation(skippedSegments) {
564
+ return skippedSegments != null && skippedSegments.length > 0;
565
+ }
566
+ /**
567
+ * Build a segment updates map for partial navigation. Identifies the
568
+ * first non-skipped segment and maps it to the payload content.
569
+ */
570
+ function buildSegmentUpdates(result) {
571
+ const skipped = new Set(result.skippedSegments);
572
+ const segmentInfo = result.segmentInfo;
573
+ const updates = /* @__PURE__ */ new Map();
574
+ if (segmentInfo) {
575
+ for (const info of segmentInfo) if (!skipped.has(info.segmentId ?? info.path)) {
576
+ updates.set(info.segmentId ?? info.path, result.payload);
577
+ break;
578
+ }
579
+ }
580
+ return updates;
581
+ }
582
+ /**
583
+ * Update navigation state (params + pathname) for the next render.
584
+ *
585
+ * Sets the module-level fallback (for tests and SSR) and the
586
+ * globalThis bridge, then returns the NavigationState so callers
587
+ * can pass it explicitly to renderRoot/wrapPayload — eliminating
588
+ * temporal coupling with getNavigationState().
589
+ */
590
+ function updateNavigationState(params, url) {
591
+ const resolvedParams = params ?? {};
592
+ setCurrentParams(resolvedParams);
593
+ const parsed = new URL(url, "http://localhost");
594
+ const navState = {
595
+ params: resolvedParams,
596
+ pathname: parsed.pathname || "/",
597
+ search: parsed.search
598
+ };
599
+ setNavigationState(navState);
600
+ return navState;
601
+ }
602
+ async function renderViaTransition(url, perform) {
603
+ if (deps.navigateTransition) {
604
+ let headElements = null;
605
+ await deps.navigateTransition(url, async (wrapPayload) => {
606
+ const result = await perform();
607
+ headElements = result.headElements;
608
+ if (isPartialNavigation(result.skippedSegments)) {
609
+ const segmentUpdates = buildSegmentUpdates(result);
610
+ historyStack.push(url, {
611
+ payload: null,
612
+ headElements: result.headElements,
613
+ params: result.params
614
+ });
615
+ return {
616
+ element: wrapPayload(deps._getCurrentPayload?.() ?? result.payload, result.navState, segmentUpdates),
617
+ decodePromise: result.decodePromise
618
+ };
619
+ }
620
+ historyStack.push(url, {
621
+ payload: result.payload,
622
+ headElements: result.headElements,
623
+ params: result.params
624
+ });
625
+ return {
626
+ element: wrapPayload(result.payload, result.navState),
627
+ decodePromise: result.decodePromise
628
+ };
629
+ });
630
+ return {
631
+ headElements,
632
+ decodePromise: null
633
+ };
634
+ }
635
+ const result = await perform();
636
+ if (isPartialNavigation(result.skippedSegments)) historyStack.push(url, {
637
+ payload: null,
638
+ headElements: result.headElements,
639
+ params: result.params
640
+ });
641
+ else {
642
+ const payload = result.payload != null && typeof result.payload === "object" && "then" in result.payload ? await result.payload : result.payload;
643
+ historyStack.push(url, {
644
+ payload,
645
+ headElements: result.headElements,
646
+ params: result.params
647
+ });
648
+ renderPayload(payload, result.navState);
649
+ }
650
+ return {
651
+ headElements: result.headElements,
652
+ decodePromise: result.decodePromise
653
+ };
654
+ }
655
+ /** Apply head elements (title, meta tags) to the DOM if available. */
656
+ function applyHead(elements) {
657
+ if (elements && deps.applyHead) deps.applyHead(elements);
658
+ }
659
+ /** Run a callback after the next paint (after React commit). */
660
+ function afterPaint(callback) {
661
+ if (deps.afterPaint) deps.afterPaint(callback);
662
+ else callback();
663
+ }
664
+ /**
665
+ * Schedule scroll restoration after the next paint and fire the
666
+ * scroll-restored event. Used by navigate, popstate, and refresh.
667
+ */
668
+ function restoreScrollAfterPaint(scrollY) {
669
+ afterPaint(() => {
670
+ deps.scrollTo(0, scrollY);
671
+ window.dispatchEvent(new Event("timber:scroll-restored"));
672
+ });
673
+ }
674
+ /**
675
+ * Core navigation logic shared between the transition and fallback paths.
676
+ * Fetches the RSC payload, updates all state, and returns the result.
677
+ */
678
+ async function performNavigationFetch(url, options) {
679
+ const prefetched = prefetchCache.consume(url);
680
+ let result = prefetched ? {
681
+ payload: prefetched.payload,
682
+ decodePromise: null,
683
+ headElements: prefetched.headElements,
684
+ segmentInfo: prefetched.segmentInfo ?? null,
685
+ params: prefetched.params ?? null,
686
+ skippedSegments: prefetched.skippedSegments ?? null
687
+ } : void 0;
688
+ if (result === void 0) {
689
+ const stateTree = segmentCache.serializeStateTree();
690
+ const rawCurrentUrl = deps.getCurrentUrl();
691
+ result = await fetchRscPayload(url, deps, stateTree, rawCurrentUrl.startsWith("http") ? new URL(rawCurrentUrl).pathname : new URL(rawCurrentUrl, "http://localhost").pathname, options.signal);
692
+ }
693
+ if (!options.skipHistory) {
694
+ deps.setRouterNavigating?.(true);
695
+ if (options.replace) deps.replaceState({
696
+ timber: true,
697
+ scrollY: 0
698
+ }, "", url);
699
+ else deps.pushState({
700
+ timber: true,
701
+ scrollY: 0
702
+ }, "", url);
703
+ deps.setRouterNavigating?.(false);
704
+ }
705
+ updateSegmentCache(result.segmentInfo);
706
+ const navState = updateNavigationState(result.params, url);
707
+ return {
708
+ ...result,
709
+ navState
710
+ };
711
+ }
712
+ async function navigate(url, options = {}) {
713
+ const scroll = options.scroll !== false;
714
+ const replace = options.replace === true;
715
+ const externalSignal = options._signal;
716
+ const skipHistory = options._skipHistory === true;
717
+ const navAbort = createNavAbort(externalSignal);
718
+ const currentScrollY = deps.getScrollY();
719
+ if (deps.saveNavigationEntryScroll) deps.saveNavigationEntryScroll(currentScrollY);
720
+ else deps.replaceState({
721
+ timber: true,
722
+ scrollY: currentScrollY
723
+ }, "", deps.getCurrentUrl());
724
+ let effectiveSkipHistory = skipHistory;
725
+ if (!skipHistory && deps.navigationNavigate) {
726
+ deps.setRouterNavigating?.(true);
727
+ deps.navigationNavigate(url, replace);
728
+ deps.setRouterNavigating?.(false);
729
+ effectiveSkipHistory = true;
730
+ }
731
+ setPending(true, url);
732
+ try {
733
+ const { headElements } = await renderViaTransition(url, () => performNavigationFetch(url, {
734
+ replace,
735
+ signal: navAbort.signal,
736
+ skipHistory: effectiveSkipHistory
737
+ }));
738
+ applyHead(headElements);
739
+ window.dispatchEvent(new Event("timber:navigation-end"));
740
+ restoreScrollAfterPaint(scroll ? 0 : currentScrollY);
741
+ } catch (error) {
742
+ if (error instanceof VersionSkewError) {
743
+ setHardNavigating(true);
744
+ const { triggerStaleReload } = await Promise.resolve().then(() => stale_reload_exports);
745
+ triggerStaleReload();
746
+ return new Promise(() => {});
747
+ }
748
+ if (error instanceof RedirectError) {
749
+ setPending(false);
750
+ deps.completeRouterNavigation?.();
751
+ await navigate(error.redirectUrl, { replace: true });
752
+ return;
753
+ }
754
+ if (error instanceof ServerErrorResponse) {
755
+ setHardNavigating(true);
756
+ window.location.href = error.url;
757
+ return new Promise(() => {});
758
+ }
759
+ if (isStaleClientReference(error)) {
760
+ setHardNavigating(true);
761
+ triggerStaleReload();
762
+ return new Promise(() => {});
763
+ }
764
+ if (isAbortError(error)) return;
765
+ throw error;
766
+ } finally {
767
+ if (currentNavAbort === navAbort) currentNavAbort = null;
768
+ setPending(false);
769
+ deps.completeRouterNavigation?.();
770
+ }
771
+ }
772
+ async function refresh() {
773
+ const currentUrl = deps.getCurrentUrl();
774
+ const navAbort = createNavAbort();
775
+ setPending(true, currentUrl);
776
+ try {
777
+ const { headElements } = await renderViaTransition(currentUrl, async () => {
778
+ const result = await fetchRscPayload(currentUrl, deps, void 0, void 0, navAbort.signal);
779
+ updateSegmentCache(result.segmentInfo);
780
+ const navState = updateNavigationState(result.params, currentUrl);
781
+ return {
782
+ ...result,
783
+ navState
784
+ };
785
+ });
786
+ applyHead(headElements);
787
+ } catch (error) {
788
+ if (isStaleClientReference(error)) {
789
+ setHardNavigating(true);
790
+ triggerStaleReload();
791
+ return new Promise(() => {});
792
+ }
793
+ if (isAbortError(error)) return;
794
+ throw error;
795
+ } finally {
796
+ if (currentNavAbort === navAbort) currentNavAbort = null;
797
+ setPending(false);
798
+ deps.completeRouterNavigation?.();
799
+ }
800
+ }
801
+ async function handlePopState(url, scrollY = 0, externalSignal) {
802
+ const entry = historyStack.get(url);
803
+ if (entry && entry.payload !== null) {
804
+ const navState = updateNavigationState(entry.params, url);
805
+ renderPayload(entry.payload, navState);
806
+ applyHead(entry.headElements);
807
+ restoreScrollAfterPaint(scrollY);
808
+ } else {
809
+ const navAbort = createNavAbort(externalSignal);
810
+ setPending(true, url);
811
+ try {
812
+ const { headElements } = await renderViaTransition(url, async () => {
813
+ const result = await fetchRscPayload(url, deps, segmentCache.serializeStateTree(), void 0, navAbort.signal);
814
+ updateSegmentCache(result.segmentInfo);
815
+ const navState = updateNavigationState(result.params, url);
816
+ return {
817
+ ...result,
818
+ navState
819
+ };
820
+ });
821
+ applyHead(headElements);
822
+ restoreScrollAfterPaint(scrollY);
823
+ } catch (error) {
824
+ if (isStaleClientReference(error)) {
825
+ setHardNavigating(true);
826
+ triggerStaleReload();
827
+ return new Promise(() => {});
828
+ }
829
+ if (isAbortError(error)) return;
830
+ throw error;
831
+ } finally {
832
+ if (currentNavAbort === navAbort) currentNavAbort = null;
833
+ setPending(false);
834
+ }
835
+ }
836
+ }
837
+ /**
838
+ * Prefetch an RSC payload for a URL and store it in the prefetch cache.
839
+ * Called on hover of <Link prefetch> elements.
840
+ */
841
+ function prefetch(url) {
842
+ if (prefetchCache.get(url) !== void 0) return;
843
+ if (historyStack.has(url)) return;
844
+ fetchRscPayload(url, deps, segmentCache.serializeStateTree()).then((result) => {
845
+ result.decodePromise?.catch(() => {});
846
+ prefetchCache.set(url, result);
847
+ }, () => {});
848
+ }
849
+ return {
850
+ navigate,
851
+ refresh,
852
+ handlePopState,
853
+ isPending: () => routerPhase.phase === "navigating",
854
+ getPendingUrl: () => routerPhase.phase === "navigating" ? routerPhase.targetUrl : null,
855
+ onPendingChange(listener) {
856
+ pendingListeners.add(listener);
857
+ return () => pendingListeners.delete(listener);
858
+ },
859
+ prefetch,
860
+ applyRevalidation(element, headElements) {
861
+ const currentUrl = deps.getCurrentUrl();
862
+ historyStack.push(currentUrl, {
863
+ payload: element,
864
+ headElements
865
+ });
866
+ renderPayload(element, getNavigationState());
867
+ applyHead(headElements);
868
+ },
869
+ initSegmentCache: (segments) => updateSegmentCache(segments),
870
+ segmentCache,
871
+ prefetchCache,
872
+ historyStack
873
+ };
874
+ }
875
+ //#endregion
876
+ //#region src/client/use-search-params.ts
877
+ /**
878
+ * useSearchParams() — client-side hook for reading URL search params.
879
+ *
880
+ * Returns a read-only URLSearchParams instance reflecting the current
881
+ * URL's query string. Updates when client-side navigation changes the URL.
882
+ *
883
+ * On the client, reads from NavigationContext which is updated atomically
884
+ * with the RSC tree render. This replaces the previous useSyncExternalStore
885
+ * approach which read window.location.search directly — causing React to
886
+ * detect external store tearing during transitions and fall back to
887
+ * synchronous rendering (renderRootSync instead of renderRootConcurrent),
888
+ * blocking the main thread and freezing animations.
889
+ *
890
+ * Unlike Next.js's ReadonlyURLSearchParams, this returns a standard
891
+ * URLSearchParams. Mutation methods (set, delete, append) work on the
892
+ * local copy but do NOT affect the URL — use the router or nuqs for that.
893
+ *
894
+ * During SSR, reads the request search params from the SSR ALS context
895
+ * (populated by ssr-entry.ts) instead of window.location.
896
+ *
897
+ * Compatible with Next.js's `useSearchParams()` from `next/navigation`.
898
+ */
899
+ function getSearchParams(search) {
900
+ if (search !== cachedSearch) {
901
+ const params = new URLSearchParams(search);
902
+ _setCachedSearch(search, params);
903
+ return params;
904
+ }
905
+ return cachedSearchParams;
906
+ }
907
+ /**
908
+ * Read the current URL search params.
909
+ *
910
+ * Compatible with Next.js's `useSearchParams()` from `next/navigation`.
911
+ */
912
+ function useSearchParams() {
913
+ try {
914
+ const navContext = useNavigationContext();
915
+ if (navContext !== null) return getSearchParams(navContext.search);
916
+ } catch {}
917
+ const ssrData = getSsrData();
918
+ if (ssrData) return new URLSearchParams(ssrData.searchParams);
919
+ if (typeof window !== "undefined") return getSearchParams(window.location.search);
920
+ return new URLSearchParams();
921
+ }
922
+ //#endregion
923
+ export { HistoryStack, NavigationProvider, PrefetchCache, SegmentCache, SegmentProvider, TimberErrorBoundary, bindUseQueryStates, clearSsrData, createRouter, getNavigationState, getRouter, getRouterOrNull, getSsrData, setCurrentParams, setGlobalRouter, setNavigationState, setSsrData, useSearchParams, useSegmentContext };
924
+
925
+ //# sourceMappingURL=internal.js.map