@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
@@ -0,0 +1,419 @@
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(); } } 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
+
4
+
5
+
6
+
7
+
8
+ var _chunkD2X5MUF5cjs = require('./chunk-D2X5MUF5.cjs');
9
+ require('./chunk-BTZ5O6VM.cjs');
10
+
11
+ // src/mobile/port.ts
12
+ var _fs = require('fs');
13
+ var _path = require('path'); var _path2 = _interopRequireDefault(_path);
14
+ var DOM_TAGS = new Set(
15
+ "div section main article header footer nav aside figure hr p h1 h2 h3 h4 h5 h6 span strong em b i small code label br a button input textarea img ul ol li".split(" ")
16
+ );
17
+ var DOM_PROPS = new Set(
18
+ "key style href src alt width height value defaultValue placeholder type disabled readOnly autoFocus maxLength rows name id title role htmlFor target rel tabIndex lang dir onClick onChange onInput onFocus onBlur onLoad onError".split(" ")
19
+ );
20
+ var REACT_NAMES = new Set(
21
+ "default Fragment StrictMode memo forwardRef useState useReducer useMemo useCallback useEffect useRef useId useTransition useDeferredValue startTransition".split(" ")
22
+ );
23
+ var PURE_PACKAGES = /* @__PURE__ */ new Set([
24
+ "zod",
25
+ "valibot",
26
+ "date-fns",
27
+ "dayjs",
28
+ "lodash",
29
+ "lodash-es",
30
+ "nanoid",
31
+ "uuid",
32
+ "clsx",
33
+ "classnames",
34
+ "tailwind-merge",
35
+ "zustand",
36
+ "jotai",
37
+ "immer"
38
+ ]);
39
+ var CORE_LINK = /* @__PURE__ */ new Set(["@farm.js/core", "@farm.js/core/client"]);
40
+ var SCRIPT = /\.(?:tsx|ts|jsx|js|mjs)$/;
41
+ function packageName(specifier) {
42
+ const parts = specifier.split("/");
43
+ return specifier.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
44
+ }
45
+ function posix(file) {
46
+ return file.split(_path2.default.sep).join("/");
47
+ }
48
+ function withoutExtension(file) {
49
+ return file.replace(SCRIPT, "");
50
+ }
51
+ function specifierBetween(fromFile, toFile) {
52
+ const relative = posix(_path2.default.relative(_path2.default.dirname(fromFile), withoutExtension(toFile)));
53
+ return relative.startsWith(".") ? relative : `./${relative}`;
54
+ }
55
+ function walk(node, visit) {
56
+ if (Array.isArray(node)) {
57
+ for (const child of node) walk(child, visit);
58
+ return;
59
+ }
60
+ if (!node || typeof node !== "object") return;
61
+ const current = node;
62
+ if (typeof current.type === "string") visit(current);
63
+ for (const [key, value] of Object.entries(current)) {
64
+ if (key !== "type" && key !== "start" && key !== "end" && value && typeof value === "object") {
65
+ walk(value, visit);
66
+ }
67
+ }
68
+ }
69
+ function hasJsx(program) {
70
+ let found = false;
71
+ walk(program, (node) => {
72
+ if (node.type === "JSXElement" || node.type === "JSXFragment") found = true;
73
+ });
74
+ return found;
75
+ }
76
+ function staticString(value) {
77
+ if (!value) return void 0;
78
+ if ((value.type === "Literal" || value.type === "StringLiteral") && typeof value.value === "string") {
79
+ return value.value;
80
+ }
81
+ if (value.type === "JSXExpressionContainer") return staticString(value.expression);
82
+ if (value.type === "TemplateLiteral" && value.expressions.length === 0) {
83
+ return value.quasis.map((quasi) => quasi.value.cooked).join("");
84
+ }
85
+ return void 0;
86
+ }
87
+ function lineColumn(source, offset) {
88
+ const before = source.slice(0, offset).split("\n");
89
+ return `${before.length}:${before.at(-1).length + 1}`;
90
+ }
91
+ async function emitFarmMobilePort(options) {
92
+ const { root, graph, portsDir } = options;
93
+ const read = _nullishCoalesce(options.readFile, () => ( ((file) => _fs.readFileSync.call(void 0, file, "utf8"))));
94
+ const { parseSync } = await import("rolldown/utils");
95
+ const problems = [];
96
+ const copyOf = (file) => _path2.default.join(portsDir, _path2.default.relative(root, file));
97
+ const parsed = /* @__PURE__ */ new Map();
98
+ for (const module of graph.modules) {
99
+ const source = read(module.file);
100
+ const lang = module.file.endsWith(".tsx") ? "tsx" : module.file.endsWith(".ts") ? "ts" : "jsx";
101
+ parsed.set(module.file, { source, program: parseSync(module.file, source, { lang }).program });
102
+ }
103
+ const copied = new Set(
104
+ graph.modules.filter((module) => module.file === graph.page || hasJsx(parsed.get(module.file).program)).map((module) => module.file)
105
+ );
106
+ const files = {};
107
+ const tags = /* @__PURE__ */ new Set();
108
+ const classNames = [];
109
+ const outputs = [];
110
+ for (const module of graph.modules) {
111
+ const label = posix(_path2.default.relative(root, module.file));
112
+ if (module.serverBoundary) {
113
+ problems.push(`${label} defines server functions, which ports do not call yet`);
114
+ continue;
115
+ }
116
+ if (!copied.has(module.file)) continue;
117
+ const { source, program } = parsed.get(module.file);
118
+ const at = (node) => `${label}:${lineColumn(source, node.start)}`;
119
+ const edits = [];
120
+ const resolvedBySource = new Map(module.imports.map((entry2) => [entry2.source, entry2.file]));
121
+ const linkNames = /* @__PURE__ */ new Set();
122
+ const reactObjects = /* @__PURE__ */ new Set();
123
+ let usesDom = false;
124
+ const rewriteSource = (node, kind) => {
125
+ const specifier = node.value;
126
+ const target = resolvedBySource.get(specifier);
127
+ if (target) {
128
+ if (kind === "value" && !SCRIPT.test(target)) {
129
+ problems.push(`${at(node)} imports "${specifier}", an asset ports do not load yet`);
130
+ return;
131
+ }
132
+ const next = specifierBetween(
133
+ copyOf(module.file),
134
+ copied.has(target) ? copyOf(target) : target
135
+ );
136
+ edits.push({ start: node.start, end: node.end, text: JSON.stringify(next) });
137
+ return;
138
+ }
139
+ if (specifier.startsWith(".") || specifier.startsWith("/")) {
140
+ if (kind === "value") {
141
+ problems.push(`${at(node)} imports "${specifier}", an asset ports do not load yet`);
142
+ }
143
+ return;
144
+ }
145
+ if (kind === "type" || specifier === "react" || PURE_PACKAGES.has(packageName(specifier))) {
146
+ return;
147
+ }
148
+ if (!CORE_LINK.has(specifier)) {
149
+ problems.push(`${at(node)} imports "${specifier}", which ports do not map yet`);
150
+ }
151
+ };
152
+ for (const statement of program.body) {
153
+ if (statement.type === "ImportDeclaration") {
154
+ const typeOnly = statement.importKind === "type";
155
+ const specifier = statement.source.value;
156
+ if (!typeOnly && specifier === "react") {
157
+ for (const imported of statement.specifiers) {
158
+ if (imported.importKind === "type") continue;
159
+ if (imported.type !== "ImportSpecifier") reactObjects.add(imported.local.name);
160
+ const name = imported.type === "ImportSpecifier" ? _nullishCoalesce(imported.imported.name, () => ( imported.imported.value)) : "default";
161
+ if (!REACT_NAMES.has(name)) {
162
+ problems.push(
163
+ `${at(imported)} uses ${name} from "react", which ports do not support yet`
164
+ );
165
+ }
166
+ }
167
+ }
168
+ if (/\.css$/i.test(specifier)) {
169
+ if (statement.specifiers.length > 0) {
170
+ problems.push(`${at(statement)} imports CSS module names, which ports do not map yet`);
171
+ } else edits.push({ start: statement.start, end: statement.end, text: "" });
172
+ continue;
173
+ }
174
+ if (!typeOnly && CORE_LINK.has(specifier)) {
175
+ const values = statement.specifiers.filter(
176
+ (imported) => imported.importKind !== "type"
177
+ );
178
+ for (const imported of values) {
179
+ const name = imported.type === "ImportSpecifier" ? imported.imported.name : "default";
180
+ if (name === "Link") linkNames.add(imported.local.name);
181
+ else
182
+ problems.push(
183
+ `${at(imported)} uses ${name} from "${specifier}", which ports do not map yet`
184
+ );
185
+ }
186
+ const types = statement.specifiers.filter(
187
+ (imported) => imported.importKind === "type"
188
+ );
189
+ edits.push({
190
+ start: statement.start,
191
+ end: statement.end,
192
+ text: types.length === 0 ? "" : `import type { ${types.map(
193
+ (imported) => source.slice(imported.start, imported.end).replace(/^type\s+/, "")
194
+ ).join(", ")} } from ${JSON.stringify(specifier)};`
195
+ });
196
+ continue;
197
+ }
198
+ rewriteSource(statement.source, typeOnly ? "type" : "value");
199
+ } else if ((statement.type === "ExportNamedDeclaration" || statement.type === "ExportAllDeclaration") && statement.source) {
200
+ rewriteSource(statement.source, statement.exportKind === "type" ? "type" : "value");
201
+ }
202
+ }
203
+ walk(program, (node) => {
204
+ if (node.type === "MemberExpression" && _optionalChain([node, 'access', _ => _.object, 'optionalAccess', _2 => _2.type]) === "Identifier" && reactObjects.has(node.object.name) && _optionalChain([node, 'access', _3 => _3.property, 'optionalAccess', _4 => _4.type]) === "Identifier" && !REACT_NAMES.has(node.property.name)) {
205
+ problems.push(
206
+ `${at(node)} uses ${node.property.name} from "react", which ports do not support yet`
207
+ );
208
+ }
209
+ if (node.type === "ImportExpression") {
210
+ problems.push(`${at(node)} imports a module at runtime, which ports do not follow yet`);
211
+ }
212
+ if (node.type === "JSXOpeningElement" || node.type === "JSXClosingElement") {
213
+ const name = node.name;
214
+ if (name.type !== "JSXIdentifier") return;
215
+ const className = (tag) => {
216
+ if (node.type !== "JSXOpeningElement") return;
217
+ for (const attribute of node.attributes) {
218
+ if (attribute.type !== "JSXAttribute" || attribute.name.name !== "className") continue;
219
+ const classes = staticString(attribute.value);
220
+ if (classes === void 0) {
221
+ problems.push(`${at(attribute)} <${tag}> builds its class names at runtime`);
222
+ continue;
223
+ }
224
+ classNames.push({
225
+ edits,
226
+ attribute,
227
+ tag,
228
+ classes: classes.split(/\s+/).filter(Boolean),
229
+ at: at(attribute)
230
+ });
231
+ }
232
+ };
233
+ if (linkNames.has(name.name)) {
234
+ edits.push({ start: name.start, end: name.end, text: "__FarmLink" });
235
+ tags.add("a");
236
+ className("a");
237
+ return;
238
+ }
239
+ if (!/^[a-z]/.test(name.name)) return;
240
+ if (!DOM_TAGS.has(name.name)) {
241
+ if (node.type === "JSXOpeningElement") {
242
+ problems.push(`${at(node)} renders <${name.name}>, which ports do not draw yet`);
243
+ }
244
+ return;
245
+ }
246
+ usesDom = true;
247
+ tags.add(name.name);
248
+ edits.push({ start: name.start, end: name.end, text: `__FarmDom.${name.name}` });
249
+ if (node.type !== "JSXOpeningElement") return;
250
+ for (const attribute of node.attributes) {
251
+ if (attribute.type === "JSXSpreadAttribute") {
252
+ problems.push(`${at(attribute)} spreads props on <${name.name}>`);
253
+ continue;
254
+ }
255
+ const prop = attribute.name.type === "JSXNamespacedName" ? `${attribute.name.namespace.name}:${attribute.name.name.name}` : attribute.name.name;
256
+ if (prop !== "className" && !DOM_PROPS.has(prop) && !/^(?:aria|data)-/.test(prop)) {
257
+ problems.push(`${at(attribute)} <${name.name} ${prop}> has no port mapping yet`);
258
+ }
259
+ }
260
+ className(name.name);
261
+ }
262
+ });
263
+ if (linkNames.size > 0 || usesDom) {
264
+ const names = [
265
+ ...usesDom ? ["FarmDom as __FarmDom"] : [],
266
+ ...linkNames.size > 0 ? ["Link as __FarmLink"] : []
267
+ ];
268
+ const body = program.body;
269
+ const first = body.find(
270
+ (statement) => !(statement.type === "ExpressionStatement" && statement.directive)
271
+ );
272
+ edits.push({
273
+ start: _nullishCoalesce(_optionalChain([first, 'optionalAccess', _5 => _5.start]), () => ( source.length)),
274
+ end: _nullishCoalesce(_optionalChain([first, 'optionalAccess', _6 => _6.start]), () => ( source.length)),
275
+ text: `import { ${names.join(", ")} } from "@farm.js/native/elements";
276
+ `
277
+ });
278
+ }
279
+ outputs.push({
280
+ key: posix(_path2.default.relative(portsDir, copyOf(module.file))),
281
+ label,
282
+ source,
283
+ edits
284
+ });
285
+ }
286
+ const page = parsed.get(graph.page);
287
+ const hasDefault = page.program.body.some(
288
+ (statement) => statement.type === "ExportDefaultDeclaration"
289
+ );
290
+ if (!hasDefault) problems.push(`${posix(_path2.default.relative(root, graph.page))} has no default export`);
291
+ const sheets = [];
292
+ const themeDeclarations = [];
293
+ let tailwind = false;
294
+ for (const file of _nullishCoalesce(options.stylesheets, () => ( []))) {
295
+ let css = read(file).replace(/\/\*[\s\S]*?\*\//g, "");
296
+ css = css.replace(/@import\s+(["'])tailwindcss\1[^;]*;/g, () => {
297
+ tailwind = true;
298
+ return "";
299
+ });
300
+ css = css.replace(/@source\b[^;]*;/g, "");
301
+ css = css.replace(/@theme\b[^{;]*\{([^{}]*)\}/g, (_block, body) => {
302
+ for (const match of body.matchAll(/(--[\w*-]+)\s*:\s*([^;]+);?/g)) {
303
+ themeDeclarations.push([match[1], match[2].trim()]);
304
+ }
305
+ return "";
306
+ });
307
+ const directive = /@(?:import|layer|tailwind|apply|theme|utility|plugin|config|custom-variant|variant|reference)\b/.exec(
308
+ css
309
+ );
310
+ if (directive) {
311
+ problems.push(
312
+ `${posix(_path2.default.relative(root, file))} uses ${directive[0]}, which ports do not read yet`
313
+ );
314
+ } else sheets.push(_chunkD2X5MUF5cjs.parseFarmNativeStylesheet.call(void 0, css));
315
+ }
316
+ for (const specifier of _nullishCoalesce(options.unreadStylesheets, () => ( []))) {
317
+ problems.push(`the app imports "${specifier}", which ports cannot read as plain CSS`);
318
+ }
319
+ const sheet = {};
320
+ const rootVars = {
321
+ light: Object.assign(
322
+ {},
323
+ ...sheets.map((sheet2) => sheet2.vars.light),
324
+ Object.fromEntries(themeDeclarations)
325
+ ),
326
+ dark: Object.assign({}, ...sheets.map((sheet2) => sheet2.vars.dark))
327
+ };
328
+ const theme = themeDeclarations.length > 0 ? _chunkD2X5MUF5cjs.createFarmNativeTheme.call(void 0, themeDeclarations, rootVars) : void 0;
329
+ const contextClasses = /* @__PURE__ */ new Set([
330
+ ...graph.layoutClasses,
331
+ ...classNames.flatMap((entry2) => entry2.classes)
332
+ ]);
333
+ for (const { edits, attribute, tag, classes, at } of classNames) {
334
+ const utilities = [];
335
+ const appClasses = [];
336
+ for (const token of classes) {
337
+ const inTable = _chunkD2X5MUF5cjs.resolveFarmNativeClasses.call(void 0, token, theme).unsupported.length === 0;
338
+ const styled = _chunkD2X5MUF5cjs.inspectFarmNativeStylesheets.call(void 0, sheets, { class: token }).styled;
339
+ if (tailwind && inTable) utilities.push(token);
340
+ if (styled) appClasses.push(token);
341
+ else if (tailwind && !inTable) {
342
+ problems.push(
343
+ `${at} ${_nullishCoalesce(_chunkD2X5MUF5cjs.farmNativeClassProblem.call(void 0, token, theme), () => ( `class "${token}" has no port style`))}`
344
+ );
345
+ }
346
+ }
347
+ const tw = _chunkD2X5MUF5cjs.resolveFarmNativeClasses.call(void 0, utilities.join(" "), theme);
348
+ const css = _chunkD2X5MUF5cjs.cascadeFarmNativeStylesheetsForElement.call(void 0,
349
+ sheets,
350
+ { tag, classes: appClasses },
351
+ contextClasses
352
+ );
353
+ problems.push(...css.problems.map((message) => `${at} ${message}`));
354
+ const resolved = {
355
+ ...utilities.length > 0 ? { tw: { style: tw.style, ...tw.dark ? { dark: tw.dark } : {} } } : {},
356
+ css: {
357
+ style: css.style,
358
+ ...Object.keys(css.dark).length > 0 ? { dark: css.dark } : {},
359
+ ...css.inherit.length > 0 ? { inherit: css.inherit } : {}
360
+ }
361
+ };
362
+ edits.push({
363
+ start: attribute.start,
364
+ end: attribute.end,
365
+ text: `__farm={${JSON.stringify(resolved)}}`
366
+ });
367
+ }
368
+ for (const { key, label, source, edits } of outputs) {
369
+ let output = source;
370
+ for (const edit of edits.sort(
371
+ (left, right) => right.start - left.start || right.end - left.end
372
+ )) {
373
+ output = output.slice(0, edit.start) + edit.text + output.slice(edit.end);
374
+ }
375
+ files[key] = `// Generated by Farm from ${label} for its React Native port. Do not edit.
376
+ ${output}`;
377
+ }
378
+ for (const tag of ["html", "body", ...[...tags].sort()]) {
379
+ const cascaded = _chunkD2X5MUF5cjs.cascadeFarmNativeStylesheetsForElement.call(void 0, sheets, { tag }, contextClasses);
380
+ problems.push(...cascaded.problems);
381
+ const entry2 = {
382
+ ...Object.keys(cascaded.style).length > 0 ? { style: cascaded.style } : {},
383
+ ...Object.keys(cascaded.dark).length > 0 ? { dark: cascaded.dark } : {},
384
+ ...cascaded.inherit.length > 0 ? { inherit: cascaded.inherit } : {}
385
+ };
386
+ if (Object.keys(entry2).length > 0) sheet[tag] = entry2;
387
+ }
388
+ if (problems.length > 0) return { problems: [...new Set(problems)] };
389
+ const hasMetadata = page.program.body.some(
390
+ (statement) => statement.type === "ExportNamedDeclaration" && _optionalChain([statement, 'access', _7 => _7.declaration, 'optionalAccess', _8 => _8.declarations, 'optionalAccess', _9 => _9.some, 'call', _10 => _10(
391
+ (declaration) => _optionalChain([declaration, 'access', _11 => _11.id, 'optionalAccess', _12 => _12.name]) === "metadata"
392
+ )])
393
+ );
394
+ const entry = `${options.module}.port.tsx`;
395
+ const pageImport = specifierBetween(_path2.default.join(portsDir, entry), copyOf(graph.page));
396
+ files[entry] = [
397
+ `// Generated by Farm: the React Native port of ${posix(_path2.default.relative(root, graph.page))}. Do not edit.`,
398
+ 'import { useRouteParams } from "@farm.js/native";',
399
+ 'import { FarmDomScreen } from "@farm.js/native/elements";',
400
+ `import Page from ${JSON.stringify(pageImport)};`,
401
+ ...hasMetadata ? [`export { metadata } from ${JSON.stringify(pageImport)};`] : [],
402
+ "",
403
+ "// The app's CSS for each element the page renders, light and dark.",
404
+ `const sheet = ${JSON.stringify(sheet)};`,
405
+ "",
406
+ "export default function FarmPort() {",
407
+ " return (",
408
+ ` <FarmDomScreen sheet={sheet}${tailwind ? " preflight" : ""}>`,
409
+ " <Page params={useRouteParams()} />",
410
+ " </FarmDomScreen>",
411
+ " );",
412
+ "}",
413
+ ""
414
+ ].join("\n");
415
+ return { port: { entry, files } };
416
+ }
417
+
418
+
419
+ exports.emitFarmMobilePort = emitFarmMobilePort;