@farm.js/core 0.1.51-beta.2 → 0.1.60

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 (321) hide show
  1. package/dist/{agent-mcp-handler-WWCC4GLG.mjs → agent-mcp-handler-7QMX2LUY.mjs} +7 -7
  2. package/dist/agent-mcp-handler-OV4WRFBL.cjs +18 -0
  3. package/dist/{agent-mcp.d-Z5DuwrqW.d.mts → agent-mcp.d-C-2S9bnP.d.mts} +1 -1
  4. package/dist/{agent-mcp.d-CR5Ov83o.d.ts → agent-mcp.d-SIoCUP1I.d.ts} +1 -1
  5. package/dist/agent-runtime.cjs +5 -5
  6. package/dist/agent-runtime.d.mts +2 -2
  7. package/dist/agent-runtime.d.ts +2 -2
  8. package/dist/agent-runtime.mjs +4 -4
  9. package/dist/{analyzer-Z6TNEAET.mjs → analyzer-22BEYV7S.mjs} +126 -12
  10. package/dist/{analyzer-T76CN3S7.cjs → analyzer-LCSI3NSH.cjs} +132 -18
  11. package/dist/api/client.cjs +5 -4
  12. package/dist/api/client.d.mts +1 -1
  13. package/dist/api/client.d.ts +1 -1
  14. package/dist/api/client.mjs +3 -2
  15. package/dist/api/client.native.cjs +45 -0
  16. package/dist/api/client.native.d.mts +23 -0
  17. package/dist/api/client.native.d.ts +23 -0
  18. package/dist/api/client.native.mjs +45 -0
  19. package/dist/api/route-manager.cjs +7 -7
  20. package/dist/api/route-manager.d.mts +4 -4
  21. package/dist/api/route-manager.d.ts +4 -4
  22. package/dist/api/route-manager.mjs +6 -6
  23. package/dist/api/runtime.cjs +5 -5
  24. package/dist/api/runtime.d.mts +3 -3
  25. package/dist/api/runtime.d.ts +3 -3
  26. package/dist/api/runtime.mjs +4 -4
  27. package/dist/{api-client.d-CeA6tNA6.d.mts → api-client.d-BNLXNCXJ.d.mts} +1 -1
  28. package/dist/{api-client.d-BWcqZciH.d.ts → api-client.d-ddQBNGtu.d.ts} +1 -1
  29. package/dist/api.cjs +11 -11
  30. package/dist/api.d.mts +5 -5
  31. package/dist/api.d.ts +5 -5
  32. package/dist/api.mjs +10 -10
  33. package/dist/{app-manifest.d-CAHkOBFa.d.mts → app-manifest.d-DrSAHskY.d.mts} +1 -1
  34. package/dist/{app-manifest.d-DiWr_Jfx.d.ts → app-manifest.d-Tb3CJpL4.d.ts} +1 -1
  35. package/dist/app-markdown.cjs +7 -7
  36. package/dist/app-markdown.d.mts +3 -3
  37. package/dist/app-markdown.d.ts +3 -3
  38. package/dist/app-markdown.mjs +6 -6
  39. package/dist/{app.d-DmapqkbV.d.ts → app.d-CmWlYpZJ.d.ts} +9 -4
  40. package/dist/{app.d-BfgJCsTQ.d.mts → app.d-D6QQM_kk.d.mts} +9 -4
  41. package/dist/{chunk-SN5VSO3Q.mjs → chunk-25T5VXOE.mjs} +7 -9
  42. package/dist/{chunk-GUJTVM36.cjs → chunk-2FRLSDBT.cjs} +1 -1
  43. package/dist/{chunk-LM2YOGDK.mjs → chunk-2I6PUKWJ.mjs} +1 -1
  44. package/dist/{chunk-EIMK7D2D.mjs → chunk-2KTYMMWT.mjs} +34 -4
  45. package/dist/{chunk-B5BBTPJQ.cjs → chunk-2OF5RPVU.cjs} +14 -14
  46. package/dist/chunk-37PYUEK5.mjs +533 -0
  47. package/dist/chunk-3HLQTOVU.cjs +6 -0
  48. package/dist/{chunk-VSLM6BHX.cjs → chunk-3OJNNCDL.cjs} +9 -9
  49. package/dist/{chunk-X3JNB2TB.mjs → chunk-3PX4AIXO.mjs} +36 -5
  50. package/dist/{chunk-UQHIWZZ6.cjs → chunk-3TL3AH25.cjs} +12 -6
  51. package/dist/chunk-3YMLUNL2.cjs +251 -0
  52. package/dist/chunk-4JTQPOKO.cjs +137 -0
  53. package/dist/{chunk-QXPSWMUD.cjs → chunk-4P23B7DU.cjs} +5 -5
  54. package/dist/{chunk-YVJV7Q2X.mjs → chunk-55U5QIXQ.mjs} +1 -1
  55. package/dist/{chunk-5N7QAGEA.cjs → chunk-5JNUYGNF.cjs} +37 -7
  56. package/dist/{chunk-NJLTQR5P.cjs → chunk-6BJJYOFL.cjs} +7 -7
  57. package/dist/chunk-6UUH4N4J.mjs +251 -0
  58. package/dist/{chunk-2NHOYYUT.mjs → chunk-7H45IJWO.mjs} +2 -2
  59. package/dist/{chunk-NN3MOPSI.mjs → chunk-A2MN5PQJ.mjs} +7 -7
  60. package/dist/{chunk-KY32FWK7.mjs → chunk-BHJAYPYU.mjs} +2 -2
  61. package/dist/{chunk-VAHBCI6X.mjs → chunk-BQWBHWEW.mjs} +26 -1
  62. package/dist/{chunk-KJMWAUKE.mjs → chunk-C7GJDVN4.mjs} +1 -1
  63. package/dist/{chunk-OYNNA4DD.cjs → chunk-CBKRS3M4.cjs} +9 -9
  64. package/dist/{chunk-I2DQGS56.cjs → chunk-CBOEJ5Z4.cjs} +39 -41
  65. package/dist/{chunk-BOVGCUDZ.cjs → chunk-CI4UNQHO.cjs} +2 -2
  66. package/dist/{chunk-S5AQ7CAC.cjs → chunk-CNNBFGL5.cjs} +39 -14
  67. package/dist/chunk-D2X5MUF5.cjs +1457 -0
  68. package/dist/{chunk-LEIXUFJN.cjs → chunk-D4MRNBVF.cjs} +10 -9
  69. package/dist/{chunk-2KVDHNQS.mjs → chunk-D7LTCK3U.mjs} +2 -2
  70. package/dist/{chunk-J3LBO2O4.cjs → chunk-DPJ66FSI.cjs} +22 -22
  71. package/dist/{chunk-NYQSC4DX.cjs → chunk-DZPR2W6U.cjs} +5 -5
  72. package/dist/{chunk-GW4YUIHW.mjs → chunk-E72UD6ME.mjs} +1 -1
  73. package/dist/chunk-EFZGB7JC.cjs +114 -0
  74. package/dist/{chunk-XXXRRVY6.mjs → chunk-EGVC4LIG.mjs} +5 -5
  75. package/dist/{chunk-72NBDVWQ.mjs → chunk-EXUONJYV.mjs} +3 -3
  76. package/dist/{chunk-VS7EHLLW.mjs → chunk-EZ34EHQP.mjs} +1 -1
  77. package/dist/{chunk-FM2UEKS2.mjs → chunk-F6Y7ZAPQ.mjs} +2 -2
  78. package/dist/{chunk-LMFJCXDD.mjs → chunk-FN5UEC7I.mjs} +1 -1
  79. package/dist/{chunk-E6LTONL4.mjs → chunk-FORSVMEJ.mjs} +2 -2
  80. package/dist/{chunk-6CYQQQGR.mjs → chunk-HPWB57PZ.mjs} +1 -1
  81. package/dist/{chunk-Y2G5SJFB.mjs → chunk-IFHPDLIS.mjs} +1 -1
  82. package/dist/{chunk-GNJIYJMS.cjs → chunk-IFXSBJPN.cjs} +16 -16
  83. package/dist/{chunk-74Z5KX4A.mjs → chunk-ILMTRGBG.mjs} +309 -56
  84. package/dist/{chunk-NXBHYO7S.cjs → chunk-JBK7UJOI.cjs} +14 -11
  85. package/dist/chunk-JI5D7MXY.mjs +137 -0
  86. package/dist/{chunk-QXJADAQB.cjs → chunk-JIBEFLQ7.cjs} +6 -2
  87. package/dist/{chunk-LZ4SB57H.mjs → chunk-JPIUGDK4.mjs} +1 -1
  88. package/dist/{chunk-Y3N5BFRJ.mjs → chunk-JSDV2NUN.mjs} +1 -1
  89. package/dist/{chunk-IRSS4HS4.mjs → chunk-K3RU5MOR.mjs} +1 -1
  90. package/dist/chunk-KPOMS5RO.cjs +237 -0
  91. package/dist/{chunk-LAZK6UV7.mjs → chunk-KVW2M6PI.mjs} +1 -1
  92. package/dist/{chunk-5IONBVJY.cjs → chunk-LB3DPQP6.cjs} +22 -22
  93. package/dist/{chunk-CZ35L6PL.mjs → chunk-LJVNMGE3.mjs} +10 -4
  94. package/dist/chunk-LLZSYFOM.mjs +6 -0
  95. package/dist/{chunk-X2AMN2WV.cjs → chunk-LQNW3ABP.cjs} +10 -10
  96. package/dist/{chunk-6ONBZGVH.cjs → chunk-LRB5OVRT.cjs} +3 -3
  97. package/dist/{chunk-WJFFPXCV.cjs → chunk-LT4VAF5Z.cjs} +12 -10
  98. package/dist/{chunk-F6TLUMH7.mjs → chunk-M53MIIXY.mjs} +1 -1
  99. package/dist/{chunk-HIFIG6HL.cjs → chunk-MEQN6DDA.cjs} +5 -5
  100. package/dist/{chunk-XLRLSTJ6.cjs → chunk-MGKW5XZE.cjs} +7 -7
  101. package/dist/{chunk-B3GZAQSC.cjs → chunk-MHLNWRCJ.cjs} +3 -3
  102. package/dist/{chunk-5ENW27SL.mjs → chunk-MMK4MZUN.mjs} +1 -1
  103. package/dist/{chunk-DTU4PX7V.cjs → chunk-MTWXOEI4.cjs} +927 -629
  104. package/dist/chunk-NHD7BAKD.mjs +1457 -0
  105. package/dist/{chunk-NPQLMP7M.cjs → chunk-NQJDO7K7.cjs} +32 -31
  106. package/dist/{chunk-76GHW3WI.cjs → chunk-O27PLNQZ.cjs} +10 -10
  107. package/dist/{chunk-PIHKO25G.mjs → chunk-OM7WILES.mjs} +1 -1
  108. package/dist/{chunk-7UPCJDB5.mjs → chunk-PCXIJKPM.mjs} +8 -8
  109. package/dist/{chunk-IWFV5ZED.cjs → chunk-PMJSG4JS.cjs} +1 -1
  110. package/dist/{chunk-JATTVAHA.cjs → chunk-PRFNLQSP.cjs} +4 -4
  111. package/dist/{chunk-SBABQKPT.cjs → chunk-QAS7KE7J.cjs} +7 -7
  112. package/dist/chunk-QGOZLGVP.mjs +0 -0
  113. package/dist/{chunk-VQJYGZNX.cjs → chunk-QMNWKQL4.cjs} +1 -1
  114. package/dist/{chunk-XB24LZWI.cjs → chunk-QRX4JRBO.cjs} +3 -3
  115. package/dist/{chunk-LNM57D3H.cjs → chunk-R53QDV6T.cjs} +4 -4
  116. package/dist/{chunk-SUV6YO4Q.cjs → chunk-RAWWCDCT.cjs} +5 -5
  117. package/dist/{chunk-LJDIFIJ2.mjs → chunk-RPUJHJHE.mjs} +4 -4
  118. package/dist/{chunk-G2KTRMWA.mjs → chunk-RSEAX5MW.mjs} +4 -0
  119. package/dist/chunk-SJRCWF4Z.mjs +237 -0
  120. package/dist/{chunk-IBSAYAWB.mjs → chunk-SX7EECTS.mjs} +8 -5
  121. package/dist/{chunk-KBRZAYI7.mjs → chunk-T4TBK5NY.mjs} +2 -2
  122. package/dist/{chunk-4SSRBCBR.mjs → chunk-T7I62A4C.mjs} +619 -321
  123. package/dist/{chunk-E36C43IX.cjs → chunk-U4BJKNIR.cjs} +6 -6
  124. package/dist/{chunk-YU42A5MA.cjs → chunk-UDJY2ZGY.cjs} +533 -280
  125. package/dist/{chunk-SHS6KXOZ.mjs → chunk-UR25Z5Z6.mjs} +1 -1
  126. package/dist/{chunk-WZW6LEHM.cjs → chunk-UYSTTPYJ.cjs} +1590 -1019
  127. package/dist/{chunk-KRRZJ77U.mjs → chunk-UZZ6IEQP.mjs} +3 -3
  128. package/dist/{chunk-EKJYE4Y7.cjs → chunk-VGG74PSU.cjs} +25 -25
  129. package/dist/{chunk-CTM4SPB3.mjs → chunk-VPTWKOCY.mjs} +20 -19
  130. package/dist/{chunk-UN6N623E.mjs → chunk-VQJHT2ND.mjs} +2 -2
  131. package/dist/{chunk-SJ23LJ3N.cjs → chunk-VVTJTMGQ.cjs} +3 -3
  132. package/dist/{chunk-KHXAJ2KA.cjs → chunk-W2RZ73IU.cjs} +12 -12
  133. package/dist/{chunk-JWI5PUO2.mjs → chunk-W2ZXMMHA.mjs} +2 -1
  134. package/dist/{chunk-BLD5GVCG.mjs → chunk-W6QLRQ3V.mjs} +1 -1
  135. package/dist/{chunk-AV26KHTG.mjs → chunk-X2CZTWQA.mjs} +2 -2
  136. package/dist/chunk-XPIPMWY3.cjs +1 -0
  137. package/dist/chunk-XTG73QZA.cjs +533 -0
  138. package/dist/{chunk-XPMC4E2G.cjs → chunk-XVSBALOY.cjs} +3 -3
  139. package/dist/{chunk-XYL4HSVC.cjs → chunk-YI6FKTTN.cjs} +38 -7
  140. package/dist/{chunk-N77JBPLC.mjs → chunk-YSXTNSXS.mjs} +10 -8
  141. package/dist/{chunk-EHB77D5U.cjs → chunk-ZDAEHG2O.cjs} +3 -3
  142. package/dist/{chunk-PMKUU273.mjs → chunk-ZFUKPWFC.mjs} +1226 -655
  143. package/dist/{chunk-E73PGHSR.mjs → chunk-ZMHAFH4R.mjs} +8 -8
  144. package/dist/{chunk-ZOWNWHK6.cjs → chunk-ZNH6NR3H.cjs} +2 -2
  145. package/dist/chunk-ZNXTU4YH.mjs +114 -0
  146. package/dist/{chunk-PFV2KPDZ.cjs → chunk-ZOYKJBP5.cjs} +3 -3
  147. package/dist/{chunk-CECUDGXQ.cjs → chunk-ZP32GNJQ.cjs} +13 -13
  148. package/dist/{chunk-72D2NX77.mjs → chunk-ZZ2QKCKW.mjs} +1 -1
  149. package/dist/{client-plugins.d-Bx3FXpqm.d.mts → client-plugins.d-CgQQ-EAv.d.mts} +25 -4
  150. package/dist/{client-plugins.d-TiLbS5j4.d.ts → client-plugins.d-vXrbcfJ1.d.ts} +25 -4
  151. package/dist/client-plugins.d.mts +2 -2
  152. package/dist/client-plugins.d.ts +2 -2
  153. package/dist/client.cjs +9 -9
  154. package/dist/client.d.mts +9 -9
  155. package/dist/client.d.ts +9 -9
  156. package/dist/client.mjs +9 -9
  157. package/dist/{config.d-iRPI16ku.d.mts → config.d-DqZkLwef.d.mts} +146 -1
  158. package/dist/{config.d-iRPI16ku.d.ts → config.d-DqZkLwef.d.ts} +146 -1
  159. package/dist/config.d.mts +2 -2
  160. package/dist/config.d.ts +2 -2
  161. package/dist/cron.cjs +3 -3
  162. package/dist/cron.d.mts +10 -0
  163. package/dist/cron.d.ts +10 -0
  164. package/dist/cron.mjs +2 -2
  165. package/dist/desktop.d.mts +3 -3
  166. package/dist/desktop.d.ts +3 -3
  167. package/dist/{devtools-UQLDAOEI.mjs → devtools-KQZ6SRCJ.mjs} +16 -16
  168. package/dist/{devtools-6XWCZIGO.cjs → devtools-UF6JYHUN.cjs} +18 -18
  169. package/dist/docs.cjs +19 -19
  170. package/dist/docs.d.mts +3 -3
  171. package/dist/docs.d.ts +3 -3
  172. package/dist/docs.mjs +18 -18
  173. package/dist/index.cjs +99 -95
  174. package/dist/{index.d-yueUNipJ.d.ts → index.d-DlCELfhf.d.ts} +1 -1
  175. package/dist/{index.d-YxJ2AiDF.d.mts → index.d-Dmfb7Kb_.d.mts} +1 -1
  176. package/dist/index.d.mts +18 -18
  177. package/dist/index.d.ts +18 -18
  178. package/dist/index.mjs +139 -135
  179. package/dist/integrations.cjs +5 -5
  180. package/dist/integrations.d.mts +2 -2
  181. package/dist/integrations.d.ts +2 -2
  182. package/dist/integrations.mjs +4 -4
  183. package/dist/internal/app-markdown-runtime.cjs +6 -6
  184. package/dist/internal/app-markdown-runtime.d.mts +3 -3
  185. package/dist/internal/app-markdown-runtime.d.ts +3 -3
  186. package/dist/internal/app-markdown-runtime.mjs +5 -5
  187. package/dist/internal/build-runtime.cjs +52 -50
  188. package/dist/internal/build-runtime.d.mts +4 -4
  189. package/dist/internal/build-runtime.d.ts +4 -4
  190. package/dist/internal/build-runtime.mjs +51 -49
  191. package/dist/internal/cli-runtime.cjs +28 -28
  192. package/dist/internal/cli-runtime.mjs +28 -28
  193. package/dist/internal/client-error-overlay.cjs +4 -4
  194. package/dist/internal/client-error-overlay.mjs +1 -1
  195. package/dist/internal/client-runtime.cjs +20 -15
  196. package/dist/internal/client-runtime.d.mts +5 -5
  197. package/dist/internal/client-runtime.d.ts +5 -5
  198. package/dist/internal/client-runtime.mjs +8 -3
  199. package/dist/internal/compression-runtime.d.mts +2 -2
  200. package/dist/internal/compression-runtime.d.ts +2 -2
  201. package/dist/internal/config-runtime.cjs +18 -18
  202. package/dist/internal/config-runtime.d.mts +119 -7
  203. package/dist/internal/config-runtime.d.ts +119 -7
  204. package/dist/internal/config-runtime.mjs +17 -17
  205. package/dist/internal/infra-analytics-runtime.cjs +11 -11
  206. package/dist/internal/infra-analytics-runtime.mjs +9 -9
  207. package/dist/internal/islands-boot.cjs +211 -0
  208. package/dist/internal/islands-boot.d.mts +8 -0
  209. package/dist/internal/islands-boot.d.ts +8 -0
  210. package/dist/internal/islands-boot.mjs +211 -0
  211. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  212. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  213. package/dist/internal/production-runtime.cjs +42 -28
  214. package/dist/internal/production-runtime.d.mts +50 -12
  215. package/dist/internal/production-runtime.d.ts +50 -12
  216. package/dist/internal/production-runtime.mjs +52 -38
  217. package/dist/markdown.cjs +7 -5
  218. package/dist/markdown.d.mts +2 -2
  219. package/dist/markdown.d.ts +2 -2
  220. package/dist/markdown.mjs +6 -4
  221. package/dist/middleware.cjs +10 -10
  222. package/dist/middleware.d.mts +4 -4
  223. package/dist/middleware.d.ts +4 -4
  224. package/dist/middleware.mjs +9 -9
  225. package/dist/mobile.d.mts +43 -5
  226. package/dist/mobile.d.ts +43 -5
  227. package/dist/modules-VHD7BELU.mjs +13 -0
  228. package/dist/modules-WT5D3AWY.cjs +13 -0
  229. package/dist/native-specs-BD7HOTMJ.mjs +15 -0
  230. package/dist/native-specs-IQQRJOOW.cjs +15 -0
  231. package/dist/native-tree-6G5O53O3.cjs +27 -0
  232. package/dist/native-tree-VWNW2MQ2.mjs +27 -0
  233. package/dist/native.cjs +87 -0
  234. package/dist/native.d.mts +72 -0
  235. package/dist/native.d.ts +72 -0
  236. package/dist/native.mjs +87 -0
  237. package/dist/{navigation-delegate.d-HnDXhlyP.d.mts → navigation-delegate.d-CnOTWOyi.d.mts} +1 -1
  238. package/dist/{navigation-delegate.d-BY1e_Xrh.d.ts → navigation-delegate.d-JXx40JzR.d.ts} +1 -1
  239. package/dist/navigation.cjs +5 -5
  240. package/dist/navigation.d.mts +5 -5
  241. package/dist/navigation.d.ts +5 -5
  242. package/dist/navigation.mjs +4 -4
  243. package/dist/{nitro-R444AF3O.mjs → nitro-FLN6DRGJ.mjs} +7 -7
  244. package/dist/{nitro-CK7M4RMY.cjs → nitro-HXAZZQKY.cjs} +12 -12
  245. package/dist/plugin.cjs +43 -42
  246. package/dist/plugin.d.mts +5 -4
  247. package/dist/plugin.d.ts +5 -4
  248. package/dist/plugin.mjs +42 -41
  249. package/dist/port-C6GBH4C6.cjs +419 -0
  250. package/dist/port-WOOQ3V56.mjs +419 -0
  251. package/dist/{production-runtime.d-BpJUDzP8.d.mts → production-runtime.d-CP5s6RuY.d.mts} +1 -1
  252. package/dist/{production-runtime.d-lMjvE9cf.d.ts → production-runtime.d-N-cE3pmy.d.ts} +1 -1
  253. package/dist/{programmatic-routes-client.d-BlFp5hv4.d.ts → programmatic-routes-client.d-CLG2N1yH.d.ts} +2 -2
  254. package/dist/{programmatic-routes-client.d-6CGQ3TCk.d.mts → programmatic-routes-client.d-CPbNqtIi.d.mts} +2 -2
  255. package/dist/query/client.cjs +6 -6
  256. package/dist/query/client.mjs +2 -2
  257. package/dist/{render-plan.d-DhP0mTHF.d.ts → render-plan.d-B9lAP3uX.d.ts} +1 -1
  258. package/dist/{render-plan.d-BH9edqKs.d.mts → render-plan.d-DZ-qjjdG.d.mts} +1 -1
  259. package/dist/renderer/react/server.cjs +2 -2
  260. package/dist/renderer/react/server.mjs +3 -3
  261. package/dist/renderer-client.cjs +6 -6
  262. package/dist/renderer-client.d.mts +5 -5
  263. package/dist/renderer-client.d.ts +5 -5
  264. package/dist/renderer-client.mjs +2 -2
  265. package/dist/{request.d-BVZrsR1v.d.ts → request.d-BiicaNxb.d.ts} +1 -1
  266. package/dist/{request.d-DJFRdKi8.d.mts → request.d-DV0oeUit.d.mts} +1 -1
  267. package/dist/request.d.mts +3 -3
  268. package/dist/request.d.ts +3 -3
  269. package/dist/{route-rendering.d-Bpmw7PED.d.mts → route-rendering.d-BrIKA51A.d.mts} +1 -1
  270. package/dist/{route-rendering.d-B00JtK_-.d.ts → route-rendering.d-Iss0C7GR.d.ts} +1 -1
  271. package/dist/{router.d-Bd1x9XxQ.d.ts → router.d-DjGn_al7.d.ts} +1 -1
  272. package/dist/{router.d-e0jQ3jQ-.d.mts → router.d-mNTbOGV_.d.mts} +1 -1
  273. package/dist/{routes.d-D96Dq9lz.d.ts → routes.d-BKSjHuH9.d.ts} +27 -4
  274. package/dist/{routes.d-Cmv8TgVq.d.mts → routes.d-qd8Qf4LG.d.mts} +27 -4
  275. package/dist/routes.d.mts +2 -2
  276. package/dist/routes.d.ts +2 -2
  277. package/dist/{rsc-pipeline-DX4OC5FN.cjs → rsc-pipeline-SVLBTY7H.cjs} +21 -21
  278. package/dist/{rsc-pipeline-ZQ4CTVEG.mjs → rsc-pipeline-WBLBDQXA.mjs} +20 -20
  279. package/dist/{runtime-NQ3EDSA7.cjs → runtime-DGUOWSMF.cjs} +307 -48
  280. package/dist/{runtime-NPDRDV6R.mjs → runtime-HFZTVNFF.mjs} +298 -39
  281. package/dist/{runtime.d-CgB3IJDq.d.mts → runtime.d-BNVbojF1.d.mts} +1 -1
  282. package/dist/{runtime.d-D-td-RR3.d.ts → runtime.d-Bm_4hP5T.d.ts} +1 -1
  283. package/dist/{schema-dev-notice-F6QYSOAI.mjs → schema-dev-notice-JMXEQWIQ.mjs} +3 -3
  284. package/dist/{schema-dev-notice-UU7DMZEU.cjs → schema-dev-notice-PLBFDTOF.cjs} +6 -6
  285. package/dist/server-fn-client.d.mts +1 -1
  286. package/dist/server-fn-client.d.ts +1 -1
  287. package/dist/server-plugins.cjs +1 -1
  288. package/dist/server-plugins.d.mts +3 -3
  289. package/dist/server-plugins.d.ts +3 -3
  290. package/dist/server-plugins.mjs +1 -1
  291. package/dist/server.cjs +82 -81
  292. package/dist/server.d.mts +12 -11
  293. package/dist/server.d.ts +12 -11
  294. package/dist/server.mjs +65 -64
  295. package/dist/session-2Q72D4QV.cjs +23 -0
  296. package/dist/{session-IGEDQ5PY.mjs → session-QZXZOPR2.mjs} +2 -2
  297. package/dist/shell-render.d-CG6bPiiA.d.mts +41 -0
  298. package/dist/shell-render.d-CG6bPiiA.d.ts +41 -0
  299. package/dist/{spa-router.d-CO01mVOM.d.ts → spa-router.d-DAtnNoBe.d.ts} +11 -2
  300. package/dist/{spa-router.d-BWDhS0FK.d.mts → spa-router.d-DHDoXxDE.d.mts} +11 -2
  301. package/dist/testing.cjs +7 -7
  302. package/dist/testing.d.mts +2 -2
  303. package/dist/testing.d.ts +2 -2
  304. package/dist/testing.mjs +6 -6
  305. package/dist/{utils.d-B77__yh8.d.ts → utils.d-DwZ-KLSB.d.ts} +7 -1
  306. package/dist/{utils.d-DRDazhCA.d.mts → utils.d-uKZcKJk4.d.mts} +7 -1
  307. package/dist/version.cjs +2 -2
  308. package/dist/version.mjs +1 -1
  309. package/dist/vite.cjs +43 -42
  310. package/dist/vite.d.mts +17 -6
  311. package/dist/vite.d.ts +17 -6
  312. package/dist/vite.mjs +42 -41
  313. package/dist/workflows.cjs +3 -3
  314. package/dist/workflows.mjs +2 -2
  315. package/package.json +17 -3
  316. package/dist/agent-mcp-handler-RT3COCEL.cjs +0 -18
  317. package/dist/session-AAU7RNRO.cjs +0 -23
  318. package/dist/{chunk-7FVVQEVL.cjs → chunk-4BS3HSY7.cjs} +2 -2
  319. package/dist/{chunk-N7JQXQAV.cjs → chunk-5OJVKXFV.cjs} +2 -2
  320. package/dist/{chunk-WSDKXV4E.mjs → chunk-72KABRWN.mjs} +4 -4
  321. package/dist/{chunk-C3BOESDW.mjs → chunk-B4CWYGCG.mjs} +3 -3
