@farm.js/core 0.1.24 → 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.
Files changed (167) hide show
  1. package/dist/agent-runtime.d.mts +2 -2
  2. package/dist/agent-runtime.d.ts +2 -2
  3. package/dist/api/route-manager.cjs +4 -4
  4. package/dist/api/route-manager.d.mts +2 -2
  5. package/dist/api/route-manager.d.ts +2 -2
  6. package/dist/api/route-manager.mjs +3 -3
  7. package/dist/api/runtime.cjs +3 -3
  8. package/dist/api/runtime.mjs +2 -2
  9. package/dist/api.cjs +7 -7
  10. package/dist/api.d.mts +3 -3
  11. package/dist/api.d.ts +3 -3
  12. package/dist/api.mjs +6 -6
  13. package/dist/{app-BZDWwwFa.d.mts → app-29vG5tmY.d.mts} +3 -3
  14. package/dist/{app-BV-7wV5q.d.ts → app-Cx71s_PT.d.ts} +3 -3
  15. package/dist/app-markdown.cjs +6 -4
  16. package/dist/app-markdown.d.mts +3 -3
  17. package/dist/app-markdown.d.ts +3 -3
  18. package/dist/app-markdown.mjs +5 -3
  19. package/dist/{chunk-ISTFC3MZ.cjs → chunk-2CT6XUNO.cjs} +99 -26
  20. package/dist/{chunk-G6GNNB44.cjs → chunk-3TQG7CGC.cjs} +201 -180
  21. package/dist/{chunk-KNPRCKXK.cjs → chunk-3TQWUUNP.cjs} +9 -7
  22. package/dist/{chunk-LYM7HY34.cjs → chunk-3WSWXPYM.cjs} +4 -4
  23. package/dist/{chunk-GZ3ZPTQV.mjs → chunk-52SH7TKB.mjs} +2 -2
  24. package/dist/{chunk-JIKGGIOL.mjs → chunk-6D242YGO.mjs} +1 -1
  25. package/dist/{chunk-MVUREHPN.mjs → chunk-74RZNRY6.mjs} +1 -1
  26. package/dist/{chunk-BD7FZ63M.cjs → chunk-ALIFMS4A.cjs} +1 -1
  27. package/dist/{chunk-PGQBL5DN.mjs → chunk-ARXCHQLX.mjs} +79 -2
  28. package/dist/{chunk-2QLBIPFT.cjs → chunk-B6ZCT36X.cjs} +4 -4
  29. package/dist/{chunk-IMBMOEWT.cjs → chunk-BD2U4ZL6.cjs} +8 -8
  30. package/dist/{chunk-2M435BUE.mjs → chunk-CEYUWDWA.mjs} +7 -5
  31. package/dist/{chunk-XI3GWPUS.cjs → chunk-CRQPYWLK.cjs} +14 -14
  32. package/dist/{chunk-47H7VENP.mjs → chunk-DU2CASV6.mjs} +1 -1
  33. package/dist/{chunk-QTBEAKCJ.cjs → chunk-H7CJRJ4L.cjs} +16 -16
  34. package/dist/chunk-J63ZH5OQ.cjs +62 -0
  35. package/dist/{chunk-N255VYFP.mjs → chunk-JM5GQL4H.mjs} +8 -3
  36. package/dist/{chunk-6VEHUKZ2.mjs → chunk-MM5D6VLP.mjs} +4 -20
  37. package/dist/chunk-MVL2RAJW.mjs +62 -0
  38. package/dist/{chunk-YA6LLTIJ.cjs → chunk-ND224OE2.cjs} +4 -20
  39. package/dist/{chunk-YGMK6ESJ.mjs → chunk-OFKG57MZ.mjs} +2 -2
  40. package/dist/chunk-OOIL3BWR.mjs +1229 -0
  41. package/dist/{chunk-BNSD3VDY.mjs → chunk-PPIW3MH6.mjs} +1 -1
  42. package/dist/{chunk-WNUBR4CA.mjs → chunk-QGG336NI.mjs} +1 -1
  43. package/dist/chunk-QIH2HD6H.cjs +1229 -0
  44. package/dist/{chunk-OYDRPBBV.cjs → chunk-QJ4D3UKJ.cjs} +80 -3
  45. package/dist/{chunk-LQIRVSBY.cjs → chunk-QLXEYIAW.cjs} +13 -13
  46. package/dist/{chunk-ARHWIOUZ.mjs → chunk-QPPQHB6X.mjs} +111 -40
  47. package/dist/{chunk-7BC6GAL7.mjs → chunk-RAI7NULA.mjs} +76 -3
  48. package/dist/{chunk-AH7HOAQ3.cjs → chunk-RCYINC4A.cjs} +9 -4
  49. package/dist/{chunk-SIQMTHCZ.cjs → chunk-SZ4LYNUX.cjs} +212 -141
  50. package/dist/{chunk-5UX4C5QI.mjs → chunk-TKDY6AJP.mjs} +1 -1
  51. package/dist/{chunk-YJJLXIIS.cjs → chunk-U74A3P2P.cjs} +7 -7
  52. package/dist/{chunk-6YSEHN46.mjs → chunk-UXQXGB5A.mjs} +36 -15
  53. package/dist/{chunk-72VJRKJD.mjs → chunk-VZWO3XVL.mjs} +2 -2
  54. package/dist/{chunk-I5YBCWQ6.cjs → chunk-W2HZKYES.cjs} +2 -2
  55. package/dist/{chunk-DNLQMFER.cjs → chunk-WFPRVVF2.cjs} +26 -19
  56. package/dist/{chunk-BDJNP7AQ.mjs → chunk-YMUH2BLR.mjs} +10 -3
  57. package/dist/{client-plugins-B_XzCegf.d.mts → client-plugins-B8RPJnot.d.mts} +129 -4
  58. package/dist/{client-plugins-CKsXQfXY.d.ts → client-plugins-bPBf4haK.d.ts} +129 -4
  59. package/dist/client-plugins.d.mts +2 -2
  60. package/dist/client-plugins.d.ts +2 -2
  61. package/dist/client.cjs +4 -4
  62. package/dist/client.d.mts +6 -6
  63. package/dist/client.d.ts +6 -6
  64. package/dist/client.mjs +3 -3
  65. package/dist/config.d.mts +2 -2
  66. package/dist/config.d.ts +2 -2
  67. package/dist/{devtools-OY4SNU3P.mjs → devtools-5D4ZDRPR.mjs} +5 -3
  68. package/dist/{devtools-UHRSZ7VA.cjs → devtools-QZJEUOJW.cjs} +6 -4
  69. package/dist/docs.cjs +8 -6
  70. package/dist/docs.mjs +7 -5
  71. package/dist/index.cjs +29 -23
  72. package/dist/index.d.mts +14 -14
  73. package/dist/index.d.ts +14 -14
  74. package/dist/index.mjs +28 -22
  75. package/dist/integrations.d.mts +2 -2
  76. package/dist/integrations.d.ts +2 -2
  77. package/dist/internal/app-markdown-runtime.cjs +5 -3
  78. package/dist/internal/app-markdown-runtime.d.mts +2 -2
  79. package/dist/internal/app-markdown-runtime.d.ts +2 -2
  80. package/dist/internal/app-markdown-runtime.mjs +4 -2
  81. package/dist/internal/build-runtime.cjs +18 -17
  82. package/dist/internal/build-runtime.d.mts +4 -4
  83. package/dist/internal/build-runtime.d.ts +4 -4
  84. package/dist/internal/build-runtime.mjs +17 -16
  85. package/dist/internal/cli-runtime.cjs +6 -5
  86. package/dist/internal/cli-runtime.mjs +5 -4
  87. package/dist/internal/client-error-overlay.cjs +4 -4
  88. package/dist/internal/client-error-overlay.mjs +1 -1
  89. package/dist/internal/compression-runtime.d.mts +2 -2
  90. package/dist/internal/compression-runtime.d.ts +2 -2
  91. package/dist/internal/config-runtime.cjs +6 -4
  92. package/dist/internal/config-runtime.d.mts +3 -3
  93. package/dist/internal/config-runtime.d.ts +3 -3
  94. package/dist/internal/config-runtime.mjs +5 -3
  95. package/dist/internal/infra-analytics-runtime.cjs +4 -3
  96. package/dist/internal/infra-analytics-runtime.mjs +2 -1
  97. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  98. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  99. package/dist/internal/production-runtime.cjs +12 -5
  100. package/dist/internal/production-runtime.d.mts +33 -9
  101. package/dist/internal/production-runtime.d.ts +33 -9
  102. package/dist/internal/production-runtime.mjs +11 -4
  103. package/dist/markdown.cjs +6 -2
  104. package/dist/markdown.d.mts +63 -1
  105. package/dist/markdown.d.ts +63 -1
  106. package/dist/markdown.mjs +5 -1
  107. package/dist/{metadata-B08w4EYV.d.mts → metadata-C3na4CBj.d.mts} +1 -1
  108. package/dist/{metadata-IQEblkZp.d.ts → metadata-CzBP4Mfp.d.ts} +1 -1
  109. package/dist/middleware.d.mts +4 -4
  110. package/dist/middleware.d.ts +4 -4
  111. package/dist/navigation.cjs +5 -5
  112. package/dist/navigation.d.mts +5 -5
  113. package/dist/navigation.d.ts +5 -5
  114. package/dist/navigation.mjs +4 -4
  115. package/dist/observability-BupkiN0m.d.mts +447 -0
  116. package/dist/observability-BupkiN0m.d.ts +447 -0
  117. package/dist/observability.d.mts +2 -417
  118. package/dist/observability.d.ts +2 -417
  119. package/dist/plugin.cjs +13 -12
  120. package/dist/plugin.d.mts +2 -2
  121. package/dist/plugin.d.ts +2 -2
  122. package/dist/plugin.mjs +12 -11
  123. package/dist/{production-runtime-DRSOkc-d.d.ts → production-runtime-CYg4wM4E.d.ts} +1 -1
  124. package/dist/{production-runtime-C3bGFEaM.d.mts → production-runtime-DP94hPGe.d.mts} +1 -1
  125. package/dist/query/client.cjs +6 -6
  126. package/dist/query/client.mjs +2 -2
  127. package/dist/{render-plan-CCFuMLNS.d.ts → render-plan-Bl6Fzg5z.d.ts} +1 -1
  128. package/dist/{render-plan-B6CKNl4e.d.mts → render-plan-CKAJg0jC.d.mts} +1 -1
  129. package/dist/renderer-client.cjs +5 -5
  130. package/dist/renderer-client.d.mts +4 -4
  131. package/dist/renderer-client.d.ts +4 -4
  132. package/dist/renderer-client.mjs +2 -2
  133. package/dist/{request-Dn6VURbE.d.ts → request-CR-Bp1Px.d.ts} +1 -1
  134. package/dist/{request-DgD1XsTx.d.mts → request-CrBCcPZZ.d.mts} +1 -1
  135. package/dist/request.d.mts +3 -3
  136. package/dist/request.d.ts +3 -3
  137. package/dist/{route-rendering-76A5I_kE.d.mts → route-rendering-C1NAHo-C.d.mts} +1 -1
  138. package/dist/{route-rendering-LAmQEdyG.d.ts → route-rendering-CZH5FegB.d.ts} +1 -1
  139. package/dist/{router-CnrRSa9d.d.mts → router-B57eDJ3u.d.mts} +1 -1
  140. package/dist/{router-BSOOGya2.d.ts → router-Cg_kD3Bd.d.ts} +1 -1
  141. package/dist/routes.d.mts +2 -2
  142. package/dist/routes.d.ts +2 -2
  143. package/dist/server-plugins.d.mts +3 -3
  144. package/dist/server-plugins.d.ts +3 -3
  145. package/dist/server.cjs +163 -106
  146. package/dist/server.d.mts +8 -8
  147. package/dist/server.d.ts +8 -8
  148. package/dist/server.mjs +144 -87
  149. package/dist/{spa-router-BMrSsG5b.d.ts → spa-router-BstQUO6Q.d.ts} +2 -2
  150. package/dist/{spa-router-DnYhWCvI.d.mts → spa-router-DTdbuinx.d.mts} +2 -2
  151. package/dist/testing.cjs +4 -4
  152. package/dist/testing.d.mts +2 -2
  153. package/dist/testing.d.ts +2 -2
  154. package/dist/testing.mjs +3 -3
  155. package/dist/{utils-ABkktwku.d.mts → utils-CS3ZLnEJ.d.mts} +1 -1
  156. package/dist/{utils-C3GguS-Q.d.ts → utils-D3rdsIvM.d.ts} +1 -1
  157. package/dist/version.cjs +2 -2
  158. package/dist/version.mjs +1 -1
  159. package/dist/vite.cjs +13 -12
  160. package/dist/vite.d.mts +2 -2
  161. package/dist/vite.d.ts +2 -2
  162. package/dist/vite.mjs +12 -11
  163. package/package.json +1 -1
  164. package/dist/chunk-BBVSJVBZ.cjs +0 -600
  165. package/dist/chunk-OFEY6KHO.mjs +0 -600
  166. package/dist/{chunk-XP777LRD.mjs → chunk-GDUYXFIS.mjs} +3 -3
  167. package/dist/{chunk-4PNUXIVU.cjs → chunk-YAOX43YI.cjs} +3 -3
