@farm.js/core 0.1.37 → 0.1.39

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 (250) hide show
  1. package/dist/{agent-mcp-BC0bAGVF.d.mts → agent-mcp-BhneNPb4.d.mts} +1 -1
  2. package/dist/{agent-mcp-jyDHbQKe.d.ts → agent-mcp-HcTYQmNX.d.ts} +1 -1
  3. package/dist/{agent-mcp-handler-SJAHFSPI.cjs → agent-mcp-handler-MRGP3WJ3.cjs} +5 -5
  4. package/dist/{agent-mcp-handler-LPJ2CADR.mjs → agent-mcp-handler-OLRMZONF.mjs} +4 -4
  5. package/dist/agent-runtime.cjs +3 -3
  6. package/dist/agent-runtime.d.mts +1 -1
  7. package/dist/agent-runtime.d.ts +1 -1
  8. package/dist/agent-runtime.mjs +2 -2
  9. package/dist/api/client.cjs +3 -3
  10. package/dist/api/client.mjs +2 -2
  11. package/dist/api/route-manager.cjs +5 -5
  12. package/dist/api/route-manager.d.mts +3 -3
  13. package/dist/api/route-manager.d.ts +3 -3
  14. package/dist/api/route-manager.mjs +4 -4
  15. package/dist/api/runtime.cjs +4 -4
  16. package/dist/api/runtime.d.mts +2 -2
  17. package/dist/api/runtime.d.ts +2 -2
  18. package/dist/api/runtime.mjs +3 -3
  19. package/dist/api.cjs +7 -7
  20. package/dist/api.d.mts +3 -3
  21. package/dist/api.d.ts +3 -3
  22. package/dist/api.mjs +6 -6
  23. package/dist/{app-CKO3iN1c.d.ts → app-CMkoghtp.d.ts} +21 -3
  24. package/dist/{app-Cbkj9ufe.d.mts → app-DVzmmbNO.d.mts} +21 -3
  25. package/dist/app-markdown.cjs +4 -4
  26. package/dist/app-markdown.d.mts +2 -2
  27. package/dist/app-markdown.d.ts +2 -2
  28. package/dist/app-markdown.mjs +3 -3
  29. package/dist/chunk-2ZYGC6SS.cjs +576 -0
  30. package/dist/{chunk-75X755YZ.cjs → chunk-34UCJRQO.cjs} +2 -2
  31. package/dist/{chunk-CVH2BXPY.cjs → chunk-3LOLJTFV.cjs} +6 -6
  32. package/dist/{chunk-4GPOC4LN.cjs → chunk-472NCAZ7.cjs} +3 -3
  33. package/dist/{chunk-O6WAEAX3.mjs → chunk-5BWWFHR2.mjs} +70 -15
  34. package/dist/{chunk-6LGFV2CQ.cjs → chunk-5OKBARDN.cjs} +2 -2
  35. package/dist/{chunk-3IP27TCG.cjs → chunk-5PWXMJOH.cjs} +19 -19
  36. package/dist/{chunk-WT4TGLXT.cjs → chunk-5ULKUBIA.cjs} +6 -6
  37. package/dist/{chunk-WRPHYQVY.mjs → chunk-677THUVP.mjs} +1 -1
  38. package/dist/chunk-6BK3K2GB.mjs +318 -0
  39. package/dist/{chunk-HEVMCTSR.mjs → chunk-6HB6V3R7.mjs} +1 -1
  40. package/dist/{chunk-NICDYKBS.cjs → chunk-6XWDE2P2.cjs} +22 -4
  41. package/dist/{chunk-CXEN47J3.mjs → chunk-73WX6PRY.mjs} +25 -0
  42. package/dist/{chunk-EXG5LD6B.mjs → chunk-75HN5IZ3.mjs} +21 -9
  43. package/dist/{chunk-7O5M4UKW.cjs → chunk-A657YSP4.cjs} +2 -2
  44. package/dist/{chunk-LBDP3YT3.mjs → chunk-ARC7I3O2.mjs} +1 -1
  45. package/dist/{chunk-Q5FYSK45.cjs → chunk-AS2VPMEE.cjs} +640 -521
  46. package/dist/{chunk-Z5BEWYVO.mjs → chunk-ATSDUUFK.mjs} +27 -1
  47. package/dist/{chunk-EMMQ64QW.cjs → chunk-B5J2YVG7.cjs} +16 -16
  48. package/dist/{chunk-FWE7LEQC.cjs → chunk-BD3D7EZV.cjs} +4 -4
  49. package/dist/{chunk-Z7LA7MHQ.mjs → chunk-BFJTHYTN.mjs} +1 -1
  50. package/dist/{chunk-UJZLSXUB.cjs → chunk-BWIQR4DH.cjs} +30 -4
  51. package/dist/{chunk-W2YDNK66.cjs → chunk-BXDJXFQG.cjs} +4 -4
  52. package/dist/{chunk-MCIZVNOQ.mjs → chunk-BZHXGVMA.mjs} +1 -1
  53. package/dist/{chunk-7DWNJI73.cjs → chunk-CIOT4HGT.cjs} +37 -19
  54. package/dist/{chunk-KDTBF3UU.mjs → chunk-CNNOLE4O.mjs} +1 -1
  55. package/dist/{chunk-TDNWPAVR.mjs → chunk-CUM5NYL5.mjs} +1 -1
  56. package/dist/{chunk-HITLGIAO.cjs → chunk-CY2ZQ5C6.cjs} +7 -6
  57. package/dist/{chunk-KPFKMDM7.mjs → chunk-EGCTIS5F.mjs} +2 -2
  58. package/dist/{chunk-VR4GD5I3.cjs → chunk-EIPC3FDA.cjs} +12 -4
  59. package/dist/{chunk-B5PFZLKV.cjs → chunk-EKN7NSZO.cjs} +25 -8
  60. package/dist/{chunk-6SJ2KJTA.mjs → chunk-EPYU2EBL.mjs} +1 -1
  61. package/dist/{chunk-LBGILORX.mjs → chunk-GKBWWRBG.mjs} +101 -10
  62. package/dist/{chunk-PTZ2TVNE.cjs → chunk-H5CLOUZS.cjs} +5 -5
  63. package/dist/{chunk-DTSROJ5J.mjs → chunk-HD5CF3OE.mjs} +1 -1
  64. package/dist/{chunk-3A4KGQYI.cjs → chunk-HRETEZ2Z.cjs} +27 -15
  65. package/dist/{chunk-ATWHHSY2.cjs → chunk-HRSAQ23K.cjs} +7 -7
  66. package/dist/{chunk-IAIYV4RZ.mjs → chunk-HXRYZWTA.mjs} +1 -1
  67. package/dist/{chunk-4P6ULFMD.mjs → chunk-HYTZYOW2.mjs} +222 -103
  68. package/dist/{chunk-HMRSWN47.mjs → chunk-INL3THCU.mjs} +1 -1
  69. package/dist/{chunk-FBOJ55OM.mjs → chunk-IVLZZZEI.mjs} +1 -1
  70. package/dist/{chunk-ENLZ4R3Y.mjs → chunk-J7K2NZD6.mjs} +7 -6
  71. package/dist/{chunk-PMQHMWZU.cjs → chunk-JCYYXBAJ.cjs} +3 -3
  72. package/dist/{chunk-K3SAEIM3.mjs → chunk-KTSUBU2E.mjs} +2 -2
  73. package/dist/{chunk-LPFV45AY.cjs → chunk-LMPAPBUA.cjs} +19 -19
  74. package/dist/{chunk-EK4QAEFZ.cjs → chunk-LZESP4IR.cjs} +25 -0
  75. package/dist/{chunk-TW4GYDBJ.mjs → chunk-MLY2RP5R.mjs} +10 -2
  76. package/dist/{chunk-BHY547NB.cjs → chunk-NBBEQLOK.cjs} +9 -9
  77. package/dist/{chunk-WQ7T2263.mjs → chunk-OAHTRMIC.mjs} +3 -3
  78. package/dist/{chunk-HZFM2LWQ.mjs → chunk-P3PLW4FR.mjs} +34 -2
  79. package/dist/{chunk-UH6QN5NL.mjs → chunk-P664ZVTV.mjs} +2 -2
  80. package/dist/{chunk-TE2G5ION.cjs → chunk-PGZDEPTM.cjs} +88 -33
  81. package/dist/{chunk-3KGDJLJK.mjs → chunk-POSPE3IO.mjs} +19 -1
  82. package/dist/{chunk-FGRYBX5X.mjs → chunk-PVZE2JGJ.mjs} +2 -2
  83. package/dist/{chunk-TPLJVC7E.mjs → chunk-QFW2IH5E.mjs} +23 -6
  84. package/dist/{chunk-5BXGGEC7.cjs → chunk-QG775BRV.cjs} +17 -17
  85. package/dist/{chunk-S3VWVTVA.mjs → chunk-QRKIMN7T.mjs} +13 -1
  86. package/dist/chunk-QTXBII4Z.cjs +632 -0
  87. package/dist/{chunk-NQ6QFZWD.cjs → chunk-QUCXCDE2.cjs} +1 -1
  88. package/dist/{chunk-NFMDCAOS.mjs → chunk-QYMZOOC5.mjs} +3 -3
  89. package/dist/{chunk-CI6E3UOH.cjs → chunk-RG4A6LB2.cjs} +7 -7
  90. package/dist/{chunk-LOFKRKO7.cjs → chunk-RVXFINNS.cjs} +113 -22
  91. package/dist/{chunk-7SQ5SGYZ.cjs → chunk-RW63BOV7.cjs} +2 -2
  92. package/dist/{chunk-U6MPZ35Q.cjs → chunk-RWFLWR5J.cjs} +8 -8
  93. package/dist/{chunk-EUV4YR3V.cjs → chunk-SGBJ247Q.cjs} +18 -2
  94. package/dist/{chunk-J3ANCZKA.mjs → chunk-SKVTP5PR.mjs} +1 -1
  95. package/dist/{chunk-YCKO6FRS.mjs → chunk-SOP2EAA6.mjs} +1 -1
  96. package/dist/{chunk-ND2CWPOD.mjs → chunk-TS4JHGUJ.mjs} +1 -1
  97. package/dist/chunk-U6QLDL3G.mjs +576 -0
  98. package/dist/{chunk-OW67PDDS.cjs → chunk-ULASELLA.cjs} +13 -1
  99. package/dist/{chunk-4GWRFP22.cjs → chunk-UPJLHLJU.cjs} +35 -3
  100. package/dist/{chunk-WWIKMBRN.mjs → chunk-VNGH5MLF.mjs} +17 -1
  101. package/dist/{chunk-NNSAQX3U.mjs → chunk-VT4WFRHA.mjs} +1 -1
  102. package/dist/{chunk-JPNFPAZ4.mjs → chunk-VWBHM3F6.mjs} +2 -2
  103. package/dist/{chunk-ADOAUDQ6.cjs → chunk-VXEEATVD.cjs} +2 -2
  104. package/dist/{chunk-RRMVL6CJ.mjs → chunk-W36M2BQ4.mjs} +1 -1
  105. package/dist/{chunk-4WQ6PGSJ.cjs → chunk-WEW2JVA4.cjs} +4 -4
  106. package/dist/{chunk-4E5WBPEG.mjs → chunk-WFRT7JPX.mjs} +8 -533
  107. package/dist/{chunk-VXAWRDK7.mjs → chunk-WLL43JMO.mjs} +1 -1
  108. package/dist/chunk-WW46B6HA.cjs +318 -0
  109. package/dist/{chunk-D3C5LBQY.cjs → chunk-WXJLNP33.cjs} +2 -2
  110. package/dist/{chunk-NDILNQ4L.cjs → chunk-XKG2BLFN.cjs} +2 -2
  111. package/dist/{chunk-6TJITR2B.cjs → chunk-YFYUYWL7.cjs} +870 -751
  112. package/dist/{chunk-XOPOIFTJ.mjs → chunk-YKZRDB5Z.mjs} +25 -7
  113. package/dist/{chunk-K4I4O5TS.mjs → chunk-ZUPXLIGB.mjs} +790 -671
  114. package/dist/{chunk-G2TEB74S.cjs → chunk-ZXH4TS3F.cjs} +2 -2
  115. package/dist/{client-plugins-CV4eJ9De.d.mts → client-plugins-CsCuCLBz.d.mts} +58 -7
  116. package/dist/{client-plugins-C8DjftDF.d.ts → client-plugins-D0ke-Hc8.d.ts} +58 -7
  117. package/dist/client-plugins.d.mts +1 -1
  118. package/dist/client-plugins.d.ts +1 -1
  119. package/dist/client.cjs +7 -7
  120. package/dist/client.d.mts +5 -5
  121. package/dist/client.d.ts +5 -5
  122. package/dist/client.mjs +6 -6
  123. package/dist/config.d.mts +1 -1
  124. package/dist/config.d.ts +1 -1
  125. package/dist/{devtools-KVOY2TCZ.mjs → devtools-5AFIPVUJ.mjs} +8 -6
  126. package/dist/{devtools-JXFQNWSH.cjs → devtools-LW4QQ5J3.cjs} +9 -7
  127. package/dist/docs.cjs +12 -10
  128. package/dist/docs.d.mts +20 -2
  129. package/dist/docs.d.ts +20 -2
  130. package/dist/docs.mjs +11 -9
  131. package/dist/headers.cjs +6 -4
  132. package/dist/headers.d.mts +11 -1
  133. package/dist/headers.d.ts +11 -1
  134. package/dist/headers.mjs +5 -3
  135. package/dist/index.cjs +55 -42
  136. package/dist/index.d.mts +15 -15
  137. package/dist/index.d.ts +15 -15
  138. package/dist/index.mjs +55 -42
  139. package/dist/integrations.cjs +5 -3
  140. package/dist/integrations.d.mts +1 -1
  141. package/dist/integrations.d.ts +1 -1
  142. package/dist/integrations.mjs +4 -2
  143. package/dist/internal/app-markdown-runtime.cjs +3 -3
  144. package/dist/internal/app-markdown-runtime.d.mts +2 -2
  145. package/dist/internal/app-markdown-runtime.d.ts +2 -2
  146. package/dist/internal/app-markdown-runtime.mjs +2 -2
  147. package/dist/internal/build-runtime.cjs +30 -29
  148. package/dist/internal/build-runtime.d.mts +3 -3
  149. package/dist/internal/build-runtime.d.ts +3 -3
  150. package/dist/internal/build-runtime.mjs +29 -28
  151. package/dist/internal/cli-runtime.cjs +11 -9
  152. package/dist/internal/cli-runtime.mjs +10 -8
  153. package/dist/internal/client-error-overlay.cjs +4 -4
  154. package/dist/internal/client-error-overlay.mjs +1 -1
  155. package/dist/internal/compression-runtime.d.mts +1 -1
  156. package/dist/internal/compression-runtime.d.ts +1 -1
  157. package/dist/internal/config-runtime.cjs +9 -7
  158. package/dist/internal/config-runtime.d.mts +2 -2
  159. package/dist/internal/config-runtime.d.ts +2 -2
  160. package/dist/internal/config-runtime.mjs +8 -6
  161. package/dist/internal/docs-precompiled-runtime.cjs +19 -13
  162. package/dist/internal/docs-precompiled-runtime.d.mts +5 -0
  163. package/dist/internal/docs-precompiled-runtime.d.ts +5 -0
  164. package/dist/internal/docs-precompiled-runtime.mjs +14 -8
  165. package/dist/internal/infra-analytics-runtime.cjs +5 -5
  166. package/dist/internal/infra-analytics-runtime.mjs +3 -3
  167. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  168. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  169. package/dist/internal/production-node-env.cjs +6 -2
  170. package/dist/internal/production-node-env.d.mts +10 -1
  171. package/dist/internal/production-node-env.d.ts +10 -1
  172. package/dist/internal/production-node-env.mjs +5 -1
  173. package/dist/internal/production-runtime.cjs +38 -16
  174. package/dist/internal/production-runtime.d.mts +51 -11
  175. package/dist/internal/production-runtime.d.ts +51 -11
  176. package/dist/internal/production-runtime.mjs +40 -18
  177. package/dist/markdown.cjs +8 -2
  178. package/dist/markdown.d.mts +1 -1
  179. package/dist/markdown.d.ts +1 -1
  180. package/dist/markdown.mjs +7 -1
  181. package/dist/middleware.cjs +10 -8
  182. package/dist/middleware.d.mts +24 -4
  183. package/dist/middleware.d.ts +24 -4
  184. package/dist/middleware.mjs +10 -8
  185. package/dist/navigation.cjs +6 -6
  186. package/dist/navigation.d.mts +4 -4
  187. package/dist/navigation.d.ts +4 -4
  188. package/dist/navigation.mjs +5 -5
  189. package/dist/plugin.cjs +23 -22
  190. package/dist/plugin.d.mts +1 -1
  191. package/dist/plugin.d.ts +1 -1
  192. package/dist/plugin.mjs +22 -21
  193. package/dist/{production-runtime-C2kkrPVZ.d.ts → production-runtime-BaI3WHnV.d.ts} +1 -1
  194. package/dist/{production-runtime-Du_FHb2-.d.mts → production-runtime-DfRP0cV0.d.mts} +1 -1
  195. package/dist/query/client.cjs +8 -8
  196. package/dist/query/client.mjs +3 -3
  197. package/dist/{render-plan-BnnPTpus.d.ts → render-plan-CfIdJKAf.d.ts} +1 -1
  198. package/dist/{render-plan-Cgx7v8tJ.d.mts → render-plan-Dg8RBYFa.d.mts} +1 -1
  199. package/dist/renderer-client.cjs +5 -5
  200. package/dist/renderer-client.d.mts +3 -3
  201. package/dist/renderer-client.d.ts +3 -3
  202. package/dist/renderer-client.mjs +2 -2
  203. package/dist/renderer.d.mts +13 -4
  204. package/dist/renderer.d.ts +13 -4
  205. package/dist/{request-BNWr7r5e.d.ts → request-CEbHIIl4.d.ts} +4 -2
  206. package/dist/{request-sKayKcop.d.mts → request-DfE02G_A.d.mts} +4 -2
  207. package/dist/request.cjs +3 -3
  208. package/dist/request.d.mts +2 -2
  209. package/dist/request.d.ts +2 -2
  210. package/dist/request.mjs +2 -2
  211. package/dist/{route-rendering-DWFp3Yq4.d.mts → route-rendering-BHyOfXjD.d.mts} +1 -1
  212. package/dist/{route-rendering-Bx4Auw6Q.d.ts → route-rendering-C4oHbv6C.d.ts} +1 -1
  213. package/dist/{router-BK6K42Ij.d.mts → router-DwhA61SB.d.mts} +1 -1
  214. package/dist/{router-DnW_2tQi.d.ts → router-uRN_29Em.d.ts} +1 -1
  215. package/dist/routes.d.mts +1 -1
  216. package/dist/routes.d.ts +1 -1
  217. package/dist/{runtime-DJDaCMd_.d.mts → runtime-BEdHhN4C.d.mts} +1 -1
  218. package/dist/{runtime-CA3Ei5k_.d.ts → runtime-COk03hmx.d.ts} +1 -1
  219. package/dist/server-fn.cjs +3 -3
  220. package/dist/server-fn.mjs +2 -2
  221. package/dist/server-plugins.cjs +5 -5
  222. package/dist/server-plugins.d.mts +2 -2
  223. package/dist/server-plugins.d.ts +2 -2
  224. package/dist/server-plugins.mjs +4 -4
  225. package/dist/server-query.cjs +4 -4
  226. package/dist/server-query.mjs +3 -3
  227. package/dist/server.cjs +49 -48
  228. package/dist/server.d.mts +7 -7
  229. package/dist/server.d.ts +7 -7
  230. package/dist/server.mjs +27 -26
  231. package/dist/{spa-router-Mwbd7g2L.d.ts → spa-router-DrVOBVGg.d.ts} +2 -2
  232. package/dist/{spa-router-D6fUA4Rn.d.mts → spa-router-w4aFOuyn.d.mts} +2 -2
  233. package/dist/testing.cjs +5 -5
  234. package/dist/testing.d.mts +1 -1
  235. package/dist/testing.d.ts +1 -1
  236. package/dist/testing.mjs +4 -4
  237. package/dist/theme/server.cjs +4 -4
  238. package/dist/theme/server.mjs +3 -3
  239. package/dist/{utils-p9Hs-jCc.d.mts → utils-BtYehqeU.d.mts} +1 -1
  240. package/dist/{utils-BwVcAfUR.d.ts → utils-Dhuqwmd2.d.ts} +1 -1
  241. package/dist/version.cjs +2 -2
  242. package/dist/version.mjs +1 -1
  243. package/dist/vite.cjs +23 -22
  244. package/dist/vite.d.mts +1 -1
  245. package/dist/vite.d.ts +1 -1
  246. package/dist/vite.mjs +22 -21
  247. package/package.json +1 -1
  248. package/dist/chunk-655RLQQL.mjs +0 -43
  249. package/dist/chunk-MRMI32SN.cjs +0 -1157
  250. package/dist/chunk-MT763TDW.cjs +0 -43
