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

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 (299) hide show
  1. package/dist/{agent-mcp-BBMfNpsC.d.ts → agent-mcp.d-CR5Ov83o.d.ts} +1 -1
  2. package/dist/{agent-mcp-D44ip11f.d.mts → agent-mcp.d-Z5DuwrqW.d.mts} +1 -1
  3. package/dist/agent-runtime.cjs +3 -3
  4. package/dist/agent-runtime.d.mts +13 -13
  5. package/dist/agent-runtime.d.ts +13 -13
  6. package/dist/agent-runtime.mjs +2 -2
  7. package/dist/{analyzer-VKUDHNDF.cjs → analyzer-T76CN3S7.cjs} +70 -21
  8. package/dist/{analyzer-HOUCQR3K.mjs → analyzer-Z6TNEAET.mjs} +70 -21
  9. package/dist/api/client.d.mts +4 -4
  10. package/dist/api/client.d.ts +4 -4
  11. package/dist/api/route-manager.d.mts +19 -19
  12. package/dist/api/route-manager.d.ts +19 -19
  13. package/dist/api/runtime.d.mts +15 -15
  14. package/dist/api/runtime.d.ts +15 -15
  15. package/dist/{api-client-CvI5oOBE.d.ts → api-client.d-BWcqZciH.d.ts} +3 -3
  16. package/dist/{api-client-CFdv-Xgh.d.mts → api-client.d-CeA6tNA6.d.mts} +3 -3
  17. package/dist/api.cjs +3 -3
  18. package/dist/api.d.mts +21 -21
  19. package/dist/api.d.ts +21 -21
  20. package/dist/api.mjs +2 -2
  21. package/dist/{app-manifest-LzjoNPeq.d.ts → app-manifest.d-CAHkOBFa.d.mts} +1 -1
  22. package/dist/{app-manifest-BC6mFn5A.d.mts → app-manifest.d-DiWr_Jfx.d.ts} +1 -1
  23. package/dist/app-markdown.d.mts +14 -14
  24. package/dist/app-markdown.d.ts +14 -14
  25. package/dist/{app-aeD4s_mg.d.mts → app.d-BfgJCsTQ.d.mts} +12 -10
  26. package/dist/{app-CourU3rQ.d.ts → app.d-DmapqkbV.d.ts} +12 -10
  27. package/dist/{chunk-AMRK3P6W.mjs → chunk-4SSRBCBR.mjs} +233 -84
  28. package/dist/{chunk-PDJSL7PL.cjs → chunk-5IONBVJY.cjs} +3 -3
  29. package/dist/{chunk-IOUOGRDX.cjs → chunk-5N7QAGEA.cjs} +25 -6
  30. package/dist/{chunk-DGOLAZLV.cjs → chunk-65Y5SIBH.cjs} +1 -1
  31. package/dist/{chunk-ZF3GX4O7.mjs → chunk-6CYQQQGR.mjs} +1 -1
  32. package/dist/{chunk-QI5AQMEE.mjs → chunk-72NBDVWQ.mjs} +1 -1
  33. package/dist/{chunk-I2ZA5SXS.mjs → chunk-74Z5KX4A.mjs} +53 -19
  34. package/dist/chunk-7FVVQEVL.cjs +541 -0
  35. package/dist/{chunk-OD6WM3I7.mjs → chunk-AV26KHTG.mjs} +1 -1
  36. package/dist/chunk-C3BOESDW.mjs +541 -0
  37. package/dist/{chunk-WAPQWAE6.cjs → chunk-CECUDGXQ.cjs} +9 -8
  38. package/dist/{chunk-IUQLRTTO.mjs → chunk-CO6UYM2D.mjs} +14 -1
  39. package/dist/{chunk-JF5CNHHF.mjs → chunk-CTM4SPB3.mjs} +123 -8
  40. package/dist/{chunk-WVX3BUNJ.mjs → chunk-CZ35L6PL.mjs} +8 -1
  41. package/dist/{chunk-SO3T6T4I.cjs → chunk-DTU4PX7V.cjs} +408 -259
  42. package/dist/{chunk-YLNBWUVS.mjs → chunk-E6LTONL4.mjs} +1 -1
  43. package/dist/{chunk-R5P4KFPM.mjs → chunk-E73PGHSR.mjs} +8 -6
  44. package/dist/{chunk-4GJJ65RB.mjs → chunk-EIMK7D2D.mjs} +24 -5
  45. package/dist/{chunk-CY7H5KS4.cjs → chunk-EKJYE4Y7.cjs} +2 -2
  46. package/dist/{chunk-3HA7PP72.mjs → chunk-FM2UEKS2.mjs} +60 -13
  47. package/dist/{chunk-VIFPE5RG.cjs → chunk-GNJIYJMS.cjs} +81 -34
  48. package/dist/{chunk-X5BCMLGP.cjs → chunk-GUJTVM36.cjs} +1 -1
  49. package/dist/{chunk-XWC5NAHV.mjs → chunk-IBSAYAWB.mjs} +2 -2
  50. package/dist/{chunk-J22JD5YJ.cjs → chunk-J3LBO2O4.cjs} +9 -7
  51. package/dist/{chunk-J37KTQIA.cjs → chunk-NK2VWS7P.cjs} +52 -3
  52. package/dist/{chunk-WSY2JD7O.mjs → chunk-NN3MOPSI.mjs} +1 -1
  53. package/dist/{chunk-O3MMJPC2.cjs → chunk-NPQLMP7M.cjs} +124 -9
  54. package/dist/{chunk-QK3HBOTG.cjs → chunk-NXBHYO7S.cjs} +5 -5
  55. package/dist/{chunk-S5ZA2T2W.mjs → chunk-PMKUU273.mjs} +21 -7
  56. package/dist/{chunk-75WWOZ5C.mjs → chunk-QOSDWGKT.mjs} +1 -1
  57. package/dist/{chunk-VO6NLTV4.cjs → chunk-QXPSWMUD.cjs} +3 -3
  58. package/dist/{chunk-Y7TLL65B.cjs → chunk-UQHIWZZ6.cjs} +11 -4
  59. package/dist/{chunk-PPDHCRTC.mjs → chunk-VS7EHLLW.mjs} +1 -1
  60. package/dist/{chunk-F42U3R4F.cjs → chunk-WZW6LEHM.cjs} +55 -41
  61. package/dist/{chunk-USL2ANCB.cjs → chunk-X2AMN2WV.cjs} +2 -2
  62. package/dist/{chunk-HHFMECFO.mjs → chunk-Y2G5SJFB.mjs} +2 -1
  63. package/dist/{chunk-Z5MZDFX4.cjs → chunk-YIHRZBD7.cjs} +14 -1
  64. package/dist/{chunk-DWW3AMJX.cjs → chunk-YU42A5MA.cjs} +282 -248
  65. package/dist/{chunk-MMEEXMUQ.cjs → chunk-ZOWNWHK6.cjs} +2 -2
  66. package/dist/{chunk-C5JXCUKR.mjs → chunk-ZQ5BDNKW.mjs} +51 -2
  67. package/dist/client/lifecycle.d.mts +1 -1
  68. package/dist/client/lifecycle.d.ts +1 -1
  69. package/dist/{client-plugins-cqy_dQd0.d.mts → client-plugins.d-Bx3FXpqm.d.mts} +57 -15
  70. package/dist/{client-plugins-CFBEfVPO.d.ts → client-plugins.d-TiLbS5j4.d.ts} +57 -15
  71. package/dist/client-plugins.d.mts +13 -13
  72. package/dist/client-plugins.d.ts +13 -13
  73. package/dist/client.d.mts +24 -24
  74. package/dist/client.d.ts +24 -24
  75. package/dist/{config-CnhyvvmT.d.mts → config.d-iRPI16ku.d.mts} +6 -2
  76. package/dist/{config-CnhyvvmT.d.ts → config.d-iRPI16ku.d.ts} +6 -2
  77. package/dist/config.d.mts +13 -13
  78. package/dist/config.d.ts +13 -13
  79. package/dist/desktop.d.mts +14 -14
  80. package/dist/desktop.d.ts +14 -14
  81. package/dist/{dev-guard-YLO5DE3H.cjs → dev-guard-2UW2KERP.cjs} +2 -2
  82. package/dist/{dev-guard-4PFQNXQX.mjs → dev-guard-ONNMVQUN.mjs} +1 -1
  83. package/dist/{devtools-4ZLMD454.cjs → devtools-6XWCZIGO.cjs} +4 -4
  84. package/dist/{devtools-4MLL3RAL.mjs → devtools-UQLDAOEI.mjs} +3 -3
  85. package/dist/docs.cjs +8 -6
  86. package/dist/docs.d.mts +23 -15
  87. package/dist/docs.d.ts +23 -15
  88. package/dist/docs.mjs +7 -5
  89. package/dist/environment/vite.cjs +2 -2
  90. package/dist/environment/vite.d.mts +1 -1
  91. package/dist/environment/vite.d.ts +1 -1
  92. package/dist/environment/vite.mjs +1 -1
  93. package/dist/{generate-route-types-TF5Wwtvz.d.mts → generate-route-types.d-BL2pq6xC.d.ts} +1 -1
  94. package/dist/{generate-route-types-DQP0cUzk.d.ts → generate-route-types.d-BoVDU8qX.d.mts} +1 -1
  95. package/dist/i18n/client.d.mts +2 -2
  96. package/dist/i18n/client.d.ts +2 -2
  97. package/dist/i18n/index.d.mts +3 -3
  98. package/dist/i18n/index.d.ts +3 -3
  99. package/dist/i18n/server.d.mts +5 -5
  100. package/dist/i18n/server.d.ts +5 -5
  101. package/dist/image/server.d.mts +1 -1
  102. package/dist/image/server.d.ts +1 -1
  103. package/dist/image/sharp.d.mts +1 -1
  104. package/dist/image/sharp.d.ts +1 -1
  105. package/dist/image.d.mts +1 -1
  106. package/dist/image.d.ts +1 -1
  107. package/dist/index.cjs +20 -17
  108. package/dist/{index-D3l4tREW.d.ts → index.d-BNNDpql4.d.ts} +2 -2
  109. package/dist/{index-DPUAPho_.d.mts → index.d-BqcfqJvt.d.mts} +2 -2
  110. package/dist/{index-BxjN_UDZ.d.ts → index.d-YxJ2AiDF.d.mts} +2 -2
  111. package/dist/{index-BYkNbeQV.d.mts → index.d-yueUNipJ.d.ts} +2 -2
  112. package/dist/index.d.mts +42 -42
  113. package/dist/index.d.ts +42 -42
  114. package/dist/index.mjs +19 -16
  115. package/dist/instrumentation.d.mts +2 -2
  116. package/dist/instrumentation.d.ts +2 -2
  117. package/dist/integrations.cjs +3 -3
  118. package/dist/integrations.d.mts +13 -13
  119. package/dist/integrations.d.ts +13 -13
  120. package/dist/integrations.mjs +2 -2
  121. package/dist/internal/app-markdown-runtime.d.mts +14 -14
  122. package/dist/internal/app-markdown-runtime.d.ts +14 -14
  123. package/dist/internal/build-runtime.cjs +16 -15
  124. package/dist/internal/build-runtime.d.mts +16 -16
  125. package/dist/internal/build-runtime.d.ts +16 -16
  126. package/dist/internal/build-runtime.mjs +15 -14
  127. package/dist/internal/cli-runtime.cjs +7 -7
  128. package/dist/internal/cli-runtime.mjs +6 -6
  129. package/dist/internal/client-error-overlay.cjs +4 -4
  130. package/dist/internal/client-error-overlay.mjs +1 -1
  131. package/dist/internal/client-runtime.d.mts +21 -21
  132. package/dist/internal/client-runtime.d.ts +21 -21
  133. package/dist/internal/compression-runtime.d.mts +13 -13
  134. package/dist/internal/compression-runtime.d.ts +13 -13
  135. package/dist/internal/config-runtime.cjs +5 -5
  136. package/dist/internal/config-runtime.d.mts +29 -92
  137. package/dist/internal/config-runtime.d.ts +29 -92
  138. package/dist/internal/config-runtime.mjs +4 -4
  139. package/dist/internal/form-actions.d.mts +1 -1
  140. package/dist/internal/form-actions.d.ts +1 -1
  141. package/dist/internal/infra-analytics-runtime.cjs +5 -5
  142. package/dist/internal/infra-analytics-runtime.mjs +3 -3
  143. package/dist/internal/island-value-store.d.mts +1 -1
  144. package/dist/internal/island-value-store.d.ts +1 -1
  145. package/dist/internal/islands-runtime.d.mts +1 -1
  146. package/dist/internal/islands-runtime.d.ts +1 -1
  147. package/dist/internal/isolated-boundary.d.mts +2 -2
  148. package/dist/internal/isolated-boundary.d.ts +2 -2
  149. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  150. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  151. package/dist/internal/production-runtime.cjs +11 -3
  152. package/dist/internal/production-runtime.d.mts +57 -31
  153. package/dist/internal/production-runtime.d.ts +57 -31
  154. package/dist/internal/production-runtime.mjs +10 -2
  155. package/dist/internal/server-tree.d.mts +1 -1
  156. package/dist/internal/server-tree.d.ts +1 -1
  157. package/dist/markdown.d.mts +13 -13
  158. package/dist/markdown.d.ts +13 -13
  159. package/dist/middleware.cjs +4 -4
  160. package/dist/middleware.d.mts +15 -15
  161. package/dist/middleware.d.ts +15 -15
  162. package/dist/middleware.mjs +3 -3
  163. package/dist/mobile.d.mts +7 -7
  164. package/dist/mobile.d.ts +7 -7
  165. package/dist/{navigation-delegate-BU4xqdnw.d.ts → navigation-delegate.d-BY1e_Xrh.d.ts} +1 -1
  166. package/dist/{navigation-delegate-DLhbfEN4.d.mts → navigation-delegate.d-HnDXhlyP.d.mts} +1 -1
  167. package/dist/navigation.d.mts +17 -17
  168. package/dist/navigation.d.ts +17 -17
  169. package/dist/observability.d.mts +1 -1
  170. package/dist/observability.d.ts +1 -1
  171. package/dist/plugin.cjs +11 -11
  172. package/dist/plugin.d.mts +17 -17
  173. package/dist/plugin.d.ts +17 -17
  174. package/dist/plugin.mjs +10 -10
  175. package/dist/{production-runtime-DLA4J5WG.d.mts → production-runtime.d-BpJUDzP8.d.mts} +3 -3
  176. package/dist/{production-runtime-C78A8YgK.d.ts → production-runtime.d-lMjvE9cf.d.ts} +3 -3
  177. package/dist/{programmatic-routes-client-NpqGBn-i.d.mts → programmatic-routes-client.d-6CGQ3TCk.d.mts} +10 -2
  178. package/dist/{programmatic-routes-client-CBqkNhBy.d.ts → programmatic-routes-client.d-BlFp5hv4.d.ts} +10 -2
  179. package/dist/query/client.d.mts +1 -1
  180. package/dist/query/client.d.ts +1 -1
  181. package/dist/query/index.d.mts +1 -1
  182. package/dist/query/index.d.ts +1 -1
  183. package/dist/query/server.d.mts +1 -1
  184. package/dist/query/server.d.ts +1 -1
  185. package/dist/{render-plan-CrqcBbnV.d.ts → render-plan.d-BH9edqKs.d.mts} +2 -2
  186. package/dist/{render-plan-C9sWvDTv.d.mts → render-plan.d-DhP0mTHF.d.ts} +2 -2
  187. package/dist/renderer-client.d.mts +19 -19
  188. package/dist/renderer-client.d.ts +19 -19
  189. package/dist/{request-BizeuqD7.d.ts → request.d-BVZrsR1v.d.ts} +1 -1
  190. package/dist/{request-WwB1-Uim.d.mts → request.d-DJFRdKi8.d.mts} +1 -1
  191. package/dist/request.d.mts +14 -14
  192. package/dist/request.d.ts +14 -14
  193. package/dist/{resolver-CJ-D9nP-.d.ts → resolver.d-BHyZgpa7.d.ts} +1 -1
  194. package/dist/{resolver-TDyZKgKI.d.mts → resolver.d-JnZKKsc5.d.mts} +1 -1
  195. package/dist/response.d-BolW0Vx_.d.mts +10 -0
  196. package/dist/response.d-BolW0Vx_.d.ts +10 -0
  197. package/dist/{route-rendering-BGhJN64l.d.ts → route-rendering.d-B00JtK_-.d.ts} +1 -1
  198. package/dist/{route-rendering-S6NFjnx4.d.mts → route-rendering.d-Bpmw7PED.d.mts} +1 -1
  199. package/dist/{route-2_yXC6gv.d.mts → route.d-BaVH3V0w.d.mts} +1 -1
  200. package/dist/{route-DFhZj6jN.d.ts → route.d-DBTEqifW.d.ts} +1 -1
  201. package/dist/{router-BUD_j2EL.d.ts → router.d-Bd1x9XxQ.d.ts} +1 -1
  202. package/dist/{router-BIheIy9G.d.mts → router.d-e0jQ3jQ-.d.mts} +1 -1
  203. package/dist/{routes-kEUsXHx3.d.mts → routes.d-Cmv8TgVq.d.mts} +91 -4
  204. package/dist/{routes-8PT9cl60.d.ts → routes.d-D96Dq9lz.d.ts} +91 -4
  205. package/dist/routes.d.mts +13 -13
  206. package/dist/routes.d.ts +13 -13
  207. package/dist/{rsc-pipeline-JRGUZBYM.cjs → rsc-pipeline-DX4OC5FN.cjs} +6 -6
  208. package/dist/{rsc-pipeline-OLAVIKI3.mjs → rsc-pipeline-ZQ4CTVEG.mjs} +5 -5
  209. package/dist/{runtime-OGCHDACZ.mjs → runtime-NPDRDV6R.mjs} +66 -17
  210. package/dist/{runtime-G23RSLEK.cjs → runtime-NQ3EDSA7.cjs} +75 -26
  211. package/dist/{runtime-CihDZ2Rn.d.mts → runtime.d-3iJAKptR.d.mts} +2 -2
  212. package/dist/{runtime-C4CmlOOh.d.ts → runtime.d-BtL3PCL3.d.ts} +2 -2
  213. package/dist/{runtime-CWP-21hP.d.ts → runtime.d-CgB3IJDq.d.mts} +4 -4
  214. package/dist/{runtime-CgJwe6H_.d.mts → runtime.d-D-td-RR3.d.ts} +4 -4
  215. package/dist/server-action-security.d.mts +1 -1
  216. package/dist/server-action-security.d.ts +1 -1
  217. package/dist/server-fn-client.d.mts +5 -5
  218. package/dist/server-fn-client.d.ts +5 -5
  219. package/dist/server-fn.d.mts +3 -3
  220. package/dist/server-fn.d.ts +3 -3
  221. package/dist/server-plugins.d.mts +14 -14
  222. package/dist/server-plugins.d.ts +14 -14
  223. package/dist/server-query-client.d.mts +5 -5
  224. package/dist/server-query-client.d.ts +5 -5
  225. package/dist/server-query.d.mts +2 -2
  226. package/dist/server-query.d.ts +2 -2
  227. package/dist/server.cjs +31 -31
  228. package/dist/server.d.mts +28 -29
  229. package/dist/server.d.ts +28 -29
  230. package/dist/server.mjs +13 -13
  231. package/dist/session-AAU7RNRO.cjs +23 -0
  232. package/dist/session-IGEDQ5PY.mjs +23 -0
  233. package/dist/{spa-router-Kytv4jSB.d.ts → spa-router.d-BWDhS0FK.d.mts} +5 -5
  234. package/dist/{spa-router-CVOL0Vrq.d.mts → spa-router.d-CO01mVOM.d.ts} +5 -5
  235. package/dist/storage.d.mts +2 -2
  236. package/dist/storage.d.ts +2 -2
  237. package/dist/testing.d.mts +14 -14
  238. package/dist/testing.d.ts +14 -14
  239. package/dist/theme/client.d.mts +1 -1
  240. package/dist/theme/client.d.ts +1 -1
  241. package/dist/theme/index.d.mts +2 -2
  242. package/dist/theme/index.d.ts +2 -2
  243. package/dist/theme/runtime.d.mts +1 -1
  244. package/dist/theme/runtime.d.ts +1 -1
  245. package/dist/theme/server.d.mts +1 -1
  246. package/dist/theme/server.d.ts +1 -1
  247. package/dist/{utils-DbyXlzaj.d.ts → utils.d-B77__yh8.d.ts} +1 -1
  248. package/dist/{utils-Dsa1HZ7X.d.mts → utils.d-DRDazhCA.d.mts} +1 -1
  249. package/dist/version.cjs +2 -2
  250. package/dist/version.mjs +1 -1
  251. package/dist/vite.cjs +11 -11
  252. package/dist/vite.d.mts +20 -19
  253. package/dist/vite.d.ts +20 -19
  254. package/dist/vite.mjs +10 -10
  255. package/dist/workflows.d.mts +1 -1
  256. package/dist/workflows.d.ts +1 -1
  257. package/package.json +5 -5
  258. /package/dist/{base-path-BOUV5ozD.d.mts → base-path.d-BOUV5ozD.d.mts} +0 -0
  259. /package/dist/{base-path-BOUV5ozD.d.ts → base-path.d-BOUV5ozD.d.ts} +0 -0
  260. /package/dist/{chunk-recovery-lnQFzcQP.d.mts → chunk-recovery.d-lnQFzcQP.d.mts} +0 -0
  261. /package/dist/{chunk-recovery-lnQFzcQP.d.ts → chunk-recovery.d-lnQFzcQP.d.ts} +0 -0
  262. /package/dist/{client-cache-Deoqq-nM.d.ts → client-cache.d-Deoqq-nM.d.ts} +0 -0
  263. /package/dist/{client-cache-di_Nasxa.d.mts → client-cache.d-di_Nasxa.d.mts} +0 -0
  264. /package/dist/{endpoint-BgHn0lhl.d.ts → endpoint.d-BgHn0lhl.d.ts} +0 -0
  265. /package/dist/{endpoint-BkMSCRf6.d.mts → endpoint.d-BkMSCRf6.d.mts} +0 -0
  266. /package/dist/{image-config-CeDgNyX4.d.mts → image-config.d-CeDgNyX4.d.mts} +0 -0
  267. /package/dist/{image-config-CeDgNyX4.d.ts → image-config.d-CeDgNyX4.d.ts} +0 -0
  268. /package/dist/{instrumentation-runtime-CX9Zh-16.d.mts → instrumentation-runtime.d-CX9Zh-16.d.mts} +0 -0
  269. /package/dist/{instrumentation-runtime-CX9Zh-16.d.ts → instrumentation-runtime.d-CX9Zh-16.d.ts} +0 -0
  270. /package/dist/{island-value-protocol-BRayRghM.d.mts → island-value-protocol.d-BRayRghM.d.mts} +0 -0
  271. /package/dist/{island-value-protocol-BRayRghM.d.ts → island-value-protocol.d-BRayRghM.d.ts} +0 -0
  272. /package/dist/{island-CfGru1MO.d.mts → island.d-CfGru1MO.d.mts} +0 -0
  273. /package/dist/{island-CfGru1MO.d.ts → island.d-CfGru1MO.d.ts} +0 -0
  274. /package/dist/{layers-CcS42OGR.d.mts → layers.d-CcS42OGR.d.mts} +0 -0
  275. /package/dist/{layers-CcS42OGR.d.ts → layers.d-CcS42OGR.d.ts} +0 -0
  276. /package/dist/{lifecycle-C2aLBOwu.d.mts → lifecycle.d-C2aLBOwu.d.mts} +0 -0
  277. /package/dist/{lifecycle-C2aLBOwu.d.ts → lifecycle.d-C2aLBOwu.d.ts} +0 -0
  278. /package/dist/{observability-B2363jB6.d.mts → observability.d-B2363jB6.d.mts} +0 -0
  279. /package/dist/{observability-B2363jB6.d.ts → observability.d-B2363jB6.d.ts} +0 -0
  280. /package/dist/{params-BALtrRim.d.ts → params.d-BALtrRim.d.ts} +0 -0
  281. /package/dist/{params-ry-lxqmy.d.mts → params.d-ry-lxqmy.d.mts} +0 -0
  282. /package/dist/{production-vite-BQFAlG7n.d.mts → production-vite.d-BQFAlG7n.d.mts} +0 -0
  283. /package/dist/{production-vite-BQFAlG7n.d.ts → production-vite.d-BQFAlG7n.d.ts} +0 -0
  284. /package/dist/{route-pattern-CVsVbq5n.d.mts → route-pattern.d-CVsVbq5n.d.mts} +0 -0
  285. /package/dist/{route-pattern-CVsVbq5n.d.ts → route-pattern.d-CVsVbq5n.d.ts} +0 -0
  286. /package/dist/{server-client-bridge-DKWDl5NB.d.mts → server-client-bridge.d-DKWDl5NB.d.mts} +0 -0
  287. /package/dist/{server-client-bridge-DKWDl5NB.d.ts → server-client-bridge.d-DKWDl5NB.d.ts} +0 -0
  288. /package/dist/{server-fn-error-DrcH9cc1.d.mts → server-fn-error.d-DrcH9cc1.d.mts} +0 -0
  289. /package/dist/{server-fn-error-DrcH9cc1.d.ts → server-fn-error.d-DrcH9cc1.d.ts} +0 -0
  290. /package/dist/{server-query-runtime-DXRNhX_3.d.ts → server-query-runtime.d-DXRNhX_3.d.ts} +0 -0
  291. /package/dist/{server-query-runtime-aP52iuL5.d.mts → server-query-runtime.d-aP52iuL5.d.mts} +0 -0
  292. /package/dist/{types-BnIqOn9w.d.mts → types.d-BnIqOn9w.d.mts} +0 -0
  293. /package/dist/{types-BnIqOn9w.d.ts → types.d-BnIqOn9w.d.ts} +0 -0
  294. /package/dist/{types-C41ePjvP.d.mts → types.d-C41ePjvP.d.mts} +0 -0
  295. /package/dist/{types-C41ePjvP.d.ts → types.d-C41ePjvP.d.ts} +0 -0
  296. /package/dist/{types-DQnyD3VD.d.mts → types.d-DQnyD3VD.d.mts} +0 -0
  297. /package/dist/{types-DQnyD3VD.d.ts → types.d-DQnyD3VD.d.ts} +0 -0
  298. /package/dist/{workflows-CRMzQZ3k.d.mts → workflows.d-CRMzQZ3k.d.mts} +0 -0
  299. /package/dist/{workflows-CRMzQZ3k.d.ts → workflows.d-CRMzQZ3k.d.ts} +0 -0