@@ -2,7 +2,10 @@ import {
2
2
  getFarmMarkdownMirrorPath,
3
3
  isFarmMarkdownMirrorExposed,
4
4
  matchesFarmMarkdownRoutePattern
5
- } from "./chunk-OFEY6KHO.mjs";
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";
@@ -67,6 +70,7 @@ function collectFarmLlmsTxtPages(sources, options) {
67
70
  continue;
68
71
  }
69
72
  if (exclude.some((pattern) => matchesFarmMarkdownRoutePattern(pattern, path))) continue;
73
+ if (isMetadataNoIndex(source.metadata)) continue;
70
74
  const target = isFarmMarkdownMirrorExposed(options.markdown, path) ? getFarmMarkdownMirrorPath(path) : path;
71
75
  const description = readMetadataString(source.metadata, "description");
72
76
  pages.set(path, {
@@ -79,6 +83,17 @@ function collectFarmLlmsTxtPages(sources, options) {
79
83
  return [...pages.values()].sort((left, right) => left.path.localeCompare(right.path));
80
84
  }
81
85
  __name(collectFarmLlmsTxtPages, "collectFarmLlmsTxtPages");
86
+ function isMetadataNoIndex(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(isMetadataNoIndex, "isMetadataNoIndex");
82
97
  function createFarmDefaultLlmsTxt(options) {
83
98
  const { config, pages } = options;
84
99
  const summary = config.summary ?? readMetadataString(options.rootMetadata, "description");
@@ -146,7 +161,9 @@ function createFarmLlmsMarkdownReader(fetchMarkdown) {
146
161
  return async (url) => {
147
162
  try {
148
163
  const response = await fetchMarkdown(
149
- new Request(url, { headers: { accept: "text/markdown" } })
164
+ new Request(url, {
165
+ headers: { accept: "text/markdown", [FARM_INTERNAL_READ_HEADER]: "llms-full" }
166
+ })
150
167
  );
151
168
  const type = response.headers.get("content-type") ?? "";
152
169
  if (!response.ok || !type.toLowerCase().startsWith("text/markdown")) {
@@ -160,6 +177,8 @@ function createFarmLlmsMarkdownReader(fetchMarkdown) {
160
177
  };
161
178
  }
162
179
  __name(createFarmLlmsMarkdownReader, "createFarmLlmsMarkdownReader");
180
+ var FARM_LLMS_FULL_PAGE_TIMEOUT_MS = 3e4;
181
+ var LLMS_PAGE_TIMED_OUT = /* @__PURE__ */ Symbol("farm.llms.pageTimedOut");
163
182
  async function renderFarmLlmsFullTxt(value, options) {
164
183
  const index = serializeFarmLlmsTxt(value);
165
184
  if (typeof value === "string") return index;
@@ -173,10 +192,25 @@ async function renderFarmLlmsFullTxt(value, options) {
173
192
  links.push(link);
174
193
  }
175
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");
176
210
  const contents = await mapWithConcurrency(
177
211
  links,
178
212
  options.concurrency ?? 4,
179
- (link) => shouldInlineLlmsLink(link.url, options.origin) ? options.readMarkdown(link.url) : null
213
+ (link) => shouldInlineLlmsLink(link.url, options.origin) ? readWithinTimeout(link.url) : null
180
214
  );
181
215
  const blocks = [`# ${toSingleLine(llms.title)}`];
182
216
  if (llms.summary?.trim()) blocks.push(`> ${toSingleLine(llms.summary)}`);
@@ -193,6 +227,44 @@ async function renderFarmLlmsFullTxt(value, options) {
193
227
  `;
194
228
  }
195
229
  __name(renderFarmLlmsFullTxt, "renderFarmLlmsFullTxt");
230
+ function createFarmLlmsFullRenderer(options = {}) {
231
+ const now = options.now ?? Date.now;
232
+ const ttl = (options.revalidate ?? 0) * 1e3;
233
+ const maxEntries = options.maxEntries ?? 16;
234
+ const entries = /* @__PURE__ */ new Map();
235
+ let queue = Promise.resolve();
236
+ const settle = /* @__PURE__ */ __name((body, complete, onSettled) => onSettled ? body.then((value) => (onSettled(complete()), value)) : body, "settle");
237
+ return (origin, render, onSettled) => {
238
+ const entry = entries.get(origin);
239
+ if (entry && entry.expires > now()) return settle(entry.body, entry.complete, onSettled);
240
+ entries.delete(origin);
241
+ let complete = true;
242
+ const body = queue.then(
243
+ () => render({
244
+ incomplete: /* @__PURE__ */ __name(() => {
245
+ complete = false;
246
+ }, "incomplete")
247
+ })
248
+ );
249
+ queue = body.catch(() => {
250
+ });
251
+ const pending = { body, expires: Number.POSITIVE_INFINITY, complete: /* @__PURE__ */ __name(() => complete, "complete") };
252
+ entries.set(origin, pending);
253
+ if (entries.size > maxEntries) entries.delete(entries.keys().next().value);
254
+ body.then(
255
+ () => {
256
+ if (entries.get(origin) !== pending) return;
257
+ if (ttl > 0 && complete) pending.expires = now() + ttl;
258
+ else entries.delete(origin);
259
+ },
260
+ () => {
261
+ if (entries.get(origin) === pending) entries.delete(origin);
262
+ }
263
+ );
264
+ return settle(body, pending.complete, onSettled);
265
+ };
266
+ }
267
+ __name(createFarmLlmsFullRenderer, "createFarmLlmsFullRenderer");
196
268
  function stripFrontmatter(markdown) {
197
269
  const match = /^\uFEFF?---\r?\n[\s\S]*?\r?\n---[ \t]*(?:\r?\n|$)/.exec(markdown);
198
270
  return match ? markdown.slice(match[0].length) : markdown;
@@ -1336,6 +1408,7 @@ export {
1336
1408
  serializeFarmLlmsTxt,
1337
1409
  createFarmLlmsMarkdownReader,
1338
1410
  renderFarmLlmsFullTxt,
1411
+ createFarmLlmsFullRenderer,
1339
1412
  resolveFarmAgentCrawlers,
1340
1413
  createFarmAgentRobots,
1341
1414
  resolveFarmSecurityConfig,
@@ -1,6 +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
- var _chunkBBVSJVBZcjs = require('./chunk-BBVSJVBZ.cjs');
3
+
4
+ var _chunkQIH2HD6Hcjs = require('./chunk-QIH2HD6H.cjs');
4
5
 
5
6
 
6
7
  var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
@@ -115,7 +116,7 @@ async function createFarmMarkdownSourceResponse(options) {
115
116
  }
116
117
  const url = new URL(options.request.url);
117
118
  const hasMarkdownExtension = url.pathname.toLowerCase().endsWith(".md");
118
- if (!hasMarkdownExtension && !_chunkBBVSJVBZcjs.requestAcceptsMarkdown.call(void 0, options.request.headers.get("accept"))) {
119
+ if (!hasMarkdownExtension && !_chunkQIH2HD6Hcjs.requestAcceptsMarkdown.call(void 0, options.request.headers.get("accept"))) {
119
120
  return null;
120
121
  }
121
122
  const targetPathname = normalizeFarmMarkdownRoutePath(url.pathname);
@@ -133,9 +134,13 @@ async function createFarmMarkdownSourceResponse(options) {
133
134
  if (!hasMarkdownExtension) {
134
135
  headers.set("Vary", "Accept");
135
136
  }
136
- return new Response(options.request.method === "HEAD" ? null : source.source, {
137
+ return _chunkQIH2HD6Hcjs.createFarmMarkdownViewResponse.call(void 0, {
138
+ request: options.request,
139
+ requestUrl: url,
140
+ markdown: source.source,
137
141
  status: 200,
138
- headers
142
+ headers,
143
+ markdownPath: headers.get("Content-Location")
139
144
  });
140
145
  }
141
146
  _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmMarkdownSourceResponse, "createFarmMarkdownSourceResponse");