@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,7 +1,24 @@
1
+ import {
2
+ readFarmMobileWebModules,
3
+ resolveFarmMobileModules,
4
+ scanFarmMobileAppModules
5
+ } from "./chunk-SJRCWF4Z.mjs";
6
+ import "./chunk-6UUH4N4J.mjs";
7
+ import {
8
+ FARM_SHELL_HEADER,
9
+ FARM_SHELL_PARAM_SEGMENT,
10
+ FARM_SHELL_RENDER_HEADER,
11
+ FARM_SHELL_ROUTE_HEADER,
12
+ createFarmMobileShellRenderPath
13
+ } from "./chunk-JI5D7MXY.mjs";
14
+ import {
15
+ readFarmMobileClientManifest
16
+ } from "./chunk-ZNXTU4YH.mjs";
17
+ import "./chunk-EGVC4LIG.mjs";
1
18
  import {
2
19
  loadConfig,
3
20
  resolveConfig
4
- } from "./chunk-CTM4SPB3.mjs";
21
+ } from "./chunk-VPTWKOCY.mjs";
5
22
  import "./chunk-VISQDC6W.mjs";
6
23
  import {
7
24
  createPlatformBlockChecker,
@@ -13,7 +30,7 @@ import {
13
30
  } from "./chunk-UB7RVEMX.mjs";
14
31
  import {
15
32
  scanRoutePatterns
16
- } from "./chunk-2KVDHNQS.mjs";
33
+ } from "./chunk-D7LTCK3U.mjs";
17
34
  import "./chunk-Q5B4LNON.mjs";
