@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
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-TVGP4BBZ.mjs";
16
16
  import {
17
17
  farmAcceptQuality
18
- } from "./chunk-OFEY6KHO.mjs";
18
+ } from "./chunk-U4MP7XTD.mjs";
19
19
  import {
20
20
  matchesFarmIfNoneMatch
21
21
  } from "./chunk-XF7Q24PF.mjs";
@@ -19,16 +19,18 @@ async function resolveFarmNotFoundMetadata(layoutModules, notFoundModule) {
19
19
  }
20
20
  }
21
21
  let own = {};
22
+ let latestTitle;
22
23
  if (notFoundModule) {
23
24
  own = mergeMetadata(own, notFoundModule.metadata);
25
+ latestTitle = _optionalChain([notFoundModule, 'access', _ => _.metadata, 'optionalAccess', _2 => _2.title]);
24
26
  if (typeof notFoundModule.generateMetadata === "function") {
25
- own = mergeMetadata(
26
- own,
27
- await notFoundModule.generateMetadata({ params: {}, searchParams: {} })
28
- );
27
+ const generated = await notFoundModule.generateMetadata({ params: {}, searchParams: {} });
28
+ own = mergeMetadata(own, generated);
29
+ if (_optionalChain([generated, 'optionalAccess', _3 => _3.title]) !== void 0) latestTitle = generated.title;
29
30
  }
30
31
  }
31
- return mergeMetadata(metadata, { ...own, title: _nullishCoalesce(own.title, () => ( FARM_NOT_FOUND_TITLE)) });
32
+ const title = isRecord(latestTitle) && normalizeContent(latestTitle.absolute) ? latestTitle : own.title;
33
+ return mergeMetadata(metadata, { ...own, title: _nullishCoalesce(title, () => ( FARM_NOT_FOUND_TITLE)) });
32
34
  }
33
35
  _chunkS3JO3N4Hcjs.__name.call(void 0, resolveFarmNotFoundMetadata, "resolveFarmNotFoundMetadata");
34
36
  function mergeMetadata(base, next) {
@@ -135,8 +137,8 @@ function renderMetadataHead(metadata, options = {}) {
135
137
  appendMetaName(tags, "author", resolvedMetadata.author);
136
138
  if (Array.isArray(resolvedMetadata.authors)) {
137
139
  for (const author of resolvedMetadata.authors) {
138
- appendMetaName(tags, "author", _optionalChain([author, 'optionalAccess', _ => _.name]));
139
- if (_optionalChain([author, 'optionalAccess', _2 => _2.url])) {
140
+ appendMetaName(tags, "author", _optionalChain([author, 'optionalAccess', _4 => _4.name]));
141
+ if (_optionalChain([author, 'optionalAccess', _5 => _5.url])) {
140
142
  appendLink(tags, "author", resolveMetadataUrl(author.url, metadataBase));
141
143
  }
142
144
  }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  useRouter
3
- } from "./chunk-5UX4C5QI.mjs";
3
+ } from "./chunk-TKDY6AJP.mjs";
4
4
  import {
5
5
  getRouter
6
- } from "./chunk-JIKGGIOL.mjs";
6
+ } from "./chunk-6D242YGO.mjs";
7
7
  import {
8
8
  applyFarmBasePath
9
9
  } from "./chunk-4RB44K6Z.mjs";
@@ -28,7 +28,7 @@ import {
28
28
  resolveFarmNoindexPreviews,
29
29
  resolveFarmPerformanceConfig,
30
30
  resolveFarmSecurityConfig
31
- } from "./chunk-7BC6GAL7.mjs";
31
+ } from "./chunk-RR6UGYUT.mjs";
32
32
  import {
33
33
  resolveFarmImageConfig
34
34
  } from "./chunk-G2KY33I6.mjs";
@@ -47,7 +47,7 @@ import {
47
47
  } from "./chunk-FA2W42OV.mjs";
48
48
  import {
49
49
  resolveMarkdownConfig
50
- } from "./chunk-OFEY6KHO.mjs";
50
+ } from "./chunk-U4MP7XTD.mjs";
51
51
  import {
52
52
  bundleNodeModule
53
53
  } from "./chunk-SFGWNC43.mjs";
@@ -135,10 +135,17 @@ function resolveFarmAgentConfig(input) {
135
135
  jsonLd: !jsonLd ? false : jsonLd === true ? {} : jsonLd,
136
136
  noindexPreviews: resolveFarmNoindexPreviews(input?.noindexPreviews),
137
137
  llmsTxt: resolveFarmLlmsTxtConfig(input?.llmsTxt),
138
- crawlers: resolveFarmAgentCrawlers(input?.crawlers)
138
+ crawlers: resolveFarmAgentCrawlers(input?.crawlers),
139
+ apiCatalog: resolveFarmApiCatalogEnabled(input?.apiCatalog)
139
140
  };