@@ -1,6 +1,88 @@
1
- import { g as FarmI18nRouting } from './types-C41ePjvP.js';
2
- import { l as FarmMobileScreen, j as FarmMobilePresentation, i as FarmMobilePrefetch, h as FarmMobilePageConfig, F as FarmMobileOS, R as ResolvedFarmMobileConfig, m as FarmMobileTab } from './config-CnhyvvmT.js';
3
- import { P as PlatformRouteFiles } from './generate-route-types-DQP0cUzk.js';
1
+ import { g as FarmI18nRouting } from './types.d-C41ePjvP.js';
2
+ import { l as FarmMobileScreen, j as FarmMobilePresentation, i as FarmMobilePrefetch, h as FarmMobilePageConfig, F as FarmMobileOS, R as ResolvedFarmMobileConfig, m as FarmMobileTab } from './config.d-iRPI16ku.js';
3
+ import { P as PlatformRouteFiles } from './generate-route-types.d-BL2pq6xC.js';
4
+
5
+ type FarmUiNodeKind = "View" | "Text" | "Image" | "Pressable" | "TextInput" | "List";
6
+ /** A minimal, platform-neutral UI tree for a portable component. No emitter reads it yet. */
7
+ interface FarmUiNode {
8
+ kind: FarmUiNodeKind | "Component" | "Fragment";
9
+ /** The JSX tag it came from, such as `"button"` or `"Card"`. */
10
+ tag: string;
11
+ /** Static props, such as `href`, `src`, `alt`, `placeholder`. Expressions are `"{expr}"`. */
12
+ props?: Record<string, string | number | boolean>;
13
+ /** Tailwind classes and inline style keys that map to native style. */
14
+ style?: string[];
15
+ /** Event props, such as `["onClick"]`. */
16
+ events?: string[];
17
+ /** Static text children. */
18
+ text?: string;
19
+ children?: FarmUiNode[];
20
+ }
21
+ interface FarmMobileBlocker {
22
+ /** App-root-relative POSIX path. */
23
+ file: string;
24
+ line: number;
25
+ column: number;
26
+ rule: FarmMobileBlockerRule;
27
+ message: string;
28
+ /** Internal: the one tier this blocks. Reported blockers are split by tier instead. */
29
+ only?: Exclude<FarmMobileTier, "web">;
30
+ }
31
+ /**
32
+ * What a route can become on mobile. `"native"`: the server renders the page into a tree of
33
+ * native views, with no JavaScript on the device (no hooks, event handlers, or client
34
+ * components). `"react-native"`: a React Native screen ported from the page. `"web"`: a WebView.
35
+ */
36
+ type FarmMobileTier = "native" | "react-native" | "web";
37
+ type FarmMobileBlockerRule = "parse-error" | "markdown-page" | "programmatic-route" | "server-component" | "async-component" | "unmapped-element" | "dangerously-set-inner-html" | "content-editable" | "dom-ref" | "dom-event" | "spread-props" | "form-action" | "dynamic-component" | "runtime-class-name" | "class-name" | "runtime-style" | "style" | "browser-global" | "layout-effect" | "create-element" | "css-import" | "dom-package" | "unknown-package" | "unmapped-import" | "unresolved-import" | "dynamic-import" | "node-builtin" | "client-logic";
38
+ type FarmMobileWin = "list" | "input" | "timer";
39
+ interface FarmMobileElementCounts {
40
+ /** JSX elements in the route's modules, intrinsic and imported components. */
41
+ total: number;
42
+ /** Elements with a native mapping. */
43
+ mapped: number;
44
+ byKind: Partial<Record<FarmUiNodeKind, number>>;
45
+ }
46
+ interface FarmMobileRouteAnalysis {
47
+ route: string;
48
+ /** The first tier no blocker rules out: `"native"`, then `"react-native"`, then `"web"`. */
49
+ tier: FarmMobileTier;
50
+ /**
51
+ * `"port"`: portable and native would help (lists, input, timers). `"web"`: blocked, or
52
+ * portable with no win. Any doubt is web.
53
+ */
54
+ decision: "port" | "web";
55
+ portable: boolean;
56
+ /** What keeps a React Native port out: the page's module graph first, then its layouts'. */
57
+ blockers: FarmMobileBlocker[];
58
+ /**
59
+ * What keeps the server-rendered native tier out. The page's graph only: a native screen shows
60
+ * the page without its layouts, since the shell draws the chrome.
61
+ */
62
+ nativeBlockers: FarmMobileBlocker[];
63
+ wins: FarmMobileWin[];
64
+ elements: FarmMobileElementCounts;
65
+ /** `mapped / total`, rounded, 100 for a route with no elements. */
66
+ portablePercent: number;
67
+ /** App modules in the route's graph, page and layouts. */
68
+ modules: number;
69
+ /** Byte size of `ir` as JSON. Portable routes only. */
70
+ irBytes?: number;
71
+ ir?: FarmMobileRouteIR;
72
+ }
73
+ interface FarmMobileRouteIR {
74
+ /** The page component, as `"<file>#default"`. */
75
+ root: string;
76
+ components: Record<string, FarmUiNode>;
77
+ }
78
+ interface FarmMobileAnalyzerStats {
79
+ /** Distinct app modules read. */
80
+ modules: number;
81
+ /** Modules parsed in this run; the rest came from the content-hash cache. */
82
+ parsed: number;
83
+ cached: number;
84
+ ms: number;
85
+ }
4
86
 
