@farm.js/core 0.1.42 → 0.1.44

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 (243) hide show
  1. package/dist/{agent-mcp-ssVy_tea.d.mts → agent-mcp-CWI-awqd.d.mts} +1 -1
  2. package/dist/{agent-mcp-SSD6L3VZ.d.ts → agent-mcp-EnzWYv_X.d.ts} +1 -1
  3. package/dist/agent-runtime.cjs +3 -2
  4. package/dist/agent-runtime.d.mts +1 -1
  5. package/dist/agent-runtime.d.ts +1 -1
  6. package/dist/agent-runtime.mjs +2 -1
  7. package/dist/api/route-manager.d.mts +3 -3
  8. package/dist/api/route-manager.d.ts +3 -3
  9. package/dist/api/runtime.d.mts +2 -2
  10. package/dist/api/runtime.d.ts +2 -2
  11. package/dist/api.cjs +2 -2
  12. package/dist/api.d.mts +8 -3
  13. package/dist/api.d.ts +8 -3
  14. package/dist/api.mjs +1 -1
  15. package/dist/{app-KjFzdCqy.d.ts → app-CAN_2Cqo.d.ts} +8 -4
  16. package/dist/{app-1h3lVT4a.d.mts → app-DG3dE8v5.d.mts} +8 -4
  17. package/dist/{app-manifest-D3RkVNuS.d.mts → app-manifest-8x5VjZ0L.d.mts} +1 -1
  18. package/dist/{app-manifest-DaW8-tvX.d.ts → app-manifest-DazjgQya.d.ts} +1 -1
  19. package/dist/app-markdown.d.mts +2 -2
  20. package/dist/app-markdown.d.ts +2 -2
  21. package/dist/{chunk-ECKF2BAM.cjs → chunk-2GVF3C2F.cjs} +255 -42
  22. package/dist/{chunk-TUL355PH.mjs → chunk-2MKTHHEU.mjs} +136 -161
  23. package/dist/chunk-2NXO5SBY.mjs +57 -0
  24. package/dist/{chunk-AX7S67YV.mjs → chunk-37VKVISD.mjs} +9 -173
  25. package/dist/chunk-3BROEWFY.cjs +39 -0
  26. package/dist/chunk-3SAWHWDH.cjs +186 -0
  27. package/dist/{chunk-AHFRQMRX.cjs → chunk-3YJMBQ27.cjs} +1 -1
  28. package/dist/{chunk-6PKXK4TY.mjs → chunk-53ZV6K65.mjs} +1 -1
  29. package/dist/{chunk-JG3MEQUH.cjs → chunk-5GBL2LKD.cjs} +430 -217
  30. package/dist/{chunk-LYIZHJTK.cjs → chunk-5LPHJZSI.cjs} +14 -14
  31. package/dist/chunk-5NIWBWDD.mjs +97 -0
  32. package/dist/{chunk-NRDBW4MP.mjs → chunk-7IQQIPRZ.mjs} +10 -0
  33. package/dist/{chunk-TCJ4A4A2.cjs → chunk-AI3WVJNP.cjs} +324 -350
  34. package/dist/chunk-APDGOKKE.cjs +148 -0
  35. package/dist/chunk-AZBSVLRM.cjs +132 -0
  36. package/dist/{chunk-RHGK2JEN.cjs → chunk-B6XAA7V6.cjs} +18 -182
  37. package/dist/chunk-CEDPEDNW.cjs +98 -0
  38. package/dist/{chunk-WSOBCAYO.cjs → chunk-CW6SNEN2.cjs} +25 -25
  39. package/dist/chunk-D5RFPV2H.mjs +148 -0
  40. package/dist/chunk-E22SWCXB.cjs +144 -0
  41. package/dist/{chunk-375K2ZVU.mjs → chunk-ERA5RP3L.mjs} +263 -50
  42. package/dist/{chunk-724JLMS4.mjs → chunk-F646BZ4Y.mjs} +4 -2
  43. package/dist/{chunk-C5KVWHIH.cjs → chunk-G2Z5DGMS.cjs} +5 -3
  44. package/dist/{chunk-ZATTDMBW.cjs → chunk-GA6JM4L6.cjs} +279 -376
  45. package/dist/chunk-GZWHCWLB.mjs +186 -0
  46. package/dist/{chunk-24SP5TGU.mjs → chunk-H4LXPWI2.mjs} +2 -2
  47. package/dist/chunk-H7BLEEAE.cjs +57 -0
  48. package/dist/chunk-IOMVXBLZ.mjs +144 -0
  49. package/dist/{chunk-BD3D7EZV.cjs → chunk-IXFOBGLQ.cjs} +9 -3
  50. package/dist/{chunk-JIYYX7WU.mjs → chunk-JVXW76I7.mjs} +2 -2
  51. package/dist/{chunk-MHN4UR5U.cjs → chunk-KFZZFZ7J.cjs} +7 -7
  52. package/dist/{chunk-BXJ5HJTJ.cjs → chunk-LPE3ED4R.cjs} +17 -13
  53. package/dist/chunk-LRJRXXQZ.cjs +109 -0
  54. package/dist/{chunk-HCSVR4YZ.mjs → chunk-M3BXTWJM.mjs} +18 -0
  55. package/dist/{chunk-2JZHQDUY.mjs → chunk-OYZGFRPA.mjs} +1 -1
  56. package/dist/{chunk-JR4QCLJY.cjs → chunk-PDU4P2IC.cjs} +19 -1
  57. package/dist/chunk-PJEHUSHA.mjs +229 -0
  58. package/dist/{chunk-QTEJGB5A.mjs → chunk-QGFKXYC7.mjs} +80 -177
  59. package/dist/chunk-QGH2RQVF.mjs +132 -0
  60. package/dist/{chunk-YWMZUGIS.mjs → chunk-R3ZFQJEF.mjs} +247 -34
  61. package/dist/{chunk-U2UC7UGP.mjs → chunk-R4J2UOV4.mjs} +1 -1
  62. package/dist/chunk-S34OBRMZ.mjs +109 -0
  63. package/dist/{chunk-TS4JHGUJ.mjs → chunk-S3ZEMCE6.mjs} +9 -3
  64. package/dist/{chunk-WWFTAUFG.cjs → chunk-SBH2JLLF.cjs} +12 -2
  65. package/dist/{chunk-YSLWRWWP.cjs → chunk-SKK6UF5P.cjs} +200 -46
  66. package/dist/{chunk-ZS6HDNOM.cjs → chunk-T44ECMEP.cjs} +6 -6
  67. package/dist/{chunk-OFZUJMCU.mjs → chunk-WPJQN64R.mjs} +195 -41
  68. package/dist/{chunk-NU25TRIO.mjs → chunk-WWYXIECF.mjs} +12 -8
  69. package/dist/{chunk-7YHSD3Z6.cjs → chunk-XPSGGECF.cjs} +85 -31
  70. package/dist/chunk-XUGFRFD2.mjs +39 -0
  71. package/dist/{chunk-IVQY6UTY.mjs → chunk-XUHIRBXY.mjs} +1 -1
  72. package/dist/{chunk-PIZXONIS.mjs → chunk-YFLBG2W3.mjs} +56 -2
  73. package/dist/chunk-YKUEJ3MG.cjs +229 -0
  74. package/dist/{chunk-QKZMB7LY.cjs → chunk-YN2QEMMO.cjs} +2 -2
  75. package/dist/{client-plugins-DIem0I0W.d.ts → client-plugins-BGS0wqzc.d.ts} +36 -16
  76. package/dist/{client-plugins-C9Py_50W.d.mts → client-plugins-nQ0tYt4l.d.mts} +36 -16
  77. package/dist/client-plugins.d.mts +1 -1
  78. package/dist/client-plugins.d.ts +1 -1
  79. package/dist/client.cjs +4 -3
  80. package/dist/client.d.mts +5 -5
  81. package/dist/client.d.ts +5 -5
  82. package/dist/client.mjs +3 -2
  83. package/dist/config.d.mts +1 -1
  84. package/dist/config.d.ts +1 -1
  85. package/dist/{devtools-2RY3EKHL.cjs → devtools-5Q7VRKVH.cjs} +6 -5
  86. package/dist/{devtools-Q3LBNUJ7.mjs → devtools-LJ4IGYGW.mjs} +5 -4
  87. package/dist/docs.cjs +7 -6
  88. package/dist/docs.d.mts +2 -2
  89. package/dist/docs.d.ts +2 -2
  90. package/dist/docs.mjs +6 -5
  91. package/dist/index-Cy26isrh.d.ts +48 -0
  92. package/dist/index-y1jgR74U.d.mts +48 -0
  93. package/dist/index.cjs +44 -25
  94. package/dist/index.d.mts +15 -15
  95. package/dist/index.d.ts +15 -15
  96. package/dist/index.mjs +51 -32
  97. package/dist/integrations.cjs +5 -3
  98. package/dist/integrations.d.mts +1 -1
  99. package/dist/integrations.d.ts +1 -1
  100. package/dist/integrations.mjs +6 -4
  101. package/dist/internal/app-markdown-runtime.d.mts +2 -2
  102. package/dist/internal/app-markdown-runtime.d.ts +2 -2
  103. package/dist/internal/build-runtime.cjs +30 -15
  104. package/dist/internal/build-runtime.d.mts +12 -16
  105. package/dist/internal/build-runtime.d.ts +12 -16
  106. package/dist/internal/build-runtime.mjs +29 -14
  107. package/dist/internal/cli-runtime.cjs +24 -11
  108. package/dist/internal/cli-runtime.mjs +24 -11
  109. package/dist/internal/client-error-overlay.cjs +4 -4
  110. package/dist/internal/client-error-overlay.mjs +1 -1
  111. package/dist/internal/client-runtime.cjs +5 -1
  112. package/dist/internal/client-runtime.d.mts +1 -0
  113. package/dist/internal/client-runtime.d.ts +1 -0
  114. package/dist/internal/client-runtime.mjs +4 -0
  115. package/dist/internal/compression-runtime.d.mts +1 -1
  116. package/dist/internal/compression-runtime.d.ts +1 -1
  117. package/dist/internal/config-runtime.cjs +6 -5
  118. package/dist/internal/config-runtime.d.mts +2 -2
  119. package/dist/internal/config-runtime.d.ts +2 -2
  120. package/dist/internal/config-runtime.mjs +5 -4
  121. package/dist/internal/form-actions-client.cjs +18 -0
  122. package/dist/internal/form-actions-client.d.mts +5 -0
  123. package/dist/internal/form-actions-client.d.ts +5 -0
  124. package/dist/internal/form-actions-client.mjs +18 -0
  125. package/dist/internal/form-actions.cjs +18 -0
  126. package/dist/internal/form-actions.d.mts +14 -0
  127. package/dist/internal/form-actions.d.ts +14 -0
  128. package/dist/internal/form-actions.mjs +18 -0
  129. package/dist/internal/island-codec.cjs +22 -0
  130. package/dist/internal/island-codec.d.mts +29 -0
  131. package/dist/internal/island-codec.d.ts +29 -0
  132. package/dist/internal/island-codec.mjs +22 -0
  133. package/dist/internal/island-value-store.cjs +13 -0
  134. package/dist/internal/island-value-store.d.mts +6 -0
  135. package/dist/internal/island-value-store.d.ts +6 -0
  136. package/dist/internal/island-value-store.mjs +13 -0
  137. package/dist/internal/islands-runtime.cjs +77 -0
  138. package/dist/internal/islands-runtime.d.mts +57 -0
  139. package/dist/internal/islands-runtime.d.ts +57 -0
  140. package/dist/internal/islands-runtime.mjs +77 -0
  141. package/dist/internal/islands-server.cjs +19 -0
  142. package/dist/internal/islands-server.d.mts +3 -0
  143. package/dist/internal/islands-server.d.ts +3 -0
  144. package/dist/internal/islands-server.mjs +19 -0
  145. package/dist/internal/islx-client.cjs +5 -0
  146. package/dist/internal/islx-client.d.mts +2 -0
  147. package/dist/internal/islx-client.d.ts +2 -0
  148. package/dist/internal/islx-client.mjs +3 -0
  149. package/dist/internal/islx-react.cjs +4 -0
  150. package/dist/internal/islx-react.d.mts +1 -0
  151. package/dist/internal/islx-react.d.ts +1 -0
  152. package/dist/internal/islx-react.mjs +2 -0
  153. package/dist/internal/islx-server.cjs +5 -0
  154. package/dist/internal/islx-server.d.mts +2 -0
  155. package/dist/internal/islx-server.d.ts +2 -0
  156. package/dist/internal/islx-server.mjs +3 -0
  157. package/dist/internal/isolated-boundary.cjs +4 -3
  158. package/dist/internal/isolated-boundary.d.mts +13 -1
  159. package/dist/internal/isolated-boundary.d.ts +13 -1
  160. package/dist/internal/isolated-boundary.mjs +3 -2
  161. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  162. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  163. package/dist/internal/production-runtime.cjs +24 -13
  164. package/dist/internal/production-runtime.d.mts +20 -10
  165. package/dist/internal/production-runtime.d.ts +20 -10
  166. package/dist/internal/production-runtime.mjs +24 -13
  167. package/dist/internal/server-tree.cjs +6 -3
  168. package/dist/internal/server-tree.d.mts +25 -2
  169. package/dist/internal/server-tree.d.ts +25 -2
  170. package/dist/internal/server-tree.mjs +7 -4
  171. package/dist/island-value-protocol-BRayRghM.d.mts +12 -0
  172. package/dist/island-value-protocol-BRayRghM.d.ts +12 -0
  173. package/dist/markdown.d.mts +1 -1
  174. package/dist/markdown.d.ts +1 -1
  175. package/dist/middleware.d.mts +3 -3
  176. package/dist/middleware.d.ts +3 -3
  177. package/dist/navigation.cjs +5 -4
  178. package/dist/navigation.d.mts +4 -4
  179. package/dist/navigation.d.ts +4 -4
  180. package/dist/navigation.mjs +4 -3
  181. package/dist/og.d.mts +5 -0
  182. package/dist/og.d.ts +5 -0
  183. package/dist/plugin.cjs +19 -12
  184. package/dist/plugin.d.mts +3 -3
  185. package/dist/plugin.d.ts +3 -3
  186. package/dist/plugin.mjs +18 -11
  187. package/dist/{production-runtime-bjjWq-DA.d.ts → production-runtime-BVMDgHrA.d.ts} +1 -1
  188. package/dist/{production-runtime-CHFKIgpW.d.mts → production-runtime-ClFA_1KQ.d.mts} +1 -1
  189. package/dist/query/client.cjs +6 -5
  190. package/dist/query/client.mjs +2 -1
  191. package/dist/{render-plan-DOHg6wdO.d.mts → render-plan-CoSovy_O.d.mts} +4 -2
  192. package/dist/{render-plan-B2UndB4x.d.ts → render-plan-y2DefWf8.d.ts} +4 -2
  193. package/dist/renderer/react/server.cjs +7 -6
  194. package/dist/renderer/react/server.d.mts +3 -1
  195. package/dist/renderer/react/server.d.ts +3 -1
  196. package/dist/renderer/react/server.mjs +5 -4
  197. package/dist/renderer-client.cjs +5 -4
  198. package/dist/renderer-client.d.mts +3 -3
  199. package/dist/renderer-client.d.ts +3 -3
  200. package/dist/renderer-client.mjs +2 -1
  201. package/dist/renderer.d.mts +3 -1
  202. package/dist/renderer.d.ts +3 -1
  203. package/dist/{request-DVNXRQrI.d.ts → request-aG5Wovm5.d.ts} +1 -1
  204. package/dist/{request-DQcGfdgQ.d.mts → request-cNM09Q7e.d.mts} +1 -1
  205. package/dist/request.d.mts +2 -2
  206. package/dist/request.d.ts +2 -2
  207. package/dist/{route-rendering-B_6fj-GG.d.ts → route-rendering-B3uQmCWX.d.ts} +1 -1
  208. package/dist/{route-rendering-CEX4mFn-.d.mts → route-rendering-EyInfsjI.d.mts} +1 -1
  209. package/dist/{router-CHEMHm1P.d.ts → router-DNUf-Bg1.d.ts} +1 -1
  210. package/dist/{router-CKHPBKXX.d.mts → router-Devibh4r.d.mts} +1 -1
  211. package/dist/routes.d.mts +1 -1
  212. package/dist/routes.d.ts +1 -1
  213. package/dist/rsc-pipeline-4ZJ6GUVQ.cjs +78 -0
  214. package/dist/rsc-pipeline-KK6GFDET.mjs +78 -0
  215. package/dist/{runtime-jj8TKNsy.d.mts → runtime-9KZb8AI5.d.mts} +1 -1
  216. package/dist/{runtime-Br2ZDTAv.d.ts → runtime-CLr9P5kn.d.ts} +1 -1
  217. package/dist/{schema-dev-notice-5JPE67AI.cjs → schema-dev-notice-77ZL23PL.cjs} +4 -4
  218. package/dist/{schema-dev-notice-WLPZ6WKU.mjs → schema-dev-notice-BLXOS6U2.mjs} +2 -2
  219. package/dist/server-plugins.d.mts +2 -2
  220. package/dist/server-plugins.d.ts +2 -2
  221. package/dist/server.cjs +57 -38
  222. package/dist/server.d.mts +15 -10
  223. package/dist/server.d.ts +15 -10
  224. package/dist/server.mjs +37 -18
  225. package/dist/{spa-router-BEvS9Erj.d.mts → spa-router-BIxh4IY-.d.mts} +8 -3
  226. package/dist/{spa-router-DmCuH5B7.d.ts → spa-router-Ds6R_oe-.d.ts} +8 -3
  227. package/dist/{ssg-57v6cZcW.d.mts → ssg-ByrOVYdM.d.mts} +2 -2
  228. package/dist/{ssg-gT093ETk.d.ts → ssg-XnMHCyEc.d.ts} +2 -2
  229. package/dist/testing.d.mts +1 -1
  230. package/dist/testing.d.ts +1 -1
  231. package/dist/{utils-CCTKvR-P.d.ts → utils-BN70ueSN.d.ts} +1 -1
  232. package/dist/{utils-raHHQVyL.d.mts → utils-BrjR5xRs.d.mts} +1 -1
  233. package/dist/version.cjs +2 -2
  234. package/dist/version.mjs +1 -1
  235. package/dist/vite.cjs +19 -12
  236. package/dist/vite.d.mts +6 -4
  237. package/dist/vite.d.ts +6 -4
  238. package/dist/vite.mjs +18 -11
  239. package/package.json +53 -1
  240. package/dist/{chunk-35WS7P2V.mjs → chunk-26CXZR6L.mjs} +3 -3
  241. package/dist/{chunk-QEILRWVV.cjs → chunk-3XEMGDBF.cjs} +2 -2
  242. package/dist/{chunk-BPOTSHDO.cjs → chunk-IOAUK4OI.cjs} +2 -2
  243. package/dist/{chunk-BYR3RQPB.mjs → chunk-T76H22WI.mjs} +4 -4
