@farm.js/core 0.1.36 → 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.
- package/dist/{agent-mcp-BVExL8rZ.d.mts → agent-mcp-BwKlpnc7.d.mts} +1 -1
- package/dist/{agent-mcp-luzfXK-P.d.ts → agent-mcp-De1imoMS.d.ts} +1 -1
- package/dist/{agent-mcp-handler-SJAHFSPI.cjs → agent-mcp-handler-MRGP3WJ3.cjs} +5 -5
- package/dist/{agent-mcp-handler-LPJ2CADR.mjs → agent-mcp-handler-OLRMZONF.mjs} +4 -4
- package/dist/agent-runtime.cjs +3 -3
- package/dist/agent-runtime.d.mts +1 -1
- package/dist/agent-runtime.d.ts +1 -1
- package/dist/agent-runtime.mjs +2 -2
- package/dist/api/client.cjs +3 -3
- package/dist/api/client.mjs +2 -2
- package/dist/api/route-manager.cjs +6 -6
- package/dist/api/route-manager.d.mts +3 -3
- package/dist/api/route-manager.d.ts +3 -3
- package/dist/api/route-manager.mjs +5 -5
- package/dist/api/runtime.cjs +4 -4
- package/dist/api/runtime.d.mts +2 -2
- package/dist/api/runtime.d.ts +2 -2
- package/dist/api/runtime.mjs +3 -3
- package/dist/api.cjs +9 -8
- package/dist/api.d.mts +3 -3
- package/dist/api.d.ts +3 -3
- package/dist/api.mjs +8 -7
- package/dist/{app-BukwkFIu.d.mts → app-CFZt-srr.d.mts} +21 -3
- package/dist/{app-Yfa2dsFy.d.ts → app-kT_QXTdx.d.ts} +21 -3
- package/dist/app-markdown.cjs +6 -4
- package/dist/app-markdown.d.mts +3 -3
- package/dist/app-markdown.d.ts +3 -3
- package/dist/app-markdown.mjs +5 -3
- package/dist/{chunk-ADEA7PN3.cjs → chunk-2DD4JMQC.cjs} +113 -22
- package/dist/chunk-2ZYGC6SS.cjs +576 -0
- package/dist/{chunk-JZVADIOD.cjs → chunk-34UCJRQO.cjs} +2 -2
- package/dist/{chunk-D2BB47NB.cjs → chunk-3LOLJTFV.cjs} +6 -6
- package/dist/{chunk-KXWRO25S.cjs → chunk-472NCAZ7.cjs} +3 -3
- package/dist/chunk-4E5QXOCL.cjs +109 -0
- package/dist/{chunk-Z2HLU4IX.cjs → chunk-4GWRFP22.cjs} +23 -2
- package/dist/{chunk-VQLJWDVW.cjs → chunk-4IE345DM.cjs} +37 -19
- package/dist/{chunk-O6WAEAX3.mjs → chunk-5BWWFHR2.mjs} +70 -15
- package/dist/{chunk-JNUWCDTF.cjs → chunk-5D2JIPLH.cjs} +2 -2
- package/dist/{chunk-BO36SELV.cjs → chunk-5OKBARDN.cjs} +2 -2
- package/dist/{chunk-AO6RYU5N.cjs → chunk-5PWXMJOH.cjs} +30 -22
- package/dist/{chunk-AHGECQEW.mjs → chunk-666CKENS.mjs} +1 -1
- package/dist/chunk-6BK3K2GB.mjs +318 -0
- package/dist/{chunk-O6I6VWKK.mjs → chunk-6HB6V3R7.mjs} +1 -1
- package/dist/{chunk-UXFQ3UDA.cjs → chunk-6XWDE2P2.cjs} +61 -4
- package/dist/{chunk-VILIPRS6.mjs → chunk-7FPTZLKH.mjs} +1 -1
- package/dist/{chunk-SC2WYWPF.mjs → chunk-7PEP3BUT.mjs} +3 -3
- package/dist/{chunk-4E5AEDKY.mjs → chunk-A3EAIURZ.mjs} +25 -7
- package/dist/{chunk-YDQZGSDS.mjs → chunk-ARC7I3O2.mjs} +1 -1
- package/dist/{chunk-LSZAVSGY.mjs → chunk-B6G5CKMC.mjs} +101 -10
- package/dist/{chunk-3KZS4SUS.mjs → chunk-BZHXGVMA.mjs} +1 -1
- package/dist/{chunk-KN7K4VQN.mjs → chunk-CNNOLE4O.mjs} +1 -1
- package/dist/{chunk-4GLOOWKE.mjs → chunk-CQMVIOYP.mjs} +1 -1
- package/dist/{chunk-2ELDTQRN.mjs → chunk-CUM5NYL5.mjs} +1 -1
- package/dist/{chunk-HITLGIAO.cjs → chunk-CY2ZQ5C6.cjs} +7 -6
- package/dist/{chunk-PZNL3WEG.mjs → chunk-DMEPTZTI.mjs} +22 -11
- package/dist/{chunk-QORUJDIV.mjs → chunk-DRLKAXDM.mjs} +2 -2
- package/dist/{chunk-DQQOKWYA.cjs → chunk-EIPC3FDA.cjs} +12 -4
- package/dist/{chunk-HOXTWRGB.mjs → chunk-EKF7KDFD.mjs} +5 -2
- package/dist/{chunk-42NHY7HW.cjs → chunk-EKN7NSZO.cjs} +62 -14
- package/dist/{chunk-YKX5BK66.cjs → chunk-EMO6K4YY.cjs} +7 -7
- package/dist/{chunk-6SJ2KJTA.mjs → chunk-EPYU2EBL.mjs} +1 -1
- package/dist/{chunk-D227TIEN.cjs → chunk-FWE7LEQC.cjs} +13 -13
- package/dist/{chunk-PTZ2TVNE.cjs → chunk-H5CLOUZS.cjs} +5 -5
- package/dist/{chunk-DTSROJ5J.mjs → chunk-HD5CF3OE.mjs} +1 -1
- package/dist/{chunk-35GKZR22.mjs → chunk-HXRYZWTA.mjs} +1 -1
- package/dist/{chunk-JG6DJF5A.mjs → chunk-HZFM2LWQ.mjs} +22 -1
- package/dist/{chunk-MKYBIIAQ.mjs → chunk-IBUQWVYA.mjs} +17 -1
- package/dist/{chunk-F2SE2VDO.mjs → chunk-IHQIOZLC.mjs} +1 -1
- package/dist/{chunk-W7LF2J2S.mjs → chunk-INL3THCU.mjs} +1 -1
- package/dist/{chunk-WZ77PUAM.mjs → chunk-IVLZZZEI.mjs} +1 -1
- package/dist/{chunk-ENLZ4R3Y.mjs → chunk-J7K2NZD6.mjs} +7 -6
- package/dist/{chunk-BPOF5U4N.mjs → chunk-JCKYH4LG.mjs} +10 -7
- package/dist/{chunk-77GNHH2Z.cjs → chunk-JCYYXBAJ.cjs} +3 -3
- package/dist/{chunk-C4SPBWFM.cjs → chunk-JEZO6VUR.cjs} +10 -1
- package/dist/{chunk-ZWM5KGAA.cjs → chunk-KCQBAKIY.cjs} +23 -20
- package/dist/{chunk-OTC5BDGO.mjs → chunk-KHKLMNI5.mjs} +12 -7
- package/dist/{chunk-DZ5ZVB2K.cjs → chunk-KKSTAEMY.cjs} +1 -1
- package/dist/{chunk-N2NAS2AM.cjs → chunk-L4DD7ODZ.cjs} +2 -2
- package/dist/{chunk-YSCV4SJF.cjs → chunk-L5H2GSUC.cjs} +4 -4
- package/dist/{chunk-OO7GXVSR.mjs → chunk-LI2F57NI.mjs} +1 -1
- package/dist/{chunk-NRSN7G7E.mjs → chunk-MLY2RP5R.mjs} +10 -2
- package/dist/{chunk-BPMATOP2.cjs → chunk-N32CC42M.cjs} +25 -20
- package/dist/{chunk-FNO7A7CM.cjs → chunk-NBBEQLOK.cjs} +34 -16
- package/dist/{chunk-XCMCS4DA.mjs → chunk-ND2CWPOD.mjs} +2 -2
- package/dist/{chunk-GQRWBCWK.mjs → chunk-OAHTRMIC.mjs} +13 -5
- package/dist/{chunk-35WV46VL.mjs → chunk-OCIEZME4.mjs} +876 -685
- package/dist/{chunk-UH6QN5NL.mjs → chunk-P664ZVTV.mjs} +2 -2
- package/dist/{chunk-TE2G5ION.cjs → chunk-PGZDEPTM.cjs} +88 -33
- package/dist/{chunk-FDR64H6B.mjs → chunk-POSPE3IO.mjs} +59 -2
- package/dist/{chunk-UVW64BCB.cjs → chunk-Q3NXS4MU.cjs} +16 -14
- package/dist/{chunk-4WCZJQUO.mjs → chunk-QFW2IH5E.mjs} +57 -9
- package/dist/{chunk-5SJWVY6R.mjs → chunk-QHSH7IH4.mjs} +9 -0
- package/dist/chunk-QRKIMN7T.mjs +48 -0
- package/dist/chunk-QTXBII4Z.cjs +632 -0
- package/dist/{chunk-CI6E3UOH.cjs → chunk-RG4A6LB2.cjs} +7 -7
- package/dist/{chunk-BJPBQNIE.cjs → chunk-RW63BOV7.cjs} +2 -2
- package/dist/{chunk-FO427P6I.cjs → chunk-RWFLWR5J.cjs} +10 -10
- package/dist/{chunk-FFFW3OQ7.cjs → chunk-S6FJO323.cjs} +2 -2
- package/dist/{chunk-EUV4YR3V.cjs → chunk-SGBJ247Q.cjs} +18 -2
- package/dist/chunk-SGBZPZUW.mjs +75 -0
- package/dist/{chunk-2NNMOPDN.mjs → chunk-SKVTP5PR.mjs} +4 -1
- package/dist/{chunk-2YTDKNH3.cjs → chunk-TGFQVLLF.cjs} +956 -765
- package/dist/{chunk-IHNIDL6H.cjs → chunk-TO4GJ56K.cjs} +22 -11
- package/dist/{chunk-276VJSM6.mjs → chunk-TUBTR2OP.mjs} +250 -118
- package/dist/{chunk-GQ3Z3IZI.cjs → chunk-TYJALEHQ.cjs} +18 -18
- package/dist/chunk-TYMMBFN2.mjs +109 -0
- package/dist/chunk-U6QLDL3G.mjs +576 -0
- package/dist/{chunk-U4KT7QP3.cjs → chunk-ULASELLA.cjs} +26 -1
- package/dist/chunk-UXHS27O6.cjs +75 -0
- package/dist/{chunk-WWIKMBRN.mjs → chunk-VNGH5MLF.mjs} +17 -1
- package/dist/{chunk-EZDQRNQ7.mjs → chunk-VT4WFRHA.mjs} +23 -5
- package/dist/{chunk-CBJJH36A.cjs → chunk-VU6AAZVY.cjs} +20 -4
- package/dist/{chunk-27ZWSI3W.cjs → chunk-VXEEATVD.cjs} +2 -2
- package/dist/{chunk-EWET4D2Y.mjs → chunk-W36M2BQ4.mjs} +3 -3
- package/dist/{chunk-4WQ6PGSJ.cjs → chunk-WEW2JVA4.cjs} +4 -4
- package/dist/{chunk-4E5WBPEG.mjs → chunk-WFRT7JPX.mjs} +8 -533
- package/dist/{chunk-T4OGRVNS.mjs → chunk-WLL43JMO.mjs} +2 -2
- package/dist/chunk-WW46B6HA.cjs +318 -0
- package/dist/{chunk-TKSCR644.cjs → chunk-WXJLNP33.cjs} +2 -2
- package/dist/{chunk-S6VYG6XU.cjs → chunk-XKG2BLFN.cjs} +2 -2
- package/dist/{chunk-4NU4GGTC.cjs → chunk-XKVVMZP5.cjs} +6 -3
- package/dist/{chunk-NMHWYWDR.cjs → chunk-YR2VBEMO.cjs} +658 -526
- package/dist/{chunk-OHLSEQ57.mjs → chunk-ZJD2PN6Z.mjs} +10 -8
- package/dist/{chunk-3BU22U3M.cjs → chunk-ZXH4TS3F.cjs} +5 -2
- package/dist/{client-plugins-r1mOtSC1.d.ts → client-plugins-BvlNhGEB.d.ts} +54 -7
- package/dist/{client-plugins-C3mK9Pol.d.mts → client-plugins-DUrIYX9B.d.mts} +54 -7
- package/dist/client-plugins.d.mts +1 -1
- package/dist/client-plugins.d.ts +1 -1
- package/dist/client.cjs +8 -8
- package/dist/client.d.mts +5 -5
- package/dist/client.d.ts +5 -5
- package/dist/client.mjs +7 -7
- package/dist/config.d.mts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/{devtools-ERIKFEXX.mjs → devtools-JYJNOLPQ.mjs} +8 -6
- package/dist/{devtools-JZJJY5CK.cjs → devtools-VQWJANJV.cjs} +9 -7
- package/dist/docs.cjs +12 -10
- package/dist/docs.d.mts +20 -2
- package/dist/docs.d.ts +20 -2
- package/dist/docs.mjs +11 -9
- package/dist/headers.cjs +6 -4
- package/dist/headers.d.mts +11 -1
- package/dist/headers.d.ts +11 -1
- package/dist/headers.mjs +5 -3
- package/dist/i18n/client.cjs +11 -11
- package/dist/i18n/client.mjs +3 -3
- package/dist/index.cjs +62 -46
- package/dist/index.d.mts +16 -16
- package/dist/index.d.ts +16 -16
- package/dist/index.mjs +62 -46
- package/dist/integrations.cjs +5 -3
- package/dist/integrations.d.mts +1 -1
- package/dist/integrations.d.ts +1 -1
- package/dist/integrations.mjs +4 -2
- package/dist/internal/app-markdown-runtime.cjs +5 -3
- package/dist/internal/app-markdown-runtime.d.mts +19 -5
- package/dist/internal/app-markdown-runtime.d.ts +19 -5
- package/dist/internal/app-markdown-runtime.mjs +4 -2
- package/dist/internal/build-runtime.cjs +33 -30
- package/dist/internal/build-runtime.d.mts +3 -3
- package/dist/internal/build-runtime.d.ts +3 -3
- package/dist/internal/build-runtime.mjs +32 -29
- package/dist/internal/cli-runtime.cjs +14 -12
- package/dist/internal/cli-runtime.mjs +13 -11
- package/dist/internal/client-error-overlay.cjs +4 -4
- package/dist/internal/client-error-overlay.mjs +1 -1
- package/dist/internal/client-runtime.cjs +2 -2
- package/dist/internal/client-runtime.mjs +1 -1
- package/dist/internal/compression-runtime.d.mts +1 -1
- package/dist/internal/compression-runtime.d.ts +1 -1
- package/dist/internal/config-runtime.cjs +9 -7
- package/dist/internal/config-runtime.d.mts +2 -2
- package/dist/internal/config-runtime.d.ts +2 -2
- package/dist/internal/config-runtime.mjs +8 -6
- package/dist/internal/docs-precompiled-runtime.cjs +19 -13
- package/dist/internal/docs-precompiled-runtime.d.mts +5 -0
- package/dist/internal/docs-precompiled-runtime.d.ts +5 -0
- package/dist/internal/docs-precompiled-runtime.mjs +14 -8
- package/dist/internal/infra-analytics-runtime.cjs +5 -5
- package/dist/internal/infra-analytics-runtime.mjs +3 -3
- package/dist/internal/product-telemetry-runtime.cjs +2 -2
- package/dist/internal/product-telemetry-runtime.mjs +1 -1
- package/dist/internal/production-node-env.cjs +6 -2
- package/dist/internal/production-node-env.d.mts +10 -1
- package/dist/internal/production-node-env.d.ts +10 -1
- package/dist/internal/production-node-env.mjs +5 -1
- package/dist/internal/production-runtime.cjs +39 -54
- package/dist/internal/production-runtime.d.mts +51 -11
- package/dist/internal/production-runtime.d.ts +51 -11
- package/dist/internal/production-runtime.mjs +39 -54
- package/dist/markdown.cjs +8 -2
- package/dist/markdown.d.mts +1 -1
- package/dist/markdown.d.ts +1 -1
- package/dist/markdown.mjs +7 -1
- package/dist/middleware.cjs +10 -8
- package/dist/middleware.d.mts +27 -5
- package/dist/middleware.d.ts +27 -5
- package/dist/middleware.mjs +10 -8
- package/dist/navigation.cjs +7 -7
- package/dist/navigation.d.mts +4 -4
- package/dist/navigation.d.ts +4 -4
- package/dist/navigation.mjs +6 -6
- package/dist/plugin.cjs +25 -23
- package/dist/plugin.d.mts +1 -1
- package/dist/plugin.d.ts +1 -1
- package/dist/plugin.mjs +24 -22
- package/dist/{production-runtime-CCeVZXst.d.mts → production-runtime-BQ4_WLwQ.d.mts} +1 -1
- package/dist/{production-runtime-DPnsggY3.d.ts → production-runtime-D2aMyzjr.d.ts} +1 -1
- package/dist/query/client.cjs +9 -9
- package/dist/query/client.mjs +4 -4
- package/dist/{render-plan-Cw4f5E_R.d.ts → render-plan-25p4hrj4.d.ts} +1 -1
- package/dist/{render-plan-BuGaPFe6.d.mts → render-plan-DtkXMN8D.d.mts} +1 -1
- package/dist/renderer-client.cjs +12 -12
- package/dist/renderer-client.d.mts +3 -3
- package/dist/renderer-client.d.ts +3 -3
- package/dist/renderer-client.mjs +4 -4
- package/dist/renderer.d.mts +13 -4
- package/dist/renderer.d.ts +13 -4
- package/dist/{request-CsGARcAw.d.mts → request-DgCkIdcn.d.mts} +4 -2
- package/dist/{request-Bkg-hERy.d.ts → request-jF4jwx8f.d.ts} +4 -2
- package/dist/request.cjs +3 -3
- package/dist/request.d.mts +2 -2
- package/dist/request.d.ts +2 -2
- package/dist/request.mjs +2 -2
- package/dist/{route-rendering-BUZMH_64.d.ts → route-rendering-Bji6S6a_.d.ts} +1 -1
- package/dist/{route-rendering-f11yh5dp.d.mts → route-rendering-CSBF78Ya.d.mts} +1 -1
- package/dist/{router-Cp6yRE8A.d.mts → router-B09Ui3Qm.d.mts} +1 -1
- package/dist/{router-B8CR9GbD.d.ts → router-CPB9cXtG.d.ts} +1 -1
- package/dist/routes.cjs +2 -2
- package/dist/routes.d.mts +1 -1
- package/dist/routes.d.ts +1 -1
- package/dist/routes.mjs +1 -1
- package/dist/{runtime-CAEv36S_.d.mts → runtime-CM6E6yuI.d.mts} +1 -1
- package/dist/{runtime-CQVsT330.d.ts → runtime-EDMwLdjv.d.ts} +1 -1
- package/dist/server-fn.cjs +3 -3
- package/dist/server-fn.mjs +2 -2
- package/dist/server-plugins.cjs +5 -5
- package/dist/server-plugins.d.mts +2 -2
- package/dist/server-plugins.d.ts +2 -2
- package/dist/server-plugins.mjs +4 -4
- package/dist/server-query.cjs +4 -4
- package/dist/server-query.mjs +3 -3
- package/dist/server.cjs +51 -49
- package/dist/server.d.mts +7 -7
- package/dist/server.d.ts +7 -7
- package/dist/server.mjs +29 -27
- package/dist/{spa-router-BuciWGCZ.d.ts → spa-router-B_N8XgVu.d.ts} +2 -2
- package/dist/{spa-router-DwbqGkGj.d.mts → spa-router-Cgimzfbi.d.mts} +2 -2
- package/dist/testing.cjs +8 -8
- package/dist/testing.d.mts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.mjs +6 -6
- package/dist/theme/server.cjs +4 -4
- package/dist/theme/server.mjs +3 -3
- package/dist/{utils-CaoWKtYM.d.ts → utils-BNxAKAuT.d.ts} +1 -1
- package/dist/{utils-B9V0S_yL.d.mts → utils-DZciYXYl.d.mts} +1 -1
- package/dist/version.cjs +2 -2
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +25 -23
- package/dist/vite.d.mts +1 -1
- package/dist/vite.d.ts +1 -1
- package/dist/vite.mjs +24 -22
- package/package.json +1 -1
- package/types/middleware.d.ts +5 -1
- package/dist/chunk-655RLQQL.mjs +0 -43
- package/dist/chunk-FXEF4PPL.mjs +0 -47
- package/dist/chunk-IZY3V5XW.mjs +0 -23
- package/dist/chunk-MRMI32SN.cjs +0 -1157
- package/dist/chunk-MT763TDW.cjs +0 -43
- package/dist/chunk-XD32KALF.cjs +0 -47
- /package/dist/{chunk-SJNMVDDF.cjs → chunk-FUCSUGDM.cjs} +0 -0
- /package/dist/{chunk-UDNPLXW7.mjs → chunk-MYIZXDZA.mjs} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
collectFarmLlmsTxtPages
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HD5CF3OE.mjs";
|
|
4
4
|
import {
|
|
5
5
|
getFarmMarkdownMirrorPath,
|
|
6
6
|
isFarmMarkdownMirrorExposed
|
|
7
|
-
} from "./chunk-
|
|
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
|
|
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
|
|
723
|
-
|
|
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(
|
|
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',
|
|
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
|
-
|
|
1185
|
-
|
|
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 >=
|
|
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',
|
|
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',
|
|
1301
|
-
const explicitLabel = _optionalChain([source, 'access',
|
|
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',
|
|
1309
|
-
return _optionalChain([label, 'optionalAccess',
|
|
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',
|
|
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',
|
|
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',
|
|
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
|
-
|
|
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',
|
|
1841
|
-
(font) => (_optionalChain([font, 'optionalAccess',
|
|
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',
|
|
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',
|
|
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 ||
|
|
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(
|
|
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',
|
|
1985
|
-
const usesLayoutFonts = Boolean(_optionalChain([layoutFonts, 'optionalAccess',
|
|
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
|
-
|
|
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,6 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
+
_setAppRequestView,
|
|
3
|
+
_setCspNonceResolver,
|
|
2
4
|
_setCurrentRequestResolver
|
|
3
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QRKIMN7T.mjs";
|
|
4
6
|
import {
|
|
5
7
|
__name
|
|
6
8
|
} from "./chunk-LPEX4YW6.mjs";
|
|
@@ -28,7 +30,61 @@ function getRequestReads() {
|
|
|
28
30
|
}
|
|
29
31
|
__name(getRequestReads, "getRequestReads");
|
|
30
32
|
var requestReads = getRequestReads();
|
|
33
|
+
function countRequestRead(request) {
|
|
34
|
+
requestReads.set(request, (requestReads.get(request) ?? 0) + 1);
|
|
35
|
+
}
|
|
36
|
+
__name(countRequestRead, "countRequestRead");
|
|
37
|
+
var appRequestViews = /* @__PURE__ */ new WeakMap();
|
|
38
|
+
function getAppRequestView(request) {
|
|
39
|
+
const existing = appRequestViews.get(request);
|
|
40
|
+
if (existing) return existing;
|
|
41
|
+
let view;
|
|
42
|
+
if (request.method !== "GET" && request.method !== "HEAD") {
|
|
43
|
+
countRequestRead(request);
|
|
44
|
+
view = request;
|
|
45
|
+
} else {
|
|
46
|
+
view = new Request(request);
|
|
47
|
+
Object.defineProperties(view, {
|
|
48
|
+
// The rendered request's own signal, so aborting it reaches the handler unchanged.
|
|
49
|
+
signal: { configurable: true, get: /* @__PURE__ */ __name(() => request.signal, "get") },
|
|
50
|
+
headers: {
|
|
51
|
+
configurable: true,
|
|
52
|
+
get() {
|
|
53
|
+
countRequestRead(request);
|
|
54
|
+
return request.headers;
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
clone: {
|
|
58
|
+
configurable: true,
|
|
59
|
+
value() {
|
|
60
|
+
countRequestRead(request);
|
|
61
|
+
return request.clone();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
appRequestViews.set(request, view);
|
|
67
|
+
return view;
|
|
68
|
+
}
|
|
69
|
+
__name(getAppRequestView, "getAppRequestView");
|
|
31
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");
|
|
87
|
+
_setAppRequestView(getAppRequestView);
|
|
32
88
|
function resolveFarmRequestURL(req, options = {}) {
|
|
33
89
|
if (options.origin) {
|
|
34
90
|
return new URL(req.url || "/", options.origin);
|
|
@@ -116,7 +172,7 @@ function getCurrentRequest() {
|
|
|
116
172
|
"No current request is available. getCurrentRequest() can only be used during server rendering."
|
|
117
173
|
);
|
|
118
174
|
}
|
|
119
|
-
|
|
175
|
+
countRequestRead(request);
|
|
120
176
|
return request;
|
|
121
177
|
}
|
|
122
178
|
__name(getCurrentRequest, "getCurrentRequest");
|
|
@@ -130,6 +186,7 @@ function getCurrentRequestOrNull() {
|
|
|
130
186
|
__name(getCurrentRequestOrNull, "getCurrentRequestOrNull");
|
|
131
187
|
|
|
132
188
|
export {
|
|
189
|
+
_runWithFarmCspNonce,
|
|
133
190
|
resolveFarmRequestURL,
|
|
134
191
|
resolveFarmWebRequestOrigin,
|
|
135
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
|
-
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
147
|
-
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 =
|
|
701
|
-
const securityHeader =
|
|
702
|
-
if (
|
|
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 =
|
|
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
|
-
...
|
|
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:
|
|
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-
|
|
6
|
+
} from "./chunk-VNGH5MLF.mjs";
|
|
5
7
|
import {
|
|
6
8
|
__name
|
|
7
9
|
} from "./chunk-LPEX4YW6.mjs";
|
|
@@ -119,7 +121,6 @@ var ANONYMOUS_REQUEST_HEADERS = /* @__PURE__ */ new Set([
|
|
|
119
121
|
"cache-control",
|
|
120
122
|
"connection",
|
|
121
123
|
"dnt",
|
|
122
|
-
"forwarded",
|
|
123
124
|
"host",
|
|
124
125
|
"if-match",
|
|
125
126
|
"if-modified-since",
|
|
@@ -141,12 +142,9 @@ var ANONYMOUS_REQUEST_HEADERS = /* @__PURE__ */ new Set([
|
|
|
141
142
|
"tracestate",
|
|
142
143
|
"upgrade-insecure-requests",
|
|
143
144
|
"user-agent",
|
|
144
|
-
"via",
|
|
145
|
-
"x-forwarded-for",
|
|
146
145
|
"x-forwarded-host",
|
|
147
146
|
"x-forwarded-port",
|
|
148
147
|
"x-forwarded-proto",
|
|
149
|
-
"x-real-ip",
|
|
150
148
|
"x-request-id"
|
|
151
149
|
]);
|
|
152
150
|
function isAnonymousRequestHeader(name) {
|
|
@@ -154,6 +152,41 @@ function isAnonymousRequestHeader(name) {
|
|
|
154
152
|
return ANONYMOUS_REQUEST_HEADERS.has(lower) || lower.startsWith("sec-fetch-") || lower.startsWith("sec-ch-");
|
|
155
153
|
}
|
|
156
154
|
__name(isAnonymousRequestHeader, "isAnonymousRequestHeader");
|
|
155
|
+
var PAGE_CHECK_DROPPED_HEADERS = /* @__PURE__ */ new Set([
|
|
156
|
+
"accept-encoding",
|
|
157
|
+
"if-match",
|
|
158
|
+
"if-modified-since",
|
|
159
|
+
"if-none-match",
|
|
160
|
+
"if-range",
|
|
161
|
+
"if-unmodified-since",
|
|
162
|
+
"range"
|
|
163
|
+
]);
|
|
164
|
+
var PAGE_SEGMENT_MARKER = /<div\s[^>]*\bid=["']?__farm_page__["'\s>]/i;
|
|
165
|
+
async function anonymousVisitorOpensPage(options, url, targetPathname) {
|
|
166
|
+
const pageUrl = new URL(url);
|
|
167
|
+
pageUrl.pathname = targetPathname;
|
|
168
|
+
const headers = new Headers();
|
|
169
|
+
for (const [name, value] of options.request.headers) {
|
|
170
|
+
if (!PAGE_CHECK_DROPPED_HEADERS.has(name.toLowerCase())) headers.append(name, value);
|
|
171
|
+
}
|
|
172
|
+
headers.set("accept", "text/html");
|
|
173
|
+
headers.set(FARM_MARKDOWN_PAGE_CHECK_HEADER, _getFarmMarkdownPageCheckToken());
|
|
174
|
+
const response = await options.renderPage(
|
|
175
|
+
new Request(pageUrl, {
|
|
176
|
+
method: "GET",
|
|
177
|
+
headers,
|
|
178
|
+
redirect: "manual",
|
|
179
|
+
signal: options.request.signal
|
|
180
|
+
})
|
|
181
|
+
);
|
|
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());
|
|
188
|
+
}
|
|
189
|
+
__name(anonymousVisitorOpensPage, "anonymousVisitorOpensPage");
|
|
157
190
|
function hasOnlyAnonymousHeaders(headers) {
|
|
158
191
|
for (const name of headers.keys()) {
|
|
159
192
|
if (!isAnonymousRequestHeader(name)) return false;
|
|
@@ -161,6 +194,7 @@ function hasOnlyAnonymousHeaders(headers) {
|
|
|
161
194
|
return true;
|
|
162
195
|
}
|
|
163
196
|
__name(hasOnlyAnonymousHeaders, "hasOnlyAnonymousHeaders");
|
|
197
|
+
var FARM_MARKDOWN_ANONYMOUS_CLIENT_ADDRESS = "192.0.2.1";
|
|
164
198
|
async function createFarmMarkdownSourceResponse(options) {
|
|
165
199
|
if (options.request.method !== "GET" && options.request.method !== "HEAD") {
|
|
166
200
|
return null;
|
|
@@ -178,7 +212,7 @@ async function createFarmMarkdownSourceResponse(options) {
|
|
|
178
212
|
if (!source) {
|
|
179
213
|
return null;
|
|
180
214
|
}
|
|
181
|
-
const anonymous = hasOnlyAnonymousHeaders(options.request.headers);
|
|
215
|
+
const anonymous = hasOnlyAnonymousHeaders(options.request.headers) && (!options.clientAddress || options.clientAddress === FARM_MARKDOWN_ANONYMOUS_CLIENT_ADDRESS);
|
|
182
216
|
if (options.renderPage && (hasMarkdownExtension || !anonymous)) {
|
|
183
217
|
const publicUrl = new URL(url);
|
|
184
218
|
publicUrl.pathname = targetPathname;
|
|
@@ -194,9 +228,19 @@ async function createFarmMarkdownSourceResponse(options) {
|
|
|
194
228
|
signal: options.request.signal
|
|
195
229
|
})
|
|
196
230
|
);
|
|
197
|
-
if (publicResponse.headers.get("X-Farm-Markdown-Route") === targetPathname) {
|
|
198
|
-
|
|
199
|
-
|
|
231
|
+
if (publicResponse.headers.get("X-Farm-Markdown-Route") === targetPathname && publicResponse.headers.has("X-Farm-Markdown-Source")) {
|
|
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;
|
|
200
244
|
}
|
|
201
245
|
await publicResponse.body?.cancel();
|
|
202
246
|
if (!hasMarkdownExtension) return null;
|
|
@@ -209,6 +253,9 @@ async function createFarmMarkdownSourceResponse(options) {
|
|
|
209
253
|
}
|
|
210
254
|
});
|
|
211
255
|
}
|
|
256
|
+
if (options.renderPage && !await anonymousVisitorOpensPage(options, url, targetPathname)) {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
212
259
|
const headers = new Headers({
|
|
213
260
|
"Content-Type": "text/markdown; charset=utf-8",
|
|
214
261
|
"Content-Location": targetPathname === "/" ? "/index.md" : `${targetPathname}.md`,
|
|
@@ -238,5 +285,6 @@ export {
|
|
|
238
285
|
createMarkdownMetadata,
|
|
239
286
|
createFarmMarkdownRouteModule,
|
|
240
287
|
isFarmMarkdownPublicSourceResponse,
|
|
288
|
+
FARM_MARKDOWN_ANONYMOUS_CLIENT_ADDRESS,
|
|
241
289
|
createFarmMarkdownSourceResponse
|
|
242
290
|
};
|
|
@@ -10,6 +10,14 @@ function isFarmBlockedNavigationURL(url) {
|
|
|
10
10
|
return true;
|
|
11
11
|
}
|
|
12
12
|
__name(isFarmBlockedNavigationURL, "isFarmBlockedNavigationURL");
|
|
13
|
+
function isFarmScriptURL(href) {
|
|
14
|
+
try {
|
|
15
|
+
return new URL(href, "http://farm.invalid").protocol === "javascript:";
|
|
16
|
+
} catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
__name(isFarmScriptURL, "isFarmScriptURL");
|
|
13
21
|
function isFarmExternalNavigationURL(url, currentOrigin) {
|
|
14
22
|
return url.protocol !== "http:" && url.protocol !== "https:" || url.origin !== currentOrigin;
|
|
15
23
|
}
|
|
@@ -21,6 +29,7 @@ __name(resolveFarmNavigationURL, "resolveFarmNavigationURL");
|
|
|
21
29
|
|
|
22
30
|
export {
|
|
23
31
|
isFarmBlockedNavigationURL,
|
|
32
|
+
isFarmScriptURL,
|
|
24
33
|
isFarmExternalNavigationURL,
|
|
25
34
|
resolveFarmNavigationURL
|
|
26
35
|
};
|