@farm.js/core 0.1.25 → 0.1.26
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-runtime.d.mts +2 -2
- package/dist/agent-runtime.d.ts +2 -2
- package/dist/api/route-manager.d.mts +2 -2
- package/dist/api/route-manager.d.ts +2 -2
- package/dist/api.d.mts +3 -3
- package/dist/api.d.ts +3 -3
- package/dist/{app-ZuWrAMc_.d.mts → app-29vG5tmY.d.mts} +3 -3
- package/dist/{app-BF-ctoxh.d.ts → app-Cx71s_PT.d.ts} +3 -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-E3RDL2DA.cjs → chunk-2CT6XUNO.cjs} +61 -31
- package/dist/{chunk-R7LCG3BT.cjs → chunk-3TQG7CGC.cjs} +84 -77
- package/dist/{chunk-AXYTGLF3.cjs → chunk-3WSWXPYM.cjs} +4 -4
- package/dist/{chunk-2BIJGZR3.mjs → chunk-74RZNRY6.mjs} +1 -1
- package/dist/{chunk-TTVHACQV.cjs → chunk-ALIFMS4A.cjs} +1 -1
- package/dist/{chunk-T2OPSH6S.mjs → chunk-ARXCHQLX.mjs} +9 -2
- package/dist/{chunk-2KI3CL3N.mjs → chunk-DU2CASV6.mjs} +1 -1
- package/dist/chunk-J63ZH5OQ.cjs +62 -0
- package/dist/{chunk-XM4ZDVD7.mjs → chunk-JM5GQL4H.mjs} +1 -1
- package/dist/{chunk-6VEHUKZ2.mjs → chunk-MM5D6VLP.mjs} +4 -20
- package/dist/chunk-MVL2RAJW.mjs +62 -0
- package/dist/{chunk-YA6LLTIJ.cjs → chunk-ND224OE2.cjs} +4 -20
- package/dist/{chunk-XME4TCLB.mjs → chunk-OFKG57MZ.mjs} +2 -2
- package/dist/{chunk-U4MP7XTD.mjs → chunk-OOIL3BWR.mjs} +168 -16
- package/dist/{chunk-WOI2HOGA.mjs → chunk-PPIW3MH6.mjs} +1 -1
- package/dist/{chunk-2ITKVAIF.cjs → chunk-QIH2HD6H.cjs} +191 -39
- package/dist/{chunk-65P6OGYN.cjs → chunk-QJ4D3UKJ.cjs} +10 -3
- package/dist/{chunk-RYDW7GPR.cjs → chunk-QLXEYIAW.cjs} +13 -13
- package/dist/{chunk-WJYCI56T.mjs → chunk-QPPQHB6X.mjs} +43 -30
- package/dist/{chunk-RR6UGYUT.mjs → chunk-RAI7NULA.mjs} +39 -9
- package/dist/{chunk-6K4SPQWL.cjs → chunk-RCYINC4A.cjs} +3 -3
- package/dist/{chunk-QYMRIVG6.cjs → chunk-SZ4LYNUX.cjs} +110 -97
- package/dist/{chunk-N2Z4ZFDE.mjs → chunk-UXQXGB5A.mjs} +19 -12
- package/dist/{chunk-CFNOGDUS.cjs → chunk-W2HZKYES.cjs} +2 -2
- package/dist/{chunk-O5DVPF3R.cjs → chunk-WFPRVVF2.cjs} +10 -10
- package/dist/{chunk-5YYJ6Q2L.mjs → chunk-YMUH2BLR.mjs} +2 -2
- package/dist/{client-plugins-DPG0NeZN.d.mts → client-plugins-B8RPJnot.d.mts} +90 -3
- package/dist/{client-plugins-Fgni-_25.d.ts → client-plugins-bPBf4haK.d.ts} +90 -3
- package/dist/client-plugins.d.mts +2 -2
- package/dist/client-plugins.d.ts +2 -2
- package/dist/client.d.mts +6 -6
- package/dist/client.d.ts +6 -6
- package/dist/config.d.mts +2 -2
- package/dist/config.d.ts +2 -2
- package/dist/{devtools-I7TBFOKD.mjs → devtools-5D4ZDRPR.mjs} +5 -3
- package/dist/{devtools-6OA7FEF6.cjs → devtools-QZJEUOJW.cjs} +6 -4
- package/dist/docs.cjs +8 -6
- package/dist/docs.mjs +7 -5
- package/dist/index.cjs +17 -13
- package/dist/index.d.mts +13 -13
- package/dist/index.d.ts +13 -13
- package/dist/index.mjs +16 -12
- package/dist/integrations.d.mts +2 -2
- package/dist/integrations.d.ts +2 -2
- package/dist/internal/app-markdown-runtime.cjs +5 -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 +4 -2
- package/dist/internal/build-runtime.cjs +14 -13
- package/dist/internal/build-runtime.d.mts +4 -4
- package/dist/internal/build-runtime.d.ts +4 -4
- package/dist/internal/build-runtime.mjs +13 -12
- package/dist/internal/cli-runtime.cjs +6 -5
- package/dist/internal/cli-runtime.mjs +5 -4
- 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 +2 -2
- package/dist/internal/compression-runtime.d.ts +2 -2
- package/dist/internal/config-runtime.cjs +6 -4
- package/dist/internal/config-runtime.d.mts +3 -3
- package/dist/internal/config-runtime.d.ts +3 -3
- package/dist/internal/config-runtime.mjs +5 -3
- package/dist/internal/infra-analytics-runtime.cjs +4 -3
- package/dist/internal/infra-analytics-runtime.mjs +2 -1
- package/dist/internal/product-telemetry-runtime.cjs +2 -2
- package/dist/internal/product-telemetry-runtime.mjs +1 -1
- package/dist/internal/production-runtime.cjs +5 -4
- package/dist/internal/production-runtime.d.mts +11 -9
- package/dist/internal/production-runtime.d.ts +11 -9
- package/dist/internal/production-runtime.mjs +4 -3
- package/dist/markdown.cjs +4 -2
- package/dist/markdown.mjs +3 -1
- package/dist/{metadata-D0EF7esB.d.mts → metadata-C3na4CBj.d.mts} +1 -1
- package/dist/{metadata-CDnRHKVq.d.ts → metadata-CzBP4Mfp.d.ts} +1 -1
- package/dist/middleware.d.mts +4 -4
- package/dist/middleware.d.ts +4 -4
- package/dist/navigation.d.mts +5 -5
- package/dist/navigation.d.ts +5 -5
- package/dist/observability-BupkiN0m.d.mts +447 -0
- package/dist/observability-BupkiN0m.d.ts +447 -0
- package/dist/observability.d.mts +2 -417
- package/dist/observability.d.ts +2 -417
- package/dist/plugin.cjs +9 -8
- package/dist/plugin.d.mts +2 -2
- package/dist/plugin.d.ts +2 -2
- package/dist/plugin.mjs +8 -7
- package/dist/{production-runtime-DpCt0opU.d.ts → production-runtime-CYg4wM4E.d.ts} +1 -1
- package/dist/{production-runtime-x3W4wVqx.d.mts → production-runtime-DP94hPGe.d.mts} +1 -1
- package/dist/{render-plan-D5oFRVBV.d.ts → render-plan-Bl6Fzg5z.d.ts} +1 -1
- package/dist/{render-plan-tazUJalK.d.mts → render-plan-CKAJg0jC.d.mts} +1 -1
- package/dist/renderer-client.d.mts +4 -4
- package/dist/renderer-client.d.ts +4 -4
- package/dist/{request-CzZX0Aew.d.ts → request-CR-Bp1Px.d.ts} +1 -1
- package/dist/{request-CXmQy5ks.d.mts → request-CrBCcPZZ.d.mts} +1 -1
- package/dist/request.d.mts +3 -3
- package/dist/request.d.ts +3 -3
- package/dist/{route-rendering-B-qpe32B.d.mts → route-rendering-C1NAHo-C.d.mts} +1 -1
- package/dist/{route-rendering-Dw3C362T.d.ts → route-rendering-CZH5FegB.d.ts} +1 -1
- package/dist/{router-CafM2jlw.d.mts → router-B57eDJ3u.d.mts} +1 -1
- package/dist/{router-CLl3xHwl.d.ts → router-Cg_kD3Bd.d.ts} +1 -1
- package/dist/routes.d.mts +2 -2
- package/dist/routes.d.ts +2 -2
- package/dist/server-plugins.d.mts +3 -3
- package/dist/server-plugins.d.ts +3 -3
- package/dist/server.cjs +159 -102
- package/dist/server.d.mts +8 -8
- package/dist/server.d.ts +8 -8
- package/dist/server.mjs +140 -83
- package/dist/{spa-router-DePr2aZ6.d.ts → spa-router-BstQUO6Q.d.ts} +2 -2
- package/dist/{spa-router-6sJfsMlQ.d.mts → spa-router-DTdbuinx.d.mts} +2 -2
- package/dist/testing.d.mts +2 -2
- package/dist/testing.d.ts +2 -2
- package/dist/{utils-BPHr-1mP.d.mts → utils-CS3ZLnEJ.d.mts} +1 -1
- package/dist/{utils-BBKC3cf3.d.ts → utils-D3rdsIvM.d.ts} +1 -1
- package/dist/version.cjs +2 -2
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +9 -8
- package/dist/vite.d.mts +2 -2
- package/dist/vite.d.ts +2 -2
- package/dist/vite.mjs +8 -7
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
compileFarmDocsAdapterEdgeManifest,
|
|
9
9
|
createFarmDocsAPIHandler
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-OFKG57MZ.mjs";
|
|
11
11
|
import {
|
|
12
12
|
FARM_DOCS_LAST_MODIFIED_MANIFEST,
|
|
13
13
|
createFarmDocsHandler,
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
loadFarmDocsPage,
|
|
18
18
|
resolveFarmDocsContentDir,
|
|
19
19
|
toFarmDocsMarkdownPage
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-DU2CASV6.mjs";
|
|
21
21
|
import {
|
|
22
22
|
generateFarmDocsSearchClientRuntime,
|
|
23
23
|
isFarmDocsSearchEnabled,
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
} from "./chunk-UP4CW6WP.mjs";
|
|
26
26
|
import {
|
|
27
27
|
FARM_PRERENDER_ENV
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-MM5D6VLP.mjs";
|
|
29
29
|
import {
|
|
30
30
|
loadFarmDocsEngine
|
|
31
31
|
} from "./chunk-2VQKKQ6D.mjs";
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
getDeployTargetForPreset,
|
|
35
35
|
hasCustomFarmRouteContext,
|
|
36
36
|
resolveDeployOutputPath
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-YMUH2BLR.mjs";
|
|
38
38
|
import {
|
|
39
39
|
resolveFarmInstrumentationFile
|
|
40
40
|
} from "./chunk-ZZSRYEYU.mjs";
|
|
@@ -44,6 +44,7 @@ import {
|
|
|
44
44
|
import {
|
|
45
45
|
DEFAULT_NOT_FOUND_STYLES,
|
|
46
46
|
FARM_LAYOUT_ELEMENT_CLIENT_SOURCE,
|
|
47
|
+
HOISTED_HEAD_ELEMENT,
|
|
47
48
|
PluginManager,
|
|
48
49
|
SHARP_INSTALL_HINT,
|
|
49
50
|
createFarmApp,
|
|
@@ -69,7 +70,7 @@ import {
|
|
|
69
70
|
resolveFarmImageProviderForRuntime,
|
|
70
71
|
resolveFarmIsolatedClientHydrationMode,
|
|
71
72
|
resolveFarmNotFoundComponentPath
|
|
72
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-UXQXGB5A.mjs";
|
|
73
74
|
import {
|
|
74
75
|
findRequestBoundSourceBlockers,
|
|
75
76
|
generateFarmTypeArtifacts,
|
|
@@ -79,7 +80,7 @@ import {
|
|
|
79
80
|
import {
|
|
80
81
|
FARM_API_CATALOG_PATH,
|
|
81
82
|
resolveFarmApiCatalogInput
|
|
82
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-ARXCHQLX.mjs";
|
|
83
84
|
import {
|
|
84
85
|
isFarmPreviewDeploymentEnvironment
|
|
85
86
|
} from "./chunk-BOYNDCZL.mjs";
|
|
@@ -111,7 +112,7 @@ import {
|
|
|
111
112
|
} from "./chunk-DAATZTKJ.mjs";
|
|
112
113
|
import {
|
|
113
114
|
applyFarmCspHashesToHtml
|
|
114
|
-
} from "./chunk-
|
|
115
|
+
} from "./chunk-RAI7NULA.mjs";
|
|
115
116
|
import {
|
|
116
117
|
applyFarmCronVercelCrons,
|
|
117
118
|
createFarmCronCloudflareConfig,
|
|
@@ -123,14 +124,14 @@ import {
|
|
|
123
124
|
} from "./chunk-4OOBRCJX.mjs";
|
|
124
125
|
import {
|
|
125
126
|
isFarmMarkdownPageFile
|
|
126
|
-
} from "./chunk-
|
|
127
|
+
} from "./chunk-JM5GQL4H.mjs";
|
|
127
128
|
import {
|
|
128
129
|
resolveFarmMdxComponentsModulePath,
|
|
129
130
|
resolveMdxConfig
|
|
130
131
|
} from "./chunk-FA2W42OV.mjs";
|
|
131
132
|
import {
|
|
132
133
|
getFarmMarkdownAlternatePath
|
|
133
|
-
} from "./chunk-
|
|
134
|
+
} from "./chunk-OOIL3BWR.mjs";
|
|
134
135
|
import {
|
|
135
136
|
applyFarmWorkflowVercelCrons,
|
|
136
137
|
prepareFarmWorkflowsForNitro
|
|
@@ -6325,12 +6326,13 @@ function stripFarmDocumentWrappers(markup) {
|
|
|
6325
6326
|
}
|
|
6326
6327
|
|
|
6327
6328
|
// Farm's display:contents wrappers, and the head elements React 19 hoists in front of them
|
|
6328
|
-
// (charset, viewport, preloads, titles) when the layout's
|
|
6329
|
+
// (charset, viewport, preloads, titles, async scripts, precedence styles) when the layout's
|
|
6330
|
+
// <html> is not the render root. The hoistable pattern is shared with the dev renderer.
|
|
6329
6331
|
function peelFarmDocumentPrefix(markup) {
|
|
6330
6332
|
let inner = markup.replace(/^\\s+/, "");
|
|
6331
6333
|
let hoisted = "";
|
|
6332
6334
|
const wrapper = /^<div\\b[^>]*style=["']display\\s*:\\s*contents["'][^>]*>/i;
|
|
6333
|
-
const hoistable =
|
|
6335
|
+
const hoistable = /${HOISTED_HEAD_ELEMENT.source}/i;
|
|
6334
6336
|
let match;
|
|
6335
6337
|
while ((match = wrapper.exec(inner) || hoistable.exec(inner))) {
|
|
6336
6338
|
if (!/^<div/i.test(match[0])) hoisted += match[0];
|
|
@@ -6842,7 +6844,7 @@ async function handleApplicationMetadataRouteRequest(request, routePathname) {
|
|
|
6842
6844
|
const body = isLlmsFull && !(value instanceof Response)
|
|
6843
6845
|
? await renderFarmLlmsFullTxt(value, { origin: url.origin, readMarkdown: llmsContext.markdown })
|
|
6844
6846
|
: value;
|
|
6845
|
-
return createFarmMetadataRouteResponse(match.metadata.kind, body, routeModule, { method });
|
|
6847
|
+
return createFarmMetadataRouteResponse(match.metadata.kind, body, routeModule, { method, request });
|
|
6846
6848
|
} catch (error) {
|
|
6847
6849
|
console.error("Metadata route render failed:", error);
|
|
6848
6850
|
return new Response("Internal Server Error", {
|
|
@@ -7647,7 +7649,7 @@ async function handleFarmRequestInContext(
|
|
|
7647
7649
|
// agent.apiCatalog: list the OpenAPI and MCP surfaces at the RFC 9727 path.
|
|
7648
7650
|
if (normalizeRuntimePath(routePathname) === ${JSON.stringify(FARM_API_CATALOG_PATH)}) {
|
|
7649
7651
|
return applyProductionMiddlewareHeaders(
|
|
7650
|
-
createFarmApiCatalogResponse(request.method, farmApiCatalogInput),
|
|
7652
|
+
createFarmApiCatalogResponse(request.method, farmApiCatalogInput, request),
|
|
7651
7653
|
middlewareHeaders,
|
|
7652
7654
|
);
|
|
7653
7655
|
}
|
|
@@ -7669,26 +7671,34 @@ async function handleFarmRequestInContext(
|
|
|
7669
7671
|
if (farmGeneratedLlmsKind) {
|
|
7670
7672
|
const llmsContext = createFarmLlmsTxtContext(request, farmGeneratedLlmsKind === "llms-full");
|
|
7671
7673
|
const llmsOrigin = new URL(request.url).origin;
|
|
7672
|
-
|
|
7674
|
+
// A page that times out is left out, the shared render is not reused, and
|
|
7675
|
+
// the partial response is not cacheable.
|
|
7676
|
+
let llmsComplete = true;
|
|
7677
|
+
const renderLlmsFull = (shared) =>
|
|
7673
7678
|
renderFarmLlmsFullTxt(llmsContext.defaults, {
|
|
7674
7679
|
origin: llmsOrigin,
|
|
7675
7680
|
readMarkdown: llmsContext.markdown,
|
|
7681
|
+
onIncomplete: () => {
|
|
7682
|
+
llmsComplete = false;
|
|
7683
|
+
if (shared) shared.incomplete();
|
|
7684
|
+
},
|
|
7676
7685
|
});
|
|
7677
7686
|
// HEAD reads no pages, so it neither waits for nor fills the shared render.
|
|
7678
7687
|
const llmsBody = farmGeneratedLlmsKind !== "llms-full"
|
|
7679
7688
|
? llmsContext.defaults
|
|
7680
7689
|
: request.method.toUpperCase() === "HEAD"
|
|
7681
7690
|
? await renderLlmsFull()
|
|
7682
|
-
: await farmLlmsFullRenderer(llmsOrigin, renderLlmsFull)
|
|
7683
|
-
|
|
7684
|
-
|
|
7685
|
-
|
|
7686
|
-
|
|
7687
|
-
|
|
7688
|
-
|
|
7689
|
-
|
|
7690
|
-
middlewareHeaders,
|
|
7691
|
+
: await farmLlmsFullRenderer(llmsOrigin, renderLlmsFull, (complete) => {
|
|
7692
|
+
llmsComplete = complete;
|
|
7693
|
+
});
|
|
7694
|
+
const llmsResponse = createFarmMetadataRouteResponse(
|
|
7695
|
+
farmGeneratedLlmsKind,
|
|
7696
|
+
llmsBody,
|
|
7697
|
+
{ revalidate: llmsComplete ? farmLlmsTxtConfig.revalidate : 0 },
|
|
7698
|
+
{ method: request.method, request },
|
|
7691
7699
|
);
|
|
7700
|
+
if (!llmsComplete) llmsResponse.headers.set("cache-control", "no-store");
|
|
7701
|
+
return applyProductionMiddlewareHeaders(llmsResponse, middlewareHeaders);
|
|
7692
7702
|
}
|
|
7693
7703
|
` : ""}
|
|
7694
7704
|
|
|
@@ -9340,13 +9350,16 @@ export default async function farmNitroEventHandler(event) {
|
|
|
9340
9350
|
const alternatePath = getFarmMarkdownAlternatePath(config.md, route.route);
|
|
9341
9351
|
if (!alternatePath) return;
|
|
9342
9352
|
const routeRule = nitroInstance.options.routeRules[route.route] || {};
|
|
9343
|
-
|
|
9344
|
-
|
|
9345
|
-
|
|
9346
|
-
|
|
9347
|
-
|
|
9348
|
-
}
|
|
9349
|
-
|
|
9353
|
+
const alternate = `<${alternatePath}>; rel="alternate"; type="text/markdown"`;
|
|
9354
|
+
const headers = { ...routeRule.headers };
|
|
9355
|
+
let link;
|
|
9356
|
+
for (const key of Object.keys(headers)) {
|
|
9357
|
+
if (key.toLowerCase() !== "link") continue;
|
|
9358
|
+
link = link ? `${link}, ${headers[key]}` : headers[key];
|
|
9359
|
+
delete headers[key];
|
|
9360
|
+
}
|
|
9361
|
+
headers.Link = !link ? alternate : link.includes(alternate) ? link : `${link}, ${alternate}`;
|
|
9362
|
+
nitroInstance.options.routeRules[route.route] = { ...routeRule, headers };
|
|
9350
9363
|
});
|
|
9351
9364
|
nitroInstance.hooks.hook("prerender:done", () => {
|
|
9352
9365
|
nitroInstance.routing.sync();
|
|
@@ -2,7 +2,10 @@ import {
|
|
|
2
2
|
getFarmMarkdownMirrorPath,
|
|
3
3
|
isFarmMarkdownMirrorExposed,
|
|
4
4
|
matchesFarmMarkdownRoutePattern
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-OOIL3BWR.mjs";
|
|
6
|
+
import {
|
|
7
|
+
FARM_INTERNAL_READ_HEADER
|
|
8
|
+
} from "./chunk-MVL2RAJW.mjs";
|
|
6
9
|
import {
|
|
7
10
|
applyFarmBasePath
|
|
8
11
|
} from "./chunk-4RB44K6Z.mjs";
|
|
@@ -158,7 +161,9 @@ function createFarmLlmsMarkdownReader(fetchMarkdown) {
|
|
|
158
161
|
return async (url) => {
|
|
159
162
|
try {
|
|
160
163
|
const response = await fetchMarkdown(
|
|
161
|
-
new Request(url, {
|
|
164
|
+
new Request(url, {
|
|
165
|
+
headers: { accept: "text/markdown", [FARM_INTERNAL_READ_HEADER]: "llms-full" }
|
|
166
|
+
})
|
|
162
167
|
);
|
|
163
168
|
const type = response.headers.get("content-type") ?? "";
|
|
164
169
|
if (!response.ok || !type.toLowerCase().startsWith("text/markdown")) {
|
|
@@ -172,6 +177,8 @@ function createFarmLlmsMarkdownReader(fetchMarkdown) {
|
|
|
172
177
|
};
|
|
173
178
|
}
|
|
174
179
|
__name(createFarmLlmsMarkdownReader, "createFarmLlmsMarkdownReader");
|
|
180
|
+
var FARM_LLMS_FULL_PAGE_TIMEOUT_MS = 3e4;
|
|
181
|
+
var LLMS_PAGE_TIMED_OUT = /* @__PURE__ */ Symbol("farm.llms.pageTimedOut");
|
|
175
182
|
async function renderFarmLlmsFullTxt(value, options) {
|
|
176
183
|
const index = serializeFarmLlmsTxt(value);
|
|
177
184
|
if (typeof value === "string") return index;
|
|
@@ -185,10 +192,25 @@ async function renderFarmLlmsFullTxt(value, options) {
|
|
|
185
192
|
links.push(link);
|
|
186
193
|
}
|
|
187
194
|
}
|
|
195
|
+
const pageTimeout = options.pageTimeout ?? FARM_LLMS_FULL_PAGE_TIMEOUT_MS;
|
|
196
|
+
const readWithinTimeout = /* @__PURE__ */ __name(async (url) => {
|
|
197
|
+
let timer;
|
|
198
|
+
const timedOut = new Promise((resolve) => {
|
|
199
|
+
timer = setTimeout(resolve, pageTimeout, LLMS_PAGE_TIMED_OUT);
|
|
200
|
+
});
|
|
201
|
+
try {
|
|
202
|
+
const content = await Promise.race([options.readMarkdown(url), timedOut]);
|
|
203
|
+
if (content !== LLMS_PAGE_TIMED_OUT) return content;
|
|
204
|
+
options.onIncomplete?.();
|
|
205
|
+
return null;
|
|
206
|
+
} finally {
|
|
207
|
+
clearTimeout(timer);
|
|
208
|
+
}
|
|
209
|
+
}, "readWithinTimeout");
|
|
188
210
|
const contents = await mapWithConcurrency(
|
|
189
211
|
links,
|
|
190
212
|
options.concurrency ?? 4,
|
|
191
|
-
(link) => shouldInlineLlmsLink(link.url, options.origin) ?
|
|
213
|
+
(link) => shouldInlineLlmsLink(link.url, options.origin) ? readWithinTimeout(link.url) : null
|
|
192
214
|
);
|
|
193
215
|
const blocks = [`# ${toSingleLine(llms.title)}`];
|
|
194
216
|
if (llms.summary?.trim()) blocks.push(`> ${toSingleLine(llms.summary)}`);
|
|
@@ -211,27 +233,35 @@ function createFarmLlmsFullRenderer(options = {}) {
|
|
|
211
233
|
const maxEntries = options.maxEntries ?? 16;
|
|
212
234
|
const entries = /* @__PURE__ */ new Map();
|
|
213
235
|
let queue = Promise.resolve();
|
|
214
|
-
|
|
236
|
+
const settle = /* @__PURE__ */ __name((body, complete, onSettled) => onSettled ? body.then((value) => (onSettled(complete()), value)) : body, "settle");
|
|
237
|
+
return (origin, render, onSettled) => {
|
|
215
238
|
const entry = entries.get(origin);
|
|
216
|
-
if (entry && entry.expires > now()) return entry.body;
|
|
239
|
+
if (entry && entry.expires > now()) return settle(entry.body, entry.complete, onSettled);
|
|
217
240
|
entries.delete(origin);
|
|
218
|
-
|
|
241
|
+
let complete = true;
|
|
242
|
+
const body = queue.then(
|
|
243
|
+
() => render({
|
|
244
|
+
incomplete: /* @__PURE__ */ __name(() => {
|
|
245
|
+
complete = false;
|
|
246
|
+
}, "incomplete")
|
|
247
|
+
})
|
|
248
|
+
);
|
|
219
249
|
queue = body.catch(() => {
|
|
220
250
|
});
|
|
221
|
-
const pending = { body, expires: Number.POSITIVE_INFINITY };
|
|
251
|
+
const pending = { body, expires: Number.POSITIVE_INFINITY, complete: /* @__PURE__ */ __name(() => complete, "complete") };
|
|
222
252
|
entries.set(origin, pending);
|
|
223
253
|
if (entries.size > maxEntries) entries.delete(entries.keys().next().value);
|
|
224
254
|
body.then(
|
|
225
255
|
() => {
|
|
226
256
|
if (entries.get(origin) !== pending) return;
|
|
227
|
-
if (ttl > 0) pending.expires = now() + ttl;
|
|
257
|
+
if (ttl > 0 && complete) pending.expires = now() + ttl;
|
|
228
258
|
else entries.delete(origin);
|
|
229
259
|
},
|
|
230
260
|
() => {
|
|
231
261
|
if (entries.get(origin) === pending) entries.delete(origin);
|
|
232
262
|
}
|
|
233
263
|
);
|
|
234
|
-
return body;
|
|
264
|
+
return settle(body, pending.complete, onSettled);
|
|
235
265
|
};
|
|
236
266
|
}
|
|
237
267
|
__name(createFarmLlmsFullRenderer, "createFarmLlmsFullRenderer");
|
|
@@ -1,7 +1,7 @@
|
|
|
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
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkQIH2HD6Hcjs = require('./chunk-QIH2HD6H.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
|
|
@@ -116,7 +116,7 @@ async function createFarmMarkdownSourceResponse(options) {
|
|
|
116
116
|
}
|
|
117
117
|
const url = new URL(options.request.url);
|
|
118
118
|
const hasMarkdownExtension = url.pathname.toLowerCase().endsWith(".md");
|
|
119
|
-
if (!hasMarkdownExtension && !
|
|
119
|
+
if (!hasMarkdownExtension && !_chunkQIH2HD6Hcjs.requestAcceptsMarkdown.call(void 0, options.request.headers.get("accept"))) {
|
|
120
120
|
return null;
|
|
121
121
|
}
|
|
122
122
|
const targetPathname = normalizeFarmMarkdownRoutePath(url.pathname);
|
|
@@ -134,7 +134,7 @@ async function createFarmMarkdownSourceResponse(options) {
|
|
|
134
134
|
if (!hasMarkdownExtension) {
|
|
135
135
|
headers.set("Vary", "Accept");
|
|
136
136
|
}
|
|
137
|
-
return
|
|
137
|
+
return _chunkQIH2HD6Hcjs.createFarmMarkdownViewResponse.call(void 0, {
|
|
138
138
|
request: options.request,
|
|
139
139
|
requestUrl: url,
|
|
140
140
|
markdown: source.source,
|