@@ -0,0 +1,632 @@
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
+
3
+ var _chunkWEW2JVA4cjs = require('./chunk-WEW2JVA4.cjs');
4
+
5
+
6
+ var _chunkSGBJ247Qcjs = require('./chunk-SGBJ247Q.cjs');
7
+
8
+
9
+ var _chunkI57LW5VZcjs = require('./chunk-I57LW5VZ.cjs');
10
+
11
+
12
+ var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
13
+
14
+ // src/agent-crawlers.ts
15
+ var FARM_AI_CRAWLERS = {
16
+ search: [
17
+ "OAI-SearchBot",
18
+ "ChatGPT-User",
19
+ "Claude-SearchBot",
20
+ "Claude-User",
21
+ "PerplexityBot",
22
+ "Perplexity-User"
23
+ ],
24
+ training: [
25
+ "GPTBot",
26
+ "ClaudeBot",
27
+ "Google-Extended",
28
+ "CCBot",
29
+ "Applebot-Extended",
30
+ "Meta-ExternalAgent",
31
+ "Bytespider"
32
+ ]
33
+ };
34
+ var LINE_BREAK = /[\r\n]/;
35
+ function resolveFarmAgentCrawlers(input) {
36
+ if (!input) return { enabled: false, rules: [] };
37
+ if (input === true) return { enabled: true, rules: [] };
38
+ if (typeof input !== "object" || Array.isArray(input)) {
39
+ throw new TypeError("agent.crawlers must be true, false, or an options object.");
40
+ }
41
+ if (input.enabled === false) return { enabled: false, rules: [] };
42
+ for (const key of ["search", "training"]) {
43
+ const policy = input[key];
44
+ if (policy !== void 0 && policy !== "allow" && policy !== "block") {
45
+ throw new TypeError(`agent.crawlers.${key} must be "allow" or "block".`);
46
+ }
47
+ }
48
+ return {
49
+ enabled: true,
50
+ ...input.search ? { search: input.search } : {},
51
+ ...input.training ? { training: input.training } : {},
52
+ rules: resolveRobotsRules(input.rules),
53
+ ...input.sitemap !== void 0 ? { sitemap: resolveSitemapUrls(input.sitemap) } : {}
54
+ };
55
+ }
56
+ _chunkS3JO3N4Hcjs.__name.call(void 0, resolveFarmAgentCrawlers, "resolveFarmAgentCrawlers");
57
+ function resolveRobotsRules(value) {
58
+ if (value === void 0) return [];
59
+ if (!Array.isArray(value)) {
60
+ throw new TypeError("agent.crawlers.rules must be an array of robots.txt rules.");
61
+ }
62
+ return value.map((rule, index) => {
63
+ const name = `agent.crawlers.rules[${index}]`;
64
+ if (!rule || typeof rule !== "object" || Array.isArray(rule)) {
65
+ throw new TypeError(`${name} must be an object.`);
66
+ }
67
+ const userAgent = readDirectiveValues(rule.userAgent, `${name}.userAgent`);
68
+ if (userAgent.length === 0) {
69
+ throw new TypeError(`${name}.userAgent must name at least one user agent.`);
70
+ }
71
+ const allow = readDirectiveValues(rule.allow, `${name}.allow`);
72
+ const disallow = readDirectiveValues(rule.disallow, `${name}.disallow`);
73
+ if (rule.crawlDelay !== void 0 && (typeof rule.crawlDelay !== "number" || !Number.isFinite(rule.crawlDelay) || rule.crawlDelay < 0)) {
74
+ throw new TypeError(`${name}.crawlDelay must be a number of seconds.`);
75
+ }
76
+ return {
77
+ userAgent,
78
+ ...allow.length ? { allow } : {},
79
+ ...disallow.length ? { disallow } : {},
80
+ ...rule.crawlDelay !== void 0 ? { crawlDelay: rule.crawlDelay } : {}
81
+ };
82
+ });
83
+ }
84
+ _chunkS3JO3N4Hcjs.__name.call(void 0, resolveRobotsRules, "resolveRobotsRules");
85
+ function readDirectiveValues(value, name) {
86
+ if (value === void 0) return [];
87
+ const values = Array.isArray(value) ? value : [value];
88
+ for (const item of values) {
89
+ if (typeof item !== "string" || !item || LINE_BREAK.test(item)) {
90
+ throw new TypeError(`${name} must be a non-empty string or an array of them.`);
91
+ }
92
+ }
93
+ return values;
94
+ }
95
+ _chunkS3JO3N4Hcjs.__name.call(void 0, readDirectiveValues, "readDirectiveValues");
96
+ function resolveSitemapUrls(value) {
97
+ const values = Array.isArray(value) ? value : [value];
98
+ for (const item of values) {
99
+ if (typeof item !== "string" || !toAbsoluteHttpUrl(item) || LINE_BREAK.test(item)) {
100
+ throw new TypeError("agent.crawlers.sitemap must be an absolute URL or an array of them.");
101
+ }
102
+ }
103
+ return values;
104
+ }
105
+ _chunkS3JO3N4Hcjs.__name.call(void 0, resolveSitemapUrls, "resolveSitemapUrls");
106
+ function toAbsoluteHttpUrl(value) {
107
+ if (typeof value !== "string" && !(value instanceof URL)) return null;
108
+ try {
109
+ const url = new URL(String(value));
110
+ return url.protocol === "https:" || url.protocol === "http:" ? url : null;
111
+ } catch (e) {
112
+ return null;
113
+ }
114
+ }
115
+ _chunkS3JO3N4Hcjs.__name.call(void 0, toAbsoluteHttpUrl, "toAbsoluteHttpUrl");
116
+ function createFarmAgentRobots(options) {
117
+ const { crawlers } = options;
118
+ const rules = [];
119
+ for (const group of ["search", "training"]) {
120
+ const policy = crawlers[group];
121
+ if (!policy) continue;
122
+ rules.push({
123
+ userAgent: [...FARM_AI_CRAWLERS[group]],
124
+ ...policy === "allow" ? { allow: "/" } : { disallow: "/" }
125
+ });
126
+ }
127
+ rules.push(...crawlers.rules);
128
+ const namesEveryAgent = crawlers.rules.some(
129
+ (rule) => (Array.isArray(rule.userAgent) ? rule.userAgent : [rule.userAgent]).includes("*")
130
+ );
131
+ if (!namesEveryAgent) rules.push({ userAgent: "*", allow: "/" });
132
+ const sitemap = _nullishCoalesce(crawlers.sitemap, () => ( resolveDefaultSitemap(options)));
133
+ return { rules, ...sitemap.length > 0 ? { sitemap } : {} };
134
+ }
135
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmAgentRobots, "createFarmAgentRobots");
136
+ function resolveDefaultSitemap(options) {
137
+ if (!options.sitemapPath) return [];
138
+ const base = toAbsoluteHttpUrl(options.metadataBase);
139
+ if (!base) return [];
140
+ return [new URL(_chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, options.sitemapPath, options.basePath), base).href];
141
+ }
142
+ _chunkS3JO3N4Hcjs.__name.call(void 0, resolveDefaultSitemap, "resolveDefaultSitemap");
143
+
144
+ // src/agent-sitemap.ts
145
+ function resolveFarmAgentSitemap(input) {
146
+ if (!input) return { enabled: false, include: [], exclude: [] };
147
+ if (input === true) return { enabled: true, include: [], exclude: [] };
148
+ if (typeof input !== "object") {
149
+ throw new TypeError("agent.sitemap must be true, false, or an options object.");
150
+ }
151
+ if (input.enabled === false) return { enabled: false, include: [], exclude: [] };
152
+ return {
153
+ enabled: true,
154
+ include: resolveRoutePatterns(input.include, "include"),
155
+ exclude: resolveRoutePatterns(input.exclude, "exclude")
156
+ };
157
+ }
158
+ _chunkS3JO3N4Hcjs.__name.call(void 0, resolveFarmAgentSitemap, "resolveFarmAgentSitemap");
159
+ function resolveRoutePatterns(value, key) {
160
+ if (value === void 0) return [];
161
+ if (!Array.isArray(value)) {
162
+ throw new TypeError(`agent.sitemap.${key} must be an array of route patterns.`);
163
+ }
164
+ return value.map((pattern, index) => {
165
+ if (typeof pattern !== "string" || !pattern.startsWith("/")) {
166
+ throw new TypeError(
167
+ `agent.sitemap.${key}[${index}] must be a route pattern starting with "/", such as "/admin/[...path]".`
168
+ );
169
+ }
170
+ return pattern;
171
+ });
172
+ }
173
+ _chunkS3JO3N4Hcjs.__name.call(void 0, resolveRoutePatterns, "resolveRoutePatterns");
174
+ function createFarmDefaultSitemap(sources, options) {
175
+ const { include, exclude } = options.config;
176
+ const base = _nullishCoalesce(toAbsoluteHttpOrigin(options.metadataBase), () => ( options.origin));
177
+ const entries = /* @__PURE__ */ new Map();
178
+ for (const source of sources) {
179
+ const path = source.pattern;
180
+ if (path.includes("[") || path.includes("(") || entries.has(path)) continue;
181
+ if (include.length && !include.some((pattern) => _chunkSGBJ247Qcjs.matchesFarmMarkdownRoutePattern.call(void 0, pattern, path))) {
182
+ continue;
183
+ }
184
+ if (exclude.some((pattern) => _chunkSGBJ247Qcjs.matchesFarmMarkdownRoutePattern.call(void 0, pattern, path))) continue;
185
+ const module = isRecord(source.module) ? source.module : void 0;
186
+ if (_chunkWEW2JVA4cjs.isFarmMetadataNoIndex.call(void 0, _optionalChain([module, 'optionalAccess', _2 => _2.metadata]))) continue;
187
+ if (_optionalChain([module, 'optionalAccess', _3 => _3.__farmRouteGuard])) continue;
188
+ entries.set(path, {
189
+ url: new URL(_chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, path, options.basePath), base).href,
190
+ ...source.lastModified ? { lastModified: source.lastModified } : {}
191
+ });
192
+ }
193
+ return [...entries.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([, entry]) => entry);
194
+ }
195
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDefaultSitemap, "createFarmDefaultSitemap");
196
+ function toAbsoluteHttpOrigin(value) {
197
+ if (typeof value !== "string" && !(value instanceof URL)) return void 0;
198
+ try {
199
+ const url = new URL(String(value));
200
+ return url.protocol === "https:" || url.protocol === "http:" ? url.origin : void 0;
201
+ } catch (e2) {
202
+ return void 0;
203
+ }
204
+ }
205
+ _chunkS3JO3N4Hcjs.__name.call(void 0, toAbsoluteHttpOrigin, "toAbsoluteHttpOrigin");
206
+ function isRecord(value) {
207
+ return Boolean(value && typeof value === "object");
208
+ }
209
+ _chunkS3JO3N4Hcjs.__name.call(void 0, isRecord, "isRecord");
210
+
211
+ // src/preload.ts
212
+ var DEFAULT_PRELOAD_CONFIG = {
213
+ mode: "enforce",
214
+ maxImages: 1,
215
+ maxFonts: 2
216
+ };
217
+ var reportedWarnings = /* @__PURE__ */ new Map();
218
+ var nextWarningExpiry = Infinity;
219
+ var PRELOAD_WARNING_TTL_MS = 6e4;
220
+ var MAX_REPORTED_PRELOAD_WARNINGS = 256;
221
+ function resolveFarmPerformanceConfig(config) {
222
+ return {
223
+ preload: {
224
+ mode: _optionalChain([config, 'optionalAccess', _4 => _4.preload, 'optionalAccess', _5 => _5.mode]) === "warn" ? "warn" : "enforce",
225
+ maxImages: normalizeBudget(_optionalChain([config, 'optionalAccess', _6 => _6.preload, 'optionalAccess', _7 => _7.maxImages]), DEFAULT_PRELOAD_CONFIG.maxImages),
226
+ maxFonts: normalizeBudget(_optionalChain([config, 'optionalAccess', _8 => _8.preload, 'optionalAccess', _9 => _9.maxFonts]), DEFAULT_PRELOAD_CONFIG.maxFonts)
227
+ }
228
+ };
229
+ }
230
+ _chunkS3JO3N4Hcjs.__name.call(void 0, resolveFarmPerformanceConfig, "resolveFarmPerformanceConfig");
231
+ function manageFarmHtmlPreloads(html, config) {
232
+ const elements = findHtmlLinkElements(html);
233
+ const candidates = elements.flatMap((element, index) => {
234
+ const kind = getHtmlPreloadKind(element.value);
235
+ return kind ? [
236
+ {
237
+ index,
238
+ kind,
239
+ href: readHtmlAttribute(element.value, "href"),
240
+ highPriority: _optionalChain([readHtmlAttribute, 'call', _10 => _10(element.value, "fetchpriority"), 'optionalAccess', _11 => _11.toLowerCase, 'call', _12 => _12()]) === "high"
241
+ }
242
+ ] : [];
243
+ });
244
+ const budget = selectPreloadsWithinBudget(candidates, config);
245
+ if (config.mode === "warn" || budget.removed.size === 0) {
246
+ return { value: html, warnings: budget.warnings };
247
+ }
248
+ return {
249
+ value: removeHtmlLinkElements(html, elements, budget.removed),
250
+ warnings: budget.warnings
251
+ };
252
+ }
253
+ _chunkS3JO3N4Hcjs.__name.call(void 0, manageFarmHtmlPreloads, "manageFarmHtmlPreloads");
254
+ function manageFarmLinkHeaderPreloads(value, config) {
255
+ if (!value) return { value, warnings: [] };
256
+ const links = splitLinkHeader(value);
257
+ const candidates = links.flatMap((link, index) => {
258
+ const kind = getLinkHeaderPreloadKind(link);
259
+ return kind ? [
260
+ {
261
+ index,
262
+ kind,
263
+ href: getLinkHeaderTarget(link),
264
+ highPriority: _optionalChain([getLinkHeaderParameter, 'call', _13 => _13(link, "fetchpriority"), 'optionalAccess', _14 => _14.toLowerCase, 'call', _15 => _15()]) === "high"
265
+ }
266
+ ] : [];
267
+ });
268
+ const budget = selectPreloadsWithinBudget(candidates, config);
269
+ return {
270
+ value: config.mode === "enforce" ? links.filter((_, index) => !budget.removed.has(index)).join(", ") : value,
271
+ warnings: budget.warnings
272
+ };
273
+ }
274
+ _chunkS3JO3N4Hcjs.__name.call(void 0, manageFarmLinkHeaderPreloads, "manageFarmLinkHeaderPreloads");
275
+ function manageFarmDocumentPreloads(html, linkHeader, config) {
276
+ const elements = findHtmlLinkElements(html);
277
+ const links = linkHeader ? splitLinkHeader(linkHeader) : [];
278
+ const headerOffset = elements.length;
279
+ const candidates = [];
280
+ for (const [index, element] of elements.entries()) {
281
+ const kind = getHtmlPreloadKind(element.value);
282
+ if (!kind) continue;
283
+ candidates.push({
284
+ index,
285
+ kind,
286
+ href: readHtmlAttribute(element.value, "href"),
287
+ highPriority: _optionalChain([readHtmlAttribute, 'call', _16 => _16(element.value, "fetchpriority"), 'optionalAccess', _17 => _17.toLowerCase, 'call', _18 => _18()]) === "high"
288
+ });
289
+ }
290
+ for (const [index, link] of links.entries()) {
291
+ const kind = getLinkHeaderPreloadKind(link);
292
+ if (!kind) continue;
293
+ candidates.push({
294
+ index: headerOffset + index,
295
+ kind,
296
+ href: getLinkHeaderTarget(link),
297
+ highPriority: _optionalChain([getLinkHeaderParameter, 'call', _19 => _19(link, "fetchpriority"), 'optionalAccess', _20 => _20.toLowerCase, 'call', _21 => _21()]) === "high"
298
+ });
299
+ }
300
+ const budget = selectPreloadsWithinBudget(candidates, config);
301
+ if (config.mode === "warn" || budget.removed.size === 0) {
302
+ return { html, linkHeader, warnings: budget.warnings };
303
+ }
304
+ return {
305
+ html: removeHtmlLinkElements(html, elements, budget.removed),
306
+ linkHeader: links.filter((_, index) => !budget.removed.has(headerOffset + index)).join(", "),
307
+ warnings: budget.warnings
308
+ };
309
+ }
310
+ _chunkS3JO3N4Hcjs.__name.call(void 0, manageFarmDocumentPreloads, "manageFarmDocumentPreloads");
311
+ function reportFarmPreloadWarnings(warnings, context = "the rendered document") {
312
+ if (warnings.length === 0 && reportedWarnings.size === 0) return;
313
+ const now = Date.now();
314
+ if (now >= nextWarningExpiry) {
315
+ nextWarningExpiry = Infinity;
316
+ for (const [key, reportedAt] of reportedWarnings) {
317
+ const expiresAt = reportedAt + PRELOAD_WARNING_TTL_MS;
318
+ if (now >= expiresAt) reportedWarnings.delete(key);
319
+ else nextWarningExpiry = Math.min(nextWarningExpiry, expiresAt);
320
+ }
321
+ }
322
+ for (const warning of warnings) {
323
+ const key = `${context}:${warning.kind}:${warning.count}:${warning.budget}:${warning.removed}`;
324
+ const reportedAt = reportedWarnings.get(key);
325
+ if (reportedAt !== void 0 && now - reportedAt < PRELOAD_WARNING_TTL_MS) continue;
326
+ reportedWarnings.set(key, now);
327
+ nextWarningExpiry = Math.min(nextWarningExpiry, now + PRELOAD_WARNING_TTL_MS);
328
+ while (reportedWarnings.size > MAX_REPORTED_PRELOAD_WARNINGS) {
329
+ const oldest = reportedWarnings.keys().next().value;
330
+ if (oldest === void 0) break;
331
+ reportedWarnings.delete(oldest);
332
+ }
333
+ const action = warning.removed > 0 ? ` Removed ${warning.removed} lower-priority hint(s).` : "";
334
+ const recommendation = warning.kind === "image" ? ' Mark only the LCP image with `preload` or `fetchPriority="high"`.' : " Set `preload: false` on fonts that are not required above the fold.";
335
+ console.warn(
336
+ `[Farm.js] ${context} emitted ${warning.count} ${warning.kind} preload hints (budget: ${warning.budget}).${action}${recommendation}`
337
+ );
338
+ }
339
+ }
340
+ _chunkS3JO3N4Hcjs.__name.call(void 0, reportFarmPreloadWarnings, "reportFarmPreloadWarnings");
341
+ function selectPreloadsWithinBudget(candidates, config) {
342
+ const removed = /* @__PURE__ */ new Set();
343
+ const warnings = [];
344
+ for (const kind of ["image", "font"]) {
345
+ const resources = /* @__PURE__ */ new Map();
346
+ for (const candidate of candidates) {
347
+ if (candidate.kind !== kind) continue;
348
+ const key = _nullishCoalesce(candidate.href, () => ( `#${candidate.index}`));
349
+ const hints = resources.get(key);
350
+ if (hints) hints.push(candidate);
351
+ else resources.set(key, [candidate]);
352
+ }
353
+ const limit = kind === "image" ? config.maxImages : config.maxFonts;
354
+ if (resources.size <= limit) continue;
355
+ const ranked = [...resources.values()].map((hints) => ({
356
+ hints,
357
+ index: hints[0].index,
358
+ highPriority: hints.some((hint) => hint.highPriority)
359
+ })).sort(
360
+ (left, right) => Number(right.highPriority) - Number(left.highPriority) || left.index - right.index
361
+ );
362
+ if (config.mode === "enforce") {
363
+ for (const resource of ranked.slice(limit)) {
364
+ for (const hint of resource.hints) removed.add(hint.index);
365
+ }
366
+ }
367
+ warnings.push({
368
+ kind,
369
+ count: resources.size,
370
+ budget: limit,
371
+ removed: config.mode === "enforce" ? resources.size - limit : 0
372
+ });
373
+ }
374
+ return { removed, warnings };
375
+ }
376
+ _chunkS3JO3N4Hcjs.__name.call(void 0, selectPreloadsWithinBudget, "selectPreloadsWithinBudget");
377
+ function getHtmlPreloadKind(link) {
378
+ const rel = _optionalChain([readHtmlAttribute, 'call', _22 => _22(link, "rel"), 'optionalAccess', _23 => _23.toLowerCase, 'call', _24 => _24(), 'access', _25 => _25.split, 'call', _26 => _26(/\s+/)]) || [];
379
+ if (!rel.includes("preload")) return void 0;
380
+ return normalizePreloadKind(readHtmlAttribute(link, "as"));
381
+ }
382
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getHtmlPreloadKind, "getHtmlPreloadKind");
383
+ function getLinkHeaderPreloadKind(link) {
384
+ const relations = _nullishCoalesce(_optionalChain([getLinkHeaderParameter, 'call', _27 => _27(link, "rel"), 'optionalAccess', _28 => _28.toLowerCase, 'call', _29 => _29(), 'access', _30 => _30.split, 'call', _31 => _31(/\s+/)]), () => ( []));
385
+ if (!relations.includes("preload")) return void 0;
386
+ return normalizePreloadKind(getLinkHeaderParameter(link, "as"));
387
+ }
388
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getLinkHeaderPreloadKind, "getLinkHeaderPreloadKind");
389
+ function getLinkHeaderTarget(link) {
390
+ const start = link.indexOf("<");
391
+ const end = link.indexOf(">", start + 1);
392
+ return start === -1 || end === -1 ? void 0 : link.slice(start + 1, end).trim();
393
+ }
394
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getLinkHeaderTarget, "getLinkHeaderTarget");
395
+ function getLinkHeaderParameter(link, name) {
396
+ const uriEnd = link.indexOf(">");
397
+ if (uriEnd === -1) return void 0;
398
+ for (const parameter of splitLinkParameters(link.slice(uriEnd + 1))) {
399
+ const separator = parameter.indexOf("=");
400
+ const parameterName = (separator === -1 ? parameter : parameter.slice(0, separator)).trim().toLowerCase();
401
+ if (parameterName !== name.toLowerCase() || separator === -1) continue;
402
+ const rawValue = parameter.slice(separator + 1).trim();
403
+ if (rawValue.startsWith('"') && rawValue.endsWith('"')) {
404
+ return rawValue.slice(1, -1).replace(/\\([\\"])/g, "$1");
405
+ }
406
+ return rawValue;
407
+ }
408
+ return void 0;
409
+ }
410
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getLinkHeaderParameter, "getLinkHeaderParameter");
411
+ function splitLinkParameters(value) {
412
+ const parameters = [];
413
+ let start = 0;
414
+ let quoted = false;
415
+ for (let index = 0; index < value.length; index += 1) {
416
+ const character = value[index];
417
+ if (character === '"' && !isEscaped(value, index)) quoted = !quoted;
418
+ else if (character === ";" && !quoted) {
419
+ const parameter2 = value.slice(start, index).trim();
420
+ if (parameter2) parameters.push(parameter2);
421
+ start = index + 1;
422
+ }
423
+ }
424
+ const parameter = value.slice(start).trim();
425
+ if (parameter) parameters.push(parameter);
426
+ return parameters;
427
+ }
428
+ _chunkS3JO3N4Hcjs.__name.call(void 0, splitLinkParameters, "splitLinkParameters");
429
+ function normalizePreloadKind(value) {
430
+ const normalized = _optionalChain([value, 'optionalAccess', _32 => _32.toLowerCase, 'call', _33 => _33()]);
431
+ return normalized === "image" || normalized === "font" ? normalized : void 0;
432
+ }
433
+ _chunkS3JO3N4Hcjs.__name.call(void 0, normalizePreloadKind, "normalizePreloadKind");
434
+ function readHtmlAttribute(element, name) {
435
+ const match = element.match(
436
+ new RegExp(`\\s${name}\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s>]+))`, "i")
437
+ );
438
+ return _nullishCoalesce(_nullishCoalesce(_optionalChain([match, 'optionalAccess', _34 => _34[1]]), () => ( _optionalChain([match, 'optionalAccess', _35 => _35[2]]))), () => ( _optionalChain([match, 'optionalAccess', _36 => _36[3]])));
439
+ }
440
+ _chunkS3JO3N4Hcjs.__name.call(void 0, readHtmlAttribute, "readHtmlAttribute");
441
+ function findHtmlLinkElements(html) {
442
+ const lastToken = typeof html === "string" ? findLastPreloadToken(html) : Infinity;
443
+ if (lastToken === -1) return [];
444
+ const elements = [];
445
+ let lowerHtml = foldHtmlTagCase(
446
+ lastToken === Infinity ? html : html.slice(0, lastToken + RAW_TEXT_TAG_LOOKAHEAD)
447
+ );
448
+ const rawTextTag = /<(script|style|template|textarea|title|noscript|svg)(?=[\s/>])/y;
449
+ const linkTag = /<link(?=[\s/>])/iy;
450
+ const ordinaryTag = /<\/?[A-Za-z][\w:-]*(?=[\s/>])/y;
451
+ let cursor = 0;
452
+ while (cursor < html.length) {
453
+ const start = html.indexOf("<", cursor);
454
+ if (start === -1 || start > lastToken) break;
455
+ if (html.startsWith("<!--", start)) {
456
+ const commentEnd = html.indexOf("-->", start + 4);
457
+ cursor = commentEnd === -1 ? html.length : commentEnd + 3;
458
+ continue;
459
+ }
460
+ rawTextTag.lastIndex = start;
461
+ const rawText = rawTextTag.exec(lowerHtml);
462
+ if (_optionalChain([rawText, 'optionalAccess', _37 => _37[1]])) {
463
+ const openingEnd = findHtmlTagEnd(html, start);
464
+ if (openingEnd === -1) break;
465
+ if (rawText[1] === "svg" && html[openingEnd - 2] === "/") {
466
+ cursor = openingEnd;
467
+ continue;
468
+ }
469
+ let closingStart = findHtmlClosingTag(lowerHtml, rawText[1], openingEnd);
470
+ if (closingStart === -1 && lowerHtml.length < html.length) {
471
+ lowerHtml = foldHtmlTagCase(html);
472
+ closingStart = findHtmlClosingTag(lowerHtml, rawText[1], openingEnd);
473
+ }
474
+ if (closingStart === -1) {
475
+ cursor = html.length;
476
+ continue;
477
+ }
478
+ const closingEnd = findHtmlTagEnd(html, closingStart);
479
+ cursor = closingEnd === -1 ? html.length : closingEnd;
480
+ continue;
481
+ }
482
+ linkTag.lastIndex = start;
483
+ if (linkTag.test(html)) {
484
+ const end = findHtmlTagEnd(html, start);
485
+ if (end === -1) break;
486
+ elements.push({ start, end, value: html.slice(start, end) });
487
+ cursor = end;
488
+ continue;
489
+ }
490
+ ordinaryTag.lastIndex = start;
491
+ if (ordinaryTag.test(html)) {
492
+ const end = findHtmlTagEnd(html, start);
493
+ cursor = end === -1 ? html.length : end;
494
+ continue;
495
+ }
496
+ cursor = start + 1;
497
+ }
498
+ return elements;
499
+ }
500
+ _chunkS3JO3N4Hcjs.__name.call(void 0, findHtmlLinkElements, "findHtmlLinkElements");
501
+ var RAW_TEXT_TAG_LOOKAHEAD = 16;
502
+ var PRELOAD_TOKEN = /\bpreload\b/gi;
503
+ function findLastPreloadToken(html) {
504
+ let last = -1;
505
+ PRELOAD_TOKEN.lastIndex = 0;
506
+ for (let match = PRELOAD_TOKEN.exec(html); match; match = PRELOAD_TOKEN.exec(html)) {
507
+ last = match.index;
508
+ }
509
+ return last;
510
+ }
511
+ _chunkS3JO3N4Hcjs.__name.call(void 0, findLastPreloadToken, "findLastPreloadToken");
512
+ function foldHtmlTagCase(html) {
513
+ const lowerHtml = html.toLowerCase();
514
+ return lowerHtml.length === html.length ? lowerHtml : html.replace(/[A-Z]/g, (letter) => letter.toLowerCase());
515
+ }
516
+ _chunkS3JO3N4Hcjs.__name.call(void 0, foldHtmlTagCase, "foldHtmlTagCase");
517
+ function findHtmlClosingTag(html, tagName, start) {
518
+ const prefix = `</${tagName}`;
519
+ let candidate = html.indexOf(prefix, start);
520
+ while (candidate !== -1) {
521
+ const boundary = html[candidate + prefix.length];
522
+ if (boundary === ">" || boundary === "/" || /\s/.test(_nullishCoalesce(boundary, () => ( "")))) return candidate;
523
+ candidate = html.indexOf(prefix, candidate + prefix.length);
524
+ }
525
+ return -1;
526
+ }
527
+ _chunkS3JO3N4Hcjs.__name.call(void 0, findHtmlClosingTag, "findHtmlClosingTag");
528
+ function findHtmlTagEnd(html, start) {
529
+ let quote;
530
+ for (let index = start + 1; index < html.length; index += 1) {
531
+ const character = html[index];
532
+ if (quote) {
533
+ if (character === quote) quote = void 0;
534
+ } else if (character === '"' || character === "'") {
535
+ quote = character;
536
+ } else if (character === ">") {
537
+ return index + 1;
538
+ }
539
+ }
540
+ return -1;
541
+ }
542
+ _chunkS3JO3N4Hcjs.__name.call(void 0, findHtmlTagEnd, "findHtmlTagEnd");
543
+ function removeHtmlLinkElements(html, elements, removed) {
544
+ let cursor = 0;
545
+ let output = "";
546
+ for (const [index, element] of elements.entries()) {
547
+ if (!removed.has(index)) continue;
548
+ output += html.slice(cursor, element.start);
549
+ cursor = element.end;
550
+ }
551
+ return output + html.slice(cursor);
552
+ }
553
+ _chunkS3JO3N4Hcjs.__name.call(void 0, removeHtmlLinkElements, "removeHtmlLinkElements");
554
+ function splitLinkHeader(value) {
555
+ const links = [];
556
+ let start = 0;
557
+ let insideAngleBrackets = false;
558
+ let quoted = false;
559
+ for (let index = 0; index < value.length; index += 1) {
560
+ const character = value[index];
561
+ if (quoted) {
562
+ if (character === '"' && !isEscaped(value, index)) quoted = false;
563
+ continue;
564
+ }
565
+ if (character === '"') {
566
+ quoted = true;
567
+ } else if (character === "<") {
568
+ insideAngleBrackets = true;
569
+ } else if (character === ">") {
570
+ insideAngleBrackets = false;
571
+ } else if (character === "," && !insideAngleBrackets) {
572
+ links.push(value.slice(start, index).trim());
573
+ start = index + 1;
574
+ }
575
+ }
576
+ links.push(value.slice(start).trim());
577
+ return links.filter(Boolean);
578
+ }
579
+ _chunkS3JO3N4Hcjs.__name.call(void 0, splitLinkHeader, "splitLinkHeader");
580
+ function isEscaped(value, index) {
581
+ let backslashes = 0;
582
+ for (let cursor = index - 1; cursor >= 0 && value[cursor] === "\\"; cursor -= 1) {
583
+ backslashes += 1;
584
+ }
585
+ return backslashes % 2 === 1;
586
+ }
587
+ _chunkS3JO3N4Hcjs.__name.call(void 0, isEscaped, "isEscaped");
588
+ function normalizeBudget(value, fallback) {
589
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : fallback;
590
+ }
591
+ _chunkS3JO3N4Hcjs.__name.call(void 0, normalizeBudget, "normalizeBudget");
592
+
593
+ // src/preview-noindex.ts
594
+ var FARM_PREVIEW_ROBOTS_TAG = "noindex, nofollow";
595
+ function resolveFarmNoindexPreviews(input) {
596
+ if (input === void 0) return false;
597
+ if (typeof input !== "boolean") {
598
+ throw new TypeError("agent.noindexPreviews must be a boolean.");
599
+ }
600
+ return input;
601
+ }
602
+ _chunkS3JO3N4Hcjs.__name.call(void 0, resolveFarmNoindexPreviews, "resolveFarmNoindexPreviews");
603
+ function applyFarmPreviewRobotsTag(response) {
604
+ try {
605
+ response.headers.set("X-Robots-Tag", FARM_PREVIEW_ROBOTS_TAG);
606
+ return response;
607
+ } catch (e3) {
608
+ const headers = new Headers(response.headers);
609
+ headers.set("X-Robots-Tag", FARM_PREVIEW_ROBOTS_TAG);
610
+ return new Response(response.body, {
611
+ status: response.status,
612
+ statusText: response.statusText,
613
+ headers
614
+ });
615
+ }
616
+ }
617
+ _chunkS3JO3N4Hcjs.__name.call(void 0, applyFarmPreviewRobotsTag, "applyFarmPreviewRobotsTag");
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+ exports.resolveFarmAgentCrawlers = resolveFarmAgentCrawlers; exports.createFarmAgentRobots = createFarmAgentRobots; exports.resolveFarmAgentSitemap = resolveFarmAgentSitemap; exports.createFarmDefaultSitemap = createFarmDefaultSitemap; exports.resolveFarmPerformanceConfig = resolveFarmPerformanceConfig; exports.manageFarmHtmlPreloads = manageFarmHtmlPreloads; exports.manageFarmLinkHeaderPreloads = manageFarmLinkHeaderPreloads; exports.manageFarmDocumentPreloads = manageFarmDocumentPreloads; exports.reportFarmPreloadWarnings = reportFarmPreloadWarnings; exports.FARM_PREVIEW_ROBOTS_TAG = FARM_PREVIEW_ROBOTS_TAG; exports.resolveFarmNoindexPreviews = resolveFarmNoindexPreviews; exports.applyFarmPreviewRobotsTag = applyFarmPreviewRobotsTag;
@@ -1,5 +1,5 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});// package.json
2
- var version = "0.1.37";
2
+ var version = "0.1.39";
3
3
 
