@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
@@ -3,18 +3,28 @@
3
3
  var _chunkOWOUTKIJcjs = require('./chunk-OWOUTKIJ.cjs');
4
4
 
5
5
 
6
- var _chunkISTFC3MZcjs = require('./chunk-ISTFC3MZ.cjs');
6
+ var _chunk2CT6XUNOcjs = require('./chunk-2CT6XUNO.cjs');
7
+
8
+
9
+ var _chunkJ63ZH5OQcjs = require('./chunk-J63ZH5OQ.cjs');
7
10
 
8
11
 
9
12
  var _chunkOI6CMLWXcjs = require('./chunk-OI6CMLWX.cjs');
10
13
 
11
14
 
15
+
16
+ var _chunkWPYFSQKKcjs = require('./chunk-WPYFSQKK.cjs');
17
+
18
+
12
19
  var _chunkTKJZFIMLcjs = require('./chunk-TKJZFIML.cjs');
13
20
 
14
21
 
15
22
  var _chunkBIDYX3SLcjs = require('./chunk-BIDYX3SL.cjs');
16
23
 
17
24
 
25
+ var _chunkI57LW5VZcjs = require('./chunk-I57LW5VZ.cjs');
26
+
27
+
18
28
  var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
19
29
 
20
30
  // src/i18n/alternates.ts
@@ -194,10 +204,13 @@ function createFarmMetadataRouteResponse(kind, value, routeModule = {}, options
194
204
  if (method !== "GET" && method !== "HEAD") {
195
205
  return new Response(null, { status: 405, headers: { Allow: "GET, HEAD" } });
196
206
  }
207
+ if ((kind === "llms" || kind === "llms-full") && options.request) {
208
+ _chunkJ63ZH5OQcjs.emitFarmAgentRead.call(void 0, options.request, kind, isResponse(value) ? value.status : 200);
209
+ }
197
210
  if (isResponse(value)) {
198
211
  return method === "HEAD" ? _chunkTKJZFIMLcjs.omitFarmResponseBody.call(void 0, value) : value;
199
212
  }
200
- const body = kind === "sitemap" ? serializeSitemap(value) : kind === "robots" ? serializeRobots(value) : kind === "llms" || kind === "llms-full" ? _chunkISTFC3MZcjs.serializeFarmLlmsTxt.call(void 0, value) : serializeManifest(value);
213
+ const body = kind === "sitemap" ? serializeSitemap(value) : kind === "robots" ? serializeRobots(value) : kind === "llms" || kind === "llms-full" ? _chunk2CT6XUNOcjs.serializeFarmLlmsTxt.call(void 0, value) : serializeManifest(value);
201
214
  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
215
  return new Response(method === "HEAD" ? null : body, {
203
216
  headers: {
@@ -440,6 +453,70 @@ function serializeInlineValue(value) {
440
453
  }
441
454
  _chunkS3JO3N4Hcjs.__name.call(void 0, serializeInlineValue, "serializeInlineValue");
442
455
 
456
+ // src/api-catalog.ts
457
+ var FARM_API_CATALOG_PATH = "/.well-known/api-catalog";
458
+ var API_CATALOG_CONTENT_TYPE = 'application/linkset+json; profile="https://www.rfc-editor.org/info/rfc9727"';
459
+ function resolveFarmApiCatalogInput(config) {
460
+ const mcp = config.mcp && config.mcp.enabled !== false ? config.mcp : void 0;
461
+ return {
462
+ basePath: config.basePath,
463
+ apiBaseURL: _nullishCoalesce(_optionalChain([config, 'access', _5 => _5.openapi, 'optionalAccess', _6 => _6.servers, 'optionalAccess', _7 => _7[0], 'optionalAccess', _8 => _8.url]), () => ( config.api.baseURL)),
464
+ openapi: _optionalChain([config, 'access', _9 => _9.openapi, 'optionalAccess', _10 => _10.enabled]) ? { specRoute: config.openapi.specRoute, route: config.openapi.route } : void 0,
465
+ mcpPath: mcp ? _chunkWPYFSQKKcjs.resolveFarmAPIServerRoutePath.call(void 0,
466
+ _nullishCoalesce(mcp.path, () => ( "/api/mcp")),
467
+ _chunkWPYFSQKKcjs.resolveFarmAPIServerBasePath.call(void 0, config.api)
468
+ ) : void 0
469
+ };
470
+ }
471
+ _chunkS3JO3N4Hcjs.__name.call(void 0, resolveFarmApiCatalogInput, "resolveFarmApiCatalogInput");
472
+ function createFarmApiCatalog(input) {
473
+ const appPath = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (path) => _chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, path, input.basePath), "appPath");
474
+ const items = [];
475
+ const contexts = [];
476
+ const specRoute = _optionalChain([input, 'access', _11 => _11.openapi, 'optionalAccess', _12 => _12.specRoute]);
477
+ const reference = _optionalChain([input, 'access', _13 => _13.openapi, 'optionalAccess', _14 => _14.route]);
478
+ if (specRoute || reference) {
479
+ const api = { anchor: input.apiBaseURL };
480
+ if (specRoute) {
481
+ api["service-desc"] = [
482
+ { href: appPath(specRoute), type: "application/vnd.oai.openapi+json" }
483
+ ];
484
+ }
485
+ if (reference) api["service-doc"] = [{ href: appPath(reference), type: "text/html" }];
486
+ items.push({ href: input.apiBaseURL });
487
+ contexts.push(api);
488
+ }
489
+ if (input.mcpPath) items.push({ href: input.mcpPath });
490
+ return {
491
+ linkset: [{ anchor: appPath(FARM_API_CATALOG_PATH), item: items }, ...contexts]
492
+ };
493
+ }
494
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmApiCatalog, "createFarmApiCatalog");
495
+ function createFarmApiCatalogResponse(method, input, request) {
496
+ const upperMethod = method.toUpperCase();
497
+ if (upperMethod !== "GET" && upperMethod !== "HEAD") {
498
+ return new Response("Method Not Allowed", {
499
+ status: 405,
500
+ headers: { Allow: "GET, HEAD", "Content-Type": "text/plain; charset=utf-8" }
501
+ });
502
+ }
503
+ if (request) _chunkJ63ZH5OQcjs.emitFarmAgentRead.call(void 0, request, "api-catalog", 200);
504
+ const catalog = createFarmApiCatalog(input);
505
+ return new Response(upperMethod === "HEAD" ? null : JSON.stringify(catalog), {
506
+ status: 200,
507
+ headers: {
508
+ "Content-Type": API_CATALOG_CONTENT_TYPE,
509
+ "Cache-Control": "public, max-age=0, must-revalidate",
510
+ Link: `<${catalog.linkset[0].anchor}>; rel="api-catalog"`,
511
+ "X-Content-Type-Options": "nosniff"
512
+ }
513
+ });
514
+ }
515
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmApiCatalogResponse, "createFarmApiCatalogResponse");
516
+
517
+
518
+
519
+
443
520
 