18
35
  import {
19
36
  resolveFarmServerComponentsMode
@@ -24,53 +41,56 @@ import "./chunk-CU5SYTJG.mjs";
24
41
  import {
25
42
  getFarmRendererComponentExtensions
26
43
  } from "./chunk-ES2LD2YD.mjs";
27
- import "./chunk-KBRZAYI7.mjs";
28
- import "./chunk-2WZTGPK6.mjs";
29
- import "./chunk-LAZK6UV7.mjs";
44
+ import "./chunk-T4TBK5NY.mjs";
30
45
  import "./chunk-22W4FNTG.mjs";
31
- import "./chunk-2NGZFOKG.mjs";
32
- import "./chunk-N33DLJBC.mjs";
46
+ import "./chunk-2WZTGPK6.mjs";
47
+ import "./chunk-KVW2M6PI.mjs";
33
48
  import {
34
49
  getFarmSourceRoots
35
50
  } from "./chunk-52Y3C3HG.mjs";
51
+ import "./chunk-2NGZFOKG.mjs";
52
+ import "./chunk-N33DLJBC.mjs";
36
53
  import "./chunk-UIJOLBUL.mjs";
54
+ import "./chunk-YSXTNSXS.mjs";
37
55
  import "./chunk-VFXE6NWR.mjs";
38
- import "./chunk-LZ4SB57H.mjs";
39
- import "./chunk-X3JNB2TB.mjs";
56
+ import "./chunk-JPIUGDK4.mjs";
57
+ import "./chunk-3PX4AIXO.mjs";
40
58
  import "./chunk-WXFY5JIY.mjs";
41
59
  import "./chunk-FSQMN2MQ.mjs";
42
- import "./chunk-YWPNIYUP.mjs";
43
- import "./chunk-N77JBPLC.mjs";
44
60
  import "./chunk-YP7YO3S3.mjs";
45
- import "./chunk-Y2G5SJFB.mjs";
61
+ import "./chunk-YWPNIYUP.mjs";
62
+ import "./chunk-IFHPDLIS.mjs";
46
63
  import "./chunk-H4WUWLQR.mjs";
47
- import "./chunk-F6TLUMH7.mjs";
64
+ import "./chunk-M53MIIXY.mjs";
48
65
  import "./chunk-46P5KNTE.mjs";
49
- import "./chunk-IRSS4HS4.mjs";
66
+ import "./chunk-K3RU5MOR.mjs";
67
+ import "./chunk-KPAJWD3N.mjs";
50
68
  import "./chunk-EDPENAVO.mjs";
51
69
  import "./chunk-FSXSQQTV.mjs";
52
- import "./chunk-KJMWAUKE.mjs";
70
+ import "./chunk-C7GJDVN4.mjs";
53
71
  import "./chunk-6YFC3ZFX.mjs";
54
72
  import "./chunk-EVMXPJCB.mjs";
55
73
  import "./chunk-TGSEVBPO.mjs";
56
74
  import "./chunk-QSTRBKHZ.mjs";
57
75
  import "./chunk-MU5V7XHL.mjs";
58
- import "./chunk-Y3N5BFRJ.mjs";
76
+ import "./chunk-JSDV2NUN.mjs";
59
77
  import "./chunk-H3ASZDT7.mjs";
60
78
  import "./chunk-2DA7CLY7.mjs";
61
79
  import "./chunk-CO6UYM2D.mjs";
80
+ import "./chunk-2I6PUKWJ.mjs";
62
81
  import "./chunk-GFT5AHAT.mjs";
63
82
  import "./chunk-D2LCAV6L.mjs";
64
- import "./chunk-LM2YOGDK.mjs";
65
83
  import "./chunk-GYMGK467.mjs";
66
84
  import "./chunk-GUZC226X.mjs";
67
- import "./chunk-BLD5GVCG.mjs";
85
+ import "./chunk-W6QLRQ3V.mjs";
86
+ import "./chunk-AY2YD5ZX.mjs";
68
87
  import "./chunk-WCLLPR6H.mjs";
69
88
  import "./chunk-UAQD67HM.mjs";
70
89
  import "./chunk-AZQXXXDX.mjs";
71
90
  import "./chunk-ONG4RDW3.mjs";
72
- import "./chunk-JNYFXL7X.mjs";
73
91
  import "./chunk-LM55GS4R.mjs";
92
+ import "./chunk-JNYFXL7X.mjs";
93
+ import "./chunk-6HRAK7I5.mjs";
74
94
  import "./chunk-OHWM2VI4.mjs";
75
95
  import "./chunk-VIXTAVEA.mjs";
76
96
  import "./chunk-7S7AAK2D.mjs";
@@ -84,11 +104,20 @@ import {
84
104
  import "./chunk-Y6FXYEAI.mjs";
85
105
 
86
106
  // src/mobile/runtime.ts
87
- import { mkdir, readFile, writeFile } from "fs/promises";
107
+ import { mkdir, readFile, rm, writeFile } from "fs/promises";
88
108
  import * as path2 from "path";
89
109
 
90
110
  // src/mobile/config.ts
91
- var MOBILE_KEYS = /* @__PURE__ */ new Set(["name", "id", "server", "tabs", "routes", "native"]);
111
+ var MOBILE_KEYS = /* @__PURE__ */ new Set([
112
+ "name",
113
+ "id",
114
+ "server",
115
+ "tabs",
116
+ "routes",
117
+ "native",
118
+ "shells",
119
+ "modules"
120
+ ]);
92
121
  var ROUTE_KEYS = /* @__PURE__ */ new Set(["presentation"]);
93
122
  var TAB_KEYS = /* @__PURE__ */ new Set(["path", "title", "icon"]);
94
123
  var NATIVE_KEYS = /* @__PURE__ */ new Set(["engine", "auto", "routes", "islands", "prefetch", "budgets"]);
@@ -317,6 +346,14 @@ function validateFarmMobileConfig(input, context) {
317
346
  }
318
347
  }
319
348
  if (input.native !== void 0) validateNativeConfig(input.native, check);
349
+ if (input.shells !== void 0 && typeof input.shells !== "boolean") {
350
+ fail("shells must be true or false.");
351
+ }
352
+ if (input.modules !== void 0 && !isPlainObject(input.modules)) {
353
+ fail(
354
+ 'modules must be an object keyed by module name, such as { Device: { permissions: ["android.permission.VIBRATE"] } }.'
355
+ );
356
+ }
320
357
  if (isPlainObject(input.routes) && isPlainObject(input.native)) {
321
358
  const nativeRoutes = isPlainObject(input.native.routes) ? input.native.routes : {};
322
359
  const presented = new Map(
@@ -424,7 +461,9 @@ function resolveFarmMobileConfig(input, options, context) {
424
461
  islands: [...new Set(native.islands ?? [])].sort(),
425
462
  prefetch: native.prefetch ?? "intent",
426
463
  budgets: { ...native.budgets }
427
- }
464
+ },
465
+ shells: config.shells === true,
466
+ modules: resolveFarmMobileModules(config.modules, options, fail)
428
467
  };
429
468
  }