@@ -1,12 +1,29 @@
1
1
  import {
2
+ getFarmActionId,
2
3
  markFarmClientReference,
3
4
  updateFarmServerTreeModule
4
- } from "./chunk-NRDBW4MP.mjs";
5
+ } from "./chunk-7IQQIPRZ.mjs";
6
+ import {
7
+ FARM_ACTION_TAG,
8
+ FARM_ISLAND_ELEMENT,
9
+ FARM_OBJECT_TAG,
10
+ FARM_PROPS_SCRIPT_TYPE,
11
+ FARM_REFERENCE_TAG,
12
+ FARM_SLOT_ELEMENT,
13
+ FARM_SLOT_TAG,
14
+ FARM_TAG,
15
+ FARM_TAG_VALUE,
16
+ FARM_VALUE_SCRIPT_TYPE,
17
+ getFarmIslandValuesServer,
18
+ getFarmTag
19
+ } from "./chunk-2NXO5SBY.mjs";
5
20
  import {
6
21
  __name
7
22
  } from "./chunk-LPEX4YW6.mjs";
8
23
 
9
24
  // src/client/isolated-boundary.ts
25
+ var ISLAND_SELECTOR = `${FARM_ISLAND_ELEMENT}[src]`;
26
+ var runtimeTagged = /* @__PURE__ */ new WeakSet();
10
27
  var REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for("react.transitional.element");