140
141
  }
141
142
  __name(resolveFarmAgentConfig, "resolveFarmAgentConfig");
143
+ function resolveFarmApiCatalogEnabled(input) {
144
+ if (input === void 0) return false;
145
+ if (typeof input !== "boolean") throw new TypeError("agent.apiCatalog must be a boolean.");
146
+ return input;
147
+ }
148
+ __name(resolveFarmApiCatalogEnabled, "resolveFarmApiCatalogEnabled");
142
149
 
143
150
  // src/docs/framework-detect.ts
144
151
  import { readFile } from "fs/promises";
@@ -3,18 +3,25 @@
3
3
  var _chunkOWOUTKIJcjs = require('./chunk-OWOUTKIJ.cjs');
4
4
 
5
5
 
6
- var _chunkISTFC3MZcjs = require('./chunk-ISTFC3MZ.cjs');
6
+ var _chunkE3RDL2DAcjs = require('./chunk-E3RDL2DA.cjs');
7
7
 
8
8
 
9
9
  var _chunkOI6CMLWXcjs = require('./chunk-OI6CMLWX.cjs');
10
10
 
11
11
 
12
+
13
+ var _chunkWPYFSQKKcjs = require('./chunk-WPYFSQKK.cjs');
14
+
15
+
12
16
  var _chunkTKJZFIMLcjs = require('./chunk-TKJZFIML.cjs');
13
17
 
14
18
 
15
19
  var _chunkBIDYX3SLcjs = require('./chunk-BIDYX3SL.cjs');
16
20
 
17
21
 
22
+ var _chunkI57LW5VZcjs = require('./chunk-I57LW5VZ.cjs');
23
+
24
+
18
25
  var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
19
26
 
20
27
  // src/i18n/alternates.ts
