@farm.js/core 0.1.48 → 0.1.50

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 (322) hide show
  1. package/dist/{agent-mcp-DAjB8Eyu.d.ts → agent-mcp-9BMbRgg_.d.ts} +1 -1
  2. package/dist/{agent-mcp-CXN3g0eX.d.mts → agent-mcp-CIMH324y.d.mts} +1 -1
  3. package/dist/agent-runtime.cjs +3 -3
  4. package/dist/agent-runtime.d.mts +6 -6
  5. package/dist/agent-runtime.d.ts +6 -6
  6. package/dist/agent-runtime.mjs +2 -2
  7. package/dist/analyzer-CN7C74WX.cjs +1066 -0
  8. package/dist/analyzer-DDW34OMC.mjs +1066 -0
  9. package/dist/api/client.d.mts +0 -1
  10. package/dist/api/client.d.ts +0 -1
  11. package/dist/api/route-manager.cjs +5 -5
  12. package/dist/api/route-manager.d.mts +10 -10
  13. package/dist/api/route-manager.d.ts +10 -10
  14. package/dist/api/route-manager.mjs +4 -4
  15. package/dist/api/runtime.cjs +3 -3
  16. package/dist/api/runtime.d.mts +7 -7
  17. package/dist/api/runtime.d.ts +7 -7
  18. package/dist/api/runtime.mjs +2 -2
  19. package/dist/api.cjs +6 -6
  20. package/dist/api.d.mts +10 -10
  21. package/dist/api.d.ts +10 -10
  22. package/dist/api.mjs +5 -5
  23. package/dist/{app-VK9sHDn5.d.ts → app-BWibTHVT.d.ts} +7 -7
  24. package/dist/{app-DytgRPjJ.d.mts → app-DVJ13FPA.d.mts} +7 -7
  25. package/dist/{app-manifest-DPgW5ke5.d.mts → app-manifest-CQDJOKL2.d.mts} +1 -1
  26. package/dist/{app-manifest-BUu7YGAx.d.ts → app-manifest-D0kaXdwu.d.ts} +1 -1
  27. package/dist/app-markdown.d.mts +7 -7
  28. package/dist/app-markdown.d.ts +7 -7
  29. package/dist/cache.d.mts +4 -3
  30. package/dist/cache.d.ts +4 -3
  31. package/dist/{chunk-VJXLUTBM.mjs → chunk-2DEPNLXK.mjs} +7 -7
  32. package/dist/chunk-2G63BIRL.mjs +227 -0
  33. package/dist/chunk-2GLQSIZD.mjs +55 -0
  34. package/dist/{chunk-HRLYO2XJ.mjs → chunk-2VCC3GVC.mjs} +1 -1
  35. package/dist/chunk-3ATXWZPH.cjs +227 -0
  36. package/dist/{chunk-YSPMY4B7.cjs → chunk-474FO3UE.cjs} +233 -157
  37. package/dist/{chunk-QNQEK3OF.cjs → chunk-4T25YCZ5.cjs} +14 -14
  38. package/dist/{chunk-ATHPRVP2.mjs → chunk-5V4KZOZO.mjs} +1 -1
  39. package/dist/{chunk-FGJQS4EC.cjs → chunk-6QA2SXVH.cjs} +2 -2
  40. package/dist/{chunk-XLYXG73A.mjs → chunk-75WWOZ5C.mjs} +22 -0
  41. package/dist/{chunk-QFQDRJKJ.mjs → chunk-76R5GJER.mjs} +2 -2
  42. package/dist/{chunk-NG44F7AH.mjs → chunk-7ONZDKVY.mjs} +2 -2
  43. package/dist/{chunk-MZZA6ZQV.mjs → chunk-7PZVXMWG.mjs} +4 -4
  44. package/dist/{chunk-4IICUBQX.cjs → chunk-A5BJKSZE.cjs} +2 -2
  45. package/dist/{chunk-TTYXOAB7.mjs → chunk-ANHZ6SUL.mjs} +1 -1
  46. package/dist/{chunk-ZBS3GOQZ.cjs → chunk-AQLHD6HZ.cjs} +35 -61
  47. package/dist/{chunk-Q2ZKQ6GD.cjs → chunk-B5S2JS6M.cjs} +127 -125
  48. package/dist/{chunk-AXRNEVCS.cjs → chunk-B6PREBN6.cjs} +8 -8
  49. package/dist/{chunk-JOHXK4BB.mjs → chunk-BW6SCVYX.mjs} +1 -1
  50. package/dist/{chunk-LZBM35DH.mjs → chunk-C73RIAEF.mjs} +4 -4
  51. package/dist/chunk-CGCJ2TJU.cjs +55 -0
  52. package/dist/{chunk-UYQOIPXE.mjs → chunk-CPXDDWGL.mjs} +1 -1
  53. package/dist/{chunk-JPAVNDZH.cjs → chunk-CY7H5KS4.cjs} +25 -25
  54. package/dist/{chunk-4S7M63WX.cjs → chunk-DGOLAZLV.cjs} +22 -1
  55. package/dist/{chunk-73XBJRZW.cjs → chunk-E2BMCNMJ.cjs} +2 -2
  56. package/dist/{chunk-WUEDTW6E.cjs → chunk-F5LERVY3.cjs} +23 -5
  57. package/dist/{chunk-A7DK663W.cjs → chunk-FACTMUPI.cjs} +27 -27
  58. package/dist/chunk-G2KTRMWA.mjs +40 -0
  59. package/dist/{chunk-C6U66WWF.mjs → chunk-GFT5AHAT.mjs} +13 -0
  60. package/dist/{chunk-ZGS3ZDF7.cjs → chunk-GOOK2J2W.cjs} +7 -7
  61. package/dist/{chunk-NW2BKDVT.mjs → chunk-HHFMECFO.mjs} +1 -1
  62. package/dist/{chunk-6M3HXUBQ.mjs → chunk-HWCHIBJZ.mjs} +21 -3
  63. package/dist/{chunk-HUL4LTC6.cjs → chunk-HYN3LLG7.cjs} +63 -20
  64. package/dist/{chunk-HELQXYVI.cjs → chunk-I2DQGS56.cjs} +11 -9
  65. package/dist/{chunk-SSNN55Q6.cjs → chunk-IQXGHGZF.cjs} +5 -5
  66. package/dist/{chunk-ZSIGEHSE.cjs → chunk-IUBDMDZZ.cjs} +21 -180
  67. package/dist/{chunk-TQWGOQ7O.mjs → chunk-IWJKJDNW.mjs} +116 -40
  68. package/dist/{chunk-NRFUVDTH.mjs → chunk-JJOWY3XD.mjs} +2 -2
  69. package/dist/{chunk-6XFGJBYX.cjs → chunk-JYNNIGQO.cjs} +16 -7
  70. package/dist/{chunk-XO6WL6NL.mjs → chunk-KGP76FSV.mjs} +1 -1
  71. package/dist/{chunk-GXSMF7UR.mjs → chunk-KO2NWUKN.mjs} +1 -1
  72. package/dist/{chunk-VDLF2DJA.cjs → chunk-KZH6YLND.cjs} +375 -162
  73. package/dist/{chunk-5566GNEG.cjs → chunk-LIFUPCXW.cjs} +13 -0
  74. package/dist/{chunk-I2SWKWO7.mjs → chunk-LJDIFIJ2.mjs} +1 -1
  75. package/dist/{chunk-KZT2VHRQ.cjs → chunk-LYWAGXXW.cjs} +11 -11
  76. package/dist/{chunk-N6SIQJEJ.mjs → chunk-M7LKA632.mjs} +54 -11
  77. package/dist/{chunk-6LH33DLL.cjs → chunk-NJVFPJ2Y.cjs} +2 -2
  78. package/dist/{chunk-JWP56HCP.mjs → chunk-OD6WM3I7.mjs} +2 -2
  79. package/dist/{chunk-MJ6IC4K2.mjs → chunk-OTOOJIUB.mjs} +1 -1
  80. package/dist/{chunk-TFA6BUAE.cjs → chunk-OY5XDG24.cjs} +4 -4
  81. package/dist/{chunk-R2SEZEBC.cjs → chunk-OYNNA4DD.cjs} +4 -4
  82. package/dist/{chunk-GBPDSUFE.mjs → chunk-OZK2DS44.mjs} +1 -1
  83. package/dist/chunk-QXJADAQB.cjs +40 -0
  84. package/dist/{chunk-JLS6ZLFM.cjs → chunk-RHOR2J6V.cjs} +1 -1
  85. package/dist/{chunk-YQGZLCT4.cjs → chunk-RWT2BTJT.cjs} +6 -6
  86. package/dist/{chunk-3HBFI373.cjs → chunk-S5AQ7CAC.cjs} +14 -14
  87. package/dist/{chunk-HNAUK3SC.mjs → chunk-SHJJM6OG.mjs} +40 -199
  88. package/dist/{chunk-LL7TDMOM.mjs → chunk-SMUW7UST.mjs} +33 -59
  89. package/dist/{chunk-VCFBQFOV.mjs → chunk-SN5VSO3Q.mjs} +9 -7
  90. package/dist/{chunk-DM3TFCC2.cjs → chunk-SUV6YO4Q.cjs} +5 -5
  91. package/dist/{chunk-JUMPFVMK.mjs → chunk-TUOO6IK3.mjs} +9 -0
  92. package/dist/chunk-UB7RVEMX.mjs +73 -0
  93. package/dist/{chunk-CDTIXBKN.mjs → chunk-UN6N623E.mjs} +2 -2
  94. package/dist/{chunk-BEXYFR2R.cjs → chunk-UY6HS5PF.cjs} +2 -2
  95. package/dist/{chunk-HAH4FBTA.mjs → chunk-VAHBCI6X.mjs} +1 -1
  96. package/dist/{chunk-C2R5RVLA.cjs → chunk-VCKGOXFI.cjs} +73 -1
  97. package/dist/{chunk-N25RPPO5.cjs → chunk-WAPQWAE6.cjs} +10 -10
  98. package/dist/{chunk-NE33FRQ5.mjs → chunk-WVBUXNBX.mjs} +274 -61
  99. package/dist/{chunk-ALD2WMLA.mjs → chunk-WXHDVXJE.mjs} +2 -2
  100. package/dist/{chunk-EVCQX243.cjs → chunk-X2EL3BLH.cjs} +2 -2
  101. package/dist/{chunk-EA5PMJDU.mjs → chunk-X3HOVNHI.mjs} +1 -1
  102. package/dist/{chunk-XXB37YET.cjs → chunk-XLRLSTJ6.cjs} +7 -7
  103. package/dist/{chunk-DRFADSKY.mjs → chunk-XXXRRVY6.mjs} +4 -4
  104. package/dist/{chunk-EXHEPWFJ.cjs → chunk-YAXOEAND.cjs} +10 -10
  105. package/dist/{chunk-PEHL3IZL.cjs → chunk-YB44NKC2.cjs} +2 -2
  106. package/dist/chunk-YKHRCY4T.cjs +73 -0
  107. package/dist/{chunk-NIPKC4DA.mjs → chunk-ZIBIE7AH.mjs} +72 -0
  108. package/dist/{chunk-N7SPZJLY.mjs → chunk-ZLOQQ2UF.mjs} +33 -31
  109. package/dist/client/lifecycle.d.mts +1 -1
  110. package/dist/client/lifecycle.d.ts +1 -1
  111. package/dist/{client-plugins-DqjCsKMN.d.ts → client-plugins-BPfltM5m.d.ts} +19 -10
  112. package/dist/{client-plugins-BlEzV5FO.d.mts → client-plugins-D4RO59f0.d.mts} +19 -10
  113. package/dist/client-plugins.d.mts +6 -6
  114. package/dist/client-plugins.d.ts +6 -6
  115. package/dist/client.cjs +11 -8
  116. package/dist/client.d.mts +11 -10
  117. package/dist/client.d.ts +11 -10
  118. package/dist/client.mjs +12 -9
  119. package/dist/client.react-server.mjs +1 -1
  120. package/dist/config-CnhyvvmT.d.mts +188 -0
  121. package/dist/config-CnhyvvmT.d.ts +188 -0
  122. package/dist/config.d.mts +6 -6
  123. package/dist/config.d.ts +6 -6
  124. package/dist/desktop.d.mts +7 -7
  125. package/dist/desktop.d.ts +7 -7
  126. package/dist/{dev-guard-MPZUJFIV.mjs → dev-guard-4PFQNXQX.mjs} +4 -2
  127. package/dist/{dev-guard-4NQ3LFO5.cjs → dev-guard-YLO5DE3H.cjs} +7 -5
  128. package/dist/{devtools-A37WWJZL.cjs → devtools-N5XTOECL.cjs} +8 -8
  129. package/dist/{devtools-BLKHPY3C.mjs → devtools-STG7HPRV.mjs} +7 -7
  130. package/dist/docs.cjs +10 -10
  131. package/dist/docs.d.mts +7 -7
  132. package/dist/docs.d.ts +7 -7
  133. package/dist/docs.mjs +9 -9
  134. package/dist/environment/vite.d.mts +1 -1
  135. package/dist/environment/vite.d.ts +1 -1
  136. package/dist/generate-route-types-DQP0cUzk.d.ts +33 -0
  137. package/dist/generate-route-types-TF5Wwtvz.d.mts +33 -0
  138. package/dist/i18n/client.d.mts +2 -2
  139. package/dist/i18n/client.d.ts +2 -2
  140. package/dist/i18n/index.d.mts +3 -3
  141. package/dist/i18n/index.d.ts +3 -3
  142. package/dist/i18n/server.d.mts +5 -5
  143. package/dist/i18n/server.d.ts +5 -5
  144. package/dist/image/server.cjs +3 -3
  145. package/dist/image/server.mjs +2 -2
  146. package/dist/image/sharp.cjs +10 -10
  147. package/dist/image/sharp.mjs +2 -2
  148. package/dist/{index-CMigAr9f.d.mts → index-C-N3Pwg-.d.ts} +2 -2
  149. package/dist/{index-MocnSP3a.d.ts → index-D3l4tREW.d.ts} +2 -2
  150. package/dist/{index-Cl3akY5U.d.mts → index-DPUAPho_.d.mts} +2 -2
  151. package/dist/{index-n3hjOvVC.d.ts → index-k8o8eUOd.d.mts} +2 -2
  152. package/dist/index.cjs +73 -66
  153. package/dist/index.d.mts +29 -45
  154. package/dist/index.d.ts +29 -45
  155. package/dist/index.mjs +78 -71
  156. package/dist/integrations.cjs +3 -3
  157. package/dist/integrations.d.mts +6 -6
  158. package/dist/integrations.d.ts +6 -6
  159. package/dist/integrations.mjs +2 -2
  160. package/dist/internal/app-markdown-runtime.d.mts +7 -7
  161. package/dist/internal/app-markdown-runtime.d.ts +7 -7
  162. package/dist/internal/build-runtime.cjs +36 -32
  163. package/dist/internal/build-runtime.d.mts +9 -9
  164. package/dist/internal/build-runtime.d.ts +9 -9
  165. package/dist/internal/build-runtime.mjs +35 -31
  166. package/dist/internal/cli-runtime.cjs +16 -15
  167. package/dist/internal/cli-runtime.mjs +16 -15
  168. package/dist/internal/client-error-overlay.cjs +4 -4
  169. package/dist/internal/client-error-overlay.mjs +1 -1
  170. package/dist/internal/client-runtime.cjs +19 -2
  171. package/dist/internal/client-runtime.d.mts +45 -3
  172. package/dist/internal/client-runtime.d.ts +45 -3
  173. package/dist/internal/client-runtime.mjs +19 -2
  174. package/dist/internal/compression-runtime.d.mts +6 -6
  175. package/dist/internal/compression-runtime.d.ts +6 -6
  176. package/dist/internal/config-runtime.cjs +17 -10
  177. package/dist/internal/config-runtime.d.mts +259 -18
  178. package/dist/internal/config-runtime.d.ts +259 -18
  179. package/dist/internal/config-runtime.mjs +15 -8
  180. package/dist/internal/desktop-guard.cjs +2 -2
  181. package/dist/internal/desktop-guard.d.mts +7 -0
  182. package/dist/internal/desktop-guard.d.ts +7 -0
  183. package/dist/internal/desktop-guard.mjs +1 -1
  184. package/dist/internal/form-actions.cjs +4 -4
  185. package/dist/internal/form-actions.mjs +3 -3
  186. package/dist/internal/infra-analytics-runtime.cjs +6 -6
  187. package/dist/internal/infra-analytics-runtime.mjs +4 -4
  188. package/dist/internal/islands-runtime.cjs +4 -1
  189. package/dist/internal/islands-runtime.d.mts +9 -12
  190. package/dist/internal/islands-runtime.d.ts +9 -12
  191. package/dist/internal/islands-runtime.mjs +5 -2
  192. package/dist/internal/metadata-image-runtime.cjs +3 -3
  193. package/dist/internal/metadata-image-runtime.mjs +2 -2
  194. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  195. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  196. package/dist/internal/production-runtime.cjs +13 -13
  197. package/dist/internal/production-runtime.d.mts +19 -19
  198. package/dist/internal/production-runtime.d.ts +19 -19
  199. package/dist/internal/production-runtime.mjs +15 -15
  200. package/dist/{layers-D9fbe-rz.d.ts → layers-CcS42OGR.d.mts} +1 -1
  201. package/dist/{layers-D9fbe-rz.d.mts → layers-CcS42OGR.d.ts} +1 -1
  202. package/dist/{lifecycle-DK06VuKP.d.ts → lifecycle-C2aLBOwu.d.mts} +1 -1
  203. package/dist/{lifecycle-DK06VuKP.d.mts → lifecycle-C2aLBOwu.d.ts} +1 -1
  204. package/dist/markdown.d.mts +6 -6
  205. package/dist/markdown.d.ts +6 -6
  206. package/dist/middleware.cjs +7 -7
  207. package/dist/middleware.d.mts +8 -8
  208. package/dist/middleware.d.ts +8 -8
  209. package/dist/middleware.mjs +6 -6
  210. package/dist/mobile.cjs +9 -0
  211. package/dist/mobile.d.mts +67 -0
  212. package/dist/mobile.d.ts +67 -0
  213. package/dist/mobile.mjs +9 -0
  214. package/dist/navigation-delegate-8xg3Zvp4.d.ts +29 -0
  215. package/dist/navigation-delegate-ji6elCKy.d.mts +29 -0
  216. package/dist/navigation.cjs +5 -5
  217. package/dist/navigation.d.mts +9 -9
  218. package/dist/navigation.d.ts +9 -9
  219. package/dist/navigation.mjs +4 -4
  220. package/dist/{nitro-UT2J5A5D.mjs → nitro-2Q5NVY7L.mjs} +2 -2
  221. package/dist/{nitro-BIXIKJZS.cjs → nitro-YPSZBYDK.cjs} +3 -3
  222. package/dist/platform.cjs +2 -1
  223. package/dist/platform.d.mts +4 -3
  224. package/dist/platform.d.ts +4 -3
  225. package/dist/platform.mjs +2 -1
  226. package/dist/{plugin-4KYXV7BB.mjs → plugin-53SY5YBS.mjs} +1 -1
  227. package/dist/{plugin-WBANOZQM.cjs → plugin-HZIBL3DW.cjs} +2 -2
  228. package/dist/plugin.cjs +31 -29
  229. package/dist/plugin.d.mts +13 -8
  230. package/dist/plugin.d.ts +13 -8
  231. package/dist/plugin.mjs +30 -28
  232. package/dist/{production-runtime-bWZJMcQb.d.mts → production-runtime-DXnQQkQf.d.mts} +3 -3
  233. package/dist/{production-runtime-YVDGYWBG.d.ts → production-runtime-TdKaYRj0.d.ts} +3 -3
  234. package/dist/production-vite-BQFAlG7n.d.mts +13 -0
  235. package/dist/production-vite-BQFAlG7n.d.ts +13 -0
  236. package/dist/{programmatic-routes-client-DviwGeAv.d.ts → programmatic-routes-client-BwiTndEC.d.ts} +2 -2
  237. package/dist/{programmatic-routes-client-BFKOTEXN.d.mts → programmatic-routes-client-Dh1SDLSM.d.mts} +2 -2
  238. package/dist/query/client.cjs +6 -6
  239. package/dist/query/client.mjs +2 -2
  240. package/dist/{render-plan-DqWXo3-B.d.ts → render-plan-BPbwRbuN.d.ts} +1 -1
  241. package/dist/{render-plan-CS8l0zaK.d.mts → render-plan-BvCGXF6K.d.mts} +1 -1
  242. package/dist/renderer-client.cjs +9 -6
  243. package/dist/renderer-client.d.mts +9 -8
  244. package/dist/renderer-client.d.ts +9 -8
  245. package/dist/renderer-client.mjs +6 -3
  246. package/dist/{request-CBrHpaCC.d.ts → request-B8PGTZNR.d.ts} +1 -1
  247. package/dist/{request-D4XqmnJF.d.mts → request-C_xTkJib.d.mts} +1 -1
  248. package/dist/request.d.mts +7 -7
  249. package/dist/request.d.ts +7 -7
  250. package/dist/{resolver-DC57A4vz.d.ts → resolver-CJ-D9nP-.d.ts} +1 -1
  251. package/dist/{resolver-C2G-3Tm6.d.mts → resolver-TDyZKgKI.d.mts} +1 -1
  252. package/dist/{route-rendering-3pRPtyO2.d.mts → route-rendering-DlddURL1.d.mts} +1 -1
  253. package/dist/{route-rendering-Bltnu8a3.d.ts → route-rendering-RNtcj607.d.ts} +1 -1
  254. package/dist/{router-BFSmKGtI.d.mts → router-B97eB0Mq.d.mts} +1 -1
  255. package/dist/{router-DDT7bkg7.d.ts → router-qUVaoEN8.d.ts} +1 -1
  256. package/dist/routes-8PT9cl60.d.ts +121 -0
  257. package/dist/routes-kEUsXHx3.d.mts +121 -0
  258. package/dist/routes.d.mts +6 -6
  259. package/dist/routes.d.ts +6 -6
  260. package/dist/{rsc-pipeline-4KOITP64.cjs → rsc-pipeline-L4XOZ2TE.cjs} +13 -10
  261. package/dist/{rsc-pipeline-ULFIB3UT.mjs → rsc-pipeline-T3775JUA.mjs} +12 -9
  262. package/dist/runtime-BIBGJO7V.cjs +1005 -0
  263. package/dist/{runtime-B9HmxiZc.d.ts → runtime-C4CmlOOh.d.ts} +2 -2
  264. package/dist/{runtime-C6yG64je.d.ts → runtime-C8GUnNeP.d.ts} +1 -1
  265. package/dist/{runtime-Cpylaypt.d.mts → runtime-CaDswfWi.d.mts} +1 -1
  266. package/dist/{runtime-CCxTmGuf.d.mts → runtime-CihDZ2Rn.d.mts} +2 -2
  267. package/dist/runtime-HRSFC4ZC.mjs +1005 -0
  268. package/dist/{schema-dev-notice-O3I5HLXK.mjs → schema-dev-notice-LZ5NXGLN.mjs} +2 -2
  269. package/dist/{schema-dev-notice-Z73J3NJ6.cjs → schema-dev-notice-XV7GZ3QJ.cjs} +4 -4
  270. package/dist/server-action-security.cjs +3 -3
  271. package/dist/server-action-security.mjs +2 -2
  272. package/dist/server-fn-client.d.mts +0 -1
  273. package/dist/server-fn-client.d.ts +0 -1
  274. package/dist/server-fn.cjs +4 -4
  275. package/dist/server-fn.d.mts +0 -1
  276. package/dist/server-fn.d.ts +0 -1
  277. package/dist/server-fn.mjs +3 -3
  278. package/dist/server-plugins.cjs +1 -1
  279. package/dist/server-plugins.d.mts +7 -7
  280. package/dist/server-plugins.d.ts +7 -7
  281. package/dist/server-plugins.mjs +1 -1
  282. package/dist/server-query-client.d.mts +0 -1
  283. package/dist/server-query-client.d.ts +0 -1
  284. package/dist/server-query.cjs +5 -5
  285. package/dist/server-query.d.mts +0 -1
  286. package/dist/server-query.d.ts +0 -1
  287. package/dist/server-query.mjs +4 -4
  288. package/dist/server.cjs +89 -66
  289. package/dist/server.d.mts +22 -17
  290. package/dist/server.d.ts +22 -17
  291. package/dist/server.mjs +64 -41
  292. package/dist/{spa-router-CkTPnA4L.d.mts → spa-router-Dlv5ofg0.d.mts} +4 -4
  293. package/dist/{spa-router-CKuS81mi.d.ts → spa-router-qapSboKz.d.ts} +4 -4
  294. package/dist/testing.cjs +7 -7
  295. package/dist/testing.d.mts +6 -6
  296. package/dist/testing.d.ts +6 -6
  297. package/dist/testing.mjs +5 -5
  298. package/dist/{types--Wh02r5_.d.mts → types-C41ePjvP.d.mts} +1 -1
  299. package/dist/{types--Wh02r5_.d.ts → types-C41ePjvP.d.ts} +1 -1
  300. package/dist/{utils-C0ORLYXc.d.ts → utils-A-cYF81u.d.ts} +1 -1
  301. package/dist/{utils-IA9wVkef.d.mts → utils-DyvlSxFk.d.mts} +1 -1
  302. package/dist/version.cjs +2 -2
  303. package/dist/version.mjs +1 -1
  304. package/dist/vite.cjs +31 -29
  305. package/dist/vite.d.mts +9 -9
  306. package/dist/vite.d.ts +9 -9
  307. package/dist/vite.mjs +30 -28
  308. package/dist/{workflows-Df1C_7OG.d.mts → workflows-CRMzQZ3k.d.mts} +2 -1
  309. package/dist/{workflows-Df1C_7OG.d.ts → workflows-CRMzQZ3k.d.ts} +2 -1
  310. package/dist/workflows.cjs +3 -3
  311. package/dist/workflows.d.mts +1 -1
  312. package/dist/workflows.d.ts +1 -1
  313. package/dist/workflows.mjs +2 -2
  314. package/package.json +10 -2
  315. package/dist/cache-invalidation-BD0z_lfu.d.mts +0 -4
  316. package/dist/cache-invalidation-BD0z_lfu.d.ts +0 -4
  317. package/dist/chunk-45EUIICW.mjs +0 -15
  318. package/dist/chunk-V7KTQR4C.cjs +0 -15
  319. package/dist/{chunk-BR5FSKZ5.cjs → chunk-EQWWOQTK.cjs} +0 -0
  320. package/dist/{chunk-5OJVKXFV.cjs → chunk-N7JQXQAV.cjs} +2 -2
  321. package/dist/{chunk-VR4SEDEM.mjs → chunk-VOZ5DI7D.mjs} +0 -0
  322. package/dist/{chunk-72KABRWN.mjs → chunk-WSDKXV4E.mjs} +4 -4
