@farm.js/core 0.1.0-beta.5 → 0.1.0-beta.7

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 (149) 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.d.mts +3 -3
  4. package/dist/api/route-manager.d.ts +3 -3
  5. package/dist/api.d.mts +3 -3
  6. package/dist/api.d.ts +3 -3
  7. package/dist/{app-CakAr8Be.d.mts → app-BWtqQu3R.d.mts} +6 -4
  8. package/dist/app-markdown.cjs +31 -7
  9. package/dist/app-markdown.cjs.map +1 -1
  10. package/dist/app-markdown.d.mts +2 -2
  11. package/dist/app-markdown.d.ts +2 -2
  12. package/dist/app-markdown.mjs +2 -1
  13. package/dist/{app-BjN-da13.d.ts → app-xltejvLY.d.ts} +6 -4
  14. package/dist/{chunk-A2LUXHD2.mjs → chunk-5VYHFKWE.mjs} +214 -58
  15. package/dist/chunk-5VYHFKWE.mjs.map +1 -0
  16. package/dist/{chunk-EEABSBKK.mjs → chunk-6F5OI5GA.mjs} +2 -2
  17. package/dist/chunk-6F5OI5GA.mjs.map +1 -0
  18. package/dist/{chunk-LLC7BNXW.mjs → chunk-7FBJLMQH.mjs} +73 -10
  19. package/dist/chunk-7FBJLMQH.mjs.map +1 -0
  20. package/dist/{chunk-NM3CRAAL.mjs → chunk-B4W3BNTL.mjs} +24 -8
  21. package/dist/chunk-B4W3BNTL.mjs.map +1 -0
  22. package/dist/{chunk-BHG3LVHH.mjs → chunk-CGIXMLSY.mjs} +15 -7
  23. package/dist/chunk-CGIXMLSY.mjs.map +1 -0
  24. package/dist/{chunk-C3DLZMBU.mjs → chunk-DJSGLHCN.mjs} +2 -2
  25. package/dist/{chunk-2NHCNRF6.mjs → chunk-GFMBXLGP.mjs} +56 -20
  26. package/dist/chunk-GFMBXLGP.mjs.map +1 -0
  27. package/dist/chunk-I4CUBGVF.mjs +93 -0
  28. package/dist/chunk-I4CUBGVF.mjs.map +1 -0
  29. package/dist/{chunk-HNIQFZKB.mjs → chunk-ME4MO2RJ.mjs} +27 -37
  30. package/dist/chunk-ME4MO2RJ.mjs.map +1 -0
  31. package/dist/{chunk-RSKVYESE.mjs → chunk-RQ633A5I.mjs} +1 -1
  32. package/dist/chunk-RQ633A5I.mjs.map +1 -0
  33. package/dist/{chunk-2CUKEMVR.mjs → chunk-WDU6QXNK.mjs} +1 -1
  34. package/dist/chunk-WDU6QXNK.mjs.map +1 -0
  35. package/dist/{chunk-QGQX7SFC.mjs → chunk-ZVWA4ZQ3.mjs} +17 -8
  36. package/dist/chunk-ZVWA4ZQ3.mjs.map +1 -0
  37. package/dist/{client-plugins-DQQ1adXM.d.mts → client-plugins-BI2R6Eae.d.mts} +74 -3
  38. package/dist/{client-plugins-Cw4qUGsw.d.ts → client-plugins-DU9oMspX.d.ts} +74 -3
  39. package/dist/client-plugins.d.mts +2 -2
  40. package/dist/client-plugins.d.ts +2 -2
  41. package/dist/client.cjs.map +1 -1
  42. package/dist/client.d.mts +2 -2
  43. package/dist/client.d.ts +2 -2
  44. package/dist/client.mjs +1 -1
  45. package/dist/config.d.mts +2 -2
  46. package/dist/config.d.ts +2 -2
  47. package/dist/{devtools-LVC3VB5P.mjs → devtools-REQTS3I7.mjs} +6 -5
  48. package/dist/{devtools-LVC3VB5P.mjs.map → devtools-REQTS3I7.mjs.map} +1 -1
  49. package/dist/docs.cjs +51 -56
  50. package/dist/docs.cjs.map +1 -1
  51. package/dist/docs.mjs +6 -5
  52. package/dist/env-types.cjs +14 -5
  53. package/dist/env-types.cjs.map +1 -1
  54. package/dist/env-types.d.mts +2 -1
  55. package/dist/env-types.d.ts +2 -1
  56. package/dist/env-types.mjs +3 -1
  57. package/dist/env.cjs.map +1 -1
  58. package/dist/env.d.mts +1 -1
  59. package/dist/env.d.ts +1 -1
  60. package/dist/env.mjs +1 -1
  61. package/dist/i18n/client.d.mts +2 -2
  62. package/dist/i18n/client.d.ts +2 -2
  63. package/dist/i18n/index.d.mts +3 -3
  64. package/dist/i18n/index.d.ts +3 -3
  65. package/dist/i18n/server.d.mts +5 -5
  66. package/dist/i18n/server.d.ts +5 -5
  67. package/dist/index.cjs +931 -567
  68. package/dist/index.cjs.map +1 -1
  69. package/dist/index.d.mts +15 -13
  70. package/dist/index.d.ts +15 -13
  71. package/dist/index.mjs +23 -16
  72. package/dist/index.mjs.map +1 -1
  73. package/dist/integrations.d.mts +2 -2
  74. package/dist/integrations.d.ts +2 -2
  75. package/dist/internal/build-runtime.cjs +643 -322
  76. package/dist/internal/build-runtime.cjs.map +1 -1
  77. package/dist/internal/build-runtime.d.mts +4 -4
  78. package/dist/internal/build-runtime.d.ts +4 -4
  79. package/dist/internal/build-runtime.mjs +11 -10
  80. package/dist/internal/config-runtime.cjs +135 -39
  81. package/dist/internal/config-runtime.cjs.map +1 -1
  82. package/dist/internal/config-runtime.d.mts +3 -3
  83. package/dist/internal/config-runtime.d.ts +3 -3
  84. package/dist/internal/config-runtime.mjs +5 -4
  85. package/dist/internal/production-runtime.d.mts +6 -6
  86. package/dist/internal/production-runtime.d.ts +6 -6
  87. package/dist/markdown.cjs +73 -8
  88. package/dist/markdown.cjs.map +1 -1
  89. package/dist/markdown.d.mts +19 -2
  90. package/dist/markdown.d.ts +19 -2
  91. package/dist/markdown.mjs +5 -1
  92. package/dist/{metadata-BAPg_Nmo.d.ts → metadata-Cm9ujH4I.d.ts} +1 -1
  93. package/dist/{metadata-_6i9oFG3.d.mts → metadata-DacXbnLA.d.mts} +1 -1
  94. package/dist/middleware.d.mts +4 -4
  95. package/dist/middleware.d.ts +4 -4
  96. package/dist/plugin.cjs +679 -434
  97. package/dist/plugin.cjs.map +1 -1
  98. package/dist/plugin.d.mts +2 -2
  99. package/dist/plugin.d.ts +2 -2
  100. package/dist/plugin.mjs +8 -7
  101. package/dist/{production-runtime-DPfgMV9Y.d.mts → production-runtime-4KKq1AVC.d.mts} +2 -2
  102. package/dist/{production-runtime-BoJDc5mc.d.ts → production-runtime-DRsWDN2x.d.ts} +2 -2
  103. package/dist/{request-BrFBuc8G.d.mts → request-Dsq4kGW0.d.mts} +1 -1
  104. package/dist/{request-BslSZIRz.d.ts → request-udtobOLv.d.ts} +1 -1
  105. package/dist/request.d.mts +2 -2
  106. package/dist/request.d.ts +2 -2
  107. package/dist/{resolver-DlOPpjkB.d.mts → resolver-DJqjLMg_.d.mts} +1 -1
  108. package/dist/{resolver-C6iecsDV.d.ts → resolver-IH4RmPEl.d.ts} +1 -1
  109. package/dist/routes.d.mts +2 -2
  110. package/dist/routes.d.ts +2 -2
  111. package/dist/{runtime-DeAAZ6gO.d.mts → runtime-Cxpq6xZN.d.mts} +2 -2
  112. package/dist/{runtime-B6GvwDS1.d.ts → runtime-bv63eUiO.d.ts} +2 -2
  113. package/dist/server-plugins.d.mts +3 -3
  114. package/dist/server-plugins.d.ts +3 -3
  115. package/dist/server.cjs +731 -447
  116. package/dist/server.cjs.map +1 -1
  117. package/dist/server.d.mts +9 -9
  118. package/dist/server.d.ts +9 -9
  119. package/dist/server.mjs +9 -8
  120. package/dist/server.mjs.map +1 -1
  121. package/dist/testing.d.mts +2 -2
  122. package/dist/testing.d.ts +2 -2
  123. package/dist/{types-BH1lhg5G.d.mts → types-BMxWr97v.d.mts} +2 -2
  124. package/dist/{types-BH1lhg5G.d.ts → types-BMxWr97v.d.ts} +2 -2
  125. package/dist/{utils-Drsyz1Vj.d.ts → utils-B-cUHwoK.d.ts} +1 -1
  126. package/dist/{utils-CHXlMDkg.d.mts → utils-Cm41AefV.d.mts} +1 -1
  127. package/dist/version.cjs +1 -1
  128. package/dist/version.cjs.map +1 -1
  129. package/dist/version.mjs +1 -1
  130. package/dist/vite.cjs +682 -437
  131. package/dist/vite.cjs.map +1 -1
  132. package/dist/vite.d.mts +2 -2
  133. package/dist/vite.d.ts +2 -2
  134. package/dist/vite.mjs +6 -5
  135. package/package.json +3 -2
  136. package/types/client.d.ts +1 -1
  137. package/types/image.d.ts +4 -0
  138. package/types/images.d.ts +59 -0
  139. package/dist/chunk-2CUKEMVR.mjs.map +0 -1
  140. package/dist/chunk-2NHCNRF6.mjs.map +0 -1
  141. package/dist/chunk-A2LUXHD2.mjs.map +0 -1
  142. package/dist/chunk-BHG3LVHH.mjs.map +0 -1
  143. package/dist/chunk-EEABSBKK.mjs.map +0 -1
  144. package/dist/chunk-HNIQFZKB.mjs.map +0 -1
  145. package/dist/chunk-LLC7BNXW.mjs.map +0 -1
  146. package/dist/chunk-NM3CRAAL.mjs.map +0 -1
  147. package/dist/chunk-QGQX7SFC.mjs.map +0 -1
  148. package/dist/chunk-RSKVYESE.mjs.map +0 -1
  149. /package/dist/{chunk-C3DLZMBU.mjs.map → chunk-DJSGLHCN.mjs.map} +0 -0
package/dist/client.d.mts CHANGED
@@ -7,7 +7,7 @@ export { F as FarmIntegrationAPI, e as FarmIntegrationAPIBodyFormat, f as FarmIn
7
7
  import { FarmRouterPathParams, FarmRouterPathParam, FarmRouterBuildOptions, FarmRouterRouteInput } from './router.mjs';
8
8
  import { F as FarmClientPluginManager } from './plugin-BJDf43dc.mjs';
9
9
  export { a as FarmClientHydrationCompleteEvent, b as FarmClientHydrationEvent, d as FarmClientHydrationMode, e as FarmClientHydrationSession, f as FarmClientLocation, g as FarmClientNavigationAction, h as FarmClientNavigationErrorEvent, i as FarmClientNavigationEvent, j as FarmClientNavigationLoadedEvent, k as FarmClientNavigationResolvedEvent, l as FarmClientNavigationSession, m as FarmClientPerformanceEvent, n as FarmClientPlugin, o as FarmClientPluginCloseEvent, p as FarmClientPluginEnforce, q as FarmClientPluginErrorEvent, r as FarmClientPluginErrorPhase, s as FarmClientPluginManagerOptions, t as FarmClientPluginMetadata, u as FarmClientPluginRegistration, v as FarmClientPluginRouter, w as FarmClientPluginSetupEvent, x as FarmClientPluginStateEvent, c as createClientPluginManager } from './plugin-BJDf43dc.mjs';
10
- import { a as FarmI18nClientSnapshot, c as FarmI18nLocale } from './types-BH1lhg5G.mjs';
10
+ import { a as FarmI18nClientSnapshot, c as FarmI18nLocale } from './types-BMxWr97v.mjs';
11
11
  export { F as FarmChunkRecoveryOptions, i as installChunkErrorRecovery, a as isChunkLoadError } from './production-runtime-C_B79w2P.mjs';
12
12
  import './client-cache-D-EZ7XVW.mjs';
13
13
  import './cache.mjs';
@@ -327,7 +327,7 @@ type PrefetchBehavior = false | "intent" | "viewport" | "render" | "none";
327
327
  /** @internal Legacy prefetch mode for backward compatibility */
328
328
  type PrefetchLegacy = boolean | "hover" | "viewport" | "none";
329
329
  /**
330
- * Augment this interface via your generated farm-routes.d.ts so Link href is typed
330
+ * Augment this interface via the generated farm.d.ts so Link href is typed
331
331
  * without passing a generic. Defaults to string when not augmented.
332
332
  */
333
333
  interface LinkDefaultRoute {
package/dist/client.d.ts CHANGED
@@ -7,7 +7,7 @@ export { F as FarmIntegrationAPI, e as FarmIntegrationAPIBodyFormat, f as FarmIn
7
7
  import { FarmRouterPathParams, FarmRouterPathParam, FarmRouterBuildOptions, FarmRouterRouteInput } from './router.js';
8
8
  import { F as FarmClientPluginManager } from './plugin-BJDf43dc.js';
9
9
  export { a as FarmClientHydrationCompleteEvent, b as FarmClientHydrationEvent, d as FarmClientHydrationMode, e as FarmClientHydrationSession, f as FarmClientLocation, g as FarmClientNavigationAction, h as FarmClientNavigationErrorEvent, i as FarmClientNavigationEvent, j as FarmClientNavigationLoadedEvent, k as FarmClientNavigationResolvedEvent, l as FarmClientNavigationSession, m as FarmClientPerformanceEvent, n as FarmClientPlugin, o as FarmClientPluginCloseEvent, p as FarmClientPluginEnforce, q as FarmClientPluginErrorEvent, r as FarmClientPluginErrorPhase, s as FarmClientPluginManagerOptions, t as FarmClientPluginMetadata, u as FarmClientPluginRegistration, v as FarmClientPluginRouter, w as FarmClientPluginSetupEvent, x as FarmClientPluginStateEvent, c as createClientPluginManager } from './plugin-BJDf43dc.js';
10
- import { a as FarmI18nClientSnapshot, c as FarmI18nLocale } from './types-BH1lhg5G.js';
10
+ import { a as FarmI18nClientSnapshot, c as FarmI18nLocale } from './types-BMxWr97v.js';
11
11
  export { F as FarmChunkRecoveryOptions, i as installChunkErrorRecovery, a as isChunkLoadError } from './production-runtime-DDEM1D2q.js';
12
12
  import './client-cache-CIlyBlmx.js';
13
13
  import './cache.js';
@@ -327,7 +327,7 @@ type PrefetchBehavior = false | "intent" | "viewport" | "render" | "none";
327
327
  /** @internal Legacy prefetch mode for backward compatibility */
328
328
  type PrefetchLegacy = boolean | "hover" | "viewport" | "none";
329
329
  /**
330
- * Augment this interface via your generated farm-routes.d.ts so Link href is typed
330
+ * Augment this interface via the generated farm.d.ts so Link href is typed
331
331
  * without passing a generic. Defaults to string when not augmented.
332
332
  */
333
333
  interface LinkDefaultRoute {
package/dist/client.mjs CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  createStore,
4
4
  useFetcher,
5
5
  useMutation
6
- } from "./chunk-2CUKEMVR.mjs";
6
+ } from "./chunk-WDU6QXNK.mjs";
7
7
  import {
8
8
  installChunkErrorRecovery,
9
9
  isChunkLoadError
package/dist/config.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { T as FarmUserConfig } from './client-plugins-DQQ1adXM.mjs';
1
+ import { T as FarmUserConfig } from './client-plugins-BI2R6Eae.mjs';
2
2
  import './plugin-BJDf43dc.mjs';
3
3
  import 'react';
4
4
  import 'http';
@@ -17,7 +17,7 @@ import './cron.mjs';
17
17
  import './env.mjs';
18
18
  import './server-action-security.mjs';
19
19
  import './image-config-Duob7wER.mjs';
20
- import './types-BH1lhg5G.mjs';
20
+ import './types-BMxWr97v.mjs';
21
21
  import './cache.mjs';
22
22
  import './route-runtime-DoOHzCAD.mjs';
23
23
 
package/dist/config.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { T as FarmUserConfig } from './client-plugins-Cw4qUGsw.js';
1
+ import { T as FarmUserConfig } from './client-plugins-DU9oMspX.js';
2
2
  import './plugin-BJDf43dc.js';
3
3
  import 'react';
4
4
  import 'http';
@@ -17,7 +17,7 @@ import './cron.js';
17
17
  import './env.js';
18
18
  import './server-action-security.js';
19
19
  import './image-config-Duob7wER.js';
20
- import './types-BH1lhg5G.js';
20
+ import './types-BMxWr97v.js';
21
21
  import './cache.js';
22
22
  import './route-runtime-DoOHzCAD.js';
23
23
 
@@ -1,15 +1,16 @@
1
1
  import {
2
2
  getDeployTargetForPreset
3
- } from "./chunk-NM3CRAAL.mjs";
3
+ } from "./chunk-B4W3BNTL.mjs";
4
4
  import "./chunk-UVCIEUJC.mjs";
5
- import "./chunk-RSKVYESE.mjs";
5
+ import "./chunk-RQ633A5I.mjs";
6
+ import "./chunk-I4CUBGVF.mjs";
6
7
  import "./chunk-74YTBPTY.mjs";
7
8
  import "./chunk-7MABZJIM.mjs";
8
9
  import "./chunk-YW7OBE6Q.mjs";
9
10
  import "./chunk-GY2STC2S.mjs";
10
11
  import "./chunk-UB5UOSHB.mjs";
11
- import "./chunk-LLC7BNXW.mjs";
12
- import "./chunk-QGQX7SFC.mjs";
12
+ import "./chunk-ZVWA4ZQ3.mjs";
13
+ import "./chunk-7FBJLMQH.mjs";
13
14
  import "./chunk-XIVV5IWN.mjs";
14
15
  import {
15
16
  resolveCronConfig
@@ -367,4 +368,4 @@ __name(createFarmDevtoolsSnapshot, "createFarmDevtoolsSnapshot");
367
368
  export {
368
369
  createFarmDevtoolsSnapshot
369
370
  };
370
- //# sourceMappingURL=devtools-LVC3VB5P.mjs.map
371
+ //# sourceMappingURL=devtools-REQTS3I7.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/devtools.ts"],"sourcesContent":["import path from \"node:path\";\nimport { getDeployTargetForPreset } from \"./config\";\nimport { resolveCronConfig, type FarmCronJob } from \"./cron\";\nimport {\n mergeFarmRouteRuntimeConfigs,\n resolveFarmRouteRuleRuntimeConfig,\n resolveFarmRouteRuntimeConfig,\n type ResolvedFarmRouteRuntimeConfig,\n} from \"./route-runtime\";\nimport type { FarmConfig } from \"./types\";\nimport type { FarmDiscoveredWorkflow } from \"./workflows\";\n\ntype RouteMapEntry = {\n pattern: string;\n modulePath: string;\n};\n\ntype RouteManagerLike = {\n getRoutes(): Map<string, RouteMapEntry>;\n getLayouts(): Map<string, RouteMapEntry>;\n getLoadings(): Map<string, RouteMapEntry>;\n getErrors(): Map<string, RouteMapEntry>;\n resolveRouteRuntimeConfig?(\n pattern: string,\n ): Promise<ResolvedFarmRouteRuntimeConfig> | ResolvedFarmRouteRuntimeConfig;\n};\n\ntype APIRouteManagerLike = {\n getRoutes(): Map<\n string,\n {\n path: string;\n filePath: string;\n methods: string[];\n runtime?: \"auto\" | \"node\" | \"edge\";\n regions?: \"auto\" | readonly string[];\n maxDuration?: \"auto\" | number;\n }\n >;\n};\n\ntype MiddlewareManagerLike = {\n getMiddlewares(): Array<{\n path: string;\n filePath: string;\n handlers: unknown[];\n source?: \"config\" | \"file\";\n }>;\n};\n\ntype IntegrationLike = {\n kind?: string;\n type?: string;\n category?: string;\n serverRuntime?: boolean;\n routes?: ReadonlyArray<{\n path: string;\n method?: string;\n methods?: readonly string[];\n }>;\n middleware?: readonly unknown[];\n providers?: readonly unknown[];\n schema?: {\n models?: Record<string, unknown>;\n };\n};\n\nexport type FarmDevtoolsRuntime = {\n runtime: \"auto\" | \"node\" | \"edge\";\n regions?: string[];\n maxDuration?: number;\n};\n\nexport type FarmDevtoolsDiagnostic = {\n severity: \"error\" | \"warning\" | \"info\";\n code: string;\n title: string;\n message: string;\n action?: string;\n};\n\nexport type FarmDevtoolsSnapshot = {\n generatedAt: string;\n health: \"ready\" | \"attention\" | \"error\";\n project: {\n name: string;\n root: string;\n srcDir: string;\n basePath: string;\n deploymentId: string;\n };\n deployment: {\n target: string;\n preset: string;\n outputDir?: string;\n };\n counts: {\n pages: number;\n layouts: number;\n loadingBoundaries: number;\n errorBoundaries: number;\n apiRoutes: number;\n middleware: number;\n integrations: number;\n storageMounts: number;\n cronJobs: number;\n workflows: number;\n layers: number;\n diagnostics: number;\n };\n routes: Array<{\n kind: \"page\" | \"layout\" | \"loading\" | \"error\";\n pattern: string;\n filePath: string;\n runtime?: FarmDevtoolsRuntime;\n }>;\n apiRoutes: Array<{\n path: string;\n methods: string[];\n filePath: string;\n runtime: FarmDevtoolsRuntime;\n }>;\n middleware: Array<{\n path: string;\n source: \"config\" | \"file\";\n filePath: string;\n handlerCount: number;\n }>;\n integrations: Array<{\n key: string;\n type: string;\n category: string;\n serverRuntime: boolean;\n routes: Array<{ path: string; methods: string[] }>;\n middlewareCount: number;\n providerCount: number;\n schemaModelCount: number;\n }>;\n storage: Array<{\n mount: string;\n driver: string;\n default: boolean;\n }>;\n cron: FarmCronJob[];\n workflows: Array<{\n id: string;\n filePath: string;\n routePath: string;\n schedule: string[];\n timezone?: string;\n }>;\n layers: Array<{\n name: string;\n source: string;\n srcDir: string;\n }>;\n environment: {\n server: string[];\n public: string[];\n };\n docs: {\n enabled: boolean;\n entry?: string;\n };\n features: {\n openapi: boolean;\n markdown: boolean;\n serverComponents: boolean;\n serverActions: boolean;\n optimizedBoundary: boolean;\n observability: boolean;\n };\n diagnostics: FarmDevtoolsDiagnostic[];\n};\n\nexport interface CreateFarmDevtoolsSnapshotInput {\n root: string;\n srcDir: string;\n routeManager: RouteManagerLike;\n apiRouteManager: APIRouteManagerLike;\n middlewareManager: MiddlewareManagerLike;\n config?: FarmConfig & { openapi?: { enabled?: boolean } };\n workflows?: readonly FarmDiscoveredWorkflow[];\n now?: () => Date;\n env?: Record<string, string | undefined>;\n}\n\nfunction normalizePath(value: string): string {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction toProjectPath(root: string, filePath: string): string {\n const normalizedRoot = normalizePath(root).replace(/\\/$/, \"\");\n const normalizedFile = normalizePath(filePath);\n if (normalizedFile.startsWith(normalizedRoot + \"/\")) {\n return normalizedFile.slice(normalizedRoot.length + 1);\n }\n return normalizedFile;\n}\n\nfunction sortByPath<T extends { path?: string; pattern?: string }>(items: T[]): T[] {\n return [...items].sort((a, b) =>\n (a.path || a.pattern || \"\").localeCompare(b.path || b.pattern || \"\"),\n );\n}\n\nfunction toRuntime(value: ResolvedFarmRouteRuntimeConfig): FarmDevtoolsRuntime {\n return {\n runtime: value.runtime,\n ...(value.regions ? { regions: [...value.regions] } : {}),\n ...(value.maxDuration ? { maxDuration: value.maxDuration } : {}),\n };\n}\n\nasync function collectRoutes(\n root: string,\n kind: FarmDevtoolsSnapshot[\"routes\"][number][\"kind\"],\n routes: Map<string, RouteMapEntry>,\n routeManager: RouteManagerLike,\n diagnostics: FarmDevtoolsDiagnostic[],\n): Promise<FarmDevtoolsSnapshot[\"routes\"]> {\n return Promise.all(\n Array.from(routes.values()).map(async (route) => {\n let runtime: FarmDevtoolsRuntime | undefined;\n if (kind === \"page\" && routeManager.resolveRouteRuntimeConfig) {\n try {\n runtime = toRuntime(await routeManager.resolveRouteRuntimeConfig(route.pattern));\n } catch (error) {\n diagnostics.push({\n severity: \"warning\",\n code: \"ROUTE_RUNTIME_UNRESOLVED\",\n title: `Could not inspect ${route.pattern}`,\n message: error instanceof Error ? error.message : String(error),\n action: \"Check the route and inherited layout runtime exports.\",\n });\n }\n }\n\n return {\n kind,\n pattern: route.pattern,\n filePath: toProjectPath(root, route.modulePath),\n ...(runtime ? { runtime } : {}),\n };\n }),\n );\n}\n\nfunction collectIntegrations(integrations: FarmConfig[\"integrations\"] | undefined) {\n if (!integrations || typeof integrations !== \"object\") return [];\n\n return Object.entries(integrations)\n .filter((entry): entry is [string, NonNullable<(typeof entry)[1]>] => Boolean(entry[1]))\n .map(([key, value]) => {\n const integration = value as IntegrationLike;\n const routes = (integration.routes || []).map((route) => ({\n path: route.path,\n methods: [...(route.methods || (route.method ? [route.method] : [\"ALL\"]))]\n .map((method) => method.toUpperCase())\n .sort(),\n }));\n\n return {\n key,\n type: integration.type || key,\n category: integration.category || \"custom\",\n serverRuntime: integration.serverRuntime !== false,\n routes: sortByPath(routes),\n middlewareCount: integration.middleware?.length || 0,\n providerCount: integration.providers?.length || 0,\n schemaModelCount: Object.keys(integration.schema?.models || {}).length,\n };\n })\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nfunction collectStorage(storage: FarmConfig[\"storage\"] | undefined): {\n entries: FarmDevtoolsSnapshot[\"storage\"];\n configured: boolean;\n} {\n if (!storage || typeof storage !== \"object\") {\n return {\n entries: [{ mount: \"root\", driver: \"memory\", default: true }],\n configured: false,\n };\n }\n\n const value = storage as Record<string, any>;\n if (value.kind === \"farm-storage-client\") {\n return {\n entries: [{ mount: \"root\", driver: \"storage client\", default: false }],\n configured: true,\n };\n }\n\n const configured = Object.keys(value).length > 0;\n const rootDriver = value.client\n ? describeStorageDriver(value.client)\n : describeStorageDriver(value.driver);\n const entries: FarmDevtoolsSnapshot[\"storage\"] = [\n {\n mount: \"root\",\n driver: rootDriver,\n default: !configured,\n },\n ];\n\n if (value.mounts && typeof value.mounts === \"object\") {\n for (const [mount, mountConfig] of Object.entries(value.mounts)) {\n entries.push({\n mount,\n driver: describeStorageDriver(mountConfig),\n default: false,\n });\n }\n }\n\n return {\n entries: entries.sort((a, b) => {\n if (a.mount === \"root\") return -1;\n if (b.mount === \"root\") return 1;\n return a.mount.localeCompare(b.mount);\n }),\n configured,\n };\n}\n\nfunction describeStorageDriver(value: unknown): string {\n if (!value) return \"memory\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"function\") return \"custom\";\n if (typeof value !== \"object\") return \"custom\";\n\n const record = value as Record<string, unknown>;\n if (record.kind === \"farm-storage-client\") return \"storage client\";\n if (typeof record.driver === \"string\") return record.driver;\n if (typeof record.driver === \"function\") return \"custom\";\n return \"custom\";\n}\n\nfunction featureEnabled(value: unknown): boolean {\n if (!value) return false;\n if (typeof value === \"object\" && \"enabled\" in value) {\n return (value as { enabled?: boolean }).enabled !== false;\n }\n return value !== false;\n}\n\nfunction collectEnvironmentKeys(config: FarmConfig | undefined) {\n const env = config?.env as\n | { server?: Record<string, unknown>; public?: Record<string, unknown> }\n | undefined;\n return {\n server: Object.keys(env?.server || {}).sort(),\n public: Object.keys(env?.public || {}).sort(),\n };\n}\n\nfunction resolveHealth(diagnostics: FarmDevtoolsDiagnostic[]): FarmDevtoolsSnapshot[\"health\"] {\n if (diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) return \"error\";\n if (diagnostics.some((diagnostic) => diagnostic.severity === \"warning\")) return \"attention\";\n return \"ready\";\n}\n\nexport async function createFarmDevtoolsSnapshot(\n input: CreateFarmDevtoolsSnapshotInput,\n): Promise<FarmDevtoolsSnapshot> {\n const config = input.config || {};\n const diagnostics: FarmDevtoolsDiagnostic[] = [];\n const pageRoutes = await collectRoutes(\n input.root,\n \"page\",\n input.routeManager.getRoutes(),\n input.routeManager,\n diagnostics,\n );\n const layoutRoutes = await collectRoutes(\n input.root,\n \"layout\",\n input.routeManager.getLayouts(),\n input.routeManager,\n diagnostics,\n );\n const loadingRoutes = await collectRoutes(\n input.root,\n \"loading\",\n input.routeManager.getLoadings(),\n input.routeManager,\n diagnostics,\n );\n const errorRoutes = await collectRoutes(\n input.root,\n \"error\",\n input.routeManager.getErrors(),\n input.routeManager,\n diagnostics,\n );\n const apiRoutes = sortByPath(\n Array.from(input.apiRouteManager.getRoutes().values()).map((route) => {\n const runtime = resolveFarmRouteRuntimeConfig(\n mergeFarmRouteRuntimeConfigs(\n resolveFarmRouteRuleRuntimeConfig(route.path, config.routeRules),\n route,\n ),\n `API route \"${route.path}\"`,\n );\n return {\n path: route.path,\n methods: [...route.methods].sort(),\n filePath: toProjectPath(input.root, route.filePath),\n runtime: toRuntime(runtime),\n };\n }),\n );\n const middleware = sortByPath(\n input.middlewareManager.getMiddlewares().map((entry) => ({\n path: entry.path,\n source: entry.source || \"file\",\n filePath: toProjectPath(input.root, entry.filePath),\n handlerCount: entry.handlers.length,\n })),\n );\n const integrations = collectIntegrations(config.integrations);\n const storage = collectStorage(config.storage);\n const cron = resolveCronConfig(config.cron);\n const workflows = (input.workflows || [])\n .map((workflow) => ({\n id: workflow.id,\n filePath: toProjectPath(input.root, workflow.filePath),\n routePath: workflow.routePath,\n schedule: [...workflow.schedule],\n ...(workflow.timezone ? { timezone: workflow.timezone } : {}),\n }))\n .sort((a, b) => a.id.localeCompare(b.id));\n const layers = (config.layers || []).map((layer) => ({\n name: layer.name,\n source: layer.source,\n srcDir: layer.srcDir,\n }));\n const deploymentPreset = String(config.deploy?.preset || config.preset || \"node-server\");\n const deploymentTarget = String(\n config.deploy?.target || getDeployTargetForPreset(deploymentPreset) || \"node\",\n );\n const env = input.env || process.env;\n\n if (pageRoutes.length === 0) {\n diagnostics.push({\n severity: \"warning\",\n code: \"NO_PAGE_ROUTES\",\n title: \"No page routes found\",\n message: `Farm did not discover a page under ${input.srcDir}/app.`,\n action: `Add ${input.srcDir}/app/page.tsx or a programmatic page route.`,\n });\n }\n if (layoutRoutes.length === 0) {\n diagnostics.push({\n severity: \"warning\",\n code: \"ROOT_LAYOUT_MISSING\",\n title: \"Root layout is missing\",\n message: \"The application has no shared root layout.\",\n action: `Add ${input.srcDir}/app/layout.tsx for shared metadata and application chrome.`,\n });\n }\n\n const apiPaths = new Set(apiRoutes.map((route) => route.path));\n for (const job of cron.jobs) {\n if (!apiPaths.has(job.path)) {\n diagnostics.push({\n severity: \"warning\",\n code: \"CRON_ROUTE_MISSING\",\n title: `Cron route ${job.path} was not found`,\n message: `${job.name} is scheduled, but its GET API route is not registered.`,\n action: \"Add the target API route or update the cron path in farm.config.ts.\",\n });\n }\n }\n if (cron.jobs.length > 0 && !env[cron.secretEnv]) {\n diagnostics.push({\n severity: \"info\",\n code: \"CRON_SECRET_NOT_SET\",\n title: `${cron.secretEnv} is not set`,\n message: \"Local manual runs remain available, but production cron routes fail closed.\",\n action: `Set ${cron.secretEnv} in the deployment environment before production.`,\n });\n }\n if (\n storage.configured &&\n storage.entries[0]?.driver === \"memory\" &&\n [\"vercel\", \"cloudflare\", \"netlify\"].includes(deploymentTarget)\n ) {\n diagnostics.push({\n severity: \"warning\",\n code: \"EPHEMERAL_PRODUCTION_STORAGE\",\n title: \"Production storage is in memory\",\n message: `${deploymentTarget} instances do not preserve in-memory data across executions.`,\n action: \"Configure a durable storage driver or mount for production state.\",\n });\n }\n\n const environment = collectEnvironmentKeys(config);\n const docs = config.docs;\n const docsEnabled = featureEnabled(docs);\n const allRoutes = sortByPath([...pageRoutes, ...layoutRoutes, ...loadingRoutes, ...errorRoutes]);\n\n return {\n generatedAt: (input.now?.() || new Date()).toISOString(),\n health: resolveHealth(diagnostics),\n project: {\n name: path.basename(path.resolve(input.root)),\n root: input.root,\n srcDir: input.srcDir,\n basePath: config.basePath || \"/\",\n deploymentId: config.deploymentId || \"development\",\n },\n deployment: {\n target: deploymentTarget,\n preset: deploymentPreset,\n ...(config.deploy?.outputDir ? { outputDir: config.deploy.outputDir } : {}),\n },\n counts: {\n pages: pageRoutes.length,\n layouts: layoutRoutes.length,\n loadingBoundaries: loadingRoutes.length,\n errorBoundaries: errorRoutes.length,\n apiRoutes: apiRoutes.length,\n middleware: middleware.length,\n integrations: integrations.length,\n storageMounts: storage.entries.length,\n cronJobs: cron.jobs.length,\n workflows: workflows.length,\n layers: layers.length,\n diagnostics: diagnostics.length,\n },\n routes: allRoutes,\n apiRoutes,\n middleware,\n integrations,\n storage: storage.entries,\n cron: cron.jobs,\n workflows,\n layers,\n environment,\n docs: {\n enabled: docsEnabled,\n entry:\n docsEnabled && docs && typeof docs === \"object\" && \"entry\" in docs\n ? String(docs.entry)\n : undefined,\n },\n features: {\n openapi: Boolean(config.openapi?.enabled),\n markdown: featureEnabled(config.md),\n serverComponents: Boolean(config.experimental?.serverComponents),\n serverActions: Boolean(config.experimental?.serverActions),\n optimizedBoundary: Boolean(config.experimental?.optimizedBoundary),\n observability: featureEnabled(config.observability),\n },\n diagnostics,\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/devtools.ts"],"sourcesContent":["import path from \"node:path\";\nimport { getDeployTargetForPreset } from \"./config\";\nimport { resolveCronConfig, type FarmCronJob } from \"./cron\";\nimport {\n mergeFarmRouteRuntimeConfigs,\n resolveFarmRouteRuleRuntimeConfig,\n resolveFarmRouteRuntimeConfig,\n type ResolvedFarmRouteRuntimeConfig,\n} from \"./route-runtime\";\nimport type { FarmConfig } from \"./types\";\nimport type { FarmDiscoveredWorkflow } from \"./workflows\";\n\ntype RouteMapEntry = {\n pattern: string;\n modulePath: string;\n};\n\ntype RouteManagerLike = {\n getRoutes(): Map<string, RouteMapEntry>;\n getLayouts(): Map<string, RouteMapEntry>;\n getLoadings(): Map<string, RouteMapEntry>;\n getErrors(): Map<string, RouteMapEntry>;\n resolveRouteRuntimeConfig?(\n pattern: string,\n ): Promise<ResolvedFarmRouteRuntimeConfig> | ResolvedFarmRouteRuntimeConfig;\n};\n\ntype APIRouteManagerLike = {\n getRoutes(): Map<\n string,\n {\n path: string;\n filePath: string;\n methods: string[];\n runtime?: \"auto\" | \"node\" | \"edge\";\n regions?: \"auto\" | readonly string[];\n maxDuration?: \"auto\" | number;\n }\n >;\n};\n\ntype MiddlewareManagerLike = {\n getMiddlewares(): Array<{\n path: string;\n filePath: string;\n handlers: unknown[];\n source?: \"config\" | \"file\";\n }>;\n};\n\ntype IntegrationLike = {\n kind?: string;\n type?: string;\n category?: string;\n serverRuntime?: boolean;\n routes?: ReadonlyArray<{\n path: string;\n method?: string;\n methods?: readonly string[];\n }>;\n middleware?: readonly unknown[];\n providers?: readonly unknown[];\n schema?: {\n models?: Record<string, unknown>;\n };\n};\n\nexport type FarmDevtoolsRuntime = {\n runtime: \"auto\" | \"node\" | \"edge\";\n regions?: string[];\n maxDuration?: number;\n};\n\nexport type FarmDevtoolsDiagnostic = {\n severity: \"error\" | \"warning\" | \"info\";\n code: string;\n title: string;\n message: string;\n action?: string;\n};\n\nexport type FarmDevtoolsSnapshot = {\n generatedAt: string;\n health: \"ready\" | \"attention\" | \"error\";\n project: {\n name: string;\n root: string;\n srcDir: string;\n basePath: string;\n deploymentId: string;\n };\n deployment: {\n target: string;\n preset: string;\n outputDir?: string;\n };\n counts: {\n pages: number;\n layouts: number;\n loadingBoundaries: number;\n errorBoundaries: number;\n apiRoutes: number;\n middleware: number;\n integrations: number;\n storageMounts: number;\n cronJobs: number;\n workflows: number;\n layers: number;\n diagnostics: number;\n };\n routes: Array<{\n kind: \"page\" | \"layout\" | \"loading\" | \"error\";\n pattern: string;\n filePath: string;\n runtime?: FarmDevtoolsRuntime;\n }>;\n apiRoutes: Array<{\n path: string;\n methods: string[];\n filePath: string;\n runtime: FarmDevtoolsRuntime;\n }>;\n middleware: Array<{\n path: string;\n source: \"config\" | \"file\";\n filePath: string;\n handlerCount: number;\n }>;\n integrations: Array<{\n key: string;\n type: string;\n category: string;\n serverRuntime: boolean;\n routes: Array<{ path: string; methods: string[] }>;\n middlewareCount: number;\n providerCount: number;\n schemaModelCount: number;\n }>;\n storage: Array<{\n mount: string;\n driver: string;\n default: boolean;\n }>;\n cron: FarmCronJob[];\n workflows: Array<{\n id: string;\n filePath: string;\n routePath: string;\n schedule: string[];\n timezone?: string;\n }>;\n layers: Array<{\n name: string;\n source: string;\n srcDir: string;\n }>;\n environment: {\n server: string[];\n public: string[];\n };\n docs: {\n enabled: boolean;\n entry?: string;\n };\n features: {\n openapi: boolean;\n markdown: boolean;\n serverComponents: boolean;\n serverActions: boolean;\n optimizedBoundary: boolean;\n observability: boolean;\n };\n diagnostics: FarmDevtoolsDiagnostic[];\n};\n\nexport interface CreateFarmDevtoolsSnapshotInput {\n root: string;\n srcDir: string;\n routeManager: RouteManagerLike;\n apiRouteManager: APIRouteManagerLike;\n middlewareManager: MiddlewareManagerLike;\n config?: FarmConfig & { openapi?: { enabled?: boolean } };\n workflows?: readonly FarmDiscoveredWorkflow[];\n now?: () => Date;\n env?: Record<string, string | undefined>;\n}\n\nfunction normalizePath(value: string): string {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction toProjectPath(root: string, filePath: string): string {\n const normalizedRoot = normalizePath(root).replace(/\\/$/, \"\");\n const normalizedFile = normalizePath(filePath);\n if (normalizedFile.startsWith(normalizedRoot + \"/\")) {\n return normalizedFile.slice(normalizedRoot.length + 1);\n }\n return normalizedFile;\n}\n\nfunction sortByPath<T extends { path?: string; pattern?: string }>(items: T[]): T[] {\n return [...items].sort((a, b) =>\n (a.path || a.pattern || \"\").localeCompare(b.path || b.pattern || \"\"),\n );\n}\n\nfunction toRuntime(value: ResolvedFarmRouteRuntimeConfig): FarmDevtoolsRuntime {\n return {\n runtime: value.runtime,\n ...(value.regions ? { regions: [...value.regions] } : {}),\n ...(value.maxDuration ? { maxDuration: value.maxDuration } : {}),\n };\n}\n\nasync function collectRoutes(\n root: string,\n kind: FarmDevtoolsSnapshot[\"routes\"][number][\"kind\"],\n routes: Map<string, RouteMapEntry>,\n routeManager: RouteManagerLike,\n diagnostics: FarmDevtoolsDiagnostic[],\n): Promise<FarmDevtoolsSnapshot[\"routes\"]> {\n return Promise.all(\n Array.from(routes.values()).map(async (route) => {\n let runtime: FarmDevtoolsRuntime | undefined;\n if (kind === \"page\" && routeManager.resolveRouteRuntimeConfig) {\n try {\n runtime = toRuntime(await routeManager.resolveRouteRuntimeConfig(route.pattern));\n } catch (error) {\n diagnostics.push({\n severity: \"warning\",\n code: \"ROUTE_RUNTIME_UNRESOLVED\",\n title: `Could not inspect ${route.pattern}`,\n message: error instanceof Error ? error.message : String(error),\n action: \"Check the route and inherited layout runtime exports.\",\n });\n }\n }\n\n return {\n kind,\n pattern: route.pattern,\n filePath: toProjectPath(root, route.modulePath),\n ...(runtime ? { runtime } : {}),\n };\n }),\n );\n}\n\nfunction collectIntegrations(integrations: FarmConfig[\"integrations\"] | undefined) {\n if (!integrations || typeof integrations !== \"object\") return [];\n\n return Object.entries(integrations)\n .filter((entry): entry is [string, NonNullable<(typeof entry)[1]>] => Boolean(entry[1]))\n .map(([key, value]) => {\n const integration = value as IntegrationLike;\n const routes = (integration.routes || []).map((route) => ({\n path: route.path,\n methods: [...(route.methods || (route.method ? [route.method] : [\"ALL\"]))]\n .map((method) => method.toUpperCase())\n .sort(),\n }));\n\n return {\n key,\n type: integration.type || key,\n category: integration.category || \"custom\",\n serverRuntime: integration.serverRuntime !== false,\n routes: sortByPath(routes),\n middlewareCount: integration.middleware?.length || 0,\n providerCount: integration.providers?.length || 0,\n schemaModelCount: Object.keys(integration.schema?.models || {}).length,\n };\n })\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nfunction collectStorage(storage: FarmConfig[\"storage\"] | undefined): {\n entries: FarmDevtoolsSnapshot[\"storage\"];\n configured: boolean;\n} {\n if (!storage || typeof storage !== \"object\") {\n return {\n entries: [{ mount: \"root\", driver: \"memory\", default: true }],\n configured: false,\n };\n }\n\n const value = storage as Record<string, any>;\n if (value.kind === \"farm-storage-client\") {\n return {\n entries: [{ mount: \"root\", driver: \"storage client\", default: false }],\n configured: true,\n };\n }\n\n const configured = Object.keys(value).length > 0;\n const rootDriver = value.client\n ? describeStorageDriver(value.client)\n : describeStorageDriver(value.driver);\n const entries: FarmDevtoolsSnapshot[\"storage\"] = [\n {\n mount: \"root\",\n driver: rootDriver,\n default: !configured,\n },\n ];\n\n if (value.mounts && typeof value.mounts === \"object\") {\n for (const [mount, mountConfig] of Object.entries(value.mounts)) {\n entries.push({\n mount,\n driver: describeStorageDriver(mountConfig),\n default: false,\n });\n }\n }\n\n return {\n entries: entries.sort((a, b) => {\n if (a.mount === \"root\") return -1;\n if (b.mount === \"root\") return 1;\n return a.mount.localeCompare(b.mount);\n }),\n configured,\n };\n}\n\nfunction describeStorageDriver(value: unknown): string {\n if (!value) return \"memory\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"function\") return \"custom\";\n if (typeof value !== \"object\") return \"custom\";\n\n const record = value as Record<string, unknown>;\n if (record.kind === \"farm-storage-client\") return \"storage client\";\n if (typeof record.driver === \"string\") return record.driver;\n if (typeof record.driver === \"function\") return \"custom\";\n return \"custom\";\n}\n\nfunction featureEnabled(value: unknown): boolean {\n if (!value) return false;\n if (typeof value === \"object\" && \"enabled\" in value) {\n return (value as { enabled?: boolean }).enabled !== false;\n }\n return value !== false;\n}\n\nfunction collectEnvironmentKeys(config: FarmConfig | undefined) {\n const env = config?.env as\n | { server?: Record<string, unknown>; public?: Record<string, unknown> }\n | undefined;\n return {\n server: Object.keys(env?.server || {}).sort(),\n public: Object.keys(env?.public || {}).sort(),\n };\n}\n\nfunction resolveHealth(diagnostics: FarmDevtoolsDiagnostic[]): FarmDevtoolsSnapshot[\"health\"] {\n if (diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) return \"error\";\n if (diagnostics.some((diagnostic) => diagnostic.severity === \"warning\")) return \"attention\";\n return \"ready\";\n}\n\nexport async function createFarmDevtoolsSnapshot(\n input: CreateFarmDevtoolsSnapshotInput,\n): Promise<FarmDevtoolsSnapshot> {\n const config = input.config || {};\n const diagnostics: FarmDevtoolsDiagnostic[] = [];\n const pageRoutes = await collectRoutes(\n input.root,\n \"page\",\n input.routeManager.getRoutes(),\n input.routeManager,\n diagnostics,\n );\n const layoutRoutes = await collectRoutes(\n input.root,\n \"layout\",\n input.routeManager.getLayouts(),\n input.routeManager,\n diagnostics,\n );\n const loadingRoutes = await collectRoutes(\n input.root,\n \"loading\",\n input.routeManager.getLoadings(),\n input.routeManager,\n diagnostics,\n );\n const errorRoutes = await collectRoutes(\n input.root,\n \"error\",\n input.routeManager.getErrors(),\n input.routeManager,\n diagnostics,\n );\n const apiRoutes = sortByPath(\n Array.from(input.apiRouteManager.getRoutes().values()).map((route) => {\n const runtime = resolveFarmRouteRuntimeConfig(\n mergeFarmRouteRuntimeConfigs(\n resolveFarmRouteRuleRuntimeConfig(route.path, config.routeRules),\n route,\n ),\n `API route \"${route.path}\"`,\n );\n return {\n path: route.path,\n methods: [...route.methods].sort(),\n filePath: toProjectPath(input.root, route.filePath),\n runtime: toRuntime(runtime),\n };\n }),\n );\n const middleware = sortByPath(\n input.middlewareManager.getMiddlewares().map((entry) => ({\n path: entry.path,\n source: entry.source || \"file\",\n filePath: toProjectPath(input.root, entry.filePath),\n handlerCount: entry.handlers.length,\n })),\n );\n const integrations = collectIntegrations(config.integrations);\n const storage = collectStorage(config.storage);\n const cron = resolveCronConfig(config.cron);\n const workflows = (input.workflows || [])\n .map((workflow) => ({\n id: workflow.id,\n filePath: toProjectPath(input.root, workflow.filePath),\n routePath: workflow.routePath,\n schedule: [...workflow.schedule],\n ...(workflow.timezone ? { timezone: workflow.timezone } : {}),\n }))\n .sort((a, b) => a.id.localeCompare(b.id));\n const layers = (config.layers || []).map((layer) => ({\n name: layer.name,\n source: layer.source,\n srcDir: layer.srcDir,\n }));\n const deploymentPreset = String(config.deploy?.preset || config.preset || \"node-server\");\n const deploymentTarget = String(\n config.deploy?.target || getDeployTargetForPreset(deploymentPreset) || \"node\",\n );\n const env = input.env || process.env;\n\n if (pageRoutes.length === 0) {\n diagnostics.push({\n severity: \"warning\",\n code: \"NO_PAGE_ROUTES\",\n title: \"No page routes found\",\n message: `Farm did not discover a page under ${input.srcDir}/app.`,\n action: `Add ${input.srcDir}/app/page.tsx or a programmatic page route.`,\n });\n }\n if (layoutRoutes.length === 0) {\n diagnostics.push({\n severity: \"warning\",\n code: \"ROOT_LAYOUT_MISSING\",\n title: \"Root layout is missing\",\n message: \"The application has no shared root layout.\",\n action: `Add ${input.srcDir}/app/layout.tsx for shared metadata and application chrome.`,\n });\n }\n\n const apiPaths = new Set(apiRoutes.map((route) => route.path));\n for (const job of cron.jobs) {\n if (!apiPaths.has(job.path)) {\n diagnostics.push({\n severity: \"warning\",\n code: \"CRON_ROUTE_MISSING\",\n title: `Cron route ${job.path} was not found`,\n message: `${job.name} is scheduled, but its GET API route is not registered.`,\n action: \"Add the target API route or update the cron path in farm.config.ts.\",\n });\n }\n }\n if (cron.jobs.length > 0 && !env[cron.secretEnv]) {\n diagnostics.push({\n severity: \"info\",\n code: \"CRON_SECRET_NOT_SET\",\n title: `${cron.secretEnv} is not set`,\n message: \"Local manual runs remain available, but production cron routes fail closed.\",\n action: `Set ${cron.secretEnv} in the deployment environment before production.`,\n });\n }\n if (\n storage.configured &&\n storage.entries[0]?.driver === \"memory\" &&\n [\"vercel\", \"cloudflare\", \"netlify\"].includes(deploymentTarget)\n ) {\n diagnostics.push({\n severity: \"warning\",\n code: \"EPHEMERAL_PRODUCTION_STORAGE\",\n title: \"Production storage is in memory\",\n message: `${deploymentTarget} instances do not preserve in-memory data across executions.`,\n action: \"Configure a durable storage driver or mount for production state.\",\n });\n }\n\n const environment = collectEnvironmentKeys(config);\n const docs = config.docs;\n const docsEnabled = featureEnabled(docs);\n const allRoutes = sortByPath([...pageRoutes, ...layoutRoutes, ...loadingRoutes, ...errorRoutes]);\n\n return {\n generatedAt: (input.now?.() || new Date()).toISOString(),\n health: resolveHealth(diagnostics),\n project: {\n name: path.basename(path.resolve(input.root)),\n root: input.root,\n srcDir: input.srcDir,\n basePath: config.basePath || \"/\",\n deploymentId: config.deploymentId || \"development\",\n },\n deployment: {\n target: deploymentTarget,\n preset: deploymentPreset,\n ...(config.deploy?.outputDir ? { outputDir: config.deploy.outputDir } : {}),\n },\n counts: {\n pages: pageRoutes.length,\n layouts: layoutRoutes.length,\n loadingBoundaries: loadingRoutes.length,\n errorBoundaries: errorRoutes.length,\n apiRoutes: apiRoutes.length,\n middleware: middleware.length,\n integrations: integrations.length,\n storageMounts: storage.entries.length,\n cronJobs: cron.jobs.length,\n workflows: workflows.length,\n layers: layers.length,\n diagnostics: diagnostics.length,\n },\n routes: allRoutes,\n apiRoutes,\n middleware,\n integrations,\n storage: storage.entries,\n cron: cron.jobs,\n workflows,\n layers,\n environment,\n docs: {\n enabled: docsEnabled,\n entry:\n docsEnabled && docs && typeof docs === \"object\" && \"entry\" in docs\n ? String(docs.entry)\n : undefined,\n },\n features: {\n openapi: Boolean(config.openapi?.enabled),\n markdown: featureEnabled(config.md),\n serverComponents: Boolean(config.experimental?.serverComponents),\n serverActions: Boolean(config.experimental?.serverActions),\n optimizedBoundary: Boolean(config.experimental?.optimizedBoundary),\n observability: featureEnabled(config.observability),\n },\n diagnostics,\n };\n}\n"],"mappings":"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","names":[]}
package/dist/docs.cjs CHANGED
@@ -1218,8 +1218,8 @@ code:not(pre code) {
1218
1218
  }
1219
1219
 
1220
1220
  .code-block-header {
1221
- min-height: 28px;
1222
- padding: 3px 7px 3px 9px;
1221
+ min-height: 34px;
1222
+ padding: 4px 8px 4px 10px;
1223
1223
  }
1224
1224
 
1225
1225
  .code-block-title {
@@ -1433,8 +1433,8 @@ code:not(pre code) {
1433
1433
  }
1434
1434
 
1435
1435
  .code-block-header {
1436
- min-height: 26px;
1437
- padding: 2px 6px 2px 8px;
1436
+ min-height: 32px;
1437
+ padding: 3px 7px 3px 9px;
1438
1438
  }
1439
1439
 
1440
1440
  .code-copy-floating {
@@ -1474,38 +1474,30 @@ code:not(pre code) {
1474
1474
 
1475
1475
  @media (max-width: 640px) {
1476
1476
  .code-block-header {
1477
- min-height: 22px;
1478
- padding: 1px 4px 1px 7px;
1479
- }
1480
-
1481
- .code-block-title {
1482
- font-size: 9px;
1483
- }
1484
-
1485
- .code-copy {
1486
- width: 20px;
1487
- height: 20px;
1488
- }
1489
-
1490
- .code-copy svg {
1491
- width: 12px;
1492
- height: 12px;
1477
+ min-height: 30px;
1478
+ padding: 3px 6px 3px 8px;
1493
1479
  }
1494
1480
 
1495
1481
  .code-copy-floating {
1496
- top: 5px;
1497
- right: 5px;
1482
+ top: 7px;
1483
+ right: 7px;
1498
1484
  }
1499
1485
 
1500
1486
  #nd-docs-layout figure.shiki.code-block pre,
1501
1487
  .code-block pre {
1502
- padding: 10px !important;
1503
- font-size: 11px;
1504
- line-height: 1.55;
1488
+ padding: 12px !important;
1489
+ font-size: 12px;
1490
+ line-height: 1.6;
1491
+ }
1492
+
1493
+ #nd-docs-layout figure.shiki.code-block-plain pre,
1494
+ .code-block-plain pre {
1495
+ padding: 16px 44px 16px 14px !important;
1496
+ line-height: 1.65;
1505
1497
  }
1506
1498
 
1507
1499
  .sh__line {
1508
- min-height: 1.55em;
1500
+ min-height: 1.6em;
1509
1501
  }
1510
1502
  }
1511
1503
 
@@ -3447,7 +3439,7 @@ function renderFarmDocsBridgeCss(docs) {
3447
3439
  .sh-code { --sh-class: #e5c07b; --sh-identifier: #c8ccd4; --sh-string: #98c379; --sh-keyword: #c678dd; --sh-comment: #5c6370; --sh-property: #e06c75; --sh-sign: #c8ccd4; --sh-space: inherit; }
3448
3440
  .code-block { --fd-code-header-bg: color-mix(in srgb, var(--color-fd-foreground, #fff) 5%, var(--color-fd-background, #000)); --fd-code-body-bg: color-mix(in srgb, var(--color-fd-foreground, #fff) 8%, var(--color-fd-background, #000)); position: relative; width: 100%; min-width: 0; max-width: 100%; margin: 20px 0; overflow: hidden; border: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: var(--color-fd-background, hsl(0 0% 2%)); box-shadow: 3px 3px 0 0 var(--color-fd-border, hsl(0 0% 15%)); font-family: var(--fd-docs-font-mono); }
3449
3441
  #nd-docs-layout figure.shiki.code-block { box-shadow: 3px 3px 0 0 var(--color-fd-border, hsl(0 0% 15%)) !important; }
3450
- .code-block-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-width: 0; min-height: 30px; border-bottom: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background-color: var(--fd-code-header-bg); background-image: repeating-linear-gradient(-45deg, color-mix(in srgb, var(--color-fd-foreground, #fff) 7%, transparent), color-mix(in srgb, var(--color-fd-foreground, #fff) 7%, transparent) 1px, transparent 1px, transparent 6px); padding: 4px 8px 4px 10px; }
3442
+ .code-block-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-width: 0; min-height: 34px; border-bottom: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background-color: var(--fd-code-header-bg); background-image: repeating-linear-gradient(-45deg, color-mix(in srgb, var(--color-fd-foreground, #fff) 4%, transparent), color-mix(in srgb, var(--color-fd-foreground, #fff) 4%, transparent) 1px, transparent 1px, transparent 6px); padding: 4px 8px 4px 10px; }
3451
3443
  .code-block-title { overflow: hidden; color: color-mix(in srgb, var(--color-fd-foreground, #fff) 50%, transparent); font-size: 10px; line-height: 1.2; text-overflow: ellipsis; text-transform: lowercase; white-space: nowrap; }
3452
3444
  .code-copy { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; flex: 0 0 auto; border: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: color-mix(in srgb, var(--color-fd-background, #000) 80%, transparent); color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); cursor: pointer; padding: 0; }
3453
3445
  .code-copy-floating { position: absolute; top: 8px; right: 8px; z-index: 2; opacity: 0.72; transition: opacity 150ms ease; }
@@ -3515,7 +3507,7 @@ function renderFarmDocsBridgeCss(docs) {
3515
3507
  .prose h2 { margin-top: 34px; padding-top: 22px; font-size: 23px; }
3516
3508
  .code-block { margin: 16px 0; box-shadow: 2px 2px 0 0 var(--color-fd-border, hsl(0 0% 15%)); }
3517
3509
  #nd-docs-layout figure.shiki.code-block { box-shadow: 2px 2px 0 0 var(--color-fd-border, hsl(0 0% 15%)) !important; }
3518
- .code-block-header { min-height: 26px; padding: 2px 6px 2px 8px; }
3510
+ .code-block-header { min-height: 32px; padding: 3px 7px 3px 9px; }
3519
3511
  .code-copy-floating { top: 6px; right: 6px; }
3520
3512
  #nd-docs-layout figure.shiki.code-block pre, .code-block pre { padding: 12px 11px !important; font-size: 12px; line-height: 1.5; }
3521
3513
  .sh__line { min-height: 1.5em; }
@@ -3525,13 +3517,11 @@ function renderFarmDocsBridgeCss(docs) {
3525
3517
  .fd-page-footer .fd-last-updated-footer { margin-left: 0; }
3526
3518
  }
3527
3519
  @media (max-width: 640px) {
3528
- .code-block-header { min-height: 22px; padding: 1px 4px 1px 7px; }
3529
- .code-block-title { font-size: 9px; }
3530
- .code-copy { width: 20px; height: 20px; }
3531
- .code-copy svg { width: 12px; height: 12px; }
3532
- .code-copy-floating { top: 5px; right: 5px; }
3533
- #nd-docs-layout figure.shiki.code-block pre, .code-block pre { padding: 10px !important; font-size: 11px; line-height: 1.55; }
3534
- .sh__line { min-height: 1.55em; }
3520
+ .code-block-header { min-height: 30px; padding: 3px 6px 3px 8px; }
3521
+ .code-copy-floating { top: 7px; right: 7px; }
3522
+ #nd-docs-layout figure.shiki.code-block pre, .code-block pre { padding: 12px !important; font-size: 12px; line-height: 1.6; }
3523
+ #nd-docs-layout figure.shiki.code-block-plain pre, .code-block-plain pre { padding: 16px 44px 16px 14px !important; line-height: 1.65; }
3524
+ .sh__line { min-height: 1.6em; }
3535
3525
  }
3536
3526
  ${farmDocsPixelBorderCss}
3537
3527
  `;
@@ -3742,9 +3732,9 @@ var import_node_events = require("events");
3742
3732
 
3743
3733
  // src/integrations.ts
3744
3734
  var FARM_INTEGRATION_INTERNAL_DISPATCH_CONTEXT_KEY = "farm.integration.internalDispatch";
3745
- function defineTypedIntegrationRoute(method, path7, input) {
3735
+ function defineTypedIntegrationRoute(method, path8, input) {
3746
3736
  return {
3747
- path: path7,
3737
+ path: path8,
3748
3738
  method,
3749
3739
  middleware: input.middleware,
3750
3740
  before: input.before,
@@ -3754,7 +3744,7 @@ function defineTypedIntegrationRoute(method, path7, input) {
3754
3744
  input: normalizeIntegrationRouteInputSchemas(input),
3755
3745
  handler: input.handler,
3756
3746
  __operation: defineIntegrationAPIOperation({
3757
- path: path7,
3747
+ path: path8,
3758
3748
  method,
3759
3749
  bodyFormat: input.bodyFormat,
3760
3750
  responseFormat: input.responseFormat,
@@ -3767,52 +3757,52 @@ function defineTypedIntegrationRoute(method, path7, input) {
3767
3757
  __name(defineTypedIntegrationRoute, "defineTypedIntegrationRoute");
3768
3758
  function createIntegrationRouteFactory() {
3769
3759
  return {
3770
- get(path7, input) {
3760
+ get(path8, input) {
3771
3761
  return defineTypedIntegrationRoute(
3772
3762
  "GET",
3773
- path7,
3763
+ path8,
3774
3764
  input
3775
3765
  );
3776
3766
  },
3777
- post(path7, input) {
3767
+ post(path8, input) {
3778
3768
  return defineTypedIntegrationRoute(
3779
3769
  "POST",
3780
- path7,
3770
+ path8,
3781
3771
  {
3782
3772
  bodyFormat: "json",
3783
3773
  ...input
3784
3774
  }
3785
3775
  );
3786
3776
  },
3787
- put(path7, input) {
3777
+ put(path8, input) {
3788
3778
  return defineTypedIntegrationRoute(
3789
3779
  "PUT",
3790
- path7,
3780
+ path8,
3791
3781
  {
3792
3782
  bodyFormat: "json",
3793
3783
  ...input
3794
3784
  }
3795
3785
  );
3796
3786
  },
3797
- patch(path7, input) {
3798
- return defineTypedIntegrationRoute("PATCH", path7, {
3787
+ patch(path8, input) {
3788
+ return defineTypedIntegrationRoute("PATCH", path8, {
3799
3789
  bodyFormat: "json",
3800
3790
  ...input
3801
3791
  });
3802
3792
  },
3803
- delete(path7, input) {
3804
- return defineTypedIntegrationRoute("DELETE", path7, {
3793
+ delete(path8, input) {
3794
+ return defineTypedIntegrationRoute("DELETE", path8, {
3805
3795
  bodyFormat: "json",
3806
3796
  ...input
3807
3797
  });
3808
3798
  },
3809
- options(path7, input) {
3810
- return defineTypedIntegrationRoute("OPTIONS", path7, input);
3799
+ options(path8, input) {
3800
+ return defineTypedIntegrationRoute("OPTIONS", path8, input);
3811
3801
  },
3812
- head(path7, input) {
3802
+ head(path8, input) {
3813
3803
  return defineTypedIntegrationRoute(
3814
3804
  "HEAD",
3815
- path7,
3805
+ path8,
3816
3806
  input
3817
3807
  );
3818
3808
  }
@@ -4051,8 +4041,8 @@ function normalizeIntegrationValidationIssues(source, error) {
4051
4041
  ];
4052
4042
  }
4053
4043
  __name(normalizeIntegrationValidationIssues, "normalizeIntegrationValidationIssues");
4054
- function normalizeIntegrationValidationPath(path7) {
4055
- return (path7 || []).map((segment) => {
4044
+ function normalizeIntegrationValidationPath(path8) {
4045
+ return (path8 || []).map((segment) => {
4056
4046
  const key = typeof segment === "object" && segment !== null && "key" in segment ? segment.key : segment;
4057
4047
  return typeof key === "symbol" ? key.description || key.toString() : key;
4058
4048
  });
@@ -4838,6 +4828,11 @@ var import_path = __toESM(require("path"));
4838
4828
  var import_node_path5 = __toESM(require("path"));
4839
4829
  var DEFAULT_FARM_I18N_COOKIE_MAX_AGE = 60 * 60 * 24 * 365;
4840
4830
 
4831
+ // src/auth-config.ts
4832
+ var import_node_module4 = require("module");
4833
+ var import_node_path6 = __toESM(require("path"));
4834
+ var import_node_url2 = require("url");
4835
+
4841
4836
  // src/config.ts
4842
4837
  var DOCS_CONFIG_FILENAMES = [
4843
4838
  "docs.config.ts",
@@ -4927,7 +4922,7 @@ async function findDocsConfigPath(rootDir, configPath) {
4927
4922
  __name(findDocsConfigPath, "findDocsConfigPath");
4928
4923
  async function loadDocsConfig(rootDir, configPath) {
4929
4924
  const fs = await import("fs/promises");
4930
- const { pathToFileURL: pathToFileURL2 } = await import("url");
4925
+ const { pathToFileURL: pathToFileURL3 } = await import("url");
4931
4926
  const root = import_path.default.resolve(rootDir || process.cwd());
4932
4927
  const resolvedPath = await findDocsConfigPath(root, configPath);
4933
4928
  if (!resolvedPath) return void 0;
@@ -4956,7 +4951,7 @@ async function loadDocsConfig(rootDir, configPath) {
4956
4951
  logLevel: "silent",
4957
4952
  sourcemap: "inline"
4958
4953
  });
4959
- const moduleUrl = pathToFileURL2(modulePath).href + `?t=${Date.now()}`;
4954
+ const moduleUrl = pathToFileURL3(modulePath).href + `?t=${Date.now()}`;
4960
4955
  let importedConfig;
4961
4956
  try {
4962
4957
  importedConfig = await import(