444
521
 
445
522
 
@@ -450,4 +527,4 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, serializeInlineValue, "serializeInlineValu
450
527
 
451
528
 
452
529
 
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;
530
+ 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;
@@ -3,14 +3,14 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkLYM7HY34cjs = require('./chunk-LYM7HY34.cjs');
6
+ var _chunk3WSWXPYMcjs = require('./chunk-3WSWXPYM.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 _chunkWFPRVVF2cjs = require('./chunk-WFPRVVF2.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: _chunk3WSWXPYMcjs.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 _chunk3WSWXPYMcjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs).map((page) => _chunk3WSWXPYMcjs.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
+ ..._chunk3WSWXPYMcjs.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
+ ..._chunk3WSWXPYMcjs.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 _chunk3WSWXPYMcjs.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 = _chunk3WSWXPYMcjs.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 = _chunk3WSWXPYMcjs.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 _chunkWFPRVVF2cjs.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: _chunk3WSWXPYMcjs.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 = _chunk3WSWXPYMcjs.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(_chunk3WSWXPYMcjs.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
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  compileFarmDocsAdapterEdgeManifest,
9
9
  createFarmDocsAPIHandler
10
- } from "./chunk-YGMK6ESJ.mjs";
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-47H7VENP.mjs";
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-6VEHUKZ2.mjs";
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-BDJNP7AQ.mjs";
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,13 +70,17 @@ import {
69
70
  resolveFarmImageProviderForRuntime,
70
71
  resolveFarmIsolatedClientHydrationMode,
71
72
  resolveFarmNotFoundComponentPath
72
- } from "./chunk-6YSEHN46.mjs";
73
+ } from "./chunk-UXQXGB5A.mjs";
73
74
  import {
74
75
  findRequestBoundSourceBlockers,
75
76
  generateFarmTypeArtifacts,
76
77
  parseRouteRenderingDirective,
77
78
  resolveRouteRenderingConfigFromFile
78
79
  } from "./chunk-VVJCWBIE.mjs";
