@farm.js/core 0.1.22 → 0.1.24

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 (150) hide show
  1. package/dist/agent-runtime.d.mts +3 -2
  2. package/dist/agent-runtime.d.ts +3 -2
  3. package/dist/api/route-manager.cjs +3 -2
  4. package/dist/api/route-manager.d.mts +3 -2
  5. package/dist/api/route-manager.d.ts +3 -2
  6. package/dist/api/route-manager.mjs +2 -1
  7. package/dist/api.cjs +4 -3
  8. package/dist/api.d.mts +4 -3
  9. package/dist/api.d.ts +4 -3
  10. package/dist/api.mjs +3 -2
  11. package/dist/{app-B7qKw8Ny.d.ts → app-BV-7wV5q.d.ts} +3 -3
  12. package/dist/{app-0e-oTC_R.d.mts → app-BZDWwwFa.d.mts} +3 -3
  13. package/dist/app-markdown.d.mts +4 -3
  14. package/dist/app-markdown.d.ts +4 -3
  15. package/dist/chunk-2VQKKQ6D.mjs +51 -0
  16. package/dist/{chunk-EGJDUF4Q.mjs → chunk-3ATMYLLJ.mjs} +6 -12
  17. package/dist/{chunk-HSDL2AUR.mjs → chunk-47H7VENP.mjs} +20 -32
  18. package/dist/{chunk-AAWTJW2G.mjs → chunk-6YSEHN46.mjs} +58 -27
  19. package/dist/{chunk-PUCUVI7K.mjs → chunk-72VJRKJD.mjs} +1 -1
  20. package/dist/{chunk-PC33YKTC.mjs → chunk-ARHWIOUZ.mjs} +128 -130
  21. package/dist/{chunk-2HCEC2YO.cjs → chunk-BD7FZ63M.cjs} +1 -1
  22. package/dist/{chunk-SPSQFO3Z.mjs → chunk-BDJNP7AQ.mjs} +9 -13
  23. package/dist/{chunk-X2ZUD4GI.mjs → chunk-BNSD3VDY.mjs} +1 -1
  24. package/dist/{chunk-GXXONIAR.cjs → chunk-DNLQMFER.cjs} +12 -16
  25. package/dist/{chunk-SO7CRMP6.cjs → chunk-DW34V5SM.cjs} +5 -5
  26. package/dist/{chunk-3NM6SRI6.mjs → chunk-F3VB7ONA.mjs} +10 -8
  27. package/dist/{chunk-P5HSJCXI.cjs → chunk-G6GNNB44.cjs} +291 -260
  28. package/dist/chunk-IK6LVLKC.cjs +51 -0
  29. package/dist/{chunk-B3WK4DTX.cjs → chunk-IMBMOEWT.cjs} +5 -1
  30. package/dist/{chunk-IILNZK5G.mjs → chunk-JHWOVJ3M.mjs} +46 -62
  31. package/dist/{chunk-TKNSDBBN.cjs → chunk-K3F2E6GS.cjs} +20 -1
  32. package/dist/{chunk-RTHIVJ2G.cjs → chunk-KCMTCM6I.cjs} +7 -8
  33. package/dist/{chunk-Q3PX2TGL.cjs → chunk-LQIRVSBY.cjs} +30 -40
  34. package/dist/chunk-LYLEZIG3.cjs +73 -0
  35. package/dist/{chunk-NBAHDVOJ.cjs → chunk-LYM7HY34.cjs} +20 -32
  36. package/dist/{chunk-K6FNHVDR.cjs → chunk-MPEYMSCF.cjs} +6 -12
  37. package/dist/{chunk-BHJUZ64B.cjs → chunk-QTBEAKCJ.cjs} +7 -7
  38. package/dist/{chunk-J6JRB2ER.mjs → chunk-S67OYZU7.mjs} +1 -1
  39. package/dist/chunk-SFGWNC43.mjs +97 -0
  40. package/dist/{chunk-EXUMQVY3.cjs → chunk-SIQMTHCZ.cjs} +258 -260
  41. package/dist/{chunk-AYJR42WX.cjs → chunk-UFDV5N3C.cjs} +2 -2
  42. package/dist/chunk-UYIHRDE4.cjs +97 -0
  43. package/dist/{chunk-Y4YMF2NQ.cjs → chunk-VPTDD5XF.cjs} +46 -62
  44. package/dist/{chunk-GKT4ONKN.mjs → chunk-VVJCWBIE.mjs} +2 -2
  45. package/dist/{chunk-CQHFU55R.mjs → chunk-WNUBR4CA.mjs} +5 -1
  46. package/dist/{chunk-CIAGU2X4.cjs → chunk-XSIRSMAS.cjs} +10 -8
  47. package/dist/{chunk-ONMW3EVV.mjs → chunk-YGMK6ESJ.mjs} +20 -30
  48. package/dist/chunk-YOZYCI6Z.mjs +73 -0
  49. package/dist/{chunk-HLCDYJY7.mjs → chunk-YQVSHTMR.mjs} +20 -1
  50. package/dist/{chunk-F5D4XEAS.mjs → chunk-ZZSRYEYU.mjs} +7 -8
  51. package/dist/{client-plugins-CWrhb1ir.d.mts → client-plugins-B_XzCegf.d.mts} +11 -9
  52. package/dist/{client-plugins-DPf0qZey.d.ts → client-plugins-CKsXQfXY.d.ts} +11 -9
  53. package/dist/client-plugins.d.mts +3 -2
  54. package/dist/client-plugins.d.ts +3 -2
  55. package/dist/client.d.mts +7 -6
  56. package/dist/client.d.ts +7 -6
  57. package/dist/config.d.mts +3 -2
  58. package/dist/config.d.ts +3 -2
  59. package/dist/{devtools-EZ5ORGAK.mjs → devtools-OY4SNU3P.mjs} +4 -3
  60. package/dist/{devtools-6DQHO7EK.cjs → devtools-UHRSZ7VA.cjs} +5 -4
  61. package/dist/docs.cjs +9 -6
  62. package/dist/docs.mjs +8 -5
  63. package/dist/index.cjs +23 -20
  64. package/dist/index.d.mts +14 -13
  65. package/dist/index.d.ts +14 -13
  66. package/dist/index.mjs +18 -15
  67. package/dist/instrumentation.cjs +3 -2
  68. package/dist/instrumentation.mjs +2 -1
  69. package/dist/integrations.d.mts +3 -2
  70. package/dist/integrations.d.ts +3 -2
  71. package/dist/internal/app-markdown-runtime.d.mts +3 -2
  72. package/dist/internal/app-markdown-runtime.d.ts +3 -2
  73. package/dist/internal/build-runtime.cjs +17 -14
  74. package/dist/internal/build-runtime.d.mts +5 -4
  75. package/dist/internal/build-runtime.d.ts +5 -4
  76. package/dist/internal/build-runtime.mjs +16 -13
  77. package/dist/internal/cli-runtime.cjs +10 -7
  78. package/dist/internal/cli-runtime.mjs +9 -6
  79. package/dist/internal/client-error-overlay.cjs +4 -4
  80. package/dist/internal/client-error-overlay.mjs +1 -1
  81. package/dist/internal/compression-runtime.d.mts +3 -2
  82. package/dist/internal/compression-runtime.d.ts +3 -2
  83. package/dist/internal/config-runtime.cjs +5 -4
  84. package/dist/internal/config-runtime.d.mts +4 -3
  85. package/dist/internal/config-runtime.d.ts +4 -3
  86. package/dist/internal/config-runtime.mjs +4 -3
  87. package/dist/internal/metadata-image-runtime.cjs +3 -2
  88. package/dist/internal/metadata-image-runtime.mjs +2 -1
  89. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  90. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  91. package/dist/internal/production-runtime.d.mts +9 -8
  92. package/dist/internal/production-runtime.d.ts +9 -8
  93. package/dist/layers-4PNE2HOY.cjs +18 -0
  94. package/dist/{layers-CJKSJGLN.mjs → layers-BRQF5ETU.mjs} +2 -1
  95. package/dist/{manager-NPG43N46.mjs → manager-RT733VRK.mjs} +2 -2
  96. package/dist/{manager-G4B2IPYE.cjs → manager-XZ5TX7AO.cjs} +3 -3
  97. package/dist/{metadata-CO9fRyyJ.d.mts → metadata-B08w4EYV.d.mts} +1 -1
  98. package/dist/{metadata-zY9wltwH.d.ts → metadata-IQEblkZp.d.ts} +1 -1
  99. package/dist/middleware.d.mts +5 -4
  100. package/dist/middleware.d.ts +5 -4
  101. package/dist/navigation.d.mts +6 -5
  102. package/dist/navigation.d.ts +6 -5
  103. package/dist/{nitro-TSGDUJMN.cjs → nitro-KQDU7CFE.cjs} +2 -2
  104. package/dist/{nitro-4LFVTT24.mjs → nitro-ZKLGOTVY.mjs} +1 -1
  105. package/dist/node-module-bundle-L5L7JCZ4.mjs +11 -0
  106. package/dist/node-module-bundle-VAFZOXMJ.cjs +11 -0
  107. package/dist/plugin.cjs +11 -9
  108. package/dist/plugin.d.mts +3 -2
  109. package/dist/plugin.d.ts +3 -2
  110. package/dist/plugin.mjs +10 -8
  111. package/dist/{production-runtime-CywsHwnG.d.mts → production-runtime-C3bGFEaM.d.mts} +1 -1
  112. package/dist/{production-runtime-lkfwujwK.d.ts → production-runtime-DRSOkc-d.d.ts} +1 -1
  113. package/dist/{render-plan-LVy6sGQe.d.mts → render-plan-B6CKNl4e.d.mts} +1 -1
  114. package/dist/{render-plan-DHF0GeWo.d.ts → render-plan-CCFuMLNS.d.ts} +1 -1
  115. package/dist/renderer-client.d.mts +5 -4
  116. package/dist/renderer-client.d.ts +5 -4
  117. package/dist/{request-6AkmhEYE.d.mts → request-DgD1XsTx.d.mts} +1 -1
  118. package/dist/{request-BYxlRqA9.d.ts → request-Dn6VURbE.d.ts} +1 -1
  119. package/dist/request.d.mts +4 -3
  120. package/dist/request.d.ts +4 -3
  121. package/dist/{route-rendering-Dd8Jmml7.d.mts → route-rendering-76A5I_kE.d.mts} +1 -1
  122. package/dist/{route-rendering-CWaKiUbS.d.ts → route-rendering-LAmQEdyG.d.ts} +1 -1
  123. package/dist/{router-B2m4fvve.d.ts → router-BSOOGya2.d.ts} +1 -1
  124. package/dist/{router-xwEE112q.d.mts → router-CnrRSa9d.d.mts} +1 -1
  125. package/dist/routes.d.mts +3 -2
  126. package/dist/routes.d.ts +3 -2
  127. package/dist/server-plugins.d.mts +4 -3
  128. package/dist/server-plugins.d.ts +4 -3
  129. package/dist/server.cjs +39 -26
  130. package/dist/server.d.mts +9 -8
  131. package/dist/server.d.ts +9 -8
  132. package/dist/server.mjs +24 -11
  133. package/dist/{spa-router-Y8rrXTVK.d.ts → spa-router-BMrSsG5b.d.ts} +2 -2
  134. package/dist/{spa-router-DVEHQnWo.d.mts → spa-router-DnYhWCvI.d.mts} +2 -2
  135. package/dist/testing.cjs +2 -1
  136. package/dist/testing.d.mts +3 -2
  137. package/dist/testing.d.ts +3 -2
  138. package/dist/testing.mjs +2 -1
  139. package/dist/{utils-DSPx34-A.d.mts → utils-ABkktwku.d.mts} +1 -1
  140. package/dist/{utils-Dvuny_08.d.ts → utils-C3GguS-Q.d.ts} +1 -1
  141. package/dist/version.cjs +2 -2
  142. package/dist/version.mjs +1 -1
  143. package/dist/vite.cjs +11 -9
  144. package/dist/vite.d.mts +3 -2
  145. package/dist/vite.d.ts +3 -2
  146. package/dist/vite.mjs +10 -8
  147. package/dist/workflows.cjs +2 -2
  148. package/dist/workflows.mjs +1 -1
  149. package/package.json +21 -11
  150. package/dist/layers-E4WPJNY5.cjs +0 -17
@@ -6,7 +6,7 @@ import {
6
6
  parseRouteSlotFile,
7
7
  resolveRouteRenderingConfig,
8
8
  resolveRouteRenderingConfigFromFile
9
- } from "./chunk-GKT4ONKN.mjs";
9
+ } from "./chunk-VVJCWBIE.mjs";
10
10
  import {
11
11
  collectSchemaExtensions,
12
12
  declareSchemaTables,
@@ -30,7 +30,7 @@ import {
30
30
  } from "./chunk-BOYNDCZL.mjs";
31
31
  import {
32
32
  createFarmMetadataImageResponse
33
- } from "./chunk-HLCDYJY7.mjs";
33
+ } from "./chunk-YQVSHTMR.mjs";
34
34
  import {
35
35
  createFarmImageHandler
36
36
  } from "./chunk-F6XEGFHO.mjs";
@@ -74,7 +74,7 @@ import {
74
74
  getFarmAppDirectories,
75
75
  getFarmLayerAliases,
76
76
  getFarmSourceRoots
77
- } from "./chunk-IILNZK5G.mjs";
77
+ } from "./chunk-JHWOVJ3M.mjs";
78
78
  import {
79
79
  REACT_RENDERER,
80
80
  assertFarmRendererStreamingRuntime,
@@ -144,7 +144,7 @@ import {
144
144
  } from "./chunk-OFEY6KHO.mjs";
145
145
  import {
146
146
  resolveWorkflowsConfig
147
- } from "./chunk-EGJDUF4Q.mjs";
147
+ } from "./chunk-3ATMYLLJ.mjs";
148
148
  import {
149
149
  initStorage
150
150
  } from "./chunk-UWPLULNK.mjs";
@@ -182,7 +182,7 @@ import {
182
182
  } from "./chunk-IOEH4VWN.mjs";
183
183
  import {
184
184
  APIRouteManager
185
- } from "./chunk-CQHFU55R.mjs";
185
+ } from "./chunk-WNUBR4CA.mjs";
186
186
  import {
187
187
  findProgrammaticRouteFiles,
188
188
  loadProgrammaticRouteManifests
@@ -193,6 +193,12 @@ import {
193
193
  createFarmI18nRuntime,
194
194
  getFarmI18nClientSnapshot
195
195
  } from "./chunk-JNGIWIY6.mjs";
196
+ import {
197
+ VERCEL_OG_INSTALL_HINT,
198
+ formatOptionalPeerInstallHint,
199
+ isMissingPackageError,
200
+ isOptionalPeerInstalled
201
+ } from "./chunk-YOZYCI6Z.mjs";
196
202
  import {
197
203
  isFarmAPIPathname
198
204
  } from "./chunk-XP777LRD.mjs";
@@ -265,7 +271,7 @@ import {
265
271
  } from "./chunk-Z2RZJZIZ.mjs";
266
272
  import {
267
273
  FARM_VERSION
268
- } from "./chunk-X2ZUD4GI.mjs";
274
+ } from "./chunk-BNSD3VDY.mjs";
269
275
  import {
270
276
  resolveFarmTrailingSlashRedirect,
271
277
  setFarmTrailingSlashPreference
@@ -7419,20 +7425,6 @@ __name(createFarmApp, "createFarmApp");
7419
7425
  // src/build/tailwind.ts
7420
7426
  import path11 from "path";
7421
7427
 
7422
- // src/optional-peer.ts
7423
- function isMissingPackageError(error, packageName) {
7424
- if (!error || typeof error !== "object") return false;
7425
- const { code, message } = error;
7426
- if (code !== "ERR_MODULE_NOT_FOUND" && code !== "MODULE_NOT_FOUND") return false;
7427
- if (typeof message !== "string") return false;
7428
- return message.includes(`'${packageName}'`) || message.includes(`"${packageName}"`);
7429
- }
7430
- __name(isMissingPackageError, "isMissingPackageError");
7431
- function formatOptionalPeerInstallHint(packageName, purpose, options = {}) {
7432
- return `Install "${packageName}" to ${purpose}: pnpm add ${options.dev ? "-D " : ""}${packageName}`;
7433
- }
7434
- __name(formatOptionalPeerInstallHint, "formatOptionalPeerInstallHint");
7435
-
7436
7428
  // src/build/vite-plugin-compat.ts
7437
7429
  function adaptTailwindVitePlugin(pluginOption, builder) {
7438
7430
  if (builder !== "rolldown") return pluginOption;
@@ -7525,6 +7517,26 @@ function createMissingTailwindPlugin() {
7525
7517
  }
7526
7518
  __name(createMissingTailwindPlugin, "createMissingTailwindPlugin");
7527
7519
 
7520
+ // src/image-runtime.ts
7521
+ var SHARP_INSTALL_HINT = formatOptionalPeerInstallHint("sharp", "optimize images");
7522
+ var CLOUDFLARE_IMAGE_PRESETS = /* @__PURE__ */ new Set(["cloudflare", "cloudflare-pages", "cloudflare-module"]);
7523
+ function resolveFarmImageProviderForRuntime(images, options) {
7524
+ const provider = images?.provider ?? "auto";
7525
+ if (provider === "none") return images;
7526
+ const usesSharp = options.dev ? true : provider === "node" || provider === "auto" && !CLOUDFLARE_IMAGE_PRESETS.has(options.preset || "");
7527
+ if (!usesSharp || isOptionalPeerInstalled(options.root, "sharp")) return images;
7528
+ if (provider === "node") {
7529
+ throw new Error(
7530
+ `images.provider "node" optimizes images with sharp, which is not installed. ${SHARP_INSTALL_HINT}`
7531
+ );
7532
+ }
7533
+ logger.info(
7534
+ `Image optimization is off because sharp is not installed; images use their original URLs. ${SHARP_INSTALL_HINT}, or set images.provider to "none".`
7535
+ );
7536
+ return Object.freeze({ ...images, provider: "none" });
7537
+ }
7538
+ __name(resolveFarmImageProviderForRuntime, "resolveFarmImageProviderForRuntime");
7539
+
7528
7540
  // src/schema-step-types.ts
7529
7541
  function validateSchemaSteps(owner, schema, steps) {
7530
7542
  if (steps === void 0) return;
@@ -9494,7 +9506,7 @@ function loadFarmDocsSearchDevRuntime() {
9494
9506
  }
9495
9507
  __name(loadFarmDocsSearchDevRuntime, "loadFarmDocsSearchDevRuntime");
9496
9508
  function loadFarmOpenAPIDevRuntime() {
9497
- return import("./manager-NPG43N46.mjs");
9509
+ return import("./manager-RT733VRK.mjs");
9498
9510
  }
9499
9511
  __name(loadFarmOpenAPIDevRuntime, "loadFarmOpenAPIDevRuntime");
9500
9512
  function loadFarmWorkflowsDevRuntime() {
@@ -9502,7 +9514,7 @@ function loadFarmWorkflowsDevRuntime() {
9502
9514
  }
9503
9515
  __name(loadFarmWorkflowsDevRuntime, "loadFarmWorkflowsDevRuntime");
9504
9516
  function loadFarmDevtoolsSnapshotRuntime() {
9505
- return import("./devtools-EZ5ORGAK.mjs");
9517
+ return import("./devtools-OY4SNU3P.mjs");
9506
9518
  }
9507
9519
  __name(loadFarmDevtoolsSnapshotRuntime, "loadFarmDevtoolsSnapshotRuntime");
9508
9520
  function loadFarmDevtoolsUIRuntime() {
@@ -9532,14 +9544,29 @@ function farmI18nClientBridgePlugin() {
9532
9544
  __name(farmI18nClientBridgePlugin, "farmI18nClientBridgePlugin");
9533
9545
  var FARM_SERVER_ONLY_ENTRIES = /* @__PURE__ */ new Set(["@farm.js/core/og"]);
9534
9546
  function farmServerOnlyEntriesPlugin() {
9547
+ let root = process.cwd();
9548
+ let vercelOgInstalled = false;
9535
9549
  return {
9536
9550
  name: "farm:server-only-entries",
9537
9551
  enforce: "pre",
9552
+ configResolved(config) {
9553
+ root = config.root;
9554
+ },
9538
9555
  resolveId(id, importer, options) {
9539
- if (options?.ssr || !FARM_SERVER_ONLY_ENTRIES.has(id)) return null;
9540
- this.error(
9541
- `${id} is server-only and cannot be imported into client code${importer ? ` (imported by ${importer})` : ""}. Use it from an API route or another server module.`
9542
- );
9556
+ if (!FARM_SERVER_ONLY_ENTRIES.has(id)) return null;
9557
+ const importedBy = importer ? ` (imported by ${importer})` : "";
9558
+ if (!options?.ssr) {
9559
+ this.error(
9560
+ `${id} is server-only and cannot be imported into client code${importedBy}. Use it from an API route or another server module.`
9561
+ );
9562
+ }
9563
+ vercelOgInstalled || (vercelOgInstalled = isOptionalPeerInstalled(root, "@vercel/og"));
9564
+ if (!vercelOgInstalled) {
9565
+ this.error(
9566
+ `${id} needs @vercel/og, which is not installed${importedBy}. ${VERCEL_OG_INSTALL_HINT}`
9567
+ );
9568
+ }
9569
+ return null;
9543
9570
  }
9544
9571
  };
9545
9572
  }
@@ -10180,6 +10207,7 @@ function farmPlugin(options = {}, initialPluginManager) {
10180
10207
  }
10181
10208
  const apiServerBasePath = resolveFarmAPIServerBasePath(farmConfig.api);
10182
10209
  const serverConfig = resolveFarmServerConfig(farmConfig.server);
10210
+ globalThis.__FARM_IMAGE_CONFIG__ = getPublicFarmImageConfig(farmConfig.images);
10183
10211
  let imageHandler = null;
10184
10212
  if (farmConfig.images.provider !== "none") {
10185
10213
  const { createNodeImageFetcher, createNodeImageUrlValidator, createSharpImageTransformer } = await import("./image/sharp.mjs");
@@ -14158,7 +14186,7 @@ async function defineConfig(config = {}) {
14158
14186
  const tailwindVitePlugin = await loadTailwindVitePlugin();
14159
14187
  const appRoot = path17.resolve(config.root || process.cwd());
14160
14188
  if (config.extends?.length) {
14161
- const { config: layeredConfig } = await import("./layers-CJKSJGLN.mjs").then(
14189
+ const { config: layeredConfig } = await import("./layers-BRQF5ETU.mjs").then(
14162
14190
  ({ resolveFarmLayers }) => resolveFarmLayers(config, {
14163
14191
  root: appRoot,
14164
14192
  mode: process.env.NODE_ENV === "production" ? "production" : "development"
@@ -14167,6 +14195,7 @@ async function defineConfig(config = {}) {
14167
14195
  config = layeredConfig;
14168
14196
  }
14169
14197
  config.renderer = resolveFarmRenderer(config.renderer);
14198
+ config.images = resolveFarmImageProviderForRuntime(config.images, { root: appRoot, dev: true });
14170
14199
  const rendererVitePlugins = await loadFarmRendererVitePlugins(config.renderer, appRoot, {
14171
14200
  ssr: true
14172
14201
  });
@@ -14393,6 +14422,8 @@ export {
14393
14422
  FarmPluginOptionsError,
14394
14423
  farmPluginMayAffectRuntimePath,
14395
14424
  loadTailwindVitePlugin,
14425
+ SHARP_INSTALL_HINT,
14426
+ resolveFarmImageProviderForRuntime,
14396
14427
  generateFarmClientPluginEntryCode,
14397
14428
  resolveFarmClientCacheAdapterEntry,
14398
14429
  generateClientCachePersistenceCode,
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-IOEH4VWN.mjs";
7
7
  import {
8
8
  APIRouteConflictError
9
- } from "./chunk-CQHFU55R.mjs";
9
+ } from "./chunk-WNUBR4CA.mjs";
10
10
  import {
11
11
  findProgrammaticRouteFilesInDir
12
12
  } from "./chunk-YOYF2E4U.mjs";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  compileFarmDocsAdapterEdgeManifest,
9
9
  createFarmDocsAPIHandler
10
- } from "./chunk-ONMW3EVV.mjs";
10
+ } from "./chunk-YGMK6ESJ.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-HSDL2AUR.mjs";
20
+ } from "./chunk-47H7VENP.mjs";
21
21
  import {
22
22
  generateFarmDocsSearchClientRuntime,
23
23
  isFarmDocsSearchEnabled,
@@ -26,15 +26,18 @@ import {
26
26
  import {
27
27
  FARM_PRERENDER_ENV
28
28
  } from "./chunk-6VEHUKZ2.mjs";
29
+ import {
30
+ loadFarmDocsEngine
31
+ } from "./chunk-2VQKKQ6D.mjs";
29
32
  import {
30
33
  getDefaultDeployOutputDir,
31
34
  getDeployTargetForPreset,
32
35
  hasCustomFarmRouteContext,
33
36
  resolveDeployOutputPath
34
- } from "./chunk-SPSQFO3Z.mjs";
37
+ } from "./chunk-BDJNP7AQ.mjs";
35
38
  import {
36
39
  resolveFarmInstrumentationFile
37
- } from "./chunk-F5D4XEAS.mjs";
40
+ } from "./chunk-ZZSRYEYU.mjs";
38
41
  import {
39
42
  resolveFarmInstrumentationRuntime
40
43
  } from "./chunk-H77NVNJ2.mjs";
@@ -42,6 +45,7 @@ import {
42
45
  DEFAULT_NOT_FOUND_STYLES,
43
46
  FARM_LAYOUT_ELEMENT_CLIENT_SOURCE,
44
47
  PluginManager,
48
+ SHARP_INSTALL_HINT,
45
49
  createFarmApp,
46
50
  createFarmSourceAlias,
47
51
  createFarmThemeCssPlugin,
@@ -62,15 +66,16 @@ import {
62
66
  mergeFarmProductionViteConfig,
63
67
  mergeFarmViteConfig,
64
68
  resolveFarmClientCacheAdapterEntry,
69
+ resolveFarmImageProviderForRuntime,
65
70
  resolveFarmIsolatedClientHydrationMode,
66
71
  resolveFarmNotFoundComponentPath
67
- } from "./chunk-AAWTJW2G.mjs";
72
+ } from "./chunk-6YSEHN46.mjs";
68
73
  import {
69
74
  findRequestBoundSourceBlockers,
70
75
  generateFarmTypeArtifacts,
71
76
  parseRouteRenderingDirective,
72
77
  resolveRouteRenderingConfigFromFile
73
- } from "./chunk-GKT4ONKN.mjs";
78
+ } from "./chunk-VVJCWBIE.mjs";
74
79
  import {
75
80
  isFarmPreviewDeploymentEnvironment
76
81
  } from "./chunk-BOYNDCZL.mjs";
@@ -90,7 +95,7 @@ import {
90
95
  } from "./chunk-GHFS7RUB.mjs";
91
96
  import {
92
97
  getFarmAppDirectories
93
- } from "./chunk-IILNZK5G.mjs";
98
+ } from "./chunk-JHWOVJ3M.mjs";
94
99
  import {
95
100
  REACT_RENDERER,
96
101
  getFarmRendererCapabilities,
@@ -122,7 +127,7 @@ import {
122
127
  import {
123
128
  applyFarmWorkflowVercelCrons,
124
129
  prepareFarmWorkflowsForNitro
125
- } from "./chunk-EGJDUF4Q.mjs";
130
+ } from "./chunk-3ATMYLLJ.mjs";
126
131
  import {
127
132
  getFarmIntegrationPluginServerRuntime,
128
133
  getIntegrationProviders
@@ -132,10 +137,13 @@ import {
132
137
  } from "./chunk-TIKNUAU7.mjs";
133
138
  import {
134
139
  APIRouteManager
135
- } from "./chunk-CQHFU55R.mjs";
140
+ } from "./chunk-WNUBR4CA.mjs";
136
141
  import {
137
142
  readFarmI18nCatalogs
138
143
  } from "./chunk-FV45CKBC.mjs";
144
+ import {
145
+ VERCEL_OG_INSTALL_HINT
146
+ } from "./chunk-YOZYCI6Z.mjs";
139
147
  import {
140
148
  resolveFarmAPIServerBasePath,
141
149
  resolveFarmAPIServerRoutePath
@@ -1073,6 +1081,9 @@ var NITRO_EXTERNAL_MODULES = /* @__PURE__ */ new Set([
1073
1081
  "fsevents",
1074
1082
  "esbuild",
1075
1083
  "lightningcss",
1084
+ "rolldown",
1085
+ "rolldown/experimental",
1086
+ "rolldown/utils",
1076
1087
  "rollup",
1077
1088
  "vite",
1078
1089
  "nitro",
@@ -1313,69 +1324,70 @@ function hasFarmRuntimeConfigModule(config, configModulePath) {
1313
1324
  return Boolean(configModulePath || (config.layers || []).some((layer) => layer.configFile));
1314
1325
  }
1315
1326
  __name(hasFarmRuntimeConfigModule, "hasFarmRuntimeConfigModule");
1316
- function createEsbuildTransformOptions(configuredEsbuildOptions, minify, defaultTarget) {
1317
- const {
1318
- include: _include,
1319
- exclude: _exclude,
1320
- sourceMap: _sourceMap,
1321
- loaders: _loaders,
1322
- ...configuredTransformOptions
1323
- } = configuredEsbuildOptions;
1324
- const configuredTarget = Array.isArray(configuredTransformOptions.target) ? configuredTransformOptions.target.filter(
1325
- (target) => typeof target === "string"
1326
- ) : configuredTransformOptions.target;
1327
- const transformTarget = Array.isArray(configuredTarget) && configuredTarget.length === 0 ? defaultTarget : configuredTarget ?? defaultTarget;
1328
- const transformSupported = configuredTransformOptions.supported ? Object.fromEntries(
1329
- Object.entries(configuredTransformOptions.supported).filter(
1330
- (entry) => typeof entry[1] === "boolean"
1331
- )
1332
- ) : void 0;
1333
- return {
1334
- ...configuredTransformOptions,
1335
- format: "esm",
1336
- target: transformTarget,
1337
- loader: "js",
1338
- sourcemap: false,
1339
- minify,
1340
- keepNames: configuredTransformOptions.keepNames ?? true,
1341
- legalComments: configuredTransformOptions.legalComments ?? "none",
1342
- supported: transformSupported
1343
- };
1327
+ async function minifyFarmServerChunk(code, fileName, options) {
1328
+ const rolldownUtils = await import("rolldown/utils");
1329
+ const keepNames = { function: options.keepNames, class: options.keepNames };
1330
+ const result = await rolldownUtils.minify(fileName, code, {
1331
+ module: true,
1332
+ compress: { target: options.target, keepNames },
1333
+ mangle: { keepNames },
1334
+ codegen: { legalComments: "none", asciiOnly: true },
1335
+ sourcemap: false
1336
+ });
1337
+ if (result.errors.length > 0) {
1338
+ throw new Error(`Failed to minify ${fileName}: ${result.errors[0].message}`);
1339
+ }
1340
+ return restoreLiteralModuleSpecifiers(result.code, fileName, rolldownUtils);
1341
+ }
1342
+ __name(minifyFarmServerChunk, "minifyFarmServerChunk");
1343
+ function restoreLiteralModuleSpecifiers(code, fileName, { parseSync, Visitor }) {
1344
+ if (!code.includes("import(`") && !code.includes("require(`")) return code;
1345
+ const parsed = parseSync(fileName, code, { lang: "js", sourceType: "module" });
1346
+ if (parsed.errors.length > 0) {
1347
+ throw new Error(`Failed to minify ${fileName}: ${parsed.errors[0].message}`);
1348
+ }
1349
+ const replacements = [];
1350
+ const restore = /* @__PURE__ */ __name((node) => {
1351
+ if (node?.type !== "TemplateLiteral") return;
1352
+ const template = node;
1353
+ const value = template.quasis[0]?.value.cooked;
1354
+ if (template.expressions.length > 0 || typeof value !== "string") return;
1355
+ const text = JSON.stringify(value).replace(
1356
+ /[\u007f-￿]/g,
1357
+ (character) => `\\u${character.charCodeAt(0).toString(16).padStart(4, "0")}`
1358
+ );
1359
+ replacements.push({ start: template.start, end: template.end, text });
1360
+ }, "restore");
1361
+ new Visitor({
1362
+ ImportExpression(node) {
1363
+ restore(node.source);
1364
+ },
1365
+ CallExpression(node) {
1366
+ if (node.callee.type === "Identifier" && node.callee.name === "require" && node.arguments.length === 1) {
1367
+ restore(node.arguments[0]);
1368
+ }
1369
+ }
1370
+ }).visit(parsed.program);
1371
+ let restored = "";
1372
+ let offset = 0;
1373
+ for (const { start, end, text } of replacements.sort((a, b) => a.start - b.start)) {
1374
+ restored += code.slice(offset, start) + text;
1375
+ offset = end;
1376
+ }
1377
+ return restored + code.slice(offset);
1344
1378
  }
1345
- __name(createEsbuildTransformOptions, "createEsbuildTransformOptions");
1346
- function createEsbuildChunkMinifyPlugin(configuredEsbuildOptions) {
1347
- const configuredTransformOptions = createEsbuildTransformOptions(
1348
- configuredEsbuildOptions,
1349
- true,
1350
- "esnext"
1351
- );
1352
- const transformOptions = {
1353
- format: "esm",
1354
- target: configuredTransformOptions.target,
1355
- loader: "js",
1356
- sourcemap: false,
1357
- minify: true,
1358
- keepNames: configuredTransformOptions.keepNames,
1359
- legalComments: configuredTransformOptions.legalComments,
1360
- charset: configuredTransformOptions.charset
1361
- };
1379
+ __name(restoreLiteralModuleSpecifiers, "restoreLiteralModuleSpecifiers");
1380
+ function createServerChunkMinifyPlugin(options) {
1362
1381
  return {
1363
- name: "farm-esbuild-minify",
1382
+ name: "farm-server-chunk-minify",
1364
1383
  async renderChunk(code, chunk) {
1365
- const { transform } = await import("esbuild");
1366
- const result = await transform(code, {
1367
- ...transformOptions,
1368
- sourcefile: chunk.fileName
1369
- });
1370
- if (!result.code) return null;
1371
- return {
1372
- code: result.code,
1373
- map: result.map || null
1374
- };
1384
+ const minified = await minifyFarmServerChunk(code, chunk.fileName, options);
1385
+ if (!minified) return null;
1386
+ return { code: minified, map: null };
1375
1387
  }
1376
1388
  };
1377
1389
  }
1378
- __name(createEsbuildChunkMinifyPlugin, "createEsbuildChunkMinifyPlugin");
1390
+ __name(createServerChunkMinifyPlugin, "createServerChunkMinifyPlugin");
1379
1391
  function trimSlashes(value) {
1380
1392
  return value.replace(/^\/+|\/+$/g, "");
1381
1393
  }
@@ -2188,7 +2200,7 @@ async function buildClient(productionVite, config, root, srcDir, outputDir, page
2188
2200
  if (id.includes("/api/") && id.includes("/route")) {
2189
2201
  return { id: "\0empty-api-route", external: false };
2190
2202
  }
2191
- if (id === "fsevents" || id.includes("fsevents") || id.endsWith(".node") || id === "nitro" || id === "vite" || id === "esbuild" || id === "rollup" || id.startsWith("nitro/") || id.includes("node-pre-gyp") || id.includes("nf3")) {
2203
+ if (id === "fsevents" || id.includes("fsevents") || id.endsWith(".node") || id === "nitro" || id === "vite" || id === "esbuild" || id === "rolldown" || id.startsWith("rolldown/") || id === "rollup" || id.startsWith("nitro/") || id.includes("node-pre-gyp") || id.includes("nf3")) {
2192
2204
  return { id: "\0empty-module", external: false };
2193
2205
  }
2194
2206
  return null;
@@ -4388,7 +4400,7 @@ void hydrate();
4388
4400
  __name(generateClientHydrationEntry, "generateClientHydrationEntry");
4389
4401
  async function buildSSRInMemory(productionVite, config, root, routeManager, apiRouteManager, serverRenderer, preset, collectedPageRoutes, collectedLayoutRoutes, collectedRouteSlots, isolatedClientBoundaryModules, hydrationPlanCache, rendererBuildLifetime) {
4390
4402
  const viteBuild = productionVite.build;
4391
- const { farmPlugin } = await import("./vite.mjs");
4403
+ const { farmPlugin, farmServerOnlyEntriesPlugin } = await import("./vite.mjs");
4392
4404
  const { PluginManager: PluginManager2 } = await import("./plugin.mjs");
4393
4405
  const fs = await import("fs/promises");
4394
4406
  const pluginManager = new PluginManager2({
@@ -4444,6 +4456,7 @@ async function buildSSRInMemory(productionVite, config, root, routeManager, apiR
4444
4456
  modulePath: entry.modulePath
4445
4457
  });
4446
4458
  }
4459
+ assertMetadataImageRuntimeInstalled(root, metadataImageRoutes);
4447
4460
  const applicationMetadataRoutes = Array.from(
4448
4461
  routeManager.getMetadataRoutes().values(),
4449
4462
  (entry) => ({
@@ -4487,7 +4500,7 @@ async function buildSSRInMemory(productionVite, config, root, routeManager, apiR
4487
4500
  const appDirs = getFarmAppDirectories(config);
4488
4501
  let openAPIReference = null;
4489
4502
  if (config.openapi.enabled && config.openapi.route) {
4490
- const { OpenAPIManager, renderOpenAPIReferenceHTML } = await import("./manager-NPG43N46.mjs");
4503
+ const { OpenAPIManager, renderOpenAPIReferenceHTML } = await import("./manager-RT733VRK.mjs");
4491
4504
  const openAPIManager = new OpenAPIManager(appDirs, config.openapi, {
4492
4505
  mode: "production",
4493
4506
  apiBaseURL: config.api.baseURL
@@ -4648,6 +4661,9 @@ async function buildSSRInMemory(productionVite, config, root, routeManager, apiR
4648
4661
  ...useExternalMetadataImageRuntime ? ["@vercel/og"] : [],
4649
4662
  "esbuild",
4650
4663
  "lightningcss",
4664
+ "rolldown",
4665
+ "rolldown/experimental",
4666
+ "rolldown/utils",
4651
4667
  "rollup",
4652
4668
  "@rollup/rollup-darwin-arm64",
4653
4669
  "@rollup/rollup-darwin-x64",
@@ -4703,6 +4719,7 @@ async function buildSSRInMemory(productionVite, config, root, routeManager, apiR
4703
4719
  };
4704
4720
  }
4705
4721
  },
4722
+ farmServerOnlyEntriesPlugin(),
4706
4723
  farmPlugin({ ...config, isolatedClientBoundaryModules }, pluginManager),
4707
4724
  farmEnvironmentFunctionsPlugin(),
4708
4725
  {
@@ -9277,16 +9294,9 @@ export default async function farmNitroEventHandler(event) {
9277
9294
  if (selectRolldownBuilder) nitroConfig.builder = "rolldown";
9278
9295
  const useRolldownBuilder = canReusePrebuiltSSR && (nitroConfig.builder ?? process.env.NITRO_BUILDER) === "rolldown";
9279
9296
  const shouldMinify = nitroConfig.minify !== false;
9280
- const configuredEsbuildOptions = {};
9281
- const resolvedEsbuildOptions = {
9282
- // Function-name helpers are unsafe for provider scripts that serialize a
9283
- // function with toString(); the helper is outside the emitted script scope.
9284
- keepNames: !(config.docs?.enabled && config.docs.adapter?.server),
9285
- legalComments: "none"
9286
- };
9287
- const prebuiltSSREsbuildOptions = config.docs?.enabled && config.docs.adapter?.server ? resolvedEsbuildOptions : configuredEsbuildOptions;
9288
- const useFarmEsbuildMinifier = shouldMinify && nitroConfig.sourcemap === false && !hasCustomOxcOptions && !hasLateBuildMutationConfig;
9289
- const esbuildChunkMinifier = useFarmEsbuildMinifier ? createEsbuildChunkMinifyPlugin(resolvedEsbuildOptions) : null;
9297
+ const keepServerNames = !(config.docs?.enabled && config.docs.adapter?.server);
9298
+ const useFarmServerMinifier = shouldMinify && nitroConfig.sourcemap === false && !hasCustomOxcOptions && !hasLateBuildMutationConfig;
9299
+ const serverChunkMinifier = useFarmServerMinifier ? createServerChunkMinifyPlugin({ keepNames: keepServerNames, target: "esnext" }) : null;
9290
9300
  if (canReusePrebuiltSSR) {
9291
9301
  const configuredRollupPlugins = nitroConfig.rollupConfig?.plugins;
9292
9302
  nitroConfig.rollupConfig = {
@@ -9297,7 +9307,7 @@ export default async function farmNitroEventHandler(event) {
9297
9307
  ]
9298
9308
  };
9299
9309
  }
9300
- nitroConfig.minify = useFarmEsbuildMinifier ? false : shouldMinify;
9310
+ nitroConfig.minify = useFarmServerMinifier ? false : shouldMinify;
9301
9311
  const nitroInstance = await nitroBuilder.createNitro(nitroConfig);
9302
9312
  if (config.security.csp && config.security.csp.nonce) {
9303
9313
  nitroInstance.hooks.hook("prerender:generate", async (route) => {
@@ -9347,26 +9357,25 @@ export default async function farmNitroEventHandler(event) {
9347
9357
  await copyPrebuiltSSRBundle(
9348
9358
  ssrBundle,
9349
9359
  path5.join(prerenderServerDir, FARM_SSR_OUTPUT_DIR),
9350
- {},
9351
- false,
9360
+ null,
9352
9361
  fs
9353
9362
  );
9354
9363
  await registerPrebuiltSSRPackageImport(prerenderServerDir, ssrEntryFile, fs);
9355
9364
  });
9356
9365
  });
9357
9366
  }
9358
- if (esbuildChunkMinifier || useRolldownBuilder) {
9367
+ if (serverChunkMinifier || useRolldownBuilder) {
9359
9368
  nitroInstance.hooks.hook("rollup:before", (_nitro, rollupConfig) => {
9360
9369
  if (useRolldownBuilder) {
9361
9370
  const rolldownConfig = rollupConfig;
9362
9371
  delete rolldownConfig.inject;
9363
9372
  delete rolldownConfig.jsx;
9364
9373
  }
9365
- if (esbuildChunkMinifier) {
9374
+ if (serverChunkMinifier) {
9366
9375
  const configuredPlugins = rollupConfig.plugins;
9367
9376
  rollupConfig.plugins = [
9368
9377
  ...Array.isArray(configuredPlugins) ? configuredPlugins : configuredPlugins ? [configuredPlugins] : [],
9369
- esbuildChunkMinifier
9378
+ serverChunkMinifier
9370
9379
  ];
9371
9380
  }
9372
9381
  });
@@ -9413,8 +9422,7 @@ export default async function farmNitroEventHandler(event) {
9413
9422
  canReusePrebuiltSSR ? copyPrebuiltSSRBundle(
9414
9423
  ssrBundle,
9415
9424
  path5.join(outputDir, "server", FARM_SSR_OUTPUT_DIR),
9416
- prebuiltSSREsbuildOptions,
9417
- shouldMinify,
9425
+ shouldMinify ? { keepNames: keepServerNames, target: "node18" } : null,
9418
9426
  fs
9419
9427
  ) : Promise.resolve(),
9420
9428
  runtimeCopyPromise
@@ -9458,23 +9466,7 @@ function resolveFarmNitroOutputConfig(preset, outputDir) {
9458
9466
  };
9459
9467
  }
9460
9468
  __name(resolveFarmNitroOutputConfig, "resolveFarmNitroOutputConfig");
9461
- async function copyPrebuiltSSRBundle(ssrBundle, targetDir, configuredEsbuildOptions, minify, fs) {
9462
- const {
9463
- include: _include,
9464
- exclude: _exclude,
9465
- sourceMap: _sourceMap,
9466
- loaders: _loaders,
9467
- ...configuredTransformOptions
9468
- } = configuredEsbuildOptions;
9469
- const hasConfiguredTransforms = Object.keys(configuredTransformOptions).some(
9470
- (option) => option !== "minify"
9471
- );
9472
- const transformOptions = createEsbuildTransformOptions(
9473
- configuredEsbuildOptions,
9474
- minify,
9475
- "node18"
9476
- );
9477
- const transform = minify || hasConfiguredTransforms ? (await import("esbuild")).transform : null;
9469
+ async function copyPrebuiltSSRBundle(ssrBundle, targetDir, minifyOptions, fs) {
9478
9470
  await fs.rm(targetDir, { recursive: true, force: true });
9479
9471
  await Promise.all(
9480
9472
  Object.entries(ssrBundle).map(async ([fileName, output]) => {
@@ -9484,14 +9476,7 @@ async function copyPrebuiltSSRBundle(ssrBundle, targetDir, configuredEsbuildOpti
9484
9476
  await fs.writeFile(targetPath, output.source);
9485
9477
  return;
9486
9478
  }
9487
- let code = output.code;
9488
- if (transform) {
9489
- const result = await transform(code, {
9490
- ...transformOptions,
9491
- sourcefile: fileName
9492
- });
9493
- code = result.code;
9494
- }
9479
+ const code = minifyOptions ? await minifyFarmServerChunk(output.code, fileName, minifyOptions) : output.code;
9495
9480
  await fs.writeFile(targetPath, code);
9496
9481
  })
9497
9482
  );
@@ -9666,9 +9651,7 @@ async function stageSharpRuntime(config, root, distDir, fs, preset) {
9666
9651
  try {
9667
9652
  await copyPackage("sharp", sharpRequire);
9668
9653
  if (!copiedPackages.has("sharp")) {
9669
- throw new Error(
9670
- "Farm image optimization requires sharp. Reinstall dependencies without omitting optional packages."
9671
- );
9654
+ throw new Error(`Farm image optimization requires sharp. ${SHARP_INSTALL_HINT}`);
9672
9655
  }
9673
9656
  } catch (error) {
9674
9657
  await fs.rm(stageDir, { recursive: true, force: true });
@@ -9740,22 +9723,29 @@ async function mergeStagedDirectory(sourceDir, targetDir, fs) {
9740
9723
  );
9741
9724
  }
9742
9725
  __name(mergeStagedDirectory, "mergeStagedDirectory");
9743
- async function copyMetadataImageRuntime(root, nitroFuncDir, fs) {
9726
+ function assertMetadataImageRuntimeInstalled(root, metadataImageRoutes) {
9727
+ const generated = metadataImageRoutes.find((image) => image.sourceType === "module");
9728
+ if (!generated || resolveMetadataImageRuntimePackageJson(root)) return;
9729
+ const file = generated.modulePath ? toPosixPath(path5.relative(root, generated.modulePath)) : "";
9730
+ throw new Error(
9731
+ `${file || "A generated metadata image"} renders with @vercel/og, which is not installed. ${VERCEL_OG_INSTALL_HINT}`
9732
+ );
9733
+ }
9734
+ __name(assertMetadataImageRuntimeInstalled, "assertMetadataImageRuntimeInstalled");
9735
+ function resolveMetadataImageRuntimePackageJson(root) {
9744
9736
  const projectRequire = createRequire(path5.join(root, "package.json"));
9745
- let runtimeRequire = projectRequire;
9746
- let packageJsonPath = resolvePackageJson(runtimeRequire, "@vercel/og");
9747
- if (!packageJsonPath) {
9748
- try {
9749
- runtimeRequire = createRequire(projectRequire.resolve("@farm.js/core"));
9750
- packageJsonPath = resolvePackageJson(runtimeRequire, "@vercel/og");
9751
- } catch {
9752
- }
9753
- }
9754
- if (!packageJsonPath) {
9755
- throw new Error(
9756
- "Generated metadata images require @vercel/og. Reinstall @farm.js/core with production dependencies."
9757
- );
9737
+ const packageJsonPath = resolvePackageJson(projectRequire, "@vercel/og");
9738
+ if (packageJsonPath) return packageJsonPath;
9739
+ try {
9740
+ return resolvePackageJson(createRequire(projectRequire.resolve("@farm.js/core")), "@vercel/og");
9741
+ } catch {
9742
+ return null;
9758
9743
  }
9744
+ }
9745
+ __name(resolveMetadataImageRuntimePackageJson, "resolveMetadataImageRuntimePackageJson");
9746
+ async function copyMetadataImageRuntime(root, nitroFuncDir, fs) {
9747
+ const packageJsonPath = resolveMetadataImageRuntimePackageJson(root);
9748
+ if (!packageJsonPath) return;
9759
9749
  const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf8"));
9760
9750
  const packageDir = path5.dirname(packageJsonPath);
9761
9751
  const targetDir = path5.join(nitroFuncDir, "node_modules", "@vercel", "og");
@@ -9930,6 +9920,14 @@ async function buildWithProductionNodeEnv(inputConfig, options) {
9930
9920
  outputDir: targets.outputDir
9931
9921
  }
9932
9922
  };
9923
+ config = {
9924
+ ...config,
9925
+ images: resolveFarmImageProviderForRuntime(config.images, {
9926
+ root: targets.root,
9927
+ preset: targets.preset
9928
+ })
9929
+ };
9930
+ if (config.docs?.enabled) await loadFarmDocsEngine();
9933
9931
  pluginManager.updateContext({ config });
9934
9932
  const { root, preset, srcDir, distDir, deployOutputDir } = targets;
9935
9933
  logger.info(`\u{1F69C} Building Farm.js application with preset: ${preset}...`);
@@ -10191,7 +10189,7 @@ function resolveLegacyPageEntry(config, root, srcDir) {
10191
10189
  __name(resolveLegacyPageEntry, "resolveLegacyPageEntry");
10192
10190
  async function buildNitro(config, routeManager, apiRouteManager, serverRenderer, preset, root, distDir, pluginManager) {
10193
10191
  const [{ createNitroConfig }, { createNitro, build: nitroBuild }] = await Promise.all([
10194
- import("./nitro-4LFVTT24.mjs"),
10192
+ import("./nitro-ZKLGOTVY.mjs"),
10195
10193
  import("nitro/builder")
10196
10194
  ]);
10197
10195
  let nitroConfig = await createNitroConfig(