@farm.js/core 0.1.50 → 0.1.51-beta.1

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 (388) hide show
  1. package/README.md +163 -3
  2. package/dist/{agent-mcp-CIMH324y.d.mts → agent-mcp.d-BPzpKBHQ.d.mts} +1 -1
  3. package/dist/{agent-mcp-9BMbRgg_.d.ts → agent-mcp.d-ZuuNgrkQ.d.ts} +1 -1
  4. package/dist/agent-runtime.cjs +3 -3
  5. package/dist/agent-runtime.d.mts +13 -13
  6. package/dist/agent-runtime.d.ts +13 -13
  7. package/dist/agent-runtime.mjs +2 -2
  8. package/dist/{analyzer-CN7C74WX.cjs → analyzer-AZULAOPL.cjs} +2 -2
  9. package/dist/{analyzer-DDW34OMC.mjs → analyzer-V74FTD2F.mjs} +1 -1
  10. package/dist/api/client.d.mts +4 -4
  11. package/dist/api/client.d.ts +4 -4
  12. package/dist/api/route-manager.cjs +5 -5
  13. package/dist/api/route-manager.d.mts +19 -19
  14. package/dist/api/route-manager.d.ts +19 -19
  15. package/dist/api/route-manager.mjs +4 -4
  16. package/dist/api/runtime.d.mts +15 -15
  17. package/dist/api/runtime.d.ts +15 -15
  18. package/dist/{api-client-CvI5oOBE.d.ts → api-client.d-BWcqZciH.d.ts} +3 -3
  19. package/dist/{api-client-CFdv-Xgh.d.mts → api-client.d-CeA6tNA6.d.mts} +3 -3
  20. package/dist/api.cjs +7 -7
  21. package/dist/api.d.mts +21 -21
  22. package/dist/api.d.ts +21 -21
  23. package/dist/api.mjs +6 -6
  24. package/dist/{app-manifest-D0kaXdwu.d.ts → app-manifest.d-BJDcZn3W.d.mts} +1 -1
  25. package/dist/{app-manifest-CQDJOKL2.d.mts → app-manifest.d-HWhqbP2X.d.ts} +1 -1
  26. package/dist/app-markdown.d.mts +14 -14
  27. package/dist/app-markdown.d.ts +14 -14
  28. package/dist/{app-BWibTHVT.d.ts → app.d-B5EWdob-.d.ts} +12 -10
  29. package/dist/{app-DVJ13FPA.d.mts → app.d-DOGW1KI8.d.mts} +12 -10
  30. package/dist/base-path.d-BOUV5ozD.d.mts +10 -0
  31. package/dist/base-path.d-BOUV5ozD.d.ts +10 -0
  32. package/dist/{chunk-B5S2JS6M.cjs → chunk-2756SHCI.cjs} +372 -305
  33. package/dist/{chunk-RWT2BTJT.cjs → chunk-2IAPKPEB.cjs} +6 -6
  34. package/dist/{chunk-2G63BIRL.mjs → chunk-2KVDHNQS.mjs} +8 -11
  35. package/dist/{chunk-NJVFPJ2Y.cjs → chunk-3OWVWZ6R.cjs} +28 -2
  36. package/dist/{chunk-WVBUXNBX.mjs → chunk-5A5GAZ75.mjs} +296 -106
  37. package/dist/{chunk-GERUXONA.cjs → chunk-5A77OEIG.cjs} +4 -1
  38. package/dist/{chunk-4HBKBHVP.mjs → chunk-5ENW27SL.mjs} +1 -1
  39. package/dist/{chunk-FACTMUPI.cjs → chunk-5IONBVJY.cjs} +33 -22
  40. package/dist/{chunk-X2EL3BLH.cjs → chunk-5N7QAGEA.cjs} +36 -9
  41. package/dist/{chunk-DGOLAZLV.cjs → chunk-65Y5SIBH.cjs} +1 -1
  42. package/dist/{chunk-MTB57GOK.mjs → chunk-724WT3NI.mjs} +4 -2
  43. package/dist/{chunk-C73RIAEF.mjs → chunk-72NBDVWQ.mjs} +18 -7
  44. package/dist/{chunk-VCKGOXFI.cjs → chunk-76GHW3WI.cjs} +7 -1
  45. package/dist/{chunk-ZIBIE7AH.mjs → chunk-7UPCJDB5.mjs} +7 -1
  46. package/dist/{chunk-CPXDDWGL.mjs → chunk-AER5I65K.mjs} +1 -1
  47. package/dist/{chunk-RHOR2J6V.cjs → chunk-AGR7VJH2.cjs} +1 -1
  48. package/dist/{chunk-WB6XES4V.mjs → chunk-ALEUMLJN.mjs} +34 -5
  49. package/dist/{chunk-OD6WM3I7.mjs → chunk-AV26KHTG.mjs} +1 -1
  50. package/dist/{chunk-L6QDME5Z.cjs → chunk-B3GZAQSC.cjs} +3 -3
  51. package/dist/{chunk-ZLOQQ2UF.mjs → chunk-BSEKNTMS.mjs} +107 -40
  52. package/dist/{chunk-WAPQWAE6.cjs → chunk-CECUDGXQ.cjs} +9 -8
  53. package/dist/chunk-CKPTIEDX.cjs +12 -0
  54. package/dist/{chunk-IUQLRTTO.mjs → chunk-CO6UYM2D.mjs} +14 -1
  55. package/dist/{chunk-SHJJM6OG.mjs → chunk-CZ35L6PL.mjs} +9 -2
  56. package/dist/{chunk-EQMTJBB7.cjs → chunk-DZZHTMWM.cjs} +35 -6
  57. package/dist/{chunk-3ATXWZPH.cjs → chunk-E36C43IX.cjs} +13 -16
  58. package/dist/{chunk-J2ZEVDEK.cjs → chunk-EHB77D5U.cjs} +3 -3
  59. package/dist/{chunk-KO2NWUKN.mjs → chunk-EIMK7D2D.mjs} +33 -6
  60. package/dist/{chunk-CY7H5KS4.cjs → chunk-EKJYE4Y7.cjs} +2 -2
  61. package/dist/{chunk-2VCC3GVC.mjs → chunk-EOSFVNXZ.mjs} +1 -1
  62. package/dist/{chunk-IWJKJDNW.mjs → chunk-EWC76P5D.mjs} +53 -32
  63. package/dist/{chunk-WQGRD5BJ.cjs → chunk-EX6ZSN5P.cjs} +1 -16
  64. package/dist/{chunk-6QA2SXVH.cjs → chunk-FK25QSVC.cjs} +2 -1
  65. package/dist/{chunk-BW6SCVYX.mjs → chunk-FSQMN2MQ.mjs} +1 -0
  66. package/dist/{chunk-2H3FJYY6.mjs → chunk-FSXSQQTV.mjs} +3 -2
  67. package/dist/chunk-GNZIAJGB.mjs +358 -0
  68. package/dist/{chunk-TXK4D46O.mjs → chunk-H3ASZDT7.mjs} +21 -1
  69. package/dist/{chunk-B6PREBN6.cjs → chunk-HASX6DC7.cjs} +8 -8
  70. package/dist/{chunk-76R5GJER.mjs → chunk-I3EFXUAR.mjs} +60 -13
  71. package/dist/{chunk-HYN3LLG7.cjs → chunk-IFBINMI4.cjs} +3 -3
  72. package/dist/{chunk-CBJKDB6F.mjs → chunk-IRSS4HS4.mjs} +1 -1
  73. package/dist/{chunk-4T25YCZ5.cjs → chunk-JVBNKWLV.cjs} +81 -34
  74. package/dist/{chunk-VOZ5DI7D.mjs → chunk-JWI5PUO2.mjs} +6 -2
  75. package/dist/{chunk-YAXOEAND.cjs → chunk-KHXAJ2KA.cjs} +6 -6
  76. package/dist/{chunk-2DEPNLXK.mjs → chunk-KMB5BMFX.mjs} +122 -12
  77. package/dist/{chunk-M7LKA632.mjs → chunk-KU7MBLDZ.mjs} +1 -1
  78. package/dist/{chunk-WXHDVXJE.mjs → chunk-KY32FWK7.mjs} +2 -2
  79. package/dist/{chunk-EQWWOQTK.cjs → chunk-LEIXUFJN.cjs} +6 -2
  80. package/dist/{chunk-2GLQSIZD.mjs → chunk-LMFJCXDD.mjs} +1 -1
  81. package/dist/{chunk-IXSMFKZ2.cjs → chunk-LNM57D3H.cjs} +4 -4
  82. package/dist/{chunk-5V4KZOZO.mjs → chunk-LZ4SB57H.mjs} +2 -2
  83. package/dist/chunk-N4AQNEXR.cjs +17 -0
  84. package/dist/{chunk-J37KTQIA.cjs → chunk-NK2VWS7P.cjs} +52 -3
  85. package/dist/{chunk-X3HOVNHI.mjs → chunk-NN3MOPSI.mjs} +7 -7
  86. package/dist/{chunk-JZMZKABS.cjs → chunk-NWUHS6GV.cjs} +3 -2
  87. package/dist/{chunk-XLLVWLWO.mjs → chunk-PIHKO25G.mjs} +1 -1
  88. package/dist/chunk-PIUTGRDI.cjs +358 -0
  89. package/dist/{chunk-JJOWY3XD.mjs → chunk-QAIAFCRZ.mjs} +8 -6
  90. package/dist/{chunk-Q3UU2KXC.mjs → chunk-QMDU6QHN.mjs} +4 -1
  91. package/dist/{chunk-75WWOZ5C.mjs → chunk-QOSDWGKT.mjs} +1 -1
  92. package/dist/{chunk-GOOK2J2W.cjs → chunk-RMPNYUGT.cjs} +9 -7
  93. package/dist/{chunk-HWCHIBJZ.mjs → chunk-SCRC5AMM.mjs} +5 -5
  94. package/dist/{chunk-PXEXOQ5R.mjs → chunk-SHS6KXOZ.mjs} +1 -1
  95. package/dist/{chunk-ETF5C6HR.cjs → chunk-SJ23LJ3N.cjs} +3 -3
  96. package/dist/{chunk-JHXJBNLY.cjs → chunk-SUCDVKUB.cjs} +21 -1
  97. package/dist/{chunk-7ONZDKVY.mjs → chunk-T4EW7AAD.mjs} +2 -2
  98. package/dist/{chunk-F5LERVY3.cjs → chunk-TT66CP3P.cjs} +13 -13
  99. package/dist/{chunk-IUBDMDZZ.cjs → chunk-UQHIWZZ6.cjs} +15 -8
  100. package/dist/{chunk-LYWAGXXW.cjs → chunk-VITZRYW3.cjs} +131 -21
  101. package/dist/{chunk-XN2MB4QZ.cjs → chunk-VQJYGZNX.cjs} +4 -4
  102. package/dist/{chunk-KGP76FSV.mjs → chunk-VS7EHLLW.mjs} +1 -1
  103. package/dist/{chunk-5PKDHKQP.cjs → chunk-WFVSAT7Y.cjs} +6 -4
  104. package/dist/{chunk-UY6HS5PF.cjs → chunk-X2AMN2WV.cjs} +10 -10
  105. package/dist/{chunk-474FO3UE.cjs → chunk-X2M4XN4V.cjs} +213 -192
  106. package/dist/chunk-X3EFRVXY.mjs +12 -0
  107. package/dist/{chunk-UCQ52TJY.mjs → chunk-X3JNB2TB.mjs} +1 -1
  108. package/dist/{chunk-IQXGHGZF.cjs → chunk-XB24LZWI.cjs} +5 -5
  109. package/dist/{chunk-BNMHXVLL.mjs → chunk-XMHERKSE.mjs} +0 -15
  110. package/dist/{chunk-CGCJ2TJU.cjs → chunk-XPMC4E2G.cjs} +3 -3
  111. package/dist/{chunk-KZH6YLND.cjs → chunk-XY4DYGSU.cjs} +603 -413
  112. package/dist/{chunk-C7425KDG.cjs → chunk-XYL4HSVC.cjs} +2 -2
  113. package/dist/{chunk-HHFMECFO.mjs → chunk-Y2G5SJFB.mjs} +2 -1
  114. package/dist/{chunk-2SVJGOAX.mjs → chunk-Y3N5BFRJ.mjs} +3 -3
  115. package/dist/{chunk-Z5MZDFX4.cjs → chunk-YIHRZBD7.cjs} +14 -1
  116. package/dist/chunk-Z5A6CNV2.mjs +60 -0
  117. package/dist/chunk-Z64V4WZI.mjs +17 -0
  118. package/dist/{chunk-E2BMCNMJ.cjs → chunk-ZOWNWHK6.cjs} +2 -2
  119. package/dist/{chunk-C5JXCUKR.mjs → chunk-ZQ5BDNKW.mjs} +51 -2
  120. package/dist/client/lifecycle.d.mts +1 -1
  121. package/dist/client/lifecycle.d.ts +1 -1
  122. package/dist/{client-plugins-BPfltM5m.d.ts → client-plugins.d-C0n8Yhh-.d.ts} +60 -14
  123. package/dist/{client-plugins-D4RO59f0.d.mts → client-plugins.d-C_3CdALC.d.mts} +60 -14
  124. package/dist/client-plugins.d.mts +13 -13
  125. package/dist/client-plugins.d.ts +13 -13
  126. package/dist/client.cjs +5 -4
  127. package/dist/client.d.mts +24 -24
  128. package/dist/client.d.ts +24 -24
  129. package/dist/client.mjs +4 -3
  130. package/dist/config.d.mts +13 -13
  131. package/dist/config.d.ts +13 -13
  132. package/dist/cron.cjs +4 -4
  133. package/dist/cron.mjs +3 -3
  134. package/dist/desktop.d.mts +14 -14
  135. package/dist/desktop.d.ts +14 -14
  136. package/dist/{dev-guard-YLO5DE3H.cjs → dev-guard-2UW2KERP.cjs} +2 -2
  137. package/dist/{dev-guard-4PFQNXQX.mjs → dev-guard-ONNMVQUN.mjs} +1 -1
  138. package/dist/{devtools-STG7HPRV.mjs → devtools-BU5IT2PD.mjs} +8 -8
  139. package/dist/{devtools-N5XTOECL.cjs → devtools-KJFUE5FO.cjs} +10 -10
  140. package/dist/docs.cjs +14 -12
  141. package/dist/docs.d.mts +23 -15
  142. package/dist/docs.d.ts +23 -15
  143. package/dist/docs.mjs +13 -11
  144. package/dist/environment/vite.cjs +2 -2
  145. package/dist/environment/vite.d.mts +1 -1
  146. package/dist/environment/vite.d.ts +1 -1
  147. package/dist/environment/vite.mjs +1 -1
  148. package/dist/{generate-route-types-TF5Wwtvz.d.mts → generate-route-types.d-BL2pq6xC.d.ts} +1 -1
  149. package/dist/{generate-route-types-DQP0cUzk.d.ts → generate-route-types.d-BoVDU8qX.d.mts} +1 -1
  150. package/dist/i18n/client.d.mts +2 -2
  151. package/dist/i18n/client.d.ts +2 -2
  152. package/dist/i18n/index.d.mts +3 -3
  153. package/dist/i18n/index.d.ts +3 -3
  154. package/dist/i18n/server.d.mts +5 -5
  155. package/dist/i18n/server.d.ts +5 -5
  156. package/dist/image/server.d.mts +1 -1
  157. package/dist/image/server.d.ts +1 -1
  158. package/dist/image/sharp.d.mts +1 -1
  159. package/dist/image/sharp.d.ts +1 -1
  160. package/dist/image.d.mts +1 -1
  161. package/dist/image.d.ts +1 -1
  162. package/dist/index.cjs +48 -44
  163. package/dist/{index-C-N3Pwg-.d.ts → index.d-B6M_8kmo.d.ts} +2 -2
  164. package/dist/{index-D3l4tREW.d.ts → index.d-BNNDpql4.d.ts} +2 -2
  165. package/dist/{index-DPUAPho_.d.mts → index.d-BqcfqJvt.d.mts} +2 -2
  166. package/dist/{index-k8o8eUOd.d.mts → index.d-CsGxS-hZ.d.mts} +2 -2
  167. package/dist/index.d.mts +42 -42
  168. package/dist/index.d.ts +42 -42
  169. package/dist/index.mjs +47 -43
  170. package/dist/instrumentation.d.mts +2 -2
  171. package/dist/instrumentation.d.ts +2 -2
  172. package/dist/integrations.cjs +3 -3
  173. package/dist/integrations.d.mts +13 -13
  174. package/dist/integrations.d.ts +13 -13
  175. package/dist/integrations.mjs +2 -2
  176. package/dist/internal/app-markdown-runtime.d.mts +14 -14
  177. package/dist/internal/app-markdown-runtime.d.ts +14 -14
  178. package/dist/internal/build-runtime.cjs +36 -35
  179. package/dist/internal/build-runtime.d.mts +16 -16
  180. package/dist/internal/build-runtime.d.ts +16 -16
  181. package/dist/internal/build-runtime.mjs +35 -34
  182. package/dist/internal/cli-runtime.cjs +18 -18
  183. package/dist/internal/cli-runtime.mjs +17 -17
  184. package/dist/internal/client-error-overlay.cjs +4 -4
  185. package/dist/internal/client-error-overlay.mjs +1 -1
  186. package/dist/internal/client-runtime.cjs +4 -2
  187. package/dist/internal/client-runtime.d.mts +21 -21
  188. package/dist/internal/client-runtime.d.ts +21 -21
  189. package/dist/internal/client-runtime.mjs +3 -1
  190. package/dist/internal/compression-runtime.d.mts +13 -13
  191. package/dist/internal/compression-runtime.d.ts +13 -13
  192. package/dist/internal/config-runtime.cjs +10 -10
  193. package/dist/internal/config-runtime.d.mts +18 -18
  194. package/dist/internal/config-runtime.d.ts +18 -18
  195. package/dist/internal/config-runtime.mjs +9 -9
  196. package/dist/internal/form-actions.cjs +4 -3
  197. package/dist/internal/form-actions.d.mts +1 -1
  198. package/dist/internal/form-actions.d.ts +1 -1
  199. package/dist/internal/form-actions.mjs +3 -2
  200. package/dist/internal/infra-analytics-runtime.cjs +5 -5
  201. package/dist/internal/infra-analytics-runtime.mjs +3 -3
  202. package/dist/internal/island-value-store.d.mts +1 -1
  203. package/dist/internal/island-value-store.d.ts +1 -1
  204. package/dist/internal/islands-runtime.cjs +56 -0
  205. package/dist/internal/islands-runtime.d.mts +1 -1
  206. package/dist/internal/islands-runtime.d.ts +1 -1
  207. package/dist/internal/islands-runtime.mjs +57 -1
  208. package/dist/internal/isolated-boundary.d.mts +2 -2
  209. package/dist/internal/isolated-boundary.d.ts +2 -2
  210. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  211. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  212. package/dist/internal/production-runtime.cjs +15 -8
  213. package/dist/internal/production-runtime.d.mts +46 -30
  214. package/dist/internal/production-runtime.d.ts +46 -30
  215. package/dist/internal/production-runtime.mjs +14 -7
  216. package/dist/internal/server-fn-transform.cjs +13 -0
  217. package/dist/internal/server-fn-transform.d.mts +24 -0
  218. package/dist/internal/server-fn-transform.d.ts +24 -0
  219. package/dist/internal/server-fn-transform.mjs +13 -0
  220. package/dist/internal/server-tree.d.mts +1 -1
  221. package/dist/internal/server-tree.d.ts +1 -1
  222. package/dist/markdown.d.mts +13 -13
  223. package/dist/markdown.d.ts +13 -13
  224. package/dist/middleware.cjs +8 -8
  225. package/dist/middleware.d.mts +15 -15
  226. package/dist/middleware.d.ts +15 -15
  227. package/dist/middleware.mjs +7 -7
  228. package/dist/mobile.d.mts +37 -10
  229. package/dist/mobile.d.ts +37 -10
  230. package/dist/{navigation-delegate-8xg3Zvp4.d.ts → navigation-delegate.d-C0BbdUgN.d.mts} +1 -1
  231. package/dist/{navigation-delegate-ji6elCKy.d.mts → navigation-delegate.d-jArRF0ZP.d.ts} +1 -1
  232. package/dist/navigation.d.mts +17 -17
  233. package/dist/navigation.d.ts +17 -17
  234. package/dist/{nitro-YPSZBYDK.cjs → nitro-CK7M4RMY.cjs} +11 -11
  235. package/dist/{nitro-2Q5NVY7L.mjs → nitro-R444AF3O.mjs} +7 -7
  236. package/dist/observability.d.mts +1 -1
  237. package/dist/observability.d.ts +1 -1
  238. package/dist/plugin.cjs +29 -27
  239. package/dist/plugin.d.mts +17 -17
  240. package/dist/plugin.d.ts +17 -17
  241. package/dist/plugin.mjs +28 -26
  242. package/dist/{production-runtime-TdKaYRj0.d.ts → production-runtime.d-DFaQ1qaV.d.mts} +3 -3
  243. package/dist/{production-runtime-DXnQQkQf.d.mts → production-runtime.d-UnXmSS_S.d.ts} +3 -3
  244. package/dist/{programmatic-routes-client-Dh1SDLSM.d.mts → programmatic-routes-client.d-BIowUXQC.d.mts} +10 -2
  245. package/dist/{programmatic-routes-client-BwiTndEC.d.ts → programmatic-routes-client.d-VZ0qcbH4.d.ts} +10 -2
  246. package/dist/query/client.d.mts +1 -1
  247. package/dist/query/client.d.ts +1 -1
  248. package/dist/query/index.d.mts +1 -1
  249. package/dist/query/index.d.ts +1 -1
  250. package/dist/query/server.d.mts +1 -1
  251. package/dist/query/server.d.ts +1 -1
  252. package/dist/{render-plan-BPbwRbuN.d.ts → render-plan.d-BB6KrYjP.d.ts} +2 -2
  253. package/dist/{render-plan-BvCGXF6K.d.mts → render-plan.d-BNeqyPyJ.d.mts} +2 -2
  254. package/dist/renderer-client.cjs +8 -6
  255. package/dist/renderer-client.d.mts +19 -19
  256. package/dist/renderer-client.d.ts +19 -19
  257. package/dist/renderer-client.mjs +4 -2
  258. package/dist/{request-C_xTkJib.d.mts → request.d-BV1munmx.d.mts} +1 -1
  259. package/dist/{request-B8PGTZNR.d.ts → request.d-Bxhghm76.d.ts} +1 -1
  260. package/dist/request.d.mts +14 -14
  261. package/dist/request.d.ts +14 -14
  262. package/dist/{resolver-CJ-D9nP-.d.ts → resolver.d-BHyZgpa7.d.ts} +1 -1
  263. package/dist/{resolver-TDyZKgKI.d.mts → resolver.d-JnZKKsc5.d.mts} +1 -1
  264. package/dist/response.d-BolW0Vx_.d.mts +10 -0
  265. package/dist/response.d-BolW0Vx_.d.ts +10 -0
  266. package/dist/{route-rendering-DlddURL1.d.mts → route-rendering.d-BIf7zE9d.d.ts} +1 -1
  267. package/dist/{route-rendering-RNtcj607.d.ts → route-rendering.d-DShqKlgK.d.mts} +1 -1
  268. package/dist/{route-DFhZj6jN.d.ts → route.d-BaVH3V0w.d.mts} +1 -1
  269. package/dist/{route-2_yXC6gv.d.mts → route.d-DBTEqifW.d.ts} +1 -1
  270. package/dist/{router-B97eB0Mq.d.mts → router.d-BE7i84fb.d.mts} +1 -1
  271. package/dist/{router-qUVaoEN8.d.ts → router.d-Bw3K3b0a.d.ts} +1 -1
  272. package/dist/routes.cjs +3 -2
  273. package/dist/{routes-8PT9cl60.d.ts → routes.d-DVZQL0-H.d.ts} +3 -3
  274. package/dist/{routes-kEUsXHx3.d.mts → routes.d-_5tBQexL.d.mts} +3 -3
  275. package/dist/routes.d.mts +14 -14
  276. package/dist/routes.d.ts +14 -14
  277. package/dist/routes.mjs +2 -1
  278. package/dist/{rsc-pipeline-T3775JUA.mjs → rsc-pipeline-FBM6NFYY.mjs} +13 -13
  279. package/dist/{rsc-pipeline-L4XOZ2TE.cjs → rsc-pipeline-IQI5XQLS.cjs} +14 -14
  280. package/dist/{runtime-HRSFC4ZC.mjs → runtime-2JYIDUON.mjs} +14 -14
  281. package/dist/{runtime-BIBGJO7V.cjs → runtime-DXEVFYLE.cjs} +16 -16
  282. package/dist/{runtime-CihDZ2Rn.d.mts → runtime.d-3iJAKptR.d.mts} +2 -2
  283. package/dist/{runtime-C4CmlOOh.d.ts → runtime.d-BtL3PCL3.d.ts} +2 -2
  284. package/dist/{runtime-C8GUnNeP.d.ts → runtime.d-CQgoYR0Q.d.mts} +4 -4
  285. package/dist/{runtime-CaDswfWi.d.mts → runtime.d-CfhaLPl-.d.ts} +4 -4
  286. package/dist/{schema-dev-notice-LZ5NXGLN.mjs → schema-dev-notice-F6QYSOAI.mjs} +2 -2
  287. package/dist/{schema-dev-notice-XV7GZ3QJ.cjs → schema-dev-notice-UU7DMZEU.cjs} +3 -3
  288. package/dist/{search-client-BTXL5XWD.mjs → search-client-OXH6GBNO.mjs} +5 -3
  289. package/dist/search-client-ZZLKVO5R.cjs +15 -0
  290. package/dist/server-action-security.cjs +2 -2
  291. package/dist/server-action-security.d.mts +1 -1
  292. package/dist/server-action-security.d.ts +1 -1
  293. package/dist/server-action-security.mjs +1 -1
  294. package/dist/server-fn-client.d.mts +5 -5
  295. package/dist/server-fn-client.d.ts +5 -5
  296. package/dist/server-fn.cjs +3 -3
  297. package/dist/server-fn.d.mts +3 -3
  298. package/dist/server-fn.d.ts +3 -3
  299. package/dist/server-fn.mjs +2 -2
  300. package/dist/server-plugins.d.mts +14 -14
  301. package/dist/server-plugins.d.ts +14 -14
  302. package/dist/server-query-client.cjs +4 -3
  303. package/dist/server-query-client.d.mts +5 -5
  304. package/dist/server-query-client.d.ts +5 -5
  305. package/dist/server-query-client.mjs +3 -2
  306. package/dist/server-query.cjs +4 -4
  307. package/dist/server-query.d.mts +2 -2
  308. package/dist/server-query.d.ts +2 -2
  309. package/dist/server-query.mjs +3 -3
  310. package/dist/server.cjs +64 -62
  311. package/dist/server.d.mts +28 -29
  312. package/dist/server.d.ts +28 -29
  313. package/dist/server.mjs +38 -36
  314. package/dist/{spa-router-Dlv5ofg0.d.mts → spa-router.d-C5opIgXg.d.ts} +5 -5
  315. package/dist/{spa-router-qapSboKz.d.ts → spa-router.d-D63jb6nX.d.mts} +5 -5
  316. package/dist/storage.d.mts +2 -2
  317. package/dist/storage.d.ts +2 -2
  318. package/dist/testing.cjs +12 -11
  319. package/dist/testing.d.mts +14 -14
  320. package/dist/testing.d.ts +14 -14
  321. package/dist/testing.mjs +9 -8
  322. package/dist/theme/client.d.mts +1 -1
  323. package/dist/theme/client.d.ts +1 -1
  324. package/dist/theme/index.d.mts +2 -2
  325. package/dist/theme/index.d.ts +2 -2
  326. package/dist/theme/runtime.d.mts +1 -1
  327. package/dist/theme/runtime.d.ts +1 -1
  328. package/dist/theme/server.d.mts +1 -1
  329. package/dist/theme/server.d.ts +1 -1
  330. package/dist/{utils-DyvlSxFk.d.mts → utils.d-CO-U4OVZ.d.mts} +1 -1
  331. package/dist/{utils-A-cYF81u.d.ts → utils.d-CkpTqTsC.d.ts} +1 -1
  332. package/dist/version.cjs +2 -2
  333. package/dist/version.mjs +1 -1
  334. package/dist/vite.cjs +29 -27
  335. package/dist/vite.d.mts +20 -19
  336. package/dist/vite.d.ts +20 -19
  337. package/dist/vite.mjs +28 -26
  338. package/dist/workflows.cjs +4 -4
  339. package/dist/workflows.d.mts +1 -1
  340. package/dist/workflows.d.ts +1 -1
  341. package/dist/workflows.mjs +3 -3
  342. package/package.json +10 -5
  343. package/dist/base-path-leyrqXbX.d.mts +0 -19
  344. package/dist/base-path-leyrqXbX.d.ts +0 -19
  345. package/dist/chunk-OTOOJIUB.mjs +0 -34
  346. package/dist/search-client-QCYAL6AY.cjs +0 -13
  347. /package/dist/{chunk-recovery-lnQFzcQP.d.mts → chunk-recovery.d-lnQFzcQP.d.mts} +0 -0
  348. /package/dist/{chunk-recovery-lnQFzcQP.d.ts → chunk-recovery.d-lnQFzcQP.d.ts} +0 -0
  349. /package/dist/{client-cache-Deoqq-nM.d.ts → client-cache.d-Deoqq-nM.d.ts} +0 -0
  350. /package/dist/{client-cache-di_Nasxa.d.mts → client-cache.d-di_Nasxa.d.mts} +0 -0
  351. /package/dist/{config-CnhyvvmT.d.mts → config.d-CnhyvvmT.d.mts} +0 -0
  352. /package/dist/{config-CnhyvvmT.d.ts → config.d-CnhyvvmT.d.ts} +0 -0
  353. /package/dist/{endpoint-BgHn0lhl.d.ts → endpoint.d-BgHn0lhl.d.ts} +0 -0
  354. /package/dist/{endpoint-BkMSCRf6.d.mts → endpoint.d-BkMSCRf6.d.mts} +0 -0
  355. /package/dist/{image-config-CeDgNyX4.d.mts → image-config.d-CeDgNyX4.d.mts} +0 -0
  356. /package/dist/{image-config-CeDgNyX4.d.ts → image-config.d-CeDgNyX4.d.ts} +0 -0
  357. /package/dist/{instrumentation-runtime-CX9Zh-16.d.mts → instrumentation-runtime.d-CX9Zh-16.d.mts} +0 -0
  358. /package/dist/{instrumentation-runtime-CX9Zh-16.d.ts → instrumentation-runtime.d-CX9Zh-16.d.ts} +0 -0
  359. /package/dist/{island-value-protocol-BRayRghM.d.mts → island-value-protocol.d-BRayRghM.d.mts} +0 -0
  360. /package/dist/{island-value-protocol-BRayRghM.d.ts → island-value-protocol.d-BRayRghM.d.ts} +0 -0
  361. /package/dist/{island-CfGru1MO.d.mts → island.d-CfGru1MO.d.mts} +0 -0
  362. /package/dist/{island-CfGru1MO.d.ts → island.d-CfGru1MO.d.ts} +0 -0
  363. /package/dist/{layers-CcS42OGR.d.mts → layers.d-CcS42OGR.d.mts} +0 -0
  364. /package/dist/{layers-CcS42OGR.d.ts → layers.d-CcS42OGR.d.ts} +0 -0
  365. /package/dist/{lifecycle-C2aLBOwu.d.mts → lifecycle.d-C2aLBOwu.d.mts} +0 -0
  366. /package/dist/{lifecycle-C2aLBOwu.d.ts → lifecycle.d-C2aLBOwu.d.ts} +0 -0
  367. /package/dist/{observability-B2363jB6.d.mts → observability.d-B2363jB6.d.mts} +0 -0
  368. /package/dist/{observability-B2363jB6.d.ts → observability.d-B2363jB6.d.ts} +0 -0
  369. /package/dist/{params-BALtrRim.d.ts → params.d-BALtrRim.d.ts} +0 -0
  370. /package/dist/{params-ry-lxqmy.d.mts → params.d-ry-lxqmy.d.mts} +0 -0
  371. /package/dist/{production-vite-BQFAlG7n.d.mts → production-vite.d-BQFAlG7n.d.mts} +0 -0
  372. /package/dist/{production-vite-BQFAlG7n.d.ts → production-vite.d-BQFAlG7n.d.ts} +0 -0
  373. /package/dist/{route-pattern-CVsVbq5n.d.mts → route-pattern.d-CVsVbq5n.d.mts} +0 -0
  374. /package/dist/{route-pattern-CVsVbq5n.d.ts → route-pattern.d-CVsVbq5n.d.ts} +0 -0
  375. /package/dist/{server-client-bridge-DKWDl5NB.d.mts → server-client-bridge.d-DKWDl5NB.d.mts} +0 -0
  376. /package/dist/{server-client-bridge-DKWDl5NB.d.ts → server-client-bridge.d-DKWDl5NB.d.ts} +0 -0
  377. /package/dist/{server-fn-error-DrcH9cc1.d.mts → server-fn-error.d-DrcH9cc1.d.mts} +0 -0
  378. /package/dist/{server-fn-error-DrcH9cc1.d.ts → server-fn-error.d-DrcH9cc1.d.ts} +0 -0
  379. /package/dist/{server-query-runtime-DXRNhX_3.d.ts → server-query-runtime.d-DXRNhX_3.d.ts} +0 -0
  380. /package/dist/{server-query-runtime-aP52iuL5.d.mts → server-query-runtime.d-aP52iuL5.d.mts} +0 -0
  381. /package/dist/{types-BnIqOn9w.d.mts → types.d-BnIqOn9w.d.mts} +0 -0
  382. /package/dist/{types-BnIqOn9w.d.ts → types.d-BnIqOn9w.d.ts} +0 -0
  383. /package/dist/{types-C41ePjvP.d.mts → types.d-C41ePjvP.d.mts} +0 -0
  384. /package/dist/{types-C41ePjvP.d.ts → types.d-C41ePjvP.d.ts} +0 -0
  385. /package/dist/{types-DQnyD3VD.d.mts → types.d-DQnyD3VD.d.mts} +0 -0
  386. /package/dist/{types-DQnyD3VD.d.ts → types.d-DQnyD3VD.d.ts} +0 -0
  387. /package/dist/{workflows-CRMzQZ3k.d.mts → workflows.d-CRMzQZ3k.d.mts} +0 -0
  388. /package/dist/{workflows-CRMzQZ3k.d.ts → workflows.d-CRMzQZ3k.d.ts} +0 -0