430
469
  function createFarmMobileContext(options) {
@@ -639,13 +678,7 @@ ${analysis.nativeBlockers.map((blocker) => ` - ${blocker}`).join("\n")}
639
678
  ` + (analysis.tier === "react-native" ? "It needs JavaScript on the device: add page.native.tsx next to the page, or " : "Remove the blockers, add page.native.tsx next to the page, or ") + "remove mobile.native."
640
679
  );
641
680
  }
642
- screens[route] = {
643
- screen: "web",
644
- source: "page",
645
- file: page.file,
646
- requested: "native",
647
- ...base
648
- };
681
+ screens[route] = analysis ? { screen: "server", source: "page", file: page.file, module, ...base } : { screen: "web", source: "page", file: page.file, requested: "native", ...base };
649
682
  continue;
650
683
  }
651
684
  if (tier === "web") {
@@ -678,9 +711,25 @@ ${analysis.nativeBlockers.map((blocker) => ` - ${blocker}`).join("\n")}
678
711
  };
679
712
  continue;
680
713
  }
714
+ if (options.analyzerTiers?.get(route)?.tier === "native") {
715
+ screens[route] = { screen: "server", source: "config", module, ...base };
716
+ continue;
717
+ }
718
+ const portFile = options.portFiles?.get(route);
719
+ if (nativeTier === "native" && portFile) {
720
+ screens[route] = {
721
+ screen: "native",
722
+ source: "config",
723
+ file: relativeFile(root, portFile),
724
+ module,
725
+ ...base
726
+ };
727
+ continue;
728
+ }
681
729
  const blockers = options.analyzerBlockers?.get(route);
730
+ const problems = options.portProblems?.get(route);
682
731
  warnings.push(
683
- `${where}.${tierKey} is "native", but "${route}" has no ${nativeTier === "native" ? "page.native.tsx" : platformFileName} and Farm cannot port pages yet, so it stays web` + (blockers?.length ? `. The analyzer would keep it web: ${blockers.join("; ")}` : "") + ". This fails the build once native screens ship."
732
+ `${where}.${tierKey} is "native", but "${route}" has no ${nativeTier === "native" ? "page.native.tsx" : platformFileName} and Farm cannot port it yet, so it stays web` + (blockers?.length ? `. The analyzer would keep it web: ${blockers.join("; ")}` : "") + (problems?.length ? `. The port would need: ${problems.join("; ")}` : "") + ". This fails the build once native screens ship."
684
733
  );
685
734
  screens[route] = { screen: "web", source: "config", requested: nativeTier, ...base };
686
735
  continue;
@@ -696,7 +745,28 @@ ${analysis.nativeBlockers.map((blocker) => ` - ${blocker}`).join("\n")}
696
745
  };
697
746
  continue;
698
747
  }
748
+ if (native.auto === "on" && options.analyzerTiers?.get(route)?.tier === "native") {
749
+ screens[route] = { screen: "server", source: "analyzer", module, ...base };
750
+ continue;
751
+ }
699
752
  if (native.auto === "on" && options.analyzerPorts?.has(route)) {
753
+ const portFile = options.portFiles?.get(route);
754
+ if (nativeTier === "native" && portFile) {
755
+ screens[route] = {
756
+ screen: "native",
757
+ source: "analyzer",
758
+ file: relativeFile(root, portFile),
759
+ module,
760
+ ...base
761
+ };
762
+ continue;
763
+ }
764
+ const problems = options.portProblems?.get(route);
765
+ if (problems?.length) {
766
+ warnings.push(
767
+ `${prefix}: "${route}" is portable, but Farm cannot port it yet, so it stays web: ${problems.join("; ")}.`
768
+ );
769
+ }
700
770
  screens[route] = { screen: "web", source: "analyzer", requested: nativeTier, ...base };
701
771
  continue;
702
772
  }
@@ -841,7 +911,109 @@ function createFarmMobileRouteManifest(mobile, options) {
841
911
  path: basePath ? tab.path === "/" ? basePath : `${basePath}${tab.path}` : tab.path
842
912
  })),
843
913
  prefetch: mobile.native.prefetch,
844
- rules
914
+ rules,
915
+ ...options.shells && Object.keys(options.shells.routes).length > 0 ? { shells: { client: options.shells.client, routes: { ...options.shells.routes } } } : {}
916
+ };
917
+ }
918
+
919
+ // src/mobile/page-shells.ts
920
+ import { createHash } from "crypto";
921
+ var SCRIPT = /<script\b[^>]*>[\s\S]*?<\/script\s*>/gi;
922
+ var LINK = /<link\b[^>]*>/gi;
923
+ var REMOVED = "\0";
924
+ var REMOVED_ALL = /\u0000/g;
925
+ var REMOVED_LINE = /\n[ \t\u0000]*\u0000[ \t\u0000]*(?=\n|$)/g;
926
+ var HEAD = /<head\b[^>]*>[\s\S]*?<\/head\s*>/i;
927
+ var BLANK_LINE = /\n[ \t]*(?=\n)/g;
928
+ function attribute(tag, name) {
929
+ const match = tag.match(
930
+ new RegExp(`\\s${name}\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s"'>]+))`, "i")
931
+ );
932
+ if (!match) return void 0;
933
+ return (match[1] ?? match[2] ?? match[3] ?? "").replace(/&amp;/g, "&");
934
+ }
935
+ function relList(tag) {
936
+ return (attribute(tag, "rel") ?? "").toLowerCase().split(/\s+/).filter(Boolean);
937
+ }
938
+ function inlineStyle(css, media) {
939
+ const safeMedia = media && /^[\w\s(),:.-]+$/.test(media) ? ` media="${media}"` : "";
940
+ return `<style${safeMedia}>${css.replace(/<\/(style)/gi, "<\\/$1")}</style>`;
941
+ }
942
+ function createFarmMobilePageShell(html, options) {
943
+ let shell = html.replace(REMOVED_ALL, "").replace(SCRIPT, REMOVED);
944
+ shell = shell.replace(LINK, (tag) => {
945
+ const rel = relList(tag);
946
+ if (rel.includes("modulepreload") || rel.includes("preload") && (attribute(tag, "as") ?? "").toLowerCase() === "script" || !rel.includes("stylesheet") && (rel.includes("canonical") || rel.includes("alternate"))) {
947
+ return REMOVED;
948
+ }
949
+ if (options.os !== "ios" || !rel.includes("stylesheet")) return tag;
950
+ const href = attribute(tag, "href");
951
+ const css = href === void 0 ? void 0 : options.readStylesheet?.(href);
952
+ return css === void 0 ? tag : inlineStyle(css, attribute(tag, "media"));
953
+ });
954
+ shell = shell.replace(REMOVED_LINE, "").replace(REMOVED_ALL, "");
955
+ shell = shell.replace(HEAD, (head) => head.replace(BLANK_LINE, ""));
956
+ return shell.replace(
957
+ /<html\b([^>]*)>/i,
958
+ (tag, attributes) => /\sdata-farm-page-shell\b/i.test(attributes) ? tag : `<html${attributes} data-farm-page-shell>`
959
+ );
960
+ }
961
+ function getFarmMobilePageShellFile(shell) {
962
+ return `${createHash("sha256").update(shell).digest("hex").slice(0, 16)}.html`;
963
+ }
964
+ async function renderFarmMobilePageShells(options) {
965
+ const routes = {};
966
+ const files = {};
967
+ const skipped = [];
968
+ const queue = [...new Set(options.routes)].sort();
969
+ const render = async (route) => {
970
+ const response = await options.fetch(
971
+ `${options.basePath}${createFarmMobileShellRenderPath(route)}`,
972
+ {
973
+ headers: {
974
+ Accept: "text/html",
975
+ [FARM_SHELL_HEADER]: options.os,
976
+ [FARM_SHELL_RENDER_HEADER]: options.token,
977
+ [FARM_SHELL_ROUTE_HEADER]: route
978
+ }
979
+ }
980
+ );
981
+ const body = await response.text();
982
+ if (response.headers.get(FARM_SHELL_RENDER_HEADER) === "none") {
983
+ skipped.push({ route, reason: body.trim() || "the server rendered no shell" });
984
+ return;
985
+ }
986
+ const type = response.headers.get("content-type")?.toLowerCase() ?? "";
987
+ if (response.status !== 200 || !type.includes("text/html")) {
988
+ const location = response.headers.get("location");
989
+ skipped.push({
990
+ route,
991
+ reason: `the server answered ${response.status}${location ? ` (to ${location})` : ""}`
992
+ });
993
+ return;
994
+ }
995
+ const shell = createFarmMobilePageShell(body, options);
996
+ const file = getFarmMobilePageShellFile(shell);
997
+ files[file] = shell;
998
+ routes[route] = file;
999
+ };
1000
+ const workers = Array.from(
1001
+ { length: Math.max(1, Math.min(options.concurrency ?? 4, queue.length)) },
1002
+ async () => {
1003
+ for (let route = queue.shift(); route !== void 0; route = queue.shift()) {
1004
+ await render(route);
1005
+ }
1006
+ }
1007
+ );
1008
+ await Promise.all(workers);
1009
+ skipped.sort((left, right) => left.route < right.route ? -1 : left.route > right.route ? 1 : 0);
1010
+ return {
1011
+ shells: {
1012
+ client: options.client,
1013
+ routes: Object.fromEntries(Object.entries(routes).sort(([a], [b]) => a < b ? -1 : 1)),
1014
+ files: Object.fromEntries(Object.entries(files).sort(([a], [b]) => a < b ? -1 : 1))
1015
+ },
1016
+ skipped
845
1017
  };
846
1018
  }
