@farm.js/core 0.1.0-beta.96 → 0.1.0-beta.97

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 (311) hide show
  1. package/dist/after.cjs +1 -1
  2. package/dist/after.mjs +1 -1
  3. package/dist/agent-runtime.d.mts +3 -2
  4. package/dist/agent-runtime.d.ts +3 -2
  5. package/dist/api/route-manager.cjs +43 -4
  6. package/dist/api/route-manager.d.mts +4 -3
  7. package/dist/api/route-manager.d.ts +4 -3
  8. package/dist/api/route-manager.mjs +6 -6
  9. package/dist/api/runtime.cjs +43 -4
  10. package/dist/api/runtime.d.mts +1 -1
  11. package/dist/api/runtime.d.ts +1 -1
  12. package/dist/api/runtime.mjs +4 -4
  13. package/dist/api.cjs +239 -70
  14. package/dist/api.d.mts +7 -6
  15. package/dist/api.d.ts +7 -6
  16. package/dist/api.mjs +17 -11
  17. package/dist/{app-CIIEvA4r.d.ts → app-CIOx3LvY.d.ts} +4 -4
  18. package/dist/{app-O4AEC1OH.d.mts → app-DBd6437H.d.mts} +4 -4
  19. package/dist/app-markdown.d.mts +4 -3
  20. package/dist/app-markdown.d.ts +4 -3
  21. package/dist/cache.cjs +42 -4
  22. package/dist/cache.d.mts +68 -1
  23. package/dist/cache.d.ts +68 -1
  24. package/dist/cache.mjs +3 -3
  25. package/dist/{chunk-AXVJCMVF.mjs → chunk-2HDOV47R.mjs} +3 -3
  26. package/dist/chunk-2HDOV47R.mjs.map +1 -0
  27. package/dist/{chunk-RBRLLZL5.mjs → chunk-34IAPZBG.mjs} +16 -3
  28. package/dist/chunk-34IAPZBG.mjs.map +1 -0
  29. package/dist/{chunk-VV24CC42.mjs → chunk-35NPLKQJ.mjs} +2 -2
  30. package/dist/{chunk-MM46HTX6.mjs → chunk-3TWQERDE.mjs} +4 -3
  31. package/dist/chunk-3TWQERDE.mjs.map +1 -0
  32. package/dist/{chunk-RWYRFCLG.mjs → chunk-4X57GXQA.mjs} +2 -2
  33. package/dist/{chunk-3I55IGXU.mjs → chunk-52BR7LTX.mjs} +14 -15
  34. package/dist/chunk-52BR7LTX.mjs.map +1 -0
  35. package/dist/{chunk-RAGSHKDC.mjs → chunk-6EJHNHH4.mjs} +38 -3
  36. package/dist/chunk-6EJHNHH4.mjs.map +1 -0
  37. package/dist/{chunk-ZFNK77WN.mjs → chunk-6JNGOC37.mjs} +2 -2
  38. package/dist/{after.cjs.map → chunk-6JNGOC37.mjs.map} +1 -1
  39. package/dist/{chunk-MOW47IF5.mjs → chunk-6UYVU46O.mjs} +2 -2
  40. package/dist/{chunk-7MABZJIM.mjs → chunk-7PYVLJ4J.mjs} +1 -1
  41. package/dist/chunk-7PYVLJ4J.mjs.map +1 -0
  42. package/dist/{chunk-54XSGLKT.mjs → chunk-D7F7YZ7L.mjs} +93 -67
  43. package/dist/chunk-D7F7YZ7L.mjs.map +1 -0
  44. package/dist/{chunk-SCFX4UTD.mjs → chunk-EHTUKVSW.mjs} +1 -1
  45. package/dist/chunk-EHTUKVSW.mjs.map +1 -0
  46. package/dist/{chunk-LZTGDH3H.mjs → chunk-EPDIF432.mjs} +424 -10
  47. package/dist/chunk-EPDIF432.mjs.map +1 -0
  48. package/dist/{chunk-GZHKWHCH.mjs → chunk-FP5Q67FO.mjs} +167 -96
  49. package/dist/chunk-FP5Q67FO.mjs.map +1 -0
  50. package/dist/{chunk-HHZAOTQD.mjs → chunk-GJ7W6LNK.mjs} +7 -6
  51. package/dist/chunk-GJ7W6LNK.mjs.map +1 -0
  52. package/dist/{chunk-RLGUZ3HS.mjs → chunk-I3OOUWO5.mjs} +3 -3
  53. package/dist/{chunk-LKKMI7JG.mjs → chunk-IZBX2TEU.mjs} +153 -68
  54. package/dist/chunk-IZBX2TEU.mjs.map +1 -0
  55. package/dist/{chunk-74QPONAN.mjs → chunk-J3MPQ4MQ.mjs} +2 -2
  56. package/dist/{chunk-74QPONAN.mjs.map → chunk-J3MPQ4MQ.mjs.map} +1 -1
  57. package/dist/{chunk-ODJGAWDH.mjs → chunk-JV7JUD7Q.mjs} +4 -4
  58. package/dist/{chunk-Q3OX763A.mjs → chunk-LXDASSTE.mjs} +2 -2
  59. package/dist/{chunk-ZRBCBOEX.mjs → chunk-N2FY2QZ7.mjs} +28 -3
  60. package/dist/chunk-N2FY2QZ7.mjs.map +1 -0
  61. package/dist/{chunk-MRVJCLYQ.mjs → chunk-PSQ7N4XP.mjs} +4 -2
  62. package/dist/chunk-PSQ7N4XP.mjs.map +1 -0
  63. package/dist/{chunk-HVG3HLQZ.mjs → chunk-Q7WGOOAI.mjs} +3 -3
  64. package/dist/{chunk-WTYAPO5I.mjs → chunk-RCNWMEBT.mjs} +3 -2
  65. package/dist/{chunk-WTYAPO5I.mjs.map → chunk-RCNWMEBT.mjs.map} +1 -1
  66. package/dist/{chunk-3INDBMUU.mjs → chunk-TGDIACZT.mjs} +2 -2
  67. package/dist/{chunk-WB75GIX2.mjs → chunk-TQTB33JS.mjs} +14 -3
  68. package/dist/chunk-TQTB33JS.mjs.map +1 -0
  69. package/dist/{chunk-WMAYETRD.mjs → chunk-TT3E2JOF.mjs} +3 -3
  70. package/dist/{chunk-FVAM43KI.mjs → chunk-UMUWR5XA.mjs} +2 -2
  71. package/dist/{chunk-VOUJW4FL.mjs → chunk-WD2EBM3I.mjs} +70 -15
  72. package/dist/chunk-WD2EBM3I.mjs.map +1 -0
  73. package/dist/{chunk-ZPG6SNHH.mjs → chunk-WMJGA32P.mjs} +47 -5
  74. package/dist/chunk-WMJGA32P.mjs.map +1 -0
  75. package/dist/{chunk-TKQCJMY7.mjs → chunk-X4SFHKFH.mjs} +7 -4
  76. package/dist/{chunk-TKQCJMY7.mjs.map → chunk-X4SFHKFH.mjs.map} +1 -1
  77. package/dist/{chunk-Q7GPJZCO.mjs → chunk-YIBV77KZ.mjs} +26 -7
  78. package/dist/chunk-YIBV77KZ.mjs.map +1 -0
  79. package/dist/client/lifecycle.mjs +2 -2
  80. package/dist/{client-mcMC334J.d.mts → client-DWoLZ3QU.d.mts} +52 -5
  81. package/dist/{client-d5ONQ-Pd.d.ts → client-DuQuQC1h.d.ts} +52 -5
  82. package/dist/client-cache-BMxuFqwH.d.ts +18 -0
  83. package/dist/client-cache-CCK-fCe0.d.mts +18 -0
  84. package/dist/{client-plugins-BvClItiL.d.mts → client-plugins-B6-07YmP.d.mts} +52 -99
  85. package/dist/{client-plugins-B9Sq-iMg.d.ts → client-plugins-By6MVUX-.d.ts} +52 -99
  86. package/dist/client-plugins.cjs +1 -1
  87. package/dist/client-plugins.d.mts +3 -2
  88. package/dist/client-plugins.d.ts +3 -2
  89. package/dist/client-plugins.mjs +2 -2
  90. package/dist/client.cjs +757 -104
  91. package/dist/client.d.mts +124 -16
  92. package/dist/client.d.ts +124 -16
  93. package/dist/client.mjs +28 -14
  94. package/dist/config.d.mts +3 -2
  95. package/dist/config.d.ts +3 -2
  96. package/dist/{devtools-S52RRRMN.mjs → devtools-XWZX6CCL.mjs} +5 -5
  97. package/dist/{devtools-client-EOVDBPOI.mjs → devtools-client-Z7QQA3Q2.mjs} +2 -2
  98. package/dist/{devtools-ui-NJKFORTG.mjs → devtools-ui-2HG5M4EL.mjs} +3 -1
  99. package/dist/devtools-ui-2HG5M4EL.mjs.map +1 -0
  100. package/dist/docs.cjs +24 -5
  101. package/dist/docs.mjs +5 -5
  102. package/dist/i18n/server.cjs +13 -2
  103. package/dist/i18n/server.d.mts +2 -2
  104. package/dist/i18n/server.d.ts +2 -2
  105. package/dist/i18n/server.mjs +1 -1
  106. package/dist/index.cjs +1578 -772
  107. package/dist/index.d.mts +28 -20
  108. package/dist/index.d.ts +28 -20
  109. package/dist/index.mjs +53 -33
  110. package/dist/index.mjs.map +1 -1
  111. package/dist/integration-api-BT024nuJ.d.mts +97 -0
  112. package/dist/integration-api-BT024nuJ.d.ts +97 -0
  113. package/dist/integrations.d.mts +3 -2
  114. package/dist/integrations.d.ts +3 -2
  115. package/dist/internal/build-runtime.cjs +710 -532
  116. package/dist/internal/build-runtime.d.mts +5 -4
  117. package/dist/internal/build-runtime.d.ts +5 -4
  118. package/dist/internal/build-runtime.mjs +15 -15
  119. package/dist/internal/client-runtime.cjs +1 -1
  120. package/dist/internal/client-runtime.mjs +2 -2
  121. package/dist/internal/config-runtime.cjs +4 -1
  122. package/dist/internal/config-runtime.d.mts +4 -3
  123. package/dist/internal/config-runtime.d.ts +4 -3
  124. package/dist/internal/config-runtime.mjs +4 -4
  125. package/dist/internal/product-telemetry-runtime.cjs +1 -1
  126. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  127. package/dist/internal/production-runtime.cjs +29 -3
  128. package/dist/internal/production-runtime.d.mts +8 -7
  129. package/dist/internal/production-runtime.d.ts +8 -7
  130. package/dist/internal/production-runtime.mjs +5 -5
  131. package/dist/{metadata-route-yV4U6X8h.d.ts → metadata-route-8_V3UonT.d.ts} +1 -1
  132. package/dist/{metadata-route-p4K1l92V.d.mts → metadata-route-CWP_HjGU.d.mts} +1 -1
  133. package/dist/middleware.cjs +28 -2
  134. package/dist/middleware.d.mts +5 -4
  135. package/dist/middleware.d.ts +5 -4
  136. package/dist/middleware.mjs +4 -4
  137. package/dist/navigation.cjs +3 -1
  138. package/dist/navigation.mjs +3 -3
  139. package/dist/observability.cjs +27 -2
  140. package/dist/observability.mjs +1 -1
  141. package/dist/plugin.cjs +474 -334
  142. package/dist/plugin.d.mts +3 -2
  143. package/dist/plugin.d.ts +3 -2
  144. package/dist/plugin.mjs +12 -12
  145. package/dist/{production-runtime-IkB0Qj4i.d.mts → production-runtime-BGRH1dKG.d.mts} +1 -1
  146. package/dist/{production-runtime-0JTch4_d.d.ts → production-runtime-CdmzsDax.d.ts} +1 -1
  147. package/dist/query/client.cjs +11 -3
  148. package/dist/query/client.mjs +12 -4
  149. package/dist/query/client.mjs.map +1 -1
  150. package/dist/{render-plan-Dc8CjNI7.d.ts → render-plan-0GeHiGVZ.d.ts} +1 -1
  151. package/dist/{render-plan-CU31j-Jk.d.mts → render-plan-DLxJYAA5.d.mts} +1 -1
  152. package/dist/renderer-client.cjs +140 -26
  153. package/dist/renderer-client.d.mts +7 -6
  154. package/dist/renderer-client.d.ts +7 -6
  155. package/dist/renderer-client.mjs +16 -19
  156. package/dist/renderer-client.mjs.map +1 -1
  157. package/dist/{request-BXa1KY8i.d.mts → request-BCNXSXLh.d.mts} +1 -1
  158. package/dist/{request-CUUBujZt.d.ts → request-BstWbZ6O.d.ts} +1 -1
  159. package/dist/request.d.mts +4 -3
  160. package/dist/request.d.ts +4 -3
  161. package/dist/{route-Y8lfz1wF.d.ts → route-4pd-EVtw.d.ts} +45 -50
  162. package/dist/{route-Cq3aObmj.d.mts → route-CvEr4Uc9.d.mts} +45 -50
  163. package/dist/routes.cjs +27 -2
  164. package/dist/routes.d.mts +3 -2
  165. package/dist/routes.d.ts +3 -2
  166. package/dist/routes.mjs +4 -4
  167. package/dist/{runtime-j1S3sDTh.d.ts → runtime-BgDQzBiu.d.ts} +1 -0
  168. package/dist/{runtime-DDwvDtS4.d.mts → runtime-CV2UCV-5.d.mts} +1 -0
  169. package/dist/server-action-security.mjs +2 -2
  170. package/dist/server-fn-client.cjs +34 -2
  171. package/dist/server-fn-client.d.mts +6 -0
  172. package/dist/server-fn-client.d.ts +6 -0
  173. package/dist/server-fn-client.mjs +1 -1
  174. package/dist/server-fn.cjs +42 -4
  175. package/dist/server-fn.mjs +5 -5
  176. package/dist/server-plugins.d.mts +4 -3
  177. package/dist/server-plugins.d.ts +4 -3
  178. package/dist/server-query-client.cjs +146 -27
  179. package/dist/server-query-client.d.mts +3 -3
  180. package/dist/server-query-client.d.ts +3 -3
  181. package/dist/server-query-client.mjs +7 -7
  182. package/dist/{server-query-runtime-3zAj77yv.d.ts → server-query-runtime-DXRNhX_3.d.ts} +2 -0
  183. package/dist/{server-query-runtime-B50KAcj5.d.mts → server-query-runtime-aP52iuL5.d.mts} +2 -0
  184. package/dist/server-query.cjs +44 -5
  185. package/dist/server-query.d.mts +4 -0
  186. package/dist/server-query.d.ts +4 -0
  187. package/dist/server-query.mjs +7 -7
  188. package/dist/server.cjs +499 -355
  189. package/dist/server.d.mts +11 -10
  190. package/dist/server.d.ts +11 -10
  191. package/dist/server.mjs +16 -16
  192. package/dist/{spa-router-CyLkwst6.d.mts → spa-router-BeyAVSc6.d.mts} +1 -1
  193. package/dist/{spa-router-BkqGXaV_.d.ts → spa-router-COgu4txb.d.ts} +1 -1
  194. package/dist/testing.cjs +27 -2
  195. package/dist/testing.d.mts +3 -2
  196. package/dist/testing.d.ts +3 -2
  197. package/dist/testing.mjs +8 -8
  198. package/dist/{utils-NKR6SoNv.d.mts → utils-DL2VwDQl.d.mts} +1 -1
  199. package/dist/{utils-B2OHrb9F.d.ts → utils-DkU2c_1B.d.ts} +1 -1
  200. package/dist/version.cjs +1 -1
  201. package/dist/version.mjs +1 -1
  202. package/dist/vite.cjs +482 -338
  203. package/dist/vite.d.mts +3 -2
  204. package/dist/vite.d.ts +3 -2
  205. package/dist/vite.mjs +16 -12
  206. package/package.json +17 -17
  207. package/types/client.d.ts +87 -1
  208. package/dist/agent-runtime.cjs.map +0 -1
  209. package/dist/api/route-manager.cjs.map +0 -1
  210. package/dist/api/runtime.cjs.map +0 -1
  211. package/dist/api.cjs.map +0 -1
  212. package/dist/app-markdown.cjs.map +0 -1
  213. package/dist/cache.cjs.map +0 -1
  214. package/dist/chunk-3I55IGXU.mjs.map +0 -1
  215. package/dist/chunk-54XSGLKT.mjs.map +0 -1
  216. package/dist/chunk-7MABZJIM.mjs.map +0 -1
  217. package/dist/chunk-AXVJCMVF.mjs.map +0 -1
  218. package/dist/chunk-GZHKWHCH.mjs.map +0 -1
  219. package/dist/chunk-HHZAOTQD.mjs.map +0 -1
  220. package/dist/chunk-LKKMI7JG.mjs.map +0 -1
  221. package/dist/chunk-LZTGDH3H.mjs.map +0 -1
  222. package/dist/chunk-MM46HTX6.mjs.map +0 -1
  223. package/dist/chunk-MRVJCLYQ.mjs.map +0 -1
  224. package/dist/chunk-Q7GPJZCO.mjs.map +0 -1
  225. package/dist/chunk-RAGSHKDC.mjs.map +0 -1
  226. package/dist/chunk-RBRLLZL5.mjs.map +0 -1
  227. package/dist/chunk-SCFX4UTD.mjs.map +0 -1
  228. package/dist/chunk-VOUJW4FL.mjs.map +0 -1
  229. package/dist/chunk-WB75GIX2.mjs.map +0 -1
  230. package/dist/chunk-ZFNK77WN.mjs.map +0 -1
  231. package/dist/chunk-ZPG6SNHH.mjs.map +0 -1
  232. package/dist/chunk-ZRBCBOEX.mjs.map +0 -1
  233. package/dist/client/lifecycle.cjs.map +0 -1
  234. package/dist/client-cache-CopR_MaI.d.mts +0 -6
  235. package/dist/client-cache-Djy_TlE8.d.ts +0 -6
  236. package/dist/client-plugins.cjs.map +0 -1
  237. package/dist/client.cjs.map +0 -1
  238. package/dist/config.cjs.map +0 -1
  239. package/dist/cron.cjs.map +0 -1
  240. package/dist/deferred.cjs.map +0 -1
  241. package/dist/deployment.cjs.map +0 -1
  242. package/dist/devtools-ui-NJKFORTG.mjs.map +0 -1
  243. package/dist/docs.cjs.map +0 -1
  244. package/dist/env-types.cjs.map +0 -1
  245. package/dist/env.cjs.map +0 -1
  246. package/dist/environment/vite.cjs.map +0 -1
  247. package/dist/environment.cjs.map +0 -1
  248. package/dist/font.cjs.map +0 -1
  249. package/dist/headers.cjs.map +0 -1
  250. package/dist/i18n/client.cjs.map +0 -1
  251. package/dist/i18n/index.cjs.map +0 -1
  252. package/dist/i18n/server.cjs.map +0 -1
  253. package/dist/image/server.cjs.map +0 -1
  254. package/dist/image/sharp.cjs.map +0 -1
  255. package/dist/image.cjs.map +0 -1
  256. package/dist/index.cjs.map +0 -1
  257. package/dist/instrumentation.cjs.map +0 -1
  258. package/dist/integrations.cjs.map +0 -1
  259. package/dist/internal/build-runtime.cjs.map +0 -1
  260. package/dist/internal/client-runtime.cjs.map +0 -1
  261. package/dist/internal/config-runtime.cjs.map +0 -1
  262. package/dist/internal/isolated-boundary.cjs.map +0 -1
  263. package/dist/internal/metadata-image-runtime.cjs.map +0 -1
  264. package/dist/internal/product-telemetry-runtime.cjs.map +0 -1
  265. package/dist/internal/production-node-env.cjs.map +0 -1
  266. package/dist/internal/production-runtime.cjs.map +0 -1
  267. package/dist/markdown.cjs.map +0 -1
  268. package/dist/middleware.cjs.map +0 -1
  269. package/dist/navigation.cjs.map +0 -1
  270. package/dist/observability.cjs.map +0 -1
  271. package/dist/plugin.cjs.map +0 -1
  272. package/dist/query/client.cjs.map +0 -1
  273. package/dist/query/index.cjs.map +0 -1
  274. package/dist/query/parsers.cjs.map +0 -1
  275. package/dist/query/server.cjs.map +0 -1
  276. package/dist/renderer/react/client.cjs.map +0 -1
  277. package/dist/renderer/react/server.cjs.map +0 -1
  278. package/dist/renderer/react/vite.cjs.map +0 -1
  279. package/dist/renderer-client.cjs.map +0 -1
  280. package/dist/renderer.cjs.map +0 -1
  281. package/dist/request.cjs.map +0 -1
  282. package/dist/router.cjs.map +0 -1
  283. package/dist/routes.cjs.map +0 -1
  284. package/dist/server-action-security.cjs.map +0 -1
  285. package/dist/server-fn-client.cjs.map +0 -1
  286. package/dist/server-fn.cjs.map +0 -1
  287. package/dist/server-plugins.cjs.map +0 -1
  288. package/dist/server-query-client.cjs.map +0 -1
  289. package/dist/server-query.cjs.map +0 -1
  290. package/dist/server.cjs.map +0 -1
  291. package/dist/storage.cjs.map +0 -1
  292. package/dist/testing.cjs.map +0 -1
  293. package/dist/theme/client.cjs.map +0 -1
  294. package/dist/theme/index.cjs.map +0 -1
  295. package/dist/theme/runtime.cjs.map +0 -1
  296. package/dist/theme/server.cjs.map +0 -1
  297. package/dist/version.cjs.map +0 -1
  298. package/dist/vite.cjs.map +0 -1
  299. package/dist/workflows.cjs.map +0 -1
  300. /package/dist/{chunk-VV24CC42.mjs.map → chunk-35NPLKQJ.mjs.map} +0 -0
  301. /package/dist/{chunk-RWYRFCLG.mjs.map → chunk-4X57GXQA.mjs.map} +0 -0
  302. /package/dist/{chunk-MOW47IF5.mjs.map → chunk-6UYVU46O.mjs.map} +0 -0
  303. /package/dist/{chunk-RLGUZ3HS.mjs.map → chunk-I3OOUWO5.mjs.map} +0 -0
  304. /package/dist/{chunk-ODJGAWDH.mjs.map → chunk-JV7JUD7Q.mjs.map} +0 -0
  305. /package/dist/{chunk-Q3OX763A.mjs.map → chunk-LXDASSTE.mjs.map} +0 -0
  306. /package/dist/{chunk-HVG3HLQZ.mjs.map → chunk-Q7WGOOAI.mjs.map} +0 -0
  307. /package/dist/{chunk-3INDBMUU.mjs.map → chunk-TGDIACZT.mjs.map} +0 -0
  308. /package/dist/{chunk-WMAYETRD.mjs.map → chunk-TT3E2JOF.mjs.map} +0 -0
  309. /package/dist/{chunk-FVAM43KI.mjs.map → chunk-UMUWR5XA.mjs.map} +0 -0
  310. /package/dist/{devtools-S52RRRMN.mjs.map → devtools-XWZX6CCL.mjs.map} +0 -0
  311. /package/dist/{devtools-client-EOVDBPOI.mjs.map → devtools-client-Z7QQA3Q2.mjs.map} +0 -0
@@ -1398,7 +1398,9 @@ var _SPARouter = class _SPARouter {
1398
1398
  if (this.onNavigate) {
1399
1399
  await this.onNavigate(pageData);
1400
1400
  }
1401
- if (this.options.scrollRestoration) {
1401
+ if (window.location.hash) {
1402
+ getHashTargetElement(window.location.hash)?.scrollIntoView();
1403
+ } else if (this.options.scrollRestoration) {
1402
1404
  this.restoreScrollPosition(window.location.pathname + window.location.search);
1403
1405
  }
1404
1406
  if (clientNavigation) {
@@ -1723,7 +1725,13 @@ function recordFarmEventTrace(event) {
1723
1725
  activeSpan.addEvent(event.type, toEventAttributes(event), event.timestamp);
1724
1726
  }
1725
1727
  const error = event.type === "request.error" ? void 0 : getEventError(event);
1726
- if (error !== void 0) recordSpanError(activeSpan, error);
1728
+ if (error !== void 0) {
1729
+ if (event.type === "render.error") {
1730
+ recordSpanException(activeSpan, error);
1731
+ } else {
1732
+ recordSpanError(activeSpan, error);
1733
+ }
1734
+ }
1727
1735
  }
1728
1736
  const completedTraceContext = recordCompletedEventSpan(event, activeContext);
1729
1737
  return traceContext ?? completedTraceContext;
@@ -1820,12 +1828,26 @@ function getCompletedSpanDescriptor(event) {
1820
1828
  }
1821
1829
  }
1822
1830
  __name(getCompletedSpanDescriptor, "getCompletedSpanDescriptor");
1831
+ function hashFarmCacheKey(value) {
1832
+ let hash = 2166136261;
1833
+ for (let index = 0; index < value.length; index++) {
1834
+ hash ^= value.charCodeAt(index);
1835
+ hash = Math.imul(hash, 16777619);
1836
+ }
1837
+ return (hash >>> 0).toString(16).padStart(8, "0");
1838
+ }
1839
+ __name(hashFarmCacheKey, "hashFarmCacheKey");
1823
1840
  function toEventAttributes(event) {
1824
1841
  const attributes = {};
1842
+ const redactKey = typeof event.type === "string" && event.type.startsWith("cache.");
1825
1843
  for (const [key, value] of Object.entries(event)) {
1826
1844
  if (key === "timestamp" || key === "level" || key === "error" || key === "traceId" || key === "spanId" || key === "traceSampled" || value === void 0) {
1827
1845
  continue;
1828
1846
  }
1847
+ if (redactKey && key === "key" && typeof value === "string") {
1848
+ attributes["farm.key_hash"] = hashFarmCacheKey(value);
1849
+ continue;
1850
+ }
1829
1851
  if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
1830
1852
  attributes[`farm.${key}`] = value;
1831
1853
  } else if (Array.isArray(value)) {
@@ -1845,9 +1867,14 @@ function getEventError(event) {
1845
1867
  return "error" in event ? event.error : void 0;
1846
1868
  }
1847
1869
  __name(getEventError, "getEventError");
1848
- function recordSpanError(span, error) {
1870
+ function recordSpanException(span, error) {
1849
1871
  const normalized = error instanceof Error ? error : new Error(String(error));
1850
1872
  span.recordException(normalized);
1873
+ return normalized;
1874
+ }
1875
+ __name(recordSpanException, "recordSpanException");
1876
+ function recordSpanError(span, error) {
1877
+ const normalized = recordSpanException(span, error);
1851
1878
  span.setStatus({ code: import_api.SpanStatusCode.ERROR, message: normalized.message });
1852
1879
  }
1853
1880
  __name(recordSpanError, "recordSpanError");
@@ -2699,6 +2726,7 @@ function subscribeWeakCache(reference) {
2699
2726
  return dispose;
2700
2727
  }
2701
2728
  __name(subscribeWeakCache, "subscribeWeakCache");
2729
+ var DEFAULT_GC_SWEEP_INTERVAL_MS = 3e4;
2702
2730
  var _FarmClientDataCache = class _FarmClientDataCache {
2703
2731
  constructor(options = {}) {
2704
2732
  this.entries = /* @__PURE__ */ new Map();
@@ -2706,6 +2734,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
2706
2734
  this.invalidatedAt = /* @__PURE__ */ new Map();
2707
2735
  this.listeners = /* @__PURE__ */ new Map();
2708
2736
  this.inflight = /* @__PURE__ */ new Map();
2737
+ this.gcSweepIntervalMs = options.gcSweepIntervalMs ?? DEFAULT_GC_SWEEP_INTERVAL_MS;
2709
2738
  if (options.subscribeToInvalidation !== false) {
2710
2739
  if (typeof WeakRef === "function") {
2711
2740
  const reference = new WeakRef(this);
@@ -2722,6 +2751,10 @@ var _FarmClientDataCache = class _FarmClientDataCache {
2722
2751
  get size() {
2723
2752
  return this.entries.size;
2724
2753
  }
2754
+ /** @internal Attach or detach the persistence engine's observation sink. */
2755
+ attachPersistence(sink) {
2756
+ this.persistence = sink;
2757
+ }
2725
2758
  resolveKey(key) {
2726
2759
  let resolved = key;
2727
2760
  const seen = /* @__PURE__ */ new Set();
@@ -2737,6 +2770,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
2737
2770
  if (!entry) return void 0;
2738
2771
  if (entry.gcAt !== void 0 && now >= entry.gcAt) {
2739
2772
  this.entries.delete(resolved);
2773
+ this.persistence?.onDelete(resolved);
2740
2774
  this.emit(resolved);
2741
2775
  return void 0;
2742
2776
  }
@@ -2750,6 +2784,8 @@ var _FarmClientDataCache = class _FarmClientDataCache {
2750
2784
  this.invalidatedAt.delete(resolved);
2751
2785
  }
2752
2786
  this.entries.set(resolved, nextEntry);
2787
+ if (nextEntry.gcAt !== void 0) this.scheduleGcSweep();
2788
+ this.persistence?.onSet(resolved, nextEntry);
2753
2789
  this.emit(resolved);
2754
2790
  return this;
2755
2791
  }
@@ -2757,6 +2793,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
2757
2793
  const resolved = this.resolveKey(key);
2758
2794
  const deleted = this.entries.delete(resolved);
2759
2795
  this.inflight.delete(resolved);
2796
+ if (deleted) this.persistence?.onDelete(resolved);
2760
2797
  this.emit(resolved);
2761
2798
  return deleted;
2762
2799
  }
@@ -2766,11 +2803,16 @@ var _FarmClientDataCache = class _FarmClientDataCache {
2766
2803
  this.aliases.clear();
2767
2804
  this.invalidatedAt.clear();
2768
2805
  this.inflight.clear();
2806
+ this.persistence?.onClear();
2769
2807
  for (const key of keys) this.emit(key);
2770
2808
  }
2771
2809
  dispose() {
2772
2810
  this.unsubscribeInvalidation?.();
2773
2811
  this.unsubscribeInvalidation = void 0;
2812
+ if (this.gcTimer !== void 0) {
2813
+ clearTimeout(this.gcTimer);
2814
+ this.gcTimer = void 0;
2815
+ }
2774
2816
  this.clear();
2775
2817
  }
2776
2818
  isStale(key, now = Date.now()) {
@@ -2799,8 +2841,9 @@ var _FarmClientDataCache = class _FarmClientDataCache {
2799
2841
  const resolvedInvalidatedAt = this.invalidatedAt.get(resolved);
2800
2842
  if (aliasEntry && !this.entries.has(resolved)) {
2801
2843
  this.entries.set(resolved, aliasEntry);
2844
+ this.persistence?.onSet(resolved, aliasEntry);
2802
2845
  }
2803
- this.entries.delete(alias);
2846
+ if (this.entries.delete(alias)) this.persistence?.onDelete(alias);
2804
2847
  this.invalidatedAt.delete(alias);
2805
2848
  const invalidatedAt = [aliasInvalidatedAt, resolvedInvalidatedAt].reduce(
2806
2849
  (latest, value) => value === void 0 ? latest : latest === void 0 ? value : Math.max(latest, value),
@@ -2840,7 +2883,9 @@ var _FarmClientDataCache = class _FarmClientDataCache {
2840
2883
  listeners2.add(listener);
2841
2884
  return () => {
2842
2885
  listeners2.delete(listener);
2843
- if (listeners2.size === 0) this.listeners.delete(key);
2886
+ if (listeners2.size === 0 && this.listeners.get(key) === listeners2) {
2887
+ this.listeners.delete(key);
2888
+ }
2844
2889
  };
2845
2890
  }
2846
2891
  getInflight(key) {
@@ -2852,6 +2897,30 @@ var _FarmClientDataCache = class _FarmClientDataCache {
2852
2897
  deleteInflight(key) {
2853
2898
  this.inflight.delete(this.resolveKey(key));
2854
2899
  }
2900
+ scheduleGcSweep() {
2901
+ if (this.gcSweepIntervalMs === false || this.gcTimer !== void 0) return;
2902
+ const timer = setTimeout(() => {
2903
+ this.gcTimer = void 0;
2904
+ this.sweepExpiredEntries();
2905
+ }, this.gcSweepIntervalMs);
2906
+ timer.unref?.();
2907
+ this.gcTimer = timer;
2908
+ }
2909
+ sweepExpiredEntries(now = Date.now()) {
2910
+ const watched = /* @__PURE__ */ new Set();
2911
+ for (const key of this.listeners.keys()) watched.add(this.resolveKey(key));
2912
+ let remaining = false;
2913
+ for (const [key, entry] of this.entries) {
2914
+ if (entry.gcAt === void 0) continue;
2915
+ if (now < entry.gcAt || entry.fetching || this.inflight.has(key) || watched.has(key)) {
2916
+ remaining = true;
2917
+ continue;
2918
+ }
2919
+ this.entries.delete(key);
2920
+ this.persistence?.onDelete(key);
2921
+ }
2922
+ if (remaining) this.scheduleGcSweep();
2923
+ }
2855
2924
  emit(key, event) {
2856
2925
  this.notifyListeners(key, event);
2857
2926
  for (const [alias, target] of this.aliases) {
@@ -2876,6 +2945,21 @@ function getFarmClientDataCache() {
2876
2945
  }
2877
2946
  __name(getFarmClientDataCache, "getFarmClientDataCache");
2878
2947
 
2948
+ // src/client-revalidation.ts
2949
+ function attachRevalidationListeners(refresh, options = {}) {
2950
+ if (typeof window === "undefined") return () => {
2951
+ };
2952
+ const onFocus = options.refetchOnWindowFocus === false ? void 0 : refresh;
2953
+ const onOnline = options.refetchOnReconnect === false ? void 0 : refresh;
2954
+ if (onFocus) window.addEventListener("focus", onFocus);
2955
+ if (onOnline) window.addEventListener("online", onOnline);
2956
+ return () => {
2957
+ if (onFocus) window.removeEventListener("focus", onFocus);
2958
+ if (onOnline) window.removeEventListener("online", onOnline);
2959
+ };
2960
+ }
2961
+ __name(attachRevalidationListeners, "attachRevalidationListeners");
2962
+
2879
2963
  // src/server-query-runtime.ts
2880
2964
  var FARM_SERVER_QUERY_CLIENT_STATE = /* @__PURE__ */ Symbol.for("farm.serverQueryClientState");
2881
2965
  var serverQueryClientGlobal = globalThis;
@@ -2883,9 +2967,30 @@ var serverQueryClientState = serverQueryClientGlobal[FARM_SERVER_QUERY_CLIENT_ST
2883
2967
  functionIds: /* @__PURE__ */ new WeakMap(),
2884
2968
  nextFunctionId: 0,
2885
2969
  active: [],
2886
- latestOwners: /* @__PURE__ */ new Map()
2970
+ latestOwners: /* @__PURE__ */ new Map(),
2971
+ owners: /* @__PURE__ */ new Set()
2887
2972
  });
2888
2973
  serverQueryClientState.latestOwners ?? (serverQueryClientState.latestOwners = /* @__PURE__ */ new Map());
2974
+ serverQueryClientState.owners ?? (serverQueryClientState.owners = /* @__PURE__ */ new Set());
2975
+ function isServerQueryOwnerSuperseded(owner, key) {
2976
+ const cache = getFarmClientDataCache();
2977
+ const resolved = cache.resolveKey(key);
2978
+ for (const superseded of owner.supersededKeys ?? []) {
2979
+ if (cache.resolveKey(superseded) === resolved) return true;
2980
+ }
2981
+ return false;
2982
+ }
2983
+ __name(isServerQueryOwnerSuperseded, "isServerQueryOwnerSuperseded");
2984
+ function claimServerQueryKey(owner, key) {
2985
+ if (isServerQueryOwnerSuperseded(owner, key)) return false;
2986
+ const resolved = getFarmClientDataCache().resolveKey(key);
2987
+ for (const older of serverQueryClientState.owners) {
2988
+ if (older === owner) break;
2989
+ older.supersededKeys.add(resolved);
2990
+ }
2991
+ return true;
2992
+ }
2993
+ __name(claimServerQueryKey, "claimServerQueryKey");
2889
2994
  var RAW_SERVER_QUERY_SYMBOL = /* @__PURE__ */ Symbol.for("farm.server-query");
2890
2995
  function assertNotRawServerQueryInBrowser(query) {
2891
2996
  if (typeof window === "undefined" || typeof document === "undefined") return;
@@ -2899,6 +3004,10 @@ function assertNotRawServerQueryInBrowser(query) {
2899
3004
  );
2900
3005
  }
2901
3006
  __name(assertNotRawServerQueryInBrowser, "assertNotRawServerQueryInBrowser");
3007
+ function isCurrentServerQueryOwner(provisionalKey, owner) {
3008
+ return serverQueryClientState.latestOwners.get(provisionalKey) === owner && !isServerQueryOwnerSuperseded(owner, provisionalKey);
3009
+ }
3010
+ __name(isCurrentServerQueryOwner, "isCurrentServerQueryOwner");
2902
3011
  function createServerQueryCallKey(query, input) {
2903
3012
  let id = serverQueryClientState.functionIds.get(query);
2904
3013
  if (!id) {
@@ -2914,12 +3023,14 @@ async function fetchServerQuery(query, input, options = {}) {
2914
3023
  const entry = cache.get(provisionalKey);
2915
3024
  const stale = cache.isStale(provisionalKey);
2916
3025
  const inflight = cache.getInflight(provisionalKey);
2917
- if (inflight && !options.force) return inflight;
2918
- if (!options.force && entry && !stale && entry.status !== "error") return entry.data;
2919
- if (!options.force && entry && stale && entry.status !== "pending" && entry.status !== "error" && (options.swr ?? true)) {
2920
- void executeServerQuery(query, input, provisionalKey, options).catch(() => void 0);
3026
+ if (!options.force && entry && stale && (entry.status !== "pending" || entry.updatedAt !== 0) && entry.status !== "error" && (options.swr ?? true)) {
3027
+ if (!inflight) {
3028
+ void executeServerQuery(query, input, provisionalKey, options).catch(() => void 0);
3029
+ }
2921
3030
  return entry.data;
2922
3031
  }
3032
+ if (inflight && !options.force) return inflight;
3033
+ if (!options.force && entry && !stale && entry.status !== "error") return entry.data;
2923
3034
  return executeServerQuery(query, input, provisionalKey, options);
2924
3035
  }
2925
3036
  __name(fetchServerQuery, "fetchServerQuery");
@@ -2928,8 +3039,13 @@ async function executeServerQuery(query, input, provisionalKey, options) {
2928
3039
  const cache = getFarmClientDataCache();
2929
3040
  const inflight = cache.getInflight(provisionalKey);
2930
3041
  if (inflight && !options.force) return inflight;
2931
- const owner = { invalidations: trackFarmClientCacheInvalidations(cache) };
3042
+ const owner = {
3043
+ invalidations: trackFarmClientCacheInvalidations(cache),
3044
+ supersededKeys: /* @__PURE__ */ new Set()
3045
+ };
2932
3046
  serverQueryClientState.latestOwners.set(provisionalKey, owner);
3047
+ serverQueryClientState.owners.add(owner);
3048
+ claimServerQueryKey(owner, provisionalKey);
2933
3049
  const previous = cache.get(provisionalKey);
2934
3050
  cache.set(provisionalKey, {
2935
3051
  data: previous?.data,
@@ -2954,7 +3070,7 @@ async function executeServerQuery(query, input, provisionalKey, options) {
2954
3070
  }
2955
3071
  const data = await pending;
2956
3072
  const transported = cache.get(provisionalKey);
2957
- if (serverQueryClientState.latestOwners.get(provisionalKey) === owner && (!transported || transported.fetching)) {
3073
+ if (isCurrentServerQueryOwner(provisionalKey, owner) && (!transported || transported.fetching)) {
2958
3074
  const updatedAt = Date.now();
2959
3075
  cache.set(provisionalKey, {
2960
3076
  data,
@@ -2968,7 +3084,7 @@ async function executeServerQuery(query, input, provisionalKey, options) {
2968
3084
  return data;
2969
3085
  } catch (cause) {
2970
3086
  const error = normalizeServerQueryError(cause);
2971
- if (serverQueryClientState.latestOwners.get(provisionalKey) === owner) {
3087
+ if (isCurrentServerQueryOwner(provisionalKey, owner)) {
2972
3088
  const current = cache.get(provisionalKey);
2973
3089
  cache.set(provisionalKey, {
2974
3090
  data: current?.data,
@@ -2983,8 +3099,10 @@ async function executeServerQuery(query, input, provisionalKey, options) {
2983
3099
  }
2984
3100
  throw error;
2985
3101
  } finally {
2986
- const invalidated = serverQueryClientState.latestOwners.get(provisionalKey) === owner && owner.invalidations.has(provisionalKey);
3102
+ const invalidated = isCurrentServerQueryOwner(provisionalKey, owner) && owner.invalidations.has(provisionalKey);
2987
3103
  owner.invalidations.dispose();
3104
+ serverQueryClientState.owners.delete(owner);
3105
+ owner.supersededKeys.clear();
2988
3106
  if (cache.getInflight(provisionalKey) === promise) {
2989
3107
  cache.deleteInflight(provisionalKey);
2990
3108
  }
@@ -3219,19 +3337,15 @@ function createRendererQuery(query, input, options = {}) {
3219
3337
  for (const listener of listeners2) listener();
3220
3338
  });
3221
3339
  if (!cache.get(key) || cache.isStale(key)) void run().catch(() => void 0);
3222
- if (typeof window !== "undefined") {
3223
- const refresh = /* @__PURE__ */ __name(() => {
3340
+ cleanupBrowser = attachRevalidationListeners(
3341
+ () => {
3224
3342
  if (cache.isStale(key)) void run().catch(() => void 0);
3225
- }, "refresh");
3226
- const onFocus = options.refetchOnWindowFocus === false ? void 0 : refresh;
3227
- const onOnline = options.refetchOnReconnect === false ? void 0 : refresh;
3228
- if (onFocus) window.addEventListener("focus", onFocus);
3229
- if (onOnline) window.addEventListener("online", onOnline);
3230
- cleanupBrowser = /* @__PURE__ */ __name(() => {
3231
- if (onFocus) window.removeEventListener("focus", onFocus);
3232
- if (onOnline) window.removeEventListener("online", onOnline);
3233
- }, "cleanupBrowser");
3234
- }
3343
+ },
3344
+ {
3345
+ refetchOnWindowFocus: options.refetchOnWindowFocus,
3346
+ refetchOnReconnect: options.refetchOnReconnect
3347
+ }
3348
+ );
3235
3349
  }, "ensureStarted");
3236
3350
  return {
3237
3351
  getSnapshot() {
@@ -1,16 +1,16 @@
1
1
  import { FarmRouterRouteInput } from './router.mjs';
2
- import { F as FarmNavigationState, a as FarmNavigateOptions } from './spa-router-CyLkwst6.mjs';
3
- import { F as FarmClientCacheStatus } from './client-cache-CopR_MaI.mjs';
2
+ import { F as FarmNavigationState, a as FarmNavigateOptions } from './spa-router-BeyAVSc6.mjs';
3
+ import { F as FarmClientCacheStatus } from './client-cache-CCK-fCe0.mjs';
4
4
  import { ServerFn } from './server-fn.mjs';
5
5
  import { ServerQuery } from './server-query.mjs';
6
- import { S as ServerQueryFetchOptions } from './server-query-runtime-B50KAcj5.mjs';
6
+ import { S as ServerQueryFetchOptions } from './server-query-runtime-aP52iuL5.mjs';
7
7
  import { F as FarmThemeSnapshot, a as FarmThemePreference } from './types-DQnyD3VD.mjs';
8
8
  import { F as FarmI18nClientSnapshot, a as FarmTranslator, b as FarmI18nLocale } from './types-CnH8DOqo.mjs';
9
9
  import './lifecycle-De0vQG45.mjs';
10
10
  import './island-CfGru1MO.mjs';
11
- import './render-plan-CU31j-Jk.mjs';
12
- import './client-plugins-BvClItiL.mjs';
13
- import './route-Cq3aObmj.mjs';
11
+ import './render-plan-DLxJYAA5.mjs';
12
+ import './client-plugins-B6-07YmP.mjs';
13
+ import './route-CvEr4Uc9.mjs';
14
14
  import './cache.mjs';
15
15
  import './renderer.mjs';
16
16
  import 'http';
@@ -18,6 +18,7 @@ import './types-Cc8l9IqS.mjs';
18
18
  import 'db0';
19
19
  import 'unstorage';
20
20
  import 'react';
21
+ import './integration-api-BT024nuJ.mjs';
21
22
  import '@farming-labs/orm';
22
23
  import './types-CKwggz9n.mjs';
23
24
  import '@farming-labs/docs';
@@ -1,16 +1,16 @@
1
1
  import { FarmRouterRouteInput } from './router.js';
2
- import { F as FarmNavigationState, a as FarmNavigateOptions } from './spa-router-BkqGXaV_.js';
3
- import { F as FarmClientCacheStatus } from './client-cache-Djy_TlE8.js';
2
+ import { F as FarmNavigationState, a as FarmNavigateOptions } from './spa-router-COgu4txb.js';
3
+ import { F as FarmClientCacheStatus } from './client-cache-BMxuFqwH.js';
4
4
  import { ServerFn } from './server-fn.js';
5
5
  import { ServerQuery } from './server-query.js';
6
- import { S as ServerQueryFetchOptions } from './server-query-runtime-3zAj77yv.js';
6
+ import { S as ServerQueryFetchOptions } from './server-query-runtime-DXRNhX_3.js';
7
7
  import { F as FarmThemeSnapshot, a as FarmThemePreference } from './types-DQnyD3VD.js';
8
8
  import { F as FarmI18nClientSnapshot, a as FarmTranslator, b as FarmI18nLocale } from './types-CnH8DOqo.js';
9
9
  import './lifecycle-De0vQG45.js';
10
10
  import './island-CfGru1MO.js';
11
- import './render-plan-Dc8CjNI7.js';
12
- import './client-plugins-B9Sq-iMg.js';
13
- import './route-Y8lfz1wF.js';
11
+ import './render-plan-0GeHiGVZ.js';
12
+ import './client-plugins-By6MVUX-.js';
13
+ import './route-4pd-EVtw.js';
14
14
  import './cache.js';
15
15
  import './renderer.js';
16
16
  import 'http';
@@ -18,6 +18,7 @@ import './types-Cc8l9IqS.js';
18
18
  import 'db0';
19
19
  import 'unstorage';
20
20
  import 'react';
21
+ import './integration-api-BT024nuJ.js';
21
22
  import '@farming-labs/orm';
22
23
  import './types-CKwggz9n.js';
23
24
  import '@farming-labs/docs';
@@ -1,8 +1,9 @@
1
1
  "use client";
2
2
  import {
3
+ attachRevalidationListeners,
3
4
  createServerQueryCallKey,
4
5
  fetchServerQuery
5
- } from "./chunk-VOUJW4FL.mjs";
6
+ } from "./chunk-WD2EBM3I.mjs";
6
7
  import {
7
8
  getTheme,
8
9
  setTheme,
@@ -16,7 +17,7 @@ import {
16
17
  getRouter,
17
18
  readPageState,
18
19
  subscribeHistoryChange
19
- } from "./chunk-MRVJCLYQ.mjs";
20
+ } from "./chunk-PSQ7N4XP.mjs";
20
21
  import {
21
22
  createFarmClientTranslator,
22
23
  getFarmI18nClientState,
@@ -25,17 +26,17 @@ import {
25
26
  import "./chunk-JIT7GXDP.mjs";
26
27
  import {
27
28
  getFarmClientDataCache
28
- } from "./chunk-ZPG6SNHH.mjs";
29
- import "./chunk-SCFX4UTD.mjs";
29
+ } from "./chunk-WMJGA32P.mjs";
30
+ import "./chunk-EHTUKVSW.mjs";
30
31
  import {
31
32
  createFarmLocaleCookie
32
33
  } from "./chunk-776TTMU3.mjs";
33
34
  import "./chunk-3BXGOVKE.mjs";
34
35
  import "./chunk-4C3Z34O7.mjs";
35
- import "./chunk-AXVJCMVF.mjs";
36
- import "./chunk-RBRLLZL5.mjs";
36
+ import "./chunk-2HDOV47R.mjs";
37
+ import "./chunk-34IAPZBG.mjs";
37
38
  import "./chunk-WZ5QFROO.mjs";
38
- import "./chunk-ZRBCBOEX.mjs";
39
+ import "./chunk-N2FY2QZ7.mjs";
39
40
  import {
40
41
  localizeFarmHref,
41
42
  stripFarmLocaleFromPathname
@@ -204,19 +205,15 @@ function createRendererQuery(query, input, options = {}) {
204
205
  for (const listener of listeners) listener();
205
206
  });
206
207
  if (!cache.get(key) || cache.isStale(key)) void run().catch(() => void 0);
207
- if (typeof window !== "undefined") {
208
- const refresh = /* @__PURE__ */ __name(() => {
208
+ cleanupBrowser = attachRevalidationListeners(
209
+ () => {
209
210
  if (cache.isStale(key)) void run().catch(() => void 0);
210
- }, "refresh");
211
- const onFocus = options.refetchOnWindowFocus === false ? void 0 : refresh;
212
- const onOnline = options.refetchOnReconnect === false ? void 0 : refresh;
213
- if (onFocus) window.addEventListener("focus", onFocus);
214
- if (onOnline) window.addEventListener("online", onOnline);
215
- cleanupBrowser = /* @__PURE__ */ __name(() => {
216
- if (onFocus) window.removeEventListener("focus", onFocus);
217
- if (onOnline) window.removeEventListener("online", onOnline);
218
- }, "cleanupBrowser");
219
- }
211
+ },
212
+ {
213
+ refetchOnWindowFocus: options.refetchOnWindowFocus,
214
+ refetchOnReconnect: options.refetchOnReconnect
215
+ }
216
+ );
220
217
  }, "ensureStarted");
221
218
  return {
222
219
  getSnapshot() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/renderer-client.ts"],"sourcesContent":["\"use client\";\n\nimport { createFarmRouter, type FarmRouter, type FarmRouterRouteInput } from \"./router\";\nimport {\n getRouter as getSPARouter,\n readPageState,\n type FarmNavigationState,\n type FarmNavigateOptions,\n} from \"./client/spa-router\";\nimport { subscribeHistoryChange } from \"./client/history-sync\";\nimport { getFarmClientDataCache, type FarmClientCacheStatus } from \"./client-cache\";\nimport type { ServerFn } from \"./server-fn\";\nimport type { ServerQuery } from \"./server-query\";\nimport {\n createServerQueryCallKey,\n fetchServerQuery,\n type ServerQueryFetchOptions,\n} from \"./server-query-runtime\";\nimport { getTheme, setTheme, subscribeTheme, toggleTheme } from \"./theme/runtime\";\nimport type { FarmThemePreference, FarmThemeSnapshot } from \"./theme/types\";\nimport { createFarmLocaleCookie } from \"./i18n/resolver\";\nimport { localizeFarmHref, stripFarmLocaleFromPathname } from \"./i18n/routing\";\nimport {\n createFarmClientTranslator,\n getFarmI18nClientState,\n subscribeFarmI18n,\n} from \"./i18n/client-runtime\";\nimport type { FarmI18nClientSnapshot, FarmI18nLocale, FarmTranslator } from \"./i18n/types\";\nimport {\n applyFarmBasePath,\n getFarmBasePath,\n normalizeFarmBasePath,\n stripFarmBasePath,\n} from \"./base-path\";\n\nexport interface FarmClientStore<TSnapshot> {\n getSnapshot(): TSnapshot;\n subscribe(listener: () => void): () => void;\n}\n\nexport interface FarmRendererRouterOptions {\n basePath?: string;\n routes?: readonly FarmRouterRouteInput[];\n}\n\nexport interface FarmRendererRouterSnapshot {\n pathname: string;\n searchParams: URLSearchParams;\n params: Record<string, string>;\n pageState: unknown;\n navigation: FarmNavigationState;\n}\n\nexport interface FarmRendererRouter extends FarmClientStore<FarmRendererRouterSnapshot> {\n push(href: string, options?: Omit<FarmNavigateOptions, \"replace\">): Promise<void>;\n replace(href: string, options?: Omit<FarmNavigateOptions, \"replace\">): Promise<void>;\n refresh(options?: Omit<FarmNavigateOptions, \"replace\" | \"refresh\">): Promise<void>;\n prefetch(href: string): Promise<void>;\n back(): void;\n forward(): void;\n pushState<TState>(state: TState, href?: string): void;\n replaceState<TState>(state: TState, href?: string): void;\n}\n\nexport function createRendererRouter(options: FarmRendererRouterOptions = {}): FarmRendererRouter {\n const basePath =\n options.basePath === undefined ? getFarmBasePath() : normalizeFarmBasePath(options.basePath);\n const matcher = options.routes?.length ? createFarmRouter([...options.routes]) : null;\n const router = getSPARouter();\n let snapshot = readRendererRouterSnapshot(basePath, matcher, router.getNavigationState());\n\n const read = () => {\n snapshot = readRendererRouterSnapshot(basePath, matcher, router.getNavigationState());\n return snapshot;\n };\n\n return {\n getSnapshot: () => snapshot,\n subscribe(listener) {\n if (typeof window === \"undefined\") return () => {};\n const notify = () => {\n read();\n listener();\n };\n const unsubscribeNavigation = router.subscribeNavigation(notify);\n const unsubscribeHistory = subscribeHistoryChange(notify);\n read();\n return () => {\n unsubscribeNavigation();\n unsubscribeHistory();\n };\n },\n push(href, navigateOptions) {\n return typeof window === \"undefined\"\n ? Promise.resolve()\n : router.navigate(resolveRendererHref(href, basePath), navigateOptions);\n },\n replace(href, navigateOptions) {\n return typeof window === \"undefined\"\n ? Promise.resolve()\n : router.navigate(resolveRendererHref(href, basePath), {\n ...navigateOptions,\n replace: true,\n });\n },\n refresh: (refreshOptions) =>\n typeof window === \"undefined\" ? Promise.resolve() : router.refresh(refreshOptions),\n prefetch: (href) =>\n typeof window === \"undefined\"\n ? Promise.resolve()\n : router.prefetch(resolveRendererHref(href, basePath)),\n back() {\n if (typeof window !== \"undefined\") window.history.back();\n },\n forward() {\n if (typeof window !== \"undefined\") window.history.forward();\n },\n pushState(state, href) {\n if (typeof window !== \"undefined\") {\n router.pushState(state, href && resolveRendererHref(href, basePath));\n read();\n }\n },\n replaceState(state, href) {\n if (typeof window !== \"undefined\") {\n router.replaceState(state, href && resolveRendererHref(href, basePath));\n read();\n }\n },\n };\n}\n\nexport type FarmActionStatus = \"idle\" | \"pending\" | \"success\" | \"error\";\n\nexport interface FarmActionSnapshot<TResult, TError extends Error = Error> {\n pending: boolean;\n status: FarmActionStatus;\n data: TResult | null;\n error: TError | null;\n}\n\nexport interface FarmActionOptions<TInput, TResult, TError extends Error = Error> {\n initialResult?: TResult | null;\n resetOnSubmit?: boolean;\n optimistic?: (context: {\n input: TInput | FormData | undefined;\n formData?: FormData;\n current: TResult | null;\n }) => TResult | null | undefined;\n rollbackOnError?: boolean;\n onSuccess?: (result: TResult) => void;\n onError?: (error: TError) => void;\n onSettled?: (result: TResult | null, error: TError | null) => void;\n}\n\nexport type FarmActionSubmit<TInput, TResult> = [unknown] extends [TInput]\n ? (input?: TInput | FormData) => Promise<TResult>\n : (input: TInput | FormData) => Promise<TResult>;\n\nexport type FarmAction<TInput, TResult, TError extends Error = Error> = FarmClientStore<\n FarmActionSnapshot<TResult, TError>\n> & {\n submit: FarmActionSubmit<TInput, TResult>;\n reset(): void;\n};\n\nexport type FarmRouteActionTarget<TServerFn extends ServerFn<any, any, any>> = {\n readonly action: TServerFn;\n};\n\nexport function createRendererAction<TInput, TResult, TError extends Error = Error>(\n target:\n | ServerFn<TInput, TResult, TError>\n | FarmRouteActionTarget<ServerFn<TInput, TResult, TError>>,\n options: FarmActionOptions<TInput, TResult, TError> = {},\n): FarmAction<TInput, TResult, TError> {\n const serverFn = resolveRendererServerFn(target);\n const listeners = new Set<() => void>();\n const initialResult = options.initialResult ?? null;\n let requestId = 0;\n let pendingCount = 0;\n let latestSettledStatus: FarmActionSnapshot<TResult, TError>[\"status\"] = \"idle\";\n let snapshot: FarmActionSnapshot<TResult, TError> = {\n pending: false,\n status: \"idle\",\n data: initialResult,\n error: null,\n };\n\n const update = (next: FarmActionSnapshot<TResult, TError>) => {\n snapshot = next;\n for (const listener of listeners) listener();\n };\n\n return {\n getSnapshot: () => snapshot,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n async submit(input?: TInput | FormData) {\n const currentRequest = ++requestId;\n const previous = snapshot.data;\n const formData = isRendererFormData(input) ? input : undefined;\n const optimistic = options.optimistic?.({ input, formData, current: previous });\n const hasOptimistic = optimistic !== undefined;\n pendingCount += 1;\n update({\n pending: true,\n status: \"pending\",\n data: hasOptimistic ? optimistic : options.resetOnSubmit === false ? previous : null,\n error: null,\n });\n\n try {\n const result = await serverFn(input as TInput | FormData);\n pendingCount = Math.max(0, pendingCount - 1);\n if (currentRequest === requestId) {\n latestSettledStatus = \"success\";\n update({\n pending: pendingCount > 0,\n status: pendingCount > 0 ? \"pending\" : \"success\",\n data: result,\n error: null,\n });\n options.onSuccess?.(result);\n options.onSettled?.(result, null);\n } else if (pendingCount === 0) {\n update({ ...snapshot, pending: false, status: latestSettledStatus });\n }\n return result;\n } catch (cause) {\n pendingCount = Math.max(0, pendingCount - 1);\n const error = normalizeRendererClientError(cause) as TError;\n if (currentRequest === requestId) {\n latestSettledStatus = \"error\";\n update({\n pending: pendingCount > 0,\n status: pendingCount > 0 ? \"pending\" : \"error\",\n data:\n hasOptimistic && options.rollbackOnError\n ? previous\n : options.resetOnSubmit === false\n ? snapshot.data\n : null,\n error,\n });\n options.onError?.(error);\n options.onSettled?.(null, error);\n } else if (pendingCount === 0) {\n update({ ...snapshot, pending: false, status: latestSettledStatus });\n }\n throw error;\n }\n },\n reset() {\n requestId += 1;\n pendingCount = 0;\n latestSettledStatus = \"idle\";\n update({ pending: false, status: \"idle\", data: initialResult, error: null });\n },\n } as FarmAction<TInput, TResult, TError>;\n}\n\nexport interface FarmRendererQueryOptions extends ServerQueryFetchOptions {\n enabled?: boolean;\n refetchOnWindowFocus?: boolean;\n refetchOnReconnect?: boolean;\n}\n\nexport interface FarmRendererQuerySnapshot<TData> {\n data: TData | undefined;\n error: Error | null;\n status: FarmClientCacheStatus;\n pending: boolean;\n fetching: boolean;\n stale: boolean;\n}\n\nexport interface FarmRendererQuery<TData> extends FarmClientStore<\n FarmRendererQuerySnapshot<TData>\n> {\n refetch(): Promise<TData>;\n dispose(): void;\n}\n\nexport function createRendererQuery<TInput, TData>(\n query: ServerQuery<TInput, TData>,\n input: TInput,\n options: FarmRendererQueryOptions = {},\n): FarmRendererQuery<TData> {\n const cache = getFarmClientDataCache();\n const key = createServerQueryCallKey(query, input);\n const listeners = new Set<() => void>();\n let unsubscribeCache: (() => void) | undefined;\n let cleanupBrowser: (() => void) | undefined;\n\n const run = (force = false) => fetchServerQuery(query, input, { ...options, force });\n const ensureStarted = () => {\n if (options.enabled === false || unsubscribeCache) return;\n unsubscribeCache = cache.subscribe(key, () => {\n for (const listener of listeners) listener();\n });\n if (!cache.get(key) || cache.isStale(key)) void run().catch(() => undefined);\n\n if (typeof window !== \"undefined\") {\n const refresh = () => {\n if (cache.isStale(key)) void run().catch(() => undefined);\n };\n const onFocus = options.refetchOnWindowFocus === false ? undefined : refresh;\n const onOnline = options.refetchOnReconnect === false ? undefined : refresh;\n if (onFocus) window.addEventListener(\"focus\", onFocus);\n if (onOnline) window.addEventListener(\"online\", onOnline);\n cleanupBrowser = () => {\n if (onFocus) window.removeEventListener(\"focus\", onFocus);\n if (onOnline) window.removeEventListener(\"online\", onOnline);\n };\n }\n };\n\n return {\n getSnapshot() {\n const entry = cache.get<TData>(key);\n const status = entry?.status ?? (entry ? \"success\" : \"idle\");\n return {\n data: entry?.data,\n error: entry?.error ?? null,\n status,\n pending: status === \"pending\" && (entry?.updatedAt ?? 0) === 0,\n fetching: entry?.fetching ?? false,\n stale: cache.isStale(key),\n };\n },\n subscribe(listener) {\n listeners.add(listener);\n ensureStarted();\n return () => listeners.delete(listener);\n },\n refetch: () => run(true),\n dispose() {\n unsubscribeCache?.();\n cleanupBrowser?.();\n unsubscribeCache = undefined;\n cleanupBrowser = undefined;\n listeners.clear();\n },\n };\n}\n\nexport interface FarmRendererTheme extends FarmClientStore<FarmThemeSnapshot> {\n setTheme(theme: FarmThemePreference): void;\n toggleTheme(): FarmThemeSnapshot[\"resolvedTheme\"];\n}\n\nexport function createRendererTheme(): FarmRendererTheme {\n return {\n getSnapshot: getTheme,\n subscribe: subscribeTheme,\n setTheme,\n toggleTheme,\n };\n}\n\nexport interface FarmRendererI18n extends FarmClientStore<FarmI18nClientSnapshot | undefined> {\n readonly t: FarmTranslator;\n setLocale(locale: FarmI18nLocale): void;\n}\n\nexport function createRendererI18n(): FarmRendererI18n {\n return {\n getSnapshot: getFarmI18nClientState,\n subscribe: subscribeFarmI18n,\n t: createFarmClientTranslator(),\n setLocale(locale) {\n const snapshot = getFarmI18nClientState();\n if (!snapshot) throw new Error(\"Farm i18n is not configured or has not been hydrated.\");\n if (!snapshot.locales.includes(locale)) {\n throw new Error(`Unsupported Farm i18n locale \"${locale}\".`);\n }\n if (typeof window === \"undefined\") return;\n document.cookie = createFarmLocaleCookie(locale, { cookie: snapshot.cookie });\n const href = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n window.location.assign(localizeFarmHref(href, locale, snapshot));\n },\n };\n}\n\nfunction readRendererRouterSnapshot(\n basePath: string,\n matcher: FarmRouter | null,\n navigation: FarmNavigationState,\n): FarmRendererRouterSnapshot {\n if (typeof window === \"undefined\") {\n return {\n pathname: \"/\",\n searchParams: new URLSearchParams(),\n params: {},\n pageState: null,\n navigation,\n };\n }\n\n const url = new URL(window.location.href);\n const pathname = stripFarmBasePath(url.pathname, basePath);\n const i18n = getFarmI18nClientState();\n const routePathname = i18n ? stripFarmLocaleFromPathname(pathname, i18n) : pathname;\n\n return {\n pathname,\n searchParams: url.searchParams,\n params: matcher?.match(routePathname)?.params || {},\n pageState: readPageState(),\n navigation,\n };\n}\n\nfunction resolveRendererHref(href: string, basePath: string): string {\n return applyFarmBasePath(href, basePath);\n}\n\nfunction resolveRendererServerFn<TInput, TResult, TError extends Error>(\n target:\n | ServerFn<TInput, TResult, TError>\n | FarmRouteActionTarget<ServerFn<TInput, TResult, TError>>,\n): ServerFn<TInput, TResult, TError> {\n if (typeof target === \"function\") return target;\n if (target && typeof target.action === \"function\") return target.action;\n throw new TypeError(\n \"createRendererAction requires a server function or a route with a declared action\",\n );\n}\n\nfunction normalizeRendererClientError(cause: unknown): Error {\n if (cause instanceof Error) return cause;\n const error = new Error(typeof cause === \"string\" ? cause : \"FARMJS client operation failed\");\n (error as Error & { cause?: unknown }).cause = cause;\n return error;\n}\n\nfunction isRendererFormData(value: unknown): value is FormData {\n return typeof FormData !== \"undefined\" && value instanceof FormData;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/renderer-client.ts"],"sourcesContent":["\"use client\";\n\nimport { createFarmRouter, type FarmRouter, type FarmRouterRouteInput } from \"./router\";\nimport {\n getRouter as getSPARouter,\n readPageState,\n type FarmNavigationState,\n type FarmNavigateOptions,\n} from \"./client/spa-router\";\nimport { subscribeHistoryChange } from \"./client/history-sync\";\nimport { getFarmClientDataCache, type FarmClientCacheStatus } from \"./client-cache\";\nimport { attachRevalidationListeners } from \"./client-revalidation\";\nimport type { ServerFn } from \"./server-fn\";\nimport type { ServerQuery } from \"./server-query\";\nimport {\n createServerQueryCallKey,\n fetchServerQuery,\n type ServerQueryFetchOptions,\n} from \"./server-query-runtime\";\nimport { getTheme, setTheme, subscribeTheme, toggleTheme } from \"./theme/runtime\";\nimport type { FarmThemePreference, FarmThemeSnapshot } from \"./theme/types\";\nimport { createFarmLocaleCookie } from \"./i18n/resolver\";\nimport { localizeFarmHref, stripFarmLocaleFromPathname } from \"./i18n/routing\";\nimport {\n createFarmClientTranslator,\n getFarmI18nClientState,\n subscribeFarmI18n,\n} from \"./i18n/client-runtime\";\nimport type { FarmI18nClientSnapshot, FarmI18nLocale, FarmTranslator } from \"./i18n/types\";\nimport {\n applyFarmBasePath,\n getFarmBasePath,\n normalizeFarmBasePath,\n stripFarmBasePath,\n} from \"./base-path\";\n\nexport interface FarmClientStore<TSnapshot> {\n getSnapshot(): TSnapshot;\n subscribe(listener: () => void): () => void;\n}\n\nexport interface FarmRendererRouterOptions {\n basePath?: string;\n routes?: readonly FarmRouterRouteInput[];\n}\n\nexport interface FarmRendererRouterSnapshot {\n pathname: string;\n searchParams: URLSearchParams;\n params: Record<string, string>;\n pageState: unknown;\n navigation: FarmNavigationState;\n}\n\nexport interface FarmRendererRouter extends FarmClientStore<FarmRendererRouterSnapshot> {\n push(href: string, options?: Omit<FarmNavigateOptions, \"replace\">): Promise<void>;\n replace(href: string, options?: Omit<FarmNavigateOptions, \"replace\">): Promise<void>;\n refresh(options?: Omit<FarmNavigateOptions, \"replace\" | \"refresh\">): Promise<void>;\n prefetch(href: string): Promise<void>;\n back(): void;\n forward(): void;\n pushState<TState>(state: TState, href?: string): void;\n replaceState<TState>(state: TState, href?: string): void;\n}\n\nexport function createRendererRouter(options: FarmRendererRouterOptions = {}): FarmRendererRouter {\n const basePath =\n options.basePath === undefined ? getFarmBasePath() : normalizeFarmBasePath(options.basePath);\n const matcher = options.routes?.length ? createFarmRouter([...options.routes]) : null;\n const router = getSPARouter();\n let snapshot = readRendererRouterSnapshot(basePath, matcher, router.getNavigationState());\n\n const read = () => {\n snapshot = readRendererRouterSnapshot(basePath, matcher, router.getNavigationState());\n return snapshot;\n };\n\n return {\n getSnapshot: () => snapshot,\n subscribe(listener) {\n if (typeof window === \"undefined\") return () => {};\n const notify = () => {\n read();\n listener();\n };\n const unsubscribeNavigation = router.subscribeNavigation(notify);\n const unsubscribeHistory = subscribeHistoryChange(notify);\n read();\n return () => {\n unsubscribeNavigation();\n unsubscribeHistory();\n };\n },\n push(href, navigateOptions) {\n return typeof window === \"undefined\"\n ? Promise.resolve()\n : router.navigate(resolveRendererHref(href, basePath), navigateOptions);\n },\n replace(href, navigateOptions) {\n return typeof window === \"undefined\"\n ? Promise.resolve()\n : router.navigate(resolveRendererHref(href, basePath), {\n ...navigateOptions,\n replace: true,\n });\n },\n refresh: (refreshOptions) =>\n typeof window === \"undefined\" ? Promise.resolve() : router.refresh(refreshOptions),\n prefetch: (href) =>\n typeof window === \"undefined\"\n ? Promise.resolve()\n : router.prefetch(resolveRendererHref(href, basePath)),\n back() {\n if (typeof window !== \"undefined\") window.history.back();\n },\n forward() {\n if (typeof window !== \"undefined\") window.history.forward();\n },\n pushState(state, href) {\n if (typeof window !== \"undefined\") {\n router.pushState(state, href && resolveRendererHref(href, basePath));\n read();\n }\n },\n replaceState(state, href) {\n if (typeof window !== \"undefined\") {\n router.replaceState(state, href && resolveRendererHref(href, basePath));\n read();\n }\n },\n };\n}\n\nexport type FarmActionStatus = \"idle\" | \"pending\" | \"success\" | \"error\";\n\nexport interface FarmActionSnapshot<TResult, TError extends Error = Error> {\n pending: boolean;\n status: FarmActionStatus;\n data: TResult | null;\n error: TError | null;\n}\n\nexport interface FarmActionOptions<TInput, TResult, TError extends Error = Error> {\n initialResult?: TResult | null;\n resetOnSubmit?: boolean;\n optimistic?: (context: {\n input: TInput | FormData | undefined;\n formData?: FormData;\n current: TResult | null;\n }) => TResult | null | undefined;\n rollbackOnError?: boolean;\n onSuccess?: (result: TResult) => void;\n onError?: (error: TError) => void;\n onSettled?: (result: TResult | null, error: TError | null) => void;\n}\n\nexport type FarmActionSubmit<TInput, TResult> = [unknown] extends [TInput]\n ? (input?: TInput | FormData) => Promise<TResult>\n : (input: TInput | FormData) => Promise<TResult>;\n\nexport type FarmAction<TInput, TResult, TError extends Error = Error> = FarmClientStore<\n FarmActionSnapshot<TResult, TError>\n> & {\n submit: FarmActionSubmit<TInput, TResult>;\n reset(): void;\n};\n\nexport type FarmRouteActionTarget<TServerFn extends ServerFn<any, any, any>> = {\n readonly action: TServerFn;\n};\n\nexport function createRendererAction<TInput, TResult, TError extends Error = Error>(\n target:\n | ServerFn<TInput, TResult, TError>\n | FarmRouteActionTarget<ServerFn<TInput, TResult, TError>>,\n options: FarmActionOptions<TInput, TResult, TError> = {},\n): FarmAction<TInput, TResult, TError> {\n const serverFn = resolveRendererServerFn(target);\n const listeners = new Set<() => void>();\n const initialResult = options.initialResult ?? null;\n let requestId = 0;\n let pendingCount = 0;\n let latestSettledStatus: FarmActionSnapshot<TResult, TError>[\"status\"] = \"idle\";\n let snapshot: FarmActionSnapshot<TResult, TError> = {\n pending: false,\n status: \"idle\",\n data: initialResult,\n error: null,\n };\n\n const update = (next: FarmActionSnapshot<TResult, TError>) => {\n snapshot = next;\n for (const listener of listeners) listener();\n };\n\n return {\n getSnapshot: () => snapshot,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n async submit(input?: TInput | FormData) {\n const currentRequest = ++requestId;\n const previous = snapshot.data;\n const formData = isRendererFormData(input) ? input : undefined;\n const optimistic = options.optimistic?.({ input, formData, current: previous });\n const hasOptimistic = optimistic !== undefined;\n pendingCount += 1;\n update({\n pending: true,\n status: \"pending\",\n data: hasOptimistic ? optimistic : options.resetOnSubmit === false ? previous : null,\n error: null,\n });\n\n try {\n const result = await serverFn(input as TInput | FormData);\n pendingCount = Math.max(0, pendingCount - 1);\n if (currentRequest === requestId) {\n latestSettledStatus = \"success\";\n update({\n pending: pendingCount > 0,\n status: pendingCount > 0 ? \"pending\" : \"success\",\n data: result,\n error: null,\n });\n options.onSuccess?.(result);\n options.onSettled?.(result, null);\n } else if (pendingCount === 0) {\n update({ ...snapshot, pending: false, status: latestSettledStatus });\n }\n return result;\n } catch (cause) {\n pendingCount = Math.max(0, pendingCount - 1);\n const error = normalizeRendererClientError(cause) as TError;\n if (currentRequest === requestId) {\n latestSettledStatus = \"error\";\n update({\n pending: pendingCount > 0,\n status: pendingCount > 0 ? \"pending\" : \"error\",\n data:\n hasOptimistic && options.rollbackOnError\n ? previous\n : options.resetOnSubmit === false\n ? snapshot.data\n : null,\n error,\n });\n options.onError?.(error);\n options.onSettled?.(null, error);\n } else if (pendingCount === 0) {\n update({ ...snapshot, pending: false, status: latestSettledStatus });\n }\n throw error;\n }\n },\n reset() {\n requestId += 1;\n pendingCount = 0;\n latestSettledStatus = \"idle\";\n update({ pending: false, status: \"idle\", data: initialResult, error: null });\n },\n } as FarmAction<TInput, TResult, TError>;\n}\n\nexport interface FarmRendererQueryOptions extends ServerQueryFetchOptions {\n enabled?: boolean;\n refetchOnWindowFocus?: boolean;\n refetchOnReconnect?: boolean;\n}\n\nexport interface FarmRendererQuerySnapshot<TData> {\n data: TData | undefined;\n error: Error | null;\n status: FarmClientCacheStatus;\n pending: boolean;\n fetching: boolean;\n stale: boolean;\n}\n\nexport interface FarmRendererQuery<TData> extends FarmClientStore<\n FarmRendererQuerySnapshot<TData>\n> {\n refetch(): Promise<TData>;\n dispose(): void;\n}\n\nexport function createRendererQuery<TInput, TData>(\n query: ServerQuery<TInput, TData>,\n input: TInput,\n options: FarmRendererQueryOptions = {},\n): FarmRendererQuery<TData> {\n const cache = getFarmClientDataCache();\n const key = createServerQueryCallKey(query, input);\n const listeners = new Set<() => void>();\n let unsubscribeCache: (() => void) | undefined;\n let cleanupBrowser: (() => void) | undefined;\n\n const run = (force = false) => fetchServerQuery(query, input, { ...options, force });\n const ensureStarted = () => {\n if (options.enabled === false || unsubscribeCache) return;\n unsubscribeCache = cache.subscribe(key, () => {\n for (const listener of listeners) listener();\n });\n if (!cache.get(key) || cache.isStale(key)) void run().catch(() => undefined);\n\n cleanupBrowser = attachRevalidationListeners(\n () => {\n if (cache.isStale(key)) void run().catch(() => undefined);\n },\n {\n refetchOnWindowFocus: options.refetchOnWindowFocus,\n refetchOnReconnect: options.refetchOnReconnect,\n },\n );\n };\n\n return {\n getSnapshot() {\n const entry = cache.get<TData>(key);\n const status = entry?.status ?? (entry ? \"success\" : \"idle\");\n return {\n data: entry?.data,\n error: entry?.error ?? null,\n status,\n pending: status === \"pending\" && (entry?.updatedAt ?? 0) === 0,\n fetching: entry?.fetching ?? false,\n stale: cache.isStale(key),\n };\n },\n subscribe(listener) {\n listeners.add(listener);\n ensureStarted();\n return () => listeners.delete(listener);\n },\n refetch: () => run(true),\n dispose() {\n unsubscribeCache?.();\n cleanupBrowser?.();\n unsubscribeCache = undefined;\n cleanupBrowser = undefined;\n listeners.clear();\n },\n };\n}\n\nexport interface FarmRendererTheme extends FarmClientStore<FarmThemeSnapshot> {\n setTheme(theme: FarmThemePreference): void;\n toggleTheme(): FarmThemeSnapshot[\"resolvedTheme\"];\n}\n\nexport function createRendererTheme(): FarmRendererTheme {\n return {\n getSnapshot: getTheme,\n subscribe: subscribeTheme,\n setTheme,\n toggleTheme,\n };\n}\n\nexport interface FarmRendererI18n extends FarmClientStore<FarmI18nClientSnapshot | undefined> {\n readonly t: FarmTranslator;\n setLocale(locale: FarmI18nLocale): void;\n}\n\nexport function createRendererI18n(): FarmRendererI18n {\n return {\n getSnapshot: getFarmI18nClientState,\n subscribe: subscribeFarmI18n,\n t: createFarmClientTranslator(),\n setLocale(locale) {\n const snapshot = getFarmI18nClientState();\n if (!snapshot) throw new Error(\"Farm i18n is not configured or has not been hydrated.\");\n if (!snapshot.locales.includes(locale)) {\n throw new Error(`Unsupported Farm i18n locale \"${locale}\".`);\n }\n if (typeof window === \"undefined\") return;\n document.cookie = createFarmLocaleCookie(locale, { cookie: snapshot.cookie });\n const href = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n window.location.assign(localizeFarmHref(href, locale, snapshot));\n },\n };\n}\n\nfunction readRendererRouterSnapshot(\n basePath: string,\n matcher: FarmRouter | null,\n navigation: FarmNavigationState,\n): FarmRendererRouterSnapshot {\n if (typeof window === \"undefined\") {\n return {\n pathname: \"/\",\n searchParams: new URLSearchParams(),\n params: {},\n pageState: null,\n navigation,\n };\n }\n\n const url = new URL(window.location.href);\n const pathname = stripFarmBasePath(url.pathname, basePath);\n const i18n = getFarmI18nClientState();\n const routePathname = i18n ? stripFarmLocaleFromPathname(pathname, i18n) : pathname;\n\n return {\n pathname,\n searchParams: url.searchParams,\n params: matcher?.match(routePathname)?.params || {},\n pageState: readPageState(),\n navigation,\n };\n}\n\nfunction resolveRendererHref(href: string, basePath: string): string {\n return applyFarmBasePath(href, basePath);\n}\n\nfunction resolveRendererServerFn<TInput, TResult, TError extends Error>(\n target:\n | ServerFn<TInput, TResult, TError>\n | FarmRouteActionTarget<ServerFn<TInput, TResult, TError>>,\n): ServerFn<TInput, TResult, TError> {\n if (typeof target === \"function\") return target;\n if (target && typeof target.action === \"function\") return target.action;\n throw new TypeError(\n \"createRendererAction requires a server function or a route with a declared action\",\n );\n}\n\nfunction normalizeRendererClientError(cause: unknown): Error {\n if (cause instanceof Error) return cause;\n const error = new Error(typeof cause === \"string\" ? cause : \"FARMJS client operation failed\");\n (error as Error & { cause?: unknown }).cause = cause;\n return error;\n}\n\nfunction isRendererFormData(value: unknown): value is FormData {\n return typeof FormData !== \"undefined\" && value instanceof FormData;\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- import './client-plugins-BvClItiL.mjs';
1
+ import './client-plugins-B6-07YmP.mjs';
2
2
 
3
3
  declare function _runWithCurrentRequest<T>(request: Request, fn: () => Promise<T> | T): Promise<T>;
4
4
  declare function getCurrentRequest(): Request;
@@ -1,4 +1,4 @@
1
- import './client-plugins-B9Sq-iMg.js';
1
+ import './client-plugins-By6MVUX-.js';
2
2
 
3
3
  declare function _runWithCurrentRequest<T>(request: Request, fn: () => Promise<T> | T): Promise<T>;
4
4
  declare function getCurrentRequest(): Request;
@@ -1,7 +1,7 @@
1
- export { g as getCurrentRequest } from './request-BXa1KY8i.mjs';
2
- import './client-plugins-BvClItiL.mjs';
1
+ export { g as getCurrentRequest } from './request-BCNXSXLh.mjs';
2
+ import './client-plugins-B6-07YmP.mjs';
3
3
  import './lifecycle-De0vQG45.mjs';
4
- import './route-Cq3aObmj.mjs';
4
+ import './route-CvEr4Uc9.mjs';
5
5
  import './cache.mjs';
6
6
  import './renderer.mjs';
7
7
  import 'http';
@@ -9,6 +9,7 @@ import './types-Cc8l9IqS.mjs';
9
9
  import 'db0';
10
10
  import 'unstorage';
11
11
  import 'react';
12
+ import './integration-api-BT024nuJ.mjs';
12
13
  import '@farming-labs/orm';
13
14
  import './types-CKwggz9n.mjs';
14
15
  import '@farming-labs/docs';
package/dist/request.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { g as getCurrentRequest } from './request-CUUBujZt.js';
2
- import './client-plugins-B9Sq-iMg.js';
1
+ export { g as getCurrentRequest } from './request-BstWbZ6O.js';
2
+ import './client-plugins-By6MVUX-.js';
3
3
  import './lifecycle-De0vQG45.js';
4
- import './route-Y8lfz1wF.js';
4
+ import './route-4pd-EVtw.js';
5
5
  import './cache.js';
6
6
  import './renderer.js';
7
7
  import 'http';
@@ -9,6 +9,7 @@ import './types-Cc8l9IqS.js';
9
9
  import 'db0';
10
10
  import 'unstorage';
11
11
  import 'react';
12
+ import './integration-api-BT024nuJ.js';
12
13
  import '@farming-labs/orm';
13
14
  import './types-CKwggz9n.js';
14
15
  import '@farming-labs/docs';