@farm.js/core 0.1.37 → 0.1.38

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 (242) hide show
  1. package/dist/{agent-mcp-BC0bAGVF.d.mts → agent-mcp-BwKlpnc7.d.mts} +1 -1
  2. package/dist/{agent-mcp-jyDHbQKe.d.ts → agent-mcp-De1imoMS.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 +2 -2
  6. package/dist/agent-runtime.d.mts +1 -1
  7. package/dist/agent-runtime.d.ts +1 -1
  8. package/dist/agent-runtime.mjs +1 -1
  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-Cbkj9ufe.d.mts → app-CFZt-srr.d.mts} +21 -3
  24. package/dist/{app-CKO3iN1c.d.ts → app-kT_QXTdx.d.ts} +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-LOFKRKO7.cjs → chunk-2DD4JMQC.cjs} +113 -22
  30. package/dist/chunk-2ZYGC6SS.cjs +576 -0
  31. package/dist/{chunk-75X755YZ.cjs → chunk-34UCJRQO.cjs} +2 -2
  32. package/dist/{chunk-CVH2BXPY.cjs → chunk-3LOLJTFV.cjs} +6 -6
  33. package/dist/{chunk-4GPOC4LN.cjs → chunk-472NCAZ7.cjs} +3 -3
  34. package/dist/{chunk-WT4TGLXT.cjs → chunk-4E5QXOCL.cjs} +6 -6
  35. package/dist/{chunk-7DWNJI73.cjs → chunk-4IE345DM.cjs} +37 -19
  36. package/dist/{chunk-O6WAEAX3.mjs → chunk-5BWWFHR2.mjs} +70 -15
  37. package/dist/{chunk-6LGFV2CQ.cjs → chunk-5OKBARDN.cjs} +2 -2
  38. package/dist/{chunk-3IP27TCG.cjs → chunk-5PWXMJOH.cjs} +19 -19
  39. package/dist/chunk-6BK3K2GB.mjs +318 -0
  40. package/dist/{chunk-HEVMCTSR.mjs → chunk-6HB6V3R7.mjs} +1 -1
  41. package/dist/{chunk-NICDYKBS.cjs → chunk-6XWDE2P2.cjs} +22 -4
  42. package/dist/{chunk-Z7LA7MHQ.mjs → chunk-7FPTZLKH.mjs} +1 -1
  43. package/dist/{chunk-JPNFPAZ4.mjs → chunk-7PEP3BUT.mjs} +1 -1
  44. package/dist/{chunk-XOPOIFTJ.mjs → chunk-A3EAIURZ.mjs} +25 -7
  45. package/dist/{chunk-LBDP3YT3.mjs → chunk-ARC7I3O2.mjs} +1 -1
  46. package/dist/{chunk-LBGILORX.mjs → chunk-B6G5CKMC.mjs} +101 -10
  47. package/dist/{chunk-MCIZVNOQ.mjs → chunk-BZHXGVMA.mjs} +1 -1
  48. package/dist/{chunk-KDTBF3UU.mjs → chunk-CNNOLE4O.mjs} +1 -1
  49. package/dist/{chunk-TDNWPAVR.mjs → chunk-CUM5NYL5.mjs} +1 -1
  50. package/dist/{chunk-HITLGIAO.cjs → chunk-CY2ZQ5C6.cjs} +7 -6
  51. package/dist/{chunk-KPFKMDM7.mjs → chunk-DRLKAXDM.mjs} +1 -1
  52. package/dist/{chunk-VR4GD5I3.cjs → chunk-EIPC3FDA.cjs} +12 -4
  53. package/dist/{chunk-K3SAEIM3.mjs → chunk-EKF7KDFD.mjs} +1 -1
  54. package/dist/{chunk-B5PFZLKV.cjs → chunk-EKN7NSZO.cjs} +25 -8
  55. package/dist/{chunk-ATWHHSY2.cjs → chunk-EMO6K4YY.cjs} +4 -4
  56. package/dist/{chunk-6SJ2KJTA.mjs → chunk-EPYU2EBL.mjs} +1 -1
  57. package/dist/{chunk-PTZ2TVNE.cjs → chunk-H5CLOUZS.cjs} +5 -5
  58. package/dist/{chunk-DTSROJ5J.mjs → chunk-HD5CF3OE.mjs} +1 -1
  59. package/dist/{chunk-IAIYV4RZ.mjs → chunk-HXRYZWTA.mjs} +1 -1
  60. package/dist/{chunk-Z5BEWYVO.mjs → chunk-IBUQWVYA.mjs} +16 -0
  61. package/dist/{chunk-HMRSWN47.mjs → chunk-INL3THCU.mjs} +1 -1
  62. package/dist/{chunk-FBOJ55OM.mjs → chunk-IVLZZZEI.mjs} +1 -1
  63. package/dist/{chunk-ENLZ4R3Y.mjs → chunk-J7K2NZD6.mjs} +7 -6
  64. package/dist/{chunk-NFMDCAOS.mjs → chunk-JCKYH4LG.mjs} +2 -2
  65. package/dist/{chunk-PMQHMWZU.cjs → chunk-JCYYXBAJ.cjs} +3 -3
  66. package/dist/{chunk-LPFV45AY.cjs → chunk-KCQBAKIY.cjs} +9 -9
  67. package/dist/{chunk-FGRYBX5X.mjs → chunk-KHKLMNI5.mjs} +1 -1
  68. package/dist/{chunk-NQ6QFZWD.cjs → chunk-KKSTAEMY.cjs} +1 -1
  69. package/dist/{chunk-7O5M4UKW.cjs → chunk-L4DD7ODZ.cjs} +2 -2
  70. package/dist/{chunk-YCKO6FRS.mjs → chunk-LI2F57NI.mjs} +1 -1
  71. package/dist/{chunk-TW4GYDBJ.mjs → chunk-MLY2RP5R.mjs} +10 -2
  72. package/dist/{chunk-5BXGGEC7.cjs → chunk-N32CC42M.cjs} +5 -5
  73. package/dist/{chunk-BHY547NB.cjs → chunk-NBBEQLOK.cjs} +9 -9
  74. package/dist/{chunk-WQ7T2263.mjs → chunk-OAHTRMIC.mjs} +3 -3
  75. package/dist/{chunk-K4I4O5TS.mjs → chunk-OCIEZME4.mjs} +790 -671
  76. package/dist/{chunk-UH6QN5NL.mjs → chunk-P664ZVTV.mjs} +2 -2
  77. package/dist/{chunk-TE2G5ION.cjs → chunk-PGZDEPTM.cjs} +88 -33
  78. package/dist/{chunk-3KGDJLJK.mjs → chunk-POSPE3IO.mjs} +19 -1
  79. package/dist/{chunk-3A4KGQYI.cjs → chunk-Q3NXS4MU.cjs} +16 -14
  80. package/dist/{chunk-TPLJVC7E.mjs → chunk-QFW2IH5E.mjs} +23 -6
  81. package/dist/{chunk-S3VWVTVA.mjs → chunk-QRKIMN7T.mjs} +13 -1
  82. package/dist/chunk-QTXBII4Z.cjs +632 -0
  83. package/dist/{chunk-CI6E3UOH.cjs → chunk-RG4A6LB2.cjs} +7 -7
  84. package/dist/{chunk-7SQ5SGYZ.cjs → chunk-RW63BOV7.cjs} +2 -2
  85. package/dist/{chunk-U6MPZ35Q.cjs → chunk-RWFLWR5J.cjs} +8 -8
  86. package/dist/{chunk-EUV4YR3V.cjs → chunk-SGBJ247Q.cjs} +18 -2
  87. package/dist/{chunk-J3ANCZKA.mjs → chunk-SKVTP5PR.mjs} +1 -1
  88. package/dist/{chunk-6TJITR2B.cjs → chunk-TGFQVLLF.cjs} +870 -751
  89. package/dist/{chunk-4P6ULFMD.mjs → chunk-TUBTR2OP.mjs} +221 -102
  90. package/dist/{chunk-EMMQ64QW.cjs → chunk-TYJALEHQ.cjs} +2 -2
  91. package/dist/{chunk-WRPHYQVY.mjs → chunk-TYMMBFN2.mjs} +1 -1
  92. package/dist/chunk-U6QLDL3G.mjs +576 -0
  93. package/dist/{chunk-OW67PDDS.cjs → chunk-ULASELLA.cjs} +13 -1
  94. package/dist/{chunk-WWIKMBRN.mjs → chunk-VNGH5MLF.mjs} +17 -1
  95. package/dist/{chunk-NNSAQX3U.mjs → chunk-VT4WFRHA.mjs} +1 -1
  96. package/dist/{chunk-UJZLSXUB.cjs → chunk-VU6AAZVY.cjs} +17 -1
  97. package/dist/{chunk-ADOAUDQ6.cjs → chunk-VXEEATVD.cjs} +2 -2
  98. package/dist/{chunk-RRMVL6CJ.mjs → chunk-W36M2BQ4.mjs} +1 -1
  99. package/dist/{chunk-4WQ6PGSJ.cjs → chunk-WEW2JVA4.cjs} +4 -4
  100. package/dist/{chunk-4E5WBPEG.mjs → chunk-WFRT7JPX.mjs} +8 -533
  101. package/dist/{chunk-VXAWRDK7.mjs → chunk-WLL43JMO.mjs} +1 -1
  102. package/dist/chunk-WW46B6HA.cjs +318 -0
  103. package/dist/{chunk-D3C5LBQY.cjs → chunk-WXJLNP33.cjs} +2 -2
  104. package/dist/{chunk-NDILNQ4L.cjs → chunk-XKG2BLFN.cjs} +2 -2
  105. package/dist/{chunk-W2YDNK66.cjs → chunk-XKVVMZP5.cjs} +2 -2
  106. package/dist/{chunk-Q5FYSK45.cjs → chunk-YR2VBEMO.cjs} +619 -500
  107. package/dist/{chunk-EXG5LD6B.mjs → chunk-ZJD2PN6Z.mjs} +10 -8
  108. package/dist/{chunk-G2TEB74S.cjs → chunk-ZXH4TS3F.cjs} +2 -2
  109. package/dist/{client-plugins-C8DjftDF.d.ts → client-plugins-BvlNhGEB.d.ts} +40 -7
  110. package/dist/{client-plugins-CV4eJ9De.d.mts → client-plugins-DUrIYX9B.d.mts} +40 -7
  111. package/dist/client-plugins.d.mts +1 -1
  112. package/dist/client-plugins.d.ts +1 -1
  113. package/dist/client.cjs +5 -5
  114. package/dist/client.d.mts +5 -5
  115. package/dist/client.d.ts +5 -5
  116. package/dist/client.mjs +4 -4
  117. package/dist/config.d.mts +1 -1
  118. package/dist/config.d.ts +1 -1
  119. package/dist/{devtools-KVOY2TCZ.mjs → devtools-JYJNOLPQ.mjs} +7 -5
  120. package/dist/{devtools-JXFQNWSH.cjs → devtools-VQWJANJV.cjs} +8 -6
  121. package/dist/docs.cjs +11 -9
  122. package/dist/docs.d.mts +20 -2
  123. package/dist/docs.d.ts +20 -2
  124. package/dist/docs.mjs +10 -8
  125. package/dist/headers.cjs +6 -4
  126. package/dist/headers.d.mts +11 -1
  127. package/dist/headers.d.ts +11 -1
  128. package/dist/headers.mjs +5 -3
  129. package/dist/index.cjs +52 -39
  130. package/dist/index.d.mts +15 -15
  131. package/dist/index.d.ts +15 -15
  132. package/dist/index.mjs +52 -39
  133. package/dist/integrations.cjs +4 -2
  134. package/dist/integrations.d.mts +1 -1
  135. package/dist/integrations.d.ts +1 -1
  136. package/dist/integrations.mjs +3 -1
  137. package/dist/internal/app-markdown-runtime.cjs +3 -3
  138. package/dist/internal/app-markdown-runtime.d.mts +2 -2
  139. package/dist/internal/app-markdown-runtime.d.ts +2 -2
  140. package/dist/internal/app-markdown-runtime.mjs +2 -2
  141. package/dist/internal/build-runtime.cjs +28 -27
  142. package/dist/internal/build-runtime.d.mts +3 -3
  143. package/dist/internal/build-runtime.d.ts +3 -3
  144. package/dist/internal/build-runtime.mjs +27 -26
  145. package/dist/internal/cli-runtime.cjs +10 -8
  146. package/dist/internal/cli-runtime.mjs +9 -7
  147. package/dist/internal/client-error-overlay.cjs +4 -4
  148. package/dist/internal/client-error-overlay.mjs +1 -1
  149. package/dist/internal/compression-runtime.d.mts +1 -1
  150. package/dist/internal/compression-runtime.d.ts +1 -1
  151. package/dist/internal/config-runtime.cjs +8 -6
  152. package/dist/internal/config-runtime.d.mts +2 -2
  153. package/dist/internal/config-runtime.d.ts +2 -2
  154. package/dist/internal/config-runtime.mjs +7 -5
  155. package/dist/internal/docs-precompiled-runtime.cjs +19 -13
  156. package/dist/internal/docs-precompiled-runtime.d.mts +5 -0
  157. package/dist/internal/docs-precompiled-runtime.d.ts +5 -0
  158. package/dist/internal/docs-precompiled-runtime.mjs +14 -8
  159. package/dist/internal/infra-analytics-runtime.cjs +5 -5
  160. package/dist/internal/infra-analytics-runtime.mjs +3 -3
  161. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  162. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  163. package/dist/internal/production-node-env.cjs +6 -2
  164. package/dist/internal/production-node-env.d.mts +10 -1
  165. package/dist/internal/production-node-env.d.ts +10 -1
  166. package/dist/internal/production-node-env.mjs +5 -1
  167. package/dist/internal/production-runtime.cjs +34 -14
  168. package/dist/internal/production-runtime.d.mts +51 -11
  169. package/dist/internal/production-runtime.d.ts +51 -11
  170. package/dist/internal/production-runtime.mjs +36 -16
  171. package/dist/markdown.cjs +8 -2
  172. package/dist/markdown.d.mts +1 -1
  173. package/dist/markdown.d.ts +1 -1
  174. package/dist/markdown.mjs +7 -1
  175. package/dist/middleware.cjs +9 -7
  176. package/dist/middleware.d.mts +24 -4
  177. package/dist/middleware.d.ts +24 -4
  178. package/dist/middleware.mjs +9 -7
  179. package/dist/navigation.cjs +4 -4
  180. package/dist/navigation.d.mts +4 -4
  181. package/dist/navigation.d.ts +4 -4
  182. package/dist/navigation.mjs +3 -3
  183. package/dist/plugin.cjs +21 -20
  184. package/dist/plugin.d.mts +1 -1
  185. package/dist/plugin.d.ts +1 -1
  186. package/dist/plugin.mjs +20 -19
  187. package/dist/{production-runtime-Du_FHb2-.d.mts → production-runtime-BQ4_WLwQ.d.mts} +1 -1
  188. package/dist/{production-runtime-C2kkrPVZ.d.ts → production-runtime-D2aMyzjr.d.ts} +1 -1
  189. package/dist/query/client.cjs +2 -2
  190. package/dist/query/client.mjs +1 -1
  191. package/dist/{render-plan-BnnPTpus.d.ts → render-plan-25p4hrj4.d.ts} +1 -1
  192. package/dist/{render-plan-Cgx7v8tJ.d.mts → render-plan-DtkXMN8D.d.mts} +1 -1
  193. package/dist/renderer-client.d.mts +3 -3
  194. package/dist/renderer-client.d.ts +3 -3
  195. package/dist/renderer.d.mts +13 -4
  196. package/dist/renderer.d.ts +13 -4
  197. package/dist/{request-sKayKcop.d.mts → request-DgCkIdcn.d.mts} +4 -2
  198. package/dist/{request-BNWr7r5e.d.ts → request-jF4jwx8f.d.ts} +4 -2
  199. package/dist/request.cjs +3 -3
  200. package/dist/request.d.mts +2 -2
  201. package/dist/request.d.ts +2 -2
  202. package/dist/request.mjs +2 -2
  203. package/dist/{route-rendering-Bx4Auw6Q.d.ts → route-rendering-Bji6S6a_.d.ts} +1 -1
  204. package/dist/{route-rendering-DWFp3Yq4.d.mts → route-rendering-CSBF78Ya.d.mts} +1 -1
  205. package/dist/{router-BK6K42Ij.d.mts → router-B09Ui3Qm.d.mts} +1 -1
  206. package/dist/{router-DnW_2tQi.d.ts → router-CPB9cXtG.d.ts} +1 -1
  207. package/dist/routes.d.mts +1 -1
  208. package/dist/routes.d.ts +1 -1
  209. package/dist/{runtime-DJDaCMd_.d.mts → runtime-CM6E6yuI.d.mts} +1 -1
  210. package/dist/{runtime-CA3Ei5k_.d.ts → runtime-EDMwLdjv.d.ts} +1 -1
  211. package/dist/server-fn.cjs +3 -3
  212. package/dist/server-fn.mjs +2 -2
  213. package/dist/server-plugins.cjs +5 -5
  214. package/dist/server-plugins.d.mts +2 -2
  215. package/dist/server-plugins.d.ts +2 -2
  216. package/dist/server-plugins.mjs +4 -4
  217. package/dist/server-query.cjs +4 -4
  218. package/dist/server-query.mjs +3 -3
  219. package/dist/server.cjs +47 -46
  220. package/dist/server.d.mts +7 -7
  221. package/dist/server.d.ts +7 -7
  222. package/dist/server.mjs +25 -24
  223. package/dist/{spa-router-Mwbd7g2L.d.ts → spa-router-B_N8XgVu.d.ts} +2 -2
  224. package/dist/{spa-router-D6fUA4Rn.d.mts → spa-router-Cgimzfbi.d.mts} +2 -2
  225. package/dist/testing.cjs +5 -5
  226. package/dist/testing.d.mts +1 -1
  227. package/dist/testing.d.ts +1 -1
  228. package/dist/testing.mjs +4 -4
  229. package/dist/theme/server.cjs +4 -4
  230. package/dist/theme/server.mjs +3 -3
  231. package/dist/{utils-BwVcAfUR.d.ts → utils-BNxAKAuT.d.ts} +1 -1
  232. package/dist/{utils-p9Hs-jCc.d.mts → utils-DZciYXYl.d.mts} +1 -1
  233. package/dist/version.cjs +2 -2
  234. package/dist/version.mjs +1 -1
  235. package/dist/vite.cjs +21 -20
  236. package/dist/vite.d.mts +1 -1
  237. package/dist/vite.d.ts +1 -1
  238. package/dist/vite.mjs +20 -19
  239. package/package.json +1 -1
  240. package/dist/chunk-655RLQQL.mjs +0 -43
  241. package/dist/chunk-MRMI32SN.cjs +0 -1157
  242. package/dist/chunk-MT763TDW.cjs +0 -43
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  collectFarmLlmsTxtPages
3
- } from "./chunk-DTSROJ5J.mjs";
3
+ } from "./chunk-HD5CF3OE.mjs";
4
4
  import {
5
5
  getFarmMarkdownMirrorPath,
6
6
  isFarmMarkdownMirrorExposed
7
- } from "./chunk-WWIKMBRN.mjs";
7
+ } from "./chunk-VNGH5MLF.mjs";
8
8
  import {
9
9
  _listFarmMCPCatalogs,
10
10
  _listFarmRegisteredMCPServers
@@ -15,7 +15,10 @@ var _chunkIK6LVLKCcjs = require('./chunk-IK6LVLKC.cjs');
15
15
  var _chunkHREOKQWTcjs = require('./chunk-HREOKQWT.cjs');
16
16
 
17
17
 
18
- var _chunkEUV4YR3Vcjs = require('./chunk-EUV4YR3V.cjs');
18
+ var _chunk2ZYGC6SScjs = require('./chunk-2ZYGC6SS.cjs');
19
+
20
+
21
+ var _chunkSGBJ247Qcjs = require('./chunk-SGBJ247Q.cjs');
19
22
 
20
23
 
21
24
  var _chunkKIIMAWOJcjs = require('./chunk-KIIMAWOJ.cjs');
@@ -24,6 +27,12 @@ var _chunkKIIMAWOJcjs = require('./chunk-KIIMAWOJ.cjs');
24
27
  var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
25
28
 
26
29
  // src/docs/handler.ts
30
+
31
+
32
+
33
+
34
+
35
+
27
36
  var _fs = require('fs');
28
37
  var _path = require('path'); var _path2 = _interopRequireDefault(_path);
29
38
  var _marked = require('marked');
@@ -718,15 +727,46 @@ function getRequestSlug(docs, request) {
718
727
  return normalizeSlug(pathname.slice(entry.length));
719
728
  }
720
729
  _chunkS3JO3N4Hcjs.__name.call(void 0, getRequestSlug, "getRequestSlug");
730
+ function isDiscoverableDocsEntryName(name) {
731
+ return Boolean(name) && !name.startsWith(".") && name !== "node_modules";
732
+ }
733
+ _chunkS3JO3N4Hcjs.__name.call(void 0, isDiscoverableDocsEntryName, "isDiscoverableDocsEntryName");
734
+ function isDiscoverableDocsFile(contentDir, filePath) {
735
+ const segments = _path2.default.relative(contentDir, filePath).split(_path2.default.sep);
736
+ let dir = contentDir;
737
+ for (const [index, name] of segments.entries()) {
738
+ if (!isDiscoverableDocsEntryName(name)) return false;
739
+ let entry;
740
+ try {
741
+ entry = _fs.readdirSync.call(void 0, dir, { withFileTypes: true }).find(
742
+ (candidate) => candidate.name === name
743
+ );
744
+ } catch (e7) {
745
+ return false;
746
+ }
747
+ const isLast = index === segments.length - 1;
748
+ if (!entry || !(isLast ? entry.isFile() : entry.isDirectory())) return false;
749
+ dir = _path2.default.join(dir, name);
750
+ }
751
+ return true;
752
+ }
753
+ _chunkS3JO3N4Hcjs.__name.call(void 0, isDiscoverableDocsFile, "isDiscoverableDocsFile");
721
754
  function findDocsPageFile(contentDir, slug) {
722
- const segments = slug ? slug.split("/").filter(Boolean) : [];
723
- if (!segments.every(isSafeSegment)) return null;
755
+ const canonicalSlug = trimSlashes(slug);
756
+ const segments = canonicalSlug ? canonicalSlug.split("/") : [];
757
+ if (!segments.every((segment) => isSafeSegment(segment) && isDiscoverableDocsEntryName(segment))) {
758
+ return null;
759
+ }
724
760
  const slugDir = _path2.default.join(contentDir, ...segments);
725
761
  const candidates = segments.length === 0 ? DOCS_FILE_NAMES.map((filename) => _path2.default.join(contentDir, filename)) : [
726
762
  ...DOCS_FILE_NAMES.map((filename) => _path2.default.join(slugDir, filename)),
727
- ...DOCS_FILE_EXTENSIONS2.map((extension) => _path2.default.join(contentDir, `${slug}${extension}`))
763
+ ...DOCS_FILE_EXTENSIONS2.map(
764
+ (extension) => _path2.default.join(contentDir, `${canonicalSlug}${extension}`)
765
+ )
728
766
  ];
729
767
  for (const candidate of candidates) {
768
+ if (pathToSlug(contentDir, candidate) !== canonicalSlug) continue;
769
+ if (!isDiscoverableDocsFile(contentDir, candidate)) continue;
730
770
  const safePath = resolveExistingFileInside(contentDir, candidate);
731
771
  if (safePath) {
732
772
  return safePath;
@@ -784,6 +824,10 @@ function loadFarmDocsPage(contentDir, docs, slug) {
784
824
  };
785
825
  }
786
826
  _chunkS3JO3N4Hcjs.__name.call(void 0, loadFarmDocsPage, "loadFarmDocsPage");
827
+ function getFarmDocsMarkdownPath(href) {
828
+ return href === "/" ? "/.md" : `${href}.md`;
829
+ }
830
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmDocsMarkdownPath, "getFarmDocsMarkdownPath");
787
831
  function createDocsHref(entry, slug) {
788
832
  const normalizedEntry = normalizeEntry2(entry);
789
833
  const normalizedSlug = trimSlashes(slug);
@@ -861,8 +905,8 @@ function getDocsDescription(docs) {
861
905
  return _optionalChain([docs, 'access', _51 => _51.config, 'access', _52 => _52.metadata, 'optionalAccess', _53 => _53.description]);
862
906
  }
863
907
  _chunkS3JO3N4Hcjs.__name.call(void 0, getDocsDescription, "getDocsDescription");
864
- function getLoadedDocsPages(contentDir, docs) {
865
- return discoverFarmDocsPages(contentDir, docs).map((page) => loadFarmDocsPage(contentDir, docs, page.slug)).filter((page) => Boolean(page));
908
+ function getLoadedDocsPages(contentDir, docs, isPathGuarded) {
909
+ return discoverFarmDocsPages(contentDir, docs).filter((page) => !_optionalChain([isPathGuarded, 'optionalCall', _54 => _54(page.href)])).map((page) => loadFarmDocsPage(contentDir, docs, page.slug)).filter((page) => Boolean(page));
866
910
  }
867
911
  _chunkS3JO3N4Hcjs.__name.call(void 0, getLoadedDocsPages, "getLoadedDocsPages");
868
912
  function toDocsLlmsPage(page) {
@@ -942,7 +986,7 @@ function resolveReadingTimeDisplayConfig(docs) {
942
986
  _chunkS3JO3N4Hcjs.__name.call(void 0, resolveReadingTimeDisplayConfig, "resolveReadingTimeDisplayConfig");
943
987
  function countMarkdownWords(body, includeCode) {
944
988
  const readable = (includeCode ? body : body.replace(/```[\s\S]*?```/g, " ").replace(/`[^`]*`/g, " ")).replace(/!\[[^\]]*]\([^)]*\)/g, " ").replace(/\[([^\]]+)]\([^)]*\)/g, "$1").replace(/<[^>]+>/g, " ").replace(/[#>*_~`|:-]/g, " ");
945
- return _nullishCoalesce(_optionalChain([readable, 'access', _54 => _54.match, 'call', _55 => _55(/[A-Za-z0-9]+(?:[-'][A-Za-z0-9]+)*/g), 'optionalAccess', _56 => _56.length]), () => ( 0));
989
+ return _nullishCoalesce(_optionalChain([readable, 'access', _55 => _55.match, 'call', _56 => _56(/[A-Za-z0-9]+(?:[-'][A-Za-z0-9]+)*/g), 'optionalAccess', _57 => _57.length]), () => ( 0));
946
990
  }
947
991
  _chunkS3JO3N4Hcjs.__name.call(void 0, countMarkdownWords, "countMarkdownWords");
948
992
  function renderReadingTimeMeta(page, docs) {
@@ -1057,10 +1101,10 @@ function getDocsDiscoveryOptions(docs, request) {
1057
1101
  };
1058
1102
  }
1059
1103
  _chunkS3JO3N4Hcjs.__name.call(void 0, getDocsDiscoveryOptions, "getDocsDiscoveryOptions");
1060
- function createFarmDocsPublicResponse(contentDir, docs, request) {
1104
+ function createFarmDocsPublicResponse(contentDir, docs, request, isPathGuarded) {
1061
1105
  const url = new URL(request.url);
1062
1106
  let loadedPages;
1063
- const getPages = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, () => _nullishCoalesce(loadedPages, () => ( (loadedPages = getLoadedDocsPages(contentDir, docs)))), "getPages");
1107
+ const getPages = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, () => _nullishCoalesce(loadedPages, () => ( (loadedPages = getLoadedDocsPages(contentDir, docs, isPathGuarded)))), "getPages");
1064
1108
  const sitemapManifest = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, () => _chunkIK6LVLKCcjs.docsEngine.call(void 0, ).buildDocsSitemapManifest({
1065
1109
  pages: getPages().map(toDocsSitemapPage),
1066
1110
  entry: docs.entry,
@@ -1181,11 +1225,11 @@ function shouldReturnMarkdown(request) {
1181
1225
  if (url.pathname.endsWith(".md")) return true;
1182
1226
  const accept = request.headers.get("accept");
1183
1227
  const markdown = Math.max(
1184
- _chunkEUV4YR3Vcjs.farmAcceptQuality.call(void 0, accept, "text/markdown"),
1185
- _chunkEUV4YR3Vcjs.farmAcceptQuality.call(void 0, accept, "text/plain")
1228
+ _chunkSGBJ247Qcjs.farmAcceptQuality.call(void 0, accept, "text/markdown"),
1229
+ _chunkSGBJ247Qcjs.farmAcceptQuality.call(void 0, accept, "text/plain")
1186
1230
  );
1187
1231
  if (markdown <= 0) return false;
1188
- return markdown >= _chunkEUV4YR3Vcjs.farmAcceptQuality.call(void 0, accept, "text/html", { wildcards: true });
1232
+ return markdown >= _chunkSGBJ247Qcjs.farmAcceptQuality.call(void 0, accept, "text/html", { wildcards: true });
1189
1233
  }
1190
1234
  _chunkS3JO3N4Hcjs.__name.call(void 0, shouldReturnMarkdown, "shouldReturnMarkdown");
1191
1235
  function escapeAttribute(value) {
@@ -1212,7 +1256,7 @@ function stripHtml(value) {
1212
1256
  _chunkS3JO3N4Hcjs.__name.call(void 0, stripHtml, "stripHtml");
1213
1257
  function getCodeFence(line) {
1214
1258
  const match = /^(?: {0,3})(`{3,}|~{3,})/.exec(line);
1215
- const value = _optionalChain([match, 'optionalAccess', _57 => _57[1]]);
1259
+ const value = _optionalChain([match, 'optionalAccess', _58 => _58[1]]);
1216
1260
  if (!value) return null;
1217
1261
  return { marker: value[0], length: value.length };
1218
1262
  }
@@ -1297,16 +1341,16 @@ function isCodePathLabel(label) {
1297
1341
  _chunkS3JO3N4Hcjs.__name.call(void 0, isCodePathLabel, "isCodePathLabel");
1298
1342
  function parseCodeInfo(info) {
1299
1343
  const source = (info || "").trim();
1300
- const language = _optionalChain([source, 'access', _58 => _58.match, 'call', _59 => _59(/^\S+/), 'optionalAccess', _60 => _60[0]]) || "text";
1301
- const explicitLabel = _optionalChain([source, 'access', _61 => _61.match, 'call', _62 => _62(/\b(?:title|filename|file|label|name)=["']([^"']+)["']/), 'optionalAccess', _63 => _63[1], 'optionalAccess', _64 => _64.trim, 'call', _65 => _65()]);
1344
+ const language = _optionalChain([source, 'access', _59 => _59.match, 'call', _60 => _60(/^\S+/), 'optionalAccess', _61 => _61[0]]) || "text";
1345
+ const explicitLabel = _optionalChain([source, 'access', _62 => _62.match, 'call', _63 => _63(/\b(?:title|filename|file|label|name)=["']([^"']+)["']/), 'optionalAccess', _64 => _64[1], 'optionalAccess', _65 => _65.trim, 'call', _66 => _66()]);
1302
1346
  return { language, label: explicitLabel || language, hasExplicitLabel: Boolean(explicitLabel) };
1303
1347
  }
1304
1348
  _chunkS3JO3N4Hcjs.__name.call(void 0, parseCodeInfo, "parseCodeInfo");
1305
1349
  function getStandaloneCodeLabel(line) {
1306
1350
  const trimmed = line.trim();
1307
1351
  const match = /^(?:\*\*([^*]+)\*\*|__([^_]+)__|`([^`]+)`)$/u.exec(trimmed);
1308
- const label = _optionalChain([match, 'optionalAccess', _66 => _66[1]]) || _optionalChain([match, 'optionalAccess', _67 => _67[2]]) || _optionalChain([match, 'optionalAccess', _68 => _68[3]]);
1309
- return _optionalChain([label, 'optionalAccess', _69 => _69.trim, 'call', _70 => _70()]) || null;
1352
+ const label = _optionalChain([match, 'optionalAccess', _67 => _67[1]]) || _optionalChain([match, 'optionalAccess', _68 => _68[2]]) || _optionalChain([match, 'optionalAccess', _69 => _69[3]]);
1353
+ return _optionalChain([label, 'optionalAccess', _70 => _70.trim, 'call', _71 => _71()]) || null;
1310
1354
  }
1311
1355
  _chunkS3JO3N4Hcjs.__name.call(void 0, getStandaloneCodeLabel, "getStandaloneCodeLabel");
1312
1356
  function hasCodeFenceTitle(info) {
@@ -1438,7 +1482,7 @@ function getThemeName(docs) {
1438
1482
  }
1439
1483
  _chunkS3JO3N4Hcjs.__name.call(void 0, getThemeName, "getThemeName");
1440
1484
  function getThemeTocDepth(docs) {
1441
- const toc = _optionalChain([getThemeUI, 'call', _71 => _71(docs), 'access', _72 => _72.layout, 'optionalAccess', _73 => _73.toc]);
1485
+ const toc = _optionalChain([getThemeUI, 'call', _72 => _72(docs), 'access', _73 => _73.layout, 'optionalAccess', _74 => _74.toc]);
1442
1486
  return toc && typeof toc === "object" && typeof toc.depth === "number" ? toc.depth : 3;
1443
1487
  }
1444
1488
  _chunkS3JO3N4Hcjs.__name.call(void 0, getThemeTocDepth, "getThemeTocDepth");
@@ -1593,7 +1637,7 @@ function renderSidebarLabel(docs, icon, label, className) {
1593
1637
  }
1594
1638
  _chunkS3JO3N4Hcjs.__name.call(void 0, renderSidebarLabel, "renderSidebarLabel");
1595
1639
  function getSidebarPageLabel(item, configured) {
1596
- if (_optionalChain([configured, 'optionalAccess', _74 => _74.label])) return configured.label;
1640
+ if (_optionalChain([configured, 'optionalAccess', _75 => _75.label])) return configured.label;
1597
1641
  if (item.slug === "") return "Why?";
1598
1642
  if (item.slug === "integrations") return "Overview";
1599
1643
  if (item.slug === "integrations/ui-registry") return "UI Registry";
@@ -1606,7 +1650,7 @@ function getSidebarPageLabel(item, configured) {
1606
1650
  _chunkS3JO3N4Hcjs.__name.call(void 0, getSidebarPageLabel, "getSidebarPageLabel");
1607
1651
  function renderSidebarLink(item, activeHref, docs, configured) {
1608
1652
  const active = item.href === activeHref;
1609
- return `<a class="fd-sidebar-link${active ? " fd-sidebar-link-active" : ""}" data-active="${active ? "true" : "false"}" href="${escapeAttribute(item.href)}">${renderSidebarLabel(docs, _optionalChain([configured, 'optionalAccess', _75 => _75.icon]), getSidebarPageLabel(item, configured), "sidebar-link-label fd-sidebar-link-label")}</a>`;
1653
+ return `<a class="fd-sidebar-link${active ? " fd-sidebar-link-active" : ""}" data-active="${active ? "true" : "false"}" href="${escapeAttribute(item.href)}">${renderSidebarLabel(docs, _optionalChain([configured, 'optionalAccess', _76 => _76.icon]), getSidebarPageLabel(item, configured), "sidebar-link-label fd-sidebar-link-label")}</a>`;
1610
1654
  }
1611
1655
  _chunkS3JO3N4Hcjs.__name.call(void 0, renderSidebarLink, "renderSidebarLink");
1612
1656
  function collectConfiguredSidebarPages(items, maps, seen = /* @__PURE__ */ new Set()) {
@@ -1786,11 +1830,11 @@ function renderDocsSearchTrigger(showIcon = true, className = "") {
1786
1830
  _chunkS3JO3N4Hcjs.__name.call(void 0, renderDocsSearchTrigger, "renderDocsSearchTrigger");
1787
1831
  function renderDocsSearchMount(clientEntry) {
1788
1832
  return `<div id="farm-docs-search-root" data-farm-docs-search-root data-api="/api/docs"></div>
1789
- <script type="module" src="${escapeAttribute(clientEntry)}"></script>`;
1833
+ ${_chunk2ZYGC6SScjs.stampFarmCspNonce.call(void 0, `<script type="module" src="${escapeAttribute(clientEntry)}"></script>`)}`;
1790
1834
  }
1791
1835
  _chunkS3JO3N4Hcjs.__name.call(void 0, renderDocsSearchMount, "renderDocsSearchMount");
1792
1836
  function renderDocsSearchBootstrapScript() {
1793
- return `<script>${_chunkMWWVKDW3cjs.generateFarmDocsSearchBootstrapRuntime.call(void 0, )}</script>`;
1837
+ return _chunk2ZYGC6SScjs.stampFarmCspNonce.call(void 0, `<script>${_chunkMWWVKDW3cjs.generateFarmDocsSearchBootstrapRuntime.call(void 0, )}</script>`);
1794
1838
  }
1795
1839
  _chunkS3JO3N4Hcjs.__name.call(void 0, renderDocsSearchBootstrapScript, "renderDocsSearchBootstrapScript");
1796
1840
  function renderPixelToc(items) {
@@ -1820,9 +1864,9 @@ function renderDocsHashRuntimeScript() {
1820
1864
  }
1821
1865
  _chunkS3JO3N4Hcjs.__name.call(void 0, renderDocsHashRuntimeScript, "renderDocsHashRuntimeScript");
1822
1866
  function renderDocsRuntimeScripts(docs) {
1823
- return `${renderDocsRuntimeScript(docs)}
1867
+ return _chunk2ZYGC6SScjs.stampFarmCspNonce.call(void 0, `${renderDocsRuntimeScript(docs)}
1824
1868
  ${renderDocsHashRuntimeScript()}
1825
- ${renderDocsPageActionsRuntimeScript()}`;
1869
+ ${renderDocsPageActionsRuntimeScript()}`);
1826
1870
  }
1827
1871
  _chunkS3JO3N4Hcjs.__name.call(void 0, renderDocsRuntimeScripts, "renderDocsRuntimeScripts");
1828
1872
  function renderFarmDocsFontPreloads(fontAssets) {
@@ -1837,8 +1881,8 @@ function renderFarmDocsFontPreloadHeader(fontAssets) {
1837
1881
  _chunkS3JO3N4Hcjs.__name.call(void 0, renderFarmDocsFontPreloadHeader, "renderFarmDocsFontPreloadHeader");
1838
1882
  function getFarmLayoutFontPreloads(layoutFonts) {
1839
1883
  const seen = /* @__PURE__ */ new Set();
1840
- return [_optionalChain([layoutFonts, 'optionalAccess', _76 => _76.body]), _optionalChain([layoutFonts, 'optionalAccess', _77 => _77.code])].flatMap(
1841
- (font) => (_optionalChain([font, 'optionalAccess', _78 => _78.preloads]) || []).filter(({ href }) => {
1884
+ return [_optionalChain([layoutFonts, 'optionalAccess', _77 => _77.body]), _optionalChain([layoutFonts, 'optionalAccess', _78 => _78.code])].flatMap(
1885
+ (font) => (_optionalChain([font, 'optionalAccess', _79 => _79.preloads]) || []).filter(({ href }) => {
1842
1886
  if (seen.has(href)) return false;
1843
1887
  seen.add(href);
1844
1888
  return true;
@@ -1852,7 +1896,7 @@ function renderFarmLayoutFontPreloadHeader(layoutFonts) {
1852
1896
  _chunkS3JO3N4Hcjs.__name.call(void 0, renderFarmLayoutFontPreloadHeader, "renderFarmLayoutFontPreloadHeader");
1853
1897
  function renderPixelDocsHtml(page, pages, docs, clientEntry, faviconHref, requestUrl, fontAssets, fontStylesheetHref, globalStylesheetHref) {
1854
1898
  const navTitle = typeof docs.config.nav === "object" && docs.config.nav && "title" in docs.config.nav ? String(docs.config.nav.title || "Docs") : "Docs";
1855
- const description = page.description || _optionalChain([docs, 'access', _79 => _79.config, 'access', _80 => _80.metadata, 'optionalAccess', _81 => _81.description]) || "";
1899
+ const description = page.description || _optionalChain([docs, 'access', _80 => _80.config, 'access', _81 => _81.metadata, 'optionalAccess', _82 => _82.description]) || "";
1856
1900
  const renderedMarkdown = renderMarkdownDocument(page.body, getThemeTocDepth(docs));
1857
1901
  const tocItems = renderedMarkdown.tocItems;
1858
1902
  const themeName = getThemeName(docs);
@@ -1927,14 +1971,16 @@ function createFarmDocsHandler(docs, options) {
1927
1971
  const fontAssets = _nullishCoalesce(options.fontAssets, () => ( _chunkHREOKQWTcjs.toFarmDocsPublicFontAssets.call(void 0, _chunkHREOKQWTcjs.resolveFarmDocsFontAssets.call(void 0, options.root))));
1928
1972
  const fallbackFontPreloadHeader = renderFarmDocsFontPreloadHeader(fontAssets);
1929
1973
  return /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, async function handleFarmDocsRequest(request) {
1930
- if (!_optionalChain([docs, 'optionalAccess', _82 => _82.enabled]) || request.method !== "GET" && request.method !== "HEAD") return null;
1974
+ if (!_optionalChain([docs, 'optionalAccess', _83 => _83.enabled]) || request.method !== "GET" && request.method !== "HEAD") return null;
1931
1975
  await _chunkIK6LVLKCcjs.loadFarmDocsEngine.call(void 0, );
1932
1976
  const contentDir = resolveFarmDocsContentDir(docs, options);
1933
1977
  const requestUrl = new URL(request.url);
1934
1978
  const socialImageSlug = getFarmDocsSocialImageSlug(docs, requestUrl);
1935
1979
  if (socialImageSlug !== null) {
1936
1980
  const socialImagePage = loadFarmDocsPage(contentDir, docs, socialImageSlug);
1937
- if (!socialImagePage || !isFarmDocsSocialImageEnabled(socialImagePage, docs) || getFarmDocsCustomSocialImage(socialImagePage)) {
1981
+ if (!socialImagePage || // The image sits outside the page's URL, where its guard does not reach, and
1982
+ // draws the page's title.
1983
+ _optionalChain([options, 'access', _84 => _84.isPathGuarded, 'optionalCall', _85 => _85(socialImagePage.href)]) || !isFarmDocsSocialImageEnabled(socialImagePage, docs) || getFarmDocsCustomSocialImage(socialImagePage)) {
1938
1984
  return null;
1939
1985
  }
1940
1986
  const descriptor = createFarmDocsSocialImageDescriptor(socialImagePage, docs, requestUrl);
@@ -1953,12 +1999,20 @@ function createFarmDocsHandler(docs, options) {
1953
1999
  if (request.method === "HEAD") return new Response(null, { status: 200, headers });
1954
2000
  return new Response(renderFarmDocsSocialImageSvg(descriptor), { status: 200, headers });
1955
2001
  }
1956
- const publicResponse = createFarmDocsPublicResponse(contentDir, docs, request);
2002
+ const publicResponse = createFarmDocsPublicResponse(
2003
+ contentDir,
2004
+ docs,
2005
+ request,
2006
+ options.isPathGuarded
2007
+ );
1957
2008
  if (publicResponse) return omitFarmDocsHeadBody(request, publicResponse);
1958
2009
  if (!isFarmDocsRequest(docs, request)) return null;
1959
2010
  const page = loadPage(contentDir, docs, request);
1960
2011
  if (!page) return null;
1961
2012
  const negotiatesAccept = !requestUrl.pathname.endsWith(".md");
2013
+ if (!negotiatesAccept && _optionalChain([options, 'access', _86 => _86.isPathGuarded, 'optionalCall', _87 => _87(page.href)]) && !options.isPathGuarded(getFarmDocsMarkdownPath(page.href))) {
2014
+ return null;
2015
+ }
1962
2016
  if (shouldReturnMarkdown(request)) {
1963
2017
  const origin = new URL(request.url).origin;
1964
2018
  return omitFarmDocsHeadBody(
@@ -1981,8 +2035,8 @@ function createFarmDocsHandler(docs, options) {
1981
2035
  );
1982
2036
  }
1983
2037
  const pathname = new URL(request.url).pathname;
1984
- const layoutFonts = await _optionalChain([options, 'access', _83 => _83.resolveLayoutFonts, 'optionalCall', _84 => _84(pathname)]);
1985
- const usesLayoutFonts = Boolean(_optionalChain([layoutFonts, 'optionalAccess', _85 => _85.body]) || _optionalChain([layoutFonts, 'optionalAccess', _86 => _86.code]));
2038
+ const layoutFonts = await _optionalChain([options, 'access', _88 => _88.resolveLayoutFonts, 'optionalCall', _89 => _89(pathname)]);
2039
+ const usesLayoutFonts = Boolean(_optionalChain([layoutFonts, 'optionalAccess', _90 => _90.body]) || _optionalChain([layoutFonts, 'optionalAccess', _91 => _91.code]));
1986
2040
  const activeFontAssets = usesLayoutFonts ? [] : fontAssets;
1987
2041
  const fontPreloadHeader = usesLayoutFonts ? renderFarmLayoutFontPreloadHeader(layoutFonts) : fallbackFontPreloadHeader;
1988
2042
  return omitFarmDocsHeadBody(
@@ -2025,4 +2079,5 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDocsHandler, "createFarmDocsHand
2025
2079
 
2026
2080
 
2027
2081
 
2028
- exports.FARM_DOCS_LAST_MODIFIED_MANIFEST = FARM_DOCS_LAST_MODIFIED_MANIFEST; exports.createFarmDocsLastModifiedManifest = createFarmDocsLastModifiedManifest; exports.isFarmDocsRequest = isFarmDocsRequest; exports.resolveFarmDocsContentDir = resolveFarmDocsContentDir; exports.getFarmDocsRouteTypeEntries = getFarmDocsRouteTypeEntries; exports.getFarmDocsDocumentNavigationMatchers = getFarmDocsDocumentNavigationMatchers; exports.loadFarmDocsPage = loadFarmDocsPage; exports.discoverFarmDocsPages = discoverFarmDocsPages; exports.toFarmDocsMarkdownPage = toFarmDocsMarkdownPage; exports.createFarmDocsHandler = createFarmDocsHandler;
2082
+
2083
+ exports.FARM_DOCS_LAST_MODIFIED_MANIFEST = FARM_DOCS_LAST_MODIFIED_MANIFEST; exports.createFarmDocsLastModifiedManifest = createFarmDocsLastModifiedManifest; exports.isFarmDocsRequest = isFarmDocsRequest; exports.resolveFarmDocsContentDir = resolveFarmDocsContentDir; exports.getFarmDocsRouteTypeEntries = getFarmDocsRouteTypeEntries; exports.getFarmDocsDocumentNavigationMatchers = getFarmDocsDocumentNavigationMatchers; exports.loadFarmDocsPage = loadFarmDocsPage; exports.getFarmDocsMarkdownPath = getFarmDocsMarkdownPath; exports.discoverFarmDocsPages = discoverFarmDocsPages; exports.toFarmDocsMarkdownPage = toFarmDocsMarkdownPage; exports.createFarmDocsHandler = createFarmDocsHandler;
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  _setAppRequestView,
3
+ _setCspNonceResolver,
3
4
  _setCurrentRequestResolver
4
- } from "./chunk-S3VWVTVA.mjs";
5
+ } from "./chunk-QRKIMN7T.mjs";
5
6
  import {
6
7
  __name
7
8
  } from "./chunk-LPEX4YW6.mjs";
@@ -67,6 +68,22 @@ function getAppRequestView(request) {
67
68
  }
68
69
  __name(getAppRequestView, "getAppRequestView");
69
70
  _setCurrentRequestResolver(() => requestStore.getStore());
71
+ var CSP_NONCE_STORAGE_KEY = /* @__PURE__ */ Symbol.for("@farm.js/core/csp-nonce-storage");
72
+ function getCspNonceStore() {
73
+ const runtime = globalThis;
74
+ const existing = runtime[CSP_NONCE_STORAGE_KEY];
75
+ if (existing instanceof AsyncLocalStorage) return existing;
76
+ const storage = new AsyncLocalStorage();
77
+ runtime[CSP_NONCE_STORAGE_KEY] = storage;
78
+ return storage;
79
+ }
80
+ __name(getCspNonceStore, "getCspNonceStore");
81
+ var cspNonceStore = getCspNonceStore();
82
+ _setCspNonceResolver(() => cspNonceStore.getStore());
83
+ function _runWithFarmCspNonce(nonce, fn) {
84
+ return nonce ? cspNonceStore.run(nonce, fn) : fn();
85
+ }
86
+ __name(_runWithFarmCspNonce, "_runWithFarmCspNonce");
70
87
  _setAppRequestView(getAppRequestView);
71
88
  function resolveFarmRequestURL(req, options = {}) {
72
89
  if (options.origin) {
@@ -169,6 +186,7 @@ function getCurrentRequestOrNull() {
169
186
  __name(getCurrentRequestOrNull, "getCurrentRequestOrNull");
170
187
 
171
188
  export {
189
+ _runWithFarmCspNonce,
172
190
  resolveFarmRequestURL,
173
191
  resolveFarmWebRequestOrigin,
174
192
  createWebRequestFromFarmRequest,
@@ -26,13 +26,15 @@ var _chunkPSV6XKPOcjs = require('./chunk-PSV6XKPO.cjs');
26
26
 
27
27
 
28
28
 
29
+ var _chunkQTXBII4Zcjs = require('./chunk-QTXBII4Z.cjs');
29
30
 
30
31
 
32
+ var _chunkWEW2JVA4cjs = require('./chunk-WEW2JVA4.cjs');
31
33
 
32
- var _chunkMRMI32SNcjs = require('./chunk-MRMI32SN.cjs');
33
34
 
34
35
 
35
- var _chunk4WQ6PGSJcjs = require('./chunk-4WQ6PGSJ.cjs');
36
+
37
+ var _chunk2ZYGC6SScjs = require('./chunk-2ZYGC6SS.cjs');
36
38
 
37
39
 
38
40
  var _chunkYFPGHF5Fcjs = require('./chunk-YFPGHF5F.cjs');
@@ -51,7 +53,7 @@ var _chunkVEKFLAQMcjs = require('./chunk-VEKFLAQM.cjs');
51
53
  var _chunkOHY2ZWUGcjs = require('./chunk-OHY2ZWUG.cjs');
52
54
 
53
55
 
54
- var _chunkEUV4YR3Vcjs = require('./chunk-EUV4YR3V.cjs');
56
+ var _chunkSGBJ247Qcjs = require('./chunk-SGBJ247Q.cjs');
55
57
 
56
58
 
57
59
  var _chunkUYIHRDE4cjs = require('./chunk-UYIHRDE4.cjs');
@@ -63,7 +65,7 @@ var _chunkSDOTRX3Vcjs = require('./chunk-SDOTRX3V.cjs');
63
65
  var _chunkOI6CMLWXcjs = require('./chunk-OI6CMLWX.cjs');
64
66
 
65
67
 
66
- var _chunkUJZLSXUBcjs = require('./chunk-UJZLSXUB.cjs');
68
+ var _chunkVU6AAZVYcjs = require('./chunk-VU6AAZVY.cjs');
67
69
 
68
70
 
69
71
  var _chunkKIIMAWOJcjs = require('./chunk-KIIMAWOJ.cjs');
@@ -138,13 +140,13 @@ function resolveFarmAgentConfig(input, context = {}) {
138
140
  const jsonLd = _optionalChain([input, 'optionalAccess', _ => _.jsonLd]);
139
141
  return {
140
142
  jsonLd: jsonLd === void 0 ? { ...DEFAULT_JSON_LD } : !jsonLd ? false : jsonLd === true ? {} : jsonLd,
141
- noindexPreviews: _chunkMRMI32SNcjs.resolveFarmNoindexPreviews.call(void 0, _optionalChain([input, 'optionalAccess', _2 => _2.noindexPreviews])),
143
+ noindexPreviews: _chunkQTXBII4Zcjs.resolveFarmNoindexPreviews.call(void 0, _optionalChain([input, 'optionalAccess', _2 => _2.noindexPreviews])),
142
144
  // The docs engine answers /llms.txt with its own pages; a default here would replace it.
143
145
  // llms-full.txt renders every listed page, so it stays opt-in.
144
- llmsTxt: _chunk4WQ6PGSJcjs.resolveFarmLlmsTxtConfig.call(void 0, _nullishCoalesce(_optionalChain([input, 'optionalAccess', _3 => _3.llmsTxt]), () => ( (context.docs ? false : { full: false })))),
146
+ llmsTxt: _chunkWEW2JVA4cjs.resolveFarmLlmsTxtConfig.call(void 0, _nullishCoalesce(_optionalChain([input, 'optionalAccess', _3 => _3.llmsTxt]), () => ( (context.docs ? false : { full: false })))),
145
147
  // Same rule as llms.txt: the docs engine answers /sitemap.xml with its own pages.
146
- sitemap: _chunkMRMI32SNcjs.resolveFarmAgentSitemap.call(void 0, _nullishCoalesce(_optionalChain([input, 'optionalAccess', _4 => _4.sitemap]), () => ( !context.docs))),
147
- crawlers: _chunkMRMI32SNcjs.resolveFarmAgentCrawlers.call(void 0, _optionalChain([input, 'optionalAccess', _5 => _5.crawlers])),
148
+ sitemap: _chunkQTXBII4Zcjs.resolveFarmAgentSitemap.call(void 0, _nullishCoalesce(_optionalChain([input, 'optionalAccess', _4 => _4.sitemap]), () => ( !context.docs))),
149
+ crawlers: _chunkQTXBII4Zcjs.resolveFarmAgentCrawlers.call(void 0, _optionalChain([input, 'optionalAccess', _5 => _5.crawlers])),
148
150
  apiCatalog: resolveFarmAgentBoolean(_optionalChain([input, 'optionalAccess', _6 => _6.apiCatalog]), "apiCatalog", false),
149
151
  aiCatalog: resolveFarmAgentBoolean(_optionalChain([input, 'optionalAccess', _7 => _7.aiCatalog]), "aiCatalog", true),
150
152
  manifest: resolveFarmAgentBoolean(_optionalChain([input, 'optionalAccess', _8 => _8.manifest]), "manifest", true),
@@ -697,9 +699,9 @@ async function resolveConfig(userConfig, mode) {
697
699
  const routeRules = _chunkQ5B3KJBPcjs.normalizeRouteRules.call(void 0, userConfig.routeRules);
698
700
  const routeRuleRedirects = _chunkQ5B3KJBPcjs.routeRulesToRedirects.call(void 0, routeRules);
699
701
  const routeRuleHeaders = _chunkQ5B3KJBPcjs.routeRulesToHeaders.call(void 0, routeRules);
700
- const security = _chunkMRMI32SNcjs.resolveFarmSecurityConfig.call(void 0, userConfig.security);
701
- const securityHeader = _chunkMRMI32SNcjs.getFarmSecurityHeader.call(void 0, security);
702
- if (_chunkMRMI32SNcjs.farmCspBlocksFrameworkInlineScripts.call(void 0, security)) {
702
+ const security = _chunk2ZYGC6SScjs.resolveFarmSecurityConfig.call(void 0, userConfig.security);
703
+ const securityHeader = _chunk2ZYGC6SScjs.getFarmSecurityHeader.call(void 0, security);
704
+ if (_chunk2ZYGC6SScjs.farmCspBlocksFrameworkInlineScripts.call(void 0, security)) {
703
705
  _chunk5QIKR7RRcjs.logger.warn(
704
706
  "security.csp blocks the inline scripts Farm injects for theming and hydration. Set security.csp.nonce to true for managed dynamic nonces and prerendered hashes, or make the governing script directive allow 'unsafe-inline' without a nonce, hash, or 'strict-dynamic' source."
705
707
  );
@@ -709,7 +711,7 @@ async function resolveConfig(userConfig, mode) {
709
711
  const srcDir = userConfig.srcDir || "src";
710
712
  _chunk6MVFL3R5cjs.setFarmProjectSourceDir.call(void 0, root, srcDir);
711
713
  const docs = await resolveDocsConfig(userConfig.docs, { root, srcDir });
712
- const md = _chunkEUV4YR3Vcjs.resolveMarkdownConfig.call(void 0, userConfig.md);
714
+ const md = _chunkSGBJ247Qcjs.resolveMarkdownConfig.call(void 0, userConfig.md);
713
715
  const mdx = _chunkOHY2ZWUGcjs.resolveMdxConfig.call(void 0, userConfig.mdx);
714
716
  const env = _chunkVEKFLAQMcjs.resolveEnv.call(void 0, userConfig.env, process.env);
715
717
  _chunkVEKFLAQMcjs.setEnv.call(void 0, env);
@@ -785,7 +787,7 @@ async function resolveConfig(userConfig, mode) {
785
787
  },
786
788
  agent: resolveFarmAgentConfig(userConfig.agent, { docs: docs.enabled }),
787
789
  plugins: [
788
- ..._chunkUJZLSXUBcjs.resolveIntegrationPlugins.call(void 0, integrations),
790
+ ..._chunkVU6AAZVYcjs.resolveIntegrationPlugins.call(void 0, integrations),
789
791
  ...nativeMCPPlugin ? [nativeMCPPlugin] : [],
790
792
  ...userConfig.plugins || []
791
793
  ],
@@ -800,7 +802,7 @@ async function resolveConfig(userConfig, mode) {
800
802
  ], "headers"),
801
803
  routeRules,
802
804
  images: _chunkYFPGHF5Fcjs.resolveFarmImageConfig.call(void 0, userConfig.images),
803
- performance: _chunkMRMI32SNcjs.resolveFarmPerformanceConfig.call(void 0, userConfig.performance),
805
+ performance: _chunkQTXBII4Zcjs.resolveFarmPerformanceConfig.call(void 0, userConfig.performance),
804
806
  theme: _chunkOI6CMLWXcjs.resolveFarmThemeConfig.call(void 0, userConfig.theme, basePath),
805
807
  publicDir: userConfig.publicDir || "public",
806
808
  i18n: _chunkHLJ6MBUZcjs.resolveFarmI18nConfig.call(void 0, userConfig.i18n, { root, mode, basePath }),
@@ -1,7 +1,9 @@
1
1
  import {
2
+ FARM_MARKDOWN_PAGE_CHECK_HEADER,
3
+ _getFarmMarkdownPageCheckToken,
2
4
  createFarmMarkdownViewResponse,
3
5
  requestAcceptsMarkdown
4
- } from "./chunk-WWIKMBRN.mjs";
6
+ } from "./chunk-VNGH5MLF.mjs";
5
7
  import {
6
8
  __name
7
9
  } from "./chunk-LPEX4YW6.mjs";
@@ -159,6 +161,7 @@ var PAGE_CHECK_DROPPED_HEADERS = /* @__PURE__ */ new Set([
159
161
  "if-unmodified-since",
160
162
  "range"
161
163
  ]);
164
+ var PAGE_SEGMENT_MARKER = /<div\s[^>]*\bid=["']?__farm_page__["'\s>]/i;
162
165
  async function anonymousVisitorOpensPage(options, url, targetPathname) {
163
166
  const pageUrl = new URL(url);
164
167
  pageUrl.pathname = targetPathname;
@@ -167,6 +170,7 @@ async function anonymousVisitorOpensPage(options, url, targetPathname) {
167
170
  if (!PAGE_CHECK_DROPPED_HEADERS.has(name.toLowerCase())) headers.append(name, value);
168
171
  }
169
172
  headers.set("accept", "text/html");
173
+ headers.set(FARM_MARKDOWN_PAGE_CHECK_HEADER, _getFarmMarkdownPageCheckToken());
170
174
  const response = await options.renderPage(
171
175
  new Request(pageUrl, {
172
176
  method: "GET",
@@ -175,9 +179,12 @@ async function anonymousVisitorOpensPage(options, url, targetPathname) {
175
179
  signal: options.request.signal
176
180
  })
177
181
  );
178
- void response.body?.cancel().catch(() => {
179
- });
180
- return response.status >= 200 && response.status < 300 && Boolean(response.headers.get("content-type")?.toLowerCase().includes("text/html"));
182
+ if (response.status < 200 || response.status >= 300 || !response.headers.get("content-type")?.toLowerCase().includes("text/html")) {
183
+ void response.body?.cancel().catch(() => {
184
+ });
185
+ return false;
186
+ }
187
+ return PAGE_SEGMENT_MARKER.test(await response.text());
181
188
  }
182
189
  __name(anonymousVisitorOpensPage, "anonymousVisitorOpensPage");
183
190
  function hasOnlyAnonymousHeaders(headers) {
@@ -222,8 +229,18 @@ async function createFarmMarkdownSourceResponse(options) {
222
229
  })
223
230
  );
224
231
  if (publicResponse.headers.get("X-Farm-Markdown-Route") === targetPathname && publicResponse.headers.has("X-Farm-Markdown-Source")) {
225
- publicSourceResponses.add(publicResponse);
226
- return publicResponse;
232
+ let response = publicResponse;
233
+ if (options.request.headers.has("cookie") || options.request.headers.has("authorization")) {
234
+ const headers2 = new Headers(publicResponse.headers);
235
+ headers2.set("Cache-Control", "private, no-store");
236
+ response = new Response(publicResponse.body, {
237
+ status: publicResponse.status,
238
+ statusText: publicResponse.statusText,
239
+ headers: headers2
240
+ });
241
+ }
242
+ publicSourceResponses.add(response);
243
+ return response;
227
244
  }
228
245
  await publicResponse.body?.cancel();
229
246
  if (!hasMarkdownExtension) return null;
@@ -27,10 +27,22 @@ function _resolveCurrentRequestForApp() {
27
27
  return request && view ? view(request) : request;
28
28
  }
29
29
  __name(_resolveCurrentRequestForApp, "_resolveCurrentRequestForApp");
30
+ var CSP_NONCE_RESOLVER_KEY = /* @__PURE__ */ Symbol.for("farm.cspNonceResolver");
31
+ function _setCspNonceResolver(resolver) {
32
+ globalThis[CSP_NONCE_RESOLVER_KEY] = resolver;
33
+ }
34
+ __name(_setCspNonceResolver, "_setCspNonceResolver");
35
+ function _resolveCurrentCspNonce() {
36
+ const resolver = globalThis[CSP_NONCE_RESOLVER_KEY];
37
+ return resolver?.();
38
+ }
39
+ __name(_resolveCurrentCspNonce, "_resolveCurrentCspNonce");
30
40
 
31
41
  export {
32
42
  _setCurrentRequestResolver,
33
43
  _resolveCurrentRequest,
34
44
  _setAppRequestView,
35
- _resolveCurrentRequestForApp
45
+ _resolveCurrentRequestForApp,
46
+ _setCspNonceResolver,
47
+ _resolveCurrentCspNonce
36
48
  };