@farm.js/core 0.1.41 → 0.1.43

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 (237) hide show
  1. package/dist/{agent-mcp-BOqIxJLI.d.mts → agent-mcp-3KDz4hr9.d.mts} +1 -1
  2. package/dist/{agent-mcp-D0eZKfci.d.ts → agent-mcp-6yRebHk7.d.ts} +1 -1
  3. package/dist/agent-runtime.d.mts +1 -1
  4. package/dist/agent-runtime.d.ts +1 -1
  5. package/dist/api/route-manager.d.mts +3 -3
  6. package/dist/api/route-manager.d.ts +3 -3
  7. package/dist/api/runtime.d.mts +2 -2
  8. package/dist/api/runtime.d.ts +2 -2
  9. package/dist/api.cjs +2 -2
  10. package/dist/api.d.mts +8 -3
  11. package/dist/api.d.ts +8 -3
  12. package/dist/api.mjs +1 -1
  13. package/dist/{app-DM8e1z3G.d.ts → app-8Db1zR-2.d.ts} +8 -4
  14. package/dist/{app-CzTSMJaf.d.mts → app-DlTWv4cn.d.mts} +8 -4
  15. package/dist/app-manifest-TRzS7ZZ9.d.mts +120 -0
  16. package/dist/app-manifest-cO2jkG1F.d.ts +120 -0
  17. package/dist/app-markdown.d.mts +2 -2
  18. package/dist/app-markdown.d.ts +2 -2
  19. package/dist/{chunk-ECKF2BAM.cjs → chunk-2GVF3C2F.cjs} +255 -42
  20. package/dist/chunk-2NXO5SBY.mjs +57 -0
  21. package/dist/chunk-3BROEWFY.cjs +39 -0
  22. package/dist/{chunk-ENOBPDKZ.mjs → chunk-4MRQ5OKQ.mjs} +14 -9
  23. package/dist/{chunk-R65GCA6A.mjs → chunk-4OCEMK72.mjs} +260 -49
  24. package/dist/{chunk-6PKXK4TY.mjs → chunk-53ZV6K65.mjs} +1 -1
  25. package/dist/{chunk-LYIZHJTK.cjs → chunk-5LPHJZSI.cjs} +14 -14
  26. package/dist/chunk-5NIWBWDD.mjs +97 -0
  27. package/dist/{chunk-NRDBW4MP.mjs → chunk-7IQQIPRZ.mjs} +10 -0
  28. package/dist/{chunk-FJGIVDA5.mjs → chunk-7SCCY6SI.mjs} +80 -177
  29. package/dist/chunk-APDGOKKE.cjs +148 -0
  30. package/dist/chunk-AZBSVLRM.cjs +132 -0
  31. package/dist/{chunk-PN676AZF.cjs → chunk-BKPXWRTT.cjs} +6 -6
  32. package/dist/chunk-CEDPEDNW.cjs +98 -0
  33. package/dist/chunk-D5RFPV2H.mjs +148 -0
  34. package/dist/{chunk-BYQVROIP.mjs → chunk-DMRPN25V.mjs} +69 -0
  35. package/dist/{chunk-724JLMS4.mjs → chunk-F646BZ4Y.mjs} +4 -2
  36. package/dist/{chunk-C5KVWHIH.cjs → chunk-G2Z5DGMS.cjs} +5 -3
  37. package/dist/{chunk-L6HYACBE.cjs → chunk-GVNCWSQV.cjs} +145 -127
  38. package/dist/{chunk-24SP5TGU.mjs → chunk-H4LXPWI2.mjs} +2 -2
  39. package/dist/chunk-H7BLEEAE.cjs +57 -0
  40. package/dist/{chunk-JOTUZIM4.cjs → chunk-HUMEHX24.cjs} +2 -2
  41. package/dist/{chunk-BD3D7EZV.cjs → chunk-IXFOBGLQ.cjs} +9 -3
  42. package/dist/{chunk-3TB5QGUW.cjs → chunk-JAXDRRRC.cjs} +70 -1
  43. package/dist/{chunk-32TZ3QTP.cjs → chunk-JDJAPCR2.cjs} +421 -210
  44. package/dist/{chunk-MHN4UR5U.cjs → chunk-KFZZFZ7J.cjs} +7 -7
  45. package/dist/chunk-LRJRXXQZ.cjs +109 -0
  46. package/dist/{chunk-EX4MKHXN.cjs → chunk-LVABUXLA.cjs} +22 -17
  47. package/dist/{chunk-HCSVR4YZ.mjs → chunk-M3BXTWJM.mjs} +18 -0
  48. package/dist/{chunk-PYHPXPSW.mjs → chunk-NXO75WY4.mjs} +1 -1
  49. package/dist/{chunk-BGGWKZ2V.mjs → chunk-OYSGGV6O.mjs} +137 -167
  50. package/dist/{chunk-JR4QCLJY.cjs → chunk-PDU4P2IC.cjs} +19 -1
  51. package/dist/chunk-PJEHUSHA.mjs +229 -0
  52. package/dist/chunk-QGH2RQVF.mjs +132 -0
  53. package/dist/{chunk-YWMZUGIS.mjs → chunk-R3ZFQJEF.mjs} +247 -34
  54. package/dist/{chunk-ROQ4C4LJ.cjs → chunk-RACQTC7K.cjs} +274 -371
  55. package/dist/{chunk-WSOBCAYO.cjs → chunk-RQYTOFQM.cjs} +23 -23
  56. package/dist/chunk-S34OBRMZ.mjs +109 -0
  57. package/dist/{chunk-TS4JHGUJ.mjs → chunk-S3ZEMCE6.mjs} +9 -3
  58. package/dist/{chunk-WWFTAUFG.cjs → chunk-SBH2JLLF.cjs} +12 -2
  59. package/dist/{chunk-YSLWRWWP.cjs → chunk-SKK6UF5P.cjs} +200 -46
  60. package/dist/chunk-T7J7E63D.cjs +144 -0
  61. package/dist/{chunk-SVPGWJZF.mjs → chunk-TESO7EFU.mjs} +125 -107
  62. package/dist/{chunk-OQ4YXWH4.cjs → chunk-VIVQERJ5.cjs} +320 -351
  63. package/dist/{chunk-JIYYX7WU.mjs → chunk-VLXNGUKO.mjs} +1 -1
  64. package/dist/{chunk-OFZUJMCU.mjs → chunk-WPJQN64R.mjs} +195 -41
  65. package/dist/chunk-XARSG2TG.mjs +144 -0
  66. package/dist/chunk-XUGFRFD2.mjs +39 -0
  67. package/dist/{chunk-EH3464KF.cjs → chunk-YBDSTNMH.cjs} +1 -1
  68. package/dist/{chunk-VLPII2JJ.mjs → chunk-YGZH4T2X.mjs} +1 -1
  69. package/dist/chunk-YKUEJ3MG.cjs +229 -0
  70. package/dist/{chunk-4C7KTKX7.mjs → chunk-ZYWJIPKQ.mjs} +1 -1
  71. package/dist/{client-plugins-CkYwvDJ0.d.mts → client-plugins-Cv0OJtnM.d.mts} +98 -7
  72. package/dist/{client-plugins-DfeKd0sD.d.ts → client-plugins-kwQuZcWq.d.ts} +98 -7
  73. package/dist/client-plugins.d.mts +1 -1
  74. package/dist/client-plugins.d.ts +1 -1
  75. package/dist/client.cjs +4 -3
  76. package/dist/client.d.mts +5 -5
  77. package/dist/client.d.ts +5 -5
  78. package/dist/client.mjs +3 -2
  79. package/dist/config.d.mts +1 -1
  80. package/dist/config.d.ts +1 -1
  81. package/dist/{devtools-N3QLRIQU.mjs → devtools-M22FEFPK.mjs} +4 -4
  82. package/dist/{devtools-2YHAJYH6.cjs → devtools-MLB3JJMC.cjs} +5 -5
  83. package/dist/docs.cjs +6 -6
  84. package/dist/docs.d.mts +2 -2
  85. package/dist/docs.d.ts +2 -2
  86. package/dist/docs.mjs +5 -5
  87. package/dist/index-CQOp8EmB.d.mts +48 -0
  88. package/dist/index-DAl0QTZS.d.ts +48 -0
  89. package/dist/index.cjs +41 -24
  90. package/dist/index.d.mts +15 -14
  91. package/dist/index.d.ts +15 -14
  92. package/dist/index.mjs +46 -29
  93. package/dist/integrations.d.mts +1 -1
  94. package/dist/integrations.d.ts +1 -1
  95. package/dist/internal/app-markdown-runtime.d.mts +2 -2
  96. package/dist/internal/app-markdown-runtime.d.ts +2 -2
  97. package/dist/internal/build-runtime.cjs +29 -15
  98. package/dist/internal/build-runtime.d.mts +12 -16
  99. package/dist/internal/build-runtime.d.ts +12 -16
  100. package/dist/internal/build-runtime.mjs +28 -14
  101. package/dist/internal/cli-runtime.cjs +23 -11
  102. package/dist/internal/cli-runtime.mjs +23 -11
  103. package/dist/internal/client-error-overlay.cjs +4 -4
  104. package/dist/internal/client-error-overlay.mjs +1 -1
  105. package/dist/internal/client-runtime.cjs +5 -1
  106. package/dist/internal/client-runtime.d.mts +1 -0
  107. package/dist/internal/client-runtime.d.ts +1 -0
  108. package/dist/internal/client-runtime.mjs +4 -0
  109. package/dist/internal/compression-runtime.d.mts +1 -1
  110. package/dist/internal/compression-runtime.d.ts +1 -1
  111. package/dist/internal/config-runtime.cjs +5 -5
  112. package/dist/internal/config-runtime.d.mts +2 -2
  113. package/dist/internal/config-runtime.d.ts +2 -2
  114. package/dist/internal/config-runtime.mjs +4 -4
  115. package/dist/internal/form-actions-client.cjs +18 -0
  116. package/dist/internal/form-actions-client.d.mts +5 -0
  117. package/dist/internal/form-actions-client.d.ts +5 -0
  118. package/dist/internal/form-actions-client.mjs +18 -0
  119. package/dist/internal/form-actions.cjs +18 -0
  120. package/dist/internal/form-actions.d.mts +14 -0
  121. package/dist/internal/form-actions.d.ts +14 -0
  122. package/dist/internal/form-actions.mjs +18 -0
  123. package/dist/internal/island-codec.cjs +22 -0
  124. package/dist/internal/island-codec.d.mts +29 -0
  125. package/dist/internal/island-codec.d.ts +29 -0
  126. package/dist/internal/island-codec.mjs +22 -0
  127. package/dist/internal/island-value-store.cjs +13 -0
  128. package/dist/internal/island-value-store.d.mts +6 -0
  129. package/dist/internal/island-value-store.d.ts +6 -0
  130. package/dist/internal/island-value-store.mjs +13 -0
  131. package/dist/internal/islands-runtime.cjs +77 -0
  132. package/dist/internal/islands-runtime.d.mts +57 -0
  133. package/dist/internal/islands-runtime.d.ts +57 -0
  134. package/dist/internal/islands-runtime.mjs +77 -0
  135. package/dist/internal/islands-server.cjs +19 -0
  136. package/dist/internal/islands-server.d.mts +3 -0
  137. package/dist/internal/islands-server.d.ts +3 -0
  138. package/dist/internal/islands-server.mjs +19 -0
  139. package/dist/internal/islx-client.cjs +5 -0
  140. package/dist/internal/islx-client.d.mts +2 -0
  141. package/dist/internal/islx-client.d.ts +2 -0
  142. package/dist/internal/islx-client.mjs +3 -0
  143. package/dist/internal/islx-react.cjs +4 -0
  144. package/dist/internal/islx-react.d.mts +1 -0
  145. package/dist/internal/islx-react.d.ts +1 -0
  146. package/dist/internal/islx-react.mjs +2 -0
  147. package/dist/internal/islx-server.cjs +5 -0
  148. package/dist/internal/islx-server.d.mts +2 -0
  149. package/dist/internal/islx-server.d.ts +2 -0
  150. package/dist/internal/islx-server.mjs +3 -0
  151. package/dist/internal/isolated-boundary.cjs +4 -3
  152. package/dist/internal/isolated-boundary.d.mts +13 -1
  153. package/dist/internal/isolated-boundary.d.ts +13 -1
  154. package/dist/internal/isolated-boundary.mjs +3 -2
  155. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  156. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  157. package/dist/internal/production-runtime.cjs +24 -7
  158. package/dist/internal/production-runtime.d.mts +20 -127
  159. package/dist/internal/production-runtime.d.ts +20 -127
  160. package/dist/internal/production-runtime.mjs +24 -7
  161. package/dist/internal/server-tree.cjs +6 -3
  162. package/dist/internal/server-tree.d.mts +25 -2
  163. package/dist/internal/server-tree.d.ts +25 -2
  164. package/dist/internal/server-tree.mjs +7 -4
  165. package/dist/island-value-protocol-BRayRghM.d.mts +12 -0
  166. package/dist/island-value-protocol-BRayRghM.d.ts +12 -0
  167. package/dist/markdown.d.mts +1 -1
  168. package/dist/markdown.d.ts +1 -1
  169. package/dist/middleware.d.mts +3 -3
  170. package/dist/middleware.d.ts +3 -3
  171. package/dist/navigation.cjs +5 -4
  172. package/dist/navigation.d.mts +4 -4
  173. package/dist/navigation.d.ts +4 -4
  174. package/dist/navigation.mjs +4 -3
  175. package/dist/og.d.mts +5 -0
  176. package/dist/og.d.ts +5 -0
  177. package/dist/plugin.cjs +18 -12
  178. package/dist/plugin.d.mts +3 -3
  179. package/dist/plugin.d.ts +3 -3
  180. package/dist/plugin.mjs +17 -11
  181. package/dist/{production-runtime-DFC7pgbp.d.ts → production-runtime-5nArjFpn.d.ts} +1 -1
  182. package/dist/{production-runtime-BTkXQdYy.d.mts → production-runtime-BzsF2z5F.d.mts} +1 -1
  183. package/dist/query/client.cjs +6 -5
  184. package/dist/query/client.mjs +2 -1
  185. package/dist/{render-plan-5rFeWmk7.d.mts → render-plan-B9yQorV4.d.mts} +4 -2
  186. package/dist/{render-plan-BoAK9xFC.d.ts → render-plan-fg6E_HvL.d.ts} +4 -2
  187. package/dist/renderer/react/server.cjs +7 -6
  188. package/dist/renderer/react/server.d.mts +3 -1
  189. package/dist/renderer/react/server.d.ts +3 -1
  190. package/dist/renderer/react/server.mjs +5 -4
  191. package/dist/renderer-client.cjs +5 -4
  192. package/dist/renderer-client.d.mts +3 -3
  193. package/dist/renderer-client.d.ts +3 -3
  194. package/dist/renderer-client.mjs +2 -1
  195. package/dist/renderer.d.mts +3 -1
  196. package/dist/renderer.d.ts +3 -1
  197. package/dist/{request-BxBWigtl.d.mts → request-C4j_g-BH.d.mts} +1 -1
  198. package/dist/{request-fciwmd3n.d.ts → request-gz8vFK0n.d.ts} +1 -1
  199. package/dist/request.d.mts +2 -2
  200. package/dist/request.d.ts +2 -2
  201. package/dist/{route-rendering-BLZT0IP0.d.ts → route-rendering-DamyKVi3.d.ts} +1 -1
  202. package/dist/{route-rendering-BCM1QzEf.d.mts → route-rendering-iTTOwz1f.d.mts} +1 -1
  203. package/dist/{router-DyZJWc1_.d.mts → router-EoSzHlos.d.mts} +1 -1
  204. package/dist/{router-CkheNX3-.d.ts → router-OVjDqVo8.d.ts} +1 -1
  205. package/dist/routes.d.mts +1 -1
  206. package/dist/routes.d.ts +1 -1
  207. package/dist/rsc-pipeline-LK4K5JFK.mjs +77 -0
  208. package/dist/rsc-pipeline-YCDRJME4.cjs +77 -0
  209. package/dist/{runtime-DfU4sKa5.d.ts → runtime-CwiuozLd.d.ts} +1 -1
  210. package/dist/{runtime-wexvUN5J.d.mts → runtime-DDH4tiuF.d.mts} +1 -1
  211. package/dist/{schema-dev-notice-5JPE67AI.cjs → schema-dev-notice-77ZL23PL.cjs} +4 -4
  212. package/dist/{schema-dev-notice-WLPZ6WKU.mjs → schema-dev-notice-BLXOS6U2.mjs} +2 -2
  213. package/dist/server-plugins.d.mts +2 -2
  214. package/dist/server-plugins.d.ts +2 -2
  215. package/dist/server.cjs +56 -38
  216. package/dist/server.d.mts +15 -10
  217. package/dist/server.d.ts +15 -10
  218. package/dist/server.mjs +36 -18
  219. package/dist/{spa-router-DgsMXqfX.d.mts → spa-router-Br4qFCWf.d.mts} +8 -3
  220. package/dist/{spa-router-CcejECnG.d.ts → spa-router-BsWUKH73.d.ts} +8 -3
  221. package/dist/{ssg-1FGaFISl.d.ts → ssg-Csy2vwpi.d.ts} +2 -2
  222. package/dist/{ssg-Bg4bMMhM.d.mts → ssg-Donyfcxy.d.mts} +2 -2
  223. package/dist/testing.d.mts +1 -1
  224. package/dist/testing.d.ts +1 -1
  225. package/dist/{utils-Dxbh6Hgj.d.ts → utils-Luk72LXC.d.ts} +1 -1
  226. package/dist/{utils-8wtTYiH4.d.mts → utils-d_k1ZZw0.d.mts} +1 -1
  227. package/dist/version.cjs +2 -2
  228. package/dist/version.mjs +1 -1
  229. package/dist/vite.cjs +18 -12
  230. package/dist/vite.d.mts +6 -4
  231. package/dist/vite.d.ts +6 -4
  232. package/dist/vite.mjs +17 -11
  233. package/package.json +53 -1
  234. package/dist/{chunk-35WS7P2V.mjs → chunk-26CXZR6L.mjs} +3 -3
  235. package/dist/{chunk-QEILRWVV.cjs → chunk-3XEMGDBF.cjs} +2 -2
  236. package/dist/{chunk-BPOTSHDO.cjs → chunk-IOAUK4OI.cjs} +2 -2
  237. package/dist/{chunk-BYR3RQPB.mjs → chunk-T76H22WI.mjs} +4 -4
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
  var _chunkUXHS27O6cjs = require('./chunk-UXHS27O6.cjs');