@@ -197,7 +204,7 @@ function createFarmMetadataRouteResponse(kind, value, routeModule = {}, options
197
204
  if (isResponse(value)) {
198
205
  return method === "HEAD" ? _chunkTKJZFIMLcjs.omitFarmResponseBody.call(void 0, value) : value;
199
206
  }
200
- const body = kind === "sitemap" ? serializeSitemap(value) : kind === "robots" ? serializeRobots(value) : kind === "llms" || kind === "llms-full" ? _chunkISTFC3MZcjs.serializeFarmLlmsTxt.call(void 0, value) : serializeManifest(value);
207
+ const body = kind === "sitemap" ? serializeSitemap(value) : kind === "robots" ? serializeRobots(value) : kind === "llms" || kind === "llms-full" ? _chunkE3RDL2DAcjs.serializeFarmLlmsTxt.call(void 0, value) : serializeManifest(value);
201
208
  const contentType = kind === "sitemap" ? "application/xml; charset=utf-8" : kind === "robots" || kind === "llms" || kind === "llms-full" ? "text/plain; charset=utf-8" : "application/manifest+json; charset=utf-8";
202
209
  return new Response(method === "HEAD" ? null : body, {
203
210
  headers: {
@@ -440,6 +447,69 @@ function serializeInlineValue(value) {
440
447
  }
441
448
  _chunkS3JO3N4Hcjs.__name.call(void 0, 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: _nullishCoalesce(_optionalChain([config, 'access', _5 => _5.openapi, 'optionalAccess', _6 => _6.servers, 'optionalAccess', _7 => _7[0], 'optionalAccess', _8 => _8.url]), () => ( config.api.baseURL)),
458
+ openapi: _optionalChain([config, 'access', _9 => _9.openapi, 'optionalAccess', _10 => _10.enabled]) ? { specRoute: config.openapi.specRoute, route: config.openapi.route } : void 0,
459
+ mcpPath: mcp ? _chunkWPYFSQKKcjs.resolveFarmAPIServerRoutePath.call(void 0,
460
+ _nullishCoalesce(mcp.path, () => ( "/api/mcp")),
461
+ _chunkWPYFSQKKcjs.resolveFarmAPIServerBasePath.call(void 0, config.api)
462
+ ) : void 0
463
+ };
464
+ }
465
+ _chunkS3JO3N4Hcjs.__name.call(void 0, resolveFarmApiCatalogInput, "resolveFarmApiCatalogInput");
466
+ function createFarmApiCatalog(input) {
467
+ const appPath = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (path) => _chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, path, input.basePath), "appPath");
468
+ const items = [];
469
+ const contexts = [];
470
+ const specRoute = _optionalChain([input, 'access', _11 => _11.openapi, 'optionalAccess', _12 => _12.specRoute]);
471
+ const reference = _optionalChain([input, 'access', _13 => _13.openapi, 'optionalAccess', _14 => _14.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
+ _chunkS3JO3N4Hcjs.__name.call(void 0, 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
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmApiCatalogResponse, "createFarmApiCatalogResponse");
509
+
510
+
511
+
512
+
443
513
 
444
514
 
445
515
 
@@ -450,4 +520,4 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, serializeInlineValue, "serializeInlineValu
450
520
 
451
521
 
452
522
 
453
- exports.renderFarmLocaleAlternateLinks = renderFarmLocaleAlternateLinks; exports.createLateRedirectRecovery = createLateRedirectRecovery; exports.createLateNotFoundRecovery = createLateNotFoundRecovery; exports.createFarmMetadataRouteResponse = createFarmMetadataRouteResponse; exports.resolveDefaultErrorStatus = resolveDefaultErrorStatus; exports.getDefaultErrorStatusText = getDefaultErrorStatusText; exports.createDefaultErrorMarkup = createDefaultErrorMarkup; exports.createFarmThemeDocumentParts = createFarmThemeDocumentParts; exports.applyFarmThemeDocument = applyFarmThemeDocument;
523
+ exports.renderFarmLocaleAlternateLinks = renderFarmLocaleAlternateLinks; exports.createLateRedirectRecovery = createLateRedirectRecovery; exports.createLateNotFoundRecovery = createLateNotFoundRecovery; exports.createFarmMetadataRouteResponse = createFarmMetadataRouteResponse; exports.resolveDefaultErrorStatus = resolveDefaultErrorStatus; exports.getDefaultErrorStatusText = getDefaultErrorStatusText; exports.createDefaultErrorMarkup = createDefaultErrorMarkup; exports.createFarmThemeDocumentParts = createFarmThemeDocumentParts; exports.applyFarmThemeDocument = applyFarmThemeDocument; exports.FARM_API_CATALOG_PATH = FARM_API_CATALOG_PATH; exports.resolveFarmApiCatalogInput = resolveFarmApiCatalogInput; exports.createFarmApiCatalogResponse = createFarmApiCatalogResponse;
@@ -16,7 +16,7 @@ import {
16
16
  FARM_METADATA_ATTRIBUTE,
17
17
  renderMetadataHead,
18
18
  resolveMetadataTitle
19
- } from "./chunk-2M435BUE.mjs";
19
+ } from "./chunk-CEYUWDWA.mjs";
20
20
  import {
21
21
  createFarmDeploymentMismatchError,
22
22
  createFarmDeploymentRequestHeaders,
@@ -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 _chunk2ITKVAIFcjs = require('./chunk-2ITKVAIF.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 && !_chunk2ITKVAIFcjs.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 _chunk2ITKVAIFcjs.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");
@@ -15,7 +15,7 @@ var _chunkIK6LVLKCcjs = require('./chunk-IK6LVLKC.cjs');
15
15
  var _chunkHREOKQWTcjs = require('./chunk-HREOKQWT.cjs');
16
16
 
17
17
 
18
- var _chunkBBVSJVBZcjs = require('./chunk-BBVSJVBZ.cjs');
18
+ var _chunk2ITKVAIFcjs = require('./chunk-2ITKVAIF.cjs');
19
19
 
20
20
 
21
21
  var _chunkEM6SBQKMcjs = require('./chunk-EM6SBQKM.cjs');
@@ -1181,11 +1181,11 @@ function shouldReturnMarkdown(request) {
1181
1181
  if (url.pathname.endsWith(".md")) return true;
1182
1182
  const accept = request.headers.get("accept");
1183
1183
  const markdown = Math.max(
1184
- _chunkBBVSJVBZcjs.farmAcceptQuality.call(void 0, accept, "text/markdown"),
1185
- _chunkBBVSJVBZcjs.farmAcceptQuality.call(void 0, accept, "text/plain")
1184
+ _chunk2ITKVAIFcjs.farmAcceptQuality.call(void 0, accept, "text/markdown"),
1185
+ _chunk2ITKVAIFcjs.farmAcceptQuality.call(void 0, accept, "text/plain")
1186
1186
  );
1187
1187
  if (markdown <= 0) return false;
1188
- return markdown >= _chunkBBVSJVBZcjs.farmAcceptQuality.call(void 0, accept, "text/html", { wildcards: true });
1188
+ return markdown >= _chunk2ITKVAIFcjs.farmAcceptQuality.call(void 0, accept, "text/html", { wildcards: true });
1189
1189
  }
1190
1190
  _chunkS3JO3N4Hcjs.__name.call(void 0, shouldReturnMarkdown, "shouldReturnMarkdown");
1191
1191
  function escapeAttribute(value) {
@@ -16,7 +16,7 @@ var _chunkJ7FSKED3cjs = require('./chunk-J7FSKED3.cjs');
16
16
 
17
17
 
18
18
 
19
- var _chunkKNPRCKXKcjs = require('./chunk-KNPRCKXK.cjs');
19
+ var _chunk3TQWUUNPcjs = require('./chunk-3TQWUUNP.cjs');
20
20
 
21
21
 
22
22
 
@@ -30,7 +30,7 @@ var _chunkQBK2AA4Ucjs = require('./chunk-QBK2AA4U.cjs');
30
30
  var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
31
31
 
32
32
  // src/client/metadata-reconciler.ts
33
- var MANAGED_ATTRIBUTE = _chunkKNPRCKXKcjs.FARM_METADATA_ATTRIBUTE;
33
+ var MANAGED_ATTRIBUTE = _chunk3TQWUUNPcjs.FARM_METADATA_ATTRIBUTE;
34
34
  var OWNED_SELECTORS = [
35
35
  'meta[name="description"]',
36
36
  'meta[name="keywords"]',
@@ -65,8 +65,8 @@ function removeAll(selector) {
65
65
  }
66
66
  _chunkS3JO3N4Hcjs.__name.call(void 0, removeAll, "removeAll");
67
67
  function applyFarmMetadataToDocument(metadata, pathname) {
68
- document.title = _chunkKNPRCKXKcjs.resolveMetadataTitle.call(void 0, _optionalChain([metadata, 'optionalAccess', _ => _.title])) || "Farm.js App";
69
- const rendered = _chunkKNPRCKXKcjs.renderMetadataHead.call(void 0, metadata, { pathname });
68
+ document.title = _chunk3TQWUUNPcjs.resolveMetadataTitle.call(void 0, _optionalChain([metadata, 'optionalAccess', _ => _.title])) || "Farm.js App";
69
+ const rendered = _chunk3TQWUUNPcjs.renderMetadataHead.call(void 0, metadata, { pathname });
70
70
  const template = document.createElement("template");
71
71
  template.innerHTML = rendered.tags;
72
72
  removeAll(OWNED_SELECTORS);
@@ -17,7 +17,7 @@ var _chunkLYLEZIG3cjs = require('./chunk-LYLEZIG3.cjs');
17
17
 
18
18
 
19
19
 
20
- var _chunk4PNUXIVUcjs = require('./chunk-4PNUXIVU.cjs');
20
+ var _chunkYAOX43YIcjs = require('./chunk-YAOX43YI.cjs');
21
21
 
22
22
 
23
23
  var _chunkWMAPPDMMcjs = require('./chunk-WMAPPDMM.cjs');
@@ -93,7 +93,7 @@ var _APIRouteManager = class _APIRouteManager {
93
93
  await this.loadProgrammaticApiRoutes(appDir);
94
94
  }
95
95
  this.routes = new Map(
96
- _chunk4PNUXIVUcjs.mergePluginAPIRoutes.call(void 0, [...this.routes.values()], this.plugins, void 0, {
96
+ _chunkYAOX43YIcjs.mergePluginAPIRoutes.call(void 0, [...this.routes.values()], this.plugins, void 0, {
97
97
  bodySizeLimit: this.bodySizeLimit
98
98
  }).map((route) => [route.path, route])
99
99
  );
@@ -140,7 +140,7 @@ var _APIRouteManager = class _APIRouteManager {
140
140
  const routeModule = await this.loadModule(filePath);
141
141
  const endpoints = {};
142
142
  const availableMethods = [];
143
- for (const method of _chunk4PNUXIVUcjs.API_ROUTE_METHODS) {
143
+ for (const method of _chunkYAOX43YIcjs.API_ROUTE_METHODS) {
144
144
  if (routeModule[method]) {
145
145
  endpoints[method] = routeModule[method];
146
146
  availableMethods.push(method);
@@ -322,7 +322,7 @@ var _APIRouteManager = class _APIRouteManager {
322
322
  const url = new URL(request.url);
323
323
  const pathname = url.pathname;
324
324
  const method = request.method.toUpperCase();
325
- const match = _chunk4PNUXIVUcjs.matchAPIRouteAtBasePath.call(void 0, this.routes, pathname, this.basePath);
325
+ const match = _chunkYAOX43YIcjs.matchAPIRouteAtBasePath.call(void 0, this.routes, pathname, this.basePath);
326
326
  if (!match) {
327
327
  return new Response(JSON.stringify({ error: "Not Found" }), {
328
328
  status: 404,
@@ -330,19 +330,19 @@ var _APIRouteManager = class _APIRouteManager {
330
330
  });
331
331
  }
332
332
  const { route, params } = match;
333
- const endpoint = _chunk4PNUXIVUcjs.resolveAPIRouteEndpoint.call(void 0, route, method);
333
+ const endpoint = _chunkYAOX43YIcjs.resolveAPIRouteEndpoint.call(void 0, route, method);
334
334
  if (!endpoint) {
335
335
  return new Response(JSON.stringify({ error: "Method Not Allowed" }), {
336
336
  status: 405,
337
337
  headers: {
338
- Allow: _chunk4PNUXIVUcjs.getAllowedAPIRouteMethods.call(void 0, route).join(", "),
338
+ Allow: _chunkYAOX43YIcjs.getAllowedAPIRouteMethods.call(void 0, route).join(", "),
339
339
  "Content-Type": "application/json"
340
340
  }
341
341
  });
342
342
  }
343
343
  const invoke = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, async () => {
344
344
  try {
345
- return await _chunk4PNUXIVUcjs.invokeAPIRouteEndpoint.call(void 0, endpoint, request, params, this.bodySizeLimit);
345
+ return await _chunkYAOX43YIcjs.invokeAPIRouteEndpoint.call(void 0, endpoint, request, params, this.bodySizeLimit);
346
346
  } catch (error) {
347
347
  if (options.throwOnError) throw error;
348
348
  console.error(`[API Error] ${pathname}:`, error);
@@ -364,7 +364,7 @@ var _APIRouteManager = class _APIRouteManager {
364
364
  return Boolean(this.matchRoute(pathname));
365
365
  }
366
366
  matchRoute(pathname) {
367
- return _chunk4PNUXIVUcjs.matchAPIRouteAtBasePath.call(void 0, this.routes, pathname, this.basePath);
367
+ return _chunkYAOX43YIcjs.matchAPIRouteAtBasePath.call(void 0, this.routes, pathname, this.basePath);
368
368
  }
369
369
  /**
370
370
  * Get all routes for client type generation
@@ -19,16 +19,18 @@ async function resolveFarmNotFoundMetadata(layoutModules, notFoundModule) {
19
19
  }
20
20
  }
21
21
  let own = {};
22
+ let latestTitle;
22
23
  if (notFoundModule) {
23
24
  own = mergeMetadata(own, notFoundModule.metadata);
25
+ latestTitle = notFoundModule.metadata?.title;
24
26
  if (typeof notFoundModule.generateMetadata === "function") {
25
- own = mergeMetadata(
26
- own,
27
- await notFoundModule.generateMetadata({ params: {}, searchParams: {} })
28
- );
27
+ const generated = await notFoundModule.generateMetadata({ params: {}, searchParams: {} });
28
+ own = mergeMetadata(own, generated);
29
+ if (generated?.title !== void 0) latestTitle = generated.title;
29
30
  }
30
31
  }
31
- return mergeMetadata(metadata, { ...own, title: own.title ?? FARM_NOT_FOUND_TITLE });
32
+ const title = isRecord(latestTitle) && normalizeContent(latestTitle.absolute) ? latestTitle : own.title;
33
+ return mergeMetadata(metadata, { ...own, title: title ?? FARM_NOT_FOUND_TITLE });
32
34
  }
33
35
  __name(resolveFarmNotFoundMetadata, "resolveFarmNotFoundMetadata");
34
36
  function mergeMetadata(base, next) {
@@ -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 _chunkAH7HOAQ3cjs = require('./chunk-AH7HOAQ3.cjs');
3
+ var _chunk6K4SPQWLcjs = require('./chunk-6K4SPQWL.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 _chunkAH7HOAQ3cjs.createFarmMarkdownRouteModule.call(void 0, {
14
+ return _chunk6K4SPQWLcjs.createFarmMarkdownRouteModule.call(void 0, {
15
15
  source,
16
16
  filePath,
17
17
  components: options.components,
@@ -7,7 +7,7 @@ var _chunkSU7MH53Pcjs = require('./chunk-SU7MH53P.cjs');
7
7
 
8
8
 
9
9
 
10
- var _chunk2QLBIPFTcjs = require('./chunk-2QLBIPFT.cjs');
10
+ var _chunkB6ZCT36Xcjs = require('./chunk-B6ZCT36X.cjs');
11
11
 
12
12
 
13
13
  var _chunk5OVTOKGHcjs = require('./chunk-5OVTOKGH.cjs');
@@ -52,7 +52,7 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, shouldBlockUnload, "shouldBlockUnload");
52
52
  function navigateViaRouter(href, basePath, replace, options = {}) {
53
53
  if (typeof window === "undefined") return;
54
54
  const url = _chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, href, basePath);
55
- const spaRouter = _chunk2QLBIPFTcjs.getInstalledFarmSPARouter.call(void 0, );
55
+ const spaRouter = _chunkB6ZCT36Xcjs.getInstalledFarmSPARouter.call(void 0, );
56
56
  if (spaRouter) {
57
57
  void spaRouter.navigate(url, {
58
58
  replace,
@@ -65,7 +65,7 @@ function navigateViaRouter(href, basePath, replace, options = {}) {
65
65
  } else {
66
66
  window.history.pushState(null, "", url);
67
67
  }
68
- _chunk2QLBIPFTcjs.notifyHistoryChange.call(void 0, "url-search");
68
+ _chunkB6ZCT36Xcjs.notifyHistoryChange.call(void 0, "url-search");
69
69
  }
70
70
  _chunkS3JO3N4Hcjs.__name.call(void 0, navigateViaRouter, "navigateViaRouter");
71
71
  function useRouter(options = {}) {
@@ -85,7 +85,7 @@ function useRouter(options = {}) {
85
85
  setState(readRouterState(basePath, routeMatcher));
86
86
  }, "handlePopState");
87
87
  handlePopState();
88
- const unsubscribe = _chunk2QLBIPFTcjs.subscribeHistoryChange.call(void 0, handlePopState);
88
+ const unsubscribe = _chunkB6ZCT36Xcjs.subscribeHistoryChange.call(void 0, handlePopState);
89
89
  return unsubscribe;
90
90
  }, [basePath, routeMatcher]);
91
91
  const push = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (href, navigateOptions) => {
@@ -96,11 +96,11 @@ function useRouter(options = {}) {
96
96
  }, "replace");
97
97
  const pushState = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (pageState, href) => {
98
98
  if (typeof window === "undefined") return;
99
- _chunk2QLBIPFTcjs.getRouter.call(void 0, ).pushState(pageState, resolveClientHref(href, basePath));
99
+ _chunkB6ZCT36Xcjs.getRouter.call(void 0, ).pushState(pageState, resolveClientHref(href, basePath));
100
100
  }, "pushState");
101
101
  const replaceState = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (pageState, href) => {
102
102
  if (typeof window === "undefined") return;
103
- _chunk2QLBIPFTcjs.getRouter.call(void 0, ).replaceState(pageState, resolveClientHref(href, basePath));
103
+ _chunkB6ZCT36Xcjs.getRouter.call(void 0, ).replaceState(pageState, resolveClientHref(href, basePath));
104
104
  }, "replaceState");
105
105
  const back = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, () => {
106
106
  if (typeof window !== "undefined") {
@@ -124,25 +124,25 @@ function useRouter(options = {}) {
124
124
  }
125
125
  _chunkS3JO3N4Hcjs.__name.call(void 0, useRouter, "useRouter");
126
126
  function usePageState() {
127
- const [state, setState] = _react.useState.call(void 0, () => _chunk2QLBIPFTcjs.readPageState.call(void 0, ));
127
+ const [state, setState] = _react.useState.call(void 0, () => _chunkB6ZCT36Xcjs.readPageState.call(void 0, ));
128
128
  _react.useEffect.call(void 0, () => {
129
129
  if (typeof window === "undefined") return;
130
130
  const handlePopState = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, () => {
131
- setState(_chunk2QLBIPFTcjs.readPageState.call(void 0, ));
131
+ setState(_chunkB6ZCT36Xcjs.readPageState.call(void 0, ));
132
132
  }, "handlePopState");
133
133
  handlePopState();
134
- return _chunk2QLBIPFTcjs.subscribeHistoryChange.call(void 0, handlePopState);
134
+ return _chunkB6ZCT36Xcjs.subscribeHistoryChange.call(void 0, handlePopState);
135
135
  }, []);
136
136
  return state;
137
137
  }
138
138
  _chunkS3JO3N4Hcjs.__name.call(void 0, usePageState, "usePageState");
139
139
  function useNavigation() {
140
140
  const [state, setState] = _react.useState.call(void 0,
141
- () => _chunk2QLBIPFTcjs.getRouter.call(void 0, ).getNavigationState()
141
+ () => _chunkB6ZCT36Xcjs.getRouter.call(void 0, ).getNavigationState()
142
142
  );
143
143
  _react.useEffect.call(void 0, () => {
144
144
  if (typeof window === "undefined") return;
145
- return _chunk2QLBIPFTcjs.getRouter.call(void 0, ).subscribeNavigation(setState);
145
+ return _chunkB6ZCT36Xcjs.getRouter.call(void 0, ).subscribeNavigation(setState);
146
146
  }, []);
147
147
  return state;
148
148
  }
@@ -155,7 +155,7 @@ function useBlocker(options) {
155
155
  if (typeof window === "undefined" || !active) {
156
156
  return;
157
157
  }
158
- return _chunk2QLBIPFTcjs.getRouter.call(void 0, ).addBlocker(
158
+ return _chunkB6ZCT36Xcjs.getRouter.call(void 0, ).addBlocker(
159
159
  async (context) => {
160
160
  const current = optionsRef.current;
161
161
  const when = typeof current.when === "function" ? current.when(context) : current.when;
@@ -179,7 +179,7 @@ function useScrollRestoration(key) {
179
179
  _react.useEffect.call(void 0, () => {
180
180
  const element = ref.current;
181
181
  if (!element) return;
182
- return _chunk2QLBIPFTcjs.getRouter.call(void 0, ).registerScrollElement(key, element);
182
+ return _chunkB6ZCT36Xcjs.getRouter.call(void 0, ).registerScrollElement(key, element);
183
183
  }, [key]);
184
184
  return ref;
185
185
  }
@@ -201,7 +201,7 @@ function readRouterState(basePath, routeMatcher) {
201
201
  pathname,
202
202
  searchParams: url.searchParams,
203
203
  params: _optionalChain([routeMatcher, 'optionalAccess', _5 => _5.match, 'call', _6 => _6(routePathname), 'optionalAccess', _7 => _7.params]) || {},
204
- pageState: typeof window === "undefined" ? null : _chunk2QLBIPFTcjs.readPageState.call(void 0, )
204
+ pageState: typeof window === "undefined" ? null : _chunkB6ZCT36Xcjs.readPageState.call(void 0, )
205
205
  };
206
206
  }
207
207
  _chunkS3JO3N4Hcjs.__name.call(void 0, readRouterState, "readRouterState");
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkBBVSJVBZcjs = require('./chunk-BBVSJVBZ.cjs');
5
+ var _chunk2ITKVAIFcjs = require('./chunk-2ITKVAIF.cjs');
6
6
 
7
7
 
8
8
  var _chunkI57LW5VZcjs = require('./chunk-I57LW5VZ.cjs');
@@ -63,11 +63,12 @@ function collectFarmLlmsTxtPages(sources, options) {
63
63
  for (const source of sources) {
64
64
  const path = source.pattern;
65
65
  if (path.includes("[") || pages.has(path)) continue;
66
- if (include.length && !include.some((pattern) => _chunkBBVSJVBZcjs.matchesFarmMarkdownRoutePattern.call(void 0, pattern, path))) {
66
+ if (include.length && !include.some((pattern) => _chunk2ITKVAIFcjs.matchesFarmMarkdownRoutePattern.call(void 0, pattern, path))) {
67
67
  continue;
68
68
  }
69
- if (exclude.some((pattern) => _chunkBBVSJVBZcjs.matchesFarmMarkdownRoutePattern.call(void 0, pattern, path))) continue;
70
- const target = _chunkBBVSJVBZcjs.isFarmMarkdownMirrorExposed.call(void 0, options.markdown, path) ? _chunkBBVSJVBZcjs.getFarmMarkdownMirrorPath.call(void 0, path) : path;
69
+ if (exclude.some((pattern) => _chunk2ITKVAIFcjs.matchesFarmMarkdownRoutePattern.call(void 0, pattern, path))) continue;
70
+ if (isMetadataNoIndex(source.metadata)) continue;
71
+ const target = _chunk2ITKVAIFcjs.isFarmMarkdownMirrorExposed.call(void 0, options.markdown, path) ? _chunk2ITKVAIFcjs.getFarmMarkdownMirrorPath.call(void 0, path) : path;
71
72
  const description = readMetadataString(source.metadata, "description");
72
73
  pages.set(path, {
73
74
  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
  _chunkS3JO3N4Hcjs.__name.call(void 0, 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
+ _chunkS3JO3N4Hcjs.__name.call(void 0, isMetadataNoIndex, "isMetadataNoIndex");
82
94
  function createFarmDefaultLlmsTxt(options) {
83
95
  const { config, pages } = options;
84
96
  const summary = _nullishCoalesce(config.summary, () => ( readMetadataString(options.rootMetadata, "description")));
@@ -193,6 +205,36 @@ async function renderFarmLlmsFullTxt(value, options) {
193
205
  `;
194
206
  }
195
207
  _chunkS3JO3N4Hcjs.__name.call(void 0, renderFarmLlmsFullTxt, "renderFarmLlmsFullTxt");
208
+ function createFarmLlmsFullRenderer(options = {}) {
209
+ const now = _nullishCoalesce(options.now, () => ( Date.now));
210
+ const ttl = (_nullishCoalesce(options.revalidate, () => ( 0))) * 1e3;
211
+ const maxEntries = _nullishCoalesce(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
+ _chunkS3JO3N4Hcjs.__name.call(void 0, 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;
@@ -1354,4 +1396,5 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, applyFarmPreviewRobotsTag, "applyFarmPrevi
1354
1396
 
1355
1397
 
1356
1398
 
1357
- exports.resolveFarmLlmsTxtConfig = resolveFarmLlmsTxtConfig; exports.collectFarmLlmsTxtPages = collectFarmLlmsTxtPages; exports.createFarmDefaultLlmsTxt = createFarmDefaultLlmsTxt; exports.serializeFarmLlmsTxt = serializeFarmLlmsTxt; exports.createFarmLlmsMarkdownReader = createFarmLlmsMarkdownReader; exports.renderFarmLlmsFullTxt = renderFarmLlmsFullTxt; exports.resolveFarmAgentCrawlers = resolveFarmAgentCrawlers; exports.createFarmAgentRobots = createFarmAgentRobots; exports.resolveFarmSecurityConfig = resolveFarmSecurityConfig; exports.getFarmSecurityHeader = getFarmSecurityHeader; exports.createFarmCspNonce = createFarmCspNonce; exports.addFarmCspNonceToScriptTags = addFarmCspNonceToScriptTags; exports.applyFarmCspHashesToHtml = applyFarmCspHashesToHtml; exports.applyFarmCspNonceToResponse = applyFarmCspNonceToResponse; exports.farmCspBlocksFrameworkInlineScripts = farmCspBlocksFrameworkInlineScripts; exports.createFarmCspNonceRewriter = createFarmCspNonceRewriter; exports.resolveFarmPerformanceConfig = resolveFarmPerformanceConfig; exports.manageFarmHtmlPreloads = manageFarmHtmlPreloads; exports.manageFarmLinkHeaderPreloads = manageFarmLinkHeaderPreloads; exports.manageFarmDocumentPreloads = manageFarmDocumentPreloads; exports.reportFarmPreloadWarnings = reportFarmPreloadWarnings; exports.FARM_PREVIEW_ROBOTS_TAG = FARM_PREVIEW_ROBOTS_TAG; exports.resolveFarmNoindexPreviews = resolveFarmNoindexPreviews; exports.applyFarmPreviewRobotsTag = applyFarmPreviewRobotsTag;
1399
+
1400
+ exports.resolveFarmLlmsTxtConfig = resolveFarmLlmsTxtConfig; exports.collectFarmLlmsTxtPages = collectFarmLlmsTxtPages; exports.createFarmDefaultLlmsTxt = createFarmDefaultLlmsTxt; exports.serializeFarmLlmsTxt = serializeFarmLlmsTxt; exports.createFarmLlmsMarkdownReader = createFarmLlmsMarkdownReader; exports.renderFarmLlmsFullTxt = renderFarmLlmsFullTxt; exports.createFarmLlmsFullRenderer = createFarmLlmsFullRenderer; exports.resolveFarmAgentCrawlers = resolveFarmAgentCrawlers; exports.createFarmAgentRobots = createFarmAgentRobots; exports.resolveFarmSecurityConfig = resolveFarmSecurityConfig; exports.getFarmSecurityHeader = getFarmSecurityHeader; exports.createFarmCspNonce = createFarmCspNonce; exports.addFarmCspNonceToScriptTags = addFarmCspNonceToScriptTags; exports.applyFarmCspHashesToHtml = applyFarmCspHashesToHtml; exports.applyFarmCspNonceToResponse = applyFarmCspNonceToResponse; exports.farmCspBlocksFrameworkInlineScripts = farmCspBlocksFrameworkInlineScripts; exports.createFarmCspNonceRewriter = createFarmCspNonceRewriter; exports.resolveFarmPerformanceConfig = resolveFarmPerformanceConfig; exports.manageFarmHtmlPreloads = manageFarmHtmlPreloads; exports.manageFarmLinkHeaderPreloads = manageFarmLinkHeaderPreloads; exports.manageFarmDocumentPreloads = manageFarmDocumentPreloads; exports.reportFarmPreloadWarnings = reportFarmPreloadWarnings; exports.FARM_PREVIEW_ROBOTS_TAG = FARM_PREVIEW_ROBOTS_TAG; exports.resolveFarmNoindexPreviews = resolveFarmNoindexPreviews; exports.applyFarmPreviewRobotsTag = applyFarmPreviewRobotsTag;