4
4
  // src/version.ts
5
5
  var FARM_VERSION = version;
@@ -7,14 +7,14 @@ import {
7
7
  parseMiddlewareCookieHeader,
8
8
  serializeMiddlewareCookie,
9
9
  serializeMiddlewareCookieDeletion
10
- } from "./chunk-J3ANCZKA.mjs";
10
+ } from "./chunk-SKVTP5PR.mjs";
11
11
  import {
12
12
  compileMiddlewareConfig,
13
13
  compileMiddlewareRoute,
14
14
  matchesMiddlewareConfigAt,
15
15
  matchesMiddlewareRouteAt,
16
16
  toMiddlewareRoutePathname
17
- } from "./chunk-HZFM2LWQ.mjs";
17
+ } from "./chunk-P3PLW4FR.mjs";
18
18
  import {
19
19
  createCliColors
20
20
  } from "./chunk-I2BHUNBU.mjs";
@@ -41,7 +41,7 @@ import {
41
41
  } from "./chunk-CBBLJMR5.mjs";
42
42
  import {
43
43
  resolveFarmRequestURL
44
- } from "./chunk-3KGDJLJK.mjs";
44
+ } from "./chunk-POSPE3IO.mjs";
45
45
  import {
46
46
  stripFarmLocaleFromPathname
47
47
  } from "./chunk-L3KT7IXV.mjs";