4
4
 
@@ -58,8 +58,10 @@ var _chunkNO3WWW3Ncjs = require('./chunk-NO3WWW3N.cjs');
58
58
  var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
59
59
 
60
60
  // src/api/vite-plugin.ts
61
+ var _path = require('path'); var _path2 = _interopRequireDefault(_path);
61
62
  function farmApiPlugin(options = {}) {
62
63
  const srcDir = _nullishCoalesce(options.srcDir, () => ( "src"));
64
+ const apiDirFromRoot = _nullishCoalesce(options.apiDir, () => ( _path2.default.join(srcDir, "api")));
63
65
  const debug = _nullishCoalesce(options.debug, () => ( false));
64
66
  const bodySizeLimit = _chunk5NAVKJCZcjs.resolveFarmServerConfig.call(void 0, {
65
67
  bodySizeLimit: options.bodySizeLimit
@@ -356,7 +358,7 @@ function farmApiPlugin(options = {}) {
356
358
  }, "discoverProgrammaticRoutes");
357
359
  const initializeDiscovery = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, async () => {
358
360
  const path = await import("path");
359
- const apiDir = path.join(server.config.root, srcDir, "api");
361
+ const apiDir = path.join(server.config.root, apiDirFromRoot);
360
362
  log(`Discovering API routes in: ${apiDir}`);
361
363
  await discoverFileRoutes(apiDir);
362
364
  await discoverRootRoutes();
@@ -541,7 +543,7 @@ function farmApiPlugin(options = {}) {
541
543
  const previousState = snapshotRouteState();
542
544
  try {
543
545
  const path = await import("path");
544
- const apiDir = path.join(server.config.root, srcDir, "api");
546
+ const apiDir = path.join(server.config.root, apiDirFromRoot);
545
547
  const relativePath = path.relative(apiDir, path.dirname(file));
546
548
  const routePath = "/api/" + (relativePath === "." ? "" : relativePath.replace(/\\/g, "/"));
547
549
  const fs = await import("fs");
@@ -6,6 +6,9 @@ var _chunkBMOBTMDRcjs = require('./chunk-BMOBTMDR.cjs');
6
6
  var _chunkOWOUTKIJcjs = require('./chunk-OWOUTKIJ.cjs');
7
7
 
8
8
 
9
+ var _chunkJAXDRRRCcjs = require('./chunk-JAXDRRRC.cjs');
10
+
11
+
9
12
  var _chunkD5IHNDHIcjs = require('./chunk-D5IHNDHI.cjs');
10
13
 
11
14
 
@@ -42,7 +45,7 @@ var _chunkKNBBQHO2cjs = require('./chunk-KNBBQHO2.cjs');
42
45
  var _chunk5NAVKJCZcjs = require('./chunk-5NAVKJCZ.cjs');
43
46
 
44
47
 
45
- var _chunkEH3464KFcjs = require('./chunk-EH3464KF.cjs');
48
+ var _chunkYBDSTNMHcjs = require('./chunk-YBDSTNMH.cjs');
46
49
 
47
50
 
48
51
  var _chunkBIDYX3SLcjs = require('./chunk-BIDYX3SL.cjs');
@@ -53,6 +56,56 @@ var _chunkI57LW5VZcjs = require('./chunk-I57LW5VZ.cjs');
53
56
 
54
57
  var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
55
58
 
59
+ // src/navigation/render-plan.ts
60
+ function createFarmRouteRenderPlan(input = {}) {
61
+ const pageShouldHydrate = input.pageShouldHydrate === true;
62
+ const layoutShouldHydrate = input.layoutShouldHydrate === true;
63
+ const hydration = pageShouldHydrate ? layoutShouldHydrate ? "route-and-layout-islands" : "route-island" : layoutShouldHydrate ? "layout-island" : "none";
64
+ const rendering = input.rendering;
65
+ const cache = _optionalChain([rendering, 'optionalAccess', _ => _.ssg]) ? typeof rendering.revalidate === "number" && rendering.revalidate > 0 ? { mode: "revalidate", revalidate: rendering.revalidate } : { mode: "static" } : { mode: "dynamic" };
66
+ return {
67
+ version: 1,
68
+ output: "html",
69
+ navigation: "html-fragment",
70
+ hydration,
71
+ islandStrategy: hydration === "none" ? null : _nullishCoalesce(input.islandStrategy, () => ( "load")),
72
+ cache
73
+ };
74
+ }
75
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmRouteRenderPlan, "createFarmRouteRenderPlan");
76
+ function getFarmFragmentCacheControl(plan) {
77
+ if (plan.cache.mode === "static") {
78
+ return "public, max-age=0, s-maxage=31536000, immutable";
79
+ }
80
+ if (plan.cache.mode === "revalidate") {
81
+ const seconds = Math.max(1, _nullishCoalesce(plan.cache.revalidate, () => ( 1)));
82
+ return `public, max-age=0, s-maxage=${seconds}, stale-while-revalidate=${seconds}`;
83
+ }
84
+ return "private, max-age=0";
85
+ }
86
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmFragmentCacheControl, "getFarmFragmentCacheControl");
87
+ function parseFarmLayoutChainHeader(value) {
88
+ if (!value || value.length > 8192) return [];
89
+ try {
90
+ const parsed = JSON.parse(value);
91
+ if (!Array.isArray(parsed) || parsed.length > 64) return [];
92
+ return parsed.filter(
93
+ (pattern) => typeof pattern === "string" && pattern.startsWith("/") && pattern.length <= 512
94
+ );
95
+ } catch (e) {
96
+ return [];
97
+ }
98
+ }
99
+ _chunkS3JO3N4Hcjs.__name.call(void 0, parseFarmLayoutChainHeader, "parseFarmLayoutChainHeader");
100
+ function getSharedLayoutPrefixLength(current, next) {
101
+ let index = 0;
102
+ while (index < current.length && index < next.length && current[index] === next[index]) {
103
+ index++;
104
+ }
105
+ return index;
106
+ }
107
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getSharedLayoutPrefixLength, "getSharedLayoutPrefixLength");
108
+
56
109
  // src/routing/route-groups.ts
57
110
  function isRouteGroupSegment(part) {
58
111
  return part.startsWith("(") && part.endsWith(")");
@@ -185,12 +238,12 @@ function removeFarmDocumentTitles(markup) {
185
238
  }
186
239
  _chunkS3JO3N4Hcjs.__name.call(void 0, removeFarmDocumentTitles, "removeFarmDocumentTitles");
187
240
  function ensureFarmDocumentMeta(markup, viewport = "") {
188
- const head = _nullishCoalesce(_optionalChain([/<head\b[^>]*>([\s\S]*?)<\/head>/i, 'access', _ => _.exec, 'call', _2 => _2(markup), 'optionalAccess', _3 => _3[1]]), () => ( ""));
241
+ const head = _nullishCoalesce(_optionalChain([/<head\b[^>]*>([\s\S]*?)<\/head>/i, 'access', _2 => _2.exec, 'call', _3 => _3(markup), 'optionalAccess', _4 => _4[1]]), () => ( ""));
189
242
  const hasNamedMeta = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (name) => new RegExp(`<meta\\b[^>]*\\bname=["']?${name}(?=["'\\s/>])`, "i").test(head), "hasNamedMeta");
190
243
  const tags = [
191
244
  /<meta\b[^>]*\bcharset\s*=/i.test(head) ? "" : '<meta charset="utf-8">',
192
245
  ...(_nullishCoalesce(viewport.match(/<meta\b[^>]*>/gi), () => ( []))).filter((tag) => {
193
- const name = _optionalChain([/\bname="([\w-]+)"/, 'access', _4 => _4.exec, 'call', _5 => _5(tag), 'optionalAccess', _6 => _6[1]]);
246
+ const name = _optionalChain([/\bname="([\w-]+)"/, 'access', _5 => _5.exec, 'call', _6 => _6(tag), 'optionalAccess', _7 => _7[1]]);
194
247
  return !name || !hasNamedMeta(name);
195
248
  })
196
249
  ].filter(Boolean);
@@ -314,7 +367,7 @@ function resolveAlternateBase(options) {
314
367
  try {
315
368
  const url = new URL(candidate);
316
369
  if (url.protocol === "http:" || url.protocol === "https:") return url;
317
- } catch (e) {
370
+ } catch (e2) {
318
371
  }
319
372
  }
320
373
  return void 0;
@@ -341,7 +394,7 @@ function isLateRedirectTarget(url) {
341
394
  try {
342
395
  const protocol = new URL(url, "https://farm.invalid").protocol;
343
396
  return protocol === "http:" || protocol === "https:";
344
- } catch (e2) {
397
+ } catch (e3) {
345
398
  return false;
346
399
  }
347
400
  }
@@ -398,7 +451,7 @@ function serializeSitemap(value) {
398
451
  return candidate;
399
452
  });
400
453
  const hasLanguageAlternates = entries.some(
401
- (entry) => _optionalChain([entry, 'access', _7 => _7.alternates, 'optionalAccess', _8 => _8.languages]) && Object.keys(entry.alternates.languages).length > 0
454
+ (entry) => _optionalChain([entry, 'access', _8 => _8.alternates, 'optionalAccess', _9 => _9.languages]) && Object.keys(entry.alternates.languages).length > 0
402
455
  );
403
456
  const namespace = hasLanguageAlternates ? ' xmlns:xhtml="http://www.w3.org/1999/xhtml"' : "";
404
457
  const lines = [
@@ -417,7 +470,7 @@ function serializeSitemap(value) {
417
470
  if (entry.priority !== void 0) {
418
471
  lines.push(` <priority>${escapeXml(entry.priority)}</priority>`);
419
472
  }
420
- for (const [language, href] of Object.entries(_optionalChain([entry, 'access', _9 => _9.alternates, 'optionalAccess', _10 => _10.languages]) || {})) {
473
+ for (const [language, href] of Object.entries(_optionalChain([entry, 'access', _10 => _10.alternates, 'optionalAccess', _11 => _11.languages]) || {})) {
421
474
  lines.push(
422
475
  ` <xhtml:link rel="alternate" hreflang="${escapeXml(language)}" href="${escapeXml(href)}" />`
423
476
  );
@@ -513,7 +566,7 @@ function listFarmMCPServerSources(input) {
513
566
  if (sources.has(endpoint)) continue;
514
567
  sources.set(endpoint, {
515
568
  ...server,
516
- protocolVersions: _optionalChain([details, 'optionalAccess', _11 => _11.protocolVersions]),
569
+ protocolVersions: _optionalChain([details, 'optionalAccess', _12 => _12.protocolVersions]),
517
570
  endpoint,
518
571
  local: true
519
572
  });
@@ -543,7 +596,7 @@ function listFarmMCPServerCards(origin, input = {}) {
543
596
  const endpointUrl = server.local ? `${origin}${server.endpoint}` : server.endpoint;
544
597
  const cardPath = server.local ? serverCardLocation(server.endpoint) : void 0;
545
598
  const slug = cardSlug(server.name);
546
- const description = truncate(_optionalChain([server, 'access', _12 => _12.description, 'optionalAccess', _13 => _13.trim, 'call', _14 => _14()]) || `MCP server for ${host}`);
599
+ const description = truncate(_optionalChain([server, 'access', _13 => _13.description, 'optionalAccess', _14 => _14.trim, 'call', _15 => _15()]) || `MCP server for ${host}`);
547
600
  const card = {
548
601
  $schema: SERVER_CARD_SCHEMA,
549
602
  // The card's name is reverse-DNS; a plain server name is namespaced by the host.
@@ -556,7 +609,7 @@ function listFarmMCPServerCards(origin, input = {}) {
556
609
  {
557
610
  type: "streamable-http",
558
611
  url: endpointUrl,
559
- ..._optionalChain([server, 'access', _15 => _15.protocolVersions, 'optionalAccess', _16 => _16.length]) ? { supportedProtocolVersions: [...server.protocolVersions] } : {}
612
+ ..._optionalChain([server, 'access', _16 => _16.protocolVersions, 'optionalAccess', _17 => _17.length]) ? { supportedProtocolVersions: [...server.protocolVersions] } : {}
560
613
  }
561
614
  ]
562
615
  };
@@ -596,7 +649,7 @@ function createFarmAiCatalogResponse(request, input = {}, requestUrl) {
596
649
  let url;
597
650
  try {
598
651
  url = _nullishCoalesce(requestUrl, () => ( new URL(request.url)));
599
- } catch (e3) {
652
+ } catch (e4) {
600
653
  return null;
601
654
  }
602
655
  const { pathname } = url;
@@ -900,8 +953,8 @@ function resolveFarmApiCatalogInput(config) {
900
953
  const mcp = config.mcp && config.mcp.enabled !== false ? config.mcp : void 0;
901
954
  return {
902
955
  basePath: config.basePath,
903
- apiBaseURL: _nullishCoalesce(_optionalChain([config, 'access', _17 => _17.openapi, 'optionalAccess', _18 => _18.servers, 'optionalAccess', _19 => _19[0], 'optionalAccess', _20 => _20.url]), () => ( config.api.baseURL)),
904
- openapi: _optionalChain([config, 'access', _21 => _21.openapi, 'optionalAccess', _22 => _22.enabled]) ? { specRoute: config.openapi.specRoute, route: config.openapi.route } : void 0,
956
+ apiBaseURL: _nullishCoalesce(_optionalChain([config, 'access', _18 => _18.openapi, 'optionalAccess', _19 => _19.servers, 'optionalAccess', _20 => _20[0], 'optionalAccess', _21 => _21.url]), () => ( config.api.baseURL)),
957
+ openapi: _optionalChain([config, 'access', _22 => _22.openapi, 'optionalAccess', _23 => _23.enabled]) ? { specRoute: config.openapi.specRoute, route: config.openapi.route } : void 0,
905
958
  mcpPath: mcp ? _chunkKNBBQHO2cjs.resolveFarmAPIServerRoutePath.call(void 0,
906
959
  _nullishCoalesce(mcp.path, () => ( "/api/mcp")),
907
960
  _chunkKNBBQHO2cjs.resolveFarmAPIServerBasePath.call(void 0, config.api)
@@ -913,8 +966,8 @@ function createFarmApiCatalog(input) {
913
966
  const appPath = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (path) => _chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, path, input.basePath), "appPath");
914
967
  const items = [];
915
968
  const contexts = [];
916
- const specRoute = _optionalChain([input, 'access', _23 => _23.openapi, 'optionalAccess', _24 => _24.specRoute]);
917
- const reference = _optionalChain([input, 'access', _25 => _25.openapi, 'optionalAccess', _26 => _26.route]);
969
+ const specRoute = _optionalChain([input, 'access', _24 => _24.openapi, 'optionalAccess', _25 => _25.specRoute]);
970
+ const reference = _optionalChain([input, 'access', _26 => _26.openapi, 'optionalAccess', _27 => _27.route]);
918
971
  if (specRoute || reference) {
919
972
  const api = { anchor: input.apiBaseURL };
920
973
  if (specRoute) {
@@ -961,30 +1014,28 @@ function isFarmAppManifestPath(pathname) {
961
1014
  return pathname === FARM_APP_MANIFEST_PATH || pathname === FARM_APP_MANIFEST_LEGACY_PATH;
962
1015
  }
963
1016
  _chunkS3JO3N4Hcjs.__name.call(void 0, isFarmAppManifestPath, "isFarmAppManifestPath");
964
- var FARM_INFRA_SIGNATURE_HEADER = "farmjs-infra-signature";
965
- var SIGNED_PURPOSE = "farmjs-manifest-v1";
966
- var SIGNATURE_WINDOW_SECONDS = 300;
967
1017
  function resolveFarmAppManifestInput(config, extra) {
968
- const llms = _optionalChain([config, 'access', _27 => _27.agent, 'optionalAccess', _28 => _28.llmsTxt]);
1018
+ const llms = _optionalChain([config, 'access', _28 => _28.agent, 'optionalAccess', _29 => _29.llmsTxt]);
969
1019
  const plugins = (_nullishCoalesce(config.plugins, () => ( []))).map(({ name }) => name);
970
1020
  const webmcp = plugins.includes("farm:webmcp");
1021
+ const sections = _chunkJAXDRRRCcjs.resolveFarmAppManifestConfig.call(void 0, _optionalChain([config, 'access', _30 => _30.agent, 'optionalAccess', _31 => _31.manifest]));
971
1022
  return {
972
- renderer: _nullishCoalesce(_optionalChain([config, 'access', _29 => _29.renderer, 'optionalAccess', _30 => _30.name]), () => ( "react")),
1023
+ renderer: _nullishCoalesce(_optionalChain([config, 'access', _32 => _32.renderer, 'optionalAccess', _33 => _33.name]), () => ( "react")),
973
1024
  basePath: config.basePath || "/",
974
1025
  build: extra.build,
975
1026
  packages: extra.packages,
976
1027
  webmcp: { enabled: webmcp, tools: webmcp ? _nullishCoalesce(extra.webmcpTools, () => ( [])) : [] },
977
1028
  integrations: Object.entries(_nullishCoalesce(config.integrations, () => ( {}))).flatMap(([key, integration]) => {
978
- const category = _nullishCoalesce(_optionalChain([integration, 'optionalAccess', _31 => _31.category]), () => ( _optionalChain([integration, 'optionalAccess', _32 => _32.slot])));
1029
+ const category = _nullishCoalesce(_optionalChain([integration, 'optionalAccess', _34 => _34.category]), () => ( _optionalChain([integration, 'optionalAccess', _35 => _35.slot])));
979
1030
  return integration && category && integration.type ? [{ key, category, type: integration.type }] : [];
980
1031
  }),
981
1032
  agent: {
982
- apiCatalog: _optionalChain([config, 'access', _33 => _33.agent, 'optionalAccess', _34 => _34.apiCatalog]) ? "/.well-known/api-catalog" : null,
1033
+ apiCatalog: _optionalChain([config, 'access', _36 => _36.agent, 'optionalAccess', _37 => _37.apiCatalog]) ? "/.well-known/api-catalog" : null,
983
1034
  llmsTxt: llms === true || typeof llms === "object" && llms !== null && llms.enabled !== false,
984
- openapi: _optionalChain([config, 'access', _35 => _35.openapi, 'optionalAccess', _36 => _36.enabled]) && config.openapi.specRoute ? config.openapi.specRoute : null
1035
+ openapi: _optionalChain([config, 'access', _38 => _38.openapi, 'optionalAccess', _39 => _39.enabled]) && config.openapi.specRoute ? config.openapi.specRoute : null
985
1036
  },
986
1037
  plugins,
987
- analytics: config.analytics !== false
1038
+ ...sections ? { sections } : {}
988
1039
  };
989
1040
  }
990
1041
  _chunkS3JO3N4Hcjs.__name.call(void 0, resolveFarmAppManifestInput, "resolveFarmAppManifestInput");
@@ -993,58 +1044,73 @@ var SOURCES = {
993
1044
  standalone: "defineTool",
994
1045
  serverFunction: "serverFunction"
995
1046
  };
996
- function createFarmAppManifest(input, { full = false } = {}) {
997
- const manifest = {
1047
+ var DEFAULT_SECTIONS = _chunkJAXDRRRCcjs.resolveFarmAppManifestConfig.call(void 0, void 0);
1048
+ function createFarmAppManifest(input) {
1049
+ const sections = _nullishCoalesce(input.sections, () => ( DEFAULT_SECTIONS));
1050
+ const { app, mcp, webmcp } = sections;
1051
+ return {
998
1052
  schemaVersion: 1,
999
- app: {
1000
- farm: _chunkEH3464KFcjs.FARM_VERSION,
1001
- renderer: input.renderer,
1053
+ app: app ? {
1054
+ ...app.version ? { farm: _chunkYBDSTNMHcjs.FARM_VERSION } : {},
1055
+ ...app.renderer ? { renderer: input.renderer } : {},
1002
1056
  basePath: input.basePath,
1003
- build: input.build
1004
- },
1005
- packages: input.packages,
1006
- mcp: {
1007
- servers: _chunk75RZHGLScjs._listFarmMCPCatalogs.call(void 0, ).map(({ server, tools, details }) => {
1008
- const open = _optionalChain([details, 'optionalAccess', _37 => _37.public]) === true && !_optionalChain([input, 'access', _38 => _38.guardCoversPath, 'optionalCall', _39 => _39(server.path)]);
1009
- const listed = full || open;
1010
- return {
1011
- name: server.name,
1012
- version: server.version,
1013
- path: server.path,
1014
- authorization: open ? "none" : "required",
1015
- resources: listed ? [..._nullishCoalesce(_optionalChain([details, 'optionalAccess', _40 => _40.resources]), () => ( []))] : [],
1016
- prompts: listed ? [..._nullishCoalesce(_optionalChain([details, 'optionalAccess', _41 => _41.prompts]), () => ( []))] : [],
1017
- tools: (listed ? tools : []).map((tool) => {
1018
- const schemas = _optionalChain([details, 'optionalAccess', _42 => _42.schemas, 'optionalAccess', _43 => _43[tool.name]]);
1019
- const hints = Object.fromEntries(
1020
- ["readOnlyHint", "destructiveHint", "idempotentHint", "openWorldHint"].filter((hint) => typeof tool[hint] === "boolean").map((hint) => [hint, tool[hint]])
1021
- );
1022
- return {
1023
- name: tool.name,
1024
- ...tool.title ? { title: tool.title } : {},
1025
- ...tool.description ? { description: tool.description } : {},
1026
- source: SOURCES[tool.kind],
1027
- // MCP clients never see the route behind a tool; only Infra's view names it.
1028
- ...full && tool.kind === "endpoint" ? { method: tool.method, path: tool.path } : {},
1029
- ...hints,
1030
- ...schemas ? { inputSchema: schemas.input } : {},
1031
- ..._optionalChain([schemas, 'optionalAccess', _44 => _44.output]) ? { outputSchema: schemas.output } : {}
1032
- };
1033
- })
1034
- };
1035
- })
1036
- },
1037
- webmcp: input.webmcp,
1038
- integrations: input.integrations,
1039
- agent: input.agent,
1040
- plugins: input.plugins
1057
+ ...app.build ? { build: input.build } : {}
1058
+ } : null,
1059
+ packages: sections.packages === "names" ? Object.fromEntries(Object.keys(input.packages).map((name) => [name, null])) : sections.packages ? input.packages : null,
1060
+ mcp: mcp ? { servers: listServers(input, mcp) } : null,
1061
+ webmcp: webmcp ? {
1062
+ enabled: input.webmcp.enabled,
1063
+ tools: input.webmcp.tools.filter((tool) => !webmcp.hide.includes(tool.name))
1064
+ } : null,
1065
+ integrations: sections.integrations ? input.integrations : null,
1066
+ agent: sections.agent ? input.agent : null,
1067
+ plugins: sections.plugins ? input.plugins : null
1041
1068
  };
1042
- manifest.mcp.servers.push(...listDefaultServer(input));
1043
- return manifest;
1044
1069
  }
1045
1070
  _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmAppManifest, "createFarmAppManifest");
1071
+ function listServers(input, mcp) {
1072
+ const servers = _chunk75RZHGLScjs._listFarmMCPCatalogs.call(void 0, ).map(({ server, tools, details }) => {
1073
+ const open = _optionalChain([details, 'optionalAccess', _40 => _40.public]) === true && !_optionalChain([input, 'access', _41 => _41.guardCoversPath, 'optionalCall', _42 => _42(server.path)]);
1074
+ return {
1075
+ name: server.name,
1076
+ version: server.version,
1077
+ path: server.path,
1078
+ authorization: open ? "none" : "required",
1079
+ resources: open ? [..._nullishCoalesce(_optionalChain([details, 'optionalAccess', _43 => _43.resources]), () => ( []))] : [],
1080
+ prompts: open ? [..._nullishCoalesce(_optionalChain([details, 'optionalAccess', _44 => _44.prompts]), () => ( []))] : [],
1081
+ tools: (open ? tools : []).map((tool) => {
1082
+ const schemas = _optionalChain([details, 'optionalAccess', _45 => _45.schemas, 'optionalAccess', _46 => _46[tool.name]]);
1083
+ const hints = Object.fromEntries(
1084
+ ["readOnlyHint", "destructiveHint", "idempotentHint", "openWorldHint"].filter((hint) => typeof tool[hint] === "boolean").map((hint) => [hint, tool[hint]])
1085
+ );
1086
+ return {
1087
+ name: tool.name,
1088
+ ...tool.title ? { title: tool.title } : {},
1089
+ ...tool.description ? { description: tool.description } : {},
1090
+ source: SOURCES[tool.kind],
1091
+ ...hints,
1092
+ ...schemas ? { inputSchema: schemas.input } : {},
1093
+ ..._optionalChain([schemas, 'optionalAccess', _47 => _47.output]) ? { outputSchema: schemas.output } : {}
1094
+ };
1095
+ })
1096
+ };
1097
+ });
1098
+ return [...servers, ...listDefaultServer(input)].filter((server) => !mcp.hide.includes(server.name)).map((server) => ({
1099
+ ...server,
1100
+ tools: server.tools.filter((tool) => !mcp.hide.includes(`${server.name}/${tool.name}`)).map((tool) => mcp.schemas ? tool : withoutSchemas(tool))
1101
+ }));
1102
+ }
1103
+ _chunkS3JO3N4Hcjs.__name.call(void 0, listServers, "listServers");
1104
+ function withoutSchemas({
1105
+ inputSchema: _input,
1106
+ outputSchema: _output,
1107
+ ...tool
1108
+ }) {
1109
+ return tool;
1110
+ }
1111
+ _chunkS3JO3N4Hcjs.__name.call(void 0, withoutSchemas, "withoutSchemas");
1046
1112
  function listDefaultServer(input) {
1047
- const server = _optionalChain([input, 'access', _45 => _45.defaultMCP, 'optionalCall', _46 => _46()]);
1113
+ const server = _optionalChain([input, 'access', _48 => _48.defaultMCP, 'optionalCall', _49 => _49()]);
1048
1114
  if (!server) return [];
1049
1115
  return [
1050
1116
  {
@@ -1068,57 +1134,13 @@ function listDefaultServer(input) {
1068
1134
  ];
1069
1135
  }
1070
1136
  _chunkS3JO3N4Hcjs.__name.call(void 0, listDefaultServer, "listDefaultServer");
1071
- var encoder = new TextEncoder();
1072
- var hex = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (bytes) => [...new Uint8Array(bytes)].map((byte) => byte.toString(16).padStart(2, "0")).join(""), "hex");
1073
- async function sha256Hex(value) {
1074
- return hex(await crypto.subtle.digest("SHA-256", encoder.encode(value)));
1075
- }
1076
- _chunkS3JO3N4Hcjs.__name.call(void 0, sha256Hex, "sha256Hex");
1077
- async function hmacHex(secret, message) {
1078
- const key = await crypto.subtle.importKey(
1079
- "raw",
1080
- encoder.encode(secret),
1081
- { name: "HMAC", hash: "SHA-256" },
1082
- false,
1083
- ["sign"]
1084
- );
1085
- return hex(await crypto.subtle.sign("HMAC", key, encoder.encode(message)));
1086
- }
1087
- _chunkS3JO3N4Hcjs.__name.call(void 0, hmacHex, "hmacHex");
1088
- function sameHex(a, b) {
1089
- if (a.length !== b.length) return false;
1090
- let difference = 0;
1091
- for (let index = 0; index < a.length; index++)
1092
- difference |= a.charCodeAt(index) ^ b.charCodeAt(index);
1093
- return difference === 0;
1094
- }
1095
- _chunkS3JO3N4Hcjs.__name.call(void 0, sameHex, "sameHex");
1096
- async function verifyFarmInfraManifestSignature(header, key, now = Date.now()) {
1097
- if (!header || header.length > 2048) return false;
1098
- const parts = header.split(",").map((part) => part.trim());
1099
- const timestamp = Number(
1100
- _optionalChain([/^t=(\d{1,12})$/, 'access', _47 => _47.exec, 'call', _48 => _48(_nullishCoalesce(parts.find((part) => part.startsWith("t=")), () => ( ""))), 'optionalAccess', _49 => _49[1]])
1101
- );
1102
- if (!Number.isSafeInteger(timestamp)) return false;
1103
- if (Math.abs(now / 1e3 - timestamp) > SIGNATURE_WINDOW_SECONDS) return false;
1104
- const signatures = parts.filter((part) => part.startsWith("v1=")).map((part) => part.slice(3)).filter((value) => /^[0-9a-f]{64}$/.test(value));
1105
- if (!signatures.length || signatures.length > 8) return false;
1106
- const expected = await hmacHex(await sha256Hex(key), `${SIGNED_PURPOSE}
1107
- ${timestamp}`);
1108
- return signatures.some((signature) => sameHex(signature, expected));
1109
- }
1110
- _chunkS3JO3N4Hcjs.__name.call(void 0, verifyFarmInfraManifestSignature, "verifyFarmInfraManifestSignature");
1111
- function processEnv() {
1112
- return _nullishCoalesce(_optionalChain([globalThis, 'access', _50 => _50.process, 'optionalAccess', _51 => _51.env]), () => ( {}));
1113
- }
1114
- _chunkS3JO3N4Hcjs.__name.call(void 0, processEnv, "processEnv");
1115
1137
  var CORS_HEADERS = {
1116
1138
  "access-control-allow-origin": "*",
1117
1139
  "access-control-allow-methods": "GET, HEAD, OPTIONS",
1118
- "access-control-allow-headers": `If-None-Match, ${FARM_INFRA_SIGNATURE_HEADER}`,
1140
+ "access-control-allow-headers": "If-None-Match",
1119
1141
  "access-control-expose-headers": "ETag"
1120
1142
  };
1121
- async function createFarmAppManifestResponse(request, input, options = {}) {
1143
+ async function createFarmAppManifestResponse(request, input) {
1122
1144
  const method = request.method.toUpperCase();
1123
1145
  if (method === "OPTIONS") return new Response(null, { status: 204, headers: CORS_HEADERS });
1124
1146
  if (method !== "GET" && method !== "HEAD") {
@@ -1127,23 +1149,16 @@ async function createFarmAppManifestResponse(request, input, options = {}) {
1127
1149
  headers: { ...CORS_HEADERS, allow: "GET, HEAD, OPTIONS", "content-type": "text/plain" }
1128
1150
  });
1129
1151
  }
1130
- const signature = request.headers.get(FARM_INFRA_SIGNATURE_HEADER);
1131
- const key = input.analytics ? _optionalChain([(_nullishCoalesce(options.env, () => ( processEnv()))), 'access', _52 => _52.FARMJS_API_KEY, 'optionalAccess', _53 => _53.trim, 'call', _54 => _54()]) : void 0;
1132
- const full = Boolean(
1133
- signature && key && await verifyFarmInfraManifestSignature(signature, key)
1134
- );
1135
- const body = JSON.stringify(createFarmAppManifest(input, { full }));
1152
+ const body = JSON.stringify(createFarmAppManifest(input));
1136
1153
  const etag = _chunk5NAVKJCZcjs.createFarmWeakETag.call(void 0, body);
1137
1154
  const headers = {
1138
1155
  ...CORS_HEADERS,
1139
1156
  "content-type": "application/json; charset=utf-8",
1140
- // The full view is for Infra alone; shared caches keep the two views apart.
1141
- "cache-control": full ? "private, no-store" : "public, max-age=0, must-revalidate",
1142
- vary: FARM_INFRA_SIGNATURE_HEADER,
1157
+ "cache-control": "public, max-age=0, must-revalidate",
1143
1158
  etag,
1144
1159
  "x-content-type-options": "nosniff"
1145
1160
  };
1146
- if (!full && _chunk5NAVKJCZcjs.matchesFarmIfNoneMatch.call(void 0, request.headers.get("if-none-match"), etag)) {
1161
+ if (_chunk5NAVKJCZcjs.matchesFarmIfNoneMatch.call(void 0, request.headers.get("if-none-match"), etag)) {
1147
1162
  return new Response(null, { status: 304, headers });
1148
1163
  }
1149
1164
  return new Response(method === "HEAD" ? null : body, { status: 200, headers });
@@ -1189,4 +1204,7 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmAppManifestResponse, "createFarm
1189
1204
 
1190
1205
 
1191
1206
 
1192
- exports.formatRouteSegment = formatRouteSegment; exports.createRouteDirectoryPattern = createRouteDirectoryPattern; exports.stripRouteGroups = stripRouteGroups; exports.getRouteGroupScope = getRouteGroupScope; exports.isInRouteGroupScope = isInRouteGroupScope; exports.getRouteDirectoryDepth = getRouteDirectoryDepth; exports.routeBoundaryCoversDirectory = routeBoundaryCoversDirectory; exports.HOISTED_HEAD_ELEMENT = HOISTED_HEAD_ELEMENT; exports.extractFarmFullDocument = extractFarmFullDocument; exports.classifyFarmDocumentPrefix = classifyFarmDocumentPrefix; exports.removeFarmDocumentTitles = removeFarmDocumentTitles; exports.ensureFarmDocumentMeta = ensureFarmDocumentMeta; exports.composeFarmFullDocument = composeFarmFullDocument; exports.hasFarmMiddlewareConfig = hasFarmMiddlewareConfig; exports.configMiddlewareMayHandlePath = configMiddlewareMayHandlePath; exports.appMiddlewareMayHandlePath = appMiddlewareMayHandlePath; exports.farmPathGuardCoversPage = farmPathGuardCoversPage; exports.farmPathGuardCoversEndpoint = farmPathGuardCoversEndpoint; exports.renderFarmLocaleAlternateLinks = renderFarmLocaleAlternateLinks; exports.createLateRedirectRecovery = createLateRedirectRecovery; exports.createLateNotFoundRecovery = createLateNotFoundRecovery; exports.createFarmMetadataRouteResponse = createFarmMetadataRouteResponse; exports.listFarmMCPLlmsTxtLinks = listFarmMCPLlmsTxtLinks; exports.createFarmAiCatalogResponse = createFarmAiCatalogResponse; exports.resolveDefaultErrorStatus = resolveDefaultErrorStatus; exports.getDefaultErrorStatusText = getDefaultErrorStatusText; exports.createDefaultErrorMarkup = createDefaultErrorMarkup; exports.createFarmThemeDocumentParts = createFarmThemeDocumentParts; exports.applyFarmThemeDocument = applyFarmThemeDocument; exports.FARM_API_CATALOG_PATH = FARM_API_CATALOG_PATH; exports.resolveFarmApiCatalogInput = resolveFarmApiCatalogInput; exports.createFarmApiCatalogResponse = createFarmApiCatalogResponse; exports.FARM_APP_MANIFEST_PATH = FARM_APP_MANIFEST_PATH; exports.FARM_APP_MANIFEST_LEGACY_PATH = FARM_APP_MANIFEST_LEGACY_PATH; exports.isFarmAppManifestPath = isFarmAppManifestPath; exports.FARM_INFRA_SIGNATURE_HEADER = FARM_INFRA_SIGNATURE_HEADER; exports.resolveFarmAppManifestInput = resolveFarmAppManifestInput; exports.createFarmAppManifestResponse = createFarmAppManifestResponse;
1207
+
1208
+
1209
+
1210
+ exports.createFarmRouteRenderPlan = createFarmRouteRenderPlan; exports.getFarmFragmentCacheControl = getFarmFragmentCacheControl; exports.parseFarmLayoutChainHeader = parseFarmLayoutChainHeader; exports.getSharedLayoutPrefixLength = getSharedLayoutPrefixLength; exports.formatRouteSegment = formatRouteSegment; exports.createRouteDirectoryPattern = createRouteDirectoryPattern; exports.stripRouteGroups = stripRouteGroups; exports.getRouteGroupScope = getRouteGroupScope; exports.isInRouteGroupScope = isInRouteGroupScope; exports.getRouteDirectoryDepth = getRouteDirectoryDepth; exports.routeBoundaryCoversDirectory = routeBoundaryCoversDirectory; exports.HOISTED_HEAD_ELEMENT = HOISTED_HEAD_ELEMENT; exports.extractFarmFullDocument = extractFarmFullDocument; exports.classifyFarmDocumentPrefix = classifyFarmDocumentPrefix; exports.removeFarmDocumentTitles = removeFarmDocumentTitles; exports.ensureFarmDocumentMeta = ensureFarmDocumentMeta; exports.composeFarmFullDocument = composeFarmFullDocument; exports.hasFarmMiddlewareConfig = hasFarmMiddlewareConfig; exports.configMiddlewareMayHandlePath = configMiddlewareMayHandlePath; exports.appMiddlewareMayHandlePath = appMiddlewareMayHandlePath; exports.farmPathGuardCoversPage = farmPathGuardCoversPage; exports.farmPathGuardCoversEndpoint = farmPathGuardCoversEndpoint; exports.renderFarmLocaleAlternateLinks = renderFarmLocaleAlternateLinks; exports.createLateRedirectRecovery = createLateRedirectRecovery; exports.createLateNotFoundRecovery = createLateNotFoundRecovery; exports.createFarmMetadataRouteResponse = createFarmMetadataRouteResponse; exports.listFarmMCPLlmsTxtLinks = listFarmMCPLlmsTxtLinks; exports.createFarmAiCatalogResponse = createFarmAiCatalogResponse; exports.resolveDefaultErrorStatus = resolveDefaultErrorStatus; exports.getDefaultErrorStatusText = getDefaultErrorStatusText; exports.createDefaultErrorMarkup = createDefaultErrorMarkup; exports.createFarmThemeDocumentParts = createFarmThemeDocumentParts; exports.applyFarmThemeDocument = applyFarmThemeDocument; exports.FARM_API_CATALOG_PATH = FARM_API_CATALOG_PATH; exports.resolveFarmApiCatalogInput = resolveFarmApiCatalogInput; exports.createFarmApiCatalogResponse = createFarmApiCatalogResponse; exports.FARM_APP_MANIFEST_PATH = FARM_APP_MANIFEST_PATH; exports.FARM_APP_MANIFEST_LEGACY_PATH = FARM_APP_MANIFEST_LEGACY_PATH; exports.isFarmAppManifestPath = isFarmAppManifestPath; exports.resolveFarmAppManifestInput = resolveFarmAppManifestInput; exports.createFarmAppManifestResponse = createFarmAppManifestResponse;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  useRouter
3
- } from "./chunk-6PKXK4TY.mjs";
3
+ } from "./chunk-53ZV6K65.mjs";
4
4
  import {
5
5
  getRouter
6
- } from "./chunk-TS4JHGUJ.mjs";
6
+ } from "./chunk-S3ZEMCE6.mjs";
7
7
  import {
8
8
  applyFarmBasePath
9
9
  } from "./chunk-4RB44K6Z.mjs";
@@ -0,0 +1,57 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
4
+
5
+ // src/client/island-value-protocol.ts
6
+ var FARM_ISLAND_ELEMENT = "f-island";
7
+ var FARM_PROPS_SCRIPT_TYPE = "f/props";
8
+ var FARM_VALUE_SCRIPT_TYPE = "f/value";
9
+ var FARM_SLOT_ELEMENT = "f-slot";
10
+ var FARM_TAG = "$";
11
+ var FARM_TAG_VALUE = "v";
12
+ var FARM_REFERENCE_TAG = "r";
13
+ var FARM_SLOT_TAG = "s";
14
+ var FARM_ACTION_TAG = "a";
15
+ var FARM_OBJECT_TAG = "o";
16
+ var FARM_VALUES_HEADER = "F-Values";
17
+ function getFarmTag(value) {
18
+ if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
19
+ const tag = value[FARM_TAG];
20
+ if (typeof tag !== "string") return void 0;
21
+ const keys = Object.keys(value);
22
+ return keys.length === 1 || keys.length === 2 && FARM_TAG_VALUE in value ? tag : void 0;
23
+ }
24
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmTag, "getFarmTag");
25
+ var FARM_VALUE_KEY_PATTERN = /^[0-9a-z]{14}$/;
26
+ var FARM_MAX_HELD_VALUES = 128;
27
+ var FARM_ISLAND_VALUE_STORE_KEY = /* @__PURE__ */ Symbol.for("islx.values");
28
+ var ISLAND_VALUES_SERVER_KEY = /* @__PURE__ */ Symbol.for("farm.island-values.server");
29
+ function getFarmIslandValuesServer() {
30
+ return globalThis[ISLAND_VALUES_SERVER_KEY];
31
+ }
32
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmIslandValuesServer, "getFarmIslandValuesServer");
33
+ function getFarmIslandValueHeaders() {
34
+ const scope = globalThis;
35
+ const held = _optionalChain([scope, 'access', _ => _[FARM_ISLAND_VALUE_STORE_KEY], 'optionalAccess', _2 => _2.heldHeader, 'call', _3 => _3()]);
36
+ return held ? { [FARM_VALUES_HEADER]: held } : {};
37
+ }
38
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmIslandValueHeaders, "getFarmIslandValueHeaders");
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+ exports.FARM_ISLAND_ELEMENT = FARM_ISLAND_ELEMENT; exports.FARM_PROPS_SCRIPT_TYPE = FARM_PROPS_SCRIPT_TYPE; exports.FARM_VALUE_SCRIPT_TYPE = FARM_VALUE_SCRIPT_TYPE; exports.FARM_SLOT_ELEMENT = FARM_SLOT_ELEMENT; exports.FARM_TAG = FARM_TAG; exports.FARM_TAG_VALUE = FARM_TAG_VALUE; exports.FARM_REFERENCE_TAG = FARM_REFERENCE_TAG; exports.FARM_SLOT_TAG = FARM_SLOT_TAG; exports.FARM_ACTION_TAG = FARM_ACTION_TAG; exports.FARM_OBJECT_TAG = FARM_OBJECT_TAG; exports.FARM_VALUES_HEADER = FARM_VALUES_HEADER; exports.getFarmTag = getFarmTag; exports.FARM_VALUE_KEY_PATTERN = FARM_VALUE_KEY_PATTERN; exports.FARM_MAX_HELD_VALUES = FARM_MAX_HELD_VALUES; exports.getFarmIslandValuesServer = getFarmIslandValuesServer; exports.getFarmIslandValueHeaders = getFarmIslandValueHeaders;
@@ -11,7 +11,7 @@ var _chunkMY5PZYADcjs = require('./chunk-MY5PZYAD.cjs');
11
11
  var _chunkIK6LVLKCcjs = require('./chunk-IK6LVLKC.cjs');
12
12
 
13
13
 
14
- var _chunkEX4MKHXNcjs = require('./chunk-EX4MKHXN.cjs');
14
+ var _chunkLVABUXLAcjs = require('./chunk-LVABUXLA.cjs');
15
15
 
16
16
 
17
17
 
@@ -564,7 +564,7 @@ async function resolveAPIContext(options) {
564
564
  config: options.config,
565
565
  configPath: options.configPath
566
566
  }));
567
- const docs = isResolvedDocsConfig(docsInput) ? docsInput : await _chunkEX4MKHXNcjs.resolveDocsConfig.call(void 0, docsInput, { root, srcDir });
567
+ const docs = isResolvedDocsConfig(docsInput) ? docsInput : await _chunkLVABUXLAcjs.resolveDocsConfig.call(void 0, docsInput, { root, srcDir });
568
568
  const guardedPaths = new Set(_nullishCoalesce(_optionalChain([runtimeConfig, 'optionalAccess', _20 => _20.guardedPaths]), () => ( [])));
569
569
  return {
570
570
  root,
@@ -20,6 +20,9 @@ var _chunkJ7FSKED3cjs = require('./chunk-J7FSKED3.cjs');
20
20
  var _chunkLZESP4IRcjs = require('./chunk-LZESP4IR.cjs');
21
21
 
22
22
 
23
+ var _chunkH7BLEEAEcjs = require('./chunk-H7BLEEAE.cjs');
24
+
25
+
23
26
 
24
27
 
25
28
  var _chunkC5GUTBZKcjs = require('./chunk-C5GUTBZK.cjs');
@@ -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
  _chunkS6FJO323cjs._hydrateFarmI18n.call(void 0, 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
+ ..._chunkH7BLEEAEcjs.getFarmIslandValueHeaders.call(void 0, )
633
639
  })
634
640
  });
635
641
  if (_chunkC5GUTBZKcjs.isFarmDeploymentMismatchResponse.call(void 0, response, this.options.deploymentId)) {