@farm.js/core 0.1.34 → 0.1.36
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.
- package/dist/agent-mcp-BVExL8rZ.d.mts +109 -0
- package/dist/agent-mcp-handler-LPJ2CADR.mjs +19 -0
- package/dist/agent-mcp-handler-SJAHFSPI.cjs +19 -0
- package/dist/agent-mcp-luzfXK-P.d.ts +109 -0
- package/dist/agent-runtime.cjs +5 -3
- package/dist/agent-runtime.d.mts +4 -5
- package/dist/agent-runtime.d.ts +4 -5
- package/dist/agent-runtime.mjs +4 -2
- package/dist/api/route-manager.cjs +7 -7
- package/dist/api/route-manager.d.mts +15 -10
- package/dist/api/route-manager.d.ts +15 -10
- package/dist/api/route-manager.mjs +6 -6
- package/dist/api/runtime.cjs +7 -5
- package/dist/api/runtime.d.mts +7 -66
- package/dist/api/runtime.d.ts +7 -66
- package/dist/api/runtime.mjs +7 -5
- package/dist/api.cjs +9 -9
- package/dist/api.d.mts +8 -9
- package/dist/api.d.ts +8 -9
- package/dist/api.mjs +8 -8
- package/dist/{app-q4rmZlXK.d.mts → app-BukwkFIu.d.mts} +52 -12
- package/dist/{app-DgotYGbq.d.ts → app-Yfa2dsFy.d.ts} +52 -12
- package/dist/app-markdown.cjs +6 -6
- package/dist/app-markdown.d.mts +5 -6
- package/dist/app-markdown.d.ts +5 -6
- package/dist/app-markdown.mjs +5 -5
- package/dist/{chunk-XV5DJTBX.mjs → chunk-276VJSM6.mjs} +627 -260
- package/dist/{chunk-36MK5YCW.cjs → chunk-2YTDKNH3.cjs} +547 -240
- package/dist/{chunk-VHANUNEG.mjs → chunk-35GKZR22.mjs} +2 -2
- package/dist/{chunk-LR5QSC2P.mjs → chunk-35WV46VL.mjs} +399 -92
- package/dist/{chunk-UX5S4JEO.cjs → chunk-42NHY7HW.cjs} +57 -7
- package/dist/{chunk-U4PTAHW3.mjs → chunk-4E5AEDKY.mjs} +7 -11
- package/dist/{chunk-NGVORZVZ.mjs → chunk-4E5WBPEG.mjs} +73 -351
- package/dist/{chunk-AQZFOP7S.mjs → chunk-4GLOOWKE.mjs} +5 -5
- package/dist/{chunk-7BT4H4P7.cjs → chunk-4NU4GGTC.cjs} +2 -2
- package/dist/{chunk-AGC75XAE.mjs → chunk-4WCZJQUO.mjs} +55 -5
- package/dist/chunk-4WQ6PGSJ.cjs +367 -0
- package/dist/{chunk-QCFFHV5H.mjs → chunk-4WVJLURN.mjs} +1 -1
- package/dist/chunk-6SJ2KJTA.mjs +314 -0
- package/dist/chunk-75RZHGLS.cjs +135 -0
- package/dist/{chunk-P64MIF5B.cjs → chunk-ADEA7PN3.cjs} +483 -60
- package/dist/{chunk-YQVSHTMR.mjs → chunk-AJQTP4OO.mjs} +1 -1
- package/dist/{chunk-TA5G2HWD.cjs → chunk-AO6RYU5N.cjs} +31 -28
- package/dist/{chunk-MOKLYNHV.cjs → chunk-BO36SELV.cjs} +6 -6
- package/dist/{chunk-7Y6ZNFPX.mjs → chunk-BPOF5U4N.mjs} +17 -7
- package/dist/{chunk-JHWOVJ3M.mjs → chunk-BUGNQIHC.mjs} +5 -0
- package/dist/{chunk-TDFPACVX.cjs → chunk-CBJJH36A.cjs} +50 -25
- package/dist/{chunk-VKNHTSAP.cjs → chunk-CGBDNNSM.cjs} +2 -2
- package/dist/chunk-CI6E3UOH.cjs +314 -0
- package/dist/{chunk-QZCT2CQ4.mjs → chunk-CXEN47J3.mjs} +64 -2
- package/dist/{chunk-ATK2R4CH.cjs → chunk-D227TIEN.cjs} +14 -4
- package/dist/{chunk-QGYRXFU2.cjs → chunk-D2BB47NB.cjs} +8 -8
- package/dist/chunk-DTSROJ5J.mjs +367 -0
- package/dist/{chunk-ODBZYBAB.cjs → chunk-DZ5ZVB2K.cjs} +1 -1
- package/dist/{chunk-ROUTX2E5.cjs → chunk-ECKF2BAM.cjs} +18 -5
- package/dist/{chunk-3LUF2PE2.cjs → chunk-EK4QAEFZ.cjs} +67 -5
- package/dist/{chunk-VVBO3QH7.mjs → chunk-ENLZ4R3Y.mjs} +10 -1
- package/dist/{chunk-XXJU7FCC.cjs → chunk-EUV4YR3V.cjs} +2 -2
- package/dist/{chunk-HR5KPHC2.mjs → chunk-EWET4D2Y.mjs} +1 -1
- package/dist/{chunk-PXKIEXZD.mjs → chunk-F5QO4FNE.mjs} +1 -1
- package/dist/{chunk-MIDIZJZC.cjs → chunk-FO427P6I.cjs} +22 -12
- package/dist/{chunk-AWC4VUZL.cjs → chunk-GQ3Z3IZI.cjs} +14 -14
- package/dist/{chunk-JDPAKVS4.mjs → chunk-GQRWBCWK.mjs} +8 -5
- package/dist/{chunk-75WGQVQA.cjs → chunk-HITLGIAO.cjs} +10 -1
- package/dist/{chunk-WNNYOOIB.mjs → chunk-HOXTWRGB.mjs} +1 -1
- package/dist/{chunk-KROWKCUH.cjs → chunk-JGLC4TO3.cjs} +8 -1
- package/dist/{chunk-QJ3J6MZT.cjs → chunk-JNUWCDTF.cjs} +8 -8
- package/dist/{chunk-BTAG7LI7.cjs → chunk-JZVADIOD.cjs} +2 -2
- package/dist/{chunk-EM6SBQKM.cjs → chunk-KIIMAWOJ.cjs} +37 -2
- package/dist/{chunk-43FMW62B.mjs → chunk-KMTGADN3.mjs} +28 -0
- package/dist/{chunk-GOABMOX3.mjs → chunk-LSZAVSGY.mjs} +468 -45
- package/dist/{chunk-2NQQ5H5G.cjs → chunk-M7MKQXAF.cjs} +2 -1
- package/dist/{chunk-GNSDTTWZ.mjs → chunk-MKYBIIAQ.mjs} +30 -5
- package/dist/{chunk-ZHPHJPQP.cjs → chunk-MRMI32SN.cjs} +88 -366
- package/dist/{chunk-7M52YUMY.cjs → chunk-N2NAS2AM.cjs} +2 -2
- package/dist/{chunk-SJVKK4JE.cjs → chunk-NMHWYWDR.cjs} +1144 -777
- package/dist/chunk-NRDBW4MP.mjs +45 -0
- package/dist/{chunk-657WJNRY.mjs → chunk-O6I6VWKK.mjs} +20 -5
- package/dist/{chunk-O27L4YAA.mjs → chunk-O6WAEAX3.mjs} +2 -2
- package/dist/chunk-OFZUJMCU.mjs +601 -0
- package/dist/{chunk-ZKP7C2B6.mjs → chunk-OHLSEQ57.mjs} +22 -13
- package/dist/{chunk-X242HVD5.mjs → chunk-OO7GXVSR.mjs} +1 -1
- package/dist/chunk-PTZ2TVNE.cjs +178 -0
- package/dist/{chunk-3ATMYLLJ.mjs → chunk-Q2KB32T4.mjs} +1 -1
- package/dist/{chunk-LHODW25H.mjs → chunk-QORUJDIV.mjs} +2 -2
- package/dist/{chunk-UBO4SGH4.mjs → chunk-RHAZ22ZN.mjs} +2 -1
- package/dist/{chunk-G26MUMKL.cjs → chunk-S6VYG6XU.cjs} +23 -8
- package/dist/{chunk-6VVL3MHY.mjs → chunk-SC2WYWPF.mjs} +1 -1
- package/dist/{chunk-MPEYMSCF.cjs → chunk-SDOTRX3V.cjs} +5 -5
- package/dist/{chunk-BMWDEBXO.cjs → chunk-SHLXACIO.cjs} +31 -3
- package/dist/{chunk-LMJ7VRHZ.mjs → chunk-T4OGRVNS.mjs} +13 -3
- package/dist/{chunk-T5CERMEH.cjs → chunk-T5OJPTVN.cjs} +2 -2
- package/dist/{chunk-Z2YLTERK.cjs → chunk-TE2G5ION.cjs} +6 -6
- package/dist/chunk-UH6QN5NL.mjs +178 -0
- package/dist/{chunk-PQDFUSXD.cjs → chunk-UVW64BCB.cjs} +44 -35
- package/dist/{chunk-VCCUOMQN.mjs → chunk-VILIPRS6.mjs} +1 -1
- package/dist/{chunk-A5FGU2WU.cjs → chunk-VQLJWDVW.cjs} +19 -23
- package/dist/{chunk-VPTDD5XF.cjs → chunk-WBKEZXWE.cjs} +5 -0
- package/dist/{chunk-K3F2E6GS.cjs → chunk-WC5UV2HQ.cjs} +2 -2
- package/dist/chunk-WWFTAUFG.cjs +45 -0
- package/dist/{chunk-ZUSJDQ2Q.mjs → chunk-WWIKMBRN.mjs} +1 -1
- package/dist/{chunk-3VSKDFAT.mjs → chunk-WZ77PUAM.mjs} +1 -1
- package/dist/{chunk-CLJYVZAD.mjs → chunk-XCMCS4DA.mjs} +11 -1
- package/dist/{chunk-F6OHXPWR.mjs → chunk-YFILVET3.mjs} +8 -1
- package/dist/{chunk-DZ4DTRJ5.cjs → chunk-YKX5BK66.cjs} +7 -7
- package/dist/chunk-YSLWRWWP.cjs +601 -0
- package/dist/{chunk-LI2LMOLR.mjs → chunk-YWMZUGIS.mjs} +18 -5
- package/dist/chunk-ZLAT2CWY.mjs +135 -0
- package/dist/{chunk-XF7Q24PF.mjs → chunk-ZMMBIVQM.mjs} +35 -0
- package/dist/{chunk-U74I55WB.cjs → chunk-ZWM5KGAA.cjs} +19 -9
- package/dist/{client-plugins-CLObcuCq.d.mts → client-plugins-C3mK9Pol.d.mts} +300 -7
- package/dist/{client-plugins-DZjHC4Mi.d.ts → client-plugins-r1mOtSC1.d.ts} +300 -7
- package/dist/client-plugins.d.mts +4 -5
- package/dist/client-plugins.d.ts +4 -5
- package/dist/client.cjs +5 -5
- package/dist/client.d.mts +8 -9
- package/dist/client.d.ts +8 -9
- package/dist/client.mjs +4 -4
- package/dist/config.d.mts +4 -5
- package/dist/config.d.ts +4 -5
- package/dist/{devtools-RNXCTS4R.mjs → devtools-ERIKFEXX.mjs} +11 -10
- package/dist/{devtools-HU6Y2MNV.cjs → devtools-JZJJY5CK.cjs} +12 -11
- package/dist/docs.cjs +15 -14
- package/dist/docs.d.mts +41 -4
- package/dist/docs.d.ts +41 -4
- package/dist/docs.mjs +14 -13
- package/dist/i18n/client.d.mts +2 -2
- package/dist/i18n/client.d.ts +2 -2
- package/dist/i18n/index.d.mts +3 -3
- package/dist/i18n/index.d.ts +3 -3
- package/dist/i18n/server.d.mts +5 -5
- package/dist/i18n/server.d.ts +5 -5
- package/dist/image/server.cjs +3 -3
- package/dist/image/server.mjs +2 -2
- package/dist/image/sharp.cjs +10 -10
- package/dist/image/sharp.mjs +2 -2
- package/dist/{index-a-8Z5kZU.d.mts → index-BJJfLxJo.d.mts} +2 -2
- package/dist/{index-BWVfxIsO.d.ts → index-CwoOP-MW.d.ts} +2 -2
- package/dist/index.cjs +51 -44
- package/dist/index.d.mts +20 -21
- package/dist/index.d.ts +20 -21
- package/dist/index.mjs +50 -43
- package/dist/integrations.cjs +7 -3
- package/dist/integrations.d.mts +4 -5
- package/dist/integrations.d.ts +4 -5
- package/dist/integrations.mjs +6 -2
- package/dist/internal/app-markdown-runtime.cjs +5 -5
- package/dist/internal/app-markdown-runtime.d.mts +5 -6
- package/dist/internal/app-markdown-runtime.d.ts +5 -6
- package/dist/internal/app-markdown-runtime.mjs +4 -4
- package/dist/internal/build-runtime.cjs +32 -30
- package/dist/internal/build-runtime.d.mts +6 -7
- package/dist/internal/build-runtime.d.ts +6 -7
- package/dist/internal/build-runtime.mjs +31 -29
- package/dist/internal/cli-runtime.cjs +17 -16
- package/dist/internal/cli-runtime.mjs +16 -15
- package/dist/internal/client-error-overlay.cjs +6 -6
- package/dist/internal/client-error-overlay.mjs +2 -2
- package/dist/internal/client-runtime.cjs +2 -2
- package/dist/internal/client-runtime.mjs +1 -1
- package/dist/internal/compression-runtime.d.mts +4 -5
- package/dist/internal/compression-runtime.d.ts +4 -5
- package/dist/internal/config-runtime.cjs +12 -11
- package/dist/internal/config-runtime.d.mts +5 -6
- package/dist/internal/config-runtime.d.ts +5 -6
- package/dist/internal/config-runtime.mjs +11 -10
- package/dist/internal/isolated-boundary.cjs +3 -2
- package/dist/internal/isolated-boundary.d.mts +1 -1
- package/dist/internal/isolated-boundary.d.ts +1 -1
- package/dist/internal/isolated-boundary.mjs +2 -1
- package/dist/internal/metadata-image-runtime.cjs +3 -3
- package/dist/internal/metadata-image-runtime.mjs +2 -2
- package/dist/internal/product-telemetry-runtime.cjs +2 -2
- package/dist/internal/product-telemetry-runtime.mjs +1 -1
- package/dist/internal/production-runtime.cjs +63 -25
- package/dist/internal/production-runtime.d.mts +117 -37
- package/dist/internal/production-runtime.d.ts +117 -37
- package/dist/internal/production-runtime.mjs +65 -27
- package/dist/internal/server-tree.cjs +12 -0
- package/dist/internal/server-tree.d.mts +27 -0
- package/dist/internal/server-tree.d.ts +27 -0
- package/dist/internal/server-tree.mjs +12 -0
- package/dist/{layers-BRQF5ETU.mjs → layers-UTB43B7A.mjs} +1 -1
- package/dist/layers-VUWIOFEO.cjs +18 -0
- package/dist/markdown.cjs +4 -4
- package/dist/markdown.d.mts +4 -5
- package/dist/markdown.d.ts +4 -5
- package/dist/markdown.mjs +3 -3
- package/dist/middleware.cjs +7 -7
- package/dist/middleware.d.mts +6 -7
- package/dist/middleware.d.ts +6 -7
- package/dist/middleware.mjs +6 -6
- package/dist/navigation.cjs +5 -5
- package/dist/navigation.d.mts +7 -8
- package/dist/navigation.d.ts +7 -8
- package/dist/navigation.mjs +4 -4
- package/dist/{nitro-HSAQFXSS.cjs → nitro-7F65EZZS.cjs} +3 -3
- package/dist/{nitro-4XGPNIK4.mjs → nitro-MPZJGPXK.mjs} +2 -2
- package/dist/{observability-BupkiN0m.d.mts → observability-CoXunYhS.d.mts} +4 -3
- package/dist/{observability-BupkiN0m.d.ts → observability-CoXunYhS.d.ts} +4 -3
- package/dist/observability.d.mts +1 -1
- package/dist/observability.d.ts +1 -1
- package/dist/plugin.cjs +28 -26
- package/dist/plugin.d.mts +4 -5
- package/dist/plugin.d.ts +4 -5
- package/dist/plugin.mjs +27 -25
- package/dist/{production-runtime-CysZl3EV.d.mts → production-runtime-CCeVZXst.d.mts} +4 -4
- package/dist/{production-runtime-BU5ETAK9.d.ts → production-runtime-DPnsggY3.d.ts} +4 -4
- package/dist/query/client.cjs +6 -6
- package/dist/query/client.mjs +2 -2
- package/dist/{render-plan-CKr4ltOd.d.mts → render-plan-BuGaPFe6.d.mts} +1 -1
- package/dist/{render-plan-D72O1qm4.d.ts → render-plan-Cw4f5E_R.d.ts} +1 -1
- package/dist/renderer/react/server.cjs +10 -4
- package/dist/renderer/react/server.d.mts +2 -1
- package/dist/renderer/react/server.d.ts +2 -1
- package/dist/renderer/react/server.mjs +7 -1
- package/dist/renderer-client.cjs +5 -5
- package/dist/renderer-client.d.mts +6 -7
- package/dist/renderer-client.d.ts +6 -7
- package/dist/renderer-client.mjs +2 -2
- package/dist/renderer.d.mts +2 -0
- package/dist/renderer.d.ts +2 -0
- package/dist/{request-DbyOYI2j.d.ts → request-Bkg-hERy.d.ts} +1 -1
- package/dist/{request-Be83WafN.d.mts → request-CsGARcAw.d.mts} +1 -1
- package/dist/request.d.mts +5 -6
- package/dist/request.d.ts +5 -6
- package/dist/{resolver-PPEeiJ6M.d.ts → resolver-DadfRL6F.d.ts} +1 -1
- package/dist/{resolver-DhW0CqZN.d.mts → resolver-khasx3fU.d.mts} +1 -1
- package/dist/{route-rendering-CtVMpV-k.d.ts → route-rendering-BUZMH_64.d.ts} +1 -1
- package/dist/{route-rendering-BG56SzvJ.d.mts → route-rendering-f11yh5dp.d.mts} +1 -1
- package/dist/{router-D94-SDlW.d.ts → router-B8CR9GbD.d.ts} +1 -1
- package/dist/{router-ALUvm8gC.d.mts → router-Cp6yRE8A.d.mts} +1 -1
- package/dist/routes.d.mts +4 -5
- package/dist/routes.d.ts +4 -5
- package/dist/{runtime-BirxPwbZ.d.ts → runtime-BgDQzBiu.d.ts} +2 -2
- package/dist/runtime-CAEv36S_.d.mts +69 -0
- package/dist/runtime-CQVsT330.d.ts +69 -0
- package/dist/{runtime-AOJge4vQ.d.mts → runtime-CV2UCV-5.d.mts} +2 -2
- package/dist/server-action-security.cjs +3 -3
- package/dist/server-action-security.mjs +2 -2
- package/dist/server-fn.cjs +4 -4
- package/dist/server-fn.mjs +3 -3
- package/dist/server-plugins.d.mts +5 -6
- package/dist/server-plugins.d.ts +5 -6
- package/dist/server-query.cjs +5 -5
- package/dist/server-query.mjs +4 -4
- package/dist/server.cjs +47 -45
- package/dist/server.d.mts +13 -14
- package/dist/server.d.ts +13 -14
- package/dist/server.mjs +30 -28
- package/dist/{spa-router-CxK3USIz.d.ts → spa-router-BuciWGCZ.d.ts} +3 -3
- package/dist/{spa-router-DbxNRKOB.d.mts → spa-router-DwbqGkGj.d.mts} +3 -3
- package/dist/testing.cjs +9 -9
- package/dist/testing.d.mts +4 -5
- package/dist/testing.d.ts +4 -5
- package/dist/testing.mjs +7 -7
- package/dist/{types-Z0aotQ8w.d.mts → types-CnH8DOqo.d.mts} +1 -1
- package/dist/{types-Z0aotQ8w.d.ts → types-CnH8DOqo.d.ts} +1 -1
- package/dist/{utils-4wVRcpOw.d.mts → utils-B9V0S_yL.d.mts} +1 -1
- package/dist/{utils-311Y8eoK.d.ts → utils-CaoWKtYM.d.ts} +1 -1
- package/dist/version.cjs +2 -2
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +28 -26
- package/dist/vite.d.mts +4 -5
- package/dist/vite.d.ts +4 -5
- package/dist/vite.mjs +27 -25
- package/dist/{workflows-CR9ex-gz.d.ts → workflows-jZ4BcdoZ.d.mts} +1 -1
- package/dist/{workflows-CR9ex-gz.d.mts → workflows-jZ4BcdoZ.d.ts} +1 -1
- package/dist/workflows.cjs +3 -3
- package/dist/workflows.d.mts +1 -1
- package/dist/workflows.d.ts +1 -1
- package/dist/workflows.mjs +2 -2
- package/package.json +9 -1
- package/dist/chunk-M64YUMA4.cjs +0 -58
- package/dist/chunk-QLQ32WC4.mjs +0 -58
- package/dist/layers-4PNE2HOY.cjs +0 -18
- package/dist/metadata-2HSU2i_w.d.mts +0 -52
- package/dist/metadata-Cjs8JMRM.d.ts +0 -52
- package/dist/types-DFbjpjXX.d.mts +0 -105
- package/dist/types-DFbjpjXX.d.ts +0 -105
- package/dist/{chunk-2F2ER724.cjs → chunk-BPMATOP2.cjs} +2 -2
- package/dist/{chunk-IHNMMXHV.mjs → chunk-OTC5BDGO.mjs} +3 -3
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
+
var _chunkPTZ2TVNEcjs = require('./chunk-PTZ2TVNE.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
3
6
|
var _chunkOWOUTKIJcjs = require('./chunk-OWOUTKIJ.cjs');
|
|
4
7
|
|
|
5
8
|
|
|
6
|
-
var
|
|
9
|
+
var _chunk4WQ6PGSJcjs = require('./chunk-4WQ6PGSJ.cjs');
|
|
7
10
|
|
|
8
11
|
|
|
9
12
|
var _chunkJ63ZH5OQcjs = require('./chunk-J63ZH5OQ.cjs');
|
|
@@ -15,14 +18,19 @@ var _chunkOI6CMLWXcjs = require('./chunk-OI6CMLWX.cjs');
|
|
|
15
18
|
var _chunkTKJZFIMLcjs = require('./chunk-TKJZFIML.cjs');
|
|
16
19
|
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
|
|
22
|
+
var _chunk75RZHGLScjs = require('./chunk-75RZHGLS.cjs');
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
var _chunkKIIMAWOJcjs = require('./chunk-KIIMAWOJ.cjs');
|
|
19
27
|
|
|
20
28
|
|
|
21
29
|
|
|
22
30
|
var _chunkKNBBQHO2cjs = require('./chunk-KNBBQHO2.cjs');
|
|
23
31
|
|
|
24
32
|
|
|
25
|
-
var
|
|
33
|
+
var _chunkDZ5ZVB2Kcjs = require('./chunk-DZ5ZVB2K.cjs');
|
|
26
34
|
|
|
27
35
|
|
|
28
36
|
var _chunkBIDYX3SLcjs = require('./chunk-BIDYX3SL.cjs');
|
|
@@ -33,6 +41,184 @@ var _chunkI57LW5VZcjs = require('./chunk-I57LW5VZ.cjs');
|
|
|
33
41
|
|
|
34
42
|
var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
|
|
35
43
|
|
|
44
|
+
// src/routing/route-groups.ts
|
|
45
|
+
function isRouteGroupSegment(part) {
|
|
46
|
+
return part.startsWith("(") && part.endsWith(")");
|
|
47
|
+
}
|
|
48
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, isRouteGroupSegment, "isRouteGroupSegment");
|
|
49
|
+
function formatRouteSegment(segment) {
|
|
50
|
+
if (!segment.isDynamic) return segment.segment;
|
|
51
|
+
if (segment.isCatchAll) {
|
|
52
|
+
return segment.isOptional ? `[[...${segment.segment}]]` : `[...${segment.segment}]`;
|
|
53
|
+
}
|
|
54
|
+
return `[${segment.segment}]`;
|
|
55
|
+
}
|
|
56
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, formatRouteSegment, "formatRouteSegment");
|
|
57
|
+
function createRouteDirectoryPattern(route) {
|
|
58
|
+
const parts = route.filePath.replace(/\\/g, "/").split("/").filter(Boolean);
|
|
59
|
+
parts.pop();
|
|
60
|
+
if (parts.length === 0) return "/";
|
|
61
|
+
let segmentIndex = 0;
|
|
62
|
+
const directory = parts.map((part) => {
|
|
63
|
+
if (isRouteGroupSegment(part)) return part;
|
|
64
|
+
const segment = route.segments[segmentIndex++];
|
|
65
|
+
return segment ? formatRouteSegment(segment) : part;
|
|
66
|
+
});
|
|
67
|
+
return `/${directory.join("/")}`;
|
|
68
|
+
}
|
|
69
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, createRouteDirectoryPattern, "createRouteDirectoryPattern");
|
|
70
|
+
function stripRouteGroups(pattern) {
|
|
71
|
+
if (!pattern.includes("(")) return pattern;
|
|
72
|
+
const parts = pattern.split("/").filter((part) => part && !isRouteGroupSegment(part));
|
|
73
|
+
return parts.length === 0 ? "/" : `/${parts.join("/")}`;
|
|
74
|
+
}
|
|
75
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, stripRouteGroups, "stripRouteGroups");
|
|
76
|
+
function getRouteGroupScope(pattern) {
|
|
77
|
+
if (!pattern.includes("(")) return null;
|
|
78
|
+
const parts = pattern.split("/");
|
|
79
|
+
for (let index = parts.length - 1; index > 0; index--) {
|
|
80
|
+
if (isRouteGroupSegment(parts[index])) return parts.slice(0, index + 1).join("/");
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, getRouteGroupScope, "getRouteGroupScope");
|
|
85
|
+
function isInRouteGroupScope(directory, scope) {
|
|
86
|
+
if (scope === null) return true;
|
|
87
|
+
if (typeof directory !== "string") return false;
|
|
88
|
+
return directory === scope || directory.startsWith(`${scope}/`);
|
|
89
|
+
}
|
|
90
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, isInRouteGroupScope, "isInRouteGroupScope");
|
|
91
|
+
function getRouteDirectoryDepth(pattern) {
|
|
92
|
+
return pattern.split("/").filter(Boolean).length;
|
|
93
|
+
}
|
|
94
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, getRouteDirectoryDepth, "getRouteDirectoryDepth");
|
|
95
|
+
function routeBoundaryCoversDirectory(boundaryPattern, directory) {
|
|
96
|
+
const boundaryUrl = stripRouteGroups(boundaryPattern);
|
|
97
|
+
const routeUrl = stripRouteGroups(directory);
|
|
98
|
+
return (boundaryUrl === "/" || routeUrl === boundaryUrl || routeUrl.startsWith(`${boundaryUrl.replace(/\/$/, "")}/`)) && isInRouteGroupScope(directory, getRouteGroupScope(boundaryPattern));
|
|
99
|
+
}
|
|
100
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, routeBoundaryCoversDirectory, "routeBoundaryCoversDirectory");
|
|
101
|
+
|
|
102
|
+
// src/server/full-document.ts
|
|
103
|
+
var CONTENTS_WRAPPER = /^<div\b[^>]*style="display\s*:\s*contents"[^>]*>/i;
|
|
104
|
+
var HOISTED_HEAD_ELEMENT = /^(?:<(?:meta|link|base)\b[^>]*>|<title\b[^>]*>[\s\S]*?<\/title>|<script\b[^>]*\basync\b[^>]*><\/script>|<style\b[^>]*\bdata-precedence\b[^>]*>[\s\S]*?<\/style>)/i;
|
|
105
|
+
function peelDocumentPrefix(markup) {
|
|
106
|
+
let inner = markup.replace(/^\s+/, "");
|
|
107
|
+
let hoisted = "";
|
|
108
|
+
let match;
|
|
109
|
+
while (match = _nullishCoalesce(CONTENTS_WRAPPER.exec(inner), () => ( HOISTED_HEAD_ELEMENT.exec(inner)))) {
|
|
110
|
+
if (!/^<div/i.test(match[0])) hoisted += match[0];
|
|
111
|
+
inner = inner.slice(match[0].length).replace(/^\s+/, "");
|
|
112
|
+
}
|
|
113
|
+
return { inner, hoisted };
|
|
114
|
+
}
|
|
115
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, peelDocumentPrefix, "peelDocumentPrefix");
|
|
116
|
+
function restoreHoistedHead(document, hoisted) {
|
|
117
|
+
if (!hoisted) return document;
|
|
118
|
+
if (/<head[\s>]/i.test(document)) {
|
|
119
|
+
return document.replace(/<head\b[^>]*>/i, (open) => open + hoisted);
|
|
120
|
+
}
|
|
121
|
+
return document.replace(/<html\b[^>]*>/i, (open) => `${open}<head>${hoisted}</head>`);
|
|
122
|
+
}
|
|
123
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, restoreHoistedHead, "restoreHoistedHead");
|
|
124
|
+
function extractFarmFullDocument(markup) {
|
|
125
|
+
const { inner, hoisted } = peelDocumentPrefix(markup);
|
|
126
|
+
if (!/^<!doctype/i.test(inner) && !/^<html[\s>]/i.test(inner)) return null;
|
|
127
|
+
const start = markup.search(/<!doctype|<html[\s>]/i);
|
|
128
|
+
const lower = markup.toLowerCase();
|
|
129
|
+
let closeIndex = lower.lastIndexOf("</html>");
|
|
130
|
+
if (lower.length !== markup.length) {
|
|
131
|
+
closeIndex = -1;
|
|
132
|
+
const closing = /<\/html>/gi;
|
|
133
|
+
let match;
|
|
134
|
+
while (match = closing.exec(markup)) closeIndex = match.index;
|
|
135
|
+
}
|
|
136
|
+
if (start < 0 || closeIndex < 0) return null;
|
|
137
|
+
const closeEnd = closeIndex + "</html>".length;
|
|
138
|
+
let document = markup.slice(start, closeEnd);
|
|
139
|
+
const streamedTail = markup.slice(closeEnd).replace(/^(?:\s*<\/div>)+/i, "").trim();
|
|
140
|
+
if (streamedTail) {
|
|
141
|
+
document = document.replace(/<\/body>/i, () => `${streamedTail}</body>`);
|
|
142
|
+
}
|
|
143
|
+
return restoreHoistedHead(document, hoisted);
|
|
144
|
+
}
|
|
145
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, extractFarmFullDocument, "extractFarmFullDocument");
|
|
146
|
+
function classifyFarmDocumentPrefix(markup) {
|
|
147
|
+
const { inner } = peelDocumentPrefix(markup);
|
|
148
|
+
if (/^<!doctype/i.test(inner) || /^<html[\s>]/i.test(inner)) return "document";
|
|
149
|
+
return inner === "" ? "pending" : "fragment";
|
|
150
|
+
}
|
|
151
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, classifyFarmDocumentPrefix, "classifyFarmDocumentPrefix");
|
|
152
|
+
function ensureFarmDocumentHead(markup) {
|
|
153
|
+
if (/<head[\s>]/i.test(markup)) return markup;
|
|
154
|
+
return markup.replace(/<html([^>]*)>/i, (_match, attributes) => {
|
|
155
|
+
return `<html${attributes}><head></head>`;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, ensureFarmDocumentHead, "ensureFarmDocumentHead");
|
|
159
|
+
function ensureFarmDocumentRoot(markup) {
|
|
160
|
+
if (/<body\b[^>]*>\s*<div\b[^>]*\sid=["']root["']/i.test(markup)) return markup;
|
|
161
|
+
return markup.replace(
|
|
162
|
+
/<body\b([^>]*)>/i,
|
|
163
|
+
(_match, attributes) => `<body${attributes}><div id="root">`
|
|
164
|
+
).replace(/<\/body>/i, () => "</div></body>");
|
|
165
|
+
}
|
|
166
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, ensureFarmDocumentRoot, "ensureFarmDocumentRoot");
|
|
167
|
+
function hasFarmDocumentIcon(markup) {
|
|
168
|
+
return /<link\b[^>]*\brel=["']?(?:shortcut )?icon\b/i.test(markup);
|
|
169
|
+
}
|
|
170
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, hasFarmDocumentIcon, "hasFarmDocumentIcon");
|
|
171
|
+
function removeFarmDocumentTitles(markup) {
|
|
172
|
+
return markup.replace(/<title\b[^>]*>[\s\S]*?<\/title>\s*/gi, "");
|
|
173
|
+
}
|
|
174
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, removeFarmDocumentTitles, "removeFarmDocumentTitles");
|
|
175
|
+
function ensureFarmDocumentMeta(markup, viewport = "") {
|
|
176
|
+
const head = _nullishCoalesce(_optionalChain([/<head\b[^>]*>([\s\S]*?)<\/head>/i, 'access', _ => _.exec, 'call', _2 => _2(markup), 'optionalAccess', _3 => _3[1]]), () => ( ""));
|
|
177
|
+
const hasNamedMeta = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (name) => new RegExp(`<meta\\b[^>]*\\bname=["']?${name}(?=["'\\s/>])`, "i").test(head), "hasNamedMeta");
|
|
178
|
+
const tags = [
|
|
179
|
+
/<meta\b[^>]*\bcharset\s*=/i.test(head) ? "" : '<meta charset="utf-8">',
|
|
180
|
+
...(_nullishCoalesce(viewport.match(/<meta\b[^>]*>/gi), () => ( []))).filter((tag) => {
|
|
181
|
+
const name = _optionalChain([/\bname="([\w-]+)"/, 'access', _4 => _4.exec, 'call', _5 => _5(tag), 'optionalAccess', _6 => _6[1]]);
|
|
182
|
+
return !name || !hasNamedMeta(name);
|
|
183
|
+
})
|
|
184
|
+
].filter(Boolean);
|
|
185
|
+
if (tags.length === 0) return markup;
|
|
186
|
+
return markup.replace(/<head\b[^>]*>/i, (open) => `${open}${tags.join("")}`);
|
|
187
|
+
}
|
|
188
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, ensureFarmDocumentMeta, "ensureFarmDocumentMeta");
|
|
189
|
+
function composeFarmFullDocument(documentHtml, assets) {
|
|
190
|
+
let html = ensureFarmDocumentMeta(ensureFarmDocumentHead(documentHtml), assets.viewport);
|
|
191
|
+
if (assets.htmlAttributes) {
|
|
192
|
+
html = html.replace(/<html\b([^>]*)>/i, (_match, attrs) => {
|
|
193
|
+
let nextAttributes = attrs;
|
|
194
|
+
for (const name of _nullishCoalesce(assets.replaceHtmlAttributes, () => ( []))) {
|
|
195
|
+
const escapedName = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
196
|
+
nextAttributes = nextAttributes.replace(
|
|
197
|
+
new RegExp("\\s+" + escapedName + `=(?:"[^"]*"|'[^']*'|[^\\s>]+)`, "gi"),
|
|
198
|
+
""
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
return `<html${nextAttributes}${assets.htmlAttributes}>`;
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
html = ensureFarmDocumentRoot(html);
|
|
205
|
+
const headAssets = [
|
|
206
|
+
assets.fallbackIcon && !hasFarmDocumentIcon(html) ? '<link rel="icon" href="data:,">' : "",
|
|
207
|
+
assets.headAssets
|
|
208
|
+
].filter(Boolean).join("\n ");
|
|
209
|
+
if (headAssets) {
|
|
210
|
+
html = html.replace(/<\/head>/i, () => ` ${headAssets}
|
|
211
|
+
</head>`);
|
|
212
|
+
}
|
|
213
|
+
if (assets.bodyFooter) {
|
|
214
|
+
html = html.replace(/<\/body>/i, () => ` ${assets.bodyFooter}
|
|
215
|
+
</body>`);
|
|
216
|
+
}
|
|
217
|
+
return /^\s*<!doctype/i.test(html) ? html : `<!DOCTYPE html>
|
|
218
|
+
${html}`;
|
|
219
|
+
}
|
|
220
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, composeFarmFullDocument, "composeFarmFullDocument");
|
|
221
|
+
|
|
36
222
|
// src/i18n/alternates.ts
|
|
37
223
|
function renderFarmLocaleAlternateLinks(pathname, config, options = {}) {
|
|
38
224
|
if (config.routing === "none") return "";
|
|
@@ -129,7 +315,7 @@ function serializeSitemap(value) {
|
|
|
129
315
|
return candidate;
|
|
130
316
|
});
|
|
131
317
|
const hasLanguageAlternates = entries.some(
|
|
132
|
-
(entry) => _optionalChain([entry, 'access',
|
|
318
|
+
(entry) => _optionalChain([entry, 'access', _7 => _7.alternates, 'optionalAccess', _8 => _8.languages]) && Object.keys(entry.alternates.languages).length > 0
|
|
133
319
|
);
|
|
134
320
|
const namespace = hasLanguageAlternates ? ' xmlns:xhtml="http://www.w3.org/1999/xhtml"' : "";
|
|
135
321
|
const lines = [
|
|
@@ -148,7 +334,7 @@ function serializeSitemap(value) {
|
|
|
148
334
|
if (entry.priority !== void 0) {
|
|
149
335
|
lines.push(` <priority>${escapeXml(entry.priority)}</priority>`);
|
|
150
336
|
}
|
|
151
|
-
for (const [language, href] of Object.entries(_optionalChain([entry, 'access',
|
|
337
|
+
for (const [language, href] of Object.entries(_optionalChain([entry, 'access', _9 => _9.alternates, 'optionalAccess', _10 => _10.languages]) || {})) {
|
|
152
338
|
lines.push(
|
|
153
339
|
` <xhtml:link rel="alternate" hreflang="${escapeXml(language)}" href="${escapeXml(href)}" />`
|
|
154
340
|
);
|
|
@@ -216,7 +402,7 @@ function createFarmMetadataRouteResponse(kind, value, routeModule = {}, options
|
|
|
216
402
|
if (isResponse(value)) {
|
|
217
403
|
return method === "HEAD" ? _chunkTKJZFIMLcjs.omitFarmResponseBody.call(void 0, value) : value;
|
|
218
404
|
}
|
|
219
|
-
const body = kind === "sitemap" ? serializeSitemap(value) : kind === "robots" ? serializeRobots(value) : kind === "llms" || kind === "llms-full" ?
|
|
405
|
+
const body = kind === "sitemap" ? serializeSitemap(value) : kind === "robots" ? serializeRobots(value) : kind === "llms" || kind === "llms-full" ? _chunk4WQ6PGSJcjs.serializeFarmLlmsTxt.call(void 0, value) : serializeManifest(value);
|
|
220
406
|
const contentType = kind === "sitemap" ? "application/xml; charset=utf-8" : kind === "robots" || kind === "llms" || kind === "llms-full" ? "text/plain; charset=utf-8" : "application/manifest+json; charset=utf-8";
|
|
221
407
|
return new Response(method === "HEAD" ? null : body, {
|
|
222
408
|
headers: {
|
|
@@ -228,6 +414,169 @@ function createFarmMetadataRouteResponse(kind, value, routeModule = {}, options
|
|
|
228
414
|
}
|
|
229
415
|
_chunkS3JO3N4Hcjs.__name.call(void 0, createFarmMetadataRouteResponse, "createFarmMetadataRouteResponse");
|
|
230
416
|
|
|
417
|
+
// src/ai-catalog.ts
|
|
418
|
+
var FARM_AI_CATALOG_PATH = "/.well-known/ai-catalog.json";
|
|
419
|
+
var FARM_ARD_PATH = "/.well-known/ard.json";
|
|
420
|
+
var FARM_MCP_SERVER_CARD_SUFFIX = "/server-card";
|
|
421
|
+
var SERVER_CARD_SCHEMA = "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json";
|
|
422
|
+
var SERVER_CARD_TYPE = "application/mcp-server-card+json";
|
|
423
|
+
var AI_CATALOG_TYPE = "application/ai-catalog+json";
|
|
424
|
+
var CARD_DESCRIPTION_MAX = 100;
|
|
425
|
+
var REVERSE_DNS_NAME = /^[a-zA-Z0-9.-]+\/[a-zA-Z0-9._-]+$/;
|
|
426
|
+
function listFarmMCPServerSources(input) {
|
|
427
|
+
const sources = /* @__PURE__ */ new Map();
|
|
428
|
+
for (const { server, details } of _chunk75RZHGLScjs._listFarmMCPCatalogs.call(void 0, )) {
|
|
429
|
+
const endpoint = _chunkKNBBQHO2cjs.resolveFarmAPIServerRoutePath.call(void 0, server.path, input.apiServerBasePath);
|
|
430
|
+
if (sources.has(endpoint)) continue;
|
|
431
|
+
sources.set(endpoint, {
|
|
432
|
+
...server,
|
|
433
|
+
protocolVersions: _optionalChain([details, 'optionalAccess', _11 => _11.protocolVersions]),
|
|
434
|
+
endpoint,
|
|
435
|
+
local: true
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
for (const server of _chunk75RZHGLScjs._listFarmRegisteredMCPServers.call(void 0, )) {
|
|
439
|
+
const endpoint = server.path ? _chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, server.path, input.basePath) : server.url;
|
|
440
|
+
if (sources.has(endpoint)) continue;
|
|
441
|
+
sources.set(endpoint, { ...server, endpoint, local: Boolean(server.path) });
|
|
442
|
+
}
|
|
443
|
+
if (sources.size === 0 && input.defaultMCP) {
|
|
444
|
+
const server = input.defaultMCP();
|
|
445
|
+
if (server) {
|
|
446
|
+
const endpoint = _chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, server.path, input.basePath);
|
|
447
|
+
sources.set(endpoint, { ...server, endpoint, local: true });
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
return [...sources.values()];
|
|
451
|
+
}
|
|
452
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, listFarmMCPServerSources, "listFarmMCPServerSources");
|
|
453
|
+
function serverCardLocation(endpoint) {
|
|
454
|
+
return `${endpoint.replace(/\/$/, "")}${FARM_MCP_SERVER_CARD_SUFFIX}`;
|
|
455
|
+
}
|
|
456
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, serverCardLocation, "serverCardLocation");
|
|
457
|
+
function listFarmMCPServerCards(origin, input = {}) {
|
|
458
|
+
const host = new URL(origin).hostname;
|
|
459
|
+
return listFarmMCPServerSources(input).map((server) => {
|
|
460
|
+
const endpointUrl = server.local ? `${origin}${server.endpoint}` : server.endpoint;
|
|
461
|
+
const cardPath = server.local ? serverCardLocation(server.endpoint) : void 0;
|
|
462
|
+
const slug = cardSlug(server.name);
|
|
463
|
+
const description = truncate(_optionalChain([server, 'access', _12 => _12.description, 'optionalAccess', _13 => _13.trim, 'call', _14 => _14()]) || `MCP server for ${host}`);
|
|
464
|
+
const card = {
|
|
465
|
+
$schema: SERVER_CARD_SCHEMA,
|
|
466
|
+
// The card's name is reverse-DNS; a plain server name is namespaced by the host.
|
|
467
|
+
name: REVERSE_DNS_NAME.test(server.name) ? server.name : `${cardNamespace(host)}/${slug}`,
|
|
468
|
+
version: server.version,
|
|
469
|
+
description,
|
|
470
|
+
...server.title ? { title: server.title } : {},
|
|
471
|
+
websiteUrl: `${origin}${_chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, "/", input.basePath).replace(/(.)\/$/, "$1")}`,
|
|
472
|
+
remotes: [
|
|
473
|
+
{
|
|
474
|
+
type: "streamable-http",
|
|
475
|
+
url: endpointUrl,
|
|
476
|
+
..._optionalChain([server, 'access', _15 => _15.protocolVersions, 'optionalAccess', _16 => _16.length]) ? { supportedProtocolVersions: [...server.protocolVersions] } : {}
|
|
477
|
+
}
|
|
478
|
+
]
|
|
479
|
+
};
|
|
480
|
+
return {
|
|
481
|
+
...cardPath ? { cardPath } : {},
|
|
482
|
+
card,
|
|
483
|
+
entry: {
|
|
484
|
+
identifier: `urn:air:${host}:mcp:${slug}`,
|
|
485
|
+
type: SERVER_CARD_TYPE,
|
|
486
|
+
url: cardPath ? `${origin}${cardPath}` : serverCardLocation(endpointUrl),
|
|
487
|
+
displayName: _nullishCoalesce(server.title, () => ( server.name)),
|
|
488
|
+
description,
|
|
489
|
+
version: server.version
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, listFarmMCPServerCards, "listFarmMCPServerCards");
|
|
495
|
+
function listFarmMCPLlmsTxtLinks(origin, input = {}) {
|
|
496
|
+
const servers = listFarmMCPServerCards(origin, input);
|
|
497
|
+
if (!servers.length) return [];
|
|
498
|
+
return [
|
|
499
|
+
...servers.map(({ card, entry }) => ({
|
|
500
|
+
title: entry.displayName,
|
|
501
|
+
url: card.remotes[0].url,
|
|
502
|
+
description: `${card.description} (Streamable HTTP MCP endpoint; server card at ${entry.url})`
|
|
503
|
+
})),
|
|
504
|
+
{
|
|
505
|
+
title: "AI catalog",
|
|
506
|
+
url: `${origin}${_chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, FARM_AI_CATALOG_PATH, input.basePath)}`,
|
|
507
|
+
description: "MCP server cards for this site"
|
|
508
|
+
}
|
|
509
|
+
];
|
|
510
|
+
}
|
|
511
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, listFarmMCPLlmsTxtLinks, "listFarmMCPLlmsTxtLinks");
|
|
512
|
+
function createFarmAiCatalogResponse(request, input = {}, requestUrl) {
|
|
513
|
+
let url;
|
|
514
|
+
try {
|
|
515
|
+
url = _nullishCoalesce(requestUrl, () => ( new URL(request.url)));
|
|
516
|
+
} catch (e3) {
|
|
517
|
+
return null;
|
|
518
|
+
}
|
|
519
|
+
const { pathname } = url;
|
|
520
|
+
if (!pathname.endsWith(FARM_MCP_SERVER_CARD_SUFFIX) && !pathname.includes("/.well-known/")) {
|
|
521
|
+
return null;
|
|
522
|
+
}
|
|
523
|
+
const ard = pathname === _chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, FARM_ARD_PATH, input.basePath);
|
|
524
|
+
const catalogPath = ard || pathname === _chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, FARM_AI_CATALOG_PATH, input.basePath);
|
|
525
|
+
if (!catalogPath && !pathname.endsWith(FARM_MCP_SERVER_CARD_SUFFIX)) return null;
|
|
526
|
+
const servers = listFarmMCPServerCards(url.origin, input);
|
|
527
|
+
const card = catalogPath ? void 0 : servers.find((server) => server.cardPath === pathname);
|
|
528
|
+
if (!servers.length || !catalogPath && !card) return null;
|
|
529
|
+
const method = request.method.toUpperCase();
|
|
530
|
+
if (method === "OPTIONS") return new Response(null, { status: 204, headers: corsHeaders() });
|
|
531
|
+
if (method !== "GET" && method !== "HEAD") {
|
|
532
|
+
return new Response("Method Not Allowed", {
|
|
533
|
+
status: 405,
|
|
534
|
+
headers: { ...corsHeaders(), Allow: "GET, HEAD, OPTIONS", "Content-Type": "text/plain" }
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
const body = JSON.stringify(
|
|
538
|
+
card ? card.card : { specVersion: "1.0", entries: servers.map(({ entry }) => entry) }
|
|
539
|
+
);
|
|
540
|
+
const etag = _chunkKIIMAWOJcjs.createFarmWeakETag.call(void 0, body);
|
|
541
|
+
const headers = {
|
|
542
|
+
...corsHeaders(),
|
|
543
|
+
"Content-Type": card ? `${SERVER_CARD_TYPE}; charset=utf-8` : ard ? "application/json; charset=utf-8" : `${AI_CATALOG_TYPE}; charset=utf-8`,
|
|
544
|
+
// The body names the request's origin, so caches revalidate rather than reuse it.
|
|
545
|
+
"Cache-Control": "public, max-age=0, must-revalidate",
|
|
546
|
+
ETag: etag,
|
|
547
|
+
"X-Content-Type-Options": "nosniff"
|
|
548
|
+
};
|
|
549
|
+
if (_chunkKIIMAWOJcjs.matchesFarmIfNoneMatch.call(void 0, request.headers.get("if-none-match"), etag)) {
|
|
550
|
+
return new Response(null, { status: 304, headers });
|
|
551
|
+
}
|
|
552
|
+
_chunkJ63ZH5OQcjs.emitFarmAgentRead.call(void 0, request, card ? "mcp-server-card" : "ai-catalog", 200);
|
|
553
|
+
return new Response(method === "HEAD" ? null : body, { status: 200, headers });
|
|
554
|
+
}
|
|
555
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, createFarmAiCatalogResponse, "createFarmAiCatalogResponse");
|
|
556
|
+
function corsHeaders() {
|
|
557
|
+
return {
|
|
558
|
+
"Access-Control-Allow-Origin": "*",
|
|
559
|
+
"Access-Control-Allow-Methods": "GET, HEAD, OPTIONS",
|
|
560
|
+
"Access-Control-Allow-Headers": "Content-Type, If-None-Match",
|
|
561
|
+
"Access-Control-Expose-Headers": "ETag"
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, corsHeaders, "corsHeaders");
|
|
565
|
+
function cardNamespace(host) {
|
|
566
|
+
if (host.includes(":") || /^\d+(?:\.\d+){3}$/.test(host)) return "local";
|
|
567
|
+
return host.split(".").reverse().join(".");
|
|
568
|
+
}
|
|
569
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, cardNamespace, "cardNamespace");
|
|
570
|
+
function cardSlug(name) {
|
|
571
|
+
const last = name.includes("/") ? name.slice(name.lastIndexOf("/") + 1) : name;
|
|
572
|
+
return last.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "mcp";
|
|
573
|
+
}
|
|
574
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, cardSlug, "cardSlug");
|
|
575
|
+
function truncate(text) {
|
|
576
|
+
return text.length <= CARD_DESCRIPTION_MAX ? text : `${text.slice(0, CARD_DESCRIPTION_MAX - 1).trimEnd()}\u2026`;
|
|
577
|
+
}
|
|
578
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, truncate, "truncate");
|
|
579
|
+
|
|
231
580
|
// src/components/error-page.ts
|
|
232
581
|
var ERROR_STATUS_TEXT = {
|
|
233
582
|
400: "Bad Request",
|
|
@@ -466,8 +815,8 @@ function resolveFarmApiCatalogInput(config) {
|
|
|
466
815
|
const mcp = config.mcp && config.mcp.enabled !== false ? config.mcp : void 0;
|
|
467
816
|
return {
|
|
468
817
|
basePath: config.basePath,
|
|
469
|
-
apiBaseURL: _nullishCoalesce(_optionalChain([config, 'access',
|
|
470
|
-
openapi: _optionalChain([config, 'access',
|
|
818
|
+
apiBaseURL: _nullishCoalesce(_optionalChain([config, 'access', _17 => _17.openapi, 'optionalAccess', _18 => _18.servers, 'optionalAccess', _19 => _19[0], 'optionalAccess', _20 => _20.url]), () => ( config.api.baseURL)),
|
|
819
|
+
openapi: _optionalChain([config, 'access', _21 => _21.openapi, 'optionalAccess', _22 => _22.enabled]) ? { specRoute: config.openapi.specRoute, route: config.openapi.route } : void 0,
|
|
471
820
|
mcpPath: mcp ? _chunkKNBBQHO2cjs.resolveFarmAPIServerRoutePath.call(void 0,
|
|
472
821
|
_nullishCoalesce(mcp.path, () => ( "/api/mcp")),
|
|
473
822
|
_chunkKNBBQHO2cjs.resolveFarmAPIServerBasePath.call(void 0, config.api)
|
|
@@ -479,8 +828,8 @@ function createFarmApiCatalog(input) {
|
|
|
479
828
|
const appPath = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (path) => _chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, path, input.basePath), "appPath");
|
|
480
829
|
const items = [];
|
|
481
830
|
const contexts = [];
|
|
482
|
-
const specRoute = _optionalChain([input, 'access',
|
|
483
|
-
const reference = _optionalChain([input, 'access',
|
|
831
|
+
const specRoute = _optionalChain([input, 'access', _23 => _23.openapi, 'optionalAccess', _24 => _24.specRoute]);
|
|
832
|
+
const reference = _optionalChain([input, 'access', _25 => _25.openapi, 'optionalAccess', _26 => _26.route]);
|
|
484
833
|
if (specRoute || reference) {
|
|
485
834
|
const api = { anchor: input.apiBaseURL };
|
|
486
835
|
if (specRoute) {
|
|
@@ -521,28 +870,33 @@ function createFarmApiCatalogResponse(method, input, request) {
|
|
|
521
870
|
_chunkS3JO3N4Hcjs.__name.call(void 0, createFarmApiCatalogResponse, "createFarmApiCatalogResponse");
|
|
522
871
|
|
|
523
872
|
// src/app-manifest.ts
|
|
524
|
-
var FARM_APP_MANIFEST_PATH = "/.well-known/farmjs";
|
|
873
|
+
var FARM_APP_MANIFEST_PATH = "/.well-known/farmjs.json";
|
|
874
|
+
var FARM_APP_MANIFEST_LEGACY_PATH = "/.well-known/farmjs";
|
|
875
|
+
function isFarmAppManifestPath(pathname) {
|
|
876
|
+
return pathname === FARM_APP_MANIFEST_PATH || pathname === FARM_APP_MANIFEST_LEGACY_PATH;
|
|
877
|
+
}
|
|
878
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, isFarmAppManifestPath, "isFarmAppManifestPath");
|
|
525
879
|
var FARM_INFRA_SIGNATURE_HEADER = "farmjs-infra-signature";
|
|
526
880
|
var SIGNED_PURPOSE = "farmjs-manifest-v1";
|
|
527
881
|
var SIGNATURE_WINDOW_SECONDS = 300;
|
|
528
882
|
function resolveFarmAppManifestInput(config, extra) {
|
|
529
|
-
const llms = _optionalChain([config, 'access',
|
|
883
|
+
const llms = _optionalChain([config, 'access', _27 => _27.agent, 'optionalAccess', _28 => _28.llmsTxt]);
|
|
530
884
|
const plugins = (_nullishCoalesce(config.plugins, () => ( []))).map(({ name }) => name);
|
|
531
885
|
const webmcp = plugins.includes("farm:webmcp");
|
|
532
886
|
return {
|
|
533
|
-
renderer: _nullishCoalesce(_optionalChain([config, 'access',
|
|
887
|
+
renderer: _nullishCoalesce(_optionalChain([config, 'access', _29 => _29.renderer, 'optionalAccess', _30 => _30.name]), () => ( "react")),
|
|
534
888
|
basePath: config.basePath || "/",
|
|
535
889
|
build: extra.build,
|
|
536
890
|
packages: extra.packages,
|
|
537
891
|
webmcp: { enabled: webmcp, tools: webmcp ? _nullishCoalesce(extra.webmcpTools, () => ( [])) : [] },
|
|
538
892
|
integrations: Object.entries(_nullishCoalesce(config.integrations, () => ( {}))).flatMap(([key, integration]) => {
|
|
539
|
-
const category = _nullishCoalesce(_optionalChain([integration, 'optionalAccess',
|
|
893
|
+
const category = _nullishCoalesce(_optionalChain([integration, 'optionalAccess', _31 => _31.category]), () => ( _optionalChain([integration, 'optionalAccess', _32 => _32.slot])));
|
|
540
894
|
return integration && category && integration.type ? [{ key, category, type: integration.type }] : [];
|
|
541
895
|
}),
|
|
542
896
|
agent: {
|
|
543
|
-
apiCatalog: _optionalChain([config, 'access',
|
|
897
|
+
apiCatalog: _optionalChain([config, 'access', _33 => _33.agent, 'optionalAccess', _34 => _34.apiCatalog]) ? "/.well-known/api-catalog" : null,
|
|
544
898
|
llmsTxt: llms === true || typeof llms === "object" && llms !== null && llms.enabled !== false,
|
|
545
|
-
openapi: _optionalChain([config, 'access',
|
|
899
|
+
openapi: _optionalChain([config, 'access', _35 => _35.openapi, 'optionalAccess', _36 => _36.enabled]) && config.openapi.specRoute ? config.openapi.specRoute : null
|
|
546
900
|
},
|
|
547
901
|
plugins,
|
|
548
902
|
analytics: config.analytics !== false
|
|
@@ -554,48 +908,80 @@ var SOURCES = {
|
|
|
554
908
|
standalone: "defineTool",
|
|
555
909
|
serverFunction: "serverFunction"
|
|
556
910
|
};
|
|
557
|
-
function createFarmAppManifest(input) {
|
|
558
|
-
|
|
911
|
+
function createFarmAppManifest(input, { full = false } = {}) {
|
|
912
|
+
const manifest = {
|
|
559
913
|
schemaVersion: 1,
|
|
560
914
|
app: {
|
|
561
|
-
farm:
|
|
915
|
+
farm: _chunkDZ5ZVB2Kcjs.FARM_VERSION,
|
|
562
916
|
renderer: input.renderer,
|
|
563
917
|
basePath: input.basePath,
|
|
564
918
|
build: input.build
|
|
565
919
|
},
|
|
566
920
|
packages: input.packages,
|
|
567
921
|
mcp: {
|
|
568
|
-
servers:
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
922
|
+
servers: _chunk75RZHGLScjs._listFarmMCPCatalogs.call(void 0, ).map(({ server, tools, details }) => {
|
|
923
|
+
const listed = full || _optionalChain([details, 'optionalAccess', _37 => _37.public]) === true;
|
|
924
|
+
return {
|
|
925
|
+
name: server.name,
|
|
926
|
+
version: server.version,
|
|
927
|
+
path: server.path,
|
|
928
|
+
authorization: _optionalChain([details, 'optionalAccess', _38 => _38.public]) === true ? "none" : "required",
|
|
929
|
+
resources: listed ? [..._nullishCoalesce(_optionalChain([details, 'optionalAccess', _39 => _39.resources]), () => ( []))] : [],
|
|
930
|
+
prompts: listed ? [..._nullishCoalesce(_optionalChain([details, 'optionalAccess', _40 => _40.prompts]), () => ( []))] : [],
|
|
931
|
+
tools: (listed ? tools : []).map((tool) => {
|
|
932
|
+
const schemas = _optionalChain([details, 'optionalAccess', _41 => _41.schemas, 'optionalAccess', _42 => _42[tool.name]]);
|
|
933
|
+
const hints = Object.fromEntries(
|
|
934
|
+
["readOnlyHint", "destructiveHint", "idempotentHint", "openWorldHint"].filter((hint) => typeof tool[hint] === "boolean").map((hint) => [hint, tool[hint]])
|
|
935
|
+
);
|
|
936
|
+
return {
|
|
937
|
+
name: tool.name,
|
|
938
|
+
...tool.title ? { title: tool.title } : {},
|
|
939
|
+
...tool.description ? { description: tool.description } : {},
|
|
940
|
+
source: SOURCES[tool.kind],
|
|
941
|
+
// MCP clients never see the route behind a tool; only Infra's view names it.
|
|
942
|
+
...full && tool.kind === "endpoint" ? { method: tool.method, path: tool.path } : {},
|
|
943
|
+
...hints,
|
|
944
|
+
...schemas ? { inputSchema: schemas.input } : {},
|
|
945
|
+
..._optionalChain([schemas, 'optionalAccess', _43 => _43.output]) ? { outputSchema: schemas.output } : {}
|
|
946
|
+
};
|
|
947
|
+
})
|
|
948
|
+
};
|
|
949
|
+
})
|
|
591
950
|
},
|
|
592
951
|
webmcp: input.webmcp,
|
|
593
952
|
integrations: input.integrations,
|
|
594
953
|
agent: input.agent,
|
|
595
954
|
plugins: input.plugins
|
|
596
955
|
};
|
|
956
|
+
manifest.mcp.servers.push(...listDefaultServer(input));
|
|
957
|
+
return manifest;
|
|
597
958
|
}
|
|
598
959
|
_chunkS3JO3N4Hcjs.__name.call(void 0, createFarmAppManifest, "createFarmAppManifest");
|
|
960
|
+
function listDefaultServer(input) {
|
|
961
|
+
const server = _optionalChain([input, 'access', _44 => _44.defaultMCP, 'optionalCall', _45 => _45()]);
|
|
962
|
+
if (!server) return [];
|
|
963
|
+
return [
|
|
964
|
+
{
|
|
965
|
+
name: server.name,
|
|
966
|
+
version: server.version,
|
|
967
|
+
path: server.path,
|
|
968
|
+
authorization: "none",
|
|
969
|
+
resources: [],
|
|
970
|
+
prompts: [],
|
|
971
|
+
tools: _chunkPTZ2TVNEcjs.FARM_DEFAULT_MCP_TOOLS.map((tool) => ({
|
|
972
|
+
name: tool.name,
|
|
973
|
+
title: tool.title,
|
|
974
|
+
description: tool.description,
|
|
975
|
+
// Standalone tools with no endpoint behind them, like defineTool's.
|
|
976
|
+
source: "defineTool",
|
|
977
|
+
...tool.annotations,
|
|
978
|
+
inputSchema: tool.inputSchema,
|
|
979
|
+
..."outputSchema" in tool ? { outputSchema: tool.outputSchema } : {}
|
|
980
|
+
}))
|
|
981
|
+
}
|
|
982
|
+
];
|
|
983
|
+
}
|
|
984
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, listDefaultServer, "listDefaultServer");
|
|
599
985
|
var encoder = new TextEncoder();
|
|
600
986
|
var hex = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (bytes) => [...new Uint8Array(bytes)].map((byte) => byte.toString(16).padStart(2, "0")).join(""), "hex");
|
|
601
987
|
async function sha256Hex(value) {
|
|
@@ -625,7 +1011,7 @@ async function verifyFarmInfraManifestSignature(header, key, now = Date.now()) {
|
|
|
625
1011
|
if (!header || header.length > 2048) return false;
|
|
626
1012
|
const parts = header.split(",").map((part) => part.trim());
|
|
627
1013
|
const timestamp = Number(
|
|
628
|
-
_optionalChain([/^t=(\d{1,12})$/, 'access',
|
|
1014
|
+
_optionalChain([/^t=(\d{1,12})$/, 'access', _46 => _46.exec, 'call', _47 => _47(_nullishCoalesce(parts.find((part) => part.startsWith("t=")), () => ( ""))), 'optionalAccess', _48 => _48[1]])
|
|
629
1015
|
);
|
|
630
1016
|
if (!Number.isSafeInteger(timestamp)) return false;
|
|
631
1017
|
if (Math.abs(now / 1e3 - timestamp) > SIGNATURE_WINDOW_SECONDS) return false;
|
|
@@ -637,25 +1023,44 @@ ${timestamp}`);
|
|
|
637
1023
|
}
|
|
638
1024
|
_chunkS3JO3N4Hcjs.__name.call(void 0, verifyFarmInfraManifestSignature, "verifyFarmInfraManifestSignature");
|
|
639
1025
|
function processEnv() {
|
|
640
|
-
return _nullishCoalesce(_optionalChain([globalThis, 'access',
|
|
1026
|
+
return _nullishCoalesce(_optionalChain([globalThis, 'access', _49 => _49.process, 'optionalAccess', _50 => _50.env]), () => ( {}));
|
|
641
1027
|
}
|
|
642
1028
|
_chunkS3JO3N4Hcjs.__name.call(void 0, processEnv, "processEnv");
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
1029
|
+
var CORS_HEADERS = {
|
|
1030
|
+
"access-control-allow-origin": "*",
|
|
1031
|
+
"access-control-allow-methods": "GET, HEAD, OPTIONS",
|
|
1032
|
+
"access-control-allow-headers": `If-None-Match, ${FARM_INFRA_SIGNATURE_HEADER}`,
|
|
1033
|
+
"access-control-expose-headers": "ETag"
|
|
1034
|
+
};
|
|
1035
|
+
async function createFarmAppManifestResponse(request, input, options = {}) {
|
|
1036
|
+
const method = request.method.toUpperCase();
|
|
1037
|
+
if (method === "OPTIONS") return new Response(null, { status: 204, headers: CORS_HEADERS });
|
|
1038
|
+
if (method !== "GET" && method !== "HEAD") {
|
|
1039
|
+
return new Response("Method Not Allowed", {
|
|
1040
|
+
status: 405,
|
|
1041
|
+
headers: { ...CORS_HEADERS, allow: "GET, HEAD, OPTIONS", "content-type": "text/plain" }
|
|
1042
|
+
});
|
|
654
1043
|
}
|
|
655
|
-
const
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
1044
|
+
const signature = request.headers.get(FARM_INFRA_SIGNATURE_HEADER);
|
|
1045
|
+
const key = input.analytics ? _optionalChain([(_nullishCoalesce(options.env, () => ( processEnv()))), 'access', _51 => _51.FARMJS_API_KEY, 'optionalAccess', _52 => _52.trim, 'call', _53 => _53()]) : void 0;
|
|
1046
|
+
const full = Boolean(
|
|
1047
|
+
signature && key && await verifyFarmInfraManifestSignature(signature, key)
|
|
1048
|
+
);
|
|
1049
|
+
const body = JSON.stringify(createFarmAppManifest(input, { full }));
|
|
1050
|
+
const etag = _chunkKIIMAWOJcjs.createFarmWeakETag.call(void 0, body);
|
|
1051
|
+
const headers = {
|
|
1052
|
+
...CORS_HEADERS,
|
|
1053
|
+
"content-type": "application/json; charset=utf-8",
|
|
1054
|
+
// The full view is for Infra alone; shared caches keep the two views apart.
|
|
1055
|
+
"cache-control": full ? "private, no-store" : "public, max-age=0, must-revalidate",
|
|
1056
|
+
vary: FARM_INFRA_SIGNATURE_HEADER,
|
|
1057
|
+
etag,
|
|
1058
|
+
"x-content-type-options": "nosniff"
|
|
1059
|
+
};
|
|
1060
|
+
if (!full && _chunkKIIMAWOJcjs.matchesFarmIfNoneMatch.call(void 0, request.headers.get("if-none-match"), etag)) {
|
|
1061
|
+
return new Response(null, { status: 304, headers });
|
|
1062
|
+
}
|
|
1063
|
+
return new Response(method === "HEAD" ? null : body, { status: 200, headers });
|
|
659
1064
|
}
|
|
660
1065
|
_chunkS3JO3N4Hcjs.__name.call(void 0, createFarmAppManifestResponse, "createFarmAppManifestResponse");
|
|
661
1066
|
|
|
@@ -675,4 +1080,22 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmAppManifestResponse, "createFarm
|
|
|
675
1080
|
|
|
676
1081
|
|
|
677
1082
|
|
|
678
|
-
|
|
1083
|
+
|
|
1084
|
+
|
|
1085
|
+
|
|
1086
|
+
|
|
1087
|
+
|
|
1088
|
+
|
|
1089
|
+
|
|
1090
|
+
|
|
1091
|
+
|
|
1092
|
+
|
|
1093
|
+
|
|
1094
|
+
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
|
|
1098
|
+
|
|
1099
|
+
|
|
1100
|
+
|
|
1101
|
+
exports.formatRouteSegment = formatRouteSegment; exports.createRouteDirectoryPattern = createRouteDirectoryPattern; exports.stripRouteGroups = stripRouteGroups; exports.getRouteGroupScope = getRouteGroupScope; exports.isInRouteGroupScope = isInRouteGroupScope; exports.getRouteDirectoryDepth = getRouteDirectoryDepth; exports.routeBoundaryCoversDirectory = routeBoundaryCoversDirectory; exports.HOISTED_HEAD_ELEMENT = HOISTED_HEAD_ELEMENT; exports.extractFarmFullDocument = extractFarmFullDocument; exports.classifyFarmDocumentPrefix = classifyFarmDocumentPrefix; exports.removeFarmDocumentTitles = removeFarmDocumentTitles; exports.ensureFarmDocumentMeta = ensureFarmDocumentMeta; exports.composeFarmFullDocument = composeFarmFullDocument; exports.renderFarmLocaleAlternateLinks = renderFarmLocaleAlternateLinks; exports.createLateRedirectRecovery = createLateRedirectRecovery; exports.createLateNotFoundRecovery = createLateNotFoundRecovery; exports.createFarmMetadataRouteResponse = createFarmMetadataRouteResponse; exports.listFarmMCPLlmsTxtLinks = listFarmMCPLlmsTxtLinks; exports.createFarmAiCatalogResponse = createFarmAiCatalogResponse; exports.resolveDefaultErrorStatus = resolveDefaultErrorStatus; exports.getDefaultErrorStatusText = getDefaultErrorStatusText; exports.createDefaultErrorMarkup = createDefaultErrorMarkup; exports.createFarmThemeDocumentParts = createFarmThemeDocumentParts; exports.applyFarmThemeDocument = applyFarmThemeDocument; exports.FARM_API_CATALOG_PATH = FARM_API_CATALOG_PATH; exports.resolveFarmApiCatalogInput = resolveFarmApiCatalogInput; exports.createFarmApiCatalogResponse = createFarmApiCatalogResponse; exports.FARM_APP_MANIFEST_PATH = FARM_APP_MANIFEST_PATH; exports.FARM_APP_MANIFEST_LEGACY_PATH = FARM_APP_MANIFEST_LEGACY_PATH; exports.isFarmAppManifestPath = isFarmAppManifestPath; exports.FARM_INFRA_SIGNATURE_HEADER = FARM_INFRA_SIGNATURE_HEADER; exports.resolveFarmAppManifestInput = resolveFarmAppManifestInput; exports.createFarmAppManifestResponse = createFarmAppManifestResponse;
|