@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,16 +1,32 @@
1
1
  import {
2
- getFarmClientDataCache
3
- } from "./chunk-DLBUAJTK.mjs";
2
+ getFarmClientDataCache,
3
+ trackFarmClientCacheInvalidations
4
+ } from "./chunk-WMJGA32P.mjs";
4
5
  import {
5
6
  isFarmServerQueryResult
6
- } from "./chunk-SCFX4UTD.mjs";
7
+ } from "./chunk-EHTUKVSW.mjs";
7
8
  import {
8
9
  createFarmCacheKey
9
- } from "./chunk-AXVJCMVF.mjs";
10
+ } from "./chunk-2HDOV47R.mjs";
10
11
  import {
11
12
  __name
12
13
  } from "./chunk-CGILA3WO.mjs";
13
14
 
15
+ // src/client-revalidation.ts
16
+ function attachRevalidationListeners(refresh, options = {}) {
17
+ if (typeof window === "undefined") return () => {
18
+ };
19
+ const onFocus = options.refetchOnWindowFocus === false ? void 0 : refresh;
20
+ const onOnline = options.refetchOnReconnect === false ? void 0 : refresh;
21
+ if (onFocus) window.addEventListener("focus", onFocus);
22
+ if (onOnline) window.addEventListener("online", onOnline);
23
+ return () => {
24
+ if (onFocus) window.removeEventListener("focus", onFocus);
25
+ if (onOnline) window.removeEventListener("online", onOnline);
26
+ };
27
+ }
28
+ __name(attachRevalidationListeners, "attachRevalidationListeners");
29
+
14
30
  // src/server-query-runtime.ts
15
31
  var FARM_SERVER_QUERY_CLIENT_STATE = /* @__PURE__ */ Symbol.for("farm.serverQueryClientState");
16
32
  var serverQueryClientGlobal = globalThis;
@@ -18,9 +34,30 @@ var serverQueryClientState = serverQueryClientGlobal[FARM_SERVER_QUERY_CLIENT_ST
18
34
  functionIds: /* @__PURE__ */ new WeakMap(),
19
35
  nextFunctionId: 0,
20
36
  active: [],
21
- latestOwners: /* @__PURE__ */ new Map()
37
+ latestOwners: /* @__PURE__ */ new Map(),
38
+ owners: /* @__PURE__ */ new Set()
22
39
  });
23
40
  serverQueryClientState.latestOwners ?? (serverQueryClientState.latestOwners = /* @__PURE__ */ new Map());
41
+ serverQueryClientState.owners ?? (serverQueryClientState.owners = /* @__PURE__ */ new Set());
42
+ function isServerQueryOwnerSuperseded(owner, key) {
43
+ const cache = getFarmClientDataCache();
44
+ const resolved = cache.resolveKey(key);
45
+ for (const superseded of owner.supersededKeys ?? []) {
46
+ if (cache.resolveKey(superseded) === resolved) return true;
47
+ }
48
+ return false;
49
+ }
50
+ __name(isServerQueryOwnerSuperseded, "isServerQueryOwnerSuperseded");
51
+ function claimServerQueryKey(owner, key) {
52
+ if (isServerQueryOwnerSuperseded(owner, key)) return false;
53
+ const resolved = getFarmClientDataCache().resolveKey(key);
54
+ for (const older of serverQueryClientState.owners) {
55
+ if (older === owner) break;
56
+ older.supersededKeys.add(resolved);
57
+ }
58
+ return true;
59
+ }
60
+ __name(claimServerQueryKey, "claimServerQueryKey");
24
61
  var RAW_SERVER_QUERY_SYMBOL = /* @__PURE__ */ Symbol.for("farm.server-query");