@@ -4,14 +4,15 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkX2EL3BLHcjs = require('./chunk-X2EL3BLH.cjs');
7
+
8
+ var _chunk5N7QAGEAcjs = require('./chunk-5N7QAGEA.cjs');
8
9
 
9
10
 
10
11
 
11
12
  var _chunkV3UOEWCBcjs = require('./chunk-V3UOEWCB.cjs');
12
13
 
13
14
 
14
- var _chunkLYWAGXXWcjs = require('./chunk-LYWAGXXW.cjs');
15
+ var _chunkVITZRYW3cjs = require('./chunk-VITZRYW3.cjs');
15
16
 
16
17
 
17
18
 
@@ -26,7 +27,7 @@ function hasFarmDocsRuntimeAdapter(docs) {
26
27
  }
27
28
  function assertFarmDocsAdapterServesNoGuardedPages(docs, options, isPathGuarded) {
28
29
  if (!isPathGuarded || !hasFarmDocsRuntimeAdapter(docs)) return;
29
- const guarded = _chunkX2EL3BLHcjs.discoverFarmDocsPages.call(void 0, _chunkX2EL3BLHcjs.resolveFarmDocsContentDir.call(void 0, docs, options), docs).filter((page) => isPathGuarded(page.href) || isPathGuarded(_chunkX2EL3BLHcjs.getFarmDocsMarkdownPath.call(void 0, page.href))).map((page) => page.href);
30
+ const guarded = _chunk5N7QAGEAcjs.getFarmDocsRoots.call(void 0, docs).flatMap((root) => _chunk5N7QAGEAcjs.discoverFarmDocsPages.call(void 0, _chunk5N7QAGEAcjs.resolveFarmDocsContentDir.call(void 0, root, options), root)).filter((page) => isPathGuarded(page.href) || isPathGuarded(_chunk5N7QAGEAcjs.getFarmDocsMarkdownPath.call(void 0, page.href))).map((page) => page.href);
30
31
  if (guarded.length === 0) return;
31
32
  throw new Error(
32
33
  `Docs pages behind a path guard (${guarded.join(", ")}) would be public: the docs adapter ${JSON.stringify(docs.adapter.id)} serves their content in llms-full.txt, search, Markdown, and MCP without running the app's guards. Move those pages out of the docs content directory, or set docs.adapter = false to use Farm's built-in docs runtime, which keeps guarded pages off anonymous surfaces.`
@@ -39,12 +40,20 @@ async function loadFarmDocsConfigModule(docs, loadModule) {
39
40
  const config = _nullishCoalesce(_optionalChain([loaded, 'optionalAccess', _4 => _4.default]), () => ( loaded));
40
41
  return config && typeof config === "object" ? config : void 0;
41
42
  }
43
+ function getFarmDocsConfigModuleRoot(moduleConfig, entry) {
44
+ const { roots, ...shared } = moduleConfig;
45
+ const route = entry.replace(/^\/+|\/+$/g, "");
46
+ const own = Array.isArray(roots) ? roots.find(
47
+ (root) => Boolean(root) && typeof root === "object" && typeof root.entry === "string" && root.entry.replace(/^\/+|\/+$/g, "") === route
48
+ ) : void 0;
49
+ return own ? { ...shared, ...own } : shared;
50
+ }
42
51
  function createFarmDocsAdapterRuntimeConfig(docs, options, moduleConfig) {
43
52
  return {
44
- ...moduleConfig ? { ...moduleConfig, ...docs.configOverrides } : _nullishCoalesce(docs.runtimeConfig, () => ( docs.config)),
53
+ ...moduleConfig ? { ...getFarmDocsConfigModuleRoot(moduleConfig, docs.entry), ...docs.configOverrides } : _nullishCoalesce(docs.runtimeConfig, () => ( docs.config)),
45
54
  entry: docs.config.entry || docs.entry.replace(/^\/+|\/+$/g, "") || "docs",
46
55
  docsPath: docs.entry,
47
- contentDir: _chunkX2EL3BLHcjs.resolveFarmDocsContentDir.call(void 0, docs, options)
56
+ contentDir: _chunk5N7QAGEAcjs.resolveFarmDocsContentDir.call(void 0, docs, options)
48
57
  };
49
58
  }
50
59
  function getFarmDocsAdapterStylesheets(options) {
@@ -56,6 +65,11 @@ async function compileFarmDocsAdapterEdgeManifest(docs, options) {
56
65
  if (!hasFarmDocsRuntimeAdapter(docs)) {
57
66
  throw new Error("Farm docs adapter requires server and react runtime entrypoints.");
58
67
  }
68
+ if (_optionalChain([docs, 'access', _5 => _5.roots, 'optionalAccess', _6 => _6.length])) {
69
+ throw new Error(
70
+ "Several docs roots are not supported on edge deployments yet; they need a Node.js deployment target."
71
+ );
72
+ }
59
73
  const compilerEntry = docs.adapter.edgeCompiler;
60
74
  if (!compilerEntry) {
61
75
  throw new Error(
@@ -96,6 +110,27 @@ async function compileFarmDocsAdapterEdgeManifest(docs, options) {
96
110
  }
97
111
  return manifest;
98
112
  }
113
+ async function listFarmDocsAdapterPages(docs, options) {
114
+ if (!hasFarmDocsRuntimeAdapter(docs)) return null;
115
+ const requireFromApp = _module.createRequire.call(void 0, _path2.default.join(options.root, "package.json"));
116
+ const serverModule = await import(
117
+ /* @vite-ignore */
118
+ _url.pathToFileURL.call(void 0, requireFromApp.resolve(docs.adapter.server)).href
119
+ );
120
+ if (typeof serverModule.listFarmDocsPages !== "function") return null;
121
+ const listPages = serverModule.listFarmDocsPages;
122
+ const pages = (await Promise.all(
123
+ _chunk5N7QAGEAcjs.getFarmDocsRoots.call(void 0, docs).map(
124
+ (root) => listPages(createFarmDocsAdapterRuntimeConfig(root, options), { rootDir: options.root })
125
+ )
126
+ )).flat();
127
+ if (!Array.isArray(pages) || pages.some((page) => typeof page !== "string" || !page.startsWith("/"))) {
128
+ throw new Error(
129
+ `Farm docs adapter ${JSON.stringify(docs.adapter.id)} listed docs pages that are not absolute paths.`
130
+ );
131
+ }
132
+ return [...new Set(pages)];
133
+ }
99
134
  async function createFarmDocsAdapterHandler(docs, options) {
100
135
  if (!hasFarmDocsRuntimeAdapter(docs)) {
101
136
  throw new Error("Farm docs adapter requires server and react runtime entrypoints.");
@@ -104,26 +139,36 @@ async function createFarmDocsAdapterHandler(docs, options) {
104
139
  const serverModule = await options.loadModule(
105
140
  docs.adapter.server
106
141
  );
107
- if (typeof serverModule.createFarmDocsRuntimeHandler !== "function") {
142
+ const multiRoot = Boolean(_optionalChain([docs, 'access', _7 => _7.roots, 'optionalAccess', _8 => _8.length]));
143
+ const handlerExport = multiRoot ? "createFarmDocsMultiRuntimeHandler" : "createFarmDocsRuntimeHandler";
144
+ if (typeof serverModule[handlerExport] !== "function") {
108
145
  const adapterId = JSON.stringify(docs.adapter.id);
109
146
  const serverEntry = JSON.stringify(docs.adapter.server);
110
147
  throw new Error(
111
- `Farm docs adapter ${adapterId} does not export createFarmDocsRuntimeHandler from ${serverEntry}. Upgrade the adapter to a runtime-enabled release.`
148
+ `Farm docs adapter ${adapterId} does not export ${handlerExport} from ${serverEntry}. ` + (multiRoot ? "Upgrade the adapter to a release that serves several docs roots, or remove the roots." : "Upgrade the adapter to a runtime-enabled release.")
112
149
  );
113
150
  }
114
- const runtimeConfig = createFarmDocsAdapterRuntimeConfig(
115
- docs,
116
- options,
117
- await loadFarmDocsConfigModule(docs, options.loadModule)
118
- );
119
- return serverModule.createFarmDocsRuntimeHandler(runtimeConfig, {
151
+ const moduleConfig = await loadFarmDocsConfigModule(docs, options.loadModule);
152
+ const handlerOptions = {
120
153
  rootDir: options.root,
121
154
  clientEntry: options.clientEntry,
122
155
  stylesheets: getFarmDocsAdapterStylesheets(options),
123
156
  resolveLayoutFonts: options.resolveLayoutFonts,
124
157
  loadReactModule: () => options.loadModule(docs.adapter.react),
125
158
  ...options.registerMCPServer ? { registerMCPServer: options.registerMCPServer } : {}
126
- });
159
+ };
160
+ if (multiRoot) {
161
+ return serverModule.createFarmDocsMultiRuntimeHandler(
162
+ _chunk5N7QAGEAcjs.getFarmDocsRoots.call(void 0, docs).map(
163
+ (root) => createFarmDocsAdapterRuntimeConfig(root, options, moduleConfig)
164
+ ),
165
+ handlerOptions
166
+ );
167
+ }
168
+ return serverModule.createFarmDocsRuntimeHandler(
169
+ createFarmDocsAdapterRuntimeConfig(docs, options, moduleConfig),
170
+ handlerOptions
171
+ );
127
172
  }
128
173
 
129
174
  // src/docs/api.ts
@@ -158,7 +203,7 @@ function omitHeadBody(response) {
158
203
  });
159
204
  }
160
205
  function normalizeAction(value) {
161
- return _optionalChain([value, 'optionalAccess', _5 => _5.trim, 'call', _6 => _6(), 'access', _7 => _7.toLowerCase, 'call', _8 => _8(), 'access', _9 => _9.replace, 'call', _10 => _10(/_/g, "-")]) || void 0;
206
+ return _optionalChain([value, 'optionalAccess', _9 => _9.trim, 'call', _10 => _10(), 'access', _11 => _11.toLowerCase, 'call', _12 => _12(), 'access', _13 => _13.replace, 'call', _14 => _14(/_/g, "-")]) || void 0;
162
207
  }
163
208
  function getDocsTitle(docs) {
164
209
  return typeof docs.config.nav === "object" && docs.config.nav && "title" in docs.config.nav ? String(docs.config.nav.title || "Documentation") : "Documentation";
@@ -257,25 +302,25 @@ function getDocsAPIFormat(request) {
257
302
  return normalizeAction(url.searchParams.get("format") || url.searchParams.get("type")) || getDocsAPIPathTarget(request).format;
258
303
  }
259
304
  function getDocsDescription(docs) {
260
- return _optionalChain([docs, 'access', _11 => _11.config, 'access', _12 => _12.metadata, 'optionalAccess', _13 => _13.description]);
305
+ return _optionalChain([docs, 'access', _15 => _15.config, 'access', _16 => _16.metadata, 'optionalAccess', _17 => _17.description]);
261
306
  }
262
307
  function getLoadedDocsPages(context) {
263
- return _chunkX2EL3BLHcjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs).filter((page) => !context.isPathGuarded(page.href)).map((page) => _chunkX2EL3BLHcjs.loadFarmDocsPage.call(void 0, context.contentDir, context.docs, page.slug)).filter((page) => Boolean(page));
308
+ return _chunk5N7QAGEAcjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs).filter((page) => !context.isPathGuarded(page.href)).map((page) => _chunk5N7QAGEAcjs.loadFarmDocsPage.call(void 0, context.contentDir, context.docs, page.slug)).filter((page) => Boolean(page));
264
309
  }
265
310
  function toDocsSourcePage(page) {
266
311
  return {
267
- ..._chunkX2EL3BLHcjs.toFarmDocsMarkdownPage.call(void 0, page),
312
+ ..._chunk5N7QAGEAcjs.toFarmDocsMarkdownPage.call(void 0, page),
268
313
  sourcePath: page.sourcePath
269
314
  };
270
315
  }
271
316
  function toDocsSitemapPage(page) {
272
317
  return {
273
- ..._chunkX2EL3BLHcjs.toFarmDocsMarkdownPage.call(void 0, page),
318
+ ..._chunk5N7QAGEAcjs.toFarmDocsMarkdownPage.call(void 0, page),
274
319
  sourcePath: page.sourcePath
275
320
  };
276
321
  }
277
322
  function toDocsLlmsPage(page) {
278
- return _chunkX2EL3BLHcjs.toFarmDocsMarkdownPage.call(void 0, page);
323
+ return _chunk5N7QAGEAcjs.toFarmDocsMarkdownPage.call(void 0, page);
279
324
  }
280
325
  function getDocsLlmsOptions(context, request) {
281
326
  const configured = isRecord(context.docs.config.llmsTxt) ? context.docs.config.llmsTxt : {};
@@ -362,7 +407,7 @@ function renderAgentsDocument(context, request) {
362
407
  function buildAgentSpec(context, request) {
363
408
  const url = new URL(request.url);
364
409
  const origin = url.origin;
365
- const pages = _chunkX2EL3BLHcjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs).filter(
410
+ const pages = _chunk5N7QAGEAcjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs).filter(
366
411
  (page) => !context.isPathGuarded(page.href)
367
412
  );
368
413
  const spec = _chunkV3UOEWCBcjs.docsEngine.call(void 0, ).buildDocsAgentDiscoverySpec(getDocsDiscoveryOptions(context, request));
@@ -450,7 +495,7 @@ function buildPublicConfig(context) {
450
495
  };
451
496
  }
452
497
  function buildDiagnostics(context) {
453
- const pages = _chunkX2EL3BLHcjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs);
498
+ const pages = _chunk5N7QAGEAcjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs);
454
499
  const diagnostics = _chunkV3UOEWCBcjs.docsEngine.call(void 0, ).buildDocsDiagnostics(context.docs.config, {
455
500
  entry: context.docs.entry,
456
501
  mcp: {
@@ -500,19 +545,19 @@ async function searchDocs(context, request, query) {
500
545
  const page = sourcePageByUrl.get(pageUrl);
501
546
  return {
502
547
  ...result,
503
- title: _optionalChain([page, 'optionalAccess', _14 => _14.title]) || result.content,
504
- href: _optionalChain([page, 'optionalAccess', _15 => _15.url]) || pageUrl,
505
- description: result.description || _optionalChain([page, 'optionalAccess', _16 => _16.description])
548
+ title: _optionalChain([page, 'optionalAccess', _18 => _18.title]) || result.content,
549
+ href: _optionalChain([page, 'optionalAccess', _19 => _19.url]) || pageUrl,
550
+ description: result.description || _optionalChain([page, 'optionalAccess', _20 => _20.description])
506
551
  };
507
552
  });
508
553
  }
509
554
  async function resolveAPIContext(options) {
510
555
  await _chunkV3UOEWCBcjs.loadFarmDocsEngine.call(void 0, );
511
556
  const runtimeConfig = globalThis.__FARM_DOCS_RUNTIME_CONFIG__;
512
- const root = options.rootDir || options.root || _optionalChain([runtimeConfig, 'optionalAccess', _17 => _17.root]) || process.cwd();
513
- const srcDir = options.srcDir || _optionalChain([runtimeConfig, 'optionalAccess', _18 => _18.srcDir]) || "src";
557
+ const root = options.rootDir || options.root || _optionalChain([runtimeConfig, 'optionalAccess', _21 => _21.root]) || process.cwd();
558
+ const srcDir = options.srcDir || _optionalChain([runtimeConfig, 'optionalAccess', _22 => _22.srcDir]) || "src";
514
559
  const canUseRuntimeDocs = options.docs === void 0 && options.config === void 0 && options.configPath === void 0 && options.entry === void 0 && options.docsPath === void 0 && options.contentDir === void 0 && options.root === void 0 && options.rootDir === void 0 && options.srcDir === void 0;
515
- const docsInput = _nullishCoalesce(_nullishCoalesce(options.docs, () => ( (canUseRuntimeDocs ? _optionalChain([runtimeConfig, 'optionalAccess', _19 => _19.docs]) : void 0))), () => ( {
560
+ const docsInput = _nullishCoalesce(_nullishCoalesce(options.docs, () => ( (canUseRuntimeDocs ? _optionalChain([runtimeConfig, 'optionalAccess', _23 => _23.docs]) : void 0))), () => ( {
516
561
  enabled: true,
517
562
  entry: options.entry,
518
563
  docsPath: options.docsPath,
@@ -520,13 +565,13 @@ async function resolveAPIContext(options) {
520
565
  config: options.config,
521
566
  configPath: options.configPath
522
567
  }));
523
- const docs = isResolvedDocsConfig(docsInput) ? docsInput : await _chunkLYWAGXXWcjs.resolveDocsConfig.call(void 0, docsInput, { root, srcDir });
524
- const guardedPaths = new Set(_nullishCoalesce(_optionalChain([runtimeConfig, 'optionalAccess', _20 => _20.guardedPaths]), () => ( [])));
568
+ const docs = isResolvedDocsConfig(docsInput) ? docsInput : await _chunkVITZRYW3cjs.resolveDocsConfig.call(void 0, docsInput, { root, srcDir });
569
+ const guardedPaths = new Set(_nullishCoalesce(_optionalChain([runtimeConfig, 'optionalAccess', _24 => _24.guardedPaths]), () => ( [])));
525
570
  return {
526
571
  root,
527
572
  srcDir,
528
573
  docs,
529
- contentDir: _chunkX2EL3BLHcjs.resolveFarmDocsContentDir.call(void 0, docs, { root, srcDir }),
574
+ contentDir: _chunk5N7QAGEAcjs.resolveFarmDocsContentDir.call(void 0, docs, { root, srcDir }),
530
575
  diagnostics: options.diagnostics === true,
531
576
  isPathGuarded: _nullishCoalesce(options.isPathGuarded, () => ( ((pathname) => guardedPaths.has(pathname))))
532
577
  };
@@ -585,12 +630,12 @@ async function handleDocsAPIGet(request, context) {
585
630
  if (format === "markdown" || url.pathname.endsWith(".md")) {
586
631
  const pathParam = url.searchParams.get("path") || url.searchParams.get("slug");
587
632
  const slug = normalizeDocsApiSlug(_nullishCoalesce(_nullishCoalesce(pathParam, () => ( pathTarget.slug)), () => ( "")), context.docs);
588
- const page = _chunkX2EL3BLHcjs.loadFarmDocsPage.call(void 0, context.contentDir, context.docs, slug);
633
+ const page = _chunk5N7QAGEAcjs.loadFarmDocsPage.call(void 0, context.contentDir, context.docs, slug);
589
634
  if (!page || context.isPathGuarded(page.href)) {
590
635
  return text("Docs page not found\n", "text/plain; charset=utf-8", { status: 404 });
591
636
  }
592
637
  return text(
593
- _chunkV3UOEWCBcjs.docsEngine.call(void 0, ).renderDocsMarkdownDocument(_chunkX2EL3BLHcjs.toFarmDocsMarkdownPage.call(void 0, page), {
638
+ _chunkV3UOEWCBcjs.docsEngine.call(void 0, ).renderDocsMarkdownDocument(_chunk5N7QAGEAcjs.toFarmDocsMarkdownPage.call(void 0, page), {
594
639
  origin: new URL(request.url).origin,
595
640
  llms: getDocsLlmsOptions(context, request),
596
641
  sitemap: context.docs.config.sitemap
@@ -663,4 +708,6 @@ function createFarmDocsAPIHandler(options = {}, cloudIntegration) {
663
708
 
664
709
 
665
710
 
666
- exports.hasFarmDocsRuntimeAdapter = hasFarmDocsRuntimeAdapter; exports.assertFarmDocsAdapterServesNoGuardedPages = assertFarmDocsAdapterServesNoGuardedPages; exports.compileFarmDocsAdapterEdgeManifest = compileFarmDocsAdapterEdgeManifest; exports.createFarmDocsAdapterHandler = createFarmDocsAdapterHandler; exports.isFarmDocsAPIRequest = isFarmDocsAPIRequest; exports.createDocsAPI = createDocsAPI; exports.createFarmDocsAPIHandler = createFarmDocsAPIHandler;
711
+
712
+
713
+ exports.hasFarmDocsRuntimeAdapter = hasFarmDocsRuntimeAdapter; exports.assertFarmDocsAdapterServesNoGuardedPages = assertFarmDocsAdapterServesNoGuardedPages; exports.getFarmDocsConfigModuleRoot = getFarmDocsConfigModuleRoot; exports.compileFarmDocsAdapterEdgeManifest = compileFarmDocsAdapterEdgeManifest; exports.listFarmDocsAdapterPages = listFarmDocsAdapterPages; exports.createFarmDocsAdapterHandler = createFarmDocsAdapterHandler; exports.isFarmDocsAPIRequest = isFarmDocsAPIRequest; exports.createDocsAPI = createDocsAPI; exports.createFarmDocsAPIHandler = createFarmDocsAPIHandler;
@@ -1086,16 +1086,20 @@ import { forwardRef, useEffect, useRef as useRef3, useCallback as useCallback3 }
1086
1086
  // src/provider.tsx
1087
1087
  import { createContext, useContext } from "react";
1088
1088
  import { jsx } from "react/jsx-runtime";
1089
- var FarmContext = createContext(null);
1089
+ var farmContext;
1090
+ function getFarmContext() {
1091
+ return farmContext ?? (farmContext = createContext(null));
1092
+ }
1090
1093
  function FarmProvider({ children, config }) {
1091
1094
  const value = {
1092
1095
  config,
1093
1096
  basePath: normalizeFarmBasePath(config.basePath)
1094
1097
  };
1098
+ const FarmContext = getFarmContext();
1095
1099
  return /* @__PURE__ */ jsx(FarmContext.Provider, { value, children });
1096
1100
  }
1097
1101
  function useOptionalFarm() {
1098
- return useContext(FarmContext);
1102
+ return useContext(getFarmContext());
1099
1103
  }
1100
1104
 
1101
1105
  // src/client/link.tsx
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } 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 _chunkJZMZKABScjs = require('./chunk-JZMZKABS.cjs');
3
+ var _chunkNWUHS6GVcjs = require('./chunk-NWUHS6GV.cjs');
4
4
 
5
5
 
6
6
  var _chunkSBDWCDS6cjs = require('./chunk-SBDWCDS6.cjs');
@@ -36,7 +36,7 @@ var _chunkSNP33A33cjs = require('./chunk-SNP33A33.cjs');
36
36
  var _chunkJYNNIGQOcjs = require('./chunk-JYNNIGQO.cjs');
37
37
 
38
38
 
39
- var _chunkXN2MB4QZcjs = require('./chunk-XN2MB4QZ.cjs');
39
+ var _chunkVQJYGZNXcjs = require('./chunk-VQJYGZNX.cjs');
40
40
 
41
41
 
42
42
 
@@ -111,9 +111,9 @@ var APIRouteManager = class {
111
111
  throw error;
112
112
  }
113
113
  if (process.env.FARM_VERBOSE) {
114
- _chunkXN2MB4QZcjs.logger.success(`Discovered ${this.routes.size} API routes`);
114
+ _chunkVQJYGZNXcjs.logger.success(`Discovered ${this.routes.size} API routes`);
115
115
  for (const [routePath, route] of this.routes) {
116
- _chunkXN2MB4QZcjs.logger.info(` ${route.methods.join(", ")} ${routePath}`);
116
+ _chunkVQJYGZNXcjs.logger.info(` ${route.methods.join(", ")} ${routePath}`);
117
117
  }
118
118
  }
119
119
  }
@@ -217,7 +217,7 @@ var APIRouteManager = class {
217
217
  async loadProgrammaticApiRoutes(appDir) {
218
218
  const candidateRoots = [path.dirname(appDir), appDir];
219
219
  const routeFiles = Array.from(
220
- new Set(candidateRoots.flatMap((srcRoot) => _chunkJZMZKABScjs.findProgrammaticRouteFilesInDir.call(void 0, srcRoot)))
220
+ new Set(candidateRoots.flatMap((srcRoot) => _chunkNWUHS6GVcjs.findProgrammaticRouteFilesInDir.call(void 0, srcRoot)))
221
221
  );
222
222
  if (routeFiles.length === 0) return;
223
223
  const { getProgrammaticRouteManifest } = await import("./routes.cjs");
@@ -238,7 +238,7 @@ var APIRouteManager = class {
238
238
  }
239
239
  handleLoadError(message, loadError) {
240
240
  const error = _chunkKORZ6PREcjs.explainMissingOptionalPeer.call(void 0, loadError, message.replace(/^Error loading /, ""));
241
- _chunkXN2MB4QZcjs.logger.error(`${message}: ${error}`);
241
+ _chunkVQJYGZNXcjs.logger.error(`${message}: ${error}`);
242
242
  if (this.throwOnLoadError || error instanceof APIRouteConflictError || error instanceof _chunkYTVSWXEZcjs.AmbiguousRouteError || error instanceof _chunkYTVSWXEZcjs.NonTerminalCatchAllRouteError) {
243
243
  throw error;
244
244
  }
@@ -56,13 +56,13 @@ import {
56
56
  } from "./chunk-VFXE6NWR.mjs";
57
57
  import {
58
58
  resolveWorkflowsConfig
59
- } from "./chunk-5V4KZOZO.mjs";
59
+ } from "./chunk-LZ4SB57H.mjs";
60
60
  import {
61
61
  resolveCronConfig
62
- } from "./chunk-UCQ52TJY.mjs";
62
+ } from "./chunk-X3JNB2TB.mjs";
63
63
  import {
64
64
  resolveServerActionsConfig
65
- } from "./chunk-BW6SCVYX.mjs";
65
+ } from "./chunk-FSQMN2MQ.mjs";
66
66
  import {
67
67
  resolveFarmThemeConfig
68
68
  } from "./chunk-YWPNIYUP.mjs";
@@ -71,7 +71,7 @@ import {
71
71
  } from "./chunk-N77JBPLC.mjs";
72
72
  import {
73
73
  resolveIntegrationPlugins
74
- } from "./chunk-HHFMECFO.mjs";
74
+ } from "./chunk-Y2G5SJFB.mjs";
75
75
  import {
76
76
  compileMiddlewareConfig
77
77
  } from "./chunk-EDPENAVO.mjs";
@@ -80,7 +80,7 @@ import {
80
80
  } from "./chunk-MU5V7XHL.mjs";
81
81
  import {
82
82
  logger
83
- } from "./chunk-2SVJGOAX.mjs";
83
+ } from "./chunk-Y3N5BFRJ.mjs";
84
84
  import {
85
85
  resolveFarmServerConfig
86
86
  } from "./chunk-GFT5AHAT.mjs";
@@ -565,29 +565,35 @@ async function resolveDocsConfig(userDocs, options = {}) {
565
565
  config: { entry: "docs", docsPath: "/docs" }
566
566
  };
567
567
  }
568
- const inlineDocsConfig = sanitizeDocsConfig(docsOptions.config || {});
568
+ const fileDocsConfig = omitDocsRoots(loadedConfig?.config);
569
+ const inlineRawDocsConfig = omitDocsRoots(docsOptions.config);
570
+ const inlineDocsConfig = sanitizeDocsConfig(inlineRawDocsConfig);
569
571
  const directDocsConfig = sanitizeDocsConfig({
570
572
  ...docsOptions,
571
573
  adapter: void 0,
572
574
  enabled: void 0,
575
+ prerender: void 0,
573
576
  config: void 0,
574
- configPath: void 0
577
+ configPath: void 0,
578
+ roots: void 0
575
579
  });
576
- const loadedDocsConfig = sanitizeDocsConfig(loadedConfig?.config || {});
580
+ const loadedDocsConfig = sanitizeDocsConfig(fileDocsConfig);
577
581
  const mergedDocsConfig = {
578
582
  ...loadedDocsConfig,
579
583
  ...inlineDocsConfig,
580
584
  ...directDocsConfig
581
585
  };
582
586
  const runtimeDocsConfig = {
583
- ...loadedConfig?.config || {},
584
- ...isRecord(docsOptions.config) ? docsOptions.config : {},
587
+ ...fileDocsConfig,
588
+ ...inlineRawDocsConfig,
585
589
  ...omitUndefined({
586
590
  ...docsOptions,
587
591
  adapter: void 0,
588
592
  enabled: void 0,
593
+ prerender: void 0,
589
594
  config: void 0,
590
- configPath: void 0
595
+ configPath: void 0,
596
+ roots: void 0
591
597
  })
592
598
  };
593
599
  const explicitRoute = typeof docsOptions.entry === "string" ? docsOptions.entry : void 0;
@@ -601,10 +607,33 @@ async function resolveDocsConfig(userDocs, options = {}) {
601
607
  docsOptions.contentDir || mergedDocsConfig.contentDir
602
608
  );
603
609
  const contentDir = configuredContentDir || await inferDocsContentDir(root, options.srcDir || "src", docsEntry);
610
+ const configOverrides = { ...inlineDocsConfig, ...directDocsConfig };
611
+ const configFileName = loadedConfig ? path3.relative(root, loadedConfig.configPath) || loadedConfig.configPath : "the docs config";
612
+ const roots = await resolveDocsRoots(
613
+ [
614
+ { field: `roots in ${configFileName}`, roots: docsRootsOf(loadedConfig?.config), file: true },
615
+ { field: "docs.config.roots", roots: docsRootsOf(docsOptions.config) },
616
+ { field: "docs.roots", roots: docsOptions.roots }
617
+ ],
618
+ {
619
+ root,
620
+ srcDir: options.srcDir || "src",
621
+ mainEntry: entryRoute,
622
+ mergedDocsConfig,
623
+ runtimeDocsConfig,
624
+ configOverrides
625
+ }
626
+ );
627
+ if (roots.length > 0 && !(docsOptions.adapter && docsOptions.adapter.server && docsOptions.adapter.react)) {
628
+ throw new Error(
629
+ `Docs roots require a docs adapter such as @farming-labs/farmjs; Farm's built-in docs renderer serves a single docs root. Install the adapter, or remove the roots from ${configFileName} and docs.roots.`
630
+ );
631
+ }
604
632
  return {
605
633
  enabled: true,
606
634
  entry: entryRoute,
607
635
  ...docsOptions.adapter ? { adapter: docsOptions.adapter } : {},
636
+ ...docsOptions.prerender === true ? { prerender: true } : {},
608
637
  contentDir,
609
638
  configPath: loadedConfig?.configPath,
610
639
  config: {
@@ -619,9 +648,90 @@ async function resolveDocsConfig(userDocs, options = {}) {
619
648
  docsPath: entryRoute,
620
649
  ...contentDir ? { contentDir } : {}
621
650
  },
622
- configOverrides: { ...inlineDocsConfig, ...directDocsConfig }
651
+ configOverrides,
652
+ ...roots.length > 0 ? { roots } : {}
623
653
  };
624
654
  }
655
+ function docsRootsOf(config) {
656
+ return isRecord(config) ? config.roots : void 0;
657
+ }
658
+ function omitDocsRoots(config) {
659
+ if (!isRecord(config)) return {};
660
+ const { roots: _roots, ...rest } = config;
661
+ return rest;
662
+ }
663
+ function omitKeys(value, keys) {
664
+ const output = { ...value };
665
+ for (const key of keys) delete output[key];
666
+ return output;
667
+ }
668
+ async function resolveDocsRoots(sources, options) {
669
+ const declared = /* @__PURE__ */ new Map();
670
+ for (const source of sources) {
671
+ if (source.roots === void 0) continue;
672
+ if (!Array.isArray(source.roots)) throw new Error(`${source.field} must be an array.`);
673
+ const seen = /* @__PURE__ */ new Set();
674
+ for (const [index, rootInput] of source.roots.entries()) {
675
+ const field = `${source.field}[${index}].entry`;
676
+ if (!isRecord(rootInput) || typeof rootInput.entry !== "string" || !rootInput.entry.trim()) {
677
+ throw new Error(`${field} must be a route such as "/guides/docs".`);
678
+ }
679
+ const entryRoute = normalizeDocsRoute(rootInput.entry);
680
+ if (entryRoute === "/") {
681
+ throw new Error(
682
+ `${field} cannot be "/"; a docs root at "/" leaves no route for the others.`
683
+ );
684
+ }
685
+ if (entryRoute === options.mainEntry || seen.has(entryRoute)) {
686
+ throw new Error(
687
+ `${field} ${JSON.stringify(entryRoute)} is already served by another docs root.`
688
+ );
689
+ }
690
+ seen.add(entryRoute);
691
+ const { entry: _entry, ...fields } = rootInput;
692
+ const layers = declared.get(entryRoute) ?? { file: {}, overrides: {} };
693
+ if (source.file) layers.file = fields;
694
+ else layers.overrides = { ...layers.overrides, ...fields };
695
+ declared.set(entryRoute, layers);
696
+ }
697
+ }
698
+ const roots = [];
699
+ for (const [entryRoute, { file, overrides }] of declared) {
700
+ const docsEntry = docsRouteToEntry(entryRoute);
701
+ const contentDir = normalizeDocsContentDir(
702
+ typeof overrides.contentDir === "string" && overrides.contentDir || typeof file.contentDir === "string" && file.contentDir || void 0
703
+ ) || await inferDocsContentDir(options.root, options.srcDir, docsEntry);
704
+ const routeConfig = {
705
+ entry: docsEntry,
706
+ docsPath: entryRoute,
707
+ contentDir
708
+ };
709
+ const rootOverrides = sanitizeDocsConfig(overrides);
710
+ roots.push({
711
+ entry: entryRoute,
712
+ contentDir,
713
+ config: omitUndefined({
714
+ ...options.mergedDocsConfig,
715
+ ...sanitizeDocsConfig(file),
716
+ ...rootOverrides,
717
+ ...routeConfig
718
+ }),
719
+ runtimeConfig: omitUndefined({
720
+ ...options.runtimeDocsConfig,
721
+ ...file,
722
+ ...overrides,
723
+ ...routeConfig
724
+ }),
725
+ // The adapter reads the config file's own root from the config module, so the main
726
+ // root's overrides leave out whatever that root sets itself.
727
+ configOverrides: {
728
+ ...omitKeys(options.configOverrides, Object.keys(file)),
729
+ ...rootOverrides
730
+ }
731
+ });
732
+ }
733
+ return roots;
734
+ }
625
735
  function validateRedirectConfigs(redirects, field) {
626
736
  for (const [index, redirect] of redirects.entries()) {
627
737
  validateConfigRouteSource(redirect.source, `${field}[${index}].source`);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getFarmRouteLabel
3
- } from "./chunk-JJOWY3XD.mjs";
3
+ } from "./chunk-QAIAFCRZ.mjs";
4
4
  import {
5
5
  classifyFarmAgent
6
6
  } from "./chunk-N77JBPLC.mjs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  findProgrammaticRouteFilesInDir
3
- } from "./chunk-2H3FJYY6.mjs";
3
+ } from "./chunk-FSXSQQTV.mjs";
4
4
  import {
5
5
  isFarmAPIRouteFileName
6
6
  } from "./chunk-YX6AFPXC.mjs";
@@ -36,7 +36,7 @@ import {
36
36
  } from "./chunk-TUOO6IK3.mjs";
37
37
  import {
38
38
  logger
39
- } from "./chunk-2SVJGOAX.mjs";
39
+ } from "./chunk-Y3N5BFRJ.mjs";
40
40
  import {
41
41
  AmbiguousRouteError,
42
42
  NonTerminalCatchAllRouteError
@@ -1086,16 +1086,20 @@ function createStore(initialState, extend) {
1086
1086
  // src/provider.tsx
1087
1087
 
1088
1088
  var _jsxruntime = require('react/jsx-runtime');
1089
- var FarmContext = _react.createContext.call(void 0, null);
1089
+ var farmContext;
1090
+ function getFarmContext() {
1091
+ return _nullishCoalesce(farmContext, () => ( (farmContext = _react.createContext.call(void 0, null))));
1092
+ }
1090
1093
  function FarmProvider({ children, config }) {
1091
1094
  const value = {
1092
1095
  config,
1093
1096
  basePath: _chunkD22BUQKWcjs.normalizeFarmBasePath.call(void 0, config.basePath)
1094
1097
  };
1098
+ const FarmContext = getFarmContext();
1095
1099
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FarmContext.Provider, { value, children });
1096
1100
  }
1097
1101
  function useOptionalFarm() {
1098
- return _react.useContext.call(void 0, FarmContext);
1102
+ return _react.useContext.call(void 0, getFarmContext());
1099
1103
  }
1100
1104
 
1101
1105
  // src/client/link.tsx
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  logger
3
- } from "./chunk-2SVJGOAX.mjs";
3
+ } from "./chunk-Y3N5BFRJ.mjs";
4
4
 
5
5
  // src/server/dev-loopback.ts
6
6
  import net from "net";
@@ -4,7 +4,7 @@
4
4
  var _chunkKORZ6PREcjs = require('./chunk-KORZ6PRE.cjs');
5
5
 
6
6
 
7
- var _chunkXN2MB4QZcjs = require('./chunk-XN2MB4QZ.cjs');
7
+ var _chunkVQJYGZNXcjs = require('./chunk-VQJYGZNX.cjs');
8
8
 
9
9
  // src/build/tailwind.ts
10
10
  var _path = require('path'); var _path2 = _interopRequireDefault(_path);
@@ -63,11 +63,11 @@ async function loadTailwindVitePlugin(options = {}, importTailwind = () => impor
63
63
  try {
64
64
  const tailwindVite = (await importTailwind()).default;
65
65
  const plugin = options.builder ? adaptTailwindVitePlugin(tailwindVite(), options.builder) : tailwindVite();
66
- if (options.announce) _chunkXN2MB4QZcjs.logger.info("\u{1F4E6} Enabled built-in Tailwind support (@tailwindcss/vite)");
66
+ if (options.announce) _chunkVQJYGZNXcjs.logger.info("\u{1F4E6} Enabled built-in Tailwind support (@tailwindcss/vite)");
67
67
  return plugin;
68
68
  } catch (error) {
69
69
  if (_chunkKORZ6PREcjs.isMissingPackageError.call(void 0, error, "@tailwindcss/vite")) return createMissingTailwindPlugin();
70
- _chunkXN2MB4QZcjs.logger.warn(
70
+ _chunkVQJYGZNXcjs.logger.warn(
71
71
  `Tailwind plugin auto-enable failed${options.label ? ` ${options.label}` : ""}; continuing without it: ${error.message}`
72
72
  );
73
73
  return void 0;
@@ -87,7 +87,7 @@ function createMissingTailwindPlugin() {
87
87
  }
88
88
  warnedMissingTailwind = true;
89
89
  const file = _path2.default.relative(root, id.split("?", 1)[0]).replace(/\\/g, "/");
90
- _chunkXN2MB4QZcjs.logger.warn(
90
+ _chunkVQJYGZNXcjs.logger.warn(
91
91
  `${file} imports Tailwind CSS, but @tailwindcss/vite is not installed; continuing without Tailwind. ${TAILWIND_VITE_INSTALL_HINT}`
92
92
  );
93
93
  return null;
@@ -7,10 +7,10 @@ import {
7
7
  } from "./chunk-YP7YO3S3.mjs";
8
8
  import {
9
9
  toPosixPath
10
- } from "./chunk-2SVJGOAX.mjs";
10
+ } from "./chunk-Y3N5BFRJ.mjs";
11
11
  import {
12
12
  searchParamsToObject
13
- } from "./chunk-TXK4D46O.mjs";
13
+ } from "./chunk-H3ASZDT7.mjs";
14
14
  import {
15
15
  createFarmRequestBodyErrorResponse,
16
16
  readFarmRequestBody,
@@ -0,0 +1,17 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/client-revalidation.ts
2
+ function attachRevalidationListeners(refresh, options = {}) {
3
+ if (typeof window === "undefined") return () => {
4
+ };
5
+ const onFocus = options.refetchOnWindowFocus === false ? void 0 : refresh;
6
+ const onOnline = options.refetchOnReconnect === false ? void 0 : refresh;
7
+ if (onFocus) window.addEventListener("focus", onFocus);
8
+ if (onOnline) window.addEventListener("online", onOnline);
9
+ return () => {
10
+ if (onFocus) window.removeEventListener("focus", onFocus);
11
+ if (onOnline) window.removeEventListener("online", onOnline);
12
+ };
13
+ }
14
+
15
+
16
+
17
+ exports.attachRevalidationListeners = attachRevalidationListeners;