@farm.js/core 0.1.35 → 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/{metadata-WGpBYcGn.d.mts → agent-mcp-BVExL8rZ.d.mts} +45 -2
- package/dist/agent-mcp-handler-LPJ2CADR.mjs +19 -0
- package/dist/agent-mcp-handler-SJAHFSPI.cjs +19 -0
- package/dist/{metadata-BnLDsUOS.d.ts → agent-mcp-luzfXK-P.d.ts} +45 -2
- package/dist/agent-runtime.cjs +5 -3
- package/dist/agent-runtime.d.mts +1 -1
- package/dist/agent-runtime.d.ts +1 -1
- package/dist/agent-runtime.mjs +4 -2
- package/dist/api/route-manager.cjs +6 -6
- package/dist/api/route-manager.d.mts +10 -4
- package/dist/api/route-manager.d.ts +10 -4
- package/dist/api/route-manager.mjs +5 -5
- package/dist/api/runtime.cjs +4 -4
- package/dist/api/runtime.d.mts +4 -62
- package/dist/api/runtime.d.ts +4 -62
- package/dist/api/runtime.mjs +3 -3
- package/dist/api.cjs +8 -8
- package/dist/api.d.mts +3 -3
- package/dist/api.d.ts +3 -3
- package/dist/api.mjs +7 -7
- package/dist/{app-D_j9AAVL.d.mts → app-BukwkFIu.d.mts} +17 -3
- package/dist/{app-BXB3JZYc.d.ts → app-Yfa2dsFy.d.ts} +17 -3
- package/dist/app-markdown.cjs +4 -4
- package/dist/app-markdown.d.mts +2 -2
- package/dist/app-markdown.d.ts +2 -2
- package/dist/app-markdown.mjs +3 -3
- package/dist/{chunk-4KU5Q7C2.mjs → chunk-276VJSM6.mjs} +221 -48
- package/dist/{chunk-PFQKNERH.cjs → chunk-2YTDKNH3.cjs} +364 -197
- package/dist/{chunk-UAORZ7QA.mjs → chunk-35GKZR22.mjs} +2 -2
- package/dist/{chunk-QAU5JD57.mjs → chunk-35WV46VL.mjs} +203 -36
- package/dist/{chunk-EFCQPQMG.cjs → chunk-42NHY7HW.cjs} +54 -4
- package/dist/{chunk-SOMHP6GF.mjs → chunk-4E5AEDKY.mjs} +2 -2
- package/dist/{chunk-UJD4PHYB.mjs → chunk-4E5WBPEG.mjs} +72 -354
- package/dist/{chunk-2G2NNLE2.mjs → chunk-4GLOOWKE.mjs} +4 -4
- package/dist/{chunk-62XKI4Z3.cjs → chunk-4NU4GGTC.cjs} +2 -2
- package/dist/{chunk-4JHOT46A.mjs → chunk-4WCZJQUO.mjs} +54 -4
- package/dist/chunk-4WQ6PGSJ.cjs +367 -0
- package/dist/{chunk-SMHH4VDG.mjs → chunk-4WVJLURN.mjs} +1 -1
- package/dist/chunk-6SJ2KJTA.mjs +314 -0
- package/dist/{chunk-IPXLADVO.cjs → chunk-ADEA7PN3.cjs} +122 -61
- package/dist/{chunk-CP6X4AEU.mjs → chunk-AJQTP4OO.mjs} +1 -1
- package/dist/{chunk-4MMGO7YW.cjs → chunk-AO6RYU5N.cjs} +31 -28
- package/dist/{chunk-GFHLGIYC.cjs → chunk-BO36SELV.cjs} +6 -6
- package/dist/{chunk-6TJOML4E.mjs → chunk-BPOF5U4N.mjs} +4 -4
- package/dist/{chunk-JHWOVJ3M.mjs → chunk-BUGNQIHC.mjs} +5 -0
- package/dist/{chunk-FTFYRMQQ.cjs → chunk-CBJJH36A.cjs} +50 -25
- package/dist/{chunk-7GLPRTTF.cjs → chunk-CGBDNNSM.cjs} +2 -2
- package/dist/chunk-CI6E3UOH.cjs +314 -0
- package/dist/{chunk-X6W5FFH6.cjs → chunk-D2BB47NB.cjs} +8 -8
- package/dist/chunk-DTSROJ5J.mjs +367 -0
- package/dist/{chunk-YC6V7PWE.cjs → chunk-DZ5ZVB2K.cjs} +1 -1
- package/dist/{chunk-DBNKI4NF.cjs → chunk-ECKF2BAM.cjs} +6 -2
- package/dist/{chunk-Q3VLETLE.mjs → chunk-EWET4D2Y.mjs} +1 -1
- package/dist/{chunk-HUMR6LSU.mjs → chunk-F5QO4FNE.mjs} +1 -1
- package/dist/{chunk-XBML5KMG.cjs → chunk-FO427P6I.cjs} +22 -12
- package/dist/{chunk-SAZVVAJH.mjs → chunk-GQRWBCWK.mjs} +8 -5
- package/dist/{chunk-F6Z3Y5KL.mjs → chunk-HOXTWRGB.mjs} +1 -1
- package/dist/{chunk-3BHT4WMP.cjs → chunk-JNUWCDTF.cjs} +6 -6
- package/dist/{chunk-73MC7ZL6.cjs → chunk-JZVADIOD.cjs} +2 -2
- package/dist/{chunk-OMVAU7NT.cjs → chunk-KIIMAWOJ.cjs} +11 -1
- package/dist/{chunk-43FMW62B.mjs → chunk-KMTGADN3.mjs} +28 -0
- package/dist/{chunk-6ETPZTJI.mjs → chunk-LSZAVSGY.mjs} +116 -55
- package/dist/{chunk-HMIJDL7S.mjs → chunk-MKYBIIAQ.mjs} +30 -5
- package/dist/{chunk-RU3M2FIK.cjs → chunk-MRMI32SN.cjs} +87 -369
- package/dist/{chunk-7L5V3KQO.cjs → chunk-N2NAS2AM.cjs} +2 -2
- package/dist/{chunk-ICUQICNC.cjs → chunk-NMHWYWDR.cjs} +654 -481
- package/dist/{chunk-G5RT7EXW.mjs → chunk-O6I6VWKK.mjs} +20 -5
- package/dist/{chunk-PDOCJ6RY.mjs → chunk-O6WAEAX3.mjs} +1 -1
- package/dist/{chunk-6DU6UFUE.mjs → chunk-OHLSEQ57.mjs} +16 -8
- package/dist/{chunk-3PXS2MHU.mjs → chunk-OO7GXVSR.mjs} +1 -1
- package/dist/chunk-PTZ2TVNE.cjs +178 -0
- package/dist/{chunk-6WCPV6G2.mjs → chunk-Q2KB32T4.mjs} +1 -1
- package/dist/{chunk-XCACDAZZ.cjs → chunk-S6VYG6XU.cjs} +23 -8
- package/dist/{chunk-VFQT3LAO.cjs → chunk-SDOTRX3V.cjs} +5 -5
- package/dist/{chunk-BMWDEBXO.cjs → chunk-SHLXACIO.cjs} +31 -3
- package/dist/{chunk-22LTEMGQ.mjs → chunk-T4OGRVNS.mjs} +13 -3
- package/dist/{chunk-ZXGAFZDO.cjs → chunk-T5OJPTVN.cjs} +2 -2
- package/dist/{chunk-VZJR7UTG.cjs → chunk-TE2G5ION.cjs} +2 -2
- package/dist/chunk-UH6QN5NL.mjs +178 -0
- package/dist/{chunk-F7JZENPF.cjs → chunk-UVW64BCB.cjs} +38 -30
- package/dist/{chunk-OKZUAXHF.mjs → chunk-VILIPRS6.mjs} +1 -1
- package/dist/{chunk-3UH7MRCP.cjs → chunk-VQLJWDVW.cjs} +13 -13
- package/dist/{chunk-VPTDD5XF.cjs → chunk-WBKEZXWE.cjs} +5 -0
- package/dist/{chunk-EJQT6KZN.cjs → chunk-WC5UV2HQ.cjs} +2 -2
- package/dist/{chunk-YULD7ICZ.mjs → chunk-WZ77PUAM.mjs} +1 -1
- package/dist/{chunk-C35ZBVRD.mjs → chunk-YWMZUGIS.mjs} +6 -2
- package/dist/{chunk-Y7RKTKYI.mjs → chunk-ZMMBIVQM.mjs} +10 -0
- package/dist/{chunk-ULAWS2PA.cjs → chunk-ZWM5KGAA.cjs} +6 -6
- package/dist/{client-plugins-CvIslxWi.d.mts → client-plugins-C3mK9Pol.d.mts} +98 -5
- package/dist/{client-plugins-HIyulDym.d.ts → client-plugins-r1mOtSC1.d.ts} +98 -5
- package/dist/client-plugins.d.mts +1 -1
- package/dist/client-plugins.d.ts +1 -1
- package/dist/client.d.mts +5 -5
- package/dist/client.d.ts +5 -5
- package/dist/config.d.mts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/{devtools-EE5RIBTH.mjs → devtools-ERIKFEXX.mjs} +9 -8
- package/dist/{devtools-EAUY43BS.cjs → devtools-JZJJY5CK.cjs} +10 -9
- package/dist/docs.cjs +12 -11
- package/dist/docs.d.mts +2 -2
- package/dist/docs.d.ts +2 -2
- package/dist/docs.mjs +11 -10
- 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.cjs +39 -35
- package/dist/index.d.mts +13 -13
- package/dist/index.d.ts +13 -13
- package/dist/index.mjs +38 -34
- package/dist/integrations.cjs +7 -3
- package/dist/integrations.d.mts +1 -1
- package/dist/integrations.d.ts +1 -1
- package/dist/integrations.mjs +6 -2
- package/dist/internal/app-markdown-runtime.cjs +3 -3
- package/dist/internal/app-markdown-runtime.d.mts +2 -2
- package/dist/internal/app-markdown-runtime.d.ts +2 -2
- package/dist/internal/app-markdown-runtime.mjs +2 -2
- package/dist/internal/build-runtime.cjs +27 -25
- package/dist/internal/build-runtime.d.mts +3 -3
- package/dist/internal/build-runtime.d.ts +3 -3
- package/dist/internal/build-runtime.mjs +26 -24
- package/dist/internal/cli-runtime.cjs +14 -13
- package/dist/internal/cli-runtime.mjs +13 -12
- package/dist/internal/client-error-overlay.cjs +4 -4
- package/dist/internal/client-error-overlay.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 +10 -9
- package/dist/internal/config-runtime.d.mts +2 -2
- package/dist/internal/config-runtime.d.ts +2 -2
- package/dist/internal/config-runtime.mjs +9 -8
- package/dist/internal/isolated-boundary.cjs +2 -2
- package/dist/internal/isolated-boundary.d.mts +0 -1
- package/dist/internal/isolated-boundary.d.ts +0 -1
- package/dist/internal/isolated-boundary.mjs +1 -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 +23 -9
- package/dist/internal/production-runtime.d.mts +67 -27
- package/dist/internal/production-runtime.d.ts +67 -27
- package/dist/internal/production-runtime.mjs +26 -12
- package/dist/{layers-BRQF5ETU.mjs → layers-UTB43B7A.mjs} +1 -1
- package/dist/layers-VUWIOFEO.cjs +18 -0
- package/dist/markdown.cjs +1 -1
- package/dist/markdown.d.mts +1 -1
- package/dist/markdown.d.ts +1 -1
- package/dist/markdown.mjs +1 -1
- package/dist/middleware.cjs +6 -6
- package/dist/middleware.d.mts +3 -3
- package/dist/middleware.d.ts +3 -3
- package/dist/middleware.mjs +5 -5
- package/dist/navigation.d.mts +4 -4
- package/dist/navigation.d.ts +4 -4
- package/dist/{nitro-OVPLKPE2.cjs → nitro-7F65EZZS.cjs} +3 -3
- package/dist/{nitro-MXRDCXWZ.mjs → nitro-MPZJGPXK.mjs} +2 -2
- package/dist/plugin.cjs +23 -21
- package/dist/plugin.d.mts +1 -1
- package/dist/plugin.d.ts +1 -1
- package/dist/plugin.mjs +22 -20
- package/dist/{production-runtime-0sRnuYc-.d.mts → production-runtime-CCeVZXst.d.mts} +1 -1
- package/dist/{production-runtime-Crq6CJ-2.d.ts → production-runtime-DPnsggY3.d.ts} +1 -1
- package/dist/{render-plan-gs9GGPzw.d.mts → render-plan-BuGaPFe6.d.mts} +1 -1
- package/dist/{render-plan-8ozZh2Qv.d.ts → render-plan-Cw4f5E_R.d.ts} +1 -1
- package/dist/renderer/react/server.cjs +3 -3
- package/dist/renderer/react/server.mjs +1 -1
- package/dist/renderer-client.d.mts +3 -3
- package/dist/renderer-client.d.ts +3 -3
- package/dist/{request-B5G8rLBH.d.ts → request-Bkg-hERy.d.ts} +1 -1
- package/dist/{request-fkhiynXe.d.mts → request-CsGARcAw.d.mts} +1 -1
- package/dist/request.d.mts +2 -2
- package/dist/request.d.ts +2 -2
- package/dist/{route-rendering-lS5nUMua.d.ts → route-rendering-BUZMH_64.d.ts} +1 -1
- package/dist/{route-rendering-CLnS7AZj.d.mts → route-rendering-f11yh5dp.d.mts} +1 -1
- package/dist/{router-4iuiYnOW.d.ts → router-B8CR9GbD.d.ts} +1 -1
- package/dist/{router-ifU8Dui1.d.mts → router-Cp6yRE8A.d.mts} +1 -1
- package/dist/routes.d.mts +1 -1
- package/dist/routes.d.ts +1 -1
- package/dist/runtime-CAEv36S_.d.mts +69 -0
- package/dist/runtime-CQVsT330.d.ts +69 -0
- 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 +2 -2
- package/dist/server-plugins.d.ts +2 -2
- package/dist/server-query.cjs +5 -5
- package/dist/server-query.mjs +4 -4
- package/dist/server.cjs +42 -40
- package/dist/server.d.mts +7 -7
- package/dist/server.d.ts +7 -7
- package/dist/server.mjs +25 -23
- package/dist/{spa-router-DaJk5Re4.d.ts → spa-router-BuciWGCZ.d.ts} +2 -2
- package/dist/{spa-router-Bq7VCOwx.d.mts → spa-router-DwbqGkGj.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/{utils-XJn0c9bj.d.mts → utils-B9V0S_yL.d.mts} +1 -1
- package/dist/{utils-BXLmFsVR.d.ts → utils-CaoWKtYM.d.ts} +1 -1
- package/dist/version.cjs +2 -2
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +23 -21
- package/dist/vite.d.mts +1 -1
- package/dist/vite.d.ts +1 -1
- package/dist/vite.mjs +22 -20
- package/dist/workflows.cjs +3 -3
- package/dist/workflows.mjs +2 -2
- package/package.json +1 -1
- package/dist/layers-4PNE2HOY.cjs +0 -18
- package/dist/{chunk-2F2ER724.cjs → chunk-BPMATOP2.cjs} +2 -2
- package/dist/{chunk-IHNMMXHV.mjs → chunk-OTC5BDGO.mjs} +3 -3
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getFarmMarkdownMirrorPath,
|
|
3
|
+
isFarmMarkdownMirrorExposed,
|
|
4
|
+
matchesFarmMarkdownRoutePattern
|
|
5
|
+
} from "./chunk-WWIKMBRN.mjs";
|
|
6
|
+
import {
|
|
7
|
+
FARM_INTERNAL_READ_HEADER
|
|
8
|
+
} from "./chunk-MVL2RAJW.mjs";
|
|
9
|
+
import {
|
|
10
|
+
applyFarmBasePath
|
|
11
|
+
} from "./chunk-4RB44K6Z.mjs";
|
|
12
|
+
import {
|
|
13
|
+
__name
|
|
14
|
+
} from "./chunk-LPEX4YW6.mjs";
|
|
15
|
+
|
|
16
|
+
// src/llms-txt.ts
|
|
17
|
+
function resolveFarmLlmsTxtConfig(input) {
|
|
18
|
+
if (!input) return { enabled: false, include: [], exclude: [], full: false };
|
|
19
|
+
if (input === true) return { enabled: true, include: [], exclude: [], full: true };
|
|
20
|
+
if (typeof input !== "object") {
|
|
21
|
+
throw new TypeError("agent.llmsTxt must be true, false, or an options object.");
|
|
22
|
+
}
|
|
23
|
+
if (input.enabled === false) return { enabled: false, include: [], exclude: [], full: false };
|
|
24
|
+
for (const key of ["title", "summary", "details"]) {
|
|
25
|
+
if (input[key] !== void 0 && typeof input[key] !== "string") {
|
|
26
|
+
throw new TypeError(`agent.llmsTxt.${key} must be a string.`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (input.full !== void 0 && typeof input.full !== "boolean") {
|
|
30
|
+
throw new TypeError("agent.llmsTxt.full must be a boolean.");
|
|
31
|
+
}
|
|
32
|
+
if (input.revalidate !== void 0 && (typeof input.revalidate !== "number" || !Number.isFinite(input.revalidate) || input.revalidate < 0)) {
|
|
33
|
+
throw new TypeError("agent.llmsTxt.revalidate must be a number of seconds.");
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
enabled: true,
|
|
37
|
+
...input.title ? { title: input.title } : {},
|
|
38
|
+
...input.summary ? { summary: input.summary } : {},
|
|
39
|
+
...input.details ? { details: input.details } : {},
|
|
40
|
+
include: resolveRoutePatterns(input.include, "include"),
|
|
41
|
+
exclude: resolveRoutePatterns(input.exclude, "exclude"),
|
|
42
|
+
full: input.full !== false,
|
|
43
|
+
...input.revalidate !== void 0 ? { revalidate: input.revalidate } : {}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
__name(resolveFarmLlmsTxtConfig, "resolveFarmLlmsTxtConfig");
|
|
47
|
+
function resolveRoutePatterns(value, key) {
|
|
48
|
+
if (value === void 0) return [];
|
|
49
|
+
if (!Array.isArray(value)) {
|
|
50
|
+
throw new TypeError(`agent.llmsTxt.${key} must be an array of route patterns.`);
|
|
51
|
+
}
|
|
52
|
+
return value.map((pattern, index) => {
|
|
53
|
+
if (typeof pattern !== "string" || !pattern.startsWith("/")) {
|
|
54
|
+
throw new TypeError(
|
|
55
|
+
`agent.llmsTxt.${key}[${index}] must be a route pattern starting with "/", such as "/docs/[...slug]".`
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
return pattern;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
__name(resolveRoutePatterns, "resolveRoutePatterns");
|
|
62
|
+
function collectFarmLlmsTxtPages(sources, options) {
|
|
63
|
+
const include = options.include ?? [];
|
|
64
|
+
const exclude = options.exclude ?? [];
|
|
65
|
+
const pages = /* @__PURE__ */ new Map();
|
|
66
|
+
for (const source of sources) {
|
|
67
|
+
const path = source.pattern;
|
|
68
|
+
if (path.includes("[") || pages.has(path)) continue;
|
|
69
|
+
if (include.length && !include.some((pattern) => matchesFarmMarkdownRoutePattern(pattern, path))) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (exclude.some((pattern) => matchesFarmMarkdownRoutePattern(pattern, path))) continue;
|
|
73
|
+
if (isFarmMetadataNoIndex(source.metadata)) continue;
|
|
74
|
+
const target = isFarmMarkdownMirrorExposed(options.markdown, path) ? getFarmMarkdownMirrorPath(path) : path;
|
|
75
|
+
const description = readMetadataString(source.metadata, "description");
|
|
76
|
+
pages.set(path, {
|
|
77
|
+
path,
|
|
78
|
+
title: readMetadataTitle(source.metadata) ?? fallbackPageTitle(path),
|
|
79
|
+
url: `${options.origin}${applyFarmBasePath(target, options.basePath)}`,
|
|
80
|
+
...description ? { description } : {}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return [...pages.values()].sort((left, right) => left.path.localeCompare(right.path));
|
|
84
|
+
}
|
|
85
|
+
__name(collectFarmLlmsTxtPages, "collectFarmLlmsTxtPages");
|
|
86
|
+
function isFarmMetadataNoIndex(metadata) {
|
|
87
|
+
if (!metadata || typeof metadata !== "object") return false;
|
|
88
|
+
const robots = metadata.robots;
|
|
89
|
+
if (typeof robots === "string") {
|
|
90
|
+
return robots.split(",").map((directive) => directive.trim().toLowerCase()).some((directive) => directive === "noindex" || directive === "none");
|
|
91
|
+
}
|
|
92
|
+
return Boolean(
|
|
93
|
+
robots && typeof robots === "object" && robots.index === false
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
__name(isFarmMetadataNoIndex, "isFarmMetadataNoIndex");
|
|
97
|
+
function createFarmDefaultLlmsTxt(options) {
|
|
98
|
+
const { config, pages } = options;
|
|
99
|
+
const mcp = options.mcp ?? [];
|
|
100
|
+
const summary = config.summary ?? readMetadataString(options.rootMetadata, "description");
|
|
101
|
+
return {
|
|
102
|
+
title: config.title ?? readMetadataTitle(options.rootMetadata) ?? pages.find((page) => page.path === "/")?.title ?? new URL(options.origin).host,
|
|
103
|
+
...summary ? { summary } : {},
|
|
104
|
+
...config.details ? { details: config.details } : {},
|
|
105
|
+
sections: [
|
|
106
|
+
...pages.length ? [
|
|
107
|
+
{
|
|
108
|
+
title: "Pages",
|
|
109
|
+
links: pages.map(({ title, url, description }) => ({
|
|
110
|
+
title,
|
|
111
|
+
url,
|
|
112
|
+
...description ? { description } : {}
|
|
113
|
+
}))
|
|
114
|
+
}
|
|
115
|
+
] : [],
|
|
116
|
+
...mcp.length ? [{ title: "MCP", links: mcp }] : []
|
|
117
|
+
]
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
__name(createFarmDefaultLlmsTxt, "createFarmDefaultLlmsTxt");
|
|
121
|
+
function serializeFarmLlmsTxt(value) {
|
|
122
|
+
if (typeof value === "string") {
|
|
123
|
+
if (!value.trim()) throw new TypeError("llms.ts returned an empty llms.txt");
|
|
124
|
+
return value.endsWith("\n") ? value : `${value}
|
|
125
|
+
`;
|
|
126
|
+
}
|
|
127
|
+
if (!isRecord(value)) {
|
|
128
|
+
throw new TypeError("llms.ts must return llms.txt text, an llms.txt object, or a Response");
|
|
129
|
+
}
|
|
130
|
+
const title = requireText(value.title, "llms.ts must return a non-empty title");
|
|
131
|
+
const summary = optionalText(value.summary, "llms.ts summary must be a string");
|
|
132
|
+
const details = optionalText(value.details, "llms.ts details must be a string");
|
|
133
|
+
if (value.sections !== void 0 && !Array.isArray(value.sections)) {
|
|
134
|
+
throw new TypeError("llms.ts sections must be an array");
|
|
135
|
+
}
|
|
136
|
+
const blocks = [`# ${toSingleLine(title)}`];
|
|
137
|
+
if (summary?.trim()) blocks.push(`> ${toSingleLine(summary)}`);
|
|
138
|
+
if (details?.trim()) blocks.push(details.trim());
|
|
139
|
+
for (const [sectionIndex, section] of (value.sections ?? []).entries()) {
|
|
140
|
+
if (!isRecord(section)) {
|
|
141
|
+
throw new TypeError(`llms.ts section ${sectionIndex} must be an object`);
|
|
142
|
+
}
|
|
143
|
+
const sectionTitle = requireText(
|
|
144
|
+
section.title,
|
|
145
|
+
`llms.ts section ${sectionIndex} must include a non-empty title`
|
|
146
|
+
);
|
|
147
|
+
if (!Array.isArray(section.links)) {
|
|
148
|
+
throw new TypeError(`llms.ts section "${sectionTitle}" must include a links array`);
|
|
149
|
+
}
|
|
150
|
+
const links = section.links.map((link, linkIndex) => {
|
|
151
|
+
const where = `llms.ts section "${sectionTitle}" link ${linkIndex}`;
|
|
152
|
+
if (!isRecord(link)) throw new TypeError(`${where} must be an object`);
|
|
153
|
+
const linkTitle = requireText(link.title, `${where} must include a non-empty title`);
|
|
154
|
+
const url = requireText(link.url, `${where} must include a non-empty url`);
|
|
155
|
+
const description = optionalText(link.description, `${where} description must be a string`);
|
|
156
|
+
return `- [${escapeLinkText(linkTitle)}](${escapeLinkUrl(url)})${description?.trim() ? `: ${toSingleLine(description)}` : ""}`;
|
|
157
|
+
});
|
|
158
|
+
blocks.push(`## ${toSingleLine(sectionTitle)}`, links.join("\n"));
|
|
159
|
+
}
|
|
160
|
+
return `${blocks.filter(Boolean).join("\n\n")}
|
|
161
|
+
`;
|
|
162
|
+
}
|
|
163
|
+
__name(serializeFarmLlmsTxt, "serializeFarmLlmsTxt");
|
|
164
|
+
function createFarmLlmsMarkdownReader(fetchMarkdown) {
|
|
165
|
+
return async (url) => {
|
|
166
|
+
try {
|
|
167
|
+
const response = await fetchMarkdown(
|
|
168
|
+
new Request(url, {
|
|
169
|
+
headers: { accept: "text/markdown", [FARM_INTERNAL_READ_HEADER]: "llms-full" }
|
|
170
|
+
})
|
|
171
|
+
);
|
|
172
|
+
const type = response.headers.get("content-type") ?? "";
|
|
173
|
+
if (!response.ok || !type.toLowerCase().startsWith("text/markdown")) {
|
|
174
|
+
await response.body?.cancel();
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
return await response.text();
|
|
178
|
+
} catch {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
__name(createFarmLlmsMarkdownReader, "createFarmLlmsMarkdownReader");
|
|
184
|
+
var FARM_LLMS_FULL_PAGE_TIMEOUT_MS = 3e4;
|
|
185
|
+
var LLMS_PAGE_TIMED_OUT = /* @__PURE__ */ Symbol("farm.llms.pageTimedOut");
|
|
186
|
+
async function renderFarmLlmsFullTxt(value, options) {
|
|
187
|
+
const index = serializeFarmLlmsTxt(value);
|
|
188
|
+
if (typeof value === "string") return index;
|
|
189
|
+
const llms = value;
|
|
190
|
+
const links = [];
|
|
191
|
+
const seen = /* @__PURE__ */ new Set();
|
|
192
|
+
for (const section of llms.sections ?? []) {
|
|
193
|
+
for (const link of section.links) {
|
|
194
|
+
if (seen.has(link.url)) continue;
|
|
195
|
+
seen.add(link.url);
|
|
196
|
+
links.push(link);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const pageTimeout = options.pageTimeout ?? FARM_LLMS_FULL_PAGE_TIMEOUT_MS;
|
|
200
|
+
const readWithinTimeout = /* @__PURE__ */ __name(async (url) => {
|
|
201
|
+
let timer;
|
|
202
|
+
const timedOut = new Promise((resolve) => {
|
|
203
|
+
timer = setTimeout(resolve, pageTimeout, LLMS_PAGE_TIMED_OUT);
|
|
204
|
+
});
|
|
205
|
+
try {
|
|
206
|
+
const content = await Promise.race([options.readMarkdown(url), timedOut]);
|
|
207
|
+
if (content !== LLMS_PAGE_TIMED_OUT) return content;
|
|
208
|
+
options.onIncomplete?.();
|
|
209
|
+
return null;
|
|
210
|
+
} finally {
|
|
211
|
+
clearTimeout(timer);
|
|
212
|
+
}
|
|
213
|
+
}, "readWithinTimeout");
|
|
214
|
+
const contents = await mapWithConcurrency(
|
|
215
|
+
links,
|
|
216
|
+
options.concurrency ?? 4,
|
|
217
|
+
(link) => shouldInlineLlmsLink(link.url, options.origin) ? readWithinTimeout(link.url) : null
|
|
218
|
+
);
|
|
219
|
+
const blocks = [`# ${toSingleLine(llms.title)}`];
|
|
220
|
+
if (llms.summary?.trim()) blocks.push(`> ${toSingleLine(llms.summary)}`);
|
|
221
|
+
if (llms.details?.trim()) blocks.push(llms.details.trim());
|
|
222
|
+
const pages = links.map((link, index2) => {
|
|
223
|
+
const parts = [`## ${toSingleLine(link.title)}`, `URL: ${escapeLinkUrl(link.url)}`];
|
|
224
|
+
if (link.description?.trim()) parts.push(toSingleLine(link.description));
|
|
225
|
+
const content = stripFrontmatter(contents[index2] ?? "").trim();
|
|
226
|
+
if (content) parts.push(content);
|
|
227
|
+
return parts.join("\n\n");
|
|
228
|
+
});
|
|
229
|
+
if (pages.length) blocks.push(pages.join("\n\n---\n\n"));
|
|
230
|
+
return `${blocks.join("\n\n")}
|
|
231
|
+
`;
|
|
232
|
+
}
|
|
233
|
+
__name(renderFarmLlmsFullTxt, "renderFarmLlmsFullTxt");
|
|
234
|
+
function createFarmLlmsFullRenderer(options = {}) {
|
|
235
|
+
const now = options.now ?? Date.now;
|
|
236
|
+
const ttl = (options.revalidate ?? 0) * 1e3;
|
|
237
|
+
const maxEntries = options.maxEntries ?? 16;
|
|
238
|
+
const entries = /* @__PURE__ */ new Map();
|
|
239
|
+
let queue = Promise.resolve();
|
|
240
|
+
const settle = /* @__PURE__ */ __name((body, complete, onSettled) => onSettled ? body.then((value) => (onSettled(complete()), value)) : body, "settle");
|
|
241
|
+
return (origin, render, onSettled) => {
|
|
242
|
+
const entry = entries.get(origin);
|
|
243
|
+
if (entry && entry.expires > now()) return settle(entry.body, entry.complete, onSettled);
|
|
244
|
+
entries.delete(origin);
|
|
245
|
+
let complete = true;
|
|
246
|
+
const body = queue.then(
|
|
247
|
+
() => render({
|
|
248
|
+
incomplete: /* @__PURE__ */ __name(() => {
|
|
249
|
+
complete = false;
|
|
250
|
+
}, "incomplete")
|
|
251
|
+
})
|
|
252
|
+
);
|
|
253
|
+
queue = body.catch(() => {
|
|
254
|
+
});
|
|
255
|
+
const pending = { body, expires: Number.POSITIVE_INFINITY, complete: /* @__PURE__ */ __name(() => complete, "complete") };
|
|
256
|
+
entries.set(origin, pending);
|
|
257
|
+
if (entries.size > maxEntries) entries.delete(entries.keys().next().value);
|
|
258
|
+
body.then(
|
|
259
|
+
() => {
|
|
260
|
+
if (entries.get(origin) !== pending) return;
|
|
261
|
+
if (ttl > 0 && complete) pending.expires = now() + ttl;
|
|
262
|
+
else entries.delete(origin);
|
|
263
|
+
},
|
|
264
|
+
() => {
|
|
265
|
+
if (entries.get(origin) === pending) entries.delete(origin);
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
return settle(body, pending.complete, onSettled);
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
__name(createFarmLlmsFullRenderer, "createFarmLlmsFullRenderer");
|
|
272
|
+
function stripFrontmatter(markdown) {
|
|
273
|
+
const match = /^\uFEFF?---\r?\n[\s\S]*?\r?\n---[ \t]*(?:\r?\n|$)/.exec(markdown);
|
|
274
|
+
return match ? markdown.slice(match[0].length) : markdown;
|
|
275
|
+
}
|
|
276
|
+
__name(stripFrontmatter, "stripFrontmatter");
|
|
277
|
+
function shouldInlineLlmsLink(url, origin) {
|
|
278
|
+
let target;
|
|
279
|
+
try {
|
|
280
|
+
target = new URL(url, origin);
|
|
281
|
+
} catch {
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
return target.origin === origin && !/\/llms(-full)?\.txt$/.test(target.pathname);
|
|
285
|
+
}
|
|
286
|
+
__name(shouldInlineLlmsLink, "shouldInlineLlmsLink");
|
|
287
|
+
async function mapWithConcurrency(items, limit, run) {
|
|
288
|
+
const results = [];
|
|
289
|
+
let next = 0;
|
|
290
|
+
const worker = /* @__PURE__ */ __name(async () => {
|
|
291
|
+
while (next < items.length) {
|
|
292
|
+
const index = next++;
|
|
293
|
+
results[index] = await run(items[index]);
|
|
294
|
+
}
|
|
295
|
+
}, "worker");
|
|
296
|
+
await Promise.all(Array.from({ length: Math.min(Math.max(limit, 1), items.length) }, worker));
|
|
297
|
+
return results;
|
|
298
|
+
}
|
|
299
|
+
__name(mapWithConcurrency, "mapWithConcurrency");
|
|
300
|
+
function readMetadataTitle(metadata) {
|
|
301
|
+
if (!isRecord(metadata)) return void 0;
|
|
302
|
+
const { title } = metadata;
|
|
303
|
+
if (typeof title === "string") return title.trim() || void 0;
|
|
304
|
+
if (isRecord(title)) {
|
|
305
|
+
for (const key of ["absolute", "default"]) {
|
|
306
|
+
const value = title[key];
|
|
307
|
+
if (typeof value === "string" && value.trim()) return value.trim();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return void 0;
|
|
311
|
+
}
|
|
312
|
+
__name(readMetadataTitle, "readMetadataTitle");
|
|
313
|
+
function readMetadataString(metadata, key) {
|
|
314
|
+
if (!isRecord(metadata)) return void 0;
|
|
315
|
+
const value = metadata[key];
|
|
316
|
+
return typeof value === "string" && value.trim() ? value.trim() : void 0;
|
|
317
|
+
}
|
|
318
|
+
__name(readMetadataString, "readMetadataString");
|
|
319
|
+
function fallbackPageTitle(path) {
|
|
320
|
+
if (path === "/") return "Home";
|
|
321
|
+
const segments = path.split("/").filter(Boolean);
|
|
322
|
+
const segment = segments[segments.length - 1] ?? path;
|
|
323
|
+
const words = segment.replace(/[-_]+/g, " ").trim();
|
|
324
|
+
return words ? words[0].toUpperCase() + words.slice(1) : path;
|
|
325
|
+
}
|
|
326
|
+
__name(fallbackPageTitle, "fallbackPageTitle");
|
|
327
|
+
function toSingleLine(value) {
|
|
328
|
+
return value.replace(/\s+/g, " ").trim();
|
|
329
|
+
}
|
|
330
|
+
__name(toSingleLine, "toSingleLine");
|
|
331
|
+
function escapeLinkText(value) {
|
|
332
|
+
return toSingleLine(value).replace(/[\\[\]]/g, "\\$&");
|
|
333
|
+
}
|
|
334
|
+
__name(escapeLinkText, "escapeLinkText");
|
|
335
|
+
function escapeLinkUrl(value) {
|
|
336
|
+
return value.trim().replace(
|
|
337
|
+
/[\s()<>]/g,
|
|
338
|
+
(character) => character === "(" ? "%28" : character === ")" ? "%29" : encodeURIComponent(character)
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
__name(escapeLinkUrl, "escapeLinkUrl");
|
|
342
|
+
function requireText(value, message) {
|
|
343
|
+
if (typeof value !== "string" || !value.trim()) throw new TypeError(message);
|
|
344
|
+
return value;
|
|
345
|
+
}
|
|
346
|
+
__name(requireText, "requireText");
|
|
347
|
+
function optionalText(value, message) {
|
|
348
|
+
if (value === void 0) return void 0;
|
|
349
|
+
if (typeof value !== "string") throw new TypeError(message);
|
|
350
|
+
return value;
|
|
351
|
+
}
|
|
352
|
+
__name(optionalText, "optionalText");
|
|
353
|
+
function isRecord(value) {
|
|
354
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
355
|
+
}
|
|
356
|
+
__name(isRecord, "isRecord");
|
|
357
|
+
|
|
358
|
+
export {
|
|
359
|
+
resolveFarmLlmsTxtConfig,
|
|
360
|
+
collectFarmLlmsTxtPages,
|
|
361
|
+
isFarmMetadataNoIndex,
|
|
362
|
+
createFarmDefaultLlmsTxt,
|
|
363
|
+
serializeFarmLlmsTxt,
|
|
364
|
+
createFarmLlmsMarkdownReader,
|
|
365
|
+
renderFarmLlmsFullTxt,
|
|
366
|
+
createFarmLlmsFullRenderer
|
|
367
|
+
};
|
|
@@ -67,6 +67,7 @@ function isolateFarmServerPageGraph(ReactRuntime, element) {
|
|
|
67
67
|
return ReactRuntime.createElement(Context.Provider, { value: false }, element);
|
|
68
68
|
}
|
|
69
69
|
_chunkS3JO3N4Hcjs.__name.call(void 0, isolateFarmServerPageGraph, "isolateFarmServerPageGraph");
|
|
70
|
+
var warnedUnserializableBoundaries = /* @__PURE__ */ new Set();
|
|
70
71
|
function createFarmIsolatedClientBoundary(ReactRuntime, Component, moduleReference, exportName, islandStrategy) {
|
|
71
72
|
function FarmIsolatedClientBoundary(props) {
|
|
72
73
|
const Context = getBoundaryGraphContext(ReactRuntime);
|
|
@@ -79,9 +80,12 @@ function createFarmIsolatedClientBoundary(ReactRuntime, Component, moduleReferen
|
|
|
79
80
|
try {
|
|
80
81
|
serializedProps = serializeBoundaryPayload(props);
|
|
81
82
|
} catch (error) {
|
|
82
|
-
|
|
83
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
84
|
+
const warningKey = `${moduleReference}#${exportName}:${message}`;
|
|
85
|
+
if (typeof window === "undefined" && !warnedUnserializableBoundaries.has(warningKey)) {
|
|
86
|
+
warnedUnserializableBoundaries.add(warningKey);
|
|
83
87
|
console.warn(
|
|
84
|
-
`[Farm.js] Could not isolate ${moduleReference}#${exportName}: ${
|
|
88
|
+
`[Farm.js] Could not isolate ${moduleReference}#${exportName}: ${message}. The server-rendered component was preserved without client hydration.`
|
|
85
89
|
);
|
|
86
90
|
}
|
|
87
91
|
return ReactRuntime.createElement(Component, props);
|
|
@@ -17,7 +17,7 @@ var _chunkLYLEZIG3cjs = require('./chunk-LYLEZIG3.cjs');
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _chunkS6VYG6XUcjs = require('./chunk-S6VYG6XU.cjs');
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
var _chunkWMAPPDMMcjs = require('./chunk-WMAPPDMM.cjs');
|
|
@@ -31,7 +31,7 @@ var _chunkSOR334EBcjs = require('./chunk-SOR334EB.cjs');
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
var
|
|
34
|
+
var _chunkSHLXACIOcjs = require('./chunk-SHLXACIO.cjs');
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
var _chunk5QIKR7RRcjs = require('./chunk-5QIKR7RR.cjs');
|
|
@@ -68,6 +68,15 @@ var _APIRouteManager = class _APIRouteManager {
|
|
|
68
68
|
this.i18n = options.i18n;
|
|
69
69
|
this.bodySizeLimit = options.bodySizeLimit;
|
|
70
70
|
this.basePath = options.basePath;
|
|
71
|
+
this.dispatch = options.dispatch;
|
|
72
|
+
}
|
|
73
|
+
/** Every file the current handlers were loaded from: route files and root routes files. */
|
|
74
|
+
getSourceFiles() {
|
|
75
|
+
const files = /* @__PURE__ */ new Set();
|
|
76
|
+
for (const sources of this.endpointSources.values()) {
|
|
77
|
+
for (const { filePath } of sources.values()) files.add(filePath);
|
|
78
|
+
}
|
|
79
|
+
return files;
|
|
71
80
|
}
|
|
72
81
|
/**
|
|
73
82
|
* Discover route.ts files in /app/api and explicit endpoints in root routes.ts
|
|
@@ -93,8 +102,9 @@ var _APIRouteManager = class _APIRouteManager {
|
|
|
93
102
|
await this.loadProgrammaticApiRoutes(appDir);
|
|
94
103
|
}
|
|
95
104
|
this.routes = new Map(
|
|
96
|
-
|
|
97
|
-
bodySizeLimit: this.bodySizeLimit
|
|
105
|
+
_chunkS6VYG6XUcjs.mergePluginAPIRoutes.call(void 0, [...this.routes.values()], this.plugins, void 0, {
|
|
106
|
+
bodySizeLimit: this.bodySizeLimit,
|
|
107
|
+
dispatch: this.dispatch
|
|
98
108
|
}).map((route) => [route.path, route])
|
|
99
109
|
);
|
|
100
110
|
} catch (error) {
|
|
@@ -140,7 +150,7 @@ var _APIRouteManager = class _APIRouteManager {
|
|
|
140
150
|
const routeModule = await this.loadModule(filePath);
|
|
141
151
|
const endpoints = {};
|
|
142
152
|
const availableMethods = [];
|
|
143
|
-
for (const method of
|
|
153
|
+
for (const method of _chunkS6VYG6XUcjs.API_ROUTE_METHODS) {
|
|
144
154
|
if (routeModule[method]) {
|
|
145
155
|
endpoints[method] = routeModule[method];
|
|
146
156
|
availableMethods.push(method);
|
|
@@ -256,11 +266,11 @@ var _APIRouteManager = class _APIRouteManager {
|
|
|
256
266
|
}
|
|
257
267
|
async loadModule(filePath) {
|
|
258
268
|
if (this.viteServer) {
|
|
259
|
-
return await
|
|
269
|
+
return await _chunkSHLXACIOcjs.loadFarmDevModule.call(void 0, this.viteServer, filePath);
|
|
260
270
|
}
|
|
261
271
|
return await import(
|
|
262
272
|
/* @vite-ignore */
|
|
263
|
-
|
|
273
|
+
_chunkSHLXACIOcjs.toFileModuleUrl.call(void 0, filePath)
|
|
264
274
|
);
|
|
265
275
|
}
|
|
266
276
|
addEndpoint(routePath, filePath, method, endpoint, appDir, runtimeConfig = {}) {
|
|
@@ -322,7 +332,7 @@ var _APIRouteManager = class _APIRouteManager {
|
|
|
322
332
|
const url = new URL(request.url);
|
|
323
333
|
const pathname = url.pathname;
|
|
324
334
|
const method = request.method.toUpperCase();
|
|
325
|
-
const match =
|
|
335
|
+
const match = _chunkS6VYG6XUcjs.matchAPIRouteAtBasePath.call(void 0, this.routes, pathname, this.basePath);
|
|
326
336
|
if (!match) {
|
|
327
337
|
return new Response(JSON.stringify({ error: "Not Found" }), {
|
|
328
338
|
status: 404,
|
|
@@ -330,19 +340,19 @@ var _APIRouteManager = class _APIRouteManager {
|
|
|
330
340
|
});
|
|
331
341
|
}
|
|
332
342
|
const { route, params } = match;
|
|
333
|
-
const endpoint =
|
|
343
|
+
const endpoint = _chunkS6VYG6XUcjs.resolveAPIRouteEndpoint.call(void 0, route, method);
|
|
334
344
|
if (!endpoint) {
|
|
335
345
|
return new Response(JSON.stringify({ error: "Method Not Allowed" }), {
|
|
336
346
|
status: 405,
|
|
337
347
|
headers: {
|
|
338
|
-
Allow:
|
|
348
|
+
Allow: _chunkS6VYG6XUcjs.getAllowedAPIRouteMethods.call(void 0, route).join(", "),
|
|
339
349
|
"Content-Type": "application/json"
|
|
340
350
|
}
|
|
341
351
|
});
|
|
342
352
|
}
|
|
343
353
|
const invoke = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, async () => {
|
|
344
354
|
try {
|
|
345
|
-
return await
|
|
355
|
+
return await _chunkS6VYG6XUcjs.invokeAPIRouteEndpoint.call(void 0, endpoint, request, params, this.bodySizeLimit);
|
|
346
356
|
} catch (error) {
|
|
347
357
|
if (options.throwOnError) throw error;
|
|
348
358
|
console.error(`[API Error] ${pathname}:`, error);
|
|
@@ -364,7 +374,7 @@ var _APIRouteManager = class _APIRouteManager {
|
|
|
364
374
|
return Boolean(this.matchRoute(pathname));
|
|
365
375
|
}
|
|
366
376
|
matchRoute(pathname) {
|
|
367
|
-
return
|
|
377
|
+
return _chunkS6VYG6XUcjs.matchAPIRouteAtBasePath.call(void 0, this.routes, pathname, this.basePath);
|
|
368
378
|
}
|
|
369
379
|
/**
|
|
370
380
|
* Get all routes for client type generation
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-IOEH4VWN.mjs";
|
|
7
7
|
import {
|
|
8
8
|
APIRouteConflictError
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-T4OGRVNS.mjs";
|
|
10
10
|
import {
|
|
11
11
|
findProgrammaticRouteFilesInDir
|
|
12
12
|
} from "./chunk-UDNPLXW7.mjs";
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
matchAPIRouteAtBasePath,
|
|
21
21
|
mergePluginAPIRoutes,
|
|
22
22
|
resolveAPIRouteEndpoint
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-O6I6VWKK.mjs";
|
|
24
24
|
import {
|
|
25
25
|
isProgrammaticRoutesFileName
|
|
26
26
|
} from "./chunk-EA5K5BKU.mjs";
|
|
@@ -28,13 +28,13 @@ import {
|
|
|
28
28
|
createFarmRequestBodyErrorResponse,
|
|
29
29
|
readNodeRequestBody,
|
|
30
30
|
resolveFarmServerConfig
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-ZMMBIVQM.mjs";
|
|
32
32
|
import {
|
|
33
33
|
createCliColors
|
|
34
34
|
} from "./chunk-I2BHUNBU.mjs";
|
|
35
35
|
import {
|
|
36
36
|
loadFarmDevModule
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-KMTGADN3.mjs";
|
|
38
38
|
import {
|
|
39
39
|
toPosixPath,
|
|
40
40
|
toViteModuleId
|
|
@@ -187,7 +187,10 @@ function farmApiPlugin(options = {}) {
|
|
|
187
187
|
const plugins = options.plugins ? await (routePlugins ?? (routePlugins = Promise.resolve(options.plugins({ root: projectRoot })))) : [];
|
|
188
188
|
pluginMergedRoutes = plugins.length ? new Map(
|
|
189
189
|
mergePluginAPIRoutes([...apiRoutesCache.values()], plugins, void 0, {
|
|
190
|
-
bodySizeLimit
|
|
190
|
+
bodySizeLimit,
|
|
191
|
+
// A plugin calling an app endpoint (an MCP tool, say) goes back through this server,
|
|
192
|
+
// so the middleware that guards the endpoint's path runs for it.
|
|
193
|
+
dispatch: /* @__PURE__ */ __name((request) => fetch(request, { redirect: "manual" }), "dispatch")
|
|
191
194
|
}).map((route) => [route.path, route])
|
|
192
195
|
) : null;
|
|
193
196
|
const totalEndpoints = Array.from(servedRoutes().values()).reduce(
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkXSIRSMAScjs = require('./chunk-XSIRSMAS.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkE2ROOWQCcjs = require('./chunk-E2ROOWQC.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkJSROZYYOcjs = require('./chunk-JSROZYYO.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
var _chunkSYQ3MOWWcjs = require('./chunk-SYQ3MOWW.cjs');
|
|
@@ -20,7 +20,7 @@ var _chunkTIWHTW3Qcjs = require('./chunk-TIWHTW3Q.cjs');
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
var
|
|
23
|
+
var _chunkWBKEZXWEcjs = require('./chunk-WBKEZXWE.cjs');
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
var _chunkPSV6XKPOcjs = require('./chunk-PSV6XKPO.cjs');
|
|
@@ -1089,8 +1089,8 @@ async function generateFarmTypeArtifacts(options) {
|
|
|
1089
1089
|
const shouldGenerateEnv = options.env !== false;
|
|
1090
1090
|
const shouldGenerateImages = options.images !== false;
|
|
1091
1091
|
const shouldGenerateI18n = options.i18n !== false && _optionalChain([options, 'access', _46 => _46.i18nConfig, 'optionalAccess', _47 => _47.enabled]);
|
|
1092
|
-
const sourceRoots =
|
|
1093
|
-
const appDirs =
|
|
1092
|
+
const sourceRoots = _chunkWBKEZXWEcjs.getFarmSourceRoots.call(void 0, { root, srcDir, layers: options.layers });
|
|
1093
|
+
const appDirs = _chunkWBKEZXWEcjs.getFarmAppDirectories.call(void 0, { root, srcDir, layers: options.layers });
|
|
1094
1094
|
const result = {
|
|
1095
1095
|
apiRoutes: [],
|
|
1096
1096
|
stalePaths: []
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _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
|
|
3
|
+
var _chunk42NHY7HWcjs = require('./chunk-42NHY7HW.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
|
|
@@ -11,7 +11,7 @@ var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
|
11
11
|
var _url = require('url');
|
|
12
12
|
async function createFarmMarkdownRouteModuleFromFile(filePath, options = {}) {
|
|
13
13
|
const source = await _promises.readFile.call(void 0, filePath, "utf8");
|
|
14
|
-
return
|
|
14
|
+
return _chunk42NHY7HWcjs.createFarmMarkdownRouteModule.call(void 0, {
|
|
15
15
|
source,
|
|
16
16
|
filePath,
|
|
17
17
|
components: options.components,
|
|
@@ -118,6 +118,15 @@ var DEFAULT_FARM_SERVER_REQUEST_TIMEOUT = 3e5;
|
|
|
118
118
|
var DEFAULT_FARM_SERVER_KEEP_ALIVE_TIMEOUT = 5e3;
|
|
119
119
|
var DEFAULT_FARM_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT = 3e4;
|
|
120
120
|
var MAX_FARM_SERVER_TIMEOUT = 2147483647;
|
|
121
|
+
function createFarmWeakETag(body) {
|
|
122
|
+
let hash = 2166136261;
|
|
123
|
+
for (let index = 0; index < body.length; index++) {
|
|
124
|
+
hash ^= body.charCodeAt(index);
|
|
125
|
+
hash = Math.imul(hash, 16777619);
|
|
126
|
+
}
|
|
127
|
+
return `W/"${(hash >>> 0).toString(16).padStart(8, "0")}"`;
|
|
128
|
+
}
|
|
129
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, createFarmWeakETag, "createFarmWeakETag");
|
|
121
130
|
function matchesFarmIfNoneMatch(value, etag) {
|
|
122
131
|
const expected = parseEntityTag(trimOptionalWhitespace(etag));
|
|
123
132
|
if (!expected) return false;
|
|
@@ -492,4 +501,5 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, throwIfAborted, "throwIfAborted");
|
|
|
492
501
|
|
|
493
502
|
|
|
494
503
|
|
|
495
|
-
|
|
504
|
+
|
|
505
|
+
exports.setRequestContext = setRequestContext; exports.getRequestContext = getRequestContext; exports.hasRequestContext = hasRequestContext; exports.deleteRequestContext = deleteRequestContext; exports.clearRequestContext = clearRequestContext; exports.getRequestContextSnapshot = getRequestContextSnapshot; exports.copyRequestContext = copyRequestContext; exports.createFarmNodeRequestAbortSignal = createFarmNodeRequestAbortSignal; exports.DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT = DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT; exports.createFarmWeakETag = createFarmWeakETag; exports.matchesFarmIfNoneMatch = matchesFarmIfNoneMatch; exports.resolveFarmServerConfig = resolveFarmServerConfig; exports.parseBodySizeLimit = parseBodySizeLimit; exports.cloneFarmRequestWithContext = cloneFarmRequestWithContext; exports.bufferFarmRequestBody = bufferFarmRequestBody; exports.readFarmRequestBody = readFarmRequestBody; exports.readNodeRequestBody = readNodeRequestBody; exports.createFarmNodeRequestBodyStream = createFarmNodeRequestBodyStream; exports.createFarmRequestBodyErrorResponse = createFarmRequestBodyErrorResponse;
|