@@ -9,7 +9,7 @@ var _chunkKBGZ5FD6cjs = require('./chunk-KBGZ5FD6.cjs');
9
9
  var _chunkP2355C6Ecjs = require('./chunk-P2355C6E.cjs');
10
10
 
11
11
 
12
- var _chunkEXHEPWFJcjs = require('./chunk-EXHEPWFJ.cjs');
12
+ var _chunkYAXOEANDcjs = require('./chunk-YAXOEAND.cjs');
13
13
 
14
14
 
15
15
  var _chunkJZMZKABScjs = require('./chunk-JZMZKABS.cjs');
@@ -23,7 +23,7 @@ var _chunkSBDWCDS6cjs = require('./chunk-SBDWCDS6.cjs');
23
23
 
24
24
 
25
25
 
26
- var _chunkR2SEZEBCcjs = require('./chunk-R2SEZEBC.cjs');
26
+ var _chunkOYNNA4DDcjs = require('./chunk-OYNNA4DD.cjs');
27
27
 
28
28
 
29
29
  var _chunkE7QOEV5Zcjs = require('./chunk-E7QOEV5Z.cjs');
@@ -32,7 +32,7 @@ var _chunkE7QOEV5Zcjs = require('./chunk-E7QOEV5Z.cjs');
32
32
  var _chunkY3WG64CPcjs = require('./chunk-Y3WG64CP.cjs');
