@aws/nx-plugin 1.0.0-rc.24 → 1.0.0-rc.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/LICENSE-THIRD-PARTY +2020 -702
  2. package/package.json +6 -6
  3. package/src/agentcore-gateway/gateway-connection/generator.d.ts +1 -1
  4. package/src/agentcore-gateway/gateway-connection/generator.js +7 -5
  5. package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
  6. package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -1
  7. package/src/agentcore-gateway/gateway-connection/schema.d.ts +1 -0
  8. package/src/agentcore-gateway/gateway-connection/schema.json +5 -0
  9. package/src/agentcore-gateway/generator.js +7 -4
  10. package/src/agentcore-gateway/generator.js.map +1 -1
  11. package/src/agentcore-gateway/mcp-connection/generator.d.ts +1 -1
  12. package/src/agentcore-gateway/mcp-connection/generator.js +7 -5
  13. package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
  14. package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -1
  15. package/src/agentcore-gateway/mcp-connection/schema.d.ts +1 -0
  16. package/src/agentcore-gateway/mcp-connection/schema.json +5 -0
  17. package/src/agentcore-gateway/schema.d.js.map +1 -1
  18. package/src/agentcore-gateway/schema.d.ts +1 -0
  19. package/src/agentcore-gateway/schema.json +5 -0
  20. package/src/connection/generator.d.ts +1 -0
  21. package/src/connection/generator.js +8 -4
  22. package/src/connection/generator.js.map +1 -1
  23. package/src/connection/schema.d.js.map +1 -1
  24. package/src/connection/schema.d.ts +1 -0
  25. package/src/connection/schema.json +5 -0
  26. package/src/infra/app/__snapshots__/generator.spec.ts.snap +29 -21
  27. package/src/infra/app/generator.js +12 -6
  28. package/src/infra/app/generator.js.map +1 -1
  29. package/src/infra/app/schema.d.js.map +1 -1
  30. package/src/infra/app/schema.d.ts +1 -1
  31. package/src/infra/app/schema.json +5 -0
  32. package/src/license/schema.d.js.map +1 -1
  33. package/src/license/schema.d.ts +2 -0
  34. package/src/license/schema.json +5 -0
  35. package/src/mcp-server/tools/general-guidance.js +17 -0
  36. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  37. package/src/preset/__snapshots__/generator.spec.ts.snap +1 -1
  38. package/src/preset/generator.d.ts +1 -1
  39. package/src/preset/generator.js +8 -5
  40. package/src/preset/generator.js.map +1 -1
  41. package/src/preset/schema.d.js.map +1 -1
  42. package/src/preset/schema.d.ts +1 -0
  43. package/src/preset/schema.json +5 -0
  44. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +9 -9
  45. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +10 -10
  46. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +1 -1
  47. package/src/py/agent/a2a-connection/generator.js +7 -4
  48. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  49. package/src/py/agent/a2a-connection/schema.d.js.map +1 -1
  50. package/src/py/agent/a2a-connection/schema.d.ts +1 -0
  51. package/src/py/agent/a2a-connection/schema.json +5 -0
  52. package/src/py/agent/gateway-connection/generator.js +7 -4
  53. package/src/py/agent/gateway-connection/generator.js.map +1 -1
  54. package/src/py/agent/gateway-connection/schema.d.js.map +1 -1
  55. package/src/py/agent/gateway-connection/schema.d.ts +1 -0
  56. package/src/py/agent/gateway-connection/schema.json +5 -0
  57. package/src/py/agent/generator.js +8 -6
  58. package/src/py/agent/generator.js.map +1 -1
  59. package/src/py/agent/mcp-connection/generator.js +7 -4
  60. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  61. package/src/py/agent/mcp-connection/schema.d.js.map +1 -1
  62. package/src/py/agent/mcp-connection/schema.d.ts +1 -0
  63. package/src/py/agent/mcp-connection/schema.json +5 -0
  64. package/src/py/agent/react-connection/generator.d.ts +1 -1
  65. package/src/py/agent/react-connection/generator.js +7 -4
  66. package/src/py/agent/react-connection/generator.js.map +1 -1
  67. package/src/py/agent/react-connection/schema.d.js.map +1 -1
  68. package/src/py/agent/react-connection/schema.d.ts +1 -0
  69. package/src/py/agent/react-connection/schema.json +5 -0
  70. package/src/py/agent/schema.d.js.map +1 -1
  71. package/src/py/agent/schema.d.ts +1 -0
  72. package/src/py/agent/schema.json +5 -0
  73. package/src/py/api/generator.js +2 -1
  74. package/src/py/api/generator.js.map +1 -1
  75. package/src/py/api/schema.d.js.map +1 -1
  76. package/src/py/api/schema.d.ts +1 -0
  77. package/src/py/api/schema.json +5 -0
  78. package/src/py/dynamodb/agent-connection/generator.js +8 -6
  79. package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
  80. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -1
  81. package/src/py/dynamodb/agent-connection/schema.d.ts +1 -0
  82. package/src/py/dynamodb/agent-connection/schema.json +5 -0
  83. package/src/py/dynamodb/fast-api-connection/generator.js +8 -6
  84. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
  85. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -1
  86. package/src/py/dynamodb/fast-api-connection/schema.d.ts +1 -0
  87. package/src/py/dynamodb/fast-api-connection/schema.json +5 -0
  88. package/src/py/dynamodb/generator.js +10 -7
  89. package/src/py/dynamodb/generator.js.map +1 -1
  90. package/src/py/dynamodb/mcp-server-connection/generator.js +8 -6
  91. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
  92. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
  93. package/src/py/dynamodb/mcp-server-connection/schema.d.ts +1 -0
  94. package/src/py/dynamodb/mcp-server-connection/schema.json +5 -0
  95. package/src/py/dynamodb/schema.d.js.map +1 -1
  96. package/src/py/dynamodb/schema.d.ts +1 -0
  97. package/src/py/dynamodb/schema.json +5 -0
  98. package/src/py/fast-api/generator.js +10 -7
  99. package/src/py/fast-api/generator.js.map +1 -1
  100. package/src/py/fast-api/react/generator.d.ts +2 -2
  101. package/src/py/fast-api/react/generator.js +7 -5
  102. package/src/py/fast-api/react/generator.js.map +1 -1
  103. package/src/py/fast-api/react/schema.d.js.map +1 -1
  104. package/src/py/fast-api/react/schema.d.ts +1 -0
  105. package/src/py/fast-api/react/schema.json +5 -0
  106. package/src/py/fast-api/schema.d.js.map +1 -1
  107. package/src/py/fast-api/schema.d.ts +1 -0
  108. package/src/py/fast-api/schema.json +5 -0
  109. package/src/py/lambda-function/generator.js +8 -6
  110. package/src/py/lambda-function/generator.js.map +1 -1
  111. package/src/py/lambda-function/schema.d.js.map +1 -1
  112. package/src/py/lambda-function/schema.d.ts +1 -0
  113. package/src/py/lambda-function/schema.json +5 -0
  114. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
  115. package/src/py/mcp-server/generator.js +8 -6
  116. package/src/py/mcp-server/generator.js.map +1 -1
  117. package/src/py/mcp-server/schema.d.js.map +1 -1
  118. package/src/py/mcp-server/schema.d.ts +1 -0
  119. package/src/py/mcp-server/schema.json +5 -0
  120. package/src/py/project/generator.js +9 -6
  121. package/src/py/project/generator.js.map +1 -1
  122. package/src/py/project/schema.d.js.map +1 -1
  123. package/src/py/project/schema.d.ts +1 -0
  124. package/src/py/project/schema.json +5 -0
  125. package/src/sdk/open-api.d.ts +1 -1
  126. package/src/sdk/open-api.js +1 -1
  127. package/src/sdk/open-api.js.map +1 -1
  128. package/src/sdk/utils/ast.d.ts +1 -2
  129. package/src/sdk/utils/ast.js +1 -2
  130. package/src/sdk/utils/ast.js.map +1 -1
  131. package/src/smithy/project/generator.js +7 -4
  132. package/src/smithy/project/generator.js.map +1 -1
  133. package/src/smithy/project/schema.d.js.map +1 -1
  134. package/src/smithy/project/schema.d.ts +1 -0
  135. package/src/smithy/project/schema.json +5 -0
  136. package/src/smithy/react-connection/generator.js +7 -4
  137. package/src/smithy/react-connection/generator.js.map +1 -1
  138. package/src/smithy/react-connection/schema.d.js.map +1 -1
  139. package/src/smithy/react-connection/schema.d.ts +1 -0
  140. package/src/smithy/react-connection/schema.json +5 -0
  141. package/src/smithy/ts/api/generator.js +11 -6
  142. package/src/smithy/ts/api/generator.js.map +1 -1
  143. package/src/smithy/ts/api/schema.d.js.map +1 -1
  144. package/src/smithy/ts/api/schema.d.ts +1 -0
  145. package/src/smithy/ts/api/schema.json +5 -0
  146. package/src/terraform/project/generator.js +13 -4
  147. package/src/terraform/project/generator.js.map +1 -1
  148. package/src/terraform/project/schema.d.js.map +1 -1
  149. package/src/terraform/project/schema.d.ts +1 -0
  150. package/src/terraform/project/schema.json +5 -0
  151. package/src/trpc/backend/generator.d.ts +1 -1
  152. package/src/trpc/backend/generator.js +9 -5
  153. package/src/trpc/backend/generator.js.map +1 -1
  154. package/src/trpc/backend/schema.d.js.map +1 -1
  155. package/src/trpc/backend/schema.d.ts +1 -0
  156. package/src/trpc/backend/schema.json +5 -0
  157. package/src/trpc/react/generator.d.ts +1 -1
  158. package/src/trpc/react/generator.js +9 -5
  159. package/src/trpc/react/generator.js.map +1 -1
  160. package/src/trpc/react/schema.d.js.map +1 -1
  161. package/src/trpc/react/schema.d.ts +1 -0
  162. package/src/trpc/react/schema.json +5 -0
  163. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +2 -2
  164. package/src/ts/agent/a2a-connection/generator.js +7 -4
  165. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  166. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -1
  167. package/src/ts/agent/a2a-connection/schema.d.ts +1 -0
  168. package/src/ts/agent/a2a-connection/schema.json +5 -0
  169. package/src/ts/agent/gateway-connection/generator.js +7 -4
  170. package/src/ts/agent/gateway-connection/generator.js.map +1 -1
  171. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -1
  172. package/src/ts/agent/gateway-connection/schema.d.ts +1 -0
  173. package/src/ts/agent/gateway-connection/schema.json +5 -0
  174. package/src/ts/agent/generator.js +7 -4
  175. package/src/ts/agent/generator.js.map +1 -1
  176. package/src/ts/agent/mcp-connection/generator.js +7 -4
  177. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  178. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -1
  179. package/src/ts/agent/mcp-connection/schema.d.ts +1 -0
  180. package/src/ts/agent/mcp-connection/schema.json +5 -0
  181. package/src/ts/agent/react-connection/generator.d.ts +1 -1
  182. package/src/ts/agent/react-connection/generator.js +14 -8
  183. package/src/ts/agent/react-connection/generator.js.map +1 -1
  184. package/src/ts/agent/react-connection/schema.d.js.map +1 -1
  185. package/src/ts/agent/react-connection/schema.d.ts +1 -0
  186. package/src/ts/agent/react-connection/schema.json +5 -0
  187. package/src/ts/agent/schema.d.js.map +1 -1
  188. package/src/ts/agent/schema.d.ts +1 -0
  189. package/src/ts/agent/schema.json +5 -0
  190. package/src/ts/api/generator.js +4 -2
  191. package/src/ts/api/generator.js.map +1 -1
  192. package/src/ts/api/schema.d.js.map +1 -1
  193. package/src/ts/api/schema.d.ts +1 -0
  194. package/src/ts/api/schema.json +5 -0
  195. package/src/ts/astro-docs/generator.js +7 -6
  196. package/src/ts/astro-docs/generator.js.map +1 -1
  197. package/src/ts/astro-docs/schema.d.js.map +1 -1
  198. package/src/ts/astro-docs/schema.d.ts +2 -2
  199. package/src/ts/astro-docs/schema.json +3 -3
  200. package/src/ts/docs/schema.d.js.map +1 -1
  201. package/src/ts/docs/schema.d.ts +1 -4
  202. package/src/ts/docs/schema.json +3 -3
  203. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -1
  204. package/src/ts/dynamodb/agent-connection/schema.d.ts +1 -0
  205. package/src/ts/dynamodb/agent-connection/schema.json +5 -0
  206. package/src/ts/dynamodb/generator.js +9 -5
  207. package/src/ts/dynamodb/generator.js.map +1 -1
  208. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
  209. package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +1 -0
  210. package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
  211. package/src/ts/dynamodb/schema.d.js.map +1 -1
  212. package/src/ts/dynamodb/schema.d.ts +1 -0
  213. package/src/ts/dynamodb/schema.json +5 -0
  214. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -1
  215. package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
  216. package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
  217. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -1
  218. package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
  219. package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
  220. package/src/ts/lambda-function/generator.js +7 -4
  221. package/src/ts/lambda-function/generator.js.map +1 -1
  222. package/src/ts/lambda-function/schema.d.js.map +1 -1
  223. package/src/ts/lambda-function/schema.d.ts +1 -0
  224. package/src/ts/lambda-function/schema.json +5 -0
  225. package/src/ts/lib/generator.js +10 -6
  226. package/src/ts/lib/generator.js.map +1 -1
  227. package/src/ts/lib/schema.d.js.map +1 -1
  228. package/src/ts/lib/schema.d.ts +1 -1
  229. package/src/ts/lib/schema.json +5 -0
  230. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
  231. package/src/ts/mcp-server/generator.js +7 -4
  232. package/src/ts/mcp-server/generator.js.map +1 -1
  233. package/src/ts/mcp-server/schema.d.js.map +1 -1
  234. package/src/ts/mcp-server/schema.d.ts +1 -0
  235. package/src/ts/mcp-server/schema.json +5 -0
  236. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +18 -8
  237. package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
  238. package/src/ts/nx-generator/files/common/schema.json.template +5 -0
  239. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +3 -4
  240. package/src/ts/nx-generator/generator.js +7 -4
  241. package/src/ts/nx-generator/generator.js.map +1 -1
  242. package/src/ts/nx-generator/schema.d.js.map +1 -1
  243. package/src/ts/nx-generator/schema.d.ts +1 -0
  244. package/src/ts/nx-generator/schema.json +5 -0
  245. package/src/ts/nx-plugin/generator.js +13 -6
  246. package/src/ts/nx-plugin/generator.js.map +1 -1
  247. package/src/ts/nx-plugin/schema.json +5 -0
  248. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -1
  249. package/src/ts/rdb/agent-connection/schema.d.ts +1 -0
  250. package/src/ts/rdb/agent-connection/schema.json +5 -0
  251. package/src/ts/rdb/generator.js +9 -5
  252. package/src/ts/rdb/generator.js.map +1 -1
  253. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -1
  254. package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -0
  255. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  256. package/src/ts/rdb/schema.d.js.map +1 -1
  257. package/src/ts/rdb/schema.d.ts +1 -0
  258. package/src/ts/rdb/schema.json +5 -0
  259. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -1
  260. package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
  261. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  262. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -1
  263. package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
  264. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  265. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +26 -26
  266. package/src/ts/react-website/app/generator.d.ts +1 -1
  267. package/src/ts/react-website/app/generator.js +18 -6
  268. package/src/ts/react-website/app/generator.js.map +1 -1
  269. package/src/ts/react-website/app/schema.d.js.map +1 -1
  270. package/src/ts/react-website/app/schema.d.ts +1 -1
  271. package/src/ts/react-website/app/schema.json +5 -0
  272. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +1 -1
  273. package/src/ts/react-website/cognito-auth/generator.d.ts +1 -1
  274. package/src/ts/react-website/cognito-auth/generator.js +9 -5
  275. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  276. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -1
  277. package/src/ts/react-website/cognito-auth/schema.d.ts +1 -0
  278. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  279. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -1
  280. package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
  281. package/src/ts/react-website/runtime-config/schema.json +5 -0
  282. package/src/ts/website/app/schema.d.js.map +1 -1
  283. package/src/ts/website/app/schema.d.ts +1 -1
  284. package/src/ts/website/app/schema.json +5 -0
  285. package/src/ts/website/auth/generator.d.ts +1 -1
  286. package/src/ts/website/auth/generator.js +2 -1
  287. package/src/ts/website/auth/generator.js.map +1 -1
  288. package/src/ts/website/auth/schema.d.js.map +1 -1
  289. package/src/ts/website/auth/schema.d.ts +1 -0
  290. package/src/ts/website/auth/schema.json +5 -0
  291. package/src/utils/files/common/scripts/src/infra/stage-credentials/cdk-command.ts.template +11 -3
  292. package/src/utils/install.d.ts +32 -0
  293. package/src/utils/install.js +56 -0
  294. package/src/utils/install.js.map +1 -0
  295. package/src/utils/versions.d.ts +64 -64
  296. package/src/utils/versions.js +63 -63
  297. package/src/utils/versions.js.map +1 -1