80
+ import {
81
+ FARM_API_CATALOG_PATH,
82
+ resolveFarmApiCatalogInput
83
+ } from "./chunk-ARXCHQLX.mjs";
79
84
  import {
80
85
  isFarmPreviewDeploymentEnvironment
81
86
  } from "./chunk-BOYNDCZL.mjs";
@@ -107,7 +112,7 @@ import {
107
112
  } from "./chunk-DAATZTKJ.mjs";
108
113
  import {
109
114
  applyFarmCspHashesToHtml
110
- } from "./chunk-7BC6GAL7.mjs";
115
+ } from "./chunk-RAI7NULA.mjs";
111
116
  import {
112
117
  applyFarmCronVercelCrons,
113
118
  createFarmCronCloudflareConfig,
@@ -119,11 +124,14 @@ import {
119
124
  } from "./chunk-4OOBRCJX.mjs";
120
125
  import {
121
126
  isFarmMarkdownPageFile
122
- } from "./chunk-N255VYFP.mjs";
127
+ } from "./chunk-JM5GQL4H.mjs";
123
128
  import {
124
129
  resolveFarmMdxComponentsModulePath,
125
130
  resolveMdxConfig
126
131
  } from "./chunk-FA2W42OV.mjs";
132
+ import {
133
+ getFarmMarkdownAlternatePath
134
+ } from "./chunk-OOIL3BWR.mjs";
127
135
  import {
128
136
  applyFarmWorkflowVercelCrons,
129
137
  prepareFarmWorkflowsForNitro
@@ -137,7 +145,7 @@ import {
137
145
  } from "./chunk-TIKNUAU7.mjs";
138
146
  import {
139
147
  APIRouteManager
140
- } from "./chunk-WNUBR4CA.mjs";
148
+ } from "./chunk-QGG336NI.mjs";
141
149
  import {
142
150
  readFarmI18nCatalogs
143
151
  } from "./chunk-FV45CKBC.mjs";
@@ -5413,10 +5421,12 @@ function isolateFarmRouteServerPage(element) { return element; }`;
5413
5421
  createFarmCacheKey,
5414
5422
  createFarmMetadataRouteResponse,
5415
5423
  createFarmAgentRobots,
5424
+ createFarmApiCatalogResponse,
5416
5425
  collectFarmLlmsTxtPages,
5417
5426
  createFarmDefaultLlmsTxt,
5418
5427
  createFarmLlmsMarkdownReader,
5419
5428
  renderFarmLlmsFullTxt,
5429
+ createFarmLlmsFullRenderer,
5420
5430
  createFarmThemeDocumentParts,
5421
5431
  createFarmLocaleCookie,
5422
5432
  createFarmProductionLifecycle,
@@ -5815,7 +5825,7 @@ const farmImageHandler = ${imageRuntime === "none" ? "null" : imageRuntime === "
5815
5825
  })`};
5816
5826
  const farmMarkdownConfig = ${JSON.stringify(config.md)};
5817
5827
  const farmLlmsTxtConfig = ${JSON.stringify(config.agent?.llmsTxt ?? { enabled: false, include: [], exclude: [] })};
