@farm.js/core 0.1.23 → 0.1.25

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 (156) hide show
  1. package/dist/agent-runtime.d.mts +1 -1
  2. package/dist/agent-runtime.d.ts +1 -1
  3. package/dist/api/route-manager.cjs +4 -4
  4. package/dist/api/route-manager.d.mts +1 -1
  5. package/dist/api/route-manager.d.ts +1 -1
  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 +2 -2
  11. package/dist/api.d.ts +2 -2
  12. package/dist/api.mjs +6 -6
  13. package/dist/{app-BV-7wV5q.d.ts → app-BF-ctoxh.d.ts} +3 -3
  14. package/dist/{app-BZDWwwFa.d.mts → app-ZuWrAMc_.d.mts} +3 -3
  15. package/dist/app-markdown.cjs +4 -4
  16. package/dist/app-markdown.d.mts +2 -2
  17. package/dist/app-markdown.d.ts +2 -2
  18. package/dist/app-markdown.mjs +3 -3
  19. package/dist/{chunk-MVUREHPN.mjs → chunk-2BIJGZR3.mjs} +1 -1
  20. package/dist/chunk-2ITKVAIF.cjs +1077 -0
  21. package/dist/{chunk-47H7VENP.mjs → chunk-2KI3CL3N.mjs} +1 -1
  22. package/dist/{chunk-KNPRCKXK.cjs → chunk-3TQWUUNP.cjs} +9 -7
  23. package/dist/{chunk-GZ3ZPTQV.mjs → chunk-52SH7TKB.mjs} +2 -2
  24. package/dist/{chunk-BDJNP7AQ.mjs → chunk-5YYJ6Q2L.mjs} +10 -3
  25. package/dist/{chunk-OYDRPBBV.cjs → chunk-65P6OGYN.cjs} +73 -3
  26. package/dist/{chunk-JIKGGIOL.mjs → chunk-6D242YGO.mjs} +1 -1
  27. package/dist/{chunk-AH7HOAQ3.cjs → chunk-6K4SPQWL.cjs} +9 -4
  28. package/dist/{chunk-LYM7HY34.cjs → chunk-AXYTGLF3.cjs} +4 -4
  29. package/dist/{chunk-2QLBIPFT.cjs → chunk-B6ZCT36X.cjs} +4 -4
  30. package/dist/{chunk-IMBMOEWT.cjs → chunk-BD2U4ZL6.cjs} +8 -8
  31. package/dist/{chunk-2M435BUE.mjs → chunk-CEYUWDWA.mjs} +7 -5
  32. package/dist/{chunk-I5YBCWQ6.cjs → chunk-CFNOGDUS.cjs} +2 -2
  33. package/dist/{chunk-XI3GWPUS.cjs → chunk-CRQPYWLK.cjs} +14 -14
  34. package/dist/{chunk-ISTFC3MZ.cjs → chunk-E3RDL2DA.cjs} +48 -5
  35. package/dist/{chunk-QTBEAKCJ.cjs → chunk-H7CJRJ4L.cjs} +16 -16
  36. package/dist/{chunk-VPY755R2.mjs → chunk-N2Z4ZFDE.mjs} +25 -11
  37. package/dist/{chunk-DNLQMFER.cjs → chunk-O5DVPF3R.cjs} +26 -19
  38. package/dist/{chunk-WNUBR4CA.mjs → chunk-QGG336NI.mjs} +1 -1
  39. package/dist/{chunk-4DKZ6JR3.cjs → chunk-QYMRIVG6.cjs} +184 -130
  40. package/dist/{chunk-III667SJ.cjs → chunk-R7LCG3BT.cjs} +189 -175
  41. package/dist/{chunk-7BC6GAL7.mjs → chunk-RR6UGYUT.mjs} +44 -1
  42. package/dist/{chunk-LQIRVSBY.cjs → chunk-RYDW7GPR.cjs} +13 -13
  43. package/dist/{chunk-PGQBL5DN.mjs → chunk-T2OPSH6S.mjs} +72 -2
  44. package/dist/{chunk-5UX4C5QI.mjs → chunk-TKDY6AJP.mjs} +1 -1
  45. package/dist/{chunk-VXCA7RZP.cjs → chunk-TTVHACQV.cjs} +1 -1
  46. package/dist/{chunk-OFEY6KHO.mjs → chunk-U4MP7XTD.mjs} +504 -27
  47. package/dist/{chunk-YJJLXIIS.cjs → chunk-U74A3P2P.cjs} +7 -7
  48. package/dist/{chunk-72VJRKJD.mjs → chunk-VZWO3XVL.mjs} +2 -2
  49. package/dist/{chunk-7LU4IOXQ.mjs → chunk-WJYCI56T.mjs} +87 -33
  50. package/dist/{chunk-EHUZ2MKO.mjs → chunk-WOI2HOGA.mjs} +1 -1
  51. package/dist/{chunk-N255VYFP.mjs → chunk-XM4ZDVD7.mjs} +8 -3
  52. package/dist/{chunk-YGMK6ESJ.mjs → chunk-XME4TCLB.mjs} +2 -2
  53. package/dist/{client-plugins-B_XzCegf.d.mts → client-plugins-DPG0NeZN.d.mts} +41 -3
  54. package/dist/{client-plugins-CKsXQfXY.d.ts → client-plugins-Fgni-_25.d.ts} +41 -3
  55. package/dist/client-plugins.d.mts +1 -1
  56. package/dist/client-plugins.d.ts +1 -1
  57. package/dist/client.cjs +4 -4
  58. package/dist/client.d.mts +5 -5
  59. package/dist/client.d.ts +5 -5
  60. package/dist/client.mjs +3 -3
  61. package/dist/config.d.mts +1 -1
  62. package/dist/config.d.ts +1 -1
  63. package/dist/{devtools-UHRSZ7VA.cjs → devtools-6OA7FEF6.cjs} +4 -4
  64. package/dist/{devtools-OY4SNU3P.mjs → devtools-I7TBFOKD.mjs} +3 -3
  65. package/dist/docs.cjs +6 -6
  66. package/dist/docs.mjs +5 -5
  67. package/dist/index.cjs +24 -22
  68. package/dist/index.d.mts +13 -13
  69. package/dist/index.d.ts +13 -13
  70. package/dist/index.mjs +23 -21
  71. package/dist/integrations.d.mts +1 -1
  72. package/dist/integrations.d.ts +1 -1
  73. package/dist/internal/app-markdown-runtime.cjs +3 -3
  74. package/dist/internal/app-markdown-runtime.d.mts +1 -1
  75. package/dist/internal/app-markdown-runtime.d.ts +1 -1
  76. package/dist/internal/app-markdown-runtime.mjs +2 -2
  77. package/dist/internal/build-runtime.cjs +16 -16
  78. package/dist/internal/build-runtime.d.mts +3 -3
  79. package/dist/internal/build-runtime.d.ts +3 -3
  80. package/dist/internal/build-runtime.mjs +15 -15
  81. package/dist/internal/cli-runtime.cjs +5 -5
  82. package/dist/internal/cli-runtime.mjs +4 -4
  83. package/dist/internal/client-error-overlay.cjs +4 -4
  84. package/dist/internal/client-error-overlay.mjs +1 -1
  85. package/dist/internal/compression-runtime.d.mts +1 -1
  86. package/dist/internal/compression-runtime.d.ts +1 -1
  87. package/dist/internal/config-runtime.cjs +4 -4
  88. package/dist/internal/config-runtime.d.mts +2 -2
  89. package/dist/internal/config-runtime.d.ts +2 -2
  90. package/dist/internal/config-runtime.mjs +3 -3
  91. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  92. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  93. package/dist/internal/production-runtime.cjs +11 -5
  94. package/dist/internal/production-runtime.d.mts +30 -8
  95. package/dist/internal/production-runtime.d.ts +30 -8
  96. package/dist/internal/production-runtime.mjs +10 -4
  97. package/dist/markdown.cjs +4 -2
  98. package/dist/markdown.d.mts +63 -1
  99. package/dist/markdown.d.ts +63 -1
  100. package/dist/markdown.mjs +3 -1
  101. package/dist/{metadata-IQEblkZp.d.ts → metadata-CDnRHKVq.d.ts} +1 -1
  102. package/dist/{metadata-B08w4EYV.d.mts → metadata-D0EF7esB.d.mts} +1 -1
  103. package/dist/middleware.d.mts +3 -3
  104. package/dist/middleware.d.ts +3 -3
  105. package/dist/navigation.cjs +5 -5
  106. package/dist/navigation.d.mts +4 -4
  107. package/dist/navigation.d.ts +4 -4
  108. package/dist/navigation.mjs +4 -4
  109. package/dist/plugin.cjs +12 -12
  110. package/dist/plugin.d.mts +1 -1
  111. package/dist/plugin.d.ts +1 -1
  112. package/dist/plugin.mjs +11 -11
  113. package/dist/{production-runtime-DRSOkc-d.d.ts → production-runtime-DpCt0opU.d.ts} +1 -1
  114. package/dist/{production-runtime-C3bGFEaM.d.mts → production-runtime-x3W4wVqx.d.mts} +1 -1
  115. package/dist/query/client.cjs +6 -6
  116. package/dist/query/client.mjs +2 -2
  117. package/dist/{render-plan-CCFuMLNS.d.ts → render-plan-D5oFRVBV.d.ts} +1 -1
  118. package/dist/{render-plan-B6CKNl4e.d.mts → render-plan-tazUJalK.d.mts} +1 -1
  119. package/dist/renderer-client.cjs +5 -5
  120. package/dist/renderer-client.d.mts +3 -3
  121. package/dist/renderer-client.d.ts +3 -3
  122. package/dist/renderer-client.mjs +2 -2
  123. package/dist/{request-DgD1XsTx.d.mts → request-CXmQy5ks.d.mts} +1 -1
  124. package/dist/{request-Dn6VURbE.d.ts → request-CzZX0Aew.d.ts} +1 -1
  125. package/dist/request.d.mts +2 -2
  126. package/dist/request.d.ts +2 -2
  127. package/dist/{route-rendering-76A5I_kE.d.mts → route-rendering-B-qpe32B.d.mts} +1 -1
  128. package/dist/{route-rendering-LAmQEdyG.d.ts → route-rendering-Dw3C362T.d.ts} +1 -1
  129. package/dist/{router-BSOOGya2.d.ts → router-CLl3xHwl.d.ts} +1 -1
  130. package/dist/{router-CnrRSa9d.d.mts → router-CafM2jlw.d.mts} +1 -1
  131. package/dist/routes.d.mts +1 -1
  132. package/dist/routes.d.ts +1 -1
  133. package/dist/server-plugins.d.mts +2 -2
  134. package/dist/server-plugins.d.ts +2 -2
  135. package/dist/server.cjs +27 -27
  136. package/dist/server.d.mts +7 -7
  137. package/dist/server.d.ts +7 -7
  138. package/dist/server.mjs +12 -12
  139. package/dist/{spa-router-DnYhWCvI.d.mts → spa-router-6sJfsMlQ.d.mts} +2 -2
  140. package/dist/{spa-router-BMrSsG5b.d.ts → spa-router-DePr2aZ6.d.ts} +2 -2
  141. package/dist/testing.cjs +4 -4
  142. package/dist/testing.d.mts +1 -1
  143. package/dist/testing.d.ts +1 -1
  144. package/dist/testing.mjs +3 -3
  145. package/dist/{utils-C3GguS-Q.d.ts → utils-BBKC3cf3.d.ts} +1 -1
  146. package/dist/{utils-ABkktwku.d.mts → utils-BPHr-1mP.d.mts} +1 -1
  147. package/dist/version.cjs +2 -2
  148. package/dist/version.mjs +1 -1
  149. package/dist/vite.cjs +12 -12
  150. package/dist/vite.d.mts +1 -1
  151. package/dist/vite.d.ts +1 -1
  152. package/dist/vite.mjs +11 -11
  153. package/package.json +1 -1
  154. package/dist/chunk-BBVSJVBZ.cjs +0 -600
  155. package/dist/{chunk-XP777LRD.mjs → chunk-GDUYXFIS.mjs} +3 -3
  156. package/dist/{chunk-4PNUXIVU.cjs → chunk-YAOX43YI.cjs} +3 -3