11
28
  var LEGACY_REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for("react.element");
12
29
  var BOUNDARY_GRAPH_CONTEXT = /* @__PURE__ */ Symbol.for("farm.isolated-hydration.client-graph-context");
@@ -23,6 +40,9 @@ function getBoundaryGraphContext(ReactRuntime) {
23
40
  }
24
41
  __name(getBoundaryGraphContext, "getBoundaryGraphContext");
25
42
  function serializeBoundaryProps(value, seen = /* @__PURE__ */ new Set()) {
43
+ const codec = getFarmIslandValuesServer();
44
+ const leaf = codec?.encodeLeaf(value);
45
+ if (leaf) return leaf;
26
46
  if (value === null || typeof value === "string" || typeof value === "boolean") return value;
27
47
  if (typeof value === "number") {
28
48
  if (!Number.isFinite(value)) throw new TypeError("non-finite numbers are not serializable");
@@ -31,6 +51,10 @@ function serializeBoundaryProps(value, seen = /* @__PURE__ */ new Set()) {
31
51
  if (typeof value === "undefined") {
32
52
  throw new TypeError("undefined values are not serializable");
33
53
  }
54
+ if (typeof value === "function") {
55
+ const actionId = getFarmActionId(value);
56
+ if (actionId) return { [FARM_TAG]: FARM_ACTION_TAG, [FARM_TAG_VALUE]: actionId };
57
+ }
34
58
  if (typeof value !== "object") {
35
59
  throw new TypeError(`${typeof value} values are not serializable`);
36
60
  }
@@ -41,22 +65,143 @@ function serializeBoundaryProps(value, seen = /* @__PURE__ */ new Set()) {
41
65
  seen.add(value);
42
66
  try {
43
67
  if (Array.isArray(value)) return value.map((entry) => serializeBoundaryProps(entry, seen));
68
+ if (codec && value instanceof Map) {
69
+ return {
70
+ [FARM_TAG]: "M",
71
+ [FARM_TAG_VALUE]: Array.from(value, ([key, entry]) => [
72
+ serializeBoundaryProps(key, seen),
73
+ serializeBoundaryProps(entry, seen)
74
+ ])
75
+ };
76
+ }
77
+ if (codec && value instanceof Set) {
78
+ return {
79
+ [FARM_TAG]: "S",
80
+ [FARM_TAG_VALUE]: Array.from(value, (entry) => serializeBoundaryProps(entry, seen))
81
+ };
82
+ }
44
83
  const prototype = Object.getPrototypeOf(value);
45
84
  if (prototype !== Object.prototype && prototype !== null) {
46
85
  throw new TypeError("class instances are not serializable");
47
86
  }
48
- return Object.fromEntries(
87
+ const serialized = Object.fromEntries(
49
88
  Object.entries(value).map(([key, entry]) => [key, serializeBoundaryProps(entry, seen)])
50
89
  );
90
+ return codec && !runtimeTagged.has(value) && Object.prototype.hasOwnProperty.call(value, FARM_TAG) ? { [FARM_TAG]: FARM_OBJECT_TAG, [FARM_TAG_VALUE]: serialized } : serialized;
51
91
  } finally {
52
92
  seen.delete(value);
53
93
  }
54
94
  }
55
95
  __name(serializeBoundaryProps, "serializeBoundaryProps");
56
96
  function serializeBoundaryPayload(value) {
57
- return JSON.stringify(serializeBoundaryProps(value)).replace(/&/g, "\\u0026").replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
97
+ return escapeScriptJson(JSON.stringify(serializeBoundaryProps(value)));
58
98
  }
59
99
  __name(serializeBoundaryPayload, "serializeBoundaryPayload");
100
+ function escapeScriptJson(json) {
101
+ return json.replace(/&/g, "\\u0026").replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
102
+ }
103
+ __name(escapeScriptJson, "escapeScriptJson");
104
+ var SLOT_ELEMENT = FARM_SLOT_ELEMENT;
105
+ function isReactElementValue(value) {
106
+ const type = value?.$$typeof;
107
+ return type === REACT_ELEMENT_TYPE || type === LEGACY_REACT_ELEMENT_TYPE;
108
+ }
109
+ __name(isReactElementValue, "isReactElementValue");
110
+ function slotReference(id) {
111
+ const reference = { [FARM_TAG]: FARM_SLOT_TAG, [FARM_TAG_VALUE]: id };
112
+ runtimeTagged.add(reference);
113
+ return reference;
114
+ }
115
+ __name(slotReference, "slotReference");
116
+ function splitSlotProps(ReactRuntime, value, slotPrefix, counter) {
117
+ if (isReactElementValue(value)) {
118
+ const id = `${slotPrefix}${counter.next++}`;
119
+ return {
120
+ render: ReactRuntime.createElement(
121
+ SLOT_ELEMENT,
122
+ { key: value.key ?? id, name: id, style: { display: "contents" } },
123
+ value
124
+ ),
125
+ wire: slotReference(id)
126
+ };
127
+ }
128
+ if (Array.isArray(value)) {
129
+ const parts = value.map((entry) => splitSlotProps(ReactRuntime, entry, slotPrefix, counter));
130
+ return { render: parts.map((part) => part.render), wire: parts.map((part) => part.wire) };
131
+ }
132
+ if (value && typeof value === "object") {
133
+ const prototype = Object.getPrototypeOf(value);
134
+ if (prototype !== Object.prototype && prototype !== null) return { render: value, wire: value };
135
+ const render = {};
136
+ const wire = {};
137
+ for (const [key, entry] of Object.entries(value)) {
138
+ const part = splitSlotProps(ReactRuntime, entry, slotPrefix, counter);
139
+ render[key] = part.render;
140
+ wire[key] = part.wire;
141
+ }
142
+ return { render, wire };
143
+ }
144
+ return { render: value, wire: value };
145
+ }
146
+ __name(splitSlotProps, "splitSlotProps");
147
+ var FARM_NOT_A_MARKER = /* @__PURE__ */ Symbol.for("farm.codec.not-a-marker");
148
+ function reviveSlotProps(ReactRuntime, value, container, actions, decode) {
149
+ if (Array.isArray(value)) {
150
+ let changed2 = false;
151
+ const revived2 = value.map((entry) => {
152
+ const next = reviveSlotProps(ReactRuntime, entry, container, actions, decode);
153
+ if (next !== entry) changed2 = true;
154
+ return next;
155
+ });
156
+ return changed2 ? revived2 : value;
157
+ }
158
+ if (!value || typeof value !== "object") return value;
159
+ const tag = decode || actions ? getFarmTag(value) : void 0;
160
+ const data = tag === void 0 ? void 0 : value[FARM_TAG_VALUE];
161
+ if (tag === FARM_ACTION_TAG && typeof data === "string") {
162
+ if (!actions) throw new Error("server action props need islands mode");
163
+ return actions(data);
164
+ }
165
+ if (tag === FARM_SLOT_TAG && typeof data === "string") {
166
+ let html = "";
167
+ for (const slot of container.querySelectorAll(SLOT_ELEMENT)) {
168
+ if (slot.getAttribute("name") === data) {
169
+ html = slot.innerHTML;
170
+ break;
171
+ }
172
+ }
173
+ return ReactRuntime.createElement(SLOT_ELEMENT, {
174
+ key: data,
175
+ name: data,
176
+ style: { display: "contents" },
177
+ suppressHydrationWarning: true,
178
+ dangerouslySetInnerHTML: { __html: html }
179
+ });
180
+ }
181
+ if (tag === FARM_REFERENCE_TAG) throw new Error(`island value ${String(data)} was not resolved`);
182
+ if (tag !== void 0) {
183
+ if (!decode) throw new Error("typed props need islands mode");
184
+ const decoded = decode(
185
+ value,
186
+ (child) => reviveSlotProps(ReactRuntime, child, container, actions, decode)
187
+ );
188
+ if (decoded !== FARM_NOT_A_MARKER) return decoded;
189
+ }
190
+ let changed = false;
191
+ const revived = {};
192
+ for (const [key, entry] of Object.entries(value)) {
193
+ const next = reviveSlotProps(ReactRuntime, entry, container, actions, decode);
194
+ Object.defineProperty(revived, key, {
195
+ value: next,
196
+ enumerable: true,
197
+ writable: true,
198
+ configurable: true
199
+ });
200
+ if (next !== entry) changed = true;
201
+ }
202
+ return changed ? revived : value;
203
+ }
204
+ __name(reviveSlotProps, "reviveSlotProps");
60
205
  function wrapFarmIsolatedClientGraph(ReactRuntime, element) {
61
206
  const Context = getBoundaryGraphContext(ReactRuntime);
62
207
  return ReactRuntime.createElement(Context.Provider, { value: true }, element);
@@ -68,7 +213,7 @@ function isolateFarmServerPageGraph(ReactRuntime, element) {
68
213
  }
69
214
  __name(isolateFarmServerPageGraph, "isolateFarmServerPageGraph");
70
215
  var warnedUnserializableBoundaries = /* @__PURE__ */ new Set();
71
- function createFarmIsolatedClientBoundary(ReactRuntime, Component, moduleReference, exportName, islandStrategy) {
216
+ function createFarmIsolatedClientBoundary(ReactRuntime, Component, moduleReference, exportName, islandStrategy, boundaryOptions = {}) {
72
217
  function FarmIsolatedClientBoundary(props) {
73
218
  const Context = getBoundaryGraphContext(ReactRuntime);
74
219
  const belongsToParentClientGraph = ReactRuntime.useContext(Context);
@@ -77,8 +222,30 @@ function createFarmIsolatedClientBoundary(ReactRuntime, Component, moduleReferen
77
222
  return ReactRuntime.createElement(Component, props);
78
223
  }
79
224
  let serializedProps;
225
+ let renderProps = props;
226
+ let valueScripts = [];
80
227
  try {
81
- serializedProps = serializeBoundaryPayload(props);
228
+ if (boundaryOptions.slots) {
229
+ const { render, wire } = splitSlotProps(ReactRuntime, props, `${boundaryId}s`, { next: 0 });
230
+ renderProps = render;
231
+ const values = boundaryOptions.values ? getFarmIslandValuesServer() : void 0;
232
+ if (values) {
233
+ const addressed = values.address(serializeBoundaryProps(wire));
234
+ serializedProps = escapeScriptJson(addressed.json);
235
+ valueScripts = values.select(addressed, values.held()).map(
236
+ (value) => ReactRuntime.createElement("script", {
237
+ key: value.key,
238
+ type: FARM_VALUE_SCRIPT_TYPE,
239
+ name: value.key,
240
+ dangerouslySetInnerHTML: { __html: escapeScriptJson(value.json) }
241
+ })
242
+ );
243
+ } else {
244
+ serializedProps = serializeBoundaryPayload(wire);
245
+ }
246
+ } else {
247
+ serializedProps = serializeBoundaryPayload(props);
248
+ }
82
249
  } catch (error) {
83
250
  const message = error instanceof Error ? error.message : String(error);
84
251
  const warningKey = `${moduleReference}#${exportName}:${message}`;
@@ -93,24 +260,25 @@ function createFarmIsolatedClientBoundary(ReactRuntime, Component, moduleReferen
93
260
  return ReactRuntime.createElement(
94
261
  ReactRuntime.Fragment,
95
262
  null,
263
+ ...valueScripts,
96
264
  ReactRuntime.createElement(
97
- "farm-client-boundary",
265
+ FARM_ISLAND_ELEMENT,
98
266
  {
99
- "data-farm-client-boundary": moduleReference,
100
- "data-farm-client-id": boundaryId,
101
- "data-farm-client-export": exportName,
102
- "data-farm-island-strategy": islandStrategy,
267
+ src: moduleReference,
268
+ export: exportName,
269
+ props: boundaryId,
270
+ strategy: islandStrategy,
103
271
  style: { display: "contents" }
104
272
  },
105
273
  ReactRuntime.createElement(
106
274
  Context.Provider,
107
275
  { value: true },
108
- ReactRuntime.createElement(Component, props)
276
+ ReactRuntime.createElement(Component, renderProps)
109
277
  )
110
278
  ),
111
279
  ReactRuntime.createElement("script", {
112
- type: "application/json",
113
- "data-farm-client-props": boundaryId,
280
+ type: FARM_PROPS_SCRIPT_TYPE,
281
+ htmlFor: boundaryId,
114
282
  dangerouslySetInnerHTML: { __html: serializedProps }
115
283
  })
116
284
  );
@@ -131,13 +299,13 @@ function isEarlyHydrationUpdate(error) {
131
299
  __name(isEarlyHydrationUpdate, "isEarlyHydrationUpdate");
132
300
  function findBoundaryPayload(container, boundaryId) {
133
301
  const sibling = container.nextElementSibling;
134
- if (sibling instanceof HTMLScriptElement && sibling.type === "application/json" && sibling.getAttribute("data-farm-client-props") === boundaryId) {
302
+ if (sibling instanceof HTMLScriptElement && sibling.type === FARM_PROPS_SCRIPT_TYPE && sibling.getAttribute("for") === boundaryId) {
135
303
  return sibling;
136
304
  }
137
305
  for (const candidate of container.ownerDocument.querySelectorAll(
138
- 'script[type="application/json"][data-farm-client-props]'
306
+ `script[type="${FARM_PROPS_SCRIPT_TYPE}"]`
139
307
  )) {
140
- if (candidate.getAttribute("data-farm-client-props") === boundaryId) return candidate;
308
+ if (candidate.getAttribute("for") === boundaryId) return candidate;
141
309
  }
142
310
  return null;
143
311
  }
@@ -191,23 +359,73 @@ function createFarmIsolatedHydrationRuntime(options) {
191
359
  )
192
360
  );
193
361
  }, "createBoundaryGraph");
194
- async function hydrate(scope = document, signal) {
195
- const candidates = Array.from(
196
- scope.querySelectorAll("farm-client-boundary[data-farm-client-boundary]")
362
+ function readBoundaryProps(container, boundaryId) {
363
+ const payload = findBoundaryPayload(container, boundaryId);
364
+ if (!payload) throw new Error(`serialized props ${boundaryId} were not found`);
365
+ const parsedProps = JSON.parse(payload.textContent || "{}");
366
+ if (!parsedProps || typeof parsedProps !== "object" || Array.isArray(parsedProps)) {
367
+ throw new Error("serialized props must be an object");
368
+ }
369
+ let resolvedProps = parsedProps;
370
+ if (payload.textContent?.includes(`"${FARM_TAG}":"${FARM_REFERENCE_TAG}"`)) {
371
+ if (!options.values) throw new Error("island values need islands mode");
372
+ options.values.ingest(container.ownerDocument);
373
+ resolvedProps = options.values.resolve(parsedProps);
374
+ }
375
+ return reviveSlotProps(
376
+ options.ReactRuntime,
377
+ resolvedProps,
378
+ container,
379
+ options.actions,
380
+ options.decode
197
381
  );
198
- if (scope instanceof Element && scope.matches("farm-client-boundary[data-farm-client-boundary]")) {
382
+ }
383
+ __name(readBoundaryProps, "readBoundaryProps");
384
+ const topLevelBoundaries = /* @__PURE__ */ __name((scope) => Array.from(scope.querySelectorAll(ISLAND_SELECTOR)).filter(
385
+ (container) => !container.parentElement?.closest(ISLAND_SELECTOR)
386
+ ), "topLevelBoundaries");
387
+ const boundaryKey = /* @__PURE__ */ __name((container) => `${container.getAttribute("src")}#${container.getAttribute("export") || "default"}`, "boundaryKey");
388
+ function carryOver(current, next) {
389
+ const live = /* @__PURE__ */ new Map();
390
+ for (const container of topLevelBoundaries(current)) {
391
+ if (!roots.has(container)) continue;
392
+ const key = boundaryKey(container);
393
+ live.set(key, [...live.get(key) ?? [], container]);
394
+ }
395
+ let carried = 0;
396
+ for (const container of topLevelBoundaries(next)) {
397
+ const previous = live.get(boundaryKey(container))?.shift();
398
+ const record = previous && roots.get(previous);
399
+ const boundaryId = container.getAttribute("props");
400
+ if (!previous || !record || !boundaryId) continue;
401
+ try {
402
+ const props = readBoundaryProps(container, boundaryId);
403
+ record.root.render(createBoundaryGraph(record.Component, props, record.restore));
404
+ record.props = props;
405
+ container.replaceWith(previous);
406
+ carried++;
407
+ } catch (error) {
408
+ report(`Could not keep ${boundaryKey(container)} across the refresh.`, error);
409
+ }
410
+ }
411
+ return carried;
412
+ }
413
+ __name(carryOver, "carryOver");
414
+ async function hydrate(scope = document, signal) {
415
+ const candidates = Array.from(scope.querySelectorAll(ISLAND_SELECTOR));
416
+ if (scope instanceof Element && scope.matches(ISLAND_SELECTOR)) {
199
417
  candidates.unshift(scope);
200
418
  }
201
419
  const boundaries = candidates.filter((container) => {
202
420
  if (roots.has(container) || pending.has(container)) return false;
203
- return !container.parentElement?.closest("farm-client-boundary[data-farm-client-boundary]");
421
+ return !container.parentElement?.closest(ISLAND_SELECTOR);
204
422
  });
205
423
  await Promise.all(
206
424
  boundaries.map(async (container) => {
207
- const reference = container.getAttribute("data-farm-client-boundary");
208
- const boundaryId = container.getAttribute("data-farm-client-id");
209
- const exportName = container.getAttribute("data-farm-client-export") || "default";
210
- const strategy = container.getAttribute("data-farm-island-strategy") ?? "load";
425
+ const reference = container.getAttribute("src");
426
+ const boundaryId = container.getAttribute("props");
427
+ const exportName = container.getAttribute("export") || "default";
428
+ const strategy = container.getAttribute("strategy") ?? "load";
211
429
  if (!reference || !boundaryId) {
212
430
  report("An isolated client boundary is missing its module reference or payload ID.");
213
431
  return;
@@ -242,12 +460,7 @@ function createFarmIsolatedHydrationRuntime(options) {
242
460
  if (typeof Component !== "function" && typeof Component !== "object") {
243
461
  throw new Error("compiled original export was not found");
244
462
  }
245
- const payload = findBoundaryPayload(container, boundaryId);
246
- if (!payload) throw new Error(`serialized props ${boundaryId} were not found`);
247
- const props = JSON.parse(payload.textContent || "{}");
248
- if (!props || typeof props !== "object" || Array.isArray(props)) {
249
- throw new Error("serialized props must be an object");
250
- }
463
+ const props = readBoundaryProps(container, boundaryId);
251
464
  let rootFailure;
252
465
  const restore = /* @__PURE__ */ __name((error) => {
253
466
  if (rootFailure !== void 0) return;
@@ -271,6 +484,7 @@ function createFarmIsolatedHydrationRuntime(options) {
271
484
  });
272
485
  roots.set(container, {
273
486
  root,
487
+ Component,
274
488
  dispose() {
275
489
  disposing = true;
276
490
  try {
@@ -361,6 +575,7 @@ function createFarmIsolatedHydrationRuntime(options) {
361
575
  __name(dispose, "dispose");
362
576
  return {
363
577
  hydrate,
578
+ carryOver,
364
579
  updateModule,
365
580
  dispose,
366
581
  rootCount: /* @__PURE__ */ __name(() => roots.size, "rootCount")
@@ -374,9 +589,7 @@ function createFarmServerPageBoundary(ReactRuntime, runtime) {
374
589
  ReactRuntime.useLayoutEffect(() => {
375
590
  const page = ref.current;
376
591
  if (!page) return;
377
- const islands = Array.from(
378
- page.querySelectorAll("farm-client-boundary[data-farm-client-boundary]")
379
- );
592
+ const islands = Array.from(page.querySelectorAll(ISLAND_SELECTOR));
380
593
  if (islands.length === 0) return;
381
594
  const controller = new AbortController();
382
595
  runtime.hydrate(page, controller.signal).catch((error) => {
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "0.1.42";
2
+ var version = "0.1.44";
3
3
 
4
4
  // src/version.ts
5
5
  var FARM_VERSION = version;
@@ -0,0 +1,109 @@
1
+ import {
2
+ formatOptionalPeerInstallHint,
3
+ isMissingPackageError
4
+ } from "./chunk-YOZYCI6Z.mjs";
5
+ import {
6
+ logger
7
+ } from "./chunk-KI3MESHB.mjs";
8
+ import {
9
+ __name
10
+ } from "./chunk-LPEX4YW6.mjs";
11
+
12
+ // src/build/tailwind.ts
13
+ import path from "path";
14
+
15
+ // src/build/vite-plugin-compat.ts
16
+ function adaptTailwindVitePlugin(pluginOption, builder) {
17
+ if (builder !== "rolldown") return pluginOption;
18
+ return adaptPluginOption(pluginOption);
19
+ }
20
+ __name(adaptTailwindVitePlugin, "adaptTailwindVitePlugin");
21
+ function adaptPluginOption(pluginOption) {
22
+ if (Array.isArray(pluginOption)) return pluginOption.map(adaptPluginOption);
23
+ if (!pluginOption || typeof pluginOption !== "object") return pluginOption;
24
+ const plugin = pluginOption;
25
+ if (!plugin.name?.startsWith("@tailwindcss/vite:generate:")) return pluginOption;
26
+ if (isVitePluginHook(plugin.transform)) {
27
+ return {
28
+ ...plugin,
29
+ transform: withVite5TransformContext(plugin.transform)
30
+ };
31
+ }
32
+ if (plugin.transform && typeof plugin.transform === "object" && "handler" in plugin.transform && isVitePluginHook(plugin.transform.handler)) {
33
+ return {
34
+ ...plugin,
35
+ transform: {
36
+ ...plugin.transform,
37
+ handler: withVite5TransformContext(plugin.transform.handler)
38
+ }
39
+ };
40
+ }
41
+ return pluginOption;
42
+ }
43
+ __name(adaptPluginOption, "adaptPluginOption");
44
+ function isVitePluginHook(value) {
45
+ return typeof value === "function";
46
+ }
47
+ __name(isVitePluginHook, "isVitePluginHook");
48
+ function withVite5TransformContext(handler) {
49
+ return function(...args) {
50
+ const context = new Proxy(this, {
51
+ get(target, property, receiver) {
52
+ if (property === "environment") return void 0;
53
+ return Reflect.get(target, property, receiver);
54
+ }
55
+ });
56
+ return handler.apply(context, args);
57
+ };
58
+ }
59
+ __name(withVite5TransformContext, "withVite5TransformContext");
60
+
61
+ // src/build/tailwind.ts
62
+ var TAILWIND_CSS_IMPORT = /@import\s+["']tailwindcss["']/;
63
+ var TAILWIND_VITE_INSTALL_HINT = formatOptionalPeerInstallHint(
64
+ "@tailwindcss/vite",
65
+ "enable built-in Tailwind CSS support",
66
+ { dev: true }
67
+ );
68
+ var warnedMissingTailwind = false;
69
+ async function loadTailwindVitePlugin(options = {}, importTailwind = () => import("@tailwindcss/vite")) {
70
+ try {
71
+ const tailwindVite = (await importTailwind()).default;
72
+ const plugin = options.builder ? adaptTailwindVitePlugin(tailwindVite(), options.builder) : tailwindVite();
73
+ if (options.announce) logger.info("\u{1F4E6} Enabled built-in Tailwind support (@tailwindcss/vite)");
74
+ return plugin;
75
+ } catch (error) {
76
+ if (isMissingPackageError(error, "@tailwindcss/vite")) return createMissingTailwindPlugin();
77
+ logger.warn(
78
+ `Tailwind plugin auto-enable failed${options.label ? ` ${options.label}` : ""}; continuing without it: ${error.message}`
79
+ );
80
+ return void 0;
81
+ }
82
+ }
83
+ __name(loadTailwindVitePlugin, "loadTailwindVitePlugin");
84
+ function createMissingTailwindPlugin() {
85
+ let root = process.cwd();
86
+ return {
87
+ name: "farm:tailwind-missing",
88
+ enforce: "pre",
89
+ configResolved(config) {
90
+ root = config.root;
91
+ },
92
+ transform(code, id) {
93
+ if (warnedMissingTailwind || !/\.css(?:\?.*)?$/.test(id) || !TAILWIND_CSS_IMPORT.test(code)) {
94
+ return null;
95
+ }
96
+ warnedMissingTailwind = true;
97
+ const file = path.relative(root, id.split("?", 1)[0]).replace(/\\/g, "/");
98
+ logger.warn(
99
+ `${file} imports Tailwind CSS, but @tailwindcss/vite is not installed; continuing without Tailwind. ${TAILWIND_VITE_INSTALL_HINT}`
100
+ );
101
+ return null;
102
+ }
103
+ };
104
+ }
105
+ __name(createMissingTailwindPlugin, "createMissingTailwindPlugin");
106
+
107
+ export {
108
+ loadTailwindVitePlugin
109
+ };
@@ -18,6 +18,9 @@ import {
18
18
  renderMetadataHead,
19
19
  resolveMetadataTitle
20
20
  } from "./chunk-73WX6PRY.mjs";
21
+ import {
22
+ getFarmIslandValueHeaders
23
+ } from "./chunk-2NXO5SBY.mjs";
21
24
  import {
22
25
  createFarmDeploymentMismatchError,
23
26
  createFarmDeploymentRequestHeaders,
@@ -300,7 +303,8 @@ var _SPARouter = class _SPARouter {
300
303
  replace,
301
304
  scroll,
302
305
  state,
303
- url
306
+ url,
307
+ refresh
304
308
  }) : Promise.resolve()
305
309
  );
306
310
  if (!this.isCurrentNavigation(navigation, clientNavigation)) return;
@@ -527,7 +531,7 @@ var _SPARouter = class _SPARouter {
527
531
  this.updateDocumentMetadata(options.pageData.metadata);
528
532
  _hydrateFarmI18n(options.pageData.i18n);
529
533
  if (this.onNavigate) {
530
- await this.onNavigate(options.pageData);
534
+ await this.onNavigate(options.pageData, { refresh: options.refresh === true });
531
535
  }
532
536
  if (options.scroll) {
533
537
  if (options.url.hash) {
@@ -629,7 +633,9 @@ var _SPARouter = class _SPARouter {
629
633
  Accept: "application/x-farm-deferred+json, application/json",
630
634
  "X-Farm-SPA": "1",
631
635
  ...activeLayoutChain ? { "X-Farm-Layout-Chain": activeLayoutChain } : {},
632
- ...interceptFrom ? { "X-Farm-Intercept-From": interceptFrom } : {}
636
+ ...interceptFrom ? { "X-Farm-Intercept-From": interceptFrom } : {},
637
+ // Islands mode: the server leaves out island values this browser holds.
638
+ ...getFarmIslandValueHeaders()
633
639
  })
634
640
  });
635
641
  if (isFarmDeploymentMismatchResponse(response, this.options.deploymentId)) {
@@ -1,7 +1,16 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
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
  var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
4
4
 
5
+ // src/client/action-reference.ts
6
+ var ACTION_IDS_KEY = /* @__PURE__ */ Symbol.for("farm.form-actions.ids");
7
+ function getFarmActionId(value) {
8
+ if (typeof value !== "function") return void 0;
9
+ const scope = globalThis;
10
+ return _optionalChain([scope, 'access', _ => _[ACTION_IDS_KEY], 'optionalAccess', _2 => _2.get, 'call', _3 => _3(value)]);
11
+ }
12
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmActionId, "getFarmActionId");
13
+
5
14
  // src/client/client-reference.ts
6
15
  var CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for("farm.isolated-hydration.client-reference");
7
16
  function markFarmClientReference(boundary, reference) {
@@ -42,4 +51,5 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, updateFarmServerTreeModule, "updateFarmSer
42
51
 
43
52
 
44
53
 
45
- exports.markFarmClientReference = markFarmClientReference; exports.getFarmClientReference = getFarmClientReference; exports.subscribeFarmServerTreeUpdates = subscribeFarmServerTreeUpdates; exports.updateFarmServerTreeModule = updateFarmServerTreeModule;
54
+
55
+ exports.getFarmActionId = getFarmActionId; exports.markFarmClientReference = markFarmClientReference; exports.getFarmClientReference = getFarmClientReference; exports.subscribeFarmServerTreeUpdates = subscribeFarmServerTreeUpdates; exports.updateFarmServerTreeModule = updateFarmServerTreeModule;