5818
- ${servesAgentRobotsTxt ? `const farmAgentCrawlers = ${JSON.stringify(config.agent.crawlers)};` : ""}
5828
+ ${config.agent?.llmsTxt?.enabled ? "const farmLlmsFullRenderer = createFarmLlmsFullRenderer({ revalidate: farmLlmsTxtConfig.revalidate });\n" : ""}${servesAgentRobotsTxt ? `const farmAgentCrawlers = ${JSON.stringify(config.agent.crawlers)};` : ""}
5819
5829
  const farmMdxConfig = ${JSON.stringify({
5820
5830
  ...config.mdx,
5821
5831
  components: typeof config.mdx?.components === "string" ? config.mdx.components : void 0
@@ -5925,7 +5935,8 @@ const apiRoutes = ${apiRoutes.length > 0 ? "mergePluginAPIRoutes(" : ""}[${apiRe
5925
5935
  ]${apiRoutes.length > 0 ? `, configuredPlugins, ${JSON.stringify(apiRoutes.map(({ path: path7, methods }) => ({ path: path7, methods })))}, { bodySizeLimit: ${JSON.stringify(config.server.bodySizeLimit)} })` : ""};
5926
5936
  const farmLocalAPIBasePath = ${JSON.stringify(resolveFarmAPIServerBasePath(config.api))};
5927
5937
  const farmOpenAPIReference = ${JSON.stringify(openAPIReference)};
5928
-
5938
+ ${config.agent?.apiCatalog ? `const farmApiCatalogInput = ${JSON.stringify(resolveFarmApiCatalogInput(config))};
5939
+ ` : ""}
5929
5940
  function isFarmLocalAPIPathname(pathname) {
5930
5941
  return farmLocalAPIBasePath !== "/" &&
5931
5942
  (pathname === farmLocalAPIBasePath ||
@@ -6315,12 +6326,13 @@ function stripFarmDocumentWrappers(markup) {
6315
6326
  }
6316
6327
 
6317
6328
  // Farm's display:contents wrappers, and the head elements React 19 hoists in front of them
6318
- // (charset, viewport, preloads, titles) when the layout's <html> is not the render root.
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.
6319
6331
  function peelFarmDocumentPrefix(markup) {
6320
6332
  let inner = markup.replace(/^\\s+/, "");
6321
6333
  let hoisted = "";
6322
6334
  const wrapper = /^<div\\b[^>]*style=["']display\\s*:\\s*contents["'][^>]*>/i;
6323
- const hoistable = /^(?:<(?:meta|link|base)\\b[^>]*>|<title\\b[^>]*>[\\s\\S]*?<\\/title>)/i;
6335
+ const hoistable = /${HOISTED_HEAD_ELEMENT.source}/i;
6324
6336
  let match;
6325
6337
  while ((match = wrapper.exec(inner) || hoistable.exec(inner))) {
6326
6338
  if (!/^<div/i.test(match[0])) hoisted += match[0];
@@ -6832,7 +6844,7 @@ async function handleApplicationMetadataRouteRequest(request, routePathname) {
6832
6844
  const body = isLlmsFull && !(value instanceof Response)
6833
6845
  ? await renderFarmLlmsFullTxt(value, { origin: url.origin, readMarkdown: llmsContext.markdown })
6834
6846
  : value;
6835
- return createFarmMetadataRouteResponse(match.metadata.kind, body, routeModule, { method });
6847
+ return createFarmMetadataRouteResponse(match.metadata.kind, body, routeModule, { method, request });
6836
6848
  } catch (error) {
6837
6849
  console.error("Metadata route render failed:", error);
6838
6850
  return new Response("Internal Server Error", {
@@ -7633,6 +7645,15 @@ async function handleFarmRequestInContext(
7633
7645
  return applyProductionMiddlewareHeaders(applicationMetadataResponse, middlewareHeaders);
7634
7646
  }
7635
7647
  ` : ""}
7648
+ ${config.agent?.apiCatalog ? `
7649
+ // agent.apiCatalog: list the OpenAPI and MCP surfaces at the RFC 9727 path.
7650
+ if (normalizeRuntimePath(routePathname) === ${JSON.stringify(FARM_API_CATALOG_PATH)}) {
7651
+ return applyProductionMiddlewareHeaders(
7652
+ createFarmApiCatalogResponse(request.method, farmApiCatalogInput, request),
7653
+ middlewareHeaders,
7654
+ );
7655
+ }
7656
+ ` : ""}
7636
7657
  ${servesAgentRobotsTxt ? `
7637
7658
  // agent.crawlers with no robots.ts: serve the generated file.
7638
7659
  if (normalizeRuntimePath(routePathname) === "/robots.txt") {
@@ -7649,21 +7670,35 @@ async function handleFarmRequestInContext(
7649
7670
  : ${config.agent?.llmsTxt?.full ? `normalizeRuntimePath(routePathname) === "/llms-full.txt" ? "llms-full" : ` : ""}null;
7650
7671
  if (farmGeneratedLlmsKind) {
7651
7672
  const llmsContext = createFarmLlmsTxtContext(request, farmGeneratedLlmsKind === "llms-full");
7652
- const llmsBody = farmGeneratedLlmsKind === "llms-full"
7653
- ? await renderFarmLlmsFullTxt(llmsContext.defaults, {
7654
- origin: new URL(request.url).origin,
7655
- readMarkdown: llmsContext.markdown,
7656
- })
7657
- : llmsContext.defaults;
7658
- return applyProductionMiddlewareHeaders(
7659
- createFarmMetadataRouteResponse(
7660
- farmGeneratedLlmsKind,
7661
- llmsBody,
7662
- { revalidate: farmLlmsTxtConfig.revalidate },
7663
- { method: request.method },
7664
- ),
7665
- middlewareHeaders,
7673
+ const llmsOrigin = new URL(request.url).origin;
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) =>
7678
+ renderFarmLlmsFullTxt(llmsContext.defaults, {
7679
+ origin: llmsOrigin,
7680
+ readMarkdown: llmsContext.markdown,
7681
+ onIncomplete: () => {
7682
+ llmsComplete = false;
7683
+ if (shared) shared.incomplete();
7684
+ },
7685
+ });
7686
+ // HEAD reads no pages, so it neither waits for nor fills the shared render.
7687
+ const llmsBody = farmGeneratedLlmsKind !== "llms-full"
7688
+ ? llmsContext.defaults
7689
+ : request.method.toUpperCase() === "HEAD"
7690
+ ? await renderLlmsFull()
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 },
7666
7699
  );
7700
+ if (!llmsComplete) llmsResponse.headers.set("cache-control", "no-store");
7701
+ return applyProductionMiddlewareHeaders(llmsResponse, middlewareHeaders);
7667
7702
  }
7668
7703
  ` : ""}
7669
7704
 
@@ -9309,6 +9344,27 @@ export default async function farmNitroEventHandler(event) {
9309
9344
  }
9310
9345
  nitroConfig.minify = useFarmServerMinifier ? false : shouldMinify;
9311
9346
  const nitroInstance = await nitroBuilder.createNitro(nitroConfig);
9347
+ if (config.md?.enabled) {
9348
+ nitroInstance.hooks.hook("prerender:generate", (route) => {
9349
+ if (!route.contents || !route.contentType?.toLowerCase().includes("html")) return;
9350
+ const alternatePath = getFarmMarkdownAlternatePath(config.md, route.route);
9351
+ if (!alternatePath) return;
9352
+ const routeRule = nitroInstance.options.routeRules[route.route] || {};
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 };
9363
+ });
9364
+ nitroInstance.hooks.hook("prerender:done", () => {
9365
+ nitroInstance.routing.sync();
9366
+ });
9367
+ }
9312
9368
  if (config.security.csp && config.security.csp.nonce) {
9313
9369
  nitroInstance.hooks.hook("prerender:generate", async (route) => {
9314
9370
  if (!route.contents || !route.contentType?.toLowerCase().includes("html")) return;
@@ -9392,9 +9448,14 @@ export default async function farmNitroEventHandler(event) {
9392
9448
  }
9393
9449
  }
9394
9450
  const sharpRuntimeStagePromise = imageRuntime === "node" ? stageSharpRuntime(config, root, distDir, fs, preset) : Promise.resolve(null);
9395
- const [nitroBuildResult, sharpRuntimeStageResult] = await Promise.allSettled([
9451
+ const prebuiltSSRFilesPromise = canReusePrebuiltSSR ? prepareSSRBundleFiles(
9452
+ ssrBundle,
9453
+ shouldMinify ? { keepNames: keepServerNames, target: "node18" } : null
9454
+ ) : Promise.resolve(null);
9455
+ const [nitroBuildResult, sharpRuntimeStageResult, prebuiltSSRFilesResult] = await Promise.allSettled([
9396
9456
  nitroBuilder.build(nitroInstance),
9397
- sharpRuntimeStagePromise
9457
+ sharpRuntimeStagePromise,
9458
+ prebuiltSSRFilesPromise
9398
9459
  ]);
9399
9460
  await nitroInstance.close();
9400
9461
  if (nitroBuildResult.status === "rejected") {
@@ -9409,6 +9470,9 @@ export default async function farmNitroEventHandler(event) {
9409
9470
  if (sharpRuntimeStageResult.status === "rejected") {
9410
9471
  throw sharpRuntimeStageResult.reason;
9411
9472
  }
9473
+ if (prebuiltSSRFilesResult.status === "rejected") {
9474
+ throw prebuiltSSRFilesResult.reason;
9475
+ }
9412
9476
  const stagedSharpRuntime = sharpRuntimeStageResult.value ?? (imageRuntime === "node" ? await stageSharpRuntime(config, root, distDir, fs, preset) : null);
9413
9477
  const runtimeCopyPromise = (async () => {
9414
9478
  if (stagedSharpRuntime) {
@@ -9419,10 +9483,9 @@ export default async function farmNitroEventHandler(event) {
9419
9483
  }
9420
9484
  })();
9421
9485
  const copyResults = await Promise.allSettled([
9422
- canReusePrebuiltSSR ? copyPrebuiltSSRBundle(
9423
- ssrBundle,
9486
+ prebuiltSSRFilesResult.value ? writeSSRBundleFiles(
9487
+ prebuiltSSRFilesResult.value,
9424
9488
  path5.join(outputDir, "server", FARM_SSR_OUTPUT_DIR),
9425
- shouldMinify ? { keepNames: keepServerNames, target: "node18" } : null,
9426
9489
  fs
9427
9490
  ) : Promise.resolve(),
9428
9491
  runtimeCopyPromise
@@ -9466,21 +9529,29 @@ function resolveFarmNitroOutputConfig(preset, outputDir) {
9466
9529
  };
9467
9530
  }
9468
9531
  __name(resolveFarmNitroOutputConfig, "resolveFarmNitroOutputConfig");
9469
- async function copyPrebuiltSSRBundle(ssrBundle, targetDir, minifyOptions, fs) {
9532
+ function prepareSSRBundleFiles(ssrBundle, minifyOptions) {
9533
+ return Promise.all(
9534
+ Object.entries(ssrBundle).map(async ([fileName, output]) => ({
9535
+ fileName,
9536
+ contents: output.type === "asset" ? output.source : minifyOptions ? await minifyFarmServerChunk(output.code, fileName, minifyOptions) : output.code
9537
+ }))
9538
+ );
9539
+ }
9540
+ __name(prepareSSRBundleFiles, "prepareSSRBundleFiles");
9541
+ async function writeSSRBundleFiles(files, targetDir, fs) {
9470
9542
  await fs.rm(targetDir, { recursive: true, force: true });
9471
9543
  await Promise.all(
9472
- Object.entries(ssrBundle).map(async ([fileName, output]) => {
9544
+ files.map(async ({ fileName, contents }) => {
9473
9545
  const targetPath = path5.join(targetDir, fileName);
9474
9546
  await fs.mkdir(path5.dirname(targetPath), { recursive: true });
9475
- if (output.type === "asset") {
9476
- await fs.writeFile(targetPath, output.source);
9477
- return;
9478
- }
9479
- const code = minifyOptions ? await minifyFarmServerChunk(output.code, fileName, minifyOptions) : output.code;
9480
- await fs.writeFile(targetPath, code);
9547
+ await fs.writeFile(targetPath, contents);
9481
9548
  })
9482
9549
  );
9483
9550
  }
9551
+ __name(writeSSRBundleFiles, "writeSSRBundleFiles");
9552
+ async function copyPrebuiltSSRBundle(ssrBundle, targetDir, minifyOptions, fs) {
9553
+ await writeSSRBundleFiles(await prepareSSRBundleFiles(ssrBundle, minifyOptions), targetDir, fs);
9554
+ }
9484
9555
  __name(copyPrebuiltSSRBundle, "copyPrebuiltSSRBundle");
9485
9556
  async function registerPrebuiltSSRPackageImport(serverDir, ssrEntryFile, fs) {
9486
9557
  const packagePath = path5.join(serverDir, "package.json");