847
1019
 
@@ -862,7 +1034,9 @@ function getFarmMobileOutputDirs(distDir) {
862
1034
  ios: path2.join(root, "ios"),
863
1035
  dist: path2.join(root, "dist"),
864
1036
  report: path2.join(root, "native-report.json"),
865
- analyzerCache: path2.join(distDir, "cache", "mobile", "analyzer.json")
1037
+ ports: path2.join(root, "ports"),
1038
+ analyzerCache: path2.join(distDir, "cache", "mobile", "analyzer.json"),
1039
+ client: path2.join(distDir, "client")
866
1040
  };
867
1041
  }
868
1042
  var SCRIPT_PAGE = /\.(?:tsx|ts|jsx|js)$/;
@@ -921,7 +1095,35 @@ async function resolveFarmMobileApp(options = {}) {
921
1095
  platformFiles: true
922
1096
  });
923
1097
  const routes = [...scan.pages].sort();
924
- const mobile = resolveFarmMobileConfig(block, { root, srcDir: config.srcDir, routes }, context);
1098
+ let appModules;
1099
+ try {
1100
+ appModules = scanFarmMobileAppModules({ root, srcDir: config.srcDir });
1101
+ } catch (error) {
1102
+ throw Object.assign(
1103
+ new FarmMobileError(`mobile (os: ${context.os}): ${error.message}`),
1104
+ { cause: error }
1105
+ );
1106
+ }
1107
+ const mobile = resolveFarmMobileConfig(
1108
+ block,
1109
+ {
1110
+ root,
1111
+ srcDir: config.srcDir,
1112
+ routes,
1113
+ appModules: appModules?.specs.map((spec) => spec.name)
1114
+ },
1115
+ context
1116
+ );
1117
+ if (appModules && Object.values(mobile.modules).some((module) => module.web)) {
1118
+ try {
1119
+ appModules = readFarmMobileWebModules(appModules, mobile.modules, { root });
1120
+ } catch (error) {
1121
+ throw Object.assign(
1122
+ new FarmMobileError(`mobile (os: ${context.os}): ${error.message}`),
1123
+ { cause: error }
1124
+ );
1125
+ }
1126
+ }
925
1127
  const pageExports = await readPageExports(root, scan.pageFiles, context.os);