33
33
 
34
34
 
35
- var _chunk6XFGJBYXcjs = require('./chunk-6XFGJBYX.cjs');
35
+ var _chunkJYNNIGQOcjs = require('./chunk-JYNNIGQO.cjs');
36
36
 
37
37
 
38
38
 
@@ -44,7 +44,7 @@ var _chunkZ5MZDFX4cjs = require('./chunk-Z5MZDFX4.cjs');
44
44
 
45
45
 
46
46
 
47
- var _chunk5566GNEGcjs = require('./chunk-5566GNEG.cjs');
47
+ var _chunkLIFUPCXWcjs = require('./chunk-LIFUPCXW.cjs');
48
48
 
49
49
 
50
50
  var _chunkHNAISJFDcjs = require('./chunk-HNAISJFD.cjs');
@@ -60,7 +60,7 @@ function farmApiPlugin(options = {}) {
60
60
  const srcDir = _nullishCoalesce(options.srcDir, () => ( "src"));
61
61
  const apiDirFromRoot = _nullishCoalesce(options.apiDir, () => ( _path2.default.join(srcDir, "api")));
62
62
  const debug = _nullishCoalesce(options.debug, () => ( false));
63
- const bodySizeLimit = _chunk5566GNEGcjs.resolveFarmServerConfig.call(void 0, {
63
+ const bodySizeLimit = _chunkLIFUPCXWcjs.resolveFarmServerConfig.call(void 0, {
64
64
  bodySizeLimit: options.bodySizeLimit
65
65
  }).bodySizeLimit;
66
66
  const basePath = options.basePath;
@@ -113,7 +113,7 @@ function farmApiPlugin(options = {}) {
113
113
  const existing = apiRoutesCache.get(routePath);
114
114
  const existingFile = _optionalChain([endpointSources, 'access', _ => _.get, 'call', _2 => _2(routePath), 'optionalAccess', _3 => _3.get, 'call', _4 => _4(normalizedMethod)]);
115
115
  if (existingFile) {
116
- throw new (0, _chunkEXHEPWFJcjs.APIRouteConflictError)(routePath, normalizedMethod, existingFile, filePath);
116
+ throw new (0, _chunkYAXOEANDcjs.APIRouteConflictError)(routePath, normalizedMethod, existingFile, filePath);
117
117
  }
118
118
  if (existing) {
119
119
  if (!existing.methods.includes(normalizedMethod)) {
@@ -189,7 +189,7 @@ function farmApiPlugin(options = {}) {
189
189
  const createRouter = async () => {
190
190
  const plugins = options.plugins ? await (_nullishCoalesce(routePlugins, () => ( (routePlugins = Promise.resolve(options.plugins({ root: projectRoot })))))) : [];
191
191
  pluginMergedRoutes = plugins.length ? new Map(
192
- _chunkR2SEZEBCcjs.mergePluginAPIRoutes.call(void 0, [...apiRoutesCache.values()], plugins, void 0, {
192
+ _chunkOYNNA4DDcjs.mergePluginAPIRoutes.call(void 0, [...apiRoutesCache.values()], plugins, void 0, {
193
193
  bodySizeLimit,
194
194
  // A plugin calling an app endpoint (an MCP tool, say) goes back through this server,
195
195
  // so the middleware that guards the endpoint's path runs for it.
@@ -209,7 +209,7 @@ function farmApiPlugin(options = {}) {
209
209
  const url = new URL(request.url);
210
210
  const method = request.method.toUpperCase();
211
211
  const pathname = url.pathname;
212
- const match = _chunkR2SEZEBCcjs.matchAPIRouteAtBasePath.call(void 0, servedRoutes(), pathname, basePath);
212
+ const match = _chunkOYNNA4DDcjs.matchAPIRouteAtBasePath.call(void 0, servedRoutes(), pathname, basePath);
213
213
  if (!match) {
214
214
  return new Response(JSON.stringify({ error: "Not Found" }), {
215
215
  status: 404,
@@ -217,18 +217,18 @@ function farmApiPlugin(options = {}) {
217
217
  });
218
218
  }
219
219
  const { route, params } = match;
220
- const endpoint = _chunkR2SEZEBCcjs.resolveAPIRouteEndpoint.call(void 0, route, method);
220
+ const endpoint = _chunkOYNNA4DDcjs.resolveAPIRouteEndpoint.call(void 0, route, method);
221
221
  if (!endpoint) {
222
222
  return new Response(JSON.stringify({ error: "Method Not Allowed" }), {
223
223
  status: 405,
224
224
  headers: {
225
- Allow: _chunkR2SEZEBCcjs.getAllowedAPIRouteMethods.call(void 0, route).join(", "),
225
+ Allow: _chunkOYNNA4DDcjs.getAllowedAPIRouteMethods.call(void 0, route).join(", "),
226
226
  "Content-Type": "application/json"
227
227
  }
228
228
  });
229
229
  }
230
230
  try {
231
- return await _chunkR2SEZEBCcjs.invokeAPIRouteEndpoint.call(void 0, endpoint, request, params, bodySizeLimit);
231
+ return await _chunkOYNNA4DDcjs.invokeAPIRouteEndpoint.call(void 0, endpoint, request, params, bodySizeLimit);
232
232
  } catch (error) {
233
233
  return new Response(JSON.stringify({ error: error.message || "Internal Server Error" }), {
234
234
  status: 500,
@@ -274,10 +274,10 @@ function farmApiPlugin(options = {}) {
274
274
  try {
275
275
  const relativePath = path.relative(apiDir, path.dirname(filePath));
276
276
  const routePath = "/api/" + (relativePath === "." ? "" : relativePath.replace(/\\/g, "/"));
277
- const routeModule = await _chunk6XFGJBYXcjs.loadFarmDevModule.call(void 0, server, filePath);
277
+ const routeModule = await _chunkJYNNIGQOcjs.loadFarmDevModule.call(void 0, server, filePath);
278
278
  const endpoints = {};
279
279
  const availableMethods = [];
280
- for (const method of _chunkR2SEZEBCcjs.API_ROUTE_METHODS) {
280
+ for (const method of _chunkOYNNA4DDcjs.API_ROUTE_METHODS) {
281
281
  if (routeModule[method]) {
282
282
  availableMethods.push(method);
283
283
  endpoints[method] = routeModule[method];
@@ -290,7 +290,7 @@ function farmApiPlugin(options = {}) {
290
290
  log(`API route discovered: ${availableMethods.join(", ")} ${routePath}`);
291
291
  }
292
292
  } catch (e) {
293
- if (e instanceof _chunkEXHEPWFJcjs.APIRouteConflictError || e instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError) throw e;
293
+ if (e instanceof _chunkYAXOEANDcjs.APIRouteConflictError || e instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError) throw e;
294
294
  log(`API route load failed at ${filePath}: ${e.message}`);
295
295
  }
296
296
  }
@@ -306,7 +306,7 @@ function farmApiPlugin(options = {}) {
306
306
  for (const routesFile of routesFiles) {
307
307
  if (fs.existsSync(routesFile)) {
308
308
  try {
309
- const routesModule = await _chunk6XFGJBYXcjs.loadFarmDevModule.call(void 0, server, routesFile);
309
+ const routesModule = await _chunkJYNNIGQOcjs.loadFarmDevModule.call(void 0, server, routesFile);
310
310
  for (const [exportName, exportValue] of Object.entries(routesModule)) {
311
311
  const endpoint = exportValue;
312
312
  if (endpoint && endpoint.__path) {
@@ -317,7 +317,7 @@ function farmApiPlugin(options = {}) {
317
317
  }
318
318
  }
319
319
  } catch (e) {
320
- if (e instanceof _chunkEXHEPWFJcjs.APIRouteConflictError || e instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError) throw e;
320
+ if (e instanceof _chunkYAXOEANDcjs.APIRouteConflictError || e instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError) throw e;
321
321
  log(`Root routes.ts load failed: ${e.message}`);
322
322
  }
323
323
  break;
@@ -332,7 +332,7 @@ function farmApiPlugin(options = {}) {
332
332
  const { getProgrammaticRouteManifest } = await import("./routes.cjs");
333
333
  for (const routeFile of routeFiles) {
334
334
  try {
335
- const routesModule = await _chunk6XFGJBYXcjs.loadFarmDevModule.call(void 0,
335
+ const routesModule = await _chunkJYNNIGQOcjs.loadFarmDevModule.call(void 0,
336
336
  server,
337
337
  _chunkXN2MB4QZcjs.toViteModuleId.call(void 0, routeFile, server.config.root)
338
338
  );
@@ -348,7 +348,7 @@ function farmApiPlugin(options = {}) {
348
348
  }
349
349
  }
350
350
  } catch (e) {
351
- if (e instanceof _chunkEXHEPWFJcjs.APIRouteConflictError || e instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError) throw e;
351
+ if (e instanceof _chunkYAXOEANDcjs.APIRouteConflictError || e instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError) throw e;
352
352
  log(`Programmatic routes file load failed at ${routeFile}: ${e.message}`);
353
353
  }
354
354
  }
@@ -400,7 +400,7 @@ function farmApiPlugin(options = {}) {
400
400
  const pathname = url.split("?")[0];
401
401
  const method = req.method || "GET";
402
402
  if (discoveryPromise) await waitForDiscovery();
403
- if (!_chunkR2SEZEBCcjs.matchAPIRouteAtBasePath.call(void 0, servedRoutes(), pathname, basePath)) {
403
+ if (!_chunkOYNNA4DDcjs.matchAPIRouteAtBasePath.call(void 0, servedRoutes(), pathname, basePath)) {
404
404
  return next();
405
405
  }
406
406
  if (!apiRouterHandler) {
@@ -421,7 +421,7 @@ function farmApiPlugin(options = {}) {
421
421
  }
422
422
  const currentUrl = req.url || url;
423
423
  const currentPathname = currentUrl.split("?")[0];
424
- if (currentPathname !== pathname && !_chunkR2SEZEBCcjs.matchAPIRouteAtBasePath.call(void 0, servedRoutes(), currentPathname, basePath)) {
424
+ if (currentPathname !== pathname && !_chunkOYNNA4DDcjs.matchAPIRouteAtBasePath.call(void 0, servedRoutes(), currentPathname, basePath)) {
425
425
  return next();
426
426
  }
427
427
  const fullUrl = _chunkHNAISJFDcjs.resolveFarmRequestURL.call(void 0, req);
@@ -433,7 +433,7 @@ function farmApiPlugin(options = {}) {
433
433
  }
434
434
  let body;
435
435
  if (method !== "GET" && method !== "HEAD") {
436
- body = await _chunk5566GNEGcjs.readNodeRequestBody.call(void 0, req, bodySizeLimit);
436
+ body = await _chunkLIFUPCXWcjs.readNodeRequestBody.call(void 0, req, bodySizeLimit);
437
437
  }
438
438
  const request = new Request(fullUrl, {
439
439
  method,
@@ -448,7 +448,7 @@ function farmApiPlugin(options = {}) {
448
448
  logResponse(method, currentPathname, response.status, duration);
449
449
  await _chunkZ5MZDFX4cjs.sendWebResponse.call(void 0, res, response);
450
450
  } catch (error) {
451
- const bodyErrorResponse = _chunk5566GNEGcjs.createFarmRequestBodyErrorResponse.call(void 0, error);
451
+ const bodyErrorResponse = _chunkLIFUPCXWcjs.createFarmRequestBodyErrorResponse.call(void 0, error);
452
452
  if (bodyErrorResponse) {
453
453
  await _chunkZ5MZDFX4cjs.sendWebResponse.call(void 0, res, bodyErrorResponse);
454
454
  return;
@@ -497,7 +497,7 @@ function farmApiPlugin(options = {}) {
497
497
  if (await _optionalChain([recoverFailedDiscovery, 'optionalCall', _9 => _9()])) return [];
498
498
  const previousState = snapshotRouteState();
499
499
  try {
500
- const routesModule = await _chunk6XFGJBYXcjs.loadFarmDevModule.call(void 0, server, file);
500
+ const routesModule = await _chunkJYNNIGQOcjs.loadFarmDevModule.call(void 0, server, file);
501
501
  removeEndpointsFromFile(file);
502
502
  for (const [exportName, exportValue] of Object.entries(routesModule)) {
503
503
  const endpoint = exportValue;
@@ -525,7 +525,7 @@ function farmApiPlugin(options = {}) {
525
525
  log(`API router recreated`);
526
526
  } catch (e) {
527
527
  restoreRouteState(previousState);
528
- if (e instanceof _chunkEXHEPWFJcjs.APIRouteConflictError || e instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError) throw e;
528
+ if (e instanceof _chunkYAXOEANDcjs.APIRouteConflictError || e instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError) throw e;
529
529
  log(`Root routes.ts HMR failed: ${e.message}`);
530
530
  }
531
531
  return [];
@@ -550,10 +550,10 @@ function farmApiPlugin(options = {}) {
550
550
  log(`API route file removed: ${routePath}`);
551
551
  return [];
552
552
  }
553
- const routeModule = await _chunk6XFGJBYXcjs.loadFarmDevModule.call(void 0, server, file);
553
+ const routeModule = await _chunkJYNNIGQOcjs.loadFarmDevModule.call(void 0, server, file);
554
554
  removeEndpointsFromFile(file);
555
555
  const availableMethods = [];
556
- for (const method of _chunkR2SEZEBCcjs.API_ROUTE_METHODS) {
556
+ for (const method of _chunkOYNNA4DDcjs.API_ROUTE_METHODS) {
557
557
  if (!routeModule[method]) continue;
558
558
  availableMethods.push(method);
559
559
  addEndpoint(routePath, file, method, routeModule[method]);
@@ -563,7 +563,7 @@ function farmApiPlugin(options = {}) {
563
563
  log(`API router recreated`);
564
564
  } catch (e) {
565
565
  restoreRouteState(previousState);
566
- if (e instanceof _chunkEXHEPWFJcjs.APIRouteConflictError || e instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError) throw e;
566
+ if (e instanceof _chunkYAXOEANDcjs.APIRouteConflictError || e instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError) throw e;
567
567
  log(`API route HMR failed: ${e.message}`);
568
568
  }
569
569
  return [];
@@ -0,0 +1,40 @@
1
+ // src/client/hash-target.ts
2
+ function getHashTargetElement(hash) {
3
+ const fragment = hash.startsWith("#") ? hash.slice(1) : hash;
4
+ if (!fragment) return null;
5
+ let decoded = fragment;
6
+ try {
7
+ decoded = decodeURIComponent(fragment);
8
+ } catch {
9
+ }
10
+ return document.getElementById(decoded) || document.getElementById(fragment) || document.getElementsByName(decoded)[0] || null;
11
+ }
12
+
13
+ // src/client/navigation-delegate.ts
14
+ var DELEGATES = /* @__PURE__ */ Symbol.for("farm.navigation.delegates");
15
+ function delegateNavigation(delegate) {
16
+ const host = globalThis;
17
+ const delegates = host[DELEGATES] ?? (host[DELEGATES] = /* @__PURE__ */ new Set());
18
+ delegates.add(delegate);
19
+ return () => {
20
+ delegates.delete(delegate);
21
+ };
22
+ }
23
+ async function runFarmNavigationDelegates(context) {
24
+ const delegates = globalThis[DELEGATES];
25
+ if (!delegates?.size) return false;
26
+ for (const delegate of delegates) {
27
+ try {
28
+ if (await delegate(context) === true) return true;
29
+ } catch (error) {
30
+ console.error("[Farm.js] A navigation delegate failed; navigating in place.", error);
31
+ }
32
+ }
33
+ return false;
34
+ }
35
+
36
+ export {
37
+ getHashTargetElement,
38
+ delegateNavigation,
39
+ runFarmNavigationDelegates
40
+ };
@@ -297,7 +297,20 @@ async function readFarmRequestBody(request, limit) {
297
297
  }
298
298
  return body;
299
299
  }
300
+ var nodeRequestBodies = /* @__PURE__ */ new WeakMap();
300
301
  async function readNodeRequestBody(request, limit) {
302
+ let body = nodeRequestBodies.get(request);
303
+ if (!body) {
304
+ body = readNodeRequestBodyOnce(request, limit);
305
+ nodeRequestBodies.set(request, body);
306
+ }
307
+ const bytes = await body;
308
+ if (bytes.byteLength > limit) {
309
+ throw new FarmRequestBodyError("BODY_TOO_LARGE", 413, "Request body is too large");
310
+ }
311
+ return bytes;
312
+ }
313
+ async function readNodeRequestBodyOnce(request, limit) {
301
314
  const rawContentLength = request.headers["content-length"];
302
315
  const contentLength = Array.isArray(rawContentLength) ? rawContentLength[0] : rawContentLength;
303
316
  try {
@@ -16,14 +16,14 @@ var _chunk6ONBZGVHcjs = require('./chunk-6ONBZGVH.cjs');
16
16
 
17
17
 
18
18
 
19
- var _chunk5566GNEGcjs = require('./chunk-5566GNEG.cjs');
19
+ var _chunkLIFUPCXWcjs = require('./chunk-LIFUPCXW.cjs');
20
20
 
21
21
 
22
22
 
23
23
  var _chunkB5BBTPJQcjs = require('./chunk-B5BBTPJQ.cjs');
24
24
 
25
25
 
26
- var _chunkJLS6ZLFMcjs = require('./chunk-JLS6ZLFM.cjs');
26
+ var _chunkRHOR2J6Vcjs = require('./chunk-RHOR2J6V.cjs');
27
27
 
28
28
 
29
29
  var _chunkD22BUQKWcjs = require('./chunk-D22BUQKW.cjs');
@@ -147,7 +147,7 @@ function createFarmAiCatalogResponse(request, input = {}, requestUrl) {
147
147
  const body = JSON.stringify(
148
148
  card ? card.card : { specVersion: "1.0", entries: servers.map(({ entry }) => entry) }
149
149
  );
150
- const etag = _chunk5566GNEGcjs.createFarmWeakETag.call(void 0, body);
150
+ const etag = _chunkLIFUPCXWcjs.createFarmWeakETag.call(void 0, body);
151
151
  const headers = {
152
152
  ...corsHeaders(),
153
153
  "Content-Type": card ? `${SERVER_CARD_TYPE}; charset=utf-8` : ard ? "application/json; charset=utf-8" : `${AI_CATALOG_TYPE}; charset=utf-8`,
@@ -156,7 +156,7 @@ function createFarmAiCatalogResponse(request, input = {}, requestUrl) {
156
156
  ETag: etag,
157
157
  "X-Content-Type-Options": "nosniff"
158
158
  };
159
- if (_chunk5566GNEGcjs.matchesFarmIfNoneMatch.call(void 0, request.headers.get("if-none-match"), etag)) {
159
+ if (_chunkLIFUPCXWcjs.matchesFarmIfNoneMatch.call(void 0, request.headers.get("if-none-match"), etag)) {
160
160
  return new Response(null, { status: 304, headers });
161
161
  }
162
162
  _chunkWJFFPXCVcjs.emitFarmAgentRead.call(void 0, request, card ? "mcp-server-card" : "ai-catalog", 200);
@@ -282,7 +282,7 @@ function createFarmAppManifest(input) {
282
282
  return {
283
283
  schemaVersion: 1,
284
284
  app: app ? {
285
- ...app.version ? { farm: _chunkJLS6ZLFMcjs.FARM_VERSION } : {},
285
+ ...app.version ? { farm: _chunkRHOR2J6Vcjs.FARM_VERSION } : {},
286
286
  ...app.renderer ? { renderer: input.renderer } : {},
287
287
  basePath: input.basePath,
288
288
  ...app.build ? { build: input.build } : {}
@@ -377,7 +377,7 @@ async function createFarmAppManifestResponse(request, input) {
377
377
  });
378
378
  }
379
379
  const body = JSON.stringify(createFarmAppManifest(input));
380
- const etag = _chunk5566GNEGcjs.createFarmWeakETag.call(void 0, body);
380
+ const etag = _chunkLIFUPCXWcjs.createFarmWeakETag.call(void 0, body);
381
381
  const headers = {
382
382
  ...CORS_HEADERS,
383
383
  "content-type": "application/json; charset=utf-8",
@@ -385,7 +385,7 @@ async function createFarmAppManifestResponse(request, input) {
385
385
  etag,
386
386
  "x-content-type-options": "nosniff"
387
387
  };
388
- if (_chunk5566GNEGcjs.matchesFarmIfNoneMatch.call(void 0, request.headers.get("if-none-match"), etag)) {
388
+ if (_chunkLIFUPCXWcjs.matchesFarmIfNoneMatch.call(void 0, request.headers.get("if-none-match"), etag)) {
389
389
  return new Response(null, { status: 304, headers });
390
390
  }
391
391
  return new Response(method === "HEAD" ? null : body, { status: 200, headers });
@@ -26,7 +26,7 @@ import {
26
26
  readNodeRequestBody,
27
27
  resolveFarmServerConfig,
28
28
  withFarmRequestClientAddress
29
- } from "./chunk-C6U66WWF.mjs";
29
+ } from "./chunk-GFT5AHAT.mjs";
30
30
  import {
31
31
  clearRequestContext,
32
32
  deleteRequestContext,
@@ -2,15 +2,22 @@ import {
2
2
  FARM_RSC_INSTALL_HINT,
3
3
  findFarmAppPackageDir
4
4
  } from "./chunk-PXEXOQ5R.mjs";
5
+ import {
6
+ createFarmDevLoopbackPlugin
7
+ } from "./chunk-2GLQSIZD.mjs";
5
8
  import {
6
9
  resolveDeployOutputPath
7
- } from "./chunk-VJXLUTBM.mjs";
10
+ } from "./chunk-2DEPNLXK.mjs";
8
11
  import {
12
+ farmDesktopDevGuardPlugin,
9
13
  loadFarmReactPlugin
10
- } from "./chunk-XLYXG73A.mjs";
14
+ } from "./chunk-75WWOZ5C.mjs";
11
15
  import {
12
16
  loadTailwindVitePlugin
13
17
  } from "./chunk-XLLVWLWO.mjs";
18
+ import {
19
+ resolveFarmPlatform
20
+ } from "./chunk-SMUW7UST.mjs";
14
21
 
15
22
  // src/rsc-pipeline.ts
16
23
  import { readFileSync } from "fs";
@@ -91,6 +98,11 @@ async function createFarmRscViteConfig(userConfig, options) {
91
98
  experimental: { ...userConfig.experimental, serverComponents: true },
92
99
  port: options.port ?? userConfig.server?.port,
93
100
  plugins: [
101
+ ...options.command === "serve" && resolveFarmPlatform() === "desktop" ? [
102
+ farmDesktopDevGuardPlugin(
103
+ typeof userConfig.basePath === "string" ? userConfig.basePath : void 0
104
+ )
105
+ ] : [],
94
106
  ...tailwind ? [tailwind] : [],
95
107
  ...vitePlugins,
96
108
  viteRsc.default({ serverHandler: false, entries: FARM_RSC_ENTRIES }),
@@ -118,7 +130,13 @@ async function createFarmRscViteConfig(userConfig, options) {
118
130
  }
119
131
  async function createFarmRscDevServer(userConfig, options) {
120
132
  const { createServer } = await import("vite");
121
- return createServer(await createFarmRscViteConfig(userConfig, { ...options, command: "serve" }));
133
+ const { host, ...configOptions } = options;
134
+ const config = await createFarmRscViteConfig(userConfig, { ...configOptions, command: "serve" });
135
+ return createServer({
136
+ ...config,
137
+ plugins: [...config.plugins ?? [], createFarmDevLoopbackPlugin()],
138
+ ...host === void 0 ? {} : { server: { ...config.server, host } }
139
+ });
122
140
  }
123
141
  async function buildFarmRsc(userConfig, options) {
124
142
  const { createBuilder } = await import("vite");
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkZGS3ZDF7cjs = require('./chunk-ZGS3ZDF7.cjs');
3
+ var _chunkGOOK2J2Wcjs = require('./chunk-GOOK2J2W.cjs');
4
4
 
5
5
 
6
6
  var _chunkWJFFPXCVcjs = require('./chunk-WJFFPXCV.cjs');
@@ -45,13 +45,12 @@ function resolveFarmInfraAnalytics(env = processEnv()) {
45
45
  if (!key || env[FARM_PRERENDER_ENV] === "1") return { off: null };
46
46
  const ingestionKey = INGESTION_KEY.test(key);
47
47
  const projectId = _optionalChain([env, 'access', _6 => _6.FARMJS_PROJECT_ID, 'optionalAccess', _7 => _7.trim, 'call', _8 => _8()]) || void 0;
48
- if (!ingestionKey && !projectId) return { off: null };
49
48
  if (!ingestionKey && !API_KEY.test(key)) {
50
49
  return {
51
50
  off: "FARMJS_API_KEY isn't a Farm Infra API key (farmjs_\u2026) or write-only key (fti_\u2026)"
52
51
  };
53
52
  }
54
- if (!ingestionKey && !PROJECT.test(projectId)) {
53
+ if (!ingestionKey && projectId && !PROJECT.test(projectId)) {
55
54
  return { off: "FARMJS_PROJECT_ID isn't a Farm Infra project ID (proj_\u2026)" };
56
55
  }
57
56
  if (env.FARMJS_ENVIRONMENT && !ENVIRONMENTS.includes(env.FARMJS_ENVIRONMENT)) {
@@ -71,7 +70,7 @@ function resolveFarmInfraAnalytics(env = processEnv()) {
71
70
  options: {
72
71
  endpoint: endpoint.href,
73
72
  key,
74
- ...ingestionKey ? {} : { projectId, environment: defaultFarmInfraEnvironment(env) }
73
+ ...ingestionKey ? {} : { ...projectId ? { projectId } : {}, environment: defaultFarmInfraEnvironment(env) }
75
74
  }
76
75
  };
77
76
  }
@@ -95,13 +94,45 @@ function retryAt(value, now) {
95
94
  const date = Date.parse(value);
96
95
  return Number.isFinite(date) ? Math.max(now, Math.min(date, now + 864e5)) : now;
97
96
  }
97
+ var REFUSALS = {
98
+ project: "project",
99
+ api_key_permission: "permission",
100
+ api_key_environment: "environment"
101
+ };
102
+ async function refusal(response) {
103
+ const reader = _optionalChain([response, 'access', _12 => _12.body, 'optionalAccess', _13 => _13.getReader, 'call', _14 => _14()]);
104
+ if (!reader) return void 0;
105
+ let text = "";
106
+ const decoder = new TextDecoder();
107
+ const deadline = Date.now() + 500;
108
+ try {
109
+ while (text.length < 1024 && Date.now() < deadline) {
110
+ let timer;
111
+ const chunk = await Promise.race([
112
+ reader.read(),
113
+ new Promise((resolve) => {
114
+ timer = setTimeout(() => resolve({ done: true }), deadline - Date.now());
115
+ })
116
+ ]).finally(() => clearTimeout(timer));
117
+ if (chunk.done) break;
118
+ text += decoder.decode(chunk.value, { stream: true });
119
+ }
120
+ const code = JSON.parse(text).error;
121
+ return typeof code === "string" && Object.prototype.hasOwnProperty.call(REFUSALS, code) ? REFUSALS[code] : void 0;
122
+ } catch (e2) {
123
+ return void 0;
124
+ } finally {
125
+ void reader.cancel().catch(() => {
126
+ });
127
+ }
128
+ }
98
129
  function createFarmInfraAnalyticsExporter(options, send = (input, init) => fetch(input, init)) {
99
130
  const requestHeaders = {
100
131
  "content-type": "application/json",
101
132
  authorization: `Bearer ${options.key}`
102
133
  };
103
134
  if (!INGESTION_KEY.test(options.key)) {
104
- requestHeaders["x-farm-project"] = options.projectId;
135
+ if (options.projectId) requestHeaders["x-farm-project"] = options.projectId;
105
136
  requestHeaders["x-farm-environment"] = _nullishCoalesce(options.environment, () => ( defaultFarmInfraEnvironment()));
106
137
  }
107
138
  const queue = [];
@@ -113,9 +144,9 @@ function createFarmInfraAnalyticsExporter(options, send = (input, init) => fetch
113
144
  let inFlight = /* @__PURE__ */ new Set();
114
145
  const diagnostic = (event) => {
115
146
  try {
116
- void Promise.resolve(_optionalChain([options, 'access', _12 => _12.onDiagnostic, 'optionalCall', _13 => _13(event)])).catch(() => {
147
+ void Promise.resolve(_optionalChain([options, 'access', _15 => _15.onDiagnostic, 'optionalCall', _16 => _16(event)])).catch(() => {
117
148
  });
118
- } catch (e2) {
149
+ } catch (e3) {
119
150
  }
120
151
  };
121
152
  const expired = (item, now) => !inFlight.has(item) && (now - item.enqueuedAt >= MAX_AGE || item.attempts >= MAX_ATTEMPTS);
@@ -161,7 +192,7 @@ function createFarmInfraAnalyticsExporter(options, send = (input, init) => fetch
161
192
  for (const item of batch) item.attempts++;
162
193
  inFlight = new Set(batch);
163
194
  active = new AbortController();
164
- const timeout = setTimeout(() => _optionalChain([active, 'optionalAccess', _14 => _14.abort, 'call', _15 => _15()]), Math.min(TIMEOUT, deadline - Date.now()));
195
+ const timeout = setTimeout(() => _optionalChain([active, 'optionalAccess', _17 => _17.abort, 'call', _18 => _18()]), Math.min(TIMEOUT, deadline - Date.now()));
165
196
  let status;
166
197
  try {
167
198
  const response = await send(options.endpoint, {
@@ -172,7 +203,8 @@ function createFarmInfraAnalyticsExporter(options, send = (input, init) => fetch
172
203
  body
173
204
  });
174
205
  status = response.status;
175
- void _optionalChain([response, 'access', _16 => _16.body, 'optionalAccess', _17 => _17.cancel, 'call', _18 => _18(), 'access', _19 => _19.catch, 'call', _20 => _20(() => {
206
+ const reason = status === 400 || status === 403 ? await refusal(response) : void 0;
207
+ void _optionalChain([response, 'access', _19 => _19.body, 'optionalAccess', _20 => _20.cancel, 'call', _21 => _21(), 'access', _22 => _22.catch, 'call', _23 => _23(() => {
176
208
  })]);
177
209
  if (response.ok) {
178
210
  remove(batch);
@@ -181,7 +213,7 @@ function createFarmInfraAnalyticsExporter(options, send = (input, init) => fetch
181
213
  if ([400, 401, 403, 404, 413, 415].includes(status) || status >= 300 && status < 400) {
182
214
  stopped = true;
183
215
  queue.length = 0;
184
- diagnostic({ code: "disabled", status });
216
+ diagnostic({ code: "disabled", status, ...reason ? { reason } : {} });
185
217
  break;
186
218
  }
187
219
  if (status !== 408 && status !== 429 && status < 500) {
@@ -190,7 +222,7 @@ function createFarmInfraAnalyticsExporter(options, send = (input, init) => fetch
190
222
  continue;
191
223
  }
192
224
  notBefore = Math.max(notBefore, retryAt(response.headers.get("retry-after"), Date.now()));
193
- } catch (e3) {
225
+ } catch (e4) {
194
226
  } finally {
195
227
  clearTimeout(timeout);
196
228
  active = void 0;
@@ -220,7 +252,7 @@ function createFarmInfraAnalyticsExporter(options, send = (input, init) => fetch
220
252
  closing = true;
221
253
  await flush();
222
254
  stopped = true;
223
- _optionalChain([active, 'optionalAccess', _21 => _21.abort, 'call', _22 => _22()]);
255
+ _optionalChain([active, 'optionalAccess', _24 => _24.abort, 'call', _25 => _25()]);
224
256
  if (queue.length) diagnostic({ code: "dropped", count: queue.length });
225
257
  queue.length = 0;
226
258
  }
@@ -241,7 +273,7 @@ function requestEvent(metadata, method, status, durationMs) {
241
273
  id: uuid(),
242
274
  requestId: metadata.id,
243
275
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
244
- route: routeTemplate(_chunkZGS3ZDF7cjs.getFarmRouteLabel.call(void 0, metadata.route)),
276
+ route: routeTemplate(_chunkGOOK2J2Wcjs.getFarmRouteLabel.call(void 0, metadata.route)),
245
277
  agent: metadata.agent,
246
278
  kind: "request",
247
279
  method,
@@ -254,7 +286,7 @@ function toolEvent(metadata, event) {
254
286
  id: uuid(),
255
287
  requestId: metadata.id,
256
288
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
257
- route: routeTemplate(_chunkZGS3ZDF7cjs.getFarmRouteLabel.call(void 0, metadata.route)),
289
+ route: routeTemplate(_chunkGOOK2J2Wcjs.getFarmRouteLabel.call(void 0, metadata.route)),
258
290
  agent: metadata.agent,
259
291
  kind: "mcp.tool",
260
292
  tool: event.tool,
@@ -270,7 +302,7 @@ function farmInfraAnalyticsPlugin(options, send) {
270
302
  setup(context) {
271
303
  const state = { exporter: createFarmInfraAnalyticsExporter(options, send) };
272
304
  context.lifecycle.onShutdown(async () => {
273
- _optionalChain([state, 'access', _23 => _23.unsubscribe, 'optionalCall', _24 => _24()]);
305
+ _optionalChain([state, 'access', _26 => _26.unsubscribe, 'optionalCall', _27 => _27()]);
274
306
  await state.exporter.close();
275
307
  });
276
308
  return state;
@@ -366,14 +398,25 @@ function linkedOptions(env, warn) {
366
398
  return {
367
399
  ...resolved.options,
368
400
  onDiagnostic(event) {
369
- if (event.code === "disabled") {
370
- warn(
371
- `[Farm] Farm Infra analytics stopped: Farm Infra answered ${event.status}. Check FARMJS_API_KEY and FARMJS_PROJECT_ID, then restart the server.`
372
- );
373
- }
401
+ if (event.code !== "disabled") return;
402
+ if (event.reason === "environment") return;
403
+ warn(`[Farm] Farm Infra analytics stopped: ${stopReason(event)}`);
374
404
  }
375
405
  };
376
406
  }
407
+ var KEYS_PAGE = "the API keys page (https://app.farmjs.dev/dashboard/settings)";
408
+ function stopReason(event) {
409
+ if (event.reason === "project") {
410
+ return "FARMJS_API_KEY reaches more than one project. Set FARMJS_PROJECT_ID or use a key scoped to one project, then restart the server.";
411
+ }
412
+ if (event.reason === "permission") {
413
+ return `this key can't send analytics. Create a Site analytics key on ${KEYS_PAGE}, set it as FARMJS_API_KEY, then restart the server.`;
414
+ }
415
+ if (event.status === 401) {
416
+ return `Farm Infra answered 401: FARMJS_API_KEY was revoked or has expired. Create a new Site analytics key on ${KEYS_PAGE}, then restart the server.`;
417
+ }
418
+ return `Farm Infra answered ${event.status}. Check FARMJS_API_KEY and FARMJS_PROJECT_ID, then restart the server.`;
419
+ }
377
420
  function createFarmInfraAnalyticsPlugin(env = processEnv(), warn = console.warn) {
378
421
  const options = linkedOptions(env, warn);
379
422
  return options ? farmInfraAnalyticsPlugin(options) : null;
@@ -4,7 +4,8 @@
4
4
  var _chunkRI3EVPKDcjs = require('./chunk-RI3EVPKD.cjs');
5
5
 
6
6
 
7
- var _chunkV7KTQR4Ccjs = require('./chunk-V7KTQR4C.cjs');
7
+
8
+ var _chunkQXJADAQBcjs = require('./chunk-QXJADAQB.cjs');
8
9
 
9
10
 
10
11
 
@@ -244,7 +245,7 @@ var SPARouter = class {
244
245
  );
245
246
  if (scroll) {
246
247
  if (url.hash) {
247
- _optionalChain([_chunkV7KTQR4Ccjs.getHashTargetElement.call(void 0, url.hash), 'optionalAccess', _10 => _10.scrollIntoView, 'call', _11 => _11()]);
248
+ _optionalChain([_chunkQXJADAQBcjs.getHashTargetElement.call(void 0, url.hash), 'optionalAccess', _10 => _10.scrollIntoView, 'call', _11 => _11()]);
248
249
  } else {
249
250
  window.scrollTo(0, 0);
250
251
  }
@@ -252,11 +253,12 @@ var SPARouter = class {
252
253
  return;
253
254
  }
254
255
  const from = window.location.pathname + window.location.search;
255
- if (await this.shouldBlockNavigation({
256
- from,
257
- to: fullPath,
258
- action: replace ? "replace" : "push"
259
- })) {
256
+ const action = replace ? "replace" : "push";
257
+ if (await this.shouldBlockNavigation({ from, to: fullPath, action })) {
258
+ return;
259
+ }
260
+ if (!(refresh && fullPath === from) && await _chunkQXJADAQBcjs.runFarmNavigationDelegates.call(void 0, { url: url.href, from, to: fullPath, action })) {
261
+ this.cancelActiveNavigation();
260
262
  return;
261
263
  }
262
264
  if (this.options.scrollRestoration) {
@@ -528,7 +530,7 @@ var SPARouter = class {
528
530
  }
529
531
  if (options.scroll) {
530
532
  if (options.url.hash) {
531
- const element = _chunkV7KTQR4Ccjs.getHashTargetElement.call(void 0, options.url.hash);
533
+ const element = _chunkQXJADAQBcjs.getHashTargetElement.call(void 0, options.url.hash);
532
534
  if (element) {
533
535
  element.scrollIntoView();
534
536
  }
@@ -762,7 +764,7 @@ var SPARouter = class {
762
764
  }
763
765
  const destinationPath = window.location.pathname + window.location.search;
764
766
  if (window.location.hash) {
765
- const target = _chunkV7KTQR4Ccjs.getHashTargetElement.call(void 0, window.location.hash);
767
+ const target = _chunkQXJADAQBcjs.getHashTargetElement.call(void 0, window.location.hash);
766
768
  if (target) {
767
769
  target.scrollIntoView();
768
770
  } else if (this.options.scrollRestoration) {