@@ -12,4 +12,5 @@ export interface PyAgentMcpConnectionGeneratorSchema {
12
12
  targetProject: string;
13
13
  sourceComponent?: ComponentMetadata;
14
14
  targetComponent?: ComponentMetadata;
15
+ preferInstallDependencies?: boolean;
15
16
  }
@@ -20,6 +20,11 @@
20
20
  "targetComponent": {
21
21
  "type": "string",
22
22
  "description": "The MCP server component name"
23
+ },
24
+ "preferInstallDependencies": {
25
+ "type": "boolean",
26
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
27
+ "default": true
23
28
  }
24
29
  },
25
30
  "required": ["sourceProject", "targetProject"]
@@ -6,5 +6,5 @@ import { type Tree } from '@nx/devkit';
6
6
  import type { ResolvedConnectionOptions } from '../../../connection/generator';
7
7
  import { type NxGeneratorInfo } from '../../../utils/nx';
8
8
  export declare const PY_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
9
- export declare const pyAgentReactConnectionGenerator: (tree: Tree, options: ResolvedConnectionOptions) => Promise<() => void>;
9
+ export declare const pyAgentReactConnectionGenerator: (tree: Tree, options: ResolvedConnectionOptions) => Promise<() => Promise<void>>;
10
10
  export default pyAgentReactConnectionGenerator;
@@ -1,11 +1,12 @@
1
1
  /**
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
- */ import { generateFiles, installPackagesTask, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
4
+ */ import { generateFiles, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
5
5
  import { addAgentRuntimeToConnectionNamespace } from "../../../connection/agent-runtime-config.js";
6
6
  import { addAgUiReactConnection } from "../../../ts/react-website/agui/generator.js";
7
7
  import { addOpenApiReactClient } from "../../../utils/connection/open-api/react.js";
8
8
  import { formatFilesInSubtree } from "../../../utils/format.js";
9
+ import { installDependencies } from "../../../utils/install.js";
9
10
  import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
10
11
  import { kebabCase, toClassName, toSnakeCase } from "../../../utils/names.js";
11
12
  import { getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
@@ -102,9 +103,11 @@ export const pyAgentReactConnectionGenerator = async (tree, options)=>{
102
103
  PY_AGENT_REACT_CONNECTION_GENERATOR_INFO
103
104
  ]);
104
105
  await formatFilesInSubtree(tree);
105
- return ()=>{
106
- installPackagesTask(tree);
107
- };
106
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
107
+ languages: [
108
+ 'typescript'
109
+ ]
110
+ });
108
111
  };