@@ -2,7 +2,7 @@ import {
2
2
  getFarmMarkdownMirrorPath,
3
3
  isFarmMarkdownMirrorExposed,
4
4
  matchesFarmMarkdownRoutePattern
5
- } from "./chunk-OFEY6KHO.mjs";
5
+ } from "./chunk-U4MP7XTD.mjs";
6
6
  import {
7
7
  applyFarmBasePath
8
8
  } from "./chunk-4RB44K6Z.mjs";
@@ -67,6 +67,7 @@ function collectFarmLlmsTxtPages(sources, options) {
67
67
  continue;
68
68
  }
69
69
  if (exclude.some((pattern) => matchesFarmMarkdownRoutePattern(pattern, path))) continue;
70
+ if (isMetadataNoIndex(source.metadata)) continue;
70
71
  const target = isFarmMarkdownMirrorExposed(options.markdown, path) ? getFarmMarkdownMirrorPath(path) : path;
71
72
  const description = readMetadataString(source.metadata, "description");
72
73
  pages.set(path, {
@@ -79,6 +80,17 @@ function collectFarmLlmsTxtPages(sources, options) {
79
80
  return [...pages.values()].sort((left, right) => left.path.localeCompare(right.path));
80
81
  }
81
82
  __name(collectFarmLlmsTxtPages, "collectFarmLlmsTxtPages");
83
+ function isMetadataNoIndex(metadata) {
84
+ if (!metadata || typeof metadata !== "object") return false;
85
+ const robots = metadata.robots;
86
+ if (typeof robots === "string") {
87
+ return robots.split(",").map((directive) => directive.trim().toLowerCase()).some((directive) => directive === "noindex" || directive === "none");
88
+ }
89
+ return Boolean(
90
+ robots && typeof robots === "object" && robots.index === false
91
+ );
92
+ }
93
+ __name(isMetadataNoIndex, "isMetadataNoIndex");
82
94
  function createFarmDefaultLlmsTxt(options) {
83
95
  const { config, pages } = options;
84
96
  const summary = config.summary ?? readMetadataString(options.rootMetadata, "description");
@@ -193,6 +205,36 @@ async function renderFarmLlmsFullTxt(value, options) {
193
205
  `;
194
206
  }
195
207
  __name(renderFarmLlmsFullTxt, "renderFarmLlmsFullTxt");
208
+ function createFarmLlmsFullRenderer(options = {}) {
209
+ const now = options.now ?? Date.now;
210
+ const ttl = (options.revalidate ?? 0) * 1e3;
211
+ const maxEntries = options.maxEntries ?? 16;
212
+ const entries = /* @__PURE__ */ new Map();
213
+ let queue = Promise.resolve();
214
+ return (origin, render) => {
215
+ const entry = entries.get(origin);
216
+ if (entry && entry.expires > now()) return entry.body;
217
+ entries.delete(origin);
218
+ const body = queue.then(render);
219
+ queue = body.catch(() => {
220
+ });
221
+ const pending = { body, expires: Number.POSITIVE_INFINITY };
222
+ entries.set(origin, pending);
223
+ if (entries.size > maxEntries) entries.delete(entries.keys().next().value);
224
+ body.then(
225
+ () => {
226
+ if (entries.get(origin) !== pending) return;
227
+ if (ttl > 0) pending.expires = now() + ttl;
228
+ else entries.delete(origin);
229
+ },
230
+ () => {
231
+ if (entries.get(origin) === pending) entries.delete(origin);
232
+ }
233
+ );
234
+ return body;
235
+ };
236
+ }
237
+ __name(createFarmLlmsFullRenderer, "createFarmLlmsFullRenderer");
196
238
  function stripFrontmatter(markdown) {
197
239
  const match = /^\uFEFF?---\r?\n[\s\S]*?\r?\n---[ \t]*(?:\r?\n|$)/.exec(markdown);
198
240
  return match ? markdown.slice(match[0].length) : markdown;
@@ -1336,6 +1378,7 @@ export {
1336
1378
  serializeFarmLlmsTxt,
1337
1379
  createFarmLlmsMarkdownReader,
1338
1380
  renderFarmLlmsFullTxt,
1381
+ createFarmLlmsFullRenderer,
1339
1382
  resolveFarmAgentCrawlers,
1340
1383
  createFarmAgentRobots,
1341
1384
  resolveFarmSecurityConfig,
@@ -3,14 +3,14 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkLYM7HY34cjs = require('./chunk-LYM7HY34.cjs');
6
+ var _chunkAXYTGLF3cjs = require('./chunk-AXYTGLF3.cjs');
7
7
 
8
8
 
9
9
 
10
10
  var _chunkIK6LVLKCcjs = require('./chunk-IK6LVLKC.cjs');
11
11
 
12
12
 
13
- var _chunkDNLQMFERcjs = require('./chunk-DNLQMFER.cjs');
13
+ var _chunkO5DVPF3Rcjs = require('./chunk-O5DVPF3R.cjs');
14
14
 
15
15
 
16
16
  var _chunk75WGQVQAcjs = require('./chunk-75WGQVQA.cjs');
@@ -39,7 +39,7 @@ function createFarmDocsAdapterRuntimeConfig(docs, options, moduleConfig) {
39
39
  ...moduleConfig ? { ...moduleConfig, ...docs.configOverrides } : _nullishCoalesce(docs.runtimeConfig, () => ( docs.config)),
40
40
  entry: docs.config.entry || docs.entry.replace(/^\/+|\/+$/g, "") || "docs",
41
41
  docsPath: docs.entry,
42
- contentDir: _chunkLYM7HY34cjs.resolveFarmDocsContentDir.call(void 0, docs, options)
42
+ contentDir: _chunkAXYTGLF3cjs.resolveFarmDocsContentDir.call(void 0, docs, options)
43
43
  };
44
44
  }
45
45
  _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDocsAdapterRuntimeConfig, "createFarmDocsAdapterRuntimeConfig");
@@ -274,25 +274,25 @@ function getDocsDescription(docs) {
274
274
  }
275
275
  _chunkS3JO3N4Hcjs.__name.call(void 0, getDocsDescription, "getDocsDescription");
276
276
  function getLoadedDocsPages(context) {
277
- return _chunkLYM7HY34cjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs).map((page) => _chunkLYM7HY34cjs.loadFarmDocsPage.call(void 0, context.contentDir, context.docs, page.slug)).filter((page) => Boolean(page));
277
+ return _chunkAXYTGLF3cjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs).map((page) => _chunkAXYTGLF3cjs.loadFarmDocsPage.call(void 0, context.contentDir, context.docs, page.slug)).filter((page) => Boolean(page));
278
278
  }
279
279
  _chunkS3JO3N4Hcjs.__name.call(void 0, getLoadedDocsPages, "getLoadedDocsPages");
280
280
  function toDocsSourcePage(page) {
281
281
  return {
282
- ..._chunkLYM7HY34cjs.toFarmDocsMarkdownPage.call(void 0, page),
282
+ ..._chunkAXYTGLF3cjs.toFarmDocsMarkdownPage.call(void 0, page),
283
283
  sourcePath: page.sourcePath
284
284
  };
285
285
  }
286
286
  _chunkS3JO3N4Hcjs.__name.call(void 0, toDocsSourcePage, "toDocsSourcePage");
287
287
  function toDocsSitemapPage(page) {
288
288
  return {
289
- ..._chunkLYM7HY34cjs.toFarmDocsMarkdownPage.call(void 0, page),
289
+ ..._chunkAXYTGLF3cjs.toFarmDocsMarkdownPage.call(void 0, page),
290
290
  sourcePath: page.sourcePath
291
291
  };
292
292
  }
293
293
  _chunkS3JO3N4Hcjs.__name.call(void 0, toDocsSitemapPage, "toDocsSitemapPage");
294
294
  function toDocsLlmsPage(page) {
295
- return _chunkLYM7HY34cjs.toFarmDocsMarkdownPage.call(void 0, page);
295
+ return _chunkAXYTGLF3cjs.toFarmDocsMarkdownPage.call(void 0, page);
296
296
  }
297
297
  _chunkS3JO3N4Hcjs.__name.call(void 0, toDocsLlmsPage, "toDocsLlmsPage");
298
298
  function getDocsLlmsOptions(context, request) {
@@ -386,7 +386,7 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, renderAgentsDocument, "renderAgentsDocumen
386
386
  function buildAgentSpec(context, request) {
387
387
  const url = new URL(request.url);
388
388
  const origin = url.origin;
389
- const pages = _chunkLYM7HY34cjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs);
389
+ const pages = _chunkAXYTGLF3cjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs);
390
390
  const spec = _chunkIK6LVLKCcjs.docsEngine.call(void 0, ).buildDocsAgentDiscoverySpec(getDocsDiscoveryOptions(context, request));
391
391
  const title = getDocsTitle(context.docs);
392
392
  return {
@@ -428,7 +428,7 @@ function buildAgentSpec(context, request) {
428
428
  }
429
429
  _chunkS3JO3N4Hcjs.__name.call(void 0, buildAgentSpec, "buildAgentSpec");
430
430
  function buildDiagnostics(context) {
431
- const pages = _chunkLYM7HY34cjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs);
431
+ const pages = _chunkAXYTGLF3cjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs);
432
432
  const diagnostics = _chunkIK6LVLKCcjs.docsEngine.call(void 0, ).buildDocsDiagnostics(context.docs.config, {
433
433
  entry: context.docs.entry,
434
434
  mcp: {
@@ -500,12 +500,12 @@ async function resolveAPIContext(options) {
500
500
  config: options.config,
501
501
  configPath: options.configPath
502
502
  }));
503
- const docs = isResolvedDocsConfig(docsInput) ? docsInput : await _chunkDNLQMFERcjs.resolveDocsConfig.call(void 0, docsInput, { root, srcDir });
503
+ const docs = isResolvedDocsConfig(docsInput) ? docsInput : await _chunkO5DVPF3Rcjs.resolveDocsConfig.call(void 0, docsInput, { root, srcDir });
504
504
  return {
505
505
  root,
506
506
  srcDir,
507
507
  docs,
508
- contentDir: _chunkLYM7HY34cjs.resolveFarmDocsContentDir.call(void 0, docs, { root, srcDir })
508
+ contentDir: _chunkAXYTGLF3cjs.resolveFarmDocsContentDir.call(void 0, docs, { root, srcDir })
509
509
  };
510
510
  }
511
511
  _chunkS3JO3N4Hcjs.__name.call(void 0, resolveAPIContext, "resolveAPIContext");
@@ -568,10 +568,10 @@ async function handleDocsAPIGet(request, context) {
568
568
  if (format === "markdown" || url.pathname.endsWith(".md")) {
569
569
  const pathParam = url.searchParams.get("path") || url.searchParams.get("slug");
570
570
  const slug = normalizeDocsApiSlug(_nullishCoalesce(_nullishCoalesce(pathParam, () => ( pathTarget.slug)), () => ( "")), context.docs);
571
- const page = _chunkLYM7HY34cjs.loadFarmDocsPage.call(void 0, context.contentDir, context.docs, slug);
571
+ const page = _chunkAXYTGLF3cjs.loadFarmDocsPage.call(void 0, context.contentDir, context.docs, slug);
572
572
  if (!page) return text("Docs page not found\n", "text/plain; charset=utf-8", { status: 404 });
573
573
  return text(
574
- _chunkIK6LVLKCcjs.docsEngine.call(void 0, ).renderDocsMarkdownDocument(_chunkLYM7HY34cjs.toFarmDocsMarkdownPage.call(void 0, page), {
574
+ _chunkIK6LVLKCcjs.docsEngine.call(void 0, ).renderDocsMarkdownDocument(_chunkAXYTGLF3cjs.toFarmDocsMarkdownPage.call(void 0, page), {
575
575
  origin: new URL(request.url).origin,
576
576
  llms: getDocsLlmsOptions(context, request),
577
577
  sitemap: context.docs.config.sitemap
@@ -3,16 +3,23 @@ import {
3
3
  } from "./chunk-XAXTTBUT.mjs";
4
4
  import {
5
5
  serializeFarmLlmsTxt
6
- } from "./chunk-7BC6GAL7.mjs";
6
+ } from "./chunk-RR6UGYUT.mjs";
7
7
  import {
8
8
  resolveFarmThemeConfig
9
9
  } from "./chunk-AELACLOB.mjs";
10
+ import {
11
+ resolveFarmAPIServerBasePath,
12
+ resolveFarmAPIServerRoutePath
13
+ } from "./chunk-I6XDAKWQ.mjs";
10
14
  import {
11
15
  omitFarmResponseBody
12
16
  } from "./chunk-5WI2S4CO.mjs";
13
17
  import {
14
18
  localizeFarmPathname
15
19
  } from "./chunk-L3KT7IXV.mjs";
20
+ import {
21
+ applyFarmBasePath
22
+ } from "./chunk-4RB44K6Z.mjs";
16
23
  import {
17
24
  __name
18
25
  } from "./chunk-LPEX4YW6.mjs";
@@ -440,6 +447,66 @@ function serializeInlineValue(value) {
440
447
  }
441
448
  __name(serializeInlineValue, "serializeInlineValue");
442
449
 
450
+ // src/api-catalog.ts
451
+ var FARM_API_CATALOG_PATH = "/.well-known/api-catalog";
452
+ var API_CATALOG_CONTENT_TYPE = 'application/linkset+json; profile="https://www.rfc-editor.org/info/rfc9727"';
453
+ function resolveFarmApiCatalogInput(config) {
454
+ const mcp = config.mcp && config.mcp.enabled !== false ? config.mcp : void 0;
455
+ return {
456
+ basePath: config.basePath,
457
+ apiBaseURL: config.openapi?.servers?.[0]?.url ?? config.api.baseURL,
458
+ openapi: config.openapi?.enabled ? { specRoute: config.openapi.specRoute, route: config.openapi.route } : void 0,
459
+ mcpPath: mcp ? resolveFarmAPIServerRoutePath(
460
+ mcp.path ?? "/api/mcp",
461
+ resolveFarmAPIServerBasePath(config.api)
462
+ ) : void 0
463
+ };
464
+ }
465
+ __name(resolveFarmApiCatalogInput, "resolveFarmApiCatalogInput");
466
+ function createFarmApiCatalog(input) {
467
+ const appPath = /* @__PURE__ */ __name((path) => applyFarmBasePath(path, input.basePath), "appPath");
468
+ const items = [];
469
+ const contexts = [];
470
+ const specRoute = input.openapi?.specRoute;
471
+ const reference = input.openapi?.route;
472
+ if (specRoute || reference) {
473
+ const api = { anchor: input.apiBaseURL };
474
+ if (specRoute) {
475
+ api["service-desc"] = [
476
+ { href: appPath(specRoute), type: "application/vnd.oai.openapi+json" }
477
+ ];
478
+ }
479
+ if (reference) api["service-doc"] = [{ href: appPath(reference), type: "text/html" }];
480
+ items.push({ href: input.apiBaseURL });
481
+ contexts.push(api);
482
+ }
483
+ if (input.mcpPath) items.push({ href: input.mcpPath });
484
+ return {
485
+ linkset: [{ anchor: appPath(FARM_API_CATALOG_PATH), item: items }, ...contexts]
486
+ };
487
+ }
488
+ __name(createFarmApiCatalog, "createFarmApiCatalog");
489
+ function createFarmApiCatalogResponse(method, input) {
490
+ const upperMethod = method.toUpperCase();
491
+ if (upperMethod !== "GET" && upperMethod !== "HEAD") {
492
+ return new Response("Method Not Allowed", {
493
+ status: 405,
494
+ headers: { Allow: "GET, HEAD", "Content-Type": "text/plain; charset=utf-8" }
495
+ });
496
+ }
497
+ const catalog = createFarmApiCatalog(input);
498
+ return new Response(upperMethod === "HEAD" ? null : JSON.stringify(catalog), {
499
+ status: 200,
500
+ headers: {
501
+ "Content-Type": API_CATALOG_CONTENT_TYPE,
502
+ "Cache-Control": "public, max-age=0, must-revalidate",
503
+ Link: `<${catalog.linkset[0].anchor}>; rel="api-catalog"`,
504
+ "X-Content-Type-Options": "nosniff"
505
+ }
506
+ });
507
+ }
508
+ __name(createFarmApiCatalogResponse, "createFarmApiCatalogResponse");
509
+
443
510
  export {
444
511
  renderFarmLocaleAlternateLinks,
445
512
  createLateRedirectRecovery,
@@ -449,5 +516,8 @@ export {
449
516
  getDefaultErrorStatusText,
450
517
  createDefaultErrorMarkup,
451
518
  createFarmThemeDocumentParts,
452
- applyFarmThemeDocument
519
+ applyFarmThemeDocument,
520
+ FARM_API_CATALOG_PATH,
521
+ resolveFarmApiCatalogInput,
522
+ createFarmApiCatalogResponse
453
523
  };
@@ -7,7 +7,7 @@ import {
7
7
  notifyHistoryChange,
8
8
  readPageState,
9
9
  subscribeHistoryChange
10
- } from "./chunk-JIKGGIOL.mjs";
10
+ } from "./chunk-6D242YGO.mjs";
11
11
  import {
12
12
  getFarmI18nClientState
13
13
  } from "./chunk-TOVMYGYW.mjs";
@@ -1,5 +1,5 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});// package.json
2
- var version = "0.1.23";
2
+ var version = "0.1.25";
3
3
 
4
4
  // src/version.ts
5
5
  var FARM_VERSION = version;