5
87
  type FarmMobileScreenSource = "page" | "config" | "file" | "analyzer" | "default";
6
88
  interface FarmMobileScreenDecision {
@@ -33,6 +115,11 @@ interface FarmMobileScreensOptions {
33
115
  analyzerPorts?: ReadonlySet<string>;
34
116
  /** Why the analyzer cannot port a route, for config routes that ask for a port. */
35
117
  analyzerBlockers?: ReadonlyMap<string, readonly string[]>;
118
+ /** Each analyzed route's tier, and what rules out the native tier. */
119
+ analyzerTiers?: ReadonlyMap<string, {
120
+ tier: FarmMobileTier;
121
+ nativeBlockers: readonly string[];
122
+ }>;
36
123
  }
37
124
  interface FarmMobileScreens {
38
125
  screens: Record<string, FarmMobileScreenDecision>;
@@ -118,4 +205,4 @@ declare function createFarmMobileRoutePattern(pattern: string, options?: Pick<Fa
118
205
  */
119
206
  declare function createFarmMobileRouteManifest(mobile: ResolvedFarmMobileConfig, options: FarmMobileRouteManifestOptions): FarmMobileRouteManifest;
120
207
 
121
- export { type FarmMobileRouteManifest as F, type FarmMobileRouteRule as a, type FarmMobileScreenSource as b, type FarmMobileScreenDecision as c, type FarmMobilePageExport as d, type FarmMobileRouteManifestOptions as e, type FarmMobileScreens as f, type FarmMobileScreensOptions as g, createFarmMobileModuleId as h, createFarmMobileRouteManifest as i, createFarmMobileRoutePattern as j, resolveFarmMobileScreens as k, readFarmMobilePageExport as r };
208
+ export { type FarmMobileRouteManifest as F, type FarmMobileRouteRule as a, type FarmMobileTier as b, type FarmMobileScreenSource as c, type FarmMobileRouteAnalysis as d, type FarmMobileScreenDecision as e, type FarmMobileAnalyzerStats as f, type FarmMobileBlocker as g, type FarmMobileBlockerRule as h, type FarmMobilePageExport as i, type FarmMobileRouteManifestOptions as j, type FarmMobileScreens as k, type FarmMobileScreensOptions as l, type FarmUiNode as m, createFarmMobileModuleId as n, createFarmMobileRouteManifest as o, createFarmMobileRoutePattern as p, resolveFarmMobileScreens as q, readFarmMobilePageExport as r };
package/dist/routes.d.mts CHANGED
@@ -1,34 +1,34 @@
1
- import { v as FarmAppContext, w as PageProps, x as FarmSearchParams, y as PluginContextProps, f as FarmRouteRuntimeConfig, M as Metadata, i as RouteModule, L as LayoutProps, z as FarmRouteRuntime, A as FarmRouteRegions, C as FarmRouteMaxDuration, P as ParsedRoute } from './client-plugins-cqy_dQd0.mjs';
1
+ import { v as FarmAppContext, w as PageProps, x as FarmSearchParams, y as PluginContextProps, f as FarmRouteRuntimeConfig, M as Metadata, i as RouteModule, L as LayoutProps, z as FarmRouteRuntime, A as FarmRouteRegions, C as FarmRouteMaxDuration, P as ParsedRoute } from './client-plugins.d-Bx3FXpqm.mjs';
2
2
  import { ComponentType } from 'react';
3
3
  import { RouteDataCacheKey } from './cache.mjs';
4
4
  import { ServerFn } from './server-fn.mjs';
5
5
  import { FarmServerRendererRuntime } from './renderer.mjs';
6
- import './lifecycle-C2aLBOwu.mjs';
7
- import './route-2_yXC6gv.mjs';
8
- import './endpoint-BkMSCRf6.mjs';
6
+ import './lifecycle.d-C2aLBOwu.mjs';
7
+ import './route.d-BaVH3V0w.mjs';
8
+ import './endpoint.d-BkMSCRf6.mjs';
9
9
  import 'http';
10
10
  import './server-query.mjs';
11
- import './server-fn-error-DrcH9cc1.mjs';
12
- import './types-BnIqOn9w.mjs';
11
+ import './server-fn-error.d-DrcH9cc1.mjs';
12
+ import './types.d-BnIqOn9w.mjs';
13
13
  import 'db0';
14
14
  import 'unstorage';
15
15
  import './schema.mjs';
16
16
  import '@farming-labs/orm';
17
17
  import '@farming-labs/docs';
18
- import './observability-B2363jB6.mjs';
18
+ import './observability.d-B2363jB6.mjs';
19
19
  import '@opentelemetry/api';
20
20
  import 'vite';
21
- import './workflows-CRMzQZ3k.mjs';
21
+ import './workflows.d-CRMzQZ3k.mjs';
22
22
  import './cron.mjs';
23
23
  import './env.mjs';
24
24
  import './server-action-security.mjs';
25
- import './layers-CcS42OGR.mjs';
25
+ import './layers.d-CcS42OGR.mjs';
26
26
  import 'rolldown/utils';
27
27
  import 'rolldown';
28
- import './image-config-CeDgNyX4.mjs';
29
- import './types-C41ePjvP.mjs';
30
- import './config-CnhyvvmT.mjs';
31
- import './types-DQnyD3VD.mjs';
28
+ import './image-config.d-CeDgNyX4.mjs';
29
+ import './types.d-C41ePjvP.mjs';
30
+ import './config.d-iRPI16ku.mjs';
31
+ import './types.d-DQnyD3VD.mjs';
32
32
  import './font.mjs';
33
33
  import './deployment.mjs';
34
34
 
package/dist/routes.d.ts CHANGED
@@ -1,34 +1,34 @@
1
- import { v as FarmAppContext, w as PageProps, x as FarmSearchParams, y as PluginContextProps, f as FarmRouteRuntimeConfig, M as Metadata, i as RouteModule, L as LayoutProps, z as FarmRouteRuntime, A as FarmRouteRegions, C as FarmRouteMaxDuration, P as ParsedRoute } from './client-plugins-CFBEfVPO.js';
1
+ import { v as FarmAppContext, w as PageProps, x as FarmSearchParams, y as PluginContextProps, f as FarmRouteRuntimeConfig, M as Metadata, i as RouteModule, L as LayoutProps, z as FarmRouteRuntime, A as FarmRouteRegions, C as FarmRouteMaxDuration, P as ParsedRoute } from './client-plugins.d-TiLbS5j4.js';
2
2
  import { ComponentType } from 'react';
3
3
  import { RouteDataCacheKey } from './cache.js';
4
4
  import { ServerFn } from './server-fn.js';
5
5
  import { FarmServerRendererRuntime } from './renderer.js';
6
- import './lifecycle-C2aLBOwu.js';
7
- import './route-DFhZj6jN.js';
8
- import './endpoint-BgHn0lhl.js';
6
+ import './lifecycle.d-C2aLBOwu.js';
7
+ import './route.d-DBTEqifW.js';
8
+ import './endpoint.d-BgHn0lhl.js';
9
9
  import 'http';
10
10
  import './server-query.js';
11
- import './server-fn-error-DrcH9cc1.js';
12
- import './types-BnIqOn9w.js';
11
+ import './server-fn-error.d-DrcH9cc1.js';
12
+ import './types.d-BnIqOn9w.js';
13
13
  import 'db0';
14
14
  import 'unstorage';
15
15
  import './schema.js';
16
16
  import '@farming-labs/orm';
17
17
  import '@farming-labs/docs';
18
- import './observability-B2363jB6.js';
18
+ import './observability.d-B2363jB6.js';
19
19
  import '@opentelemetry/api';
20
20
  import 'vite';
21
- import './workflows-CRMzQZ3k.js';
21
+ import './workflows.d-CRMzQZ3k.js';
22
22
  import './cron.js';
23
23
  import './env.js';
24
24
  import './server-action-security.js';
25
- import './layers-CcS42OGR.js';
25
+ import './layers.d-CcS42OGR.js';
26
26
  import 'rolldown/utils';
27
27
  import 'rolldown';
28
- import './image-config-CeDgNyX4.js';
29
- import './types-C41ePjvP.js';
30
- import './config-CnhyvvmT.js';
31
- import './types-DQnyD3VD.js';
28
+ import './image-config.d-CeDgNyX4.js';
29
+ import './types.d-C41ePjvP.js';
30
+ import './config.d-iRPI16ku.js';
31
+ import './types.d-DQnyD3VD.js';
32
32
  import './font.js';
33
33
  import './deployment.js';
34
34
 
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkQK3HBOTGcjs = require('./chunk-QK3HBOTG.cjs');
5
+ var _chunkNXBHYO7Scjs = require('./chunk-NXBHYO7S.cjs');
6
6
 
7
7
 
8
8
 
@@ -11,9 +11,9 @@ var _chunkQK3HBOTGcjs = require('./chunk-QK3HBOTG.cjs');
11
11
 
12
12
  var _chunkSJ23LJ3Ncjs = require('./chunk-SJ23LJ3N.cjs');
13
13
  require('./chunk-XPMC4E2G.cjs');
14
- require('./chunk-O3MMJPC2.cjs');
14
+ require('./chunk-NPQLMP7M.cjs');
15
15
  require('./chunk-OZC2JPW6.cjs');
16
- require('./chunk-DGOLAZLV.cjs');
16
+ require('./chunk-65Y5SIBH.cjs');
17
17
  require('./chunk-LNM57D3H.cjs');
18
18
  require('./chunk-AQLHD6HZ.cjs');
19
19
  require('./chunk-YKHRCY4T.cjs');
@@ -38,7 +38,7 @@ require('./chunk-FK25QSVC.cjs');
38
38
  require('./chunk-WT6RAN2I.cjs');
39
39
  require('./chunk-WJFFPXCV.cjs');
40
40
  require('./chunk-SHIWRBFI.cjs');
41
- require('./chunk-WAPQWAE6.cjs');
41
+ require('./chunk-CECUDGXQ.cjs');
42
42
  require('./chunk-DUIP64BF.cjs');
43
43
  require('./chunk-PFV2KPDZ.cjs');
44
44
  require('./chunk-ZXK2EYQW.cjs');
@@ -52,7 +52,7 @@ require('./chunk-LNVGXUL3.cjs');
52
52
  require('./chunk-VQJYGZNX.cjs');
53
53
  require('./chunk-SUCDVKUB.cjs');
54
54
  require('./chunk-EVIWKPJV.cjs');
55
- require('./chunk-Z5MZDFX4.cjs');
55
+ require('./chunk-YIHRZBD7.cjs');
56
56
  require('./chunk-LIFUPCXW.cjs');
57
57
  require('./chunk-JYT7AN37.cjs');
58
58
  require('./chunk-B5BBTPJQ.cjs');
@@ -80,4 +80,4 @@ require('./chunk-BTZ5O6VM.cjs');
80
80
 
81
81
 
82
82
 
83
- exports.FARM_RSC_PACKAGES = _chunkSJ23LJ3Ncjs.FARM_RSC_PACKAGES; exports.buildFarmRsc = _chunkQK3HBOTGcjs.buildFarmRsc; exports.createFarmRscDevServer = _chunkQK3HBOTGcjs.createFarmRscDevServer; exports.createFarmRscViteConfig = _chunkQK3HBOTGcjs.createFarmRscViteConfig; exports.farmAppUsesRscPipeline = _chunkSJ23LJ3Ncjs.farmAppUsesRscPipeline; exports.farmConfigUsesServerComponents = _chunkSJ23LJ3Ncjs.farmConfigUsesServerComponents; exports.inspectFarmServerComponents = _chunkSJ23LJ3Ncjs.inspectFarmServerComponents; exports.resolveFarmRscCheckConfig = _chunkSJ23LJ3Ncjs.resolveFarmRscCheckConfig;
83
+ exports.FARM_RSC_PACKAGES = _chunkSJ23LJ3Ncjs.FARM_RSC_PACKAGES; exports.buildFarmRsc = _chunkNXBHYO7Scjs.buildFarmRsc; exports.createFarmRscDevServer = _chunkNXBHYO7Scjs.createFarmRscDevServer; exports.createFarmRscViteConfig = _chunkNXBHYO7Scjs.createFarmRscViteConfig; exports.farmAppUsesRscPipeline = _chunkSJ23LJ3Ncjs.farmAppUsesRscPipeline; exports.farmConfigUsesServerComponents = _chunkSJ23LJ3Ncjs.farmConfigUsesServerComponents; exports.inspectFarmServerComponents = _chunkSJ23LJ3Ncjs.inspectFarmServerComponents; exports.resolveFarmRscCheckConfig = _chunkSJ23LJ3Ncjs.resolveFarmRscCheckConfig;
@@ -2,7 +2,7 @@ import {
2
2
  buildFarmRsc,
3
3
  createFarmRscDevServer,
4
4
  createFarmRscViteConfig
5
- } from "./chunk-XWC5NAHV.mjs";
5
+ } from "./chunk-IBSAYAWB.mjs";
6
6
  import {
7
7
  FARM_RSC_PACKAGES,
8
8
  farmAppUsesRscPipeline,
@@ -11,9 +11,9 @@ import {
11
11
  resolveFarmRscCheckConfig
12
12
  } from "./chunk-SHS6KXOZ.mjs";
13
13
  import "./chunk-LMFJCXDD.mjs";
14
- import "./chunk-JF5CNHHF.mjs";
14
+ import "./chunk-CTM4SPB3.mjs";
15
15
  import "./chunk-VISQDC6W.mjs";
16
- import "./chunk-75WWOZ5C.mjs";
16
+ import "./chunk-QOSDWGKT.mjs";
17
17
  import "./chunk-PIHKO25G.mjs";
18
18
  import "./chunk-SMUW7UST.mjs";
19
19
  import "./chunk-UB7RVEMX.mjs";
@@ -38,7 +38,7 @@ import "./chunk-FSQMN2MQ.mjs";
38
38
  import "./chunk-YWPNIYUP.mjs";
39
39
  import "./chunk-N77JBPLC.mjs";
40
40
  import "./chunk-YP7YO3S3.mjs";
41
- import "./chunk-HHFMECFO.mjs";
41
+ import "./chunk-Y2G5SJFB.mjs";
42
42
  import "./chunk-H4WUWLQR.mjs";
43
43
  import "./chunk-F6TLUMH7.mjs";
44
44
  import "./chunk-46P5KNTE.mjs";
@@ -52,7 +52,7 @@ import "./chunk-MU5V7XHL.mjs";
52
52
  import "./chunk-Y3N5BFRJ.mjs";
53
53
  import "./chunk-H3ASZDT7.mjs";
54
54
  import "./chunk-2DA7CLY7.mjs";
55
- import "./chunk-IUQLRTTO.mjs";
55
+ import "./chunk-CO6UYM2D.mjs";
56
56
  import "./chunk-GFT5AHAT.mjs";
57
57
  import "./chunk-D2LCAV6L.mjs";
58
58
  import "./chunk-LM2YOGDK.mjs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  loadConfig,
3
3
  resolveConfig
4
- } from "./chunk-JF5CNHHF.mjs";
4
+ } from "./chunk-CTM4SPB3.mjs";
5
5
  import "./chunk-VISQDC6W.mjs";
6
6
  import {
7
7
  createPlatformBlockChecker,
@@ -42,7 +42,7 @@ import "./chunk-FSQMN2MQ.mjs";
42
42
  import "./chunk-YWPNIYUP.mjs";
43
43
  import "./chunk-N77JBPLC.mjs";
44
44
  import "./chunk-YP7YO3S3.mjs";
45
- import "./chunk-HHFMECFO.mjs";
45
+ import "./chunk-Y2G5SJFB.mjs";
46
46
  import "./chunk-H4WUWLQR.mjs";
47
47
  import "./chunk-F6TLUMH7.mjs";
48
48
  import "./chunk-46P5KNTE.mjs";
@@ -58,7 +58,7 @@ import "./chunk-MU5V7XHL.mjs";
58
58
  import "./chunk-Y3N5BFRJ.mjs";
59
59
  import "./chunk-H3ASZDT7.mjs";
60
60
  import "./chunk-2DA7CLY7.mjs";
61
- import "./chunk-IUQLRTTO.mjs";
61
+ import "./chunk-CO6UYM2D.mjs";
62
62
  import "./chunk-GFT5AHAT.mjs";
63
63
  import "./chunk-D2LCAV6L.mjs";
64
64
  import "./chunk-LM2YOGDK.mjs";
@@ -241,10 +241,8 @@ function validateFarmMobilePageConfig(value, where, context) {
241
241
  checkKeys(value, PAGE_KEYS, `${where}: mobile.`);
242
242
  checkPresentation(value.presentation, `${where}: mobile`, check);
243
243
  checkPrefetch(value.prefetch, `${where}: mobile.`, check);
244
- if (value.native !== void 0 && value.native !== false) {
245
- fail(
246
- `${where}: mobile.native can only be false. A native screen comes from a page.native.tsx next to the page.`
247
- );
244
+ if (value.native !== void 0 && typeof value.native !== "boolean") {
245
+ fail(`${where}: mobile.native must be true or false.`);
248
246
  }
249
247
  return value;
250
248
  }
@@ -455,7 +453,15 @@ function resolveFarmMobileBlock(input, context, cache) {
455
453
 
456
454
  // src/mobile/report.ts
457
455
  function createFarmMobileNativeReport(options) {
458
- const summary = { routes: 0, analyzed: 0, port: 0, portableNoWin: 0, blocked: 0, native: 0 };
456
+ const summary = {
457
+ routes: 0,
458
+ analyzed: 0,
459
+ port: 0,
460
+ portableNoWin: 0,
461
+ blocked: 0,
462
+ native: 0,
463
+ tiers: { native: 0, "react-native": 0, web: 0 }
464
+ };
459
465
  const routes = options.routes.map((route) => {
460
466
  const decision = options.screens[route];
461
467
  const analyzed = options.analysis[route];
@@ -463,6 +469,7 @@ function createFarmMobileNativeReport(options) {
463
469
  if (decision.screen !== "web") summary.native += 1;
464
470
  if (analyzed) {
465
471
  summary.analyzed += 1;
472
+ summary.tiers[analyzed.tier] += 1;
466
473
  if (analyzed.decision === "port") summary.port += 1;
467
474
  else if (analyzed.portable) summary.portableNoWin += 1;
468
475
  else summary.blocked += 1;
@@ -489,17 +496,20 @@ function createFarmMobileNativeReport(options) {
489
496
  function reasonFor(entry) {
490
497
  const analysis = entry.analysis;
491
498
  if (!analysis) {
492
- if (entry.source === "page") return `${entry.file}: mobile.native false`;
499
+ if (entry.source === "page") {
500
+ return `${entry.file}: mobile.native ${entry.requested ? "true" : "false"}`;
501
+ }
493
502
  if (entry.source === "file") return entry.file;
494
503
  if (entry.source === "config") {
495
504
  return entry.file ? `native.routes, ${entry.file}` : "native.routes";
496
505
  }
497
506
  return "";
498
507
  }
508
+ if (analysis.tier === "native") return "renders natively, no JavaScript on the device";
499
509
  if (analysis.portable) {
500
510
  return analysis.wins.length > 0 ? `portable; ${analysis.wins.join(", ")}` : `portable; no win (${analysis.elements.total} elements)`;
501
511
  }
502
- const [first, ...rest] = analysis.blockers;
512
+ const [first, ...rest] = analysis.nativeBlockers.length ? analysis.nativeBlockers : analysis.blockers;
503
513
  const where = first.file ? `${first.file}:${first.line}:${first.column} ` : "";
504
514
  return `${where}${first.message}${rest.length > 0 ? ` (+${rest.length} more)` : ""}`;
505
515
  }
@@ -507,12 +517,13 @@ function formatFarmMobileNativeReport(report, options = {}) {
507
517
  const rows = report.routes.map((entry) => [
508
518
  entry.route,
509
519
  entry.screen,
520
+ entry.analysis ? entry.analysis.tier : "-",
510
521
  entry.analysis ? entry.analysis.decision : "-",
511
522
  entry.analysis ? `${entry.analysis.elements.mapped}/${entry.analysis.elements.total}` : "",
512
523
  entry.analysis ? `${entry.analysis.portablePercent}%` : "",
513
524
  reasonFor(entry)
514
525
  ]);
515
- const header = ["route", "screen", "decision", "mapped", "portable", "reason"];
526
+ const header = ["route", "screen", "tier", "decision", "mapped", "portable", "reason"];
516
527
  const widths = header.map(
517
528
  (title, column) => Math.min(
518
529
  column === 0 ? 40 : 12,
@@ -529,7 +540,8 @@ function formatFarmMobileNativeReport(report, options = {}) {
529
540
  line(header),
530
541
  ...rows.map(line),
531
542
  "",
532
- `${summary.routes} routes: ${summary.port} port, ${summary.portableNoWin} portable without a win, ${summary.blocked} blocked, ${summary.native} native from files or config`
543
+ `${summary.routes} routes: ${summary.port} port, ${summary.portableNoWin} portable without a win, ${summary.blocked} blocked, ${summary.native} native from files or config`,
544
+ `tiers: ${summary.tiers.native} native, ${summary.tiers["react-native"]} react-native, ${summary.tiers.web} web`
533
545
  ];
534
546
  if (options.stats) {
535
547
  const { modules, parsed, cached, ms } = options.stats;
@@ -604,6 +616,38 @@ function resolveFarmMobileScreens(options) {
604
616
  screens[route] = { screen: "web", source: "page", file: page.file, ...base };
605
617
  continue;
606
618
  }
619
+ if (page?.config.native === true) {
620
+ if (tier !== void 0 && tier !== "native") {
621
+ warnings.push(`${page.file}: mobile.native true overrides ${where}.${tierKey} "${tier}".`);
622
+ }
623
+ const file2 = reactFile ?? platformFile;
624
+ if (file2) {
625
+ screens[route] = {
626
+ screen: reactFile ? "native" : "platform",
627
+ source: "page",
628
+ file: relativeFile(root, file2),
629
+ module,
630
+ ...base
631
+ };
632
+ continue;
633
+ }
634
+ const analysis = options.analyzerTiers?.get(route);
635
+ if (analysis && analysis.tier !== "native") {
636
+ throw new TypeError(
637
+ `${prefix}: ${page.file} sets mobile.native to true, but "${route}" cannot render as a native screen:
638
+ ${analysis.nativeBlockers.map((blocker) => ` - ${blocker}`).join("\n")}
639
+ ` + (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
+ );
641
+ }
642
+ screens[route] = {
643
+ screen: "web",
644
+ source: "page",
645
+ file: page.file,
646
+ requested: "native",
647
+ ...base
648
+ };
649
+ continue;
650
+ }
607
651
  if (tier === "web") {
608
652
  screens[route] = { screen: "web", source: "config", ...base };
609
653
  continue;
@@ -822,6 +866,9 @@ function getFarmMobileOutputDirs(distDir) {
822
866
  };
823
867
  }
824
868
  var SCRIPT_PAGE = /\.(?:tsx|ts|jsx|js)$/;
869
+ function describe(blocker) {
870
+ return `${blocker.file ? `${blocker.file}:${blocker.line}:${blocker.column} ` : ""}${blocker.message}`;
871
+ }
825
872
  function scriptLang(file) {
826
873
  return file.endsWith(".tsx") ? "tsx" : file.endsWith(".ts") ? "ts" : "jsx";
827
874
  }
@@ -894,13 +941,14 @@ async function resolveFarmMobileApp(options = {}) {
894
941
  let { screens, warnings } = resolveFarmMobileScreens(screenOptions);
895
942
  let report;
896
943
  let analyzerStats;
897
- const analyze = options.analyze === "always" || options.analyze === true && mobile.native.auto !== "off";
944
+ const asserted = [...pageExports.values()].some((page) => page.config.native === true);
945
+ const analyze = options.analyze === "always" || asserted || options.analyze === true && mobile.native.auto !== "off";
898
946
  if (analyze) {
899
947
  const candidates = routes.filter((route) => {
900
948
  const decision = screens[route];
901
949
  return decision.source === "default" || decision.requested !== void 0;
902
950
  });
903
- const { analyzeFarmMobileRoutes } = await import("./analyzer-HOUCQR3K.mjs");
951
+ const { analyzeFarmMobileRoutes } = await import("./analyzer-Z6TNEAET.mjs");
904
952
  const result = await analyzeFarmMobileRoutes({
905
953
  root,
906
954
  srcDir: config.srcDir,
@@ -916,11 +964,12 @@ async function resolveFarmMobileApp(options = {}) {
916
964
  Object.values(result.routes).filter((route) => route.decision === "port").map((route) => route.route)
917
965
  ),
918
966
  analyzerBlockers: new Map(
967
+ Object.values(result.routes).map((route) => [route.route, route.blockers.map(describe)])
968
+ ),
969
+ analyzerTiers: new Map(
919
970
  Object.values(result.routes).map((route) => [
920
971
  route.route,
921
- route.blockers.map(
922
- (blocker) => `${blocker.file ? `${blocker.file}:${blocker.line}:${blocker.column} ` : ""}${blocker.message}`
923
- )
972
+ { tier: route.tier, nativeBlockers: route.nativeBlockers.map(describe) }
924
973
  ])
925
974
  )
926
975
  }));