@@ -1,20 +1,20 @@
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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await 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; } async function _asyncOptionalChain(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 = await fn(value); } else if (op === 'call' || op === 'optionalCall') { value = await fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
 
4
- var _chunkSJ23LJ3Ncjs = require('./chunk-SJ23LJ3N.cjs');
4
+ var _chunkVVTJTMGQcjs = require('./chunk-VVTJTMGQ.cjs');
5
5
 
6
6
 
7
- var _chunkXPMC4E2Gcjs = require('./chunk-XPMC4E2G.cjs');
7
+ var _chunkXVSBALOYcjs = require('./chunk-XVSBALOY.cjs');
8
8
 
9
9
 
10
- var _chunkNPQLMP7Mcjs = require('./chunk-NPQLMP7M.cjs');
10
+ var _chunkNQJDO7K7cjs = require('./chunk-NQJDO7K7.cjs');
11
11
 
12
12
 
13
13
 
14
14
  var _chunk65Y5SIBHcjs = require('./chunk-65Y5SIBH.cjs');
15
15
 
16
16
 
17
- var _chunkLNM57D3Hcjs = require('./chunk-LNM57D3H.cjs');
17
+ var _chunkR53QDV6Tcjs = require('./chunk-R53QDV6T.cjs');
18
18
 
19
19
 
20
20
  var _chunkAQLHD6HZcjs = require('./chunk-AQLHD6HZ.cjs');
@@ -54,7 +54,7 @@ function pickImportTarget(entry) {
54
54
  return void 0;
55
55
  }
56
56
  async function importFromApp(root, packageName, subpath = ".") {
57
- const packageDir = _chunkSJ23LJ3Ncjs.findFarmAppPackageDir.call(void 0, root, packageName);
57
+ const packageDir = _chunkVVTJTMGQcjs.findFarmAppPackageDir.call(void 0, root, packageName);
58
58
  if (!packageDir) return void 0;
59
59
  const manifest = JSON.parse(_fs.readFileSync.call(void 0, _path2.default.join(packageDir, "package.json"), "utf8"));
60
60
  const exportsMap = manifest.exports;
@@ -81,9 +81,9 @@ async function createFarmRscViteConfig(userConfig, options) {
81
81
  importFromApp(root, "@vitejs/plugin-rsc"),
82
82
  importFromApp(root, "@vitejs/plugin-react")
83
83
  ]);
84
- if (!pluginRsc || !viteRsc || !_chunkSJ23LJ3Ncjs.findFarmAppPackageDir.call(void 0, root, "react-server-dom-webpack")) {
84
+ if (!pluginRsc || !viteRsc || !_chunkVVTJTMGQcjs.findFarmAppPackageDir.call(void 0, root, "react-server-dom-webpack")) {
85
85
  throw new Error(
86
- `[Farm.js] experimental.serverComponents runs on @farm.js/plugin and the official @vitejs/plugin-rsc. Install them: ${_chunkSJ23LJ3Ncjs.FARM_RSC_INSTALL_HINT}`
86
+ `[Farm.js] experimental.serverComponents runs on @farm.js/plugin and the official @vitejs/plugin-rsc. Install them: ${_chunkVVTJTMGQcjs.FARM_RSC_INSTALL_HINT}`
87
87
  );
88
88
  }
89
89
  const { plugins: vitePlugins = [], ...viteOptions } = _nullishCoalesce(userConfig.vite, () => ( {}));
@@ -92,13 +92,16 @@ async function createFarmRscViteConfig(userConfig, options) {
92
92
  if (userConfig[key] !== void 0) rscConfig[key] = userConfig[key];
93
93
  }
94
94
  const createReactPlugin = hasPluginNamed(vitePlugins, "vite:react") ? void 0 : await _asyncNullishCoalesce(await _asyncOptionalChain([viteReact, 'optionalAccess', async _2 => _2.default]), async () => ( (options.command === "serve" ? (await _chunk65Y5SIBHcjs.loadFarmReactPlugin.call(void 0, )).default : void 0)));
95
- const tailwind = hasPluginNamed(vitePlugins, "@tailwindcss/vite") ? void 0 : await _chunkLNM57D3Hcjs.loadTailwindVitePlugin.call(void 0, );
95
+ const tailwind = hasPluginNamed(vitePlugins, "@tailwindcss/vite") ? void 0 : await _chunkR53QDV6Tcjs.loadTailwindVitePlugin.call(void 0, );
96
+ const platform = _chunkAQLHD6HZcjs.resolveFarmPlatform.call(void 0, );
97
+ const mobileClient = userConfig.mobile === void 0 || platform === "desktop" ? void 0 : options.command === "build" ? "entry" : platform === "mobile" ? "inline" : void 0;
96
98
  const farmConfig = pluginRsc.defineConfig({
97
99
  ...rscConfig,
100
+ ...mobileClient ? { mobileClient } : {},
98
101
  experimental: { ...userConfig.experimental, serverComponents: true },
99
102
  port: _nullishCoalesce(options.port, () => ( _optionalChain([userConfig, 'access', _3 => _3.server, 'optionalAccess', _4 => _4.port]))),
100
103
  plugins: [
101
- ...options.command === "serve" && _chunkAQLHD6HZcjs.resolveFarmPlatform.call(void 0, ) === "desktop" ? [
104
+ ...options.command === "serve" && platform === "desktop" ? [
102
105
  _chunk65Y5SIBHcjs.farmDesktopDevGuardPlugin.call(void 0,
103
106
  typeof userConfig.basePath === "string" ? userConfig.basePath : void 0
104
107
  )
@@ -111,7 +114,7 @@ async function createFarmRscViteConfig(userConfig, options) {
111
114
  server: { environmentName: "rsc" },
112
115
  config: {
113
116
  preset: options.preset,
114
- outputDir: options.outputDir && _chunkNPQLMP7Mcjs.resolveDeployOutputPath.call(void 0, root, options.outputDir)
117
+ outputDir: options.outputDir && _chunkNQJDO7K7cjs.resolveDeployOutputPath.call(void 0, root, options.outputDir)
115
118
  }
116
119
  })
117
120
  ]
@@ -134,7 +137,7 @@ async function createFarmRscDevServer(userConfig, options) {
134
137
  const config = await createFarmRscViteConfig(userConfig, { ...configOptions, command: "serve" });
135
138
  return createServer({
136
139
  ...config,
137
- plugins: [..._nullishCoalesce(config.plugins, () => ( [])), _chunkXPMC4E2Gcjs.createFarmDevLoopbackPlugin.call(void 0, )],
140
+ plugins: [..._nullishCoalesce(config.plugins, () => ( [])), _chunkXVSBALOYcjs.createFarmDevLoopbackPlugin.call(void 0, )],
138
141
  ...host === void 0 ? {} : { server: { ...config.server, host } }
139
142
  });
140
143
  }
@@ -0,0 +1,137 @@
1
+ import {
2
+ _withFarmGuardedResponseCache
3
+ } from "./chunk-EGVC4LIG.mjs";
4
+ import {
5
+ _markFarmOwnedResponse,
6
+ _withFarmResponseHeaders
7
+ } from "./chunk-LM55GS4R.mjs";
8
+
9
+ // src/mobile/shell-response.ts
10
+ var FARM_SHELL_HEADER = "X-Farm-Shell";
11
+ function isFarmMobileShellRequest(request) {
12
+ const value = request.headers.get(FARM_SHELL_HEADER);
13
+ return value !== null && /^[a-z][a-z0-9-]{0,31}$/.test(value);
14
+ }
15
+ function isHtml(response) {
16
+ return response.headers.get("content-type")?.toLowerCase().includes("text/html") === true;
17
+ }
18
+ function appendVary(headers, name) {
19
+ const current = headers.get("Vary");
20
+ if (!current) {
21
+ headers.set("Vary", name);
22
+ return;
23
+ }
24
+ const names = current.split(",").map((value) => value.trim().toLowerCase());
25
+ if (names.includes("*") || names.includes(name.toLowerCase())) return;
26
+ headers.set("Vary", `${current}, ${name}`);
27
+ }
28
+ function escapeRegExp(value) {
29
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
30
+ }
31
+ var MAX_HELD_TAG = 4096;
32
+ function createFarmMobileShellRewriter(client) {
33
+ const entry = new RegExp(`(["'])${escapeRegExp(client.webEntry)}\\1`, "g");
34
+ const webOnly = new Set(client.webOnly);
35
+ const preload = /<link rel="modulepreload" href="\/([^"]+)"[^>]*>/g;
36
+ let held = "";
37
+ return (text, final = false) => {
38
+ let input = held + text;
39
+ held = "";
40
+ if (!final) {
41
+ const open = input.lastIndexOf("<");
42
+ if (open !== -1 && input.indexOf(">", open) === -1 && input.length - open <= MAX_HELD_TAG) {
43
+ held = input.slice(open);
44
+ input = input.slice(0, open);
45
+ }
46
+ }
47
+ return input.replace(entry, (_match, quote) => `${quote}${client.entry}${quote}`).replace(preload, (tag, file) => webOnly.has(file) ? "" : tag);
48
+ };
49
+ }
50
+ function _applyFarmMobileShellClient(request, response, client, onPrivate) {
51
+ if (!client || !isHtml(response)) return response;
52
+ if (!isFarmMobileShellRequest(request) || !response.body) {
53
+ return _withFarmResponseHeaders(response, (headers2) => appendVary(headers2, FARM_SHELL_HEADER));
54
+ }
55
+ onPrivate?.();
56
+ const headers = new Headers(_withFarmGuardedResponseCache(response).headers);
57
+ appendVary(headers, FARM_SHELL_HEADER);
58
+ headers.delete("content-length");
59
+ headers.delete("etag");
60
+ const rewrite = createFarmMobileShellRewriter(client);
61
+ const decoder = new TextDecoder();
62
+ const encoder = new TextEncoder();
63
+ const body = response.body.pipeThrough(
64
+ new TransformStream({
65
+ transform(chunk, controller) {
66
+ const output = rewrite(decoder.decode(chunk, { stream: true }));
67
+ if (output) controller.enqueue(encoder.encode(output));
68
+ },
69
+ flush(controller) {
70
+ const output = rewrite(decoder.decode(), true);
71
+ if (output) controller.enqueue(encoder.encode(output));
72
+ }
73
+ })
74
+ );
75
+ return _markFarmOwnedResponse(
76
+ new Response(body, { status: response.status, statusText: response.statusText, headers })
77
+ );
78
+ }
79
+
80
+ // src/mobile/shell-render.ts
81
+ var FARM_SHELL_RENDER_HEADER = "X-Farm-Shell-Render";
82
+ var FARM_SHELL_ROUTE_HEADER = "X-Farm-Shell-Route";
83
+ var FARM_SHELL_PARAM_SEGMENT = "__farm_shell__";
84
+ function constantTimeEqual(left, right) {
85
+ if (left.length !== right.length) return false;
86
+ let difference = 0;
87
+ for (let index = 0; index < left.length; index += 1) {
88
+ difference |= left.charCodeAt(index) ^ right.charCodeAt(index);
89
+ }
90
+ return difference === 0;
91
+ }
92
+ function _isFarmMobileShellRenderRequest(request, token) {
93
+ const value = request.headers.get(FARM_SHELL_RENDER_HEADER);
94
+ return token.length > 0 && value !== null && constantTimeEqual(value, token);
95
+ }
96
+ function stripRouteGroups(pattern) {
97
+ const segments = pattern.split("/").filter((segment) => segment && !(segment.startsWith("(") && segment.endsWith(")")));
98
+ return segments.length === 0 ? "/" : `/${segments.join("/")}`;
99
+ }
100
+ function isDynamicPattern(pattern) {
101
+ return pattern.split("/").some((segment) => segment.startsWith("["));
102
+ }
103
+ function _checkFarmMobileShellRoute(check) {
104
+ const route = stripRouteGroups(check.route);
105
+ if (check.requested === null || stripRouteGroups(check.requested) !== route) {
106
+ return `the request matched ${route}, not ${check.requested ?? "a requested route"}`;
107
+ }
108
+ if (check.loading === null) return "it has no loading file";
109
+ if (isDynamicPattern(check.loading)) {
110
+ return `its loading file is in a dynamic folder (${stripRouteGroups(check.loading)})`;
111
+ }
112
+ const layout = check.layouts.find(isDynamicPattern);
113
+ if (layout !== void 0) {
114
+ return `a layout is in a dynamic folder (${stripRouteGroups(layout)})`;
115
+ }
116
+ return null;
117
+ }
118
+ function createFarmMobileShellRenderPath(route) {
119
+ const segments = [];
120
+ for (const segment of route.split("/")) {
121
+ if (!segment || segment.startsWith("(") && segment.endsWith(")")) continue;
122
+ if (segment.startsWith("[[...") && segment.endsWith("]]")) continue;
123
+ segments.push(segment.startsWith("[") ? FARM_SHELL_PARAM_SEGMENT : segment);
124
+ }
125
+ return `/${segments.join("/")}`;
126
+ }
127
+
128
+ export {
129
+ FARM_SHELL_HEADER,
130
+ _applyFarmMobileShellClient,
131
+ FARM_SHELL_RENDER_HEADER,
132
+ FARM_SHELL_ROUTE_HEADER,
133
+ FARM_SHELL_PARAM_SEGMENT,
134
+ _isFarmMobileShellRenderRequest,
135
+ _checkFarmMobileShellRoute,
136
+ createFarmMobileShellRenderPath
137
+ };
@@ -20,9 +20,12 @@ function delegateNavigation(delegate) {
20
20
  delegates.delete(delegate);
21
21
  };
22
22
  }
23
+ function hasFarmNavigationDelegates() {
24
+ return Boolean(_optionalChain([globalThis, 'access', _ => _[DELEGATES], 'optionalAccess', _2 => _2.size]));
25
+ }
23
26
  async function runFarmNavigationDelegates(context) {
24
27
  const delegates = globalThis[DELEGATES];
25
- if (!_optionalChain([delegates, 'optionalAccess', _ => _.size])) return false;
28
+ if (!_optionalChain([delegates, 'optionalAccess', _3 => _3.size])) return false;
26
29
  for (const delegate of delegates) {
27
30
  try {
28
31
  if (await delegate(context) === true) return true;
@@ -37,4 +40,5 @@ async function runFarmNavigationDelegates(context) {
37
40
 
38
41
 
39
42
 
40
- exports.getHashTargetElement = getHashTargetElement; exports.delegateNavigation = delegateNavigation; exports.runFarmNavigationDelegates = runFarmNavigationDelegates;
43
+
44
+ exports.getHashTargetElement = getHashTargetElement; exports.delegateNavigation = delegateNavigation; exports.hasFarmNavigationDelegates = hasFarmNavigationDelegates; exports.runFarmNavigationDelegates = runFarmNavigationDelegates;
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-YP7YO3S3.mjs";
8
8
  import {
9
9
  toPosixPath
10
- } from "./chunk-Y3N5BFRJ.mjs";
10
+ } from "./chunk-JSDV2NUN.mjs";
11
11
  import {
12
12
  searchParamsToObject
13
13
  } from "./chunk-H3ASZDT7.mjs";
@@ -173,7 +173,7 @@ async function fileExists(filePath) {
173
173
  }
174
174
  async function globFiles(pattern, cwd) {
175
175
  const { glob } = await import("tinyglobby");
176
- return glob(pattern, { cwd, expandDirectories: false });
176
+ return (await glob(pattern, { cwd, expandDirectories: false })).sort();
177
177
  }
178
178
  function parseSearchParams(searchParams) {
179
179
  return searchParamsToObject(searchParams);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseRoutePath
3
- } from "./chunk-Y3N5BFRJ.mjs";
3
+ } from "./chunk-JSDV2NUN.mjs";
4
4
 
5
5
  // src/routing/route-slots.ts
6
6
  var SLOT_SEGMENT = /^@([A-Za-z][A-Za-z0-9_-]*)$/;
@@ -0,0 +1,237 @@
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
+
3
+ var _chunk3YMLUNL2cjs = require('./chunk-3YMLUNL2.cjs');
4
+
5
+
6
+
7
+ var _chunkYKHRCY4Tcjs = require('./chunk-YKHRCY4T.cjs');
8
+
9
+ // src/mobile/modules.ts
10
+ var _fs = require('fs');
11
+ var _path = require('path'); var path = _interopRequireWildcard(_path);
12
+ var MODULE_KEYS = /* @__PURE__ */ new Set(["permissions", "usage", "web"]);
13
+ var PERMISSION = /^[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)+$/;
14
+ var BARE_PERMISSION = /^[A-Z][A-Z0-9_]*$/;
15
+ var USAGE_KEY = /^NS[A-Za-z0-9]+UsageDescription$/;
16
+ var SPEC_FILE = /^Native[A-Za-z0-9_]+\.(?:ts|js)$/;
17
+ var SPEC_NAME = /TurboModuleRegistry\s*\.\s*(?:getEnforcing|get)\s*(?:<[^>]*>)?\s*\(\s*(["'`])([A-Za-z_$][\w$]*)\1/;
18
+ function relative2(root, file) {
19
+ return path.relative(root, file).split(path.sep).join("/");
20
+ }
21
+ function scanFarmMobileAppModules(options) {
22
+ const dir = path.resolve(options.root, _nullishCoalesce(options.srcDir, () => ( "src")), "native");
23
+ if (!_fs.existsSync.call(void 0, dir)) return void 0;
24
+ const entries = _fs.readdirSync.call(void 0, dir, { withFileTypes: true }).filter((entry) => entry.isFile()).map((entry) => entry.name).sort();
25
+ const specs = [];
26
+ const names = /* @__PURE__ */ new Map();
27
+ for (const name of entries.filter((entry) => SPEC_FILE.test(entry))) {
28
+ const file = path.join(dir, name);
29
+ const match = SPEC_NAME.exec(_fs.readFileSync.call(void 0, file, "utf8"));
30
+ const shown = relative2(options.root, file);
31
+ if (!match) {
32
+ throw new TypeError(
33
+ `${shown} is a native module spec (Native*.ts) without a registered name. Export TurboModuleRegistry.getEnforcing<Spec>("${name.replace(/^Native|\.\w+$/g, "")}") as its default, as in a React Native app.`
34
+ );
35
+ }
36
+ const other = names.get(match[2]);
37
+ if (other) {
38
+ throw new TypeError(
39
+ `${shown} and ${other} both register the native module "${match[2]}". Give each spec its own name.`
40
+ );
41
+ }
42
+ names.set(match[2], shown);
43
+ specs.push({ name: match[2], file });
44
+ }
45
+ const android = entries.filter((entry) => entry.endsWith(".kt")).map((entry) => path.join(dir, entry));
46
+ const ios = entries.filter((entry) => entry.endsWith(".swift")).map((entry) => path.join(dir, entry));
47
+ if (specs.length === 0 && android.length === 0 && ios.length === 0) return void 0;
48
+ return { dir, specs, android, ios };
49
+ }
50
+ function findPackage(name, from) {
51
+ let dir = from;
52
+ for (; ; ) {
53
+ const candidate = path.join(dir, "node_modules", name);
54
+ if (_fs.existsSync.call(void 0, path.join(candidate, "package.json"))) return _fs.realpathSync.call(void 0, candidate);
55
+ const parent = path.dirname(dir);
56
+ if (parent === dir) return void 0;
57
+ dir = parent;
58
+ }
59
+ }
60
+ function installedModuleProblem(name, root, dependencies) {
61
+ if (!(name in dependencies)) return "unknown";
62
+ const dir = findPackage(name, root);
63
+ if (!dir) return "missing";
64
+ try {
65
+ const pkg = JSON.parse(_fs.readFileSync.call(void 0, path.join(dir, "package.json"), "utf8"));
66
+ return _chunkYKHRCY4Tcjs.isPlainObject.call(void 0, pkg) && _chunkYKHRCY4Tcjs.isPlainObject.call(void 0, pkg.codegenConfig) ? void 0 : "not-a-module";
67
+ } catch (e) {
68
+ return "not-a-module";
69
+ }
70
+ }
71
+ function resolveFarmMobileModules(input, options, fail) {
72
+ if (input === void 0) return {};
73
+ if (!_chunkYKHRCY4Tcjs.isPlainObject.call(void 0, input)) {
74
+ fail(
75
+ 'modules must be an object keyed by module name, such as { Device: { permissions: ["android.permission.VIBRATE"] } }.'
76
+ );
77
+ }
78
+ const issues = [];
79
+ const resolved = {};
80
+ const appModules = new Set(_nullishCoalesce(options.appModules, () => ( [])));
81
+ const usageOwners = /* @__PURE__ */ new Map();
82
+ let dependencies;
83
+ const specDir = relative2(
84
+ options.root,
85
+ path.resolve(options.root, _nullishCoalesce(options.srcDir, () => ( "src")), "native")
86
+ );
87
+ for (const name of Object.keys(input).sort()) {
88
+ const where = `modules[${JSON.stringify(name)}]`;
89
+ const entry = input[name];
90
+ if (!appModules.has(name)) {
91
+ _nullishCoalesce(dependencies, () => ( (dependencies = ((value) => _chunkYKHRCY4Tcjs.isPlainObject.call(void 0, value) ? value : {})(
92
+ _chunkYKHRCY4Tcjs.readAppPackageJson.call(void 0, options.root).dependencies
93
+ ))));
94
+ const problem = installedModuleProblem(name, options.root, dependencies);
95
+ if (problem === "unknown") {
96
+ issues.push(
97
+ `${where} is not one of the app's native modules or an installed React Native module. Use the name a ${specDir}/Native*.ts spec registers, or a package in dependencies in package.json.`
98
+ );
99
+ } else if (problem === "missing") {
100
+ issues.push(
101
+ `${where} is in dependencies but not installed. Install the app's dependencies, then run the command again.`
102
+ );
103
+ } else if (problem === "not-a-module") {
104
+ issues.push(
105
+ `${where} names a package with no "codegenConfig" in its package.json, so it is not a React Native module for the new architecture. Remove the entry, or upgrade the package.`
106
+ );
107
+ }
108
+ }
109
+ if (!_chunkYKHRCY4Tcjs.isPlainObject.call(void 0, entry)) {
110
+ issues.push(
111
+ `${where} must be an object, such as { permissions: ["android.permission.VIBRATE"] }.`
112
+ );
113
+ continue;
114
+ }
115
+ for (const key of Object.keys(entry)) {
116
+ if (!MODULE_KEYS.has(key)) {
117
+ issues.push(`unknown option ${where}.${key}. Supported: permissions, usage, web.`);
118
+ }
119
+ }
120
+ const permissions = [];
121
+ if (entry.permissions !== void 0) {
122
+ if (!Array.isArray(entry.permissions)) {
123
+ issues.push(
124
+ `${where}.permissions must be an array of Android permissions, such as ["android.permission.VIBRATE"].`
125
+ );
126
+ } else {
127
+ entry.permissions.forEach((permission, index) => {
128
+ const at = `${where}.permissions[${index}]`;
129
+ if (typeof permission !== "string" || !PERMISSION.test(permission)) {
130
+ const hint = typeof permission === "string" && BARE_PERMISSION.test(permission) ? ` Use "android.permission.${permission}".` : "";
131
+ issues.push(
132
+ `${at} must be a full Android permission name such as "android.permission.VIBRATE", got ${JSON.stringify(permission)}.${hint}`
133
+ );
134
+ } else if (!permissions.includes(permission)) {
135
+ permissions.push(permission);
136
+ }
137
+ });
138
+ }
139
+ }
140
+ const usage = {};
141
+ if (entry.usage !== void 0) {
142
+ if (!_chunkYKHRCY4Tcjs.isPlainObject.call(void 0, entry.usage)) {
143
+ issues.push(
144
+ `${where}.usage must be an object of iOS usage strings, such as { NSCameraUsageDescription: "Scans receipts." }.`
145
+ );
146
+ } else {
147
+ for (const [key, value] of Object.entries(entry.usage)) {
148
+ const at = `${where}.usage.${key}`;
149
+ if (!USAGE_KEY.test(key)) {
150
+ issues.push(
151
+ `${at} is not an iOS usage-description key. Keys are NS...UsageDescription, such as NSCameraUsageDescription.`
152
+ );
153
+ } else if (typeof value !== "string" || !value.trim()) {
154
+ issues.push(
155
+ `${at} must be a non-empty string: the sentence iOS shows when it asks for access.`
156
+ );
157
+ } else {
158
+ const owner = usageOwners.get(key);
159
+ if (owner && owner.value !== value.trim()) {
160
+ issues.push(
161
+ `${at} and modules[${JSON.stringify(owner.name)}].usage.${key} set different strings, and Info.plist has one per key. Set it on one module.`
162
+ );
163
+ }
164
+ usageOwners.set(key, { name, value: value.trim() });
165
+ usage[key] = value.trim();
166
+ }
167
+ }
168
+ }
169
+ }
170
+ let web = false;
171
+ if (entry.web !== void 0) {
172
+ if (typeof entry.web !== "boolean") {
173
+ issues.push(`${where}.web must be true or false.`);
174
+ } else if (entry.web && !appModules.has(name)) {
175
+ issues.push(
176
+ `${where}.web is true, but web screens reach only the app's own modules in ${specDir}. "${name}" needs the React Native JS runtime, which web screens do not have. Remove web, and call the module from a native screen (page.native.tsx).`
177
+ );
178
+ } else {
179
+ web = entry.web;
180
+ }
181
+ }
182
+ resolved[name] = { permissions, usage, web };
183
+ }
184
+ if (issues.length === 1) fail(issues[0]);
185
+ if (issues.length > 1) {
186
+ fail(
187
+ `modules has ${issues.length} problems:
188
+ ${issues.map((issue) => ` - ${issue}`).join("\n")}`
189
+ );
190
+ }
191
+ return resolved;
192
+ }
193
+ function readFarmMobileWebModules(appModules, modules, options) {
194
+ const issues = [];
195
+ const specs = appModules.specs.map((spec) => {
196
+ if (!_optionalChain([modules, 'access', _ => _[spec.name], 'optionalAccess', _2 => _2.web])) return spec;
197
+ const shown = relative2(options.root, spec.file);
198
+ const where = `modules[${JSON.stringify(spec.name)}].web`;
199
+ let web;
200
+ try {
201
+ web = _chunk3YMLUNL2cjs.readFarmNativeWebSpec.call(void 0, { root: options.root, file: spec.file });
202
+ } catch (error) {
203
+ issues.push(`${where}: ${error.message}`);
204
+ return spec;
205
+ }
206
+ for (const { method, reason } of web.unsupported) {
207
+ issues.push(
208
+ `${where}: ${shown} declares ${method}(), but ${reason}. Change the parameter to a string, number, boolean, object, or array, or remove web and call the module from a native screen (page.native.tsx).`
209
+ );
210
+ }
211
+ if (web.methods.some((method) => method.name === "available")) {
212
+ issues.push(
213
+ `${where}: ${shown} declares available(), which web screens use to check for the module (native.<module>.available()). Rename the method.`
214
+ );
215
+ }
216
+ if (web.methods.length === 0 && web.unsupported.length === 0) {
217
+ issues.push(
218
+ `${where}: ${shown} declares no method that returns a Promise, and web screens call only those. Remove web, or declare one, such as model(): Promise<string>.`
219
+ );
220
+ }
221
+ return { ...spec, web };
222
+ });
223
+ if (issues.length === 1) throw new TypeError(issues[0]);
224
+ if (issues.length > 1) {
225
+ throw new TypeError(
226
+ `modules has ${issues.length} problems:
227
+ ${issues.map((issue) => ` - ${issue}`).join("\n")}`
228
+ );
229
+ }
230
+ return { ...appModules, specs };
231
+ }
232
+
233
+
234
+
235
+
236
+
237
+ exports.scanFarmMobileAppModules = scanFarmMobileAppModules; exports.resolveFarmMobileModules = resolveFarmMobileModules; exports.readFarmMobileWebModules = readFarmMobileWebModules;
@@ -3,7 +3,7 @@ import {
3
3
  getFarmMarkdownMirrorPath,
4
4
  isFarmMarkdownMirrorExposed,
5
5
  matchesFarmMarkdownRoutePattern
6
- } from "./chunk-N77JBPLC.mjs";
6
+ } from "./chunk-YSXTNSXS.mjs";
7
7
  import {
8
8
  applyFarmBasePath
9
9
  } from "./chunk-SF3JB56B.mjs";