926
1128
  for (const [route, page] of pageExports) {
927
1129
  if (page.config.presentation !== void 0 && mobile.tabs.some((tab) => tab.path === route)) {
@@ -941,6 +1143,8 @@ async function resolveFarmMobileApp(options = {}) {
941
1143
  let { screens, warnings } = resolveFarmMobileScreens(screenOptions);
942
1144
  let report;
943
1145
  let analyzerStats;
1146
+ const ports = /* @__PURE__ */ new Map();
1147
+ const portProblems = /* @__PURE__ */ new Map();
944
1148
  const asserted = [...pageExports.values()].some((page) => page.config.native === true);
945
1149
  const analyze = options.analyze === "always" || asserted || options.analyze === true && mobile.native.auto !== "off";
946
1150
  if (analyze) {
@@ -948,18 +1152,53 @@ async function resolveFarmMobileApp(options = {}) {
948
1152
  const decision = screens[route];
949
1153
  return decision.source === "default" || decision.requested !== void 0;
950
1154
  });
951
- const { analyzeFarmMobileRoutes } = await import("./analyzer-Z6TNEAET.mjs");
952
- const result = await analyzeFarmMobileRoutes({
1155
+ const portable = context.os === "android" && mobile.native.engine !== "platform" && (mobile.native.auto === "on" || candidates.some((route) => screens[route].requested === "native"));
1156
+ const { analyzeFarmMobileRoutes } = await import("./analyzer-22BEYV7S.mjs");
1157
+ const analyzed = await analyzeFarmMobileRoutes({
953
1158
  root,
954
1159
  srcDir: config.srcDir,
955
- routes: candidates,
1160
+ routes: portable ? routes : candidates,
956
1161
  pageFiles: scan.pageFiles,
957
1162
  serverComponents: resolveFarmServerComponentsMode(config.experimental?.serverComponents) !== void 0,
958
1163
  cacheFile: path2.resolve(root, getFarmMobileOutputDirs(config.distDir).analyzerCache)
959
1164
  });
960
- analyzerStats = result.stats;
1165
+ analyzerStats = analyzed.stats;
1166
+ const result = {
1167
+ ...analyzed,
1168
+ routes: Object.fromEntries(
1169
+ candidates.flatMap(
1170
+ (route) => analyzed.routes[route] ? [[route, analyzed.routes[route]]] : []
1171
+ )
1172
+ )
1173
+ };
1174
+ if (portable) {
1175
+ const { emitFarmMobilePort } = await import("./port-WOOQ3V56.mjs");
1176
+ const portsDir = path2.resolve(root, getFarmMobileOutputDirs(config.distDir).ports);
1177
+ for (const analysis of Object.values(result.routes)) {
1178
+ const graph = result.graphs[analysis.route];
1179
+ const wanted = mobile.native.auto === "on" && analysis.decision === "port" || screens[analysis.route].requested === "native";
1180
+ if (!graph || !wanted || analysis.tier === "native") continue;
1181
+ const emitted = await emitFarmMobilePort({
1182
+ root,
1183
+ graph,
1184
+ portsDir,
1185
+ module: createFarmMobileModuleId(analysis.route),
1186
+ stylesheets: result.stylesheets,
1187
+ unreadStylesheets: result.unreadStylesheets
1188
+ });
1189
+ if ("problems" in emitted) portProblems.set(analysis.route, emitted.problems);
1190
+ else ports.set(analysis.route, emitted.port);
1191
+ }
1192
+ }
961
1193
  ({ screens, warnings } = resolveFarmMobileScreens({
962
1194
  ...screenOptions,
1195
+ portFiles: new Map(
1196
+ [...ports].map(([route, port]) => [
1197
+ route,
1198
+ path2.resolve(root, getFarmMobileOutputDirs(config.distDir).ports, port.entry)
1199
+ ])
1200
+ ),
1201
+ portProblems,
963
1202
  analyzerPorts: new Set(
964
1203
  Object.values(result.routes).filter((route) => route.decision === "port").map((route) => route.route)
965
1204
  ),
@@ -1005,7 +1244,8 @@ async function resolveFarmMobileApp(options = {}) {
1005
1244
  server,
1006
1245
  basePath: config.basePath,
1007
1246
  i18n,
1008
- screens
1247
+ screens,
1248
+ ...options.shells ? { shells: options.shells } : {}
1009
1249
  });
1010
1250
  return {
1011
1251
  context,
@@ -1016,7 +1256,9 @@ async function resolveFarmMobileApp(options = {}) {
1016
1256
  warnings,
1017
1257
  nativeLayouts,
1018
1258
  pageFiles: scan.pageFiles,
1019
- ...report ? { report, analyzerStats } : {}
1259
+ ports: Object.fromEntries(ports),
1260
+ ...report ? { report, analyzerStats } : {},
1261
+ ...appModules ? { appModules } : {}
1020
1262
  };
1021
1263
  }
1022
1264
  async function generateFarmMobileRoutes(options = {}) {
@@ -1026,6 +1268,15 @@ async function generateFarmMobileRoutes(options = {}) {
1026
1268
  await mkdir(path2.dirname(file), { recursive: true });
1027
1269
  await writeFile(file, `${JSON.stringify(app.manifest, null, 2)}
1028
1270
  `);
1271
+ const portsDir = path2.resolve(app.config.root, dirs.ports);
1272
+ await rm(portsDir, { recursive: true, force: true });
1273
+ for (const port of Object.values(app.ports)) {
1274
+ for (const [relative3, source] of Object.entries(port.files)) {
1275
+ const target = path2.join(portsDir, relative3);
1276
+ await mkdir(path2.dirname(target), { recursive: true });
1277
+ await writeFile(target, source);
1278
+ }
1279
+ }
1029
1280
  if (!app.report) return { ...app, file };
1030
1281
  const reportFile = path2.resolve(app.config.root, dirs.report);
1031
1282
  await writeFile(reportFile, `${JSON.stringify(app.report, null, 2)}
@@ -1037,15 +1288,23 @@ async function generateFarmMobileRoutes(options = {}) {
1037
1288
  return { ...app, file, reportFile, table };
1038
1289
  }
1039
1290
  export {
1291
+ FARM_SHELL_PARAM_SEGMENT,
1292
+ FARM_SHELL_RENDER_HEADER,
1293
+ FARM_SHELL_ROUTE_HEADER,
1040
1294
  FarmMobileError,
1041
1295
  createFarmMobileContext,
1042
1296
  createFarmMobileModuleId,
1297
+ createFarmMobilePageShell,
1043
1298
  createFarmMobileRouteManifest,
1044
1299
  createFarmMobileRoutePattern,
1300
+ createFarmMobileShellRenderPath,
1045
1301
  formatFarmMobileNativeReport,
1046
1302
  generateFarmMobileRoutes,
1047
1303
  getFarmMobileOutputDirs,
1304
+ getFarmMobilePageShellFile,
1305
+ readFarmMobileClientManifest,
1048
1306
  readFarmMobilePageExport,
1307
+ renderFarmMobilePageShells,
1049
1308
  resolveFarmMobileApp,
1050
1309
  resolveFarmMobileBlock,
1051
1310
  resolveFarmMobileConfig,
@@ -1,7 +1,7 @@
1
1
  import { f as EndpointFailure } from './endpoint.d-BkMSCRf6.mjs';
2
2
  import { c as PluginRoutesFactory } from './route.d-BaVH3V0w.mjs';
3
3
  import { b as APIRouteParams, A as APIRouteMatch } from './route-pattern.d-CVsVbq5n.mjs';
4
- import './client-plugins.d-Bx3FXpqm.mjs';
4
+ import './client-plugins.d-CgQQ-EAv.mjs';
5
5
 
6
6
  interface MountedRoute {
7
7
  path: string;
@@ -1,7 +1,7 @@
1
1
  import { f as EndpointFailure } from './endpoint.d-BgHn0lhl.js';
2
2
  import { c as PluginRoutesFactory } from './route.d-DBTEqifW.js';
3
3
  import { b as APIRouteParams, A as APIRouteMatch } from './route-pattern.d-CVsVbq5n.js';
4
- import './client-plugins.d-TiLbS5j4.js';
4
+ import './client-plugins.d-vXrbcfJ1.js';
5
5
 
6
6
  interface MountedRoute {
7
7
  path: string;
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  findSchemaTableOwners,
3
3
  migrateSchemaTables
4
- } from "./chunk-WSDKXV4E.mjs";
5
- import "./chunk-WNLPQW7W.mjs";
4
+ } from "./chunk-72KABRWN.mjs";
6
5
  import "./chunk-2DLGV2ZG.mjs";
6
+ import "./chunk-WNLPQW7W.mjs";
7
7
  import "./chunk-F3N52U7S.mjs";
8
8
  import {
9
9
  logger
10
- } from "./chunk-Y3N5BFRJ.mjs";
10
+ } from "./chunk-JSDV2NUN.mjs";
11
11
  import "./chunk-H3ASZDT7.mjs";
12
12
  import "./chunk-OHWM2VI4.mjs";
13
13
  import "./chunk-AYP2YFVN.mjs";
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
 
4
- var _chunkN7JQXQAVcjs = require('./chunk-N7JQXQAV.cjs');
5
- require('./chunk-SHD265HW.cjs');
4
+ var _chunk5OJVKXFVcjs = require('./chunk-5OJVKXFV.cjs');
6
5
  require('./chunk-SYW346ZN.cjs');
6
+ require('./chunk-SHD265HW.cjs');
7
7
  require('./chunk-GBMWLDCC.cjs');
8
8
 
9
9
 
10
- var _chunkVQJYGZNXcjs = require('./chunk-VQJYGZNX.cjs');
10
+ var _chunkQMNWKQL4cjs = require('./chunk-QMNWKQL4.cjs');
11
11
  require('./chunk-SUCDVKUB.cjs');
12
12
  require('./chunk-6CTFVBAT.cjs');
13
13
  require('./chunk-YTVSWXEZ.cjs');
@@ -17,12 +17,12 @@ require('./chunk-BTZ5O6VM.cjs');
17
17
  async function noticePendingSchemaChanges(config, options = {}) {
18
18
  const lines = [];
19
19
  try {
20
- const owners = _chunkN7JQXQAVcjs.findSchemaTableOwners.call(void 0, config);
20
+ const owners = _chunk5OJVKXFVcjs.findSchemaTableOwners.call(void 0, config);
21
21
  const timeoutMs = _nullishCoalesce(options.timeoutMs, () => ( 5e3));
22
22
  for (const owner of owners) {
23
23
  try {
24
24
  const result = await withTimeout(
25
- _chunkN7JQXQAVcjs.migrateSchemaTables.call(void 0, owner, { config, log: () => {
25
+ _chunk5OJVKXFVcjs.migrateSchemaTables.call(void 0, owner, { config, log: () => {
26
26
  } }),
27
27
  timeoutMs
28
28
  );
@@ -37,7 +37,7 @@ async function noticePendingSchemaChanges(config, options = {}) {
37
37
  }
38
38
  } catch (e2) {
39
39
  }
40
- const log = _nullishCoalesce(options.log, () => ( ((message) => _chunkVQJYGZNXcjs.logger.warn(message))));
40
+ const log = _nullishCoalesce(options.log, () => ( ((message) => _chunkQMNWKQL4cjs.logger.warn(message))));
41
41
  for (const line of lines) log(line);
42
42
  return lines;
43
43
  }
@@ -1,6 +1,6 @@
1
1
  import { FormHTMLAttributes, ComponentType } from 'react';
2
2
  import { ServerFn } from './server-fn.mjs';
3
- import { R as RetryOptions } from './api-client.d-CeA6tNA6.mjs';
3
+ import { k as RetryOptions } from './api-client.d-BNLXNCXJ.mjs';
4
4
  import './cache.mjs';
5
5
  import './server-fn-error.d-DrcH9cc1.mjs';
6
6
  import './endpoint.d-BkMSCRf6.mjs';
@@ -1,6 +1,6 @@
1
1
  import { FormHTMLAttributes, ComponentType } from 'react';
2
2
  import { ServerFn } from './server-fn.js';
3
- import { R as RetryOptions } from './api-client.d-BWcqZciH.js';
3
+ import { k as RetryOptions } from './api-client.d-ddQBNGtu.js';
4
4
  import './cache.js';
5
5
  import './server-fn-error.d-DrcH9cc1.js';
6
6
  import './endpoint.d-BgHn0lhl.js';
@@ -12,8 +12,8 @@ var _chunkCL2ONP73cjs = require('./chunk-CL2ONP73.cjs');
12
12
  var _chunkUYTAP4FQcjs = require('./chunk-UYTAP4FQ.cjs');
13
13
  require('./chunk-HXNLKCWH.cjs');
14
14
  require('./chunk-6XQSPIN6.cjs');
15
- require('./chunk-7JUIK547.cjs');
16
15
  require('./chunk-A25FXJ7D.cjs');
16
+ require('./chunk-7JUIK547.cjs');
17
17
  require('./chunk-HNAISJFD.cjs');
18
18
  require('./chunk-6CTFVBAT.cjs');
19
19
  require('./chunk-3BIASUGR.cjs');
@@ -1,5 +1,5 @@
1
- import { eF as RedirectConfig, s as FarmRequest, t as FarmResponse, u as FarmPluginContext, F as FarmPlugin, ef as HeaderConfig, eO as RewriteConfig } from './client-plugins.d-Bx3FXpqm.mjs';
2
- export { a4 as FarmPluginLifecycle, ad as FarmPluginRuntimeEndpoint, ae as FarmPluginRuntimeEndpointEvent, ao as FarmRequestPluginContext, ap as FarmRequestStore } from './client-plugins.d-Bx3FXpqm.mjs';
1
+ import { eF as RedirectConfig, s as FarmRequest, t as FarmResponse, u as FarmPluginContext, F as FarmPlugin, ef as HeaderConfig, eO as RewriteConfig } from './client-plugins.d-CgQQ-EAv.mjs';
2
+ export { a4 as FarmPluginLifecycle, ad as FarmPluginRuntimeEndpoint, ae as FarmPluginRuntimeEndpointEvent, ao as FarmRequestPluginContext, ap as FarmRequestStore } from './client-plugins.d-CgQQ-EAv.mjs';
3
3
  import { R as ResolvedFarmI18nConfig } from './types.d-C41ePjvP.mjs';
4
4
  export { createCompressionPlugin } from './internal/compression-runtime.mjs';
5
5
  import './lifecycle.d-C2aLBOwu.mjs';
@@ -30,7 +30,7 @@ import './layers.d-CcS42OGR.mjs';
30
30
  import 'rolldown/utils';
31
31
  import 'rolldown';
32
32
  import './image-config.d-CeDgNyX4.mjs';
33
- import './config.d-iRPI16ku.mjs';
33
+ import './config.d-DqZkLwef.mjs';
34
34
  import './types.d-DQnyD3VD.mjs';
35
35
  import './font.mjs';
36
36
 
@@ -1,5 +1,5 @@
1
- import { eF as RedirectConfig, s as FarmRequest, t as FarmResponse, u as FarmPluginContext, F as FarmPlugin, ef as HeaderConfig, eO as RewriteConfig } from './client-plugins.d-TiLbS5j4.js';
2
- export { a4 as FarmPluginLifecycle, ad as FarmPluginRuntimeEndpoint, ae as FarmPluginRuntimeEndpointEvent, ao as FarmRequestPluginContext, ap as FarmRequestStore } from './client-plugins.d-TiLbS5j4.js';
1
+ import { eF as RedirectConfig, s as FarmRequest, t as FarmResponse, u as FarmPluginContext, F as FarmPlugin, ef as HeaderConfig, eO as RewriteConfig } from './client-plugins.d-vXrbcfJ1.js';
2
+ export { a4 as FarmPluginLifecycle, ad as FarmPluginRuntimeEndpoint, ae as FarmPluginRuntimeEndpointEvent, ao as FarmRequestPluginContext, ap as FarmRequestStore } from './client-plugins.d-vXrbcfJ1.js';
3
3
  import { R as ResolvedFarmI18nConfig } from './types.d-C41ePjvP.js';
4
4
  export { createCompressionPlugin } from './internal/compression-runtime.js';
5
5
  import './lifecycle.d-C2aLBOwu.js';
@@ -30,7 +30,7 @@ import './layers.d-CcS42OGR.js';
30
30
  import 'rolldown/utils';
31
31
  import 'rolldown';
32
32
  import './image-config.d-CeDgNyX4.js';
33
- import './config.d-iRPI16ku.js';
33
+ import './config.d-DqZkLwef.js';
34
34
  import './types.d-DQnyD3VD.js';
35
35
  import './font.js';
36
36
 
@@ -12,8 +12,8 @@ import {
12
12
  } from "./chunk-QPJ4MZTO.mjs";
13
13
  import "./chunk-XQ4DPO4G.mjs";
14
14
  import "./chunk-ONG4RDW3.mjs";
15
- import "./chunk-JNYFXL7X.mjs";
16
15
  import "./chunk-LM55GS4R.mjs";
16
+ import "./chunk-JNYFXL7X.mjs";
17
17
  import "./chunk-6HRAK7I5.mjs";
18
18
  import "./chunk-OHWM2VI4.mjs";
19
19
  import "./chunk-VIXTAVEA.mjs";