25
62
  function assertNotRawServerQueryInBrowser(query) {
26
63
  if (typeof window === "undefined" || typeof document === "undefined") return;
@@ -54,22 +91,34 @@ function completeFarmServerQueryAction(invocation, value) {
54
91
  if (invocation.provisionalKey) {
55
92
  cache.alias(invocation.provisionalKey, metadata.key);
56
93
  }
94
+ const owner = invocation.owner;
95
+ if (owner && serverQueryClientState.owners.has(owner) && !claimServerQueryKey(owner, metadata.key)) {
96
+ return value.data;
97
+ }
98
+ const invalidated = invocation.owner?.invalidations?.has(
99
+ metadata.key
100
+ );
57
101
  cache.set(metadata.key, {
58
102
  data: value.data,
59
103
  updatedAt: metadata.updatedAt,
60
- staleAt: metadata.staleTime === false ? Number.POSITIVE_INFINITY : metadata.updatedAt + metadata.staleTime,
104
+ staleAt: invalidated ? 0 : metadata.staleTime === false ? Number.POSITIVE_INFINITY : metadata.updatedAt + metadata.staleTime,
61
105
  status: "success",
62
106
  error: null,
63
- fetching: false
107
+ fetching: false,
108
+ persist: metadata.persist === true ? true : void 0
64
109
  });
65
110
  return value.data;
66
111
  }
67
112
  __name(completeFarmServerQueryAction, "completeFarmServerQueryAction");
68
113
  function shouldApplyFarmServerQueryActionResult(invocation) {
69
114
  if (!invocation.provisionalKey || !invocation.owner) return true;
70
- return serverQueryClientState.latestOwners.get(invocation.provisionalKey) === invocation.owner;
115
+ return isCurrentServerQueryOwner(invocation.provisionalKey, invocation.owner);
71
116
  }
72
117
  __name(shouldApplyFarmServerQueryActionResult, "shouldApplyFarmServerQueryActionResult");
118
+ function isCurrentServerQueryOwner(provisionalKey, owner) {
119
+ return serverQueryClientState.latestOwners.get(provisionalKey) === owner && !isServerQueryOwnerSuperseded(owner, provisionalKey);
120
+ }
121
+ __name(isCurrentServerQueryOwner, "isCurrentServerQueryOwner");
73
122
  function createServerQueryCallKey(query, input) {
74
123
  let id = serverQueryClientState.functionIds.get(query);
75
124
  if (!id) {
@@ -85,12 +134,14 @@ async function fetchServerQuery(query, input, options = {}) {
85
134
  const entry = cache.get(provisionalKey);
86
135
  const stale = cache.isStale(provisionalKey);
87
136
  const inflight = cache.getInflight(provisionalKey);
88
- if (inflight && !options.force) return inflight;
89
- if (!options.force && entry && !stale && entry.status !== "error") return entry.data;
90
- if (!options.force && entry && stale && entry.status !== "pending" && entry.status !== "error" && (options.swr ?? true)) {
91
- void executeServerQuery(query, input, provisionalKey, options).catch(() => void 0);
137
+ if (!options.force && entry && stale && (entry.status !== "pending" || entry.updatedAt !== 0) && entry.status !== "error" && (options.swr ?? true)) {
138
+ if (!inflight) {
139
+ void executeServerQuery(query, input, provisionalKey, options).catch(() => void 0);
140
+ }
92
141
  return entry.data;
93
142
  }
143
+ if (inflight && !options.force) return inflight;
144
+ if (!options.force && entry && !stale && entry.status !== "error") return entry.data;
94
145
  return executeServerQuery(query, input, provisionalKey, options);
95
146
  }
96
147
  __name(fetchServerQuery, "fetchServerQuery");
@@ -103,8 +154,13 @@ async function executeServerQuery(query, input, provisionalKey, options) {
103
154
  const cache = getFarmClientDataCache();
104
155
  const inflight = cache.getInflight(provisionalKey);
105
156
  if (inflight && !options.force) return inflight;
106
- const owner = {};
157
+ const owner = {
158
+ invalidations: trackFarmClientCacheInvalidations(cache),
159
+ supersededKeys: /* @__PURE__ */ new Set()
160
+ };
107
161
  serverQueryClientState.latestOwners.set(provisionalKey, owner);
162
+ serverQueryClientState.owners.add(owner);
163
+ claimServerQueryKey(owner, provisionalKey);
108
164
  const previous = cache.get(provisionalKey);
109
165
  cache.set(provisionalKey, {
110
166
  data: previous?.data,
@@ -129,12 +185,12 @@ async function executeServerQuery(query, input, provisionalKey, options) {
129
185
  }
130
186
  const data = await pending;
131
187
  const transported = cache.get(provisionalKey);
132
- if (serverQueryClientState.latestOwners.get(provisionalKey) === owner && (!transported || transported.fetching)) {
188
+ if (isCurrentServerQueryOwner(provisionalKey, owner) && (!transported || transported.fetching)) {
133
189
  const updatedAt = Date.now();
134
190
  cache.set(provisionalKey, {
135
191
  data,
136
192
  updatedAt,
137
- staleAt: options.staleTime === false ? Number.POSITIVE_INFINITY : updatedAt + (options.staleTime ?? 0),
193
+ staleAt: owner.invalidations.has(provisionalKey) ? 0 : options.staleTime === false ? Number.POSITIVE_INFINITY : updatedAt + (options.staleTime ?? 0),
138
194
  status: "success",
139
195
  error: null,
140
196
  fetching: false
@@ -143,7 +199,7 @@ async function executeServerQuery(query, input, provisionalKey, options) {
143
199
  return data;
144
200
  } catch (cause) {
145
201
  const error = normalizeServerQueryError(cause);
146
- if (serverQueryClientState.latestOwners.get(provisionalKey) === owner) {
202
+ if (isCurrentServerQueryOwner(provisionalKey, owner)) {
147
203
  const current = cache.get(provisionalKey);
148
204
  cache.set(provisionalKey, {
149
205
  data: current?.data,
@@ -158,12 +214,17 @@ async function executeServerQuery(query, input, provisionalKey, options) {
158
214
  }
159
215
  throw error;
160
216
  } finally {
217
+ const invalidated = isCurrentServerQueryOwner(provisionalKey, owner) && owner.invalidations.has(provisionalKey);
218
+ owner.invalidations.dispose();
219
+ serverQueryClientState.owners.delete(owner);
220
+ owner.supersededKeys.clear();
161
221
  if (cache.getInflight(provisionalKey) === promise) {
162
222
  cache.deleteInflight(provisionalKey);
163
223
  }
164
224
  if (serverQueryClientState.latestOwners.get(provisionalKey) === owner) {
165
225
  serverQueryClientState.latestOwners.delete(provisionalKey);
166
226
  }
227
+ if (invalidated) cache.invalidate(provisionalKey);
167
228
  }
168
229
  })();
169
230
  cache.setInflight(provisionalKey, promise);
@@ -179,6 +240,7 @@ function normalizeServerQueryError(cause) {
179
240
  __name(normalizeServerQueryError, "normalizeServerQueryError");
180
241
 
181
242
  export {
243
+ attachRevalidationListeners,
182
244
  beginFarmServerQueryAction,
183
245
  completeFarmServerQueryAction,
184
246
  shouldApplyFarmServerQueryActionResult,
@@ -186,4 +248,4 @@ export {
186
248
  fetchServerQuery,
187
249
  prefetchServerQuery
188
250
  };
189
- //# sourceMappingURL=chunk-EXCGBERG.mjs.map
251
+ //# sourceMappingURL=chunk-WD2EBM3I.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client-revalidation.ts","../src/server-query-runtime.ts"],"sourcesContent":["export type FarmRevalidationListenerOptions = {\n refetchOnWindowFocus?: boolean;\n refetchOnReconnect?: boolean;\n};\n\n/**\n * Attach the shared window focus/reconnect revalidation listeners used by every\n * query consumer (React `useServerQuery` and the renderer-neutral\n * `createRendererQuery`). Connectivity-driven refresh behavior must live here\n * so all renderers observe the same triggers.\n *\n * Returns a disposer; a no-op outside the browser.\n */\nexport function attachRevalidationListeners(\n refresh: () => void,\n options: FarmRevalidationListenerOptions = {},\n): () => void {\n if (typeof window === \"undefined\") return () => {};\n\n const onFocus = options.refetchOnWindowFocus === false ? undefined : refresh;\n const onOnline = options.refetchOnReconnect === false ? undefined : refresh;\n\n if (onFocus) window.addEventListener(\"focus\", onFocus);\n if (onOnline) window.addEventListener(\"online\", onOnline);\n return () => {\n if (onFocus) window.removeEventListener(\"focus\", onFocus);\n if (onOnline) window.removeEventListener(\"online\", onOnline);\n };\n}\n","\"use client\";\n\nimport { createFarmCacheKey } from \"./cache\";\nimport { getFarmClientDataCache, trackFarmClientCacheInvalidations } from \"./client-cache\";\nimport type { ServerQuery } from \"./server-query\";\nimport { isFarmServerQueryResult, type FarmServerQueryResult } from \"./server-query-protocol\";\n\nexport type ServerQueryFetchOptions = {\n /** Used only when a non-Farm transport returns plain data. Farm transports use the declaration. */\n staleTime?: number | false;\n /** Return stale data immediately while refreshing it in the background. Default true. */\n swr?: boolean;\n /** Always wait for a new result. */\n force?: boolean;\n};\n\nexport type FarmServerQueryActionInvocation = {\n actionId: string;\n args: readonly unknown[];\n provisionalKey?: string;\n owner?: object;\n};\n\ntype ActiveServerQueryInvocation = {\n provisionalKey: string;\n owner: object;\n};\n\ntype ServerQueryOwner = {\n invalidations: ReturnType<typeof trackFarmClientCacheInvalidations>;\n supersededKeys: Set<string>;\n};\n\ntype ServerQueryClientState = {\n functionIds: WeakMap<Function, number>;\n nextFunctionId: number;\n active: ActiveServerQueryInvocation[];\n latestOwners: Map<string, object>;\n owners: Set<ServerQueryOwner>;\n};\n\nconst FARM_SERVER_QUERY_CLIENT_STATE = Symbol.for(\"farm.serverQueryClientState\");\nconst serverQueryClientGlobal = globalThis as typeof globalThis & {\n [FARM_SERVER_QUERY_CLIENT_STATE]?: ServerQueryClientState;\n};\nconst serverQueryClientState: ServerQueryClientState = (serverQueryClientGlobal[\n FARM_SERVER_QUERY_CLIENT_STATE\n] ??= {\n functionIds: new WeakMap(),\n nextFunctionId: 0,\n active: [],\n latestOwners: new Map(),\n owners: new Set(),\n});\nserverQueryClientState.latestOwners ??= new Map();\nserverQueryClientState.owners ??= new Set();\n\nfunction isServerQueryOwnerSuperseded(owner: ServerQueryOwner, key: string): boolean {\n const cache = getFarmClientDataCache();\n const resolved = cache.resolveKey(key);\n for (const superseded of owner.supersededKeys ?? []) {\n if (cache.resolveKey(superseded) === resolved) return true;\n }\n return false;\n}\n\nfunction claimServerQueryKey(owner: ServerQueryOwner, key: string): boolean {\n if (isServerQueryOwnerSuperseded(owner, key)) return false;\n const resolved = getFarmClientDataCache().resolveKey(key);\n // Set iteration follows request start order, not response timestamps. Record\n // the claim on older live requests so it survives this owner's completion,\n // even when an older reference only learns its canonical key afterward.\n for (const older of serverQueryClientState.owners) {\n if (older === owner) break;\n older.supersededKeys.add(resolved);\n }\n return true;\n}\n\n// Global symbol registry key set on raw server query implementations by\n// createServerQuery. Referenced via Symbol.for instead of importing\n// server-query.ts, which would pull the server handler pipeline into the\n// client bundle.\nconst RAW_SERVER_QUERY_SYMBOL = Symbol.for(\"farm.server-query\");\n\n/**\n * A query reaching the browser should be a transformed server reference. The\n * raw implementation carries the server query symbol; executing it here would\n * run the server handler in the browser (#408). During SSR the raw\n * implementation is expected and runs directly.\n */\nfunction assertNotRawServerQueryInBrowser(query: unknown): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n if (!(query as Record<symbol, unknown> | null)?.[RAW_SERVER_QUERY_SYMBOL]) return;\n throw new Error(\n [\n \"useServerQuery received a raw server query implementation in the browser.\",\n \"Server query handlers run only on the server. Enable the server-function transform (add @farm.js/plugin/rsc and set experimental.serverActions: true in farm.config.ts) so client imports become server references,\",\n \"or call the query from server code / an API route (createAPIClient) instead.\",\n ].join(\"\\n\"),\n );\n}\n\nexport function beginFarmServerQueryAction(\n actionId: string,\n args: readonly unknown[],\n): FarmServerQueryActionInvocation {\n const active = serverQueryClientState.active.at(-1);\n return {\n actionId,\n args,\n provisionalKey: active?.provisionalKey,\n owner: active?.owner,\n };\n}\n\nexport function completeFarmServerQueryAction<TData>(\n invocation: FarmServerQueryActionInvocation,\n value: TData | FarmServerQueryResult<TData>,\n): TData {\n if (!isFarmServerQueryResult(value)) return value as TData;\n\n const cache = getFarmClientDataCache();\n const metadata = value.__farmServerQuery;\n if (!shouldApplyFarmServerQueryActionResult(invocation)) {\n return value.data as TData;\n }\n if (invocation.provisionalKey) {\n cache.alias(invocation.provisionalKey, metadata.key);\n }\n const owner = invocation.owner as ServerQueryOwner | undefined;\n if (\n owner &&\n serverQueryClientState.owners.has(owner) &&\n !claimServerQueryKey(owner, metadata.key)\n ) {\n return value.data as TData;\n }\n const invalidated = (invocation.owner as ServerQueryOwner | undefined)?.invalidations?.has(\n metadata.key,\n );\n\n cache.set(metadata.key, {\n data: value.data,\n updatedAt: metadata.updatedAt,\n staleAt: invalidated\n ? 0\n : metadata.staleTime === false\n ? Number.POSITIVE_INFINITY\n : metadata.updatedAt + metadata.staleTime,\n status: \"success\",\n error: null,\n fetching: false,\n persist: metadata.persist === true ? true : undefined,\n });\n\n return value.data as TData;\n}\n\nexport function shouldApplyFarmServerQueryActionResult(\n invocation: FarmServerQueryActionInvocation,\n): boolean {\n if (!invocation.provisionalKey || !invocation.owner) return true;\n return isCurrentServerQueryOwner(invocation.provisionalKey, invocation.owner);\n}\n\nfunction isCurrentServerQueryOwner(provisionalKey: string, owner: object): boolean {\n return (\n serverQueryClientState.latestOwners.get(provisionalKey) === owner &&\n !isServerQueryOwnerSuperseded(owner as ServerQueryOwner, provisionalKey)\n );\n}\n\nexport function createServerQueryCallKey<TInput, TData>(\n query: ServerQuery<TInput, TData>,\n input: TInput,\n): string {\n let id = serverQueryClientState.functionIds.get(query);\n if (!id) {\n id = ++serverQueryClientState.nextFunctionId;\n serverQueryClientState.functionIds.set(query, id);\n }\n return createFarmCacheKey([\"server-query-call\", id, input]);\n}\n\nexport async function fetchServerQuery<TInput, TData>(\n query: ServerQuery<TInput, TData>,\n input: TInput,\n options: ServerQueryFetchOptions = {},\n): Promise<TData> {\n const cache = getFarmClientDataCache();\n const provisionalKey = createServerQueryCallKey(query, input);\n const entry = cache.get<TData>(provisionalKey);\n const stale = cache.isStale(provisionalKey);\n const inflight = cache.getInflight<TData>(provisionalKey);\n\n if (\n !options.force &&\n entry &&\n stale &&\n (entry.status !== \"pending\" || entry.updatedAt !== 0) &&\n entry.status !== \"error\" &&\n (options.swr ?? true)\n ) {\n // Every SWR reader can use the previous value, including while another\n // reader owns the refresh. Initial pending reads still wait below.\n if (!inflight) {\n void executeServerQuery(query, input, provisionalKey, options).catch(() => undefined);\n }\n return entry.data;\n }\n\n if (inflight && !options.force) return inflight;\n if (!options.force && entry && !stale && entry.status !== \"error\") return entry.data;\n\n return executeServerQuery(query, input, provisionalKey, options);\n}\n\nexport function prefetchServerQuery<TInput, TData>(\n query: ServerQuery<TInput, TData>,\n input: TInput,\n options: Omit<ServerQueryFetchOptions, \"force\"> = {},\n): Promise<TData> {\n return fetchServerQuery(query, input, options);\n}\n\nasync function executeServerQuery<TInput, TData>(\n query: ServerQuery<TInput, TData>,\n input: TInput,\n provisionalKey: string,\n options: ServerQueryFetchOptions,\n): Promise<TData> {\n assertNotRawServerQueryInBrowser(query);\n const cache = getFarmClientDataCache();\n const inflight = cache.getInflight<TData>(provisionalKey);\n if (inflight && !options.force) return inflight;\n\n const owner: ServerQueryOwner = {\n invalidations: trackFarmClientCacheInvalidations(cache),\n supersededKeys: new Set(),\n };\n serverQueryClientState.latestOwners.set(provisionalKey, owner);\n serverQueryClientState.owners.add(owner);\n claimServerQueryKey(owner, provisionalKey);\n\n const previous = cache.get<TData>(provisionalKey);\n cache.set(provisionalKey, {\n data: previous?.data as TData,\n updatedAt: previous?.updatedAt ?? 0,\n staleAt: previous?.staleAt ?? 0,\n gcAt: previous?.gcAt,\n invalidatedAt: previous?.invalidatedAt,\n status: \"pending\",\n error: null,\n fetching: true,\n });\n\n let promise!: Promise<TData>;\n promise = (async () => {\n // Let the promise be assigned and registered before a query implementation\n // can throw synchronously and enter the cleanup path.\n await Promise.resolve();\n try {\n serverQueryClientState.active.push({ provisionalKey, owner });\n let pending: Promise<TData>;\n try {\n pending = query(input);\n } finally {\n serverQueryClientState.active.pop();\n }\n\n const data = await pending;\n const transported = cache.get<TData>(provisionalKey);\n if (\n isCurrentServerQueryOwner(provisionalKey, owner) &&\n (!transported || transported.fetching)\n ) {\n const updatedAt = Date.now();\n cache.set(provisionalKey, {\n data,\n updatedAt,\n staleAt: owner.invalidations.has(provisionalKey)\n ? 0\n : options.staleTime === false\n ? Number.POSITIVE_INFINITY\n : updatedAt + (options.staleTime ?? 0),\n status: \"success\",\n error: null,\n fetching: false,\n });\n }\n return data;\n } catch (cause) {\n const error = normalizeServerQueryError(cause);\n if (isCurrentServerQueryOwner(provisionalKey, owner)) {\n const current = cache.get<TData>(provisionalKey);\n cache.set(provisionalKey, {\n data: current?.data as TData,\n updatedAt: current?.updatedAt ?? 0,\n staleAt: current?.staleAt ?? 0,\n gcAt: current?.gcAt,\n invalidatedAt: current?.invalidatedAt,\n status: \"error\",\n error,\n fetching: false,\n });\n }\n throw error;\n } finally {\n const invalidated =\n isCurrentServerQueryOwner(provisionalKey, owner) && owner.invalidations.has(provisionalKey);\n owner.invalidations.dispose();\n serverQueryClientState.owners.delete(owner);\n owner.supersededKeys.clear();\n if (cache.getInflight(provisionalKey) === promise) {\n cache.deleteInflight(provisionalKey);\n }\n if (serverQueryClientState.latestOwners.get(provisionalKey) === owner) {\n serverQueryClientState.latestOwners.delete(provisionalKey);\n }\n // Notify only after retiring old work: mounted consumers must start a new\n // read, not rejoin the promise whose result has just been invalidated.\n if (invalidated) cache.invalidate(provisionalKey);\n }\n })();\n\n cache.setInflight(provisionalKey, promise);\n return promise;\n}\n\nfunction normalizeServerQueryError(cause: unknown): Error {\n if (cause instanceof Error) return cause;\n const error = new Error(typeof cause === \"string\" ? cause : \"Server query failed\");\n (error as Error & { cause?: unknown }).cause = cause;\n return error;\n}\n"],"mappings":"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","names":[]}
@@ -1,14 +1,39 @@
1
1
  import {
2
2
  createRouteDataCacheKey
3
- } from "./chunk-AXVJCMVF.mjs";
3
+ } from "./chunk-2HDOV47R.mjs";
4
4
  import {
5
5
  subscribeFarmCacheInvalidation
6
- } from "./chunk-RBRLLZL5.mjs";
6
+ } from "./chunk-34IAPZBG.mjs";
7
7
  import {
8
8
  __name
9
9
  } from "./chunk-CGILA3WO.mjs";
10
10
 
11
11
  // src/client-cache.ts
12
+ var invalidationTrackers = /* @__PURE__ */ new WeakMap();
13
+ function trackFarmClientCacheInvalidations(cache) {
14
+ let trackers = invalidationTrackers.get(cache);
15
+ if (!trackers) {
16
+ trackers = /* @__PURE__ */ new Set();
17
+ invalidationTrackers.set(cache, trackers);
18
+ }
19
+ const keys = /* @__PURE__ */ new Set();
20
+ trackers.add(keys);
21
+ return {
22
+ has(key) {
23
+ const resolved = cache.resolveKey(key);
24
+ for (const invalidated of keys) {
25
+ if (cache.resolveKey(invalidated) === resolved) return true;
26
+ }
27
+ return false;
28
+ },
29
+ dispose() {
30
+ if (!trackers.delete(keys)) return;
31
+ keys.clear();
32
+ if (trackers.size === 0) invalidationTrackers.delete(cache);
33
+ }
34
+ };
35
+ }
36
+ __name(trackFarmClientCacheInvalidations, "trackFarmClientCacheInvalidations");
12
37
  var cacheFinalizer = typeof FinalizationRegistry === "function" ? new FinalizationRegistry((unsubscribe) => unsubscribe()) : void 0;
13
38
  function subscribeWeakCache(reference) {
14
39
  const unsubscribe = subscribeFarmCacheInvalidation((key) => {
@@ -24,6 +49,7 @@ function subscribeWeakCache(reference) {
24
49
  return dispose;
25
50
  }
26
51
  __name(subscribeWeakCache, "subscribeWeakCache");
52
+ var DEFAULT_GC_SWEEP_INTERVAL_MS = 3e4;
27
53
  var _FarmClientDataCache = class _FarmClientDataCache {
28
54
  constructor(options = {}) {
29
55
  this.entries = /* @__PURE__ */ new Map();
@@ -31,6 +57,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
31
57
  this.invalidatedAt = /* @__PURE__ */ new Map();
32
58
  this.listeners = /* @__PURE__ */ new Map();
33
59
  this.inflight = /* @__PURE__ */ new Map();
60
+ this.gcSweepIntervalMs = options.gcSweepIntervalMs ?? DEFAULT_GC_SWEEP_INTERVAL_MS;
34
61
  if (options.subscribeToInvalidation !== false) {
35
62
  if (typeof WeakRef === "function") {
36
63
  const reference = new WeakRef(this);
@@ -47,6 +74,10 @@ var _FarmClientDataCache = class _FarmClientDataCache {
47
74
  get size() {
48
75
  return this.entries.size;
49
76
  }
77
+ /** @internal Attach or detach the persistence engine's observation sink. */
78
+ attachPersistence(sink) {
79
+ this.persistence = sink;
80
+ }
50
81
  resolveKey(key) {
51
82
  let resolved = key;
52
83
  const seen = /* @__PURE__ */ new Set();
@@ -62,6 +93,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
62
93
  if (!entry) return void 0;
63
94
  if (entry.gcAt !== void 0 && now >= entry.gcAt) {
64
95
  this.entries.delete(resolved);
96
+ this.persistence?.onDelete(resolved);
65
97
  this.emit(resolved);
66
98
  return void 0;
67
99
  }
@@ -75,6 +107,8 @@ var _FarmClientDataCache = class _FarmClientDataCache {
75
107
  this.invalidatedAt.delete(resolved);
76
108
  }
77
109
  this.entries.set(resolved, nextEntry);
110
+ if (nextEntry.gcAt !== void 0) this.scheduleGcSweep();
111
+ this.persistence?.onSet(resolved, nextEntry);
78
112
  this.emit(resolved);
79
113
  return this;
80
114
  }
@@ -82,6 +116,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
82
116
  const resolved = this.resolveKey(key);
83
117
  const deleted = this.entries.delete(resolved);
84
118
  this.inflight.delete(resolved);
119
+ if (deleted) this.persistence?.onDelete(resolved);
85
120
  this.emit(resolved);
86
121
  return deleted;
87
122
  }
@@ -91,11 +126,16 @@ var _FarmClientDataCache = class _FarmClientDataCache {
91
126
  this.aliases.clear();
92
127
  this.invalidatedAt.clear();
93
128
  this.inflight.clear();
129
+ this.persistence?.onClear();
94
130
  for (const key of keys) this.emit(key);
95
131
  }
96
132
  dispose() {
97
133
  this.unsubscribeInvalidation?.();
98
134
  this.unsubscribeInvalidation = void 0;
135
+ if (this.gcTimer !== void 0) {
136
+ clearTimeout(this.gcTimer);
137
+ this.gcTimer = void 0;
138
+ }
99
139
  this.clear();
100
140
  }
101
141
  isStale(key, now = Date.now()) {
@@ -104,6 +144,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
104
144
  }
105
145
  invalidate(key, now = Date.now()) {
106
146
  const resolved = this.resolveKey(key);
147
+ for (const keys of invalidationTrackers.get(this) ?? []) keys.add(resolved);
107
148
  this.invalidatedAt.set(resolved, now);
108
149
  const entry = this.entries.get(resolved);
109
150
  if (entry) {
@@ -123,8 +164,9 @@ var _FarmClientDataCache = class _FarmClientDataCache {
123
164
  const resolvedInvalidatedAt = this.invalidatedAt.get(resolved);
124
165
  if (aliasEntry && !this.entries.has(resolved)) {
125
166
  this.entries.set(resolved, aliasEntry);
167
+ this.persistence?.onSet(resolved, aliasEntry);
126
168
  }
127
- this.entries.delete(alias);
169
+ if (this.entries.delete(alias)) this.persistence?.onDelete(alias);
128
170
  this.invalidatedAt.delete(alias);
129
171
  const invalidatedAt = [aliasInvalidatedAt, resolvedInvalidatedAt].reduce(
130
172
  (latest, value) => value === void 0 ? latest : latest === void 0 ? value : Math.max(latest, value),
@@ -164,7 +206,9 @@ var _FarmClientDataCache = class _FarmClientDataCache {
164
206
  listeners.add(listener);
165
207
  return () => {
166
208
  listeners.delete(listener);
167
- if (listeners.size === 0) this.listeners.delete(key);
209
+ if (listeners.size === 0 && this.listeners.get(key) === listeners) {
210
+ this.listeners.delete(key);
211
+ }
168
212
  };
169
213
  }
170
214
  getInflight(key) {
@@ -176,6 +220,30 @@ var _FarmClientDataCache = class _FarmClientDataCache {
176
220
  deleteInflight(key) {
177
221
  this.inflight.delete(this.resolveKey(key));
178
222
  }
223
+ scheduleGcSweep() {
224
+ if (this.gcSweepIntervalMs === false || this.gcTimer !== void 0) return;
225
+ const timer = setTimeout(() => {
226
+ this.gcTimer = void 0;
227
+ this.sweepExpiredEntries();
228
+ }, this.gcSweepIntervalMs);
229
+ timer.unref?.();
230
+ this.gcTimer = timer;
231
+ }
232
+ sweepExpiredEntries(now = Date.now()) {
233
+ const watched = /* @__PURE__ */ new Set();
234
+ for (const key of this.listeners.keys()) watched.add(this.resolveKey(key));
235
+ let remaining = false;
236
+ for (const [key, entry] of this.entries) {
237
+ if (entry.gcAt === void 0) continue;
238
+ if (now < entry.gcAt || entry.fetching || this.inflight.has(key) || watched.has(key)) {
239
+ remaining = true;
240
+ continue;
241
+ }
242
+ this.entries.delete(key);
243
+ this.persistence?.onDelete(key);
244
+ }
245
+ if (remaining) this.scheduleGcSweep();
246
+ }
179
247
  emit(key, event) {
180
248
  this.notifyListeners(key, event);
181
249
  for (const [alias, target] of this.aliases) {
@@ -205,8 +273,9 @@ function normalizeFarmClientCacheKey(key) {
205
273
  __name(normalizeFarmClientCacheKey, "normalizeFarmClientCacheKey");
206
274
 
207
275
  export {
276
+ trackFarmClientCacheInvalidations,
208
277
  FarmClientDataCache,
209
278
  getFarmClientDataCache,
210
279
  normalizeFarmClientCacheKey
211
280
  };
212
- //# sourceMappingURL=chunk-DLBUAJTK.mjs.map
281
+ //# sourceMappingURL=chunk-WMJGA32P.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client-cache.ts"],"sourcesContent":["/// <reference lib=\"es2021.weakref\" />\nimport { createRouteDataCacheKey, type RouteDataCacheKey } from \"./cache\";\nimport { subscribeFarmCacheInvalidation } from \"./cache-invalidation\";\n\nexport type FarmClientCacheKey = RouteDataCacheKey;\n\nexport type FarmClientCacheStatus = \"idle\" | \"pending\" | \"success\" | \"error\";\n\nexport type FarmClientCacheEntry<TData = unknown> = {\n data: TData;\n updatedAt: number;\n staleAt: number;\n gcAt?: number;\n invalidatedAt?: number;\n status?: FarmClientCacheStatus;\n error?: Error | null;\n fetching?: boolean;\n /** Marks an entry the persistence layer may write to its adapter. */\n persist?: boolean;\n};\n\n/** @internal Observation seam for the client cache persistence engine. */\nexport type FarmClientCachePersistenceSink = {\n onSet(key: string, entry: FarmClientCacheEntry): void;\n onDelete(key: string): void;\n onClear(): void;\n};\n\ntype FarmClientCacheListener = (event?: \"invalidate\") => void;\n\nconst invalidationTrackers = new WeakMap<FarmClientDataCache, Set<Set<string>>>();\n\n/** Internal request-lifetime tracking, including keys learned only from a response. */\nexport function trackFarmClientCacheInvalidations(cache: FarmClientDataCache) {\n let trackers = invalidationTrackers.get(cache);\n if (!trackers) {\n trackers = new Set();\n invalidationTrackers.set(cache, trackers);\n }\n const keys = new Set<string>();\n trackers.add(keys);\n return {\n has(key: string) {\n const resolved = cache.resolveKey(key);\n for (const invalidated of keys) {\n if (cache.resolveKey(invalidated) === resolved) return true;\n }\n return false;\n },\n dispose() {\n if (!trackers.delete(keys)) return;\n keys.clear();\n if (trackers.size === 0) invalidationTrackers.delete(cache);\n },\n };\n}\n\nconst cacheFinalizer =\n typeof FinalizationRegistry === \"function\"\n ? new FinalizationRegistry<() => void>((unsubscribe) => unsubscribe())\n : undefined;\n\n// This closure must only capture a weak reference, never the cache itself.\nfunction subscribeWeakCache(reference: WeakRef<FarmClientDataCache>): () => void {\n const unsubscribe = subscribeFarmCacheInvalidation((key) => {\n const cache = reference.deref();\n if (cache) cache.invalidate(key);\n else dispose();\n });\n function dispose() {\n unsubscribe();\n cacheFinalizer?.unregister(reference);\n }\n return dispose;\n}\n\nconst DEFAULT_GC_SWEEP_INTERVAL_MS = 30_000;\n\nexport class FarmClientDataCache {\n private entries = new Map<string, FarmClientCacheEntry>();\n private aliases = new Map<string, string>();\n private invalidatedAt = new Map<string, number>();\n private listeners = new Map<string, Set<FarmClientCacheListener>>();\n private inflight = new Map<string, Promise<unknown>>();\n private unsubscribeInvalidation: (() => void) | undefined;\n private gcTimer: ReturnType<typeof setTimeout> | undefined;\n private readonly gcSweepIntervalMs: number | false;\n private persistence: FarmClientCachePersistenceSink | undefined;\n\n constructor(\n options: { subscribeToInvalidation?: boolean; gcSweepIntervalMs?: number | false } = {},\n ) {\n this.gcSweepIntervalMs = options.gcSweepIntervalMs ?? DEFAULT_GC_SWEEP_INTERVAL_MS;\n if (options.subscribeToInvalidation !== false) {\n if (typeof WeakRef === \"function\") {\n const reference = new WeakRef(this);\n const unsubscribe = subscribeWeakCache(reference);\n cacheFinalizer?.register(this, unsubscribe, reference);\n this.unsubscribeInvalidation = unsubscribe;\n } else {\n // Keep invalidation working on older runtimes without weak references.\n this.unsubscribeInvalidation = subscribeFarmCacheInvalidation((key) =>\n this.invalidate(key),\n );\n }\n }\n }\n\n get size(): number {\n return this.entries.size;\n }\n\n /** @internal Attach or detach the persistence engine's observation sink. */\n attachPersistence(sink: FarmClientCachePersistenceSink | undefined): void {\n this.persistence = sink;\n }\n\n resolveKey(key: string): string {\n let resolved = key;\n const seen = new Set<string>();\n\n while (this.aliases.has(resolved) && !seen.has(resolved)) {\n seen.add(resolved);\n resolved = this.aliases.get(resolved)!;\n }\n\n return resolved;\n }\n\n get<TData = unknown>(key: string, now = Date.now()): FarmClientCacheEntry<TData> | undefined {\n const resolved = this.resolveKey(key);\n const entry = this.entries.get(resolved) as FarmClientCacheEntry<TData> | undefined;\n if (!entry) return undefined;\n\n if (entry.gcAt !== undefined && now >= entry.gcAt) {\n this.entries.delete(resolved);\n this.persistence?.onDelete(resolved);\n this.emit(resolved);\n return undefined;\n }\n\n return entry;\n }\n\n set<TData>(key: string, entry: FarmClientCacheEntry<TData>): this {\n const resolved = this.resolveKey(key);\n const invalidatedAt = this.invalidatedAt.get(resolved);\n const nextEntry =\n invalidatedAt !== undefined && invalidatedAt > entry.updatedAt\n ? { ...entry, staleAt: 0, invalidatedAt }\n : { ...entry, invalidatedAt: undefined };\n\n if (invalidatedAt === undefined || entry.updatedAt >= invalidatedAt) {\n this.invalidatedAt.delete(resolved);\n }\n\n this.entries.set(resolved, nextEntry);\n if (nextEntry.gcAt !== undefined) this.scheduleGcSweep();\n this.persistence?.onSet(resolved, nextEntry);\n this.emit(resolved);\n return this;\n }\n\n delete(key: string): boolean {\n const resolved = this.resolveKey(key);\n const deleted = this.entries.delete(resolved);\n this.inflight.delete(resolved);\n if (deleted) this.persistence?.onDelete(resolved);\n this.emit(resolved);\n return deleted;\n }\n\n clear(): void {\n const keys = new Set([...this.entries.keys(), ...this.listeners.keys()]);\n this.entries.clear();\n this.aliases.clear();\n this.invalidatedAt.clear();\n this.inflight.clear();\n this.persistence?.onClear();\n for (const key of keys) this.emit(key);\n }\n\n dispose(): void {\n this.unsubscribeInvalidation?.();\n this.unsubscribeInvalidation = undefined;\n if (this.gcTimer !== undefined) {\n clearTimeout(this.gcTimer);\n this.gcTimer = undefined;\n }\n this.clear();\n }\n\n isStale(key: string, now = Date.now()): boolean {\n const entry = this.get(key, now);\n return !entry || entry.invalidatedAt !== undefined || now >= entry.staleAt;\n }\n\n invalidate(key: string, now = Date.now()): void {\n const resolved = this.resolveKey(key);\n for (const keys of invalidationTrackers.get(this) ?? []) keys.add(resolved);\n this.invalidatedAt.set(resolved, now);\n\n const entry = this.entries.get(resolved);\n if (entry) {\n this.entries.set(resolved, {\n ...entry,\n staleAt: 0,\n invalidatedAt: now,\n });\n }\n\n this.emit(resolved, \"invalidate\");\n }\n\n alias(alias: string, key: string): void {\n const resolved = this.resolveKey(key);\n if (alias === resolved) return;\n\n const aliasEntry = this.entries.get(alias);\n const aliasInvalidatedAt = this.invalidatedAt.get(alias) ?? aliasEntry?.invalidatedAt;\n const resolvedInvalidatedAt = this.invalidatedAt.get(resolved);\n if (aliasEntry && !this.entries.has(resolved)) {\n this.entries.set(resolved, aliasEntry);\n this.persistence?.onSet(resolved, aliasEntry);\n }\n\n if (this.entries.delete(alias)) this.persistence?.onDelete(alias);\n this.invalidatedAt.delete(alias);\n const invalidatedAt = [aliasInvalidatedAt, resolvedInvalidatedAt].reduce<number | undefined>(\n (latest, value) =>\n value === undefined ? latest : latest === undefined ? value : Math.max(latest, value),\n undefined,\n );\n const resolvedEntry = this.entries.get(resolved);\n if (\n invalidatedAt !== undefined &&\n (!resolvedEntry || invalidatedAt > resolvedEntry.updatedAt)\n ) {\n this.invalidatedAt.set(resolved, invalidatedAt);\n if (resolvedEntry) {\n this.entries.set(resolved, {\n ...resolvedEntry,\n staleAt: 0,\n invalidatedAt,\n });\n }\n } else if (invalidatedAt !== undefined) {\n this.invalidatedAt.delete(resolved);\n if (resolvedEntry?.invalidatedAt !== undefined) {\n this.entries.set(resolved, { ...resolvedEntry, invalidatedAt: undefined });\n }\n }\n\n const aliasInflight = this.inflight.get(alias);\n if (aliasInflight && !this.inflight.has(resolved)) {\n this.inflight.set(resolved, aliasInflight);\n }\n this.inflight.delete(alias);\n this.aliases.set(alias, resolved);\n this.emit(alias);\n this.emit(resolved, this.invalidatedAt.has(resolved) ? \"invalidate\" : undefined);\n }\n\n subscribe(key: string, listener: FarmClientCacheListener): () => void {\n let listeners = this.listeners.get(key);\n if (!listeners) {\n listeners = new Set();\n this.listeners.set(key, listeners);\n }\n\n listeners.add(listener);\n return () => {\n listeners!.delete(listener);\n // Only drop the map entry if it still holds this exact set. A repeated or\n // stale unsubscribe (called after the key was drained and resubscribed)\n // must not evict a newer subscriber's live listener set.\n if (listeners!.size === 0 && this.listeners.get(key) === listeners) {\n this.listeners.delete(key);\n }\n };\n }\n\n getInflight<TData>(key: string): Promise<TData> | undefined {\n return this.inflight.get(this.resolveKey(key)) as Promise<TData> | undefined;\n }\n\n setInflight<TData>(key: string, promise: Promise<TData>): void {\n this.inflight.set(this.resolveKey(key), promise);\n }\n\n deleteInflight(key: string): void {\n this.inflight.delete(this.resolveKey(key));\n }\n\n private scheduleGcSweep(): void {\n if (this.gcSweepIntervalMs === false || this.gcTimer !== undefined) return;\n const timer = setTimeout(() => {\n this.gcTimer = undefined;\n this.sweepExpiredEntries();\n }, this.gcSweepIntervalMs);\n // Cache cleanup must never keep a Node.js process (SSR, tests) alive.\n (timer as unknown as { unref?: () => void }).unref?.();\n this.gcTimer = timer;\n }\n\n private sweepExpiredEntries(now = Date.now()): void {\n const watched = new Set<string>();\n for (const key of this.listeners.keys()) watched.add(this.resolveKey(key));\n\n let remaining = false;\n for (const [key, entry] of this.entries) {\n if (entry.gcAt === undefined) continue;\n if (now < entry.gcAt || entry.fetching || this.inflight.has(key) || watched.has(key)) {\n remaining = true;\n continue;\n }\n // Only unwatched entries are swept, so eviction is unobservable: a read\n // of this key would already evict it lazily before returning data.\n this.entries.delete(key);\n this.persistence?.onDelete(key);\n }\n\n if (remaining) this.scheduleGcSweep();\n }\n\n private emit(key: string, event?: \"invalidate\"): void {\n this.notifyListeners(key, event);\n for (const [alias, target] of this.aliases) {\n if (this.resolveKey(target) === key) {\n this.notifyListeners(alias, event);\n }\n }\n }\n\n private notifyListeners(key: string, event?: \"invalidate\"): void {\n for (const listener of this.listeners.get(key) ?? []) {\n listener(event);\n }\n }\n}\n\nconst FARM_CLIENT_DATA_CACHE = Symbol.for(\"farm.clientDataCache\");\nconst clientCacheGlobal = globalThis as typeof globalThis & {\n [FARM_CLIENT_DATA_CACHE]?: FarmClientDataCache;\n};\nconst sharedFarmClientDataCache = (clientCacheGlobal[FARM_CLIENT_DATA_CACHE] ??=\n new FarmClientDataCache());\n\nexport function getFarmClientDataCache(): FarmClientDataCache {\n return sharedFarmClientDataCache;\n}\n\nexport function normalizeFarmClientCacheKey(key: FarmClientCacheKey): string {\n return typeof key === \"string\" ? key : createRouteDataCacheKey(key);\n}\n"],"mappings":"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","names":[]}
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-YKAUAZA4.mjs";
12
12
  import {
13
13
  resolveFarmDevtoolsConfig
14
- } from "./chunk-7MABZJIM.mjs";
14
+ } from "./chunk-7PYVLJ4J.mjs";
15
15
  import {
16
16
  normalizeRouteRules,
17
17
  routeRulesToHeaders,
@@ -45,7 +45,7 @@ import {
45
45
  } from "./chunk-BZAIS65C.mjs";
46
46
  import {
47
47
  resolveServerActionsConfig
48
- } from "./chunk-VV24CC42.mjs";
48
+ } from "./chunk-35NPLKQJ.mjs";
49
49
  import {
50
50
  resolveFarmThemeConfig
51
51
  } from "./chunk-H53KVQUU.mjs";
@@ -276,7 +276,9 @@ function resolveDeployConfig(config, overrides = {}) {
276
276
  }
277
277
  }
278
278
  }
279
- const preset = overrides.preset || deploy.preset || config.preset || getPresetForDeployTarget(target) || "node-server";
279
+ const configuredPreset = deploy.preset || config.preset;
280
+ const overrideTargetPreset = overrideTarget && getDeployTargetForPreset(configuredPreset) !== overrideTarget ? getPresetForDeployTarget(overrideTarget) : void 0;
281
+ const preset = overrides.preset || overrideTargetPreset || configuredPreset || getPresetForDeployTarget(target) || "node-server";
280
282
  const resolvedTarget = target || getDeployTargetForPreset(preset);
281
283
  if (detectedTarget && resolvedTarget !== detectedTarget) {
282
284
  const mismatchKey = `mismatch:${resolvedTarget}:${detectedTarget}`;
@@ -634,6 +636,7 @@ async function resolveConfig(userConfig, mode) {
634
636
  serverComponents: false,
635
637
  serverActions: false,
636
638
  isolatedClientHydration: "off",
639
+ ppr: false,
637
640
  ...userConfig.experimental
638
641
  },
639
642
  plugins: [...resolveIntegrationPlugins(integrations), ...userConfig.plugins || []],
@@ -732,4 +735,4 @@ export {
732
735
  resolveConfig,
733
736
  loadConfig
734
737
  };
735
- //# sourceMappingURL=chunk-TKQCJMY7.mjs.map
738
+ //# sourceMappingURL=chunk-X4SFHKFH.mjs.map