@farm.js/core 0.1.0-beta.95 → 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 (317) 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 +7 -7
  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 +5 -5
  13. package/dist/api.cjs +352 -109
  14. package/dist/api.d.mts +7 -6
  15. package/dist/api.d.ts +7 -6
  16. package/dist/api.mjs +19 -12
  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-D7QH7MDU.mjs → chunk-3TWQERDE.mjs} +5 -4
  31. package/dist/chunk-3TWQERDE.mjs.map +1 -0
  32. package/dist/{chunk-RWYRFCLG.mjs → chunk-4X57GXQA.mjs} +2 -2
  33. package/dist/{chunk-KOTSX5JH.mjs → chunk-52BR7LTX.mjs} +30 -21
  34. package/dist/chunk-52BR7LTX.mjs.map +1 -0
  35. package/dist/{chunk-SALMKQXH.mjs → chunk-6EJHNHH4.mjs} +80 -27
  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-FLHLPB57.mjs → chunk-D7F7YZ7L.mjs} +93 -67
  43. package/dist/chunk-D7F7YZ7L.mjs.map +1 -0
  44. package/dist/chunk-DU3PKDVQ.mjs +35 -0
  45. package/dist/chunk-DU3PKDVQ.mjs.map +1 -0
  46. package/dist/{chunk-SCFX4UTD.mjs → chunk-EHTUKVSW.mjs} +1 -1
  47. package/dist/chunk-EHTUKVSW.mjs.map +1 -0
  48. package/dist/{chunk-KWCNQUH5.mjs → chunk-EPDIF432.mjs} +526 -50
  49. package/dist/chunk-EPDIF432.mjs.map +1 -0
  50. package/dist/{chunk-A3636IHN.mjs → chunk-FP5Q67FO.mjs} +167 -96
  51. package/dist/chunk-FP5Q67FO.mjs.map +1 -0
  52. package/dist/{chunk-HHZAOTQD.mjs → chunk-GJ7W6LNK.mjs} +7 -6
  53. package/dist/chunk-GJ7W6LNK.mjs.map +1 -0
  54. package/dist/{chunk-RLGUZ3HS.mjs → chunk-I3OOUWO5.mjs} +3 -3
  55. package/dist/{chunk-75CGAL6E.mjs → chunk-IZBX2TEU.mjs} +217 -105
  56. package/dist/chunk-IZBX2TEU.mjs.map +1 -0
  57. package/dist/{chunk-22VG4DFJ.mjs → chunk-J3MPQ4MQ.mjs} +2 -2
  58. package/dist/{chunk-22VG4DFJ.mjs.map → chunk-J3MPQ4MQ.mjs.map} +1 -1
  59. package/dist/{chunk-2LS3KKE7.mjs → chunk-JV7JUD7Q.mjs} +4 -4
  60. package/dist/{chunk-Q3OX763A.mjs → chunk-LXDASSTE.mjs} +2 -2
  61. package/dist/{chunk-ZRBCBOEX.mjs → chunk-N2FY2QZ7.mjs} +28 -3
  62. package/dist/chunk-N2FY2QZ7.mjs.map +1 -0
  63. package/dist/{chunk-MRVJCLYQ.mjs → chunk-PSQ7N4XP.mjs} +4 -2
  64. package/dist/chunk-PSQ7N4XP.mjs.map +1 -0
  65. package/dist/{chunk-HVG3HLQZ.mjs → chunk-Q7WGOOAI.mjs} +3 -3
  66. package/dist/{chunk-WTYAPO5I.mjs → chunk-RCNWMEBT.mjs} +3 -2
  67. package/dist/{chunk-WTYAPO5I.mjs.map → chunk-RCNWMEBT.mjs.map} +1 -1
  68. package/dist/{chunk-3INDBMUU.mjs → chunk-TGDIACZT.mjs} +2 -2
  69. package/dist/{chunk-WB75GIX2.mjs → chunk-TQTB33JS.mjs} +14 -3
  70. package/dist/chunk-TQTB33JS.mjs.map +1 -0
  71. package/dist/{chunk-MH27UH72.mjs → chunk-TT3E2JOF.mjs} +3 -3
  72. package/dist/{chunk-UWRGX3J3.mjs → chunk-UMUWR5XA.mjs} +2 -2
  73. package/dist/{chunk-XTLLHCWU.mjs → chunk-V4VRLVLW.mjs} +52 -31
  74. package/dist/chunk-V4VRLVLW.mjs.map +1 -0
  75. package/dist/{chunk-EXCGBERG.mjs → chunk-WD2EBM3I.mjs} +79 -17
  76. package/dist/chunk-WD2EBM3I.mjs.map +1 -0
  77. package/dist/{chunk-DLBUAJTK.mjs → chunk-WMJGA32P.mjs} +74 -5
  78. package/dist/chunk-WMJGA32P.mjs.map +1 -0
  79. package/dist/{chunk-TKQCJMY7.mjs → chunk-X4SFHKFH.mjs} +7 -4
  80. package/dist/{chunk-TKQCJMY7.mjs.map → chunk-X4SFHKFH.mjs.map} +1 -1
  81. package/dist/{chunk-Q7GPJZCO.mjs → chunk-YIBV77KZ.mjs} +26 -7
  82. package/dist/chunk-YIBV77KZ.mjs.map +1 -0
  83. package/dist/client/lifecycle.mjs +2 -2
  84. package/dist/{client-mcMC334J.d.mts → client-DWoLZ3QU.d.mts} +52 -5
  85. package/dist/{client-d5ONQ-Pd.d.ts → client-DuQuQC1h.d.ts} +52 -5
  86. package/dist/client-cache-BMxuFqwH.d.ts +18 -0
  87. package/dist/client-cache-CCK-fCe0.d.mts +18 -0
  88. package/dist/{client-plugins-BvClItiL.d.mts → client-plugins-B6-07YmP.d.mts} +52 -99
  89. package/dist/{client-plugins-B9Sq-iMg.d.ts → client-plugins-By6MVUX-.d.ts} +52 -99
  90. package/dist/client-plugins.cjs +1 -1
  91. package/dist/client-plugins.d.mts +3 -2
  92. package/dist/client-plugins.d.ts +3 -2
  93. package/dist/client-plugins.mjs +2 -2
  94. package/dist/client.cjs +1046 -211
  95. package/dist/client.d.mts +136 -18
  96. package/dist/client.d.ts +136 -18
  97. package/dist/client.mjs +32 -15
  98. package/dist/config.d.mts +3 -2
  99. package/dist/config.d.ts +3 -2
  100. package/dist/{devtools-S52RRRMN.mjs → devtools-XWZX6CCL.mjs} +5 -5
  101. package/dist/{devtools-client-3XRTBND5.mjs → devtools-client-Z7QQA3Q2.mjs} +56 -17
  102. package/dist/devtools-client-Z7QQA3Q2.mjs.map +1 -0
  103. package/dist/{devtools-ui-NJKFORTG.mjs → devtools-ui-2HG5M4EL.mjs} +3 -1
  104. package/dist/devtools-ui-2HG5M4EL.mjs.map +1 -0
  105. package/dist/docs.cjs +24 -5
  106. package/dist/docs.mjs +5 -5
  107. package/dist/i18n/server.cjs +13 -2
  108. package/dist/i18n/server.d.mts +2 -2
  109. package/dist/i18n/server.d.ts +2 -2
  110. package/dist/i18n/server.mjs +1 -1
  111. package/dist/index.cjs +1928 -894
  112. package/dist/index.d.mts +139 -21
  113. package/dist/index.d.ts +139 -21
  114. package/dist/index.mjs +57 -34
  115. package/dist/index.mjs.map +1 -1
  116. package/dist/integration-api-BT024nuJ.d.mts +97 -0
  117. package/dist/integration-api-BT024nuJ.d.ts +97 -0
  118. package/dist/integrations.d.mts +3 -2
  119. package/dist/integrations.d.ts +3 -2
  120. package/dist/internal/build-runtime.cjs +764 -547
  121. package/dist/internal/build-runtime.d.mts +5 -4
  122. package/dist/internal/build-runtime.d.ts +5 -4
  123. package/dist/internal/build-runtime.mjs +16 -16
  124. package/dist/internal/client-runtime.cjs +1 -1
  125. package/dist/internal/client-runtime.mjs +2 -2
  126. package/dist/internal/config-runtime.cjs +4 -1
  127. package/dist/internal/config-runtime.d.mts +4 -3
  128. package/dist/internal/config-runtime.d.ts +4 -3
  129. package/dist/internal/config-runtime.mjs +4 -4
  130. package/dist/internal/product-telemetry-runtime.cjs +1 -1
  131. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  132. package/dist/internal/production-runtime.cjs +29 -3
  133. package/dist/internal/production-runtime.d.mts +8 -7
  134. package/dist/internal/production-runtime.d.ts +8 -7
  135. package/dist/internal/production-runtime.mjs +5 -5
  136. package/dist/{metadata-route-yV4U6X8h.d.ts → metadata-route-8_V3UonT.d.ts} +1 -1
  137. package/dist/{metadata-route-p4K1l92V.d.mts → metadata-route-CWP_HjGU.d.mts} +1 -1
  138. package/dist/middleware.cjs +28 -2
  139. package/dist/middleware.d.mts +5 -4
  140. package/dist/middleware.d.ts +5 -4
  141. package/dist/middleware.mjs +4 -4
  142. package/dist/navigation.cjs +3 -1
  143. package/dist/navigation.mjs +3 -3
  144. package/dist/observability.cjs +27 -2
  145. package/dist/observability.mjs +1 -1
  146. package/dist/plugin.cjs +528 -349
  147. package/dist/plugin.d.mts +3 -2
  148. package/dist/plugin.d.ts +3 -2
  149. package/dist/plugin.mjs +13 -13
  150. package/dist/{production-runtime-IkB0Qj4i.d.mts → production-runtime-BGRH1dKG.d.mts} +1 -1
  151. package/dist/{production-runtime-0JTch4_d.d.ts → production-runtime-CdmzsDax.d.ts} +1 -1
  152. package/dist/query/client.cjs +68 -29
  153. package/dist/query/client.mjs +69 -30
  154. package/dist/query/client.mjs.map +1 -1
  155. package/dist/{render-plan-Dc8CjNI7.d.ts → render-plan-0GeHiGVZ.d.ts} +1 -1
  156. package/dist/{render-plan-CU31j-Jk.d.mts → render-plan-DLxJYAA5.d.mts} +1 -1
  157. package/dist/renderer-client.cjs +169 -26
  158. package/dist/renderer-client.d.mts +7 -6
  159. package/dist/renderer-client.d.ts +7 -6
  160. package/dist/renderer-client.mjs +16 -19
  161. package/dist/renderer-client.mjs.map +1 -1
  162. package/dist/{request-BXa1KY8i.d.mts → request-BCNXSXLh.d.mts} +1 -1
  163. package/dist/{request-CUUBujZt.d.ts → request-BstWbZ6O.d.ts} +1 -1
  164. package/dist/request.d.mts +4 -3
  165. package/dist/request.d.ts +4 -3
  166. package/dist/{route-Y8lfz1wF.d.ts → route-4pd-EVtw.d.ts} +45 -50
  167. package/dist/{route-Cq3aObmj.d.mts → route-CvEr4Uc9.d.mts} +45 -50
  168. package/dist/routes.cjs +27 -2
  169. package/dist/routes.d.mts +3 -2
  170. package/dist/routes.d.ts +3 -2
  171. package/dist/routes.mjs +4 -4
  172. package/dist/{runtime-j1S3sDTh.d.ts → runtime-BgDQzBiu.d.ts} +1 -0
  173. package/dist/{runtime-DDwvDtS4.d.mts → runtime-CV2UCV-5.d.mts} +1 -0
  174. package/dist/server-action-security.mjs +2 -2
  175. package/dist/server-fn-client.cjs +102 -26
  176. package/dist/server-fn-client.d.mts +6 -0
  177. package/dist/server-fn-client.d.ts +6 -0
  178. package/dist/server-fn-client.mjs +2 -1
  179. package/dist/server-fn.cjs +42 -4
  180. package/dist/server-fn.mjs +5 -5
  181. package/dist/server-plugins.d.mts +4 -3
  182. package/dist/server-plugins.d.ts +4 -3
  183. package/dist/server-query-client.cjs +195 -34
  184. package/dist/server-query-client.d.mts +3 -3
  185. package/dist/server-query-client.d.ts +3 -3
  186. package/dist/server-query-client.mjs +7 -7
  187. package/dist/{server-query-runtime-3zAj77yv.d.ts → server-query-runtime-DXRNhX_3.d.ts} +2 -0
  188. package/dist/{server-query-runtime-B50KAcj5.d.mts → server-query-runtime-aP52iuL5.d.mts} +2 -0
  189. package/dist/server-query.cjs +44 -5
  190. package/dist/server-query.d.mts +4 -0
  191. package/dist/server-query.d.ts +4 -0
  192. package/dist/server-query.mjs +7 -7
  193. package/dist/server.cjs +553 -370
  194. package/dist/server.d.mts +11 -10
  195. package/dist/server.d.ts +11 -10
  196. package/dist/server.mjs +17 -17
  197. package/dist/{spa-router-CyLkwst6.d.mts → spa-router-BeyAVSc6.d.mts} +1 -1
  198. package/dist/{spa-router-BkqGXaV_.d.ts → spa-router-COgu4txb.d.ts} +1 -1
  199. package/dist/testing.cjs +27 -2
  200. package/dist/testing.d.mts +3 -2
  201. package/dist/testing.d.ts +3 -2
  202. package/dist/testing.mjs +9 -9
  203. package/dist/{utils-NKR6SoNv.d.mts → utils-DL2VwDQl.d.mts} +1 -1
  204. package/dist/{utils-B2OHrb9F.d.ts → utils-DkU2c_1B.d.ts} +1 -1
  205. package/dist/version.cjs +1 -1
  206. package/dist/version.mjs +1 -1
  207. package/dist/vite.cjs +536 -353
  208. package/dist/vite.d.mts +3 -2
  209. package/dist/vite.d.ts +3 -2
  210. package/dist/vite.mjs +17 -13
  211. package/package.json +17 -17
  212. package/types/client.d.ts +115 -10
  213. package/dist/agent-runtime.cjs.map +0 -1
  214. package/dist/api/route-manager.cjs.map +0 -1
  215. package/dist/api/runtime.cjs.map +0 -1
  216. package/dist/api.cjs.map +0 -1
  217. package/dist/app-markdown.cjs.map +0 -1
  218. package/dist/cache.cjs.map +0 -1
  219. package/dist/chunk-75CGAL6E.mjs.map +0 -1
  220. package/dist/chunk-7MABZJIM.mjs.map +0 -1
  221. package/dist/chunk-A3636IHN.mjs.map +0 -1
  222. package/dist/chunk-AXVJCMVF.mjs.map +0 -1
  223. package/dist/chunk-D7QH7MDU.mjs.map +0 -1
  224. package/dist/chunk-DLBUAJTK.mjs.map +0 -1
  225. package/dist/chunk-EXCGBERG.mjs.map +0 -1
  226. package/dist/chunk-FLHLPB57.mjs.map +0 -1
  227. package/dist/chunk-HHZAOTQD.mjs.map +0 -1
  228. package/dist/chunk-KOTSX5JH.mjs.map +0 -1
  229. package/dist/chunk-KWCNQUH5.mjs.map +0 -1
  230. package/dist/chunk-MRVJCLYQ.mjs.map +0 -1
  231. package/dist/chunk-Q7GPJZCO.mjs.map +0 -1
  232. package/dist/chunk-RBRLLZL5.mjs.map +0 -1
  233. package/dist/chunk-SALMKQXH.mjs.map +0 -1
  234. package/dist/chunk-SCFX4UTD.mjs.map +0 -1
  235. package/dist/chunk-WB75GIX2.mjs.map +0 -1
  236. package/dist/chunk-XTLLHCWU.mjs.map +0 -1
  237. package/dist/chunk-ZFNK77WN.mjs.map +0 -1
  238. package/dist/chunk-ZRBCBOEX.mjs.map +0 -1
  239. package/dist/client/lifecycle.cjs.map +0 -1
  240. package/dist/client-cache-CopR_MaI.d.mts +0 -6
  241. package/dist/client-cache-Djy_TlE8.d.ts +0 -6
  242. package/dist/client-plugins.cjs.map +0 -1
  243. package/dist/client.cjs.map +0 -1
  244. package/dist/config.cjs.map +0 -1
  245. package/dist/cron.cjs.map +0 -1
  246. package/dist/deferred.cjs.map +0 -1
  247. package/dist/deployment.cjs.map +0 -1
  248. package/dist/devtools-client-3XRTBND5.mjs.map +0 -1
  249. package/dist/devtools-ui-NJKFORTG.mjs.map +0 -1
  250. package/dist/docs.cjs.map +0 -1
  251. package/dist/env-types.cjs.map +0 -1
  252. package/dist/env.cjs.map +0 -1
  253. package/dist/environment/vite.cjs.map +0 -1
  254. package/dist/environment.cjs.map +0 -1
  255. package/dist/font.cjs.map +0 -1
  256. package/dist/headers.cjs.map +0 -1
  257. package/dist/i18n/client.cjs.map +0 -1
  258. package/dist/i18n/index.cjs.map +0 -1
  259. package/dist/i18n/server.cjs.map +0 -1
  260. package/dist/image/server.cjs.map +0 -1
  261. package/dist/image/sharp.cjs.map +0 -1
  262. package/dist/image.cjs.map +0 -1
  263. package/dist/index.cjs.map +0 -1
  264. package/dist/instrumentation.cjs.map +0 -1
  265. package/dist/integrations.cjs.map +0 -1
  266. package/dist/internal/build-runtime.cjs.map +0 -1
  267. package/dist/internal/client-runtime.cjs.map +0 -1
  268. package/dist/internal/config-runtime.cjs.map +0 -1
  269. package/dist/internal/isolated-boundary.cjs.map +0 -1
  270. package/dist/internal/metadata-image-runtime.cjs.map +0 -1
  271. package/dist/internal/product-telemetry-runtime.cjs.map +0 -1
  272. package/dist/internal/production-node-env.cjs.map +0 -1
  273. package/dist/internal/production-runtime.cjs.map +0 -1
  274. package/dist/markdown.cjs.map +0 -1
  275. package/dist/middleware.cjs.map +0 -1
  276. package/dist/navigation.cjs.map +0 -1
  277. package/dist/observability.cjs.map +0 -1
  278. package/dist/plugin.cjs.map +0 -1
  279. package/dist/query/client.cjs.map +0 -1
  280. package/dist/query/index.cjs.map +0 -1
  281. package/dist/query/parsers.cjs.map +0 -1
  282. package/dist/query/server.cjs.map +0 -1
  283. package/dist/renderer/react/client.cjs.map +0 -1
  284. package/dist/renderer/react/server.cjs.map +0 -1
  285. package/dist/renderer/react/vite.cjs.map +0 -1
  286. package/dist/renderer-client.cjs.map +0 -1
  287. package/dist/renderer.cjs.map +0 -1
  288. package/dist/request.cjs.map +0 -1
  289. package/dist/router.cjs.map +0 -1
  290. package/dist/routes.cjs.map +0 -1
  291. package/dist/server-action-security.cjs.map +0 -1
  292. package/dist/server-fn-client.cjs.map +0 -1
  293. package/dist/server-fn.cjs.map +0 -1
  294. package/dist/server-plugins.cjs.map +0 -1
  295. package/dist/server-query-client.cjs.map +0 -1
  296. package/dist/server-query.cjs.map +0 -1
  297. package/dist/server.cjs.map +0 -1
  298. package/dist/storage.cjs.map +0 -1
  299. package/dist/testing.cjs.map +0 -1
  300. package/dist/theme/client.cjs.map +0 -1
  301. package/dist/theme/index.cjs.map +0 -1
  302. package/dist/theme/runtime.cjs.map +0 -1
  303. package/dist/theme/server.cjs.map +0 -1
  304. package/dist/version.cjs.map +0 -1
  305. package/dist/vite.cjs.map +0 -1
  306. package/dist/workflows.cjs.map +0 -1
  307. /package/dist/{chunk-VV24CC42.mjs.map → chunk-35NPLKQJ.mjs.map} +0 -0
  308. /package/dist/{chunk-RWYRFCLG.mjs.map → chunk-4X57GXQA.mjs.map} +0 -0
  309. /package/dist/{chunk-MOW47IF5.mjs.map → chunk-6UYVU46O.mjs.map} +0 -0
  310. /package/dist/{chunk-RLGUZ3HS.mjs.map → chunk-I3OOUWO5.mjs.map} +0 -0
  311. /package/dist/{chunk-2LS3KKE7.mjs.map → chunk-JV7JUD7Q.mjs.map} +0 -0
  312. /package/dist/{chunk-Q3OX763A.mjs.map → chunk-LXDASSTE.mjs.map} +0 -0
  313. /package/dist/{chunk-HVG3HLQZ.mjs.map → chunk-Q7WGOOAI.mjs.map} +0 -0
  314. /package/dist/{chunk-3INDBMUU.mjs.map → chunk-TGDIACZT.mjs.map} +0 -0
  315. /package/dist/{chunk-MH27UH72.mjs.map → chunk-TT3E2JOF.mjs.map} +0 -0
  316. /package/dist/{chunk-UWRGX3J3.mjs.map → chunk-UMUWR5XA.mjs.map} +0 -0
  317. /package/dist/{devtools-S52RRRMN.mjs.map → devtools-XWZX6CCL.mjs.map} +0 -0
@@ -1,8 +1,9 @@
1
1
  "use client";
2
2
  import {
3
+ attachRevalidationListeners,
3
4
  createServerQueryCallKey,
4
5
  fetchServerQuery
5
- } from "./chunk-EXCGBERG.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-DLBUAJTK.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';
@@ -48,27 +48,56 @@ declare function isJSONStreamResponse(response: {
48
48
  declare function readJSONStream<TItem>(response: Response): FarmAPIStream<TItem>;
49
49
  declare function isFarmAPIStream(value: unknown): value is FarmAPIStream<unknown>;
50
50
 
51
- type AnySchema = {
52
- _output?: any;
53
- _input?: any;
54
- parse?: (data: unknown) => any;
55
- };
51
+ /** Server-only schema contract shared by declarative routes and the API runtime. */
52
+ interface RouteSchema {
53
+ readonly _input?: unknown;
54
+ readonly _output?: unknown;
55
+ parse?: (value: unknown) => unknown;
56
+ parseAsync?: (value: unknown) => Promise<unknown>;
57
+ readonly "~standard"?: {
58
+ readonly types?: {
59
+ input: unknown;
60
+ output: unknown;
61
+ };
62
+ validate(value: unknown): unknown;
63
+ };
64
+ }
65
+ type RouteSchemaInput<T> = T extends {
66
+ _input: infer I;
67
+ } ? I : T extends {
68
+ "~standard": {
69
+ types?: {
70
+ input: infer I;
71
+ };
72
+ };
73
+ } ? I : unknown;
74
+ type RouteSchemaOutput<T> = T extends {
75
+ _output: infer O;
76
+ } ? O : T extends {
77
+ "~standard": {
78
+ types?: {
79
+ output: infer O;
80
+ };
81
+ };
82
+ } ? O : T extends {
83
+ parse: (...args: any[]) => infer O;
84
+ } ? Awaited<O> : unknown;
85
+
86
+ type AnySchema = RouteSchema;
56
87
  type MaybePromise<T> = T | Promise<T>;
57
88
  type Simplify<T> = {
58
89
  [TKey in keyof T]: T[TKey];
59
90
  } & {};
60
91
  type UnionToIntersection$1<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer TIntersection) => void ? TIntersection : never;
61
- type InferOutput<T> = T extends {
62
- _output: infer O;
63
- } ? O : T extends {
64
- parse: (data: unknown) => infer R;
65
- } ? R : unknown;
92
+ type InferOutput<T> = RouteSchemaOutput<T>;
66
93
  type InferInput<T> = T extends {
67
94
  _input: infer I;
68
95
  } ? I : T extends {
96
+ "~standard": unknown;
97
+ } ? RouteSchemaInput<T> : T extends {
69
98
  parse: (data: infer I) => unknown;
70
99
  } ? I : unknown;
71
- type InferBodyInput<T> = T extends MultipartSchema<AnySchema> ? TypedFormData<InferOutput<T>> : InferOutput<T>;
100
+ type InferBodyInput<T> = T extends MultipartSchema<AnySchema> ? TypedFormData<InferInput<T>> : InferInput<T>;
72
101
  type InferHeadersOutput<T> = [T] extends [never] ? Record<string, string> : T extends AnySchema ? InferOutput<T> : Record<string, string>;
73
102
  type EndpointErrorSchema = AnySchema & {
74
103
  parse: (data: unknown) => unknown;
@@ -165,11 +194,12 @@ type EndpointHandler<TBody extends AnySchema = never, TQuery extends AnySchema =
165
194
  /** @deprecated Use `error`. */
166
195
  fail: EndpointFail<TErrors>;
167
196
  }) => Promise<TResponse> | TResponse;
168
- type TypedEndpoint<TBody = never, TQuery = never, TResponse = any, THeaders = Record<string, string>, TErrors = never, TBodyInput = TBody> = {
197
+ type TypedEndpoint<TBody = never, TQuery = never, TResponse = any, THeaders = Record<string, string>, TErrors = never, TBodyInput = TBody, TQueryInput = TQuery> = {
169
198
  __types: {
170
199
  body: TBody;
171
200
  inputBody: TBodyInput;
172
201
  query: TQuery;
202
+ inputQuery: TQueryInput;
173
203
  headers: THeaders;
174
204
  response: TResponse;
175
205
  errors: TErrors;
@@ -177,10 +207,10 @@ type TypedEndpoint<TBody = never, TQuery = never, TResponse = any, THeaders = Re
177
207
  __path?: string;
178
208
  __method?: string;
179
209
  } & ((options?: {
180
- body?: TBody;
181
- query?: TQuery;
210
+ body?: TBodyInput;
211
+ query?: TQueryInput;
182
212
  }) => Promise<TResponse>);
183
- type CreatedEndpoint<TBody extends AnySchema, TQuery extends AnySchema, THeaders extends AnySchema, TResponse, TErrors extends EndpointErrorDefinitions = {}> = TypedEndpoint<InferOutput<TBody>, InferOutput<TQuery>, Awaited<TResponse>, InferHeadersOutput<THeaders>, EndpointErrorContracts<TErrors>, InferBodyInput<TBody>>;
213
+ type CreatedEndpoint<TBody extends AnySchema, TQuery extends AnySchema, THeaders extends AnySchema, TResponse, TErrors extends EndpointErrorDefinitions = {}> = TypedEndpoint<InferOutput<TBody>, InferOutput<TQuery>, Awaited<TResponse>, InferHeadersOutput<THeaders>, EndpointErrorContracts<TErrors>, InferBodyInput<TBody>, InferInput<TQuery>>;
184
214
  type AnyEndpointOptions = EndpointOptions<AnySchema, AnySchema, AnySchema, readonly AnyEndpointMiddleware[], EndpointErrorDefinitions>;
185
215
  type EndpointBodyFromOptions<TOptions> = TOptions extends {
186
216
  body: infer TBody extends AnySchema;
@@ -265,41 +295,6 @@ declare function OPTIONS<T = any>(handler: EndpointHandler<never, never, never,
265
295
  declare function OPTIONS<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
266
296
  declare function OPTIONS<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
267
297
 
268
- /** Server-only schema contract shared by declarative routes and the API runtime. */
269
- interface RouteSchema {
270
- readonly _input?: unknown;
271
- readonly _output?: unknown;
272
- parse?: (value: unknown) => unknown;
273
- parseAsync?: (value: unknown) => Promise<unknown>;
274
- readonly "~standard"?: {
275
- readonly types?: {
276
- input: unknown;
277
- output: unknown;
278
- };
279
- validate(value: unknown): unknown;
280
- };
281
- }
282
- type RouteSchemaInput<T> = T extends {
283
- _input: infer I;
284
- } ? I : T extends {
285
- "~standard": {
286
- types?: {
287
- input: infer I;
288
- };
289
- };
290
- } ? I : unknown;
291
- type RouteSchemaOutput<T> = T extends {
292
- _output: infer O;
293
- } ? O : T extends {
294
- "~standard": {
295
- types?: {
296
- output: infer O;
297
- };
298
- };
299
- } ? O : T extends {
300
- parse: (...args: any[]) => infer O;
301
- } ? Awaited<O> : unknown;
302
-
303
298
  type RouteMethod = "GET" | "HEAD" | "QUERY" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS";
304
299
  type RoutePathParams<Path extends string> = Path extends `${infer Head}/${infer Tail}` ? RoutePathParams<Head> & RoutePathParams<Tail> : Path extends `[[...${infer Name}]]` ? {
305
300
  [K in Name]?: string[];
@@ -48,27 +48,56 @@ declare function isJSONStreamResponse(response: {
48
48
  declare function readJSONStream<TItem>(response: Response): FarmAPIStream<TItem>;
49
49
  declare function isFarmAPIStream(value: unknown): value is FarmAPIStream<unknown>;
50
50
 
51
- type AnySchema = {
52
- _output?: any;
53
- _input?: any;
54
- parse?: (data: unknown) => any;
55
- };
51
+ /** Server-only schema contract shared by declarative routes and the API runtime. */
52
+ interface RouteSchema {
53
+ readonly _input?: unknown;
54
+ readonly _output?: unknown;
55
+ parse?: (value: unknown) => unknown;
56
+ parseAsync?: (value: unknown) => Promise<unknown>;
57
+ readonly "~standard"?: {
58
+ readonly types?: {
59
+ input: unknown;
60
+ output: unknown;
61
+ };
62
+ validate(value: unknown): unknown;
63
+ };
64
+ }
65
+ type RouteSchemaInput<T> = T extends {
66
+ _input: infer I;
67
+ } ? I : T extends {
68
+ "~standard": {
69
+ types?: {
70
+ input: infer I;
71
+ };
72
+ };
73
+ } ? I : unknown;
74
+ type RouteSchemaOutput<T> = T extends {
75
+ _output: infer O;
76
+ } ? O : T extends {
77
+ "~standard": {
78
+ types?: {
79
+ output: infer O;
80
+ };
81
+ };
82
+ } ? O : T extends {
83
+ parse: (...args: any[]) => infer O;
84
+ } ? Awaited<O> : unknown;
85
+
86
+ type AnySchema = RouteSchema;
56
87
  type MaybePromise<T> = T | Promise<T>;
57
88
  type Simplify<T> = {
58
89
  [TKey in keyof T]: T[TKey];
59
90
  } & {};
60
91
  type UnionToIntersection$1<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer TIntersection) => void ? TIntersection : never;
61
- type InferOutput<T> = T extends {
62
- _output: infer O;
63
- } ? O : T extends {
64
- parse: (data: unknown) => infer R;
65
- } ? R : unknown;
92
+ type InferOutput<T> = RouteSchemaOutput<T>;
66
93
  type InferInput<T> = T extends {
67
94
  _input: infer I;
68
95
  } ? I : T extends {
96
+ "~standard": unknown;
97
+ } ? RouteSchemaInput<T> : T extends {
69
98
  parse: (data: infer I) => unknown;
70
99
  } ? I : unknown;
71
- type InferBodyInput<T> = T extends MultipartSchema<AnySchema> ? TypedFormData<InferOutput<T>> : InferOutput<T>;
100
+ type InferBodyInput<T> = T extends MultipartSchema<AnySchema> ? TypedFormData<InferInput<T>> : InferInput<T>;
72
101
  type InferHeadersOutput<T> = [T] extends [never] ? Record<string, string> : T extends AnySchema ? InferOutput<T> : Record<string, string>;
73
102
  type EndpointErrorSchema = AnySchema & {
74
103
  parse: (data: unknown) => unknown;
@@ -165,11 +194,12 @@ type EndpointHandler<TBody extends AnySchema = never, TQuery extends AnySchema =
165
194
  /** @deprecated Use `error`. */
166
195
  fail: EndpointFail<TErrors>;
167
196
  }) => Promise<TResponse> | TResponse;
168
- type TypedEndpoint<TBody = never, TQuery = never, TResponse = any, THeaders = Record<string, string>, TErrors = never, TBodyInput = TBody> = {
197
+ type TypedEndpoint<TBody = never, TQuery = never, TResponse = any, THeaders = Record<string, string>, TErrors = never, TBodyInput = TBody, TQueryInput = TQuery> = {
169
198
  __types: {
170
199
  body: TBody;
171
200
  inputBody: TBodyInput;
172
201
  query: TQuery;
202
+ inputQuery: TQueryInput;
173
203
  headers: THeaders;
174
204
  response: TResponse;
175
205
  errors: TErrors;
@@ -177,10 +207,10 @@ type TypedEndpoint<TBody = never, TQuery = never, TResponse = any, THeaders = Re
177
207
  __path?: string;
178
208
  __method?: string;
179
209
  } & ((options?: {
180
- body?: TBody;
181
- query?: TQuery;
210
+ body?: TBodyInput;
211
+ query?: TQueryInput;
182
212
  }) => Promise<TResponse>);
183
- type CreatedEndpoint<TBody extends AnySchema, TQuery extends AnySchema, THeaders extends AnySchema, TResponse, TErrors extends EndpointErrorDefinitions = {}> = TypedEndpoint<InferOutput<TBody>, InferOutput<TQuery>, Awaited<TResponse>, InferHeadersOutput<THeaders>, EndpointErrorContracts<TErrors>, InferBodyInput<TBody>>;
213
+ type CreatedEndpoint<TBody extends AnySchema, TQuery extends AnySchema, THeaders extends AnySchema, TResponse, TErrors extends EndpointErrorDefinitions = {}> = TypedEndpoint<InferOutput<TBody>, InferOutput<TQuery>, Awaited<TResponse>, InferHeadersOutput<THeaders>, EndpointErrorContracts<TErrors>, InferBodyInput<TBody>, InferInput<TQuery>>;
184
214
  type AnyEndpointOptions = EndpointOptions<AnySchema, AnySchema, AnySchema, readonly AnyEndpointMiddleware[], EndpointErrorDefinitions>;
185
215
  type EndpointBodyFromOptions<TOptions> = TOptions extends {
186
216
  body: infer TBody extends AnySchema;
@@ -265,41 +295,6 @@ declare function OPTIONS<T = any>(handler: EndpointHandler<never, never, never,
265
295
  declare function OPTIONS<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
266
296
  declare function OPTIONS<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
267
297
 
268
- /** Server-only schema contract shared by declarative routes and the API runtime. */
269
- interface RouteSchema {
270
- readonly _input?: unknown;
271
- readonly _output?: unknown;
272
- parse?: (value: unknown) => unknown;
273
- parseAsync?: (value: unknown) => Promise<unknown>;
274
- readonly "~standard"?: {
275
- readonly types?: {
276
- input: unknown;
277
- output: unknown;
278
- };
279
- validate(value: unknown): unknown;
280
- };
281
- }
282
- type RouteSchemaInput<T> = T extends {
283
- _input: infer I;
284
- } ? I : T extends {
285
- "~standard": {
286
- types?: {
287
- input: infer I;
288
- };
289
- };
290
- } ? I : unknown;
291
- type RouteSchemaOutput<T> = T extends {
292
- _output: infer O;
293
- } ? O : T extends {
294
- "~standard": {
295
- types?: {
296
- output: infer O;
297
- };
298
- };
299
- } ? O : T extends {
300
- parse: (...args: any[]) => infer O;
301
- } ? Awaited<O> : unknown;
302
-
303
298
  type RouteMethod = "GET" | "HEAD" | "QUERY" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS";
304
299
  type RoutePathParams<Path extends string> = Path extends `${infer Head}/${infer Tail}` ? RoutePathParams<Head> & RoutePathParams<Tail> : Path extends `[[...${infer Name}]]` ? {
305
300
  [K in Name]?: string[];
package/dist/routes.cjs CHANGED
@@ -113,7 +113,13 @@ function recordFarmEventTrace(event) {
113
113
  activeSpan.addEvent(event.type, toEventAttributes(event), event.timestamp);
114
114
  }
115
115
  const error = event.type === "request.error" ? void 0 : getEventError(event);
116
- if (error !== void 0) recordSpanError(activeSpan, error);
116
+ if (error !== void 0) {
117
+ if (event.type === "render.error") {
118
+ recordSpanException(activeSpan, error);
119
+ } else {
120
+ recordSpanError(activeSpan, error);
121
+ }
122
+ }
117
123
  }
118
124
  const completedTraceContext = recordCompletedEventSpan(event, activeContext);
119
125
  return traceContext ?? completedTraceContext;
@@ -210,12 +216,26 @@ function getCompletedSpanDescriptor(event) {
210
216
  }
211
217
  }
212
218
  __name(getCompletedSpanDescriptor, "getCompletedSpanDescriptor");
219
+ function hashFarmCacheKey(value) {
220
+ let hash = 2166136261;
221
+ for (let index = 0; index < value.length; index++) {
222
+ hash ^= value.charCodeAt(index);
223
+ hash = Math.imul(hash, 16777619);
224
+ }
225
+ return (hash >>> 0).toString(16).padStart(8, "0");
226
+ }
227
+ __name(hashFarmCacheKey, "hashFarmCacheKey");
213
228
  function toEventAttributes(event) {
214
229
  const attributes = {};
230
+ const redactKey = typeof event.type === "string" && event.type.startsWith("cache.");
215
231
  for (const [key, value] of Object.entries(event)) {
216
232
  if (key === "timestamp" || key === "level" || key === "error" || key === "traceId" || key === "spanId" || key === "traceSampled" || value === void 0) {
217
233
  continue;
218
234
  }
235
+ if (redactKey && key === "key" && typeof value === "string") {
236
+ attributes["farm.key_hash"] = hashFarmCacheKey(value);
237
+ continue;
238
+ }
219
239
  if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
220
240
  attributes[`farm.${key}`] = value;
221
241
  } else if (Array.isArray(value)) {
@@ -235,9 +255,14 @@ function getEventError(event) {
235
255
  return "error" in event ? event.error : void 0;
236
256
  }
237
257
  __name(getEventError, "getEventError");
238
- function recordSpanError(span, error) {
258
+ function recordSpanException(span, error) {
239
259
  const normalized = error instanceof Error ? error : new Error(String(error));
240
260
  span.recordException(normalized);
261
+ return normalized;
262
+ }
263
+ __name(recordSpanException, "recordSpanException");
264
+ function recordSpanError(span, error) {
265
+ const normalized = recordSpanException(span, error);
241
266
  span.setStatus({ code: import_api.SpanStatusCode.ERROR, message: normalized.message });
242
267
  }
243
268
  __name(recordSpanError, "recordSpanError");
package/dist/routes.d.mts CHANGED
@@ -1,14 +1,15 @@
1
- import { F as FarmRouteRuntimeConfig, L as LayoutProps, M as Metadata, b as FarmRouteRuntime, c as FarmRouteRegions, d as FarmRouteMaxDuration, e as FarmAppContext, f as PageProps, g as PluginContextProps, h as RouteModule, P as ParsedRoute } from './client-plugins-BvClItiL.mjs';
1
+ import { F as FarmRouteRuntimeConfig, L as LayoutProps, M as Metadata, b as FarmRouteRuntime, c as FarmRouteRegions, d as FarmRouteMaxDuration, e as FarmAppContext, f as PageProps, g as PluginContextProps, h as RouteModule, P as ParsedRoute } from './client-plugins-B6-07YmP.mjs';
2
2
  import { ComponentType } from 'react';
3
3
  import { RouteDataCacheKey } from './cache.mjs';
4
4
  import { ServerFn } from './server-fn.mjs';
5
5
  import { FarmServerRendererRuntime } from './renderer.mjs';
6
6
  import './lifecycle-De0vQG45.mjs';
7
- import './route-Cq3aObmj.mjs';
7
+ import './route-CvEr4Uc9.mjs';
8
8
  import 'http';
9
9
  import './types-Cc8l9IqS.mjs';
10
10
  import 'db0';
11
11
  import 'unstorage';
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/routes.d.ts CHANGED
@@ -1,14 +1,15 @@
1
- import { F as FarmRouteRuntimeConfig, L as LayoutProps, M as Metadata, b as FarmRouteRuntime, c as FarmRouteRegions, d as FarmRouteMaxDuration, e as FarmAppContext, f as PageProps, g as PluginContextProps, h as RouteModule, P as ParsedRoute } from './client-plugins-B9Sq-iMg.js';
1
+ import { F as FarmRouteRuntimeConfig, L as LayoutProps, M as Metadata, b as FarmRouteRuntime, c as FarmRouteRegions, d as FarmRouteMaxDuration, e as FarmAppContext, f as PageProps, g as PluginContextProps, h as RouteModule, P as ParsedRoute } from './client-plugins-By6MVUX-.js';
2
2
  import { ComponentType } from 'react';
3
3
  import { RouteDataCacheKey } from './cache.js';
4
4
  import { ServerFn } from './server-fn.js';
5
5
  import { FarmServerRendererRuntime } from './renderer.js';
6
6
  import './lifecycle-De0vQG45.js';
7
- import './route-Y8lfz1wF.js';
7
+ import './route-4pd-EVtw.js';
8
8
  import 'http';
9
9
  import './types-Cc8l9IqS.js';
10
10
  import 'db0';
11
11
  import 'unstorage';
12
+ import './integration-api-BT024nuJ.js';
12
13
  import '@farming-labs/orm';
13
14
  import './types-CKwggz9n.js';
14
15
  import '@farming-labs/docs';
package/dist/routes.mjs CHANGED
@@ -19,14 +19,14 @@ import {
19
19
  redirect,
20
20
  routesBuilder,
21
21
  scanProgrammaticPagePaths
22
- } from "./chunk-Q3OX763A.mjs";
22
+ } from "./chunk-LXDASSTE.mjs";
23
23
  import "./chunk-QKVUNGAH.mjs";
24
24
  import "./chunk-XNWHZQ6A.mjs";
25
25
  import "./chunk-SXWF4QRU.mjs";
26
- import "./chunk-AXVJCMVF.mjs";
27
- import "./chunk-RBRLLZL5.mjs";
26
+ import "./chunk-2HDOV47R.mjs";
27
+ import "./chunk-34IAPZBG.mjs";
28
28
  import "./chunk-WZ5QFROO.mjs";
29
- import "./chunk-ZRBCBOEX.mjs";
29
+ import "./chunk-N2FY2QZ7.mjs";
30
30
  import "./chunk-DZU3EKQP.mjs";
31
31
  import "./chunk-CGILA3WO.mjs";
32
32
  export {
@@ -20,6 +20,7 @@ declare class FarmI18nRuntime {
20
20
  hasMessage(locale: string, key: string): boolean;
21
21
  getClientSnapshot(resolution: FarmLocaleResolution): FarmI18nClientSnapshot;
22
22
  private formatMessage;
23
+ private readOwnMessage;
23
24
  private resolveMessage;
24
25
  }
25
26
  declare function createFarmI18nRuntime(config: ResolvedFarmI18nConfig, catalogs?: FarmI18nCatalogs): FarmI18nRuntime;
@@ -20,6 +20,7 @@ declare class FarmI18nRuntime {
20
20
  hasMessage(locale: string, key: string): boolean;
21
21
  getClientSnapshot(resolution: FarmLocaleResolution): FarmI18nClientSnapshot;
22
22
  private formatMessage;
23
+ private readOwnMessage;
23
24
  private resolveMessage;
24
25
  }
25
26
  declare function createFarmI18nRuntime(config: ResolvedFarmI18nConfig, catalogs?: FarmI18nCatalogs): FarmI18nRuntime;