109
112
  /**
110
113
  * Determine the Python module name from the project configuration
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/agent/react-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport type { ResolvedConnectionOptions } from '../../../connection/generator';\nimport {\n type AgUiAuth,\n addAgUiReactConnection,\n} from '../../../ts/react-website/agui/generator';\nimport { addOpenApiReactClient } from '../../../utils/connection/open-api/react';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName, toSnakeCase } from '../../../utils/names';\nimport {\n type ComponentMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { sortObjectKeys } from '../../../utils/object';\nimport {\n addPyAgentTargetToLocalDev,\n openApiClientLocalDevDeps,\n} from './local-dev';\n\nexport const PY_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyAgentReactConnectionGenerator = async (\n tree: Tree,\n options: ResolvedConnectionOptions,\n) => {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const agentProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const targetComponent: ComponentMetadata | undefined =\n options.targetComponent;\n\n // Extract agent metadata from the target component or project metadata\n const metadata = agentProjectConfig.metadata as any;\n const agentName = targetComponent?.name ?? 'agent';\n const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);\n const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;\n const auth = (targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();\n const protocol = (targetComponent?.protocol ?? 'http').toLowerCase();\n\n if (protocol === 'a2a') {\n throw new Error(\n `Cannot connect a React website to an A2A agent. ` +\n `Consider generating an agent with the HTTP or AG-UI protocol instead.`,\n );\n }\n\n let additionalLocalDevDeps: string[] = [];\n\n if (protocol === 'ag-ui') {\n await addAgUiReactConnection(tree, {\n frontendProjectConfig,\n agentName,\n agentNameClassName,\n auth: auth as AgUiAuth,\n });\n } else {\n const moduleName = getModuleName(agentProjectConfig);\n const agentNameSnakeCase = toSnakeCase(agentName);\n const agentTargetPrefix = targetComponent?.name ? agentName : 'agent';\n\n // Add OpenAPI spec generation script scoped to this agent\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files/agent'),\n agentProjectConfig.root,\n {\n moduleName,\n agentNameSnakeCase,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Instrument the OpenAPI spec generation as a target on the agent project\n const openApiTargetName = `${agentTargetPrefix}-openapi`;\n const openApiDist = joinPathFragments(\n 'dist',\n agentProjectConfig.root,\n 'openapi',\n agentNameSnakeCase,\n );\n const specPath = joinPathFragments(openApiDist, 'openapi.json');\n\n updateProjectConfiguration(tree, agentProjectConfig.name, {\n ...agentProjectConfig,\n targets: sortObjectKeys({\n ...agentProjectConfig.targets,\n [openApiTargetName]: {\n cache: true,\n executor: 'nx:run-commands',\n outputs: [\n `{workspaceRoot}/dist/{projectRoot}/openapi/${agentNameSnakeCase}`,\n ],\n options: {\n commands: [\n `uv run python {projectRoot}/scripts/${agentNameSnakeCase}_openapi.py \"dist/{projectRoot}/openapi/${agentNameSnakeCase}/openapi.json\"`,\n ],\n },\n },\n }),\n });\n\n // Use the shared OpenAPI react client utility for hooks, providers, and build targets.\n // The dev target is handled separately below using the agent-specific dev target.\n await addOpenApiReactClient(tree, {\n apiName: agentNameClassName,\n frontendProjectConfig,\n backendProjectConfig: agentProjectConfig,\n specBuildProject: agentProjectConfig,\n specPath,\n specBuildTargetName: `${agentProjectConfig.name}:${openApiTargetName}`,\n auth,\n port: agentPort,\n isAgentRuntime: true,\n skipLocalDev: true,\n });\n\n additionalLocalDevDeps = openApiClientLocalDevDeps(agentNameClassName);\n\n // HTTP only — the AG-UI branch handles this inside addAgUiReactConnection.\n // Agent constructs publish their runtime ARN to the 'agentcore' namespace\n // by default, which isn't exposed to the website; patch them to also\n // publish under 'connection' so the browser can read it.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\n });\n }\n\n await addPyAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n additionalDependencyTargets: additionalLocalDevDeps,\n },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () => {\n installPackagesTask(tree);\n };\n};\n\n/**\n * Determine the Python module name from the project configuration\n */\nconst getModuleName = (\n projectConfig: ReturnType<typeof readProjectConfigurationUnqualified>,\n): string => {\n if (projectConfig.sourceRoot) {\n const sourceRootParts = projectConfig.sourceRoot.split('/');\n return sourceRootParts[sourceRootParts.length - 1];\n }\n throw new Error(\n `Could not determine sourceRoot for project ${projectConfig.name}`,\n );\n};\n\nexport default pyAgentReactConnectionGenerator;\n"],"names":["generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addAgentRuntimeToConnectionNamespace","addAgUiReactConnection","addOpenApiReactClient","formatFilesInSubtree","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toSnakeCase","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","addPyAgentTargetToLocalDev","openApiClientLocalDevDeps","PY_AGENT_REACT_CONNECTION_GENERATOR_INFO","filename","pyAgentReactConnectionGenerator","tree","options","frontendProjectConfig","sourceProject","agentProjectConfig","targetProject","targetComponent","metadata","agentName","name","agentNameClassName","rc","agentPort","port","ports","auth","toLowerCase","protocol","Error","additionalLocalDevDeps","moduleName","getModuleName","agentNameSnakeCase","agentTargetPrefix","dirname","root","overwriteStrategy","KeepExisting","openApiTargetName","openApiDist","specPath","targets","cache","executor","outputs","commands","apiName","backendProjectConfig","specBuildProject","specBuildTargetName","isAgentRuntime","skipLocalDev","agentNameKebabCase","additionalDependencyTargets","projectConfig","sourceRoot","sourceRootParts","split","length"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,mBAAmB,EACnBC,iBAAiB,EACjBC,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oCAAoC,QAAQ,8CAA2C;AAEhG,SAEEC,sBAAsB,QACjB,8CAA2C;AAClD,SAASC,qBAAqB,QAAQ,8CAA2C;AACjF,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,SAAS,EAAEC,WAAW,EAAEC,WAAW,QAAQ,0BAAuB;AAC3E,SAEEC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,cAAc,QAAQ,2BAAwB;AACvD,SACEC,0BAA0B,EAC1BC,yBAAyB,QACpB,iBAAc;AAErB,OAAO,MAAMC,2CACXL,iBAAiB,YAAYM,QAAQ,EAAE;AAEzC,OAAO,MAAMC,kCAAkC,OAC7CC,MACAC;IAEA,MAAMC,wBAAwBT,oCAC5BO,MACAC,QAAQE,aAAa;IAEvB,MAAMC,qBAAqBX,oCACzBO,MACAC,QAAQI,aAAa;IAGvB,MAAMC,kBACJL,QAAQK,eAAe;IAEzB,uEAAuE;IACvE,MAAMC,WAAWH,mBAAmBG,QAAQ;IAC5C,MAAMC,YAAYF,iBAAiBG,QAAQ;IAC3C,MAAMC,qBAAqBJ,iBAAiBK,MAAMrB,YAAYkB;IAC9D,MAAMI,YAAYN,iBAAiBO,QAAQN,UAAUO,OAAO,CAAC,EAAE,IAAI;IACnE,MAAMC,OAAO,AAACT,CAAAA,iBAAiBS,QAAQR,UAAUQ,QAAQ,KAAI,EAAGC,WAAW;IAC3E,MAAMC,WAAW,AAACX,CAAAA,iBAAiBW,YAAY,MAAK,EAAGD,WAAW;IAElE,IAAIC,aAAa,OAAO;QACtB,MAAM,IAAIC,MACR,CAAC,gDAAgD,CAAC,GAChD,CAAC,qEAAqE,CAAC;IAE7E;IAEA,IAAIC,yBAAmC,EAAE;IAEzC,IAAIF,aAAa,SAAS;QACxB,MAAMhC,uBAAuBe,MAAM;YACjCE;YACAM;YACAE;YACAK,MAAMA;QACR;IACF,OAAO;QACL,MAAMK,aAAaC,cAAcjB;QACjC,MAAMkB,qBAAqB/B,YAAYiB;QACvC,MAAMe,oBAAoBjB,iBAAiBG,OAAOD,YAAY;QAE9D,0DAA0D;QAC1D7B,cACEqB,MACAnB,kBAAkB,YAAY2C,OAAO,EAAE,gBACvCpB,mBAAmBqB,IAAI,EACvB;YACEL;YACAE;QACF,GACA;YACEI,mBAAmB5C,kBAAkB6C,YAAY;QACnD;QAGF,0EAA0E;QAC1E,MAAMC,oBAAoB,GAAGL,kBAAkB,QAAQ,CAAC;QACxD,MAAMM,cAAchD,kBAClB,QACAuB,mBAAmBqB,IAAI,EACvB,WACAH;QAEF,MAAMQ,WAAWjD,kBAAkBgD,aAAa;QAEhD9C,2BAA2BiB,MAAMI,mBAAmBK,IAAI,EAAE;YACxD,GAAGL,kBAAkB;YACrB2B,SAASrC,eAAe;gBACtB,GAAGU,mBAAmB2B,OAAO;gBAC7B,CAACH,kBAAkB,EAAE;oBACnBI,OAAO;oBACPC,UAAU;oBACVC,SAAS;wBACP,CAAC,2CAA2C,EAAEZ,oBAAoB;qBACnE;oBACDrB,SAAS;wBACPkC,UAAU;4BACR,CAAC,oCAAoC,EAAEb,mBAAmB,wCAAwC,EAAEA,mBAAmB,cAAc,CAAC;yBACvI;oBACH;gBACF;YACF;QACF;QAEA,uFAAuF;QACvF,kFAAkF;QAClF,MAAMpC,sBAAsBc,MAAM;YAChCoC,SAAS1B;YACTR;YACAmC,sBAAsBjC;YACtBkC,kBAAkBlC;YAClB0B;YACAS,qBAAqB,GAAGnC,mBAAmBK,IAAI,CAAC,CAAC,EAAEmB,mBAAmB;YACtEb;YACAF,MAAMD;YACN4B,gBAAgB;YAChBC,cAAc;QAChB;QAEAtB,yBAAyBvB,0BAA0Bc;QAEnD,2EAA2E;QAC3E,0EAA0E;QAC1E,qEAAqE;QACrE,yDAAyD;QACzD,MAAM1B,qCAAqCgB,MAAM;YAC/C0C,oBAAoBrD,UAAUqB;YAC9BA;QACF;IACF;IAEA,MAAMf,2BACJK,MACAE,sBAAsBO,IAAI,EAC1BL,mBAAmBK,IAAI,EACvB;QACED;QACAE;QACAG,MAAMD;QACNN;QACAqC,6BAA6BxB;IAC/B;IAGF,MAAM/B,gCAAgCY,MAAM;QAC1CH;KACD;IAED,MAAMV,qBAAqBa;IAC3B,OAAO;QACLpB,oBAAoBoB;IACtB;AACF,EAAE;AAEF;;CAEC,GACD,MAAMqB,gBAAgB,CACpBuB;IAEA,IAAIA,cAAcC,UAAU,EAAE;QAC5B,MAAMC,kBAAkBF,cAAcC,UAAU,CAACE,KAAK,CAAC;QACvD,OAAOD,eAAe,CAACA,gBAAgBE,MAAM,GAAG,EAAE;IACpD;IACA,MAAM,IAAI9B,MACR,CAAC,2CAA2C,EAAE0B,cAAcnC,IAAI,EAAE;AAEtE;AAEA,eAAeV,gCAAgC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/agent/react-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport type { ResolvedConnectionOptions } from '../../../connection/generator';\nimport {\n type AgUiAuth,\n addAgUiReactConnection,\n} from '../../../ts/react-website/agui/generator';\nimport { addOpenApiReactClient } from '../../../utils/connection/open-api/react';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName, toSnakeCase } from '../../../utils/names';\nimport {\n type ComponentMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { sortObjectKeys } from '../../../utils/object';\nimport {\n addPyAgentTargetToLocalDev,\n openApiClientLocalDevDeps,\n} from './local-dev';\n\nexport const PY_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyAgentReactConnectionGenerator = async (\n tree: Tree,\n options: ResolvedConnectionOptions,\n) => {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const agentProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const targetComponent: ComponentMetadata | undefined =\n options.targetComponent;\n\n // Extract agent metadata from the target component or project metadata\n const metadata = agentProjectConfig.metadata as any;\n const agentName = targetComponent?.name ?? 'agent';\n const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);\n const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;\n const auth = (targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();\n const protocol = (targetComponent?.protocol ?? 'http').toLowerCase();\n\n if (protocol === 'a2a') {\n throw new Error(\n `Cannot connect a React website to an A2A agent. ` +\n `Consider generating an agent with the HTTP or AG-UI protocol instead.`,\n );\n }\n\n let additionalLocalDevDeps: string[] = [];\n\n if (protocol === 'ag-ui') {\n await addAgUiReactConnection(tree, {\n frontendProjectConfig,\n agentName,\n agentNameClassName,\n auth: auth as AgUiAuth,\n });\n } else {\n const moduleName = getModuleName(agentProjectConfig);\n const agentNameSnakeCase = toSnakeCase(agentName);\n const agentTargetPrefix = targetComponent?.name ? agentName : 'agent';\n\n // Add OpenAPI spec generation script scoped to this agent\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files/agent'),\n agentProjectConfig.root,\n {\n moduleName,\n agentNameSnakeCase,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Instrument the OpenAPI spec generation as a target on the agent project\n const openApiTargetName = `${agentTargetPrefix}-openapi`;\n const openApiDist = joinPathFragments(\n 'dist',\n agentProjectConfig.root,\n 'openapi',\n agentNameSnakeCase,\n );\n const specPath = joinPathFragments(openApiDist, 'openapi.json');\n\n updateProjectConfiguration(tree, agentProjectConfig.name, {\n ...agentProjectConfig,\n targets: sortObjectKeys({\n ...agentProjectConfig.targets,\n [openApiTargetName]: {\n cache: true,\n executor: 'nx:run-commands',\n outputs: [\n `{workspaceRoot}/dist/{projectRoot}/openapi/${agentNameSnakeCase}`,\n ],\n options: {\n commands: [\n `uv run python {projectRoot}/scripts/${agentNameSnakeCase}_openapi.py \"dist/{projectRoot}/openapi/${agentNameSnakeCase}/openapi.json\"`,\n ],\n },\n },\n }),\n });\n\n // Use the shared OpenAPI react client utility for hooks, providers, and build targets.\n // The dev target is handled separately below using the agent-specific dev target.\n await addOpenApiReactClient(tree, {\n apiName: agentNameClassName,\n frontendProjectConfig,\n backendProjectConfig: agentProjectConfig,\n specBuildProject: agentProjectConfig,\n specPath,\n specBuildTargetName: `${agentProjectConfig.name}:${openApiTargetName}`,\n auth,\n port: agentPort,\n isAgentRuntime: true,\n skipLocalDev: true,\n });\n\n additionalLocalDevDeps = openApiClientLocalDevDeps(agentNameClassName);\n\n // HTTP only — the AG-UI branch handles this inside addAgUiReactConnection.\n // Agent constructs publish their runtime ARN to the 'agentcore' namespace\n // by default, which isn't exposed to the website; patch them to also\n // publish under 'connection' so the browser can read it.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\n });\n }\n\n await addPyAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n additionalDependencyTargets: additionalLocalDevDeps,\n },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\n/**\n * Determine the Python module name from the project configuration\n */\nconst getModuleName = (\n projectConfig: ReturnType<typeof readProjectConfigurationUnqualified>,\n): string => {\n if (projectConfig.sourceRoot) {\n const sourceRootParts = projectConfig.sourceRoot.split('/');\n return sourceRootParts[sourceRootParts.length - 1];\n }\n throw new Error(\n `Could not determine sourceRoot for project ${projectConfig.name}`,\n );\n};\n\nexport default pyAgentReactConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addAgentRuntimeToConnectionNamespace","addAgUiReactConnection","addOpenApiReactClient","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toSnakeCase","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","addPyAgentTargetToLocalDev","openApiClientLocalDevDeps","PY_AGENT_REACT_CONNECTION_GENERATOR_INFO","filename","pyAgentReactConnectionGenerator","tree","options","frontendProjectConfig","sourceProject","agentProjectConfig","targetProject","targetComponent","metadata","agentName","name","agentNameClassName","rc","agentPort","port","ports","auth","toLowerCase","protocol","Error","additionalLocalDevDeps","moduleName","getModuleName","agentNameSnakeCase","agentTargetPrefix","dirname","root","overwriteStrategy","KeepExisting","openApiTargetName","openApiDist","specPath","targets","cache","executor","outputs","commands","apiName","backendProjectConfig","specBuildProject","specBuildTargetName","isAgentRuntime","skipLocalDev","agentNameKebabCase","additionalDependencyTargets","preferInstallDependencies","languages","projectConfig","sourceRoot","sourceRootParts","split","length"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oCAAoC,QAAQ,8CAA2C;AAEhG,SAEEC,sBAAsB,QACjB,8CAA2C;AAClD,SAASC,qBAAqB,QAAQ,8CAA2C;AACjF,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,SAAS,EAAEC,WAAW,EAAEC,WAAW,QAAQ,0BAAuB;AAC3E,SAEEC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,cAAc,QAAQ,2BAAwB;AACvD,SACEC,0BAA0B,EAC1BC,yBAAyB,QACpB,iBAAc;AAErB,OAAO,MAAMC,2CACXL,iBAAiB,YAAYM,QAAQ,EAAE;AAEzC,OAAO,MAAMC,kCAAkC,OAC7CC,MACAC;IAEA,MAAMC,wBAAwBT,oCAC5BO,MACAC,QAAQE,aAAa;IAEvB,MAAMC,qBAAqBX,oCACzBO,MACAC,QAAQI,aAAa;IAGvB,MAAMC,kBACJL,QAAQK,eAAe;IAEzB,uEAAuE;IACvE,MAAMC,WAAWH,mBAAmBG,QAAQ;IAC5C,MAAMC,YAAYF,iBAAiBG,QAAQ;IAC3C,MAAMC,qBAAqBJ,iBAAiBK,MAAMrB,YAAYkB;IAC9D,MAAMI,YAAYN,iBAAiBO,QAAQN,UAAUO,OAAO,CAAC,EAAE,IAAI;IACnE,MAAMC,OAAO,AAACT,CAAAA,iBAAiBS,QAAQR,UAAUQ,QAAQ,KAAI,EAAGC,WAAW;IAC3E,MAAMC,WAAW,AAACX,CAAAA,iBAAiBW,YAAY,MAAK,EAAGD,WAAW;IAElE,IAAIC,aAAa,OAAO;QACtB,MAAM,IAAIC,MACR,CAAC,gDAAgD,CAAC,GAChD,CAAC,qEAAqE,CAAC;IAE7E;IAEA,IAAIC,yBAAmC,EAAE;IAEzC,IAAIF,aAAa,SAAS;QACxB,MAAMjC,uBAAuBgB,MAAM;YACjCE;YACAM;YACAE;YACAK,MAAMA;QACR;IACF,OAAO;QACL,MAAMK,aAAaC,cAAcjB;QACjC,MAAMkB,qBAAqB/B,YAAYiB;QACvC,MAAMe,oBAAoBjB,iBAAiBG,OAAOD,YAAY;QAE9D,0DAA0D;QAC1D7B,cACEqB,MACApB,kBAAkB,YAAY4C,OAAO,EAAE,gBACvCpB,mBAAmBqB,IAAI,EACvB;YACEL;YACAE;QACF,GACA;YACEI,mBAAmB7C,kBAAkB8C,YAAY;QACnD;QAGF,0EAA0E;QAC1E,MAAMC,oBAAoB,GAAGL,kBAAkB,QAAQ,CAAC;QACxD,MAAMM,cAAcjD,kBAClB,QACAwB,mBAAmBqB,IAAI,EACvB,WACAH;QAEF,MAAMQ,WAAWlD,kBAAkBiD,aAAa;QAEhD/C,2BAA2BkB,MAAMI,mBAAmBK,IAAI,EAAE;YACxD,GAAGL,kBAAkB;YACrB2B,SAASrC,eAAe;gBACtB,GAAGU,mBAAmB2B,OAAO;gBAC7B,CAACH,kBAAkB,EAAE;oBACnBI,OAAO;oBACPC,UAAU;oBACVC,SAAS;wBACP,CAAC,2CAA2C,EAAEZ,oBAAoB;qBACnE;oBACDrB,SAAS;wBACPkC,UAAU;4BACR,CAAC,oCAAoC,EAAEb,mBAAmB,wCAAwC,EAAEA,mBAAmB,cAAc,CAAC;yBACvI;oBACH;gBACF;YACF;QACF;QAEA,uFAAuF;QACvF,kFAAkF;QAClF,MAAMrC,sBAAsBe,MAAM;YAChCoC,SAAS1B;YACTR;YACAmC,sBAAsBjC;YACtBkC,kBAAkBlC;YAClB0B;YACAS,qBAAqB,GAAGnC,mBAAmBK,IAAI,CAAC,CAAC,EAAEmB,mBAAmB;YACtEb;YACAF,MAAMD;YACN4B,gBAAgB;YAChBC,cAAc;QAChB;QAEAtB,yBAAyBvB,0BAA0Bc;QAEnD,2EAA2E;QAC3E,0EAA0E;QAC1E,qEAAqE;QACrE,yDAAyD;QACzD,MAAM3B,qCAAqCiB,MAAM;YAC/C0C,oBAAoBrD,UAAUqB;YAC9BA;QACF;IACF;IAEA,MAAMf,2BACJK,MACAE,sBAAsBO,IAAI,EAC1BL,mBAAmBK,IAAI,EACvB;QACED;QACAE;QACAG,MAAMD;QACNN;QACAqC,6BAA6BxB;IAC/B;IAGF,MAAM/B,gCAAgCY,MAAM;QAC1CH;KACD;IAED,MAAMX,qBAAqBc;IAC3B,OAAO,IACLb,oBAAoBa,MAAMC,QAAQ2C,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;aAAa;QAC3B;AACJ,EAAE;AAEF;;CAEC,GACD,MAAMxB,gBAAgB,CACpByB;IAEA,IAAIA,cAAcC,UAAU,EAAE;QAC5B,MAAMC,kBAAkBF,cAAcC,UAAU,CAACE,KAAK,CAAC;QACvD,OAAOD,eAAe,CAACA,gBAAgBE,MAAM,GAAG,EAAE;IACpD;IACA,MAAM,IAAIhC,MACR,CAAC,2CAA2C,EAAE4B,cAAcrC,IAAI,EAAE;AAEtE;AAEA,eAAeV,gCAAgC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/agent/react-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface PyAgentReactConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAKC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/agent/react-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface PyAgentReactConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAMC"}
@@ -12,4 +12,5 @@ export interface PyAgentReactConnectionGeneratorSchema {
12
12
  targetProject: string;
13
13
  sourceComponent?: ComponentMetadata;
14
14
  targetComponent?: ComponentMetadata;
15
+ preferInstallDependencies?: boolean;
15
16
  }
@@ -20,6 +20,11 @@
20
20
  "targetComponent": {
21
21
  "type": "string",
22
22
  "description": "The agent component name"
23
+ },
24
+ "preferInstallDependencies": {
25
+ "type": "boolean",
26
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
27
+ "default": true
23
28
  }
24
29
  },
25
30
  "required": ["sourceProject", "targetProject"]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/agent/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac';\n\nexport type PyAgentFramework = 'strands' | 'langchain';\nexport type PyAgentInfra = 'agentcore' | 'none';\nexport type AgentProtocol = 'http' | 'a2a' | 'ag-ui';\n\nexport type PyAgentAuth = 'iam' | 'cognito';\n\nexport interface PyAgentGeneratorSchema {\n project: string;\n framework?: PyAgentFramework;\n name?: string;\n infra?: PyAgentInfra;\n auth?: PyAgentAuth;\n protocol?: AgentProtocol;\n iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAUD,WAQC"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/agent/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac';\n\nexport type PyAgentFramework = 'strands' | 'langchain';\nexport type PyAgentInfra = 'agentcore' | 'none';\nexport type AgentProtocol = 'http' | 'a2a' | 'ag-ui';\n\nexport type PyAgentAuth = 'iam' | 'cognito';\n\nexport interface PyAgentGeneratorSchema {\n project: string;\n framework?: PyAgentFramework;\n name?: string;\n infra?: PyAgentInfra;\n auth?: PyAgentAuth;\n protocol?: AgentProtocol;\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAUD,WASC"}
@@ -19,4 +19,5 @@ export interface PyAgentGeneratorSchema {
19
19
  auth?: PyAgentAuth;
20
20
  protocol?: AgentProtocol;
21
21
  iac: IacOption;
22
+ preferInstallDependencies?: boolean;
22
23
  }
@@ -59,6 +59,11 @@
59
59
  "enum": ["agentcore", "none"],
60
60
  "default": "agentcore",
61
61
  "x-priority": "important"
62
+ },
63
+ "preferInstallDependencies": {
64
+ "type": "boolean",
65
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
66
+ "default": true
62
67
  }
63
68
  },
64
69
  "required": ["project"]
@@ -16,7 +16,8 @@ export async function pyApiGenerator(tree, options) {
16
16
  directory: options.directory,
17
17
  subDirectory: options.subDirectory,
18
18
  moduleName: options.moduleName,
19
- iac: options.iac
19
+ iac: options.iac,
20
+ preferInstallDependencies: options.preferInstallDependencies
20
21
  });
21
22
  }
22
23
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/api/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { Tree } from '@nx/devkit';\nimport { getGeneratorInfo, type NxGeneratorInfo } from '../../utils/nx';\nimport { pyFastApiProjectGenerator } from '../fast-api/generator';\nimport type { PyApiGeneratorSchema } from './schema';\n\nexport const PY_API_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport async function pyApiGenerator(\n tree: Tree,\n options: PyApiGeneratorSchema,\n) {\n const framework = options.framework ?? 'fastapi';\n\n switch (framework) {\n case 'fastapi':\n return pyFastApiProjectGenerator(tree, {\n name: options.name,\n infra: options.infra,\n integrationPattern: options.integrationPattern,\n auth: options.auth,\n directory: options.directory,\n subDirectory: options.subDirectory,\n moduleName: options.moduleName,\n iac: options.iac,\n });\n }\n}\n\nexport default pyApiGenerator;\n"],"names":["getGeneratorInfo","pyFastApiProjectGenerator","PY_API_GENERATOR_INFO","filename","pyApiGenerator","tree","options","framework","name","infra","integrationPattern","auth","directory","subDirectory","moduleName","iac"],"mappings":"AAAA;;;CAGC,GAED,SAASA,gBAAgB,QAA8B,oBAAiB;AACxE,SAASC,yBAAyB,QAAQ,2BAAwB;AAGlE,OAAO,MAAMC,wBAAyCF,iBACpD,YAAYG,QAAQ,EACpB;AAEF,OAAO,eAAeC,eACpBC,IAAU,EACVC,OAA6B;IAE7B,MAAMC,YAAYD,QAAQC,SAAS,IAAI;IAEvC,OAAQA;QACN,KAAK;YACH,OAAON,0BAA0BI,MAAM;gBACrCG,MAAMF,QAAQE,IAAI;gBAClBC,OAAOH,QAAQG,KAAK;gBACpBC,oBAAoBJ,QAAQI,kBAAkB;gBAC9CC,MAAML,QAAQK,IAAI;gBAClBC,WAAWN,QAAQM,SAAS;gBAC5BC,cAAcP,QAAQO,YAAY;gBAClCC,YAAYR,QAAQQ,UAAU;gBAC9BC,KAAKT,QAAQS,GAAG;YAClB;IACJ;AACF;AAEA,eAAeX,eAAe"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/api/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { Tree } from '@nx/devkit';\nimport { getGeneratorInfo, type NxGeneratorInfo } from '../../utils/nx';\nimport { pyFastApiProjectGenerator } from '../fast-api/generator';\nimport type { PyApiGeneratorSchema } from './schema';\n\nexport const PY_API_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport async function pyApiGenerator(\n tree: Tree,\n options: PyApiGeneratorSchema,\n) {\n const framework = options.framework ?? 'fastapi';\n\n switch (framework) {\n case 'fastapi':\n return pyFastApiProjectGenerator(tree, {\n name: options.name,\n infra: options.infra,\n integrationPattern: options.integrationPattern,\n auth: options.auth,\n directory: options.directory,\n subDirectory: options.subDirectory,\n moduleName: options.moduleName,\n iac: options.iac,\n preferInstallDependencies: options.preferInstallDependencies,\n });\n }\n}\n\nexport default pyApiGenerator;\n"],"names":["getGeneratorInfo","pyFastApiProjectGenerator","PY_API_GENERATOR_INFO","filename","pyApiGenerator","tree","options","framework","name","infra","integrationPattern","auth","directory","subDirectory","moduleName","iac","preferInstallDependencies"],"mappings":"AAAA;;;CAGC,GAED,SAASA,gBAAgB,QAA8B,oBAAiB;AACxE,SAASC,yBAAyB,QAAQ,2BAAwB;AAGlE,OAAO,MAAMC,wBAAyCF,iBACpD,YAAYG,QAAQ,EACpB;AAEF,OAAO,eAAeC,eACpBC,IAAU,EACVC,OAA6B;IAE7B,MAAMC,YAAYD,QAAQC,SAAS,IAAI;IAEvC,OAAQA;QACN,KAAK;YACH,OAAON,0BAA0BI,MAAM;gBACrCG,MAAMF,QAAQE,IAAI;gBAClBC,OAAOH,QAAQG,KAAK;gBACpBC,oBAAoBJ,QAAQI,kBAAkB;gBAC9CC,MAAML,QAAQK,IAAI;gBAClBC,WAAWN,QAAQM,SAAS;gBAC5BC,cAAcP,QAAQO,YAAY;gBAClCC,YAAYR,QAAQQ,UAAU;gBAC9BC,KAAKT,QAAQS,GAAG;gBAChBC,2BAA2BV,QAAQU,yBAAyB;YAC9D;IACJ;AACF;AAEA,eAAeZ,eAAe"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/api/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { IacOption } from '../../utils/iac';\n\nexport interface PyApiGeneratorSchema {\n readonly name: string;\n readonly framework?: 'fastapi';\n readonly infra: 'rest-lambda' | 'http-lambda' | 'none';\n readonly integrationPattern?: 'isolated' | 'shared';\n readonly auth: 'iam' | 'cognito' | 'custom';\n readonly directory?: string;\n readonly subDirectory?: string;\n readonly moduleName?: string;\n readonly iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,WAUC"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/api/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { IacOption } from '../../utils/iac';\n\nexport interface PyApiGeneratorSchema {\n readonly name: string;\n readonly framework?: 'fastapi';\n readonly infra: 'rest-lambda' | 'http-lambda' | 'none';\n readonly integrationPattern?: 'isolated' | 'shared';\n readonly auth: 'iam' | 'cognito' | 'custom';\n readonly directory?: string;\n readonly subDirectory?: string;\n readonly moduleName?: string;\n readonly iac: IacOption;\n readonly preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,WAWC"}
@@ -14,4 +14,5 @@ export interface PyApiGeneratorSchema {
14
14
  readonly subDirectory?: string;
15
15
  readonly moduleName?: string;
16
16
  readonly iac: IacOption;
17
+ readonly preferInstallDependencies?: boolean;
17
18
  }
@@ -94,6 +94,11 @@
94
94
  "enum": ["rest-lambda", "http-lambda", "none"],
95
95
  "x-prompt": "What infrastructure would you like to deploy your API with?",
96
96
  "x-priority": "important"
97
+ },
98
+ "preferInstallDependencies": {
99
+ "type": "boolean",
100
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
101
+ "default": true
97
102
  }
98
103
  },
99
104
  "required": ["name"]
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
- */ import { installPackagesTask, updateProjectConfiguration } from "@nx/devkit";
4
+ */ import { updateProjectConfiguration } from "@nx/devkit";
5
5
  import { formatFilesInSubtree } from "../../../utils/format.js";
6
+ import { installDependencies } from "../../../utils/install.js";
6
7
  import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
7
8
  import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
8
- import { Logger, UVProvider } from "../../../utils/nxlv-python.js";
9
9
  import { addWorkspaceDependencyToPyProject } from "../../../utils/py.js";
10
10
  export const PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
11
11
  export const pyDynamoDBAgentConnectionGenerator = async (tree, options)=>{
@@ -27,10 +27,12 @@ export const pyDynamoDBAgentConnectionGenerator = async (tree, options)=>{
27
27
  PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO
28
28
  ]);
29
29
  await formatFilesInSubtree(tree);
30
- return async ()=>{
31
- installPackagesTask(tree);
32
- await new UVProvider(tree.root, new Logger(), tree).install();
33
- };
30
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
31
+ languages: [
32
+ 'typescript',
33
+ 'python'
34
+ ]
35
+ });
34
36
  };
35
37
  export default pyDynamoDBAgentConnectionGenerator;
36
38
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/agent-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n installPackagesTask,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { Logger, UVProvider } from '../../../utils/nxlv-python';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBAgentConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBAgentConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBAgentConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n const agentName = options.sourceComponent?.name ?? 'agent';\n const devTarget = `${agentName}-dev`;\n\n if (sourceProject.targets?.[devTarget]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTarget, {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return async () => {\n installPackagesTask(tree);\n await new UVProvider(tree.root, new Logger(), tree).install();\n };\n};\n\nexport default pyDynamoDBAgentConnectionGenerator;\n"],"names":["installPackagesTask","updateProjectConfiguration","formatFilesInSubtree","addGeneratorMetricsIfApplicable","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","Logger","UVProvider","addWorkspaceDependencyToPyProject","PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBAgentConnectionGenerator","tree","options","sourceProject","targetProject","agentName","sourceComponent","name","devTarget","targets","projects","target","root","install"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,mBAAmB,EAEnBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,MAAM,EAAEC,UAAU,QAAQ,gCAA6B;AAChE,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,8CACXL,iBAAiB,YAAYM,QAAQ,EAAE;AAEzC,OAAO,MAAMC,qCAAqC,OAChDC,MACAC;IAEA,MAAMC,gBAAgBT,oCACpBO,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBV,oCACpBO,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,MAAMC,YAAYH,QAAQI,eAAe,EAAEC,QAAQ;IACnD,MAAMC,YAAY,GAAGH,UAAU,IAAI,CAAC;IAEpC,IAAIF,cAAcM,OAAO,EAAE,CAACD,UAAU,EAAE;QACtChB,kCAAkCW,eAAeK,WAAW;YAC1DE,UAAU;gBAACN,cAAcG,IAAI;aAAC;YAC9BI,QAAQ;QACV;QACAtB,2BAA2BY,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMZ,gCAAgCU,MAAM;QAC1CH;KACD;IACD,MAAMR,qBAAqBW;IAC3B,OAAO;QACLb,oBAAoBa;QACpB,MAAM,IAAIL,WAAWK,KAAKW,IAAI,EAAE,IAAIjB,UAAUM,MAAMY,OAAO;IAC7D;AACF,EAAE;AAEF,eAAeb,mCAAmC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/agent-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBAgentConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBAgentConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBAgentConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n const agentName = options.sourceComponent?.name ?? 'agent';\n const devTarget = `${agentName}-dev`;\n\n if (sourceProject.targets?.[devTarget]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTarget, {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBAgentConnectionGenerator;\n"],"names":["updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBAgentConnectionGenerator","tree","options","sourceProject","targetProject","agentName","sourceComponent","name","devTarget","targets","projects","target","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAGEA,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,8CACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,qCAAqC,OAChDC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,MAAMC,YAAYH,QAAQI,eAAe,EAAEC,QAAQ;IACnD,MAAMC,YAAY,GAAGH,UAAU,IAAI,CAAC;IAEpC,IAAIF,cAAcM,OAAO,EAAE,CAACD,UAAU,EAAE;QACtCd,kCAAkCS,eAAeK,WAAW;YAC1DE,UAAU;gBAACN,cAAcG,IAAI;aAAC;YAC9BI,QAAQ;QACV;QACArB,2BAA2BW,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMV,gCAAgCQ,MAAM;QAC1CH;KACD;IACD,MAAMP,qBAAqBU;IAC3B,OAAO,IACLT,oBAAoBS,MAAMC,QAAQU,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;gBAAc;aAAS;QACrC;AACJ,EAAE;AAEF,eAAeb,mCAAmC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/agent-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface PyDynamoDBAgentConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAIC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/agent-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface PyDynamoDBAgentConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAKC"}
@@ -11,4 +11,5 @@ export interface PyDynamoDBAgentConnectionGeneratorSchema {
11
11
  sourceProject: string;
12
12
  targetProject: string;
13
13
  sourceComponent?: ComponentMetadata;
14
+ preferInstallDependencies?: boolean;
14
15
  }
@@ -16,6 +16,11 @@
16
16
  "sourceComponent": {
17
17
  "type": "string",
18
18
  "description": "The agent component name"
19
+ },
20
+ "preferInstallDependencies": {
21
+ "type": "boolean",
22
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
23
+ "default": true
19
24
  }
20
25
  },
21
26
  "required": ["sourceProject", "targetProject"]
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
- */ import { installPackagesTask, updateProjectConfiguration } from "@nx/devkit";
4
+ */ import { updateProjectConfiguration } from "@nx/devkit";
5
5
  import { formatFilesInSubtree } from "../../../utils/format.js";
6
+ import { installDependencies } from "../../../utils/install.js";
6
7
  import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
7
8
  import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
8
- import { Logger, UVProvider } from "../../../utils/nxlv-python.js";
9
9
  import { addWorkspaceDependencyToPyProject } from "../../../utils/py.js";
10
10
  export const PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
11
11
  export const pyDynamoDBFastApiConnectionGenerator = async (tree, options)=>{
@@ -25,10 +25,12 @@ export const pyDynamoDBFastApiConnectionGenerator = async (tree, options)=>{
25
25
  PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO
26
26
  ]);
27
27
  await formatFilesInSubtree(tree);
28
- return async ()=>{
29
- installPackagesTask(tree);
30
- await new UVProvider(tree.root, new Logger(), tree).install();
31
- };
28
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
29
+ languages: [
30
+ 'typescript',
31
+ 'python'
32
+ ]
33
+ });
32
34
  };
33
35
  export default pyDynamoDBFastApiConnectionGenerator;
34
36
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/fast-api-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n installPackagesTask,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { Logger, UVProvider } from '../../../utils/nxlv-python';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBFastApiConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBFastApiConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBFastApiConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n if (sourceProject.targets?.['dev']) {\n addDependencyToTargetIfNotPresent(sourceProject, 'dev', {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return async () => {\n installPackagesTask(tree);\n await new UVProvider(tree.root, new Logger(), tree).install();\n };\n};\n\nexport default pyDynamoDBFastApiConnectionGenerator;\n"],"names":["installPackagesTask","updateProjectConfiguration","formatFilesInSubtree","addGeneratorMetricsIfApplicable","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","Logger","UVProvider","addWorkspaceDependencyToPyProject","PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBFastApiConnectionGenerator","tree","options","sourceProject","targetProject","targets","projects","name","target","root","install"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,mBAAmB,EAEnBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,MAAM,EAAEC,UAAU,QAAQ,gCAA6B;AAChE,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,iDACXL,iBAAiB,YAAYM,QAAQ,EAAE;AAEzC,OAAO,MAAMC,uCAAuC,OAClDC,MACAC;IAEA,MAAMC,gBAAgBT,oCACpBO,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBV,oCACpBO,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,IAAID,cAAcE,OAAO,EAAE,CAAC,MAAM,EAAE;QAClCb,kCAAkCW,eAAe,OAAO;YACtDG,UAAU;gBAACF,cAAcG,IAAI;aAAC;YAC9BC,QAAQ;QACV;QACAnB,2BAA2BY,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMZ,gCAAgCU,MAAM;QAC1CH;KACD;IACD,MAAMR,qBAAqBW;IAC3B,OAAO;QACLb,oBAAoBa;QACpB,MAAM,IAAIL,WAAWK,KAAKQ,IAAI,EAAE,IAAId,UAAUM,MAAMS,OAAO;IAC7D;AACF,EAAE;AAEF,eAAeV,qCAAqC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/fast-api-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBFastApiConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBFastApiConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBFastApiConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n if (sourceProject.targets?.['dev']) {\n addDependencyToTargetIfNotPresent(sourceProject, 'dev', {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBFastApiConnectionGenerator;\n"],"names":["updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBFastApiConnectionGenerator","tree","options","sourceProject","targetProject","targets","projects","name","target","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAGEA,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,iDACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,uCAAuC,OAClDC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,IAAID,cAAcE,OAAO,EAAE,CAAC,MAAM,EAAE;QAClCX,kCAAkCS,eAAe,OAAO;YACtDG,UAAU;gBAACF,cAAcG,IAAI;aAAC;YAC9BC,QAAQ;QACV;QACAlB,2BAA2BW,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMV,gCAAgCQ,MAAM;QAC1CH;KACD;IACD,MAAMP,qBAAqBU;IAC3B,OAAO,IACLT,oBAAoBS,MAAMC,QAAQO,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;gBAAc;aAAS;QACrC;AACJ,EAAE;AAEF,eAAeV,qCAAqC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/fast-api-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface PyDynamoDBFastApiConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,WAGC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/fast-api-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface PyDynamoDBFastApiConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,WAIC"}
@@ -9,4 +9,5 @@
9
9
  export interface PyDynamoDBFastApiConnectionGeneratorSchema {
10
10
  sourceProject: string;
11
11
  targetProject: string;
12
+ preferInstallDependencies?: boolean;
12
13
  }
@@ -12,6 +12,11 @@
12
12
  "targetProject": {
13
13
  "type": "string",
14
14
  "description": "The py#dynamodb project to connect to"
15
+ },
16
+ "preferInstallDependencies": {
17
+ "type": "boolean",
18
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
19
+ "default": true
15
20
  }
16
21
  },
17
22
  "required": ["sourceProject", "targetProject"]
@@ -2,16 +2,16 @@
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */ import { relative } from "node:path";
5
- import { generateFiles, installPackagesTask, joinPathFragments, readProjectConfiguration, updateProjectConfiguration } from "@nx/devkit";
5
+ import { generateFiles, joinPathFragments, readProjectConfiguration, updateProjectConfiguration } from "@nx/devkit";
6
6
  import { resolveContainers } from "../../utils/containers.js";
7
7
  import { addDynamoDBInfra } from "../../utils/dynamodb-constructs/dynamodb-constructs.js";
8
8
  import { formatFilesInSubtree } from "../../utils/format.js";
9
9
  import { resolveIac } from "../../utils/iac.js";
10
+ import { installDependencies } from "../../utils/install.js";
10
11
  import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
11
12
  import { kebabCase, toClassName } from "../../utils/names.js";
12
13
  import { getNpmScope } from "../../utils/npm-scope.js";
13
14
  import { addGeneratorMetadata, getGeneratorInfo, projectExists } from "../../utils/nx.js";
14
- import { Logger, UVProvider } from "../../utils/nxlv-python.js";
15
15
  import { assignSharedPort } from "../../utils/port.js";
16
16
  import { addDependenciesToPyProjectToml } from "../../utils/py.js";
17
17
  import { sharedConstructsGenerator } from "../../utils/shared-constructs.js";
@@ -33,7 +33,8 @@ export const pyDynamoDBGenerator = async (tree, options)=>{
33
33
  name: options.name,
34
34
  directory: options.directory,
35
35
  subDirectory: options.subDirectory,
36
- type: 'library'
36
+ type: 'library',
37
+ preferInstallDependencies: false
37
38
  });
38
39
  }
39
40
  const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);
@@ -97,10 +98,12 @@ export const pyDynamoDBGenerator = async (tree, options)=>{
97
98
  PY_DYNAMODB_GENERATOR_INFO
98
99
  ]);
99
100
  await formatFilesInSubtree(tree);
100
- return async ()=>{
101
- installPackagesTask(tree);
102
- await new UVProvider(tree.root, new Logger(), tree).install();
103
- };
101
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
102
+ languages: [
103
+ 'typescript',
104
+ 'python'
105
+ ]
106
+ });
104
107
  };
105
108
  export default pyDynamoDBGenerator;
106
109
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/dynamodb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { relative } from 'node:path';\nimport {\n type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n readProjectConfiguration,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { resolveContainers } from '../../utils/containers';\nimport { addDynamoDBInfra } from '../../utils/dynamodb-constructs/dynamodb-constructs';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { resolveIac } from '../../utils/iac';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { Logger, UVProvider } from '../../utils/nxlv-python';\nimport { assignSharedPort } from '../../utils/port';\nimport { addDependenciesToPyProjectToml } from '../../utils/py';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport {\n DYNAMODB_GENERATOR_IDS,\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from '../../utils/shared-constructs-constants';\nimport { sharedDynamoDBScriptsGenerator } from '../../utils/shared-dynamodb-scripts';\nimport pyProjectGenerator, { getPyProjectDetails } from '../project/generator';\nimport type { PyDynamoDBGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const pyDynamoDBGenerator = async (\n tree: Tree,\n options: PyDynamoDBGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameClassName = toClassName(options.name);\n const localTableName = `${getNpmScope(tree)}-${kebabCase(options.tableName ?? options.name)}`;\n const containerEngine = await resolveContainers(tree, 'inherit');\n const { fullyQualifiedName, dir, normalizedModuleName } = getPyProjectDetails(\n tree,\n {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n },\n );\n\n if (!projectExists(tree, fullyQualifiedName)) {\n await pyProjectGenerator(tree, {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n type: 'library',\n });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n\n const localDynamoDBPort = assignSharedPort(\n tree,\n projectConfig,\n DYNAMODB_GENERATOR_IDS,\n 8000,\n );\n\n const containerName = `${getNpmScope(tree)}-dynamodb`;\n\n const templateOptions = {\n name: normalizedModuleName,\n runtimeConfigKey: nameClassName,\n localDynamoDBPort,\n localTableName,\n containerName,\n containerEngine,\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n\n await sharedDynamoDBScriptsGenerator(tree);\n\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'dynamodb'),\n );\n\n projectConfig.targets['pull-image'] = {\n executor: 'nx:run-commands',\n options: {\n command: `tsx ${scriptsDir}/pull-image.ts`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets['dev'] = {\n executor: 'nx:run-commands',\n continuous: true,\n dependsOn: ['pull-image'],\n options: {\n commands: [\n `tsx ${scriptsDir}/start-container.ts`,\n `tsx ${scriptsDir}/create-local-table.ts`,\n ],\n parallel: true,\n cwd: '{projectRoot}',\n },\n };\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n addGeneratorMetadata(tree, fullyQualifiedName, PY_DYNAMODB_GENERATOR_INFO);\n\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac });\n await addDynamoDBInfra(tree, {\n iac,\n projectName: fullyQualifiedName,\n nameClassName,\n nameKebabCase: kebabCase(options.name),\n tableName: localTableName,\n projectRoot: dir,\n });\n }\n\n addDependenciesToPyProjectToml(tree, dir, [\n 'pynamodb',\n 'boto3',\n 'aws-lambda-powertools',\n ]);\n\n await addGeneratorMetricsIfApplicable(tree, [PY_DYNAMODB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return async () => {\n installPackagesTask(tree);\n await new UVProvider(tree.root, new Logger(), tree).install();\n };\n};\n\nexport default pyDynamoDBGenerator;\n"],"names":["relative","generateFiles","installPackagesTask","joinPathFragments","readProjectConfiguration","updateProjectConfiguration","resolveContainers","addDynamoDBInfra","formatFilesInSubtree","resolveIac","addGeneratorMetricsIfApplicable","kebabCase","toClassName","getNpmScope","addGeneratorMetadata","getGeneratorInfo","projectExists","Logger","UVProvider","assignSharedPort","addDependenciesToPyProjectToml","sharedConstructsGenerator","DYNAMODB_GENERATOR_IDS","PACKAGES_DIR","SHARED_SCRIPTS_DIR","sharedDynamoDBScriptsGenerator","pyProjectGenerator","getPyProjectDetails","PY_DYNAMODB_GENERATOR_INFO","filename","pyDynamoDBGenerator","tree","options","nameClassName","name","localTableName","tableName","containerEngine","fullyQualifiedName","dir","normalizedModuleName","directory","subDirectory","type","projectConfig","localDynamoDBPort","containerName","templateOptions","runtimeConfigKey","dirname","scriptsDir","targets","executor","command","cwd","continuous","dependsOn","commands","parallel","infra","iac","projectName","nameKebabCase","projectRoot","root","install"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/dynamodb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { relative } from 'node:path';\nimport {\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n readProjectConfiguration,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { resolveContainers } from '../../utils/containers';\nimport { addDynamoDBInfra } from '../../utils/dynamodb-constructs/dynamodb-constructs';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { assignSharedPort } from '../../utils/port';\nimport { addDependenciesToPyProjectToml } from '../../utils/py';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport {\n DYNAMODB_GENERATOR_IDS,\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from '../../utils/shared-constructs-constants';\nimport { sharedDynamoDBScriptsGenerator } from '../../utils/shared-dynamodb-scripts';\nimport pyProjectGenerator, { getPyProjectDetails } from '../project/generator';\nimport type { PyDynamoDBGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const pyDynamoDBGenerator = async (\n tree: Tree,\n options: PyDynamoDBGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameClassName = toClassName(options.name);\n const localTableName = `${getNpmScope(tree)}-${kebabCase(options.tableName ?? options.name)}`;\n const containerEngine = await resolveContainers(tree, 'inherit');\n const { fullyQualifiedName, dir, normalizedModuleName } = getPyProjectDetails(\n tree,\n {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n },\n );\n\n if (!projectExists(tree, fullyQualifiedName)) {\n await pyProjectGenerator(tree, {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n type: 'library',\n preferInstallDependencies: false,\n });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n\n const localDynamoDBPort = assignSharedPort(\n tree,\n projectConfig,\n DYNAMODB_GENERATOR_IDS,\n 8000,\n );\n\n const containerName = `${getNpmScope(tree)}-dynamodb`;\n\n const templateOptions = {\n name: normalizedModuleName,\n runtimeConfigKey: nameClassName,\n localDynamoDBPort,\n localTableName,\n containerName,\n containerEngine,\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n\n await sharedDynamoDBScriptsGenerator(tree);\n\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'dynamodb'),\n );\n\n projectConfig.targets['pull-image'] = {\n executor: 'nx:run-commands',\n options: {\n command: `tsx ${scriptsDir}/pull-image.ts`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets['dev'] = {\n executor: 'nx:run-commands',\n continuous: true,\n dependsOn: ['pull-image'],\n options: {\n commands: [\n `tsx ${scriptsDir}/start-container.ts`,\n `tsx ${scriptsDir}/create-local-table.ts`,\n ],\n parallel: true,\n cwd: '{projectRoot}',\n },\n };\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n addGeneratorMetadata(tree, fullyQualifiedName, PY_DYNAMODB_GENERATOR_INFO);\n\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac });\n await addDynamoDBInfra(tree, {\n iac,\n projectName: fullyQualifiedName,\n nameClassName,\n nameKebabCase: kebabCase(options.name),\n tableName: localTableName,\n projectRoot: dir,\n });\n }\n\n addDependenciesToPyProjectToml(tree, dir, [\n 'pynamodb',\n 'boto3',\n 'aws-lambda-powertools',\n ]);\n\n await addGeneratorMetricsIfApplicable(tree, [PY_DYNAMODB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBGenerator;\n"],"names":["relative","generateFiles","joinPathFragments","readProjectConfiguration","updateProjectConfiguration","resolveContainers","addDynamoDBInfra","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","getNpmScope","addGeneratorMetadata","getGeneratorInfo","projectExists","assignSharedPort","addDependenciesToPyProjectToml","sharedConstructsGenerator","DYNAMODB_GENERATOR_IDS","PACKAGES_DIR","SHARED_SCRIPTS_DIR","sharedDynamoDBScriptsGenerator","pyProjectGenerator","getPyProjectDetails","PY_DYNAMODB_GENERATOR_INFO","filename","pyDynamoDBGenerator","tree","options","nameClassName","name","localTableName","tableName","containerEngine","fullyQualifiedName","dir","normalizedModuleName","directory","subDirectory","type","preferInstallDependencies","projectConfig","localDynamoDBPort","containerName","templateOptions","runtimeConfigKey","dirname","scriptsDir","targets","executor","command","cwd","continuous","dependsOn","commands","parallel","infra","iac","projectName","nameKebabCase","projectRoot","languages"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
- */ import { installPackagesTask, updateProjectConfiguration } from "@nx/devkit";
4
+ */ import { updateProjectConfiguration } from "@nx/devkit";
5
5
  import { formatFilesInSubtree } from "../../../utils/format.js";
6
+ import { installDependencies } from "../../../utils/install.js";
6
7
  import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
7
8
  import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
8
- import { Logger, UVProvider } from "../../../utils/nxlv-python.js";
9
9
  import { addWorkspaceDependencyToPyProject } from "../../../utils/py.js";
10
10
  export const PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
11
11
  export const pyDynamoDBMcpServerConnectionGenerator = async (tree, options)=>{
@@ -27,10 +27,12 @@ export const pyDynamoDBMcpServerConnectionGenerator = async (tree, options)=>{
27
27
  PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO
28
28
  ]);
29
29
  await formatFilesInSubtree(tree);
30
- return async ()=>{
31
- installPackagesTask(tree);
32
- await new UVProvider(tree.root, new Logger(), tree).install();
33
- };
30
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
31
+ languages: [
32
+ 'typescript',
33
+ 'python'
34
+ ]
35
+ });
34
36
  };
35
37
  export default pyDynamoDBMcpServerConnectionGenerator;
36
38
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/mcp-server-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n installPackagesTask,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { Logger, UVProvider } from '../../../utils/nxlv-python';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBMcpServerConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBMcpServerConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBMcpServerConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n const mcpServerName = options.sourceComponent?.name ?? 'mcp-server';\n const devTarget = `${mcpServerName}-dev`;\n\n if (sourceProject.targets?.[devTarget]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTarget, {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return async () => {\n installPackagesTask(tree);\n await new UVProvider(tree.root, new Logger(), tree).install();\n };\n};\n\nexport default pyDynamoDBMcpServerConnectionGenerator;\n"],"names":["installPackagesTask","updateProjectConfiguration","formatFilesInSubtree","addGeneratorMetricsIfApplicable","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","Logger","UVProvider","addWorkspaceDependencyToPyProject","PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBMcpServerConnectionGenerator","tree","options","sourceProject","targetProject","mcpServerName","sourceComponent","name","devTarget","targets","projects","target","root","install"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,mBAAmB,EAEnBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,MAAM,EAAEC,UAAU,QAAQ,gCAA6B;AAChE,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,mDACXL,iBAAiB,YAAYM,QAAQ,EAAE;AAEzC,OAAO,MAAMC,yCAAyC,OACpDC,MACAC;IAEA,MAAMC,gBAAgBT,oCACpBO,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBV,oCACpBO,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,MAAMC,gBAAgBH,QAAQI,eAAe,EAAEC,QAAQ;IACvD,MAAMC,YAAY,GAAGH,cAAc,IAAI,CAAC;IAExC,IAAIF,cAAcM,OAAO,EAAE,CAACD,UAAU,EAAE;QACtChB,kCAAkCW,eAAeK,WAAW;YAC1DE,UAAU;gBAACN,cAAcG,IAAI;aAAC;YAC9BI,QAAQ;QACV;QACAtB,2BAA2BY,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMZ,gCAAgCU,MAAM;QAC1CH;KACD;IACD,MAAMR,qBAAqBW;IAC3B,OAAO;QACLb,oBAAoBa;QACpB,MAAM,IAAIL,WAAWK,KAAKW,IAAI,EAAE,IAAIjB,UAAUM,MAAMY,OAAO;IAC7D;AACF,EAAE;AAEF,eAAeb,uCAAuC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/mcp-server-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBMcpServerConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBMcpServerConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBMcpServerConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n const mcpServerName = options.sourceComponent?.name ?? 'mcp-server';\n const devTarget = `${mcpServerName}-dev`;\n\n if (sourceProject.targets?.[devTarget]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTarget, {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBMcpServerConnectionGenerator;\n"],"names":["updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBMcpServerConnectionGenerator","tree","options","sourceProject","targetProject","mcpServerName","sourceComponent","name","devTarget","targets","projects","target","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAGEA,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,mDACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,yCAAyC,OACpDC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,MAAMC,gBAAgBH,QAAQI,eAAe,EAAEC,QAAQ;IACvD,MAAMC,YAAY,GAAGH,cAAc,IAAI,CAAC;IAExC,IAAIF,cAAcM,OAAO,EAAE,CAACD,UAAU,EAAE;QACtCd,kCAAkCS,eAAeK,WAAW;YAC1DE,UAAU;gBAACN,cAAcG,IAAI;aAAC;YAC9BI,QAAQ;QACV;QACArB,2BAA2BW,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMV,gCAAgCQ,MAAM;QAC1CH;KACD;IACD,MAAMP,qBAAqBU;IAC3B,OAAO,IACLT,oBAAoBS,MAAMC,QAAQU,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;gBAAc;aAAS;QACrC;AACJ,EAAE;AAEF,eAAeb,uCAAuC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/mcp-server-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface PyDynamoDBMcpServerConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAIC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/mcp-server-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface PyDynamoDBMcpServerConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAKC"}
@@ -11,4 +11,5 @@ export interface PyDynamoDBMcpServerConnectionGeneratorSchema {
11
11
  sourceProject: string;
12
12
  targetProject: string;
13
13
  sourceComponent?: ComponentMetadata;
14
+ preferInstallDependencies?: boolean;
14
15
  }
@@ -16,6 +16,11 @@
16
16
  "sourceComponent": {
17
17
  "type": "string",
18
18
  "description": "The MCP server component name"
19
+ },
20
+ "preferInstallDependencies": {
21
+ "type": "boolean",
22
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
23
+ "default": true
19
24
  }
20
25
  },
21
26
  "required": ["sourceProject", "targetProject"]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/dynamodb/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { IacOption } from '../../utils/iac';\n\nexport interface PyDynamoDBGeneratorSchema {\n name: string;\n directory?: string;\n subDirectory?: string;\n framework: 'pynamodb';\n tableName?: string;\n infra: 'dynamodb' | 'none';\n iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,WAQC"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/dynamodb/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { IacOption } from '../../utils/iac';\n\nexport interface PyDynamoDBGeneratorSchema {\n name: string;\n directory?: string;\n subDirectory?: string;\n framework: 'pynamodb';\n tableName?: string;\n infra: 'dynamodb' | 'none';\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,WASC"}
@@ -12,4 +12,5 @@ export interface PyDynamoDBGeneratorSchema {
12
12
  tableName?: string;
13
13
  infra: 'dynamodb' | 'none';
14
14
  iac: IacOption;
15
+ preferInstallDependencies?: boolean;
15
16
  }
@@ -64,6 +64,11 @@
64
64
  "x-priority": "important",
65
65
  "default": "inherit",
66
66
  "x-prompt": "Which provider would you like to manage your infrastructure? (default: Inherit)"
67
+ },
68
+ "preferInstallDependencies": {
69
+ "type": "boolean",
70
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
71
+ "default": true
67
72
  }
68
73
  },
69
74
  "required": ["name"]