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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) 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 +3 -10
  21. package/src/connection/generator.js +18 -148
  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/connection/supported-connections.d.ts +98 -0
  27. package/src/connection/supported-connections.js +138 -0
  28. package/src/connection/supported-connections.js.map +1 -0
  29. package/src/infra/app/__snapshots__/generator.spec.ts.snap +29 -21
  30. package/src/infra/app/generator.js +12 -6
  31. package/src/infra/app/generator.js.map +1 -1
  32. package/src/infra/app/schema.d.js.map +1 -1
  33. package/src/infra/app/schema.d.ts +1 -1
  34. package/src/infra/app/schema.json +5 -0
  35. package/src/license/schema.d.js.map +1 -1
  36. package/src/license/schema.d.ts +2 -0
  37. package/src/license/schema.json +5 -0
  38. package/src/mcp-server/tools/general-guidance.js +17 -0
  39. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  40. package/src/preset/__snapshots__/generator.spec.ts.snap +1 -1
  41. package/src/preset/generator.d.ts +1 -1
  42. package/src/preset/generator.js +8 -5
  43. package/src/preset/generator.js.map +1 -1
  44. package/src/preset/schema.d.js.map +1 -1
  45. package/src/preset/schema.d.ts +1 -0
  46. package/src/preset/schema.json +5 -0
  47. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +9 -9
  48. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +10 -10
  49. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +1 -1
  50. package/src/py/agent/a2a-connection/generator.js +7 -4
  51. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  52. package/src/py/agent/a2a-connection/schema.d.js.map +1 -1
  53. package/src/py/agent/a2a-connection/schema.d.ts +1 -0
  54. package/src/py/agent/a2a-connection/schema.json +5 -0
  55. package/src/py/agent/gateway-connection/generator.js +7 -4
  56. package/src/py/agent/gateway-connection/generator.js.map +1 -1
  57. package/src/py/agent/gateway-connection/schema.d.js.map +1 -1
  58. package/src/py/agent/gateway-connection/schema.d.ts +1 -0
  59. package/src/py/agent/gateway-connection/schema.json +5 -0
  60. package/src/py/agent/generator.js +8 -6
  61. package/src/py/agent/generator.js.map +1 -1
  62. package/src/py/agent/mcp-connection/generator.js +7 -4
  63. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  64. package/src/py/agent/mcp-connection/schema.d.js.map +1 -1
  65. package/src/py/agent/mcp-connection/schema.d.ts +1 -0
  66. package/src/py/agent/mcp-connection/schema.json +5 -0
  67. package/src/py/agent/react-connection/generator.d.ts +1 -1
  68. package/src/py/agent/react-connection/generator.js +7 -4
  69. package/src/py/agent/react-connection/generator.js.map +1 -1
  70. package/src/py/agent/react-connection/schema.d.js.map +1 -1
  71. package/src/py/agent/react-connection/schema.d.ts +1 -0
  72. package/src/py/agent/react-connection/schema.json +5 -0
  73. package/src/py/agent/schema.d.js.map +1 -1
  74. package/src/py/agent/schema.d.ts +1 -0
  75. package/src/py/agent/schema.json +5 -0
  76. package/src/py/api/generator.js +2 -1
  77. package/src/py/api/generator.js.map +1 -1
  78. package/src/py/api/schema.d.js.map +1 -1
  79. package/src/py/api/schema.d.ts +1 -0
  80. package/src/py/api/schema.json +5 -0
  81. package/src/py/dynamodb/agent-connection/generator.js +8 -6
  82. package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
  83. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -1
  84. package/src/py/dynamodb/agent-connection/schema.d.ts +1 -0
  85. package/src/py/dynamodb/agent-connection/schema.json +5 -0
  86. package/src/py/dynamodb/fast-api-connection/generator.js +8 -6
  87. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
  88. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -1
  89. package/src/py/dynamodb/fast-api-connection/schema.d.ts +1 -0
  90. package/src/py/dynamodb/fast-api-connection/schema.json +5 -0
  91. package/src/py/dynamodb/generator.js +10 -7
  92. package/src/py/dynamodb/generator.js.map +1 -1
  93. package/src/py/dynamodb/mcp-server-connection/generator.js +8 -6
  94. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
  95. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
  96. package/src/py/dynamodb/mcp-server-connection/schema.d.ts +1 -0
  97. package/src/py/dynamodb/mcp-server-connection/schema.json +5 -0
  98. package/src/py/dynamodb/schema.d.js.map +1 -1
  99. package/src/py/dynamodb/schema.d.ts +1 -0
  100. package/src/py/dynamodb/schema.json +5 -0
  101. package/src/py/fast-api/generator.js +10 -7
  102. package/src/py/fast-api/generator.js.map +1 -1
  103. package/src/py/fast-api/react/generator.d.ts +2 -2
  104. package/src/py/fast-api/react/generator.js +7 -5
  105. package/src/py/fast-api/react/generator.js.map +1 -1
  106. package/src/py/fast-api/react/schema.d.js.map +1 -1
  107. package/src/py/fast-api/react/schema.d.ts +1 -0
  108. package/src/py/fast-api/react/schema.json +5 -0
  109. package/src/py/fast-api/schema.d.js.map +1 -1
  110. package/src/py/fast-api/schema.d.ts +1 -0
  111. package/src/py/fast-api/schema.json +5 -0
  112. package/src/py/lambda-function/generator.js +8 -6
  113. package/src/py/lambda-function/generator.js.map +1 -1
  114. package/src/py/lambda-function/schema.d.js.map +1 -1
  115. package/src/py/lambda-function/schema.d.ts +1 -0
  116. package/src/py/lambda-function/schema.json +5 -0
  117. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
  118. package/src/py/mcp-server/generator.js +8 -6
  119. package/src/py/mcp-server/generator.js.map +1 -1
  120. package/src/py/mcp-server/schema.d.js.map +1 -1
  121. package/src/py/mcp-server/schema.d.ts +1 -0
  122. package/src/py/mcp-server/schema.json +5 -0
  123. package/src/py/project/generator.js +9 -6
  124. package/src/py/project/generator.js.map +1 -1
  125. package/src/py/project/schema.d.js.map +1 -1
  126. package/src/py/project/schema.d.ts +1 -0
  127. package/src/py/project/schema.json +5 -0
  128. package/src/sdk/open-api.d.ts +1 -1
  129. package/src/sdk/open-api.js +1 -1
  130. package/src/sdk/open-api.js.map +1 -1
  131. package/src/sdk/utils/ast.d.ts +1 -2
  132. package/src/sdk/utils/ast.js +1 -2
  133. package/src/sdk/utils/ast.js.map +1 -1
  134. package/src/smithy/project/generator.js +7 -4
  135. package/src/smithy/project/generator.js.map +1 -1
  136. package/src/smithy/project/schema.d.js.map +1 -1
  137. package/src/smithy/project/schema.d.ts +1 -0
  138. package/src/smithy/project/schema.json +5 -0
  139. package/src/smithy/react-connection/generator.js +7 -4
  140. package/src/smithy/react-connection/generator.js.map +1 -1
  141. package/src/smithy/react-connection/schema.d.js.map +1 -1
  142. package/src/smithy/react-connection/schema.d.ts +1 -0
  143. package/src/smithy/react-connection/schema.json +5 -0
  144. package/src/smithy/ts/api/generator.js +11 -6
  145. package/src/smithy/ts/api/generator.js.map +1 -1
  146. package/src/smithy/ts/api/schema.d.js.map +1 -1
  147. package/src/smithy/ts/api/schema.d.ts +1 -0
  148. package/src/smithy/ts/api/schema.json +5 -0
  149. package/src/terraform/project/generator.js +13 -4
  150. package/src/terraform/project/generator.js.map +1 -1
  151. package/src/terraform/project/schema.d.js.map +1 -1
  152. package/src/terraform/project/schema.d.ts +1 -0
  153. package/src/terraform/project/schema.json +5 -0
  154. package/src/trpc/backend/generator.d.ts +1 -1
  155. package/src/trpc/backend/generator.js +9 -5
  156. package/src/trpc/backend/generator.js.map +1 -1
  157. package/src/trpc/backend/schema.d.js.map +1 -1
  158. package/src/trpc/backend/schema.d.ts +1 -0
  159. package/src/trpc/backend/schema.json +5 -0
  160. package/src/trpc/react/generator.d.ts +1 -1
  161. package/src/trpc/react/generator.js +9 -5
  162. package/src/trpc/react/generator.js.map +1 -1
  163. package/src/trpc/react/schema.d.js.map +1 -1
  164. package/src/trpc/react/schema.d.ts +1 -0
  165. package/src/trpc/react/schema.json +5 -0
  166. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +2 -2
  167. package/src/ts/agent/a2a-connection/generator.js +7 -4
  168. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  169. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -1
  170. package/src/ts/agent/a2a-connection/schema.d.ts +1 -0
  171. package/src/ts/agent/a2a-connection/schema.json +5 -0
  172. package/src/ts/agent/gateway-connection/generator.js +7 -4
  173. package/src/ts/agent/gateway-connection/generator.js.map +1 -1
  174. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -1
  175. package/src/ts/agent/gateway-connection/schema.d.ts +1 -0
  176. package/src/ts/agent/gateway-connection/schema.json +5 -0
  177. package/src/ts/agent/generator.js +7 -4
  178. package/src/ts/agent/generator.js.map +1 -1
  179. package/src/ts/agent/mcp-connection/generator.js +7 -4
  180. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  181. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -1
  182. package/src/ts/agent/mcp-connection/schema.d.ts +1 -0
  183. package/src/ts/agent/mcp-connection/schema.json +5 -0
  184. package/src/ts/agent/react-connection/generator.d.ts +1 -1
  185. package/src/ts/agent/react-connection/generator.js +14 -8
  186. package/src/ts/agent/react-connection/generator.js.map +1 -1
  187. package/src/ts/agent/react-connection/schema.d.js.map +1 -1
  188. package/src/ts/agent/react-connection/schema.d.ts +1 -0
  189. package/src/ts/agent/react-connection/schema.json +5 -0
  190. package/src/ts/agent/schema.d.js.map +1 -1
  191. package/src/ts/agent/schema.d.ts +1 -0
  192. package/src/ts/agent/schema.json +5 -0
  193. package/src/ts/api/generator.js +4 -2
  194. package/src/ts/api/generator.js.map +1 -1
  195. package/src/ts/api/schema.d.js.map +1 -1
  196. package/src/ts/api/schema.d.ts +1 -0
  197. package/src/ts/api/schema.json +5 -0
  198. package/src/ts/astro-docs/generator.js +7 -6
  199. package/src/ts/astro-docs/generator.js.map +1 -1
  200. package/src/ts/astro-docs/schema.d.js.map +1 -1
  201. package/src/ts/astro-docs/schema.d.ts +2 -2
  202. package/src/ts/astro-docs/schema.json +3 -3
  203. package/src/ts/docs/schema.d.js.map +1 -1
  204. package/src/ts/docs/schema.d.ts +1 -4
  205. package/src/ts/docs/schema.json +3 -3
  206. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -1
  207. package/src/ts/dynamodb/agent-connection/schema.d.ts +1 -0
  208. package/src/ts/dynamodb/agent-connection/schema.json +5 -0
  209. package/src/ts/dynamodb/generator.js +9 -5
  210. package/src/ts/dynamodb/generator.js.map +1 -1
  211. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
  212. package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +1 -0
  213. package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
  214. package/src/ts/dynamodb/schema.d.js.map +1 -1
  215. package/src/ts/dynamodb/schema.d.ts +1 -0
  216. package/src/ts/dynamodb/schema.json +5 -0
  217. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -1
  218. package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
  219. package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
  220. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -1
  221. package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
  222. package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
  223. package/src/ts/lambda-function/generator.js +7 -4
  224. package/src/ts/lambda-function/generator.js.map +1 -1
  225. package/src/ts/lambda-function/schema.d.js.map +1 -1
  226. package/src/ts/lambda-function/schema.d.ts +1 -0
  227. package/src/ts/lambda-function/schema.json +5 -0
  228. package/src/ts/lib/generator.js +10 -6
  229. package/src/ts/lib/generator.js.map +1 -1
  230. package/src/ts/lib/schema.d.js.map +1 -1
  231. package/src/ts/lib/schema.d.ts +1 -1
  232. package/src/ts/lib/schema.json +5 -0
  233. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
  234. package/src/ts/mcp-server/generator.js +7 -4
  235. package/src/ts/mcp-server/generator.js.map +1 -1
  236. package/src/ts/mcp-server/schema.d.js.map +1 -1
  237. package/src/ts/mcp-server/schema.d.ts +1 -0
  238. package/src/ts/mcp-server/schema.json +5 -0
  239. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +18 -8
  240. package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
  241. package/src/ts/nx-generator/files/common/schema.json.template +5 -0
  242. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +3 -4
  243. package/src/ts/nx-generator/generator.js +7 -4
  244. package/src/ts/nx-generator/generator.js.map +1 -1
  245. package/src/ts/nx-generator/schema.d.js.map +1 -1
  246. package/src/ts/nx-generator/schema.d.ts +1 -0
  247. package/src/ts/nx-generator/schema.json +5 -0
  248. package/src/ts/nx-plugin/generator.js +13 -6
  249. package/src/ts/nx-plugin/generator.js.map +1 -1
  250. package/src/ts/nx-plugin/schema.json +5 -0
  251. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -1
  252. package/src/ts/rdb/agent-connection/schema.d.ts +1 -0
  253. package/src/ts/rdb/agent-connection/schema.json +5 -0
  254. package/src/ts/rdb/generator.js +9 -5
  255. package/src/ts/rdb/generator.js.map +1 -1
  256. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -1
  257. package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -0
  258. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  259. package/src/ts/rdb/schema.d.js.map +1 -1
  260. package/src/ts/rdb/schema.d.ts +1 -0
  261. package/src/ts/rdb/schema.json +5 -0
  262. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -1
  263. package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
  264. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  265. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -1
  266. package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
  267. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  268. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +26 -26
  269. package/src/ts/react-website/app/generator.d.ts +1 -1
  270. package/src/ts/react-website/app/generator.js +18 -6
  271. package/src/ts/react-website/app/generator.js.map +1 -1
  272. package/src/ts/react-website/app/schema.d.js.map +1 -1
  273. package/src/ts/react-website/app/schema.d.ts +1 -1
  274. package/src/ts/react-website/app/schema.json +5 -0
  275. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +10 -7
  276. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +1 -1
  277. package/src/ts/react-website/cognito-auth/generator.d.ts +1 -1
  278. package/src/ts/react-website/cognito-auth/generator.js +9 -5
  279. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  280. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -1
  281. package/src/ts/react-website/cognito-auth/schema.d.ts +1 -0
  282. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  283. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -1
  284. package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
  285. package/src/ts/react-website/runtime-config/schema.json +5 -0
  286. package/src/ts/website/app/schema.d.js.map +1 -1
  287. package/src/ts/website/app/schema.d.ts +1 -1
  288. package/src/ts/website/app/schema.json +5 -0
  289. package/src/ts/website/auth/generator.d.ts +1 -1
  290. package/src/ts/website/auth/generator.js +2 -1
  291. package/src/ts/website/auth/generator.js.map +1 -1
  292. package/src/ts/website/auth/schema.d.js.map +1 -1
  293. package/src/ts/website/auth/schema.d.ts +1 -0
  294. package/src/ts/website/auth/schema.json +5 -0
  295. package/src/utils/files/common/scripts/src/infra/stage-credentials/cdk-command.ts.template +11 -3
  296. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +10 -7
  297. package/src/utils/install.d.ts +32 -0
  298. package/src/utils/install.js +56 -0
  299. package/src/utils/install.js.map +1 -0
  300. package/src/utils/versions.d.ts +64 -64
  301. package/src/utils/versions.js +63 -63
  302. package/src/utils/versions.js.map +1 -1
@@ -60,10 +60,10 @@
60
60
  "default": false,
61
61
  "x-prompt": "Would you like to opt out of the blog?"
62
62
  },
63
- "skipInstall": {
64
- "description": "Skip installing dependencies after the generator runs.",
63
+ "preferInstallDependencies": {
65
64
  "type": "boolean",
66
- "default": false
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
67
67
  }
68
68
  },
69
69
  "required": ["name"]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/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 TsDynamoDBAgentConnectionGeneratorSchema {\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/ts/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 TsDynamoDBAgentConnectionGeneratorSchema {\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 TsDynamoDBAgentConnectionGeneratorSchema {
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"]
@@ -2,11 +2,12 @@
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 { addDependenciesToPackageJson, generateFiles, installPackagesTask, joinPathFragments, readProjectConfiguration, updateProjectConfiguration } from "@nx/devkit";
5
+ import { addDependenciesToPackageJson, 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";
@@ -38,7 +39,8 @@ export const tsDynamoDBGenerator = async (tree, options)=>{
38
39
  if (!projectExists) {
39
40
  await tsProjectGenerator(tree, {
40
41
  name: options.name,
41
- directory: options.directory
42
+ directory: options.directory,
43
+ preferInstallDependencies: false
42
44
  });
43
45
  }
44
46
  const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);
@@ -103,9 +105,11 @@ export const tsDynamoDBGenerator = async (tree, options)=>{
103
105
  TS_DYNAMODB_GENERATOR_INFO
104
106
  ]);
105
107
  await formatFilesInSubtree(tree);
106
- return ()=>{
107
- installPackagesTask(tree);
108
- };
108
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
109
+ languages: [
110
+ 'typescript'
111
+ ]
112
+ });
109
113
  };
110
114
  export default tsDynamoDBGenerator;
111
115
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/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 addDependenciesToPackageJson,\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} from '../../utils/nx';\nimport { assignSharedPort } from '../../utils/port';\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 { withVersions } from '../../utils/versions';\nimport tsProjectGenerator, { getTsLibDetails } from '../lib/generator';\nimport type { TsDynamoDBGeneratorSchema } from './schema';\n\nexport const TS_DYNAMODB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsDynamoDBGenerator = async (\n tree: Tree,\n options: TsDynamoDBGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameKebabCase = kebabCase(options.name);\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 } = getTsLibDetails(tree, {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n });\n\n let projectExists: boolean;\n try {\n readProjectConfiguration(tree, fullyQualifiedName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await tsProjectGenerator(tree, {\n name: options.name,\n directory: options.directory,\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 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 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, TS_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,\n tableName: localTableName,\n projectRoot: dir,\n });\n }\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-sdk/client-dynamodb',\n 'electrodb',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n ]),\n withVersions(['tsx', '@types/aws-lambda', '@types/node']),\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_DYNAMODB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () => {\n installPackagesTask(tree);\n };\n};\n\nexport default tsDynamoDBGenerator;\n"],"names":["relative","addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","readProjectConfiguration","updateProjectConfiguration","resolveContainers","addDynamoDBInfra","formatFilesInSubtree","resolveIac","addGeneratorMetricsIfApplicable","kebabCase","toClassName","getNpmScope","addGeneratorMetadata","getGeneratorInfo","assignSharedPort","sharedConstructsGenerator","DYNAMODB_GENERATOR_IDS","PACKAGES_DIR","SHARED_SCRIPTS_DIR","sharedDynamoDBScriptsGenerator","withVersions","tsProjectGenerator","getTsLibDetails","TS_DYNAMODB_GENERATOR_INFO","filename","tsDynamoDBGenerator","tree","options","nameKebabCase","name","nameClassName","localTableName","tableName","containerEngine","fullyQualifiedName","dir","directory","subDirectory","projectExists","projectConfig","localDynamoDBPort","containerName","templateOptions","runtimeConfigKey","dirname","scriptsDir","targets","executor","command","cwd","continuous","commands","parallel","infra","iac","projectName","projectRoot"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/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 addDependenciesToPackageJson,\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} from '../../utils/nx';\nimport { assignSharedPort } from '../../utils/port';\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 { withVersions } from '../../utils/versions';\nimport tsProjectGenerator, { getTsLibDetails } from '../lib/generator';\nimport type { TsDynamoDBGeneratorSchema } from './schema';\n\nexport const TS_DYNAMODB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsDynamoDBGenerator = async (\n tree: Tree,\n options: TsDynamoDBGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameKebabCase = kebabCase(options.name);\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 } = getTsLibDetails(tree, {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n });\n\n let projectExists: boolean;\n try {\n readProjectConfiguration(tree, fullyQualifiedName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await tsProjectGenerator(tree, {\n name: options.name,\n directory: options.directory,\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 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 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, TS_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,\n tableName: localTableName,\n projectRoot: dir,\n });\n }\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-sdk/client-dynamodb',\n 'electrodb',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n ]),\n withVersions(['tsx', '@types/aws-lambda', '@types/node']),\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_DYNAMODB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsDynamoDBGenerator;\n"],"names":["relative","addDependenciesToPackageJson","generateFiles","joinPathFragments","readProjectConfiguration","updateProjectConfiguration","resolveContainers","addDynamoDBInfra","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","getNpmScope","addGeneratorMetadata","getGeneratorInfo","assignSharedPort","sharedConstructsGenerator","DYNAMODB_GENERATOR_IDS","PACKAGES_DIR","SHARED_SCRIPTS_DIR","sharedDynamoDBScriptsGenerator","withVersions","tsProjectGenerator","getTsLibDetails","TS_DYNAMODB_GENERATOR_INFO","filename","tsDynamoDBGenerator","tree","options","nameKebabCase","name","nameClassName","localTableName","tableName","containerEngine","fullyQualifiedName","dir","directory","subDirectory","projectExists","preferInstallDependencies","projectConfig","localDynamoDBPort","containerName","templateOptions","runtimeConfigKey","dirname","scriptsDir","targets","executor","command","cwd","continuous","commands","parallel","infra","iac","projectName","projectRoot","languages"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/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 TsDynamoDBMcpServerConnectionGeneratorSchema {\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/ts/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 TsDynamoDBMcpServerConnectionGeneratorSchema {\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 TsDynamoDBMcpServerConnectionGeneratorSchema {
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/ts/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 TsDynamoDBGeneratorSchema {\n name: string;\n directory?: string;\n subDirectory?: string;\n framework: 'electrodb';\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/ts/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 TsDynamoDBGeneratorSchema {\n name: string;\n directory?: string;\n subDirectory?: string;\n framework: 'electrodb';\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 TsDynamoDBGeneratorSchema {
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"]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/smithy-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 TsDynamoDBSmithyConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,WAGC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/smithy-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 TsDynamoDBSmithyConnectionGeneratorSchema {\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 TsDynamoDBSmithyConnectionGeneratorSchema {
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 ts#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"]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/trpc-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 TsDynamoDBTrpcConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,WAGC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/trpc-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 TsDynamoDBTrpcConnectionGeneratorSchema {\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 TsDynamoDBTrpcConnectionGeneratorSchema {
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 ts#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"]
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
- */ import { addDependenciesToPackageJson, generateFiles, installPackagesTask, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
4
+ */ import { addDependenciesToPackageJson, generateFiles, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
5
5
  import camelCase from "lodash.camelcase";
6
6
  import { addTypeScriptBundleTarget } from "../../utils/bundle/bundle.js";
7
7
  import { formatFilesInSubtree } from "../../utils/format.js";
8
8
  import { addLambdaFunctionInfra } from "../../utils/function-constructs/function-constructs.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 { pascalCase, toClassName, toKebabCase } from "../../utils/names.js";
12
13
  import { addComponentGeneratorMetadata, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../utils/nx.js";
@@ -99,9 +100,11 @@ export const TS_LAMBDA_FUNCTION_GENERATOR_INFO = getGeneratorInfo(import.meta.fi
99
100
  TS_LAMBDA_FUNCTION_GENERATOR_INFO
100
101
  ]);
101
102
  await formatFilesInSubtree(tree);
102
- return ()=>{
103
- installPackagesTask(tree);
104
- };
103
+ return ()=>installDependencies(tree, schema.preferInstallDependencies, {
104
+ languages: [
105
+ 'typescript'
106
+ ]
107
+ });
105
108
  };
106
109
  export default tsLambdaFunctionGenerator;
107
110
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lambda-function/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport camelCase from 'lodash.camelcase';\nimport { addTypeScriptBundleTarget } from '../../utils/bundle/bundle';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { addLambdaFunctionInfra } from '../../utils/function-constructs/function-constructs';\nimport { resolveIac } from '../../utils/iac';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { pascalCase, toClassName, toKebabCase } from '../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport { withVersions } from '../../utils/versions';\nimport { TS_HANDLER_RETURN_TYPES } from './io';\nimport type { TsLambdaFunctionGeneratorSchema } from './schema';\n\nexport const TS_LAMBDA_FUNCTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\n/**\n * Generates a TypeScript Lambda Function to add to a TypeScript project\n */\nexport const tsLambdaFunctionGenerator = async (\n tree: Tree,\n schema: TsLambdaFunctionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const projectConfig = readProjectConfigurationUnqualified(\n tree,\n schema.project,\n );\n\n const tsconfigPath = joinPathFragments(projectConfig.root, 'tsconfig.json');\n\n // Check if the project has a tsconfig.json file\n if (!tree.exists(tsconfigPath)) {\n throw new Error(\n `This generator does not support selected project ${schema.project}. The project must be a typescript project (ie contain a tsconfig.json)`,\n );\n }\n\n if (!projectConfig.sourceRoot) {\n throw new Error(\n `This project does not have a source root. Please add a source root to the project configuration before running this generator.`,\n );\n }\n\n const dir = projectConfig.root;\n const projectNameWithOutScope = projectConfig.name.split('/').pop();\n const projectNameKebabCase = toKebabCase(projectNameWithOutScope);\n const nameKebabCase = toKebabCase(schema.name);\n\n const constructFunctionNameKebabCase = `${projectNameKebabCase}-${nameKebabCase}`;\n const constructFunctionClassName = toClassName(\n constructFunctionNameKebabCase,\n );\n const lambdaFunctionCamelCase = camelCase(schema.name);\n const lambdaFunctionClassName = pascalCase(schema.name);\n const lambdaFunctionKebabCase = toKebabCase(schema.name);\n\n const functionPathFromProjectRoot = joinPathFragments(\n 'src',\n schema.functionPath ?? '',\n `${lambdaFunctionKebabCase}.ts`,\n );\n const functionPath = joinPathFragments(\n projectConfig.root,\n functionPathFromProjectRoot,\n );\n\n const infra = schema.infra ?? 'lambda';\n const handlerAlreadyExists = tree.exists(functionPath);\n\n if (handlerAlreadyExists && infra === 'none') {\n throw new Error(\n `This project already has a lambda function with the name ${nameKebabCase}. Please remove the lambda function before running this generator or use a different name.`,\n );\n }\n\n const bundleOutputDir = joinPathFragments('lambda', lambdaFunctionKebabCase);\n\n if (infra !== 'none') {\n const iac = await resolveIac(tree, schema.iac);\n\n await sharedConstructsGenerator(tree, {\n iac,\n });\n\n await addLambdaFunctionInfra(tree, {\n functionProjectName: projectConfig.name,\n nameClassName: constructFunctionClassName,\n nameKebabCase: constructFunctionNameKebabCase,\n handler: 'index.handler',\n runtime: 'node',\n bundlePathFromRoot: joinPathFragments(\n 'dist',\n dir,\n 'bundle',\n bundleOutputDir,\n ),\n iac,\n });\n }\n\n const enhancedOptions = {\n ...schema,\n lambdaFunctionCamelCase,\n lambdaFunctionClassName,\n lambdaFunctionKebabCase,\n returnType: TS_HANDLER_RETURN_TYPES[schema.event],\n };\n\n if (infra !== 'none') {\n // Add a bundle target for the function\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: functionPathFromProjectRoot,\n bundleOutputDir,\n external: [/@aws-sdk\\/.*/], // lambda runtime provides aws sdk\n });\n }\n\n projectConfig.targets = sortObjectKeys(projectConfig.targets);\n updateProjectConfiguration(tree, projectConfig.name, projectConfig);\n\n // Generate the lambda handler file\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'handler'),\n joinPathFragments(projectConfig.sourceRoot, schema.functionPath ?? ''),\n enhancedOptions,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-lambda-powertools/tracer',\n '@aws-lambda-powertools/logger',\n '@aws-lambda-powertools/metrics',\n '@aws-lambda-powertools/parameters',\n '@aws-lambda-powertools/parser',\n '@aws-sdk/client-appconfigdata',\n '@middy/core',\n 'zod',\n ]),\n withVersions(['@types/aws-lambda']),\n );\n\n addComponentGeneratorMetadata(\n tree,\n projectConfig.name,\n TS_LAMBDA_FUNCTION_GENERATOR_INFO,\n functionPathFromProjectRoot,\n lambdaFunctionKebabCase,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_LAMBDA_FUNCTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n\n return () => {\n installPackagesTask(tree);\n };\n};\n\nexport default tsLambdaFunctionGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","camelCase","addTypeScriptBundleTarget","formatFilesInSubtree","addLambdaFunctionInfra","resolveIac","addGeneratorMetricsIfApplicable","pascalCase","toClassName","toKebabCase","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","sharedConstructsGenerator","withVersions","TS_HANDLER_RETURN_TYPES","TS_LAMBDA_FUNCTION_GENERATOR_INFO","filename","tsLambdaFunctionGenerator","tree","schema","projectConfig","project","tsconfigPath","root","exists","Error","sourceRoot","dir","projectNameWithOutScope","name","split","pop","projectNameKebabCase","nameKebabCase","constructFunctionNameKebabCase","constructFunctionClassName","lambdaFunctionCamelCase","lambdaFunctionClassName","lambdaFunctionKebabCase","functionPathFromProjectRoot","functionPath","infra","handlerAlreadyExists","bundleOutputDir","iac","functionProjectName","nameClassName","handler","runtime","bundlePathFromRoot","enhancedOptions","returnType","event","targetFilePath","external","targets","dirname","overwriteStrategy","KeepExisting"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lambda-function/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport camelCase from 'lodash.camelcase';\nimport { addTypeScriptBundleTarget } from '../../utils/bundle/bundle';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { addLambdaFunctionInfra } from '../../utils/function-constructs/function-constructs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { pascalCase, toClassName, toKebabCase } from '../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport { withVersions } from '../../utils/versions';\nimport { TS_HANDLER_RETURN_TYPES } from './io';\nimport type { TsLambdaFunctionGeneratorSchema } from './schema';\n\nexport const TS_LAMBDA_FUNCTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\n/**\n * Generates a TypeScript Lambda Function to add to a TypeScript project\n */\nexport const tsLambdaFunctionGenerator = async (\n tree: Tree,\n schema: TsLambdaFunctionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const projectConfig = readProjectConfigurationUnqualified(\n tree,\n schema.project,\n );\n\n const tsconfigPath = joinPathFragments(projectConfig.root, 'tsconfig.json');\n\n // Check if the project has a tsconfig.json file\n if (!tree.exists(tsconfigPath)) {\n throw new Error(\n `This generator does not support selected project ${schema.project}. The project must be a typescript project (ie contain a tsconfig.json)`,\n );\n }\n\n if (!projectConfig.sourceRoot) {\n throw new Error(\n `This project does not have a source root. Please add a source root to the project configuration before running this generator.`,\n );\n }\n\n const dir = projectConfig.root;\n const projectNameWithOutScope = projectConfig.name.split('/').pop();\n const projectNameKebabCase = toKebabCase(projectNameWithOutScope);\n const nameKebabCase = toKebabCase(schema.name);\n\n const constructFunctionNameKebabCase = `${projectNameKebabCase}-${nameKebabCase}`;\n const constructFunctionClassName = toClassName(\n constructFunctionNameKebabCase,\n );\n const lambdaFunctionCamelCase = camelCase(schema.name);\n const lambdaFunctionClassName = pascalCase(schema.name);\n const lambdaFunctionKebabCase = toKebabCase(schema.name);\n\n const functionPathFromProjectRoot = joinPathFragments(\n 'src',\n schema.functionPath ?? '',\n `${lambdaFunctionKebabCase}.ts`,\n );\n const functionPath = joinPathFragments(\n projectConfig.root,\n functionPathFromProjectRoot,\n );\n\n const infra = schema.infra ?? 'lambda';\n const handlerAlreadyExists = tree.exists(functionPath);\n\n if (handlerAlreadyExists && infra === 'none') {\n throw new Error(\n `This project already has a lambda function with the name ${nameKebabCase}. Please remove the lambda function before running this generator or use a different name.`,\n );\n }\n\n const bundleOutputDir = joinPathFragments('lambda', lambdaFunctionKebabCase);\n\n if (infra !== 'none') {\n const iac = await resolveIac(tree, schema.iac);\n\n await sharedConstructsGenerator(tree, {\n iac,\n });\n\n await addLambdaFunctionInfra(tree, {\n functionProjectName: projectConfig.name,\n nameClassName: constructFunctionClassName,\n nameKebabCase: constructFunctionNameKebabCase,\n handler: 'index.handler',\n runtime: 'node',\n bundlePathFromRoot: joinPathFragments(\n 'dist',\n dir,\n 'bundle',\n bundleOutputDir,\n ),\n iac,\n });\n }\n\n const enhancedOptions = {\n ...schema,\n lambdaFunctionCamelCase,\n lambdaFunctionClassName,\n lambdaFunctionKebabCase,\n returnType: TS_HANDLER_RETURN_TYPES[schema.event],\n };\n\n if (infra !== 'none') {\n // Add a bundle target for the function\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: functionPathFromProjectRoot,\n bundleOutputDir,\n external: [/@aws-sdk\\/.*/], // lambda runtime provides aws sdk\n });\n }\n\n projectConfig.targets = sortObjectKeys(projectConfig.targets);\n updateProjectConfiguration(tree, projectConfig.name, projectConfig);\n\n // Generate the lambda handler file\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'handler'),\n joinPathFragments(projectConfig.sourceRoot, schema.functionPath ?? ''),\n enhancedOptions,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-lambda-powertools/tracer',\n '@aws-lambda-powertools/logger',\n '@aws-lambda-powertools/metrics',\n '@aws-lambda-powertools/parameters',\n '@aws-lambda-powertools/parser',\n '@aws-sdk/client-appconfigdata',\n '@middy/core',\n 'zod',\n ]),\n withVersions(['@types/aws-lambda']),\n );\n\n addComponentGeneratorMetadata(\n tree,\n projectConfig.name,\n TS_LAMBDA_FUNCTION_GENERATOR_INFO,\n functionPathFromProjectRoot,\n lambdaFunctionKebabCase,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_LAMBDA_FUNCTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsLambdaFunctionGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","camelCase","addTypeScriptBundleTarget","formatFilesInSubtree","addLambdaFunctionInfra","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","pascalCase","toClassName","toKebabCase","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","sharedConstructsGenerator","withVersions","TS_HANDLER_RETURN_TYPES","TS_LAMBDA_FUNCTION_GENERATOR_INFO","filename","tsLambdaFunctionGenerator","tree","schema","projectConfig","project","tsconfigPath","root","exists","Error","sourceRoot","dir","projectNameWithOutScope","name","split","pop","projectNameKebabCase","nameKebabCase","constructFunctionNameKebabCase","constructFunctionClassName","lambdaFunctionCamelCase","lambdaFunctionClassName","lambdaFunctionKebabCase","functionPathFromProjectRoot","functionPath","infra","handlerAlreadyExists","bundleOutputDir","iac","functionProjectName","nameClassName","handler","runtime","bundlePathFromRoot","enhancedOptions","returnType","event","targetFilePath","external","targets","dirname","overwriteStrategy","KeepExisting","preferInstallDependencies","languages"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lambda-function/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 EventSource =\n | 'Any'\n | 'AlbSchema'\n | 'APIGatewayProxyEventSchema'\n | 'APIGatewayRequestAuthorizerEventSchema'\n | 'APIGatewayTokenAuthorizerEventSchema'\n | 'APIGatewayProxyEventV2Schema'\n | 'APIGatewayProxyWebsocketEventSchema'\n | 'APIGatewayRequestAuthorizerEventV2Schema'\n | 'CloudFormationCustomResourceCreateSchema'\n | 'CloudFormationCustomResourceUpdateSchema'\n | 'CloudFormationCustomResourceDeleteSchema'\n | 'CloudWatchLogsSchema'\n | 'PreSignupTriggerSchema'\n | 'PostConfirmationTriggerSchema'\n | 'CustomMessageTriggerSchema'\n | 'MigrateUserTriggerSchema'\n | 'CustomSMSSenderTriggerSchema'\n | 'CustomEmailSenderTriggerSchema'\n | 'DefineAuthChallengeTriggerSchema'\n | 'CreateAuthChallengeTriggerSchema'\n | 'VerifyAuthChallengeTriggerSchema'\n | 'PreTokenGenerationTriggerSchemaV1'\n | 'PreTokenGenerationTriggerSchemaV2AndV3'\n | 'DynamoDBStreamSchema'\n | 'EventBridgeSchema'\n | 'KafkaMskEventSchema'\n | 'KafkaSelfManagedEventSchema'\n | 'KinesisDataStreamSchema'\n | 'KinesisFirehoseSchema'\n | 'KinesisDynamoDBStreamSchema'\n | 'KinesisFirehoseSqsSchema'\n | 'LambdaFunctionUrlSchema'\n | 'S3EventNotificationEventBridgeSchema'\n | 'S3Schema'\n | 'S3ObjectLambdaEventSchema'\n | 'S3SqsEventNotificationSchema'\n | 'SesSchema'\n | 'SnsSchema'\n | 'SqsSchema'\n | 'TransferFamilySchema'\n | 'VpcLatticeSchema'\n | 'VpcLatticeV2Schema';\n\nexport type LambdaInfraOption = 'lambda' | 'none';\n\nexport interface TsLambdaFunctionGeneratorSchema {\n readonly project: string;\n readonly name: string;\n readonly functionPath?: string;\n readonly event?: EventSource;\n readonly infra?: LambdaInfraOption;\n readonly iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAkDD,WAOC"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lambda-function/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 EventSource =\n | 'Any'\n | 'AlbSchema'\n | 'APIGatewayProxyEventSchema'\n | 'APIGatewayRequestAuthorizerEventSchema'\n | 'APIGatewayTokenAuthorizerEventSchema'\n | 'APIGatewayProxyEventV2Schema'\n | 'APIGatewayProxyWebsocketEventSchema'\n | 'APIGatewayRequestAuthorizerEventV2Schema'\n | 'CloudFormationCustomResourceCreateSchema'\n | 'CloudFormationCustomResourceUpdateSchema'\n | 'CloudFormationCustomResourceDeleteSchema'\n | 'CloudWatchLogsSchema'\n | 'PreSignupTriggerSchema'\n | 'PostConfirmationTriggerSchema'\n | 'CustomMessageTriggerSchema'\n | 'MigrateUserTriggerSchema'\n | 'CustomSMSSenderTriggerSchema'\n | 'CustomEmailSenderTriggerSchema'\n | 'DefineAuthChallengeTriggerSchema'\n | 'CreateAuthChallengeTriggerSchema'\n | 'VerifyAuthChallengeTriggerSchema'\n | 'PreTokenGenerationTriggerSchemaV1'\n | 'PreTokenGenerationTriggerSchemaV2AndV3'\n | 'DynamoDBStreamSchema'\n | 'EventBridgeSchema'\n | 'KafkaMskEventSchema'\n | 'KafkaSelfManagedEventSchema'\n | 'KinesisDataStreamSchema'\n | 'KinesisFirehoseSchema'\n | 'KinesisDynamoDBStreamSchema'\n | 'KinesisFirehoseSqsSchema'\n | 'LambdaFunctionUrlSchema'\n | 'S3EventNotificationEventBridgeSchema'\n | 'S3Schema'\n | 'S3ObjectLambdaEventSchema'\n | 'S3SqsEventNotificationSchema'\n | 'SesSchema'\n | 'SnsSchema'\n | 'SqsSchema'\n | 'TransferFamilySchema'\n | 'VpcLatticeSchema'\n | 'VpcLatticeV2Schema';\n\nexport type LambdaInfraOption = 'lambda' | 'none';\n\nexport interface TsLambdaFunctionGeneratorSchema {\n readonly project: string;\n readonly name: string;\n readonly functionPath?: string;\n readonly event?: EventSource;\n readonly infra?: LambdaInfraOption;\n readonly iac: IacOption;\n readonly preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAkDD,WAQC"}
@@ -58,4 +58,5 @@ export interface TsLambdaFunctionGeneratorSchema {
58
58
  readonly event?: EventSource;
59
59
  readonly infra?: LambdaInfraOption;
60
60
  readonly iac: IacOption;
61
+ readonly preferInstallDependencies?: boolean;
61
62
  }
@@ -92,6 +92,11 @@
92
92
  "x-priority": "important",
93
93
  "default": "inherit",
94
94
  "x-prompt": "Which provider would you like to manage your infrastructure? (default: inherit)"
95
+ },
96
+ "preferInstallDependencies": {
97
+ "type": "boolean",
98
+ "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.",
99
+ "default": true
95
100
  }
96
101
  },
97
102
  "required": ["project", "name"]
@@ -1,9 +1,10 @@
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, readProjectConfiguration, updateJson, updateProjectConfiguration } from "@nx/devkit";
4
+ */ import { generateFiles, joinPathFragments, OverwriteStrategy, readProjectConfiguration, updateJson, updateProjectConfiguration } from "@nx/devkit";
5
5
  import { libraryGenerator } from "@nx/js";
6
6
  import { formatFilesInSubtree } from "../../utils/format.js";
7
+ import { installDependencies } from "../../utils/install.js";
7
8
  import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
8
9
  import { toKebabCase } from "../../utils/names.js";
9
10
  import { getNpmScopePrefix } from "../../utils/npm-scope.js";
@@ -140,11 +141,14 @@ export const TS_LIB_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
140
141
  TS_LIB_GENERATOR_INFO
141
142
  ]);
142
143
  await formatFilesInSubtree(tree);
143
- return ()=>{
144
- if (!schema.skipInstall) {
145
- installPackagesTask(tree);
146
- }
147
- };
144
+ // `installDependencies` ensures vitest resolves for the `typescript` language (the
145
+ // generated vitest.config.mts imports it and Nx loads that config when
146
+ // computing the project graph), so a deferred install still runs when needed.
147
+ return ()=>installDependencies(tree, schema.preferInstallDependencies, {
148
+ languages: [
149
+ 'typescript'
150
+ ]
151
+ });
148
152
  };
149
153
  export default tsProjectGenerator;
150
154
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lib/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 generateFiles,\n installPackagesTask,\n joinPathFragments,\n type NxJsonConfiguration,\n OverwriteStrategy,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { libraryGenerator } from '@nx/js';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toKebabCase } from '../../utils/names';\nimport { getNpmScopePrefix } from '../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getPackageManagerDisplayCommands } from '../../utils/pkg-manager';\nimport type { TsProjectGeneratorSchema } from './schema';\nimport { configureTsProject } from './ts-project-utils';\n\nexport const TS_LIB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport interface TsLibDetails {\n /**\n * Full package name including scope (eg @foo/bar)\n */\n readonly fullyQualifiedName: string;\n /**\n * Directory of the library relative to the root\n */\n readonly dir: string;\n}\n\n/**\n * Returns details about the TS library to be created\n */\nexport const getTsLibDetails = (\n tree: Tree,\n schema: TsProjectGeneratorSchema,\n): TsLibDetails => {\n const scope = getNpmScopePrefix(tree);\n const normalizedName = toKebabCase(schema.name);\n const fullyQualifiedName = `${scope}${normalizedName}`;\n // NB: interactive nx generator cli can pass empty string\n const dir = joinPathFragments(\n schema.directory || '.',\n schema.subDirectory || normalizedName,\n );\n return { dir, fullyQualifiedName };\n};\n\n/**\n * Generates a typescript project\n */\nexport const tsProjectGenerator = async (\n tree: Tree,\n schema: TsProjectGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const { fullyQualifiedName, dir } = getTsLibDetails(tree, schema);\n\n // Only scaffold the project on first run; on re-run skip creation so user\n // edits are preserved, but continue to (re)apply the configuration below.\n if (!projectExists(tree, fullyQualifiedName)) {\n await libraryGenerator(tree, {\n ...schema,\n name: fullyQualifiedName,\n directory: dir,\n skipPackageJson: true,\n bundler: 'tsc', // TODO: consider supporting others\n linter: 'none',\n unitTestRunner: 'vitest',\n // Register the @nx/vitest plugin so the test target is inferred rather\n // than emitting the deprecated @nx/vitest:test executor target.\n addPlugin: true,\n });\n\n // Replace with simpler sample source code\n tree.delete(joinPathFragments(dir, 'src'));\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n joinPathFragments(dir),\n {\n fullyQualifiedName,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n await configureTsProject(tree, {\n dir,\n fullyQualifiedName,\n });\n\n const projectConfiguration = readProjectConfiguration(\n tree,\n fullyQualifiedName,\n );\n const targets = projectConfiguration.targets;\n\n targets['compile'] = {\n executor: 'nx:run-commands',\n outputs: ['{workspaceRoot}/dist/{projectRoot}/tsc'],\n options: {\n command: 'tsc --build tsconfig.lib.json',\n cwd: '{projectRoot}',\n },\n };\n targets['build'] = {\n dependsOn: ['lint', 'compile', 'test'],\n };\n projectConfiguration.targets = sortObjectKeys(targets);\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfiguration);\n\n addGeneratorMetadata(tree, fullyQualifiedName, TS_LIB_GENERATOR_INFO);\n\n updateJson(tree, 'nx.json', (nxJson: NxJsonConfiguration) => {\n nxJson.namedInputs = {\n ...nxJson.namedInputs,\n default: [\n ...(nxJson.namedInputs?.default ?? []).filter(\n (input) =>\n typeof input !== 'object' ||\n !('dependentTasksOutputFiles' in input) ||\n !(input.dependentTasksOutputFiles === '**/*' && input.transitive),\n ),\n {\n dependentTasksOutputFiles: '**/*',\n transitive: true,\n },\n ],\n };\n\n nxJson.targetDefaults = {\n ...nxJson.targetDefaults,\n compile: {\n cache: true,\n ...nxJson.targetDefaults?.compile,\n inputs: [\n ...(nxJson.targetDefaults?.compile?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n build: {\n cache: true,\n ...nxJson.targetDefaults?.build,\n inputs: [\n ...(nxJson.targetDefaults?.build?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n test: {\n ...nxJson.targetDefaults?.test,\n inputs: [\n ...(nxJson.targetDefaults?.test?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n };\n\n // Ensure we only declare a single typescript plugin with the correct settings\n nxJson.plugins = [\n {\n plugin: '@nx/js/typescript',\n options: {\n typecheck: {\n targetName: 'typecheck',\n },\n build: {\n targetName: 'compile',\n configName: 'tsconfig.lib.json',\n buildDepsName: 'build-deps',\n watchDepsName: 'watch-deps',\n },\n },\n },\n ...(nxJson.plugins ?? []).filter(\n (p) => typeof p === 'string' || p.plugin !== '@nx/js/typescript',\n ),\n ];\n\n return nxJson;\n });\n\n await addGeneratorMetricsIfApplicable(tree, [TS_LIB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n\n return () => {\n if (!schema.skipInstall) {\n installPackagesTask(tree);\n }\n };\n};\nexport default tsProjectGenerator;\n"],"names":["generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","readProjectConfiguration","updateJson","updateProjectConfiguration","libraryGenerator","formatFilesInSubtree","addGeneratorMetricsIfApplicable","toKebabCase","getNpmScopePrefix","addGeneratorMetadata","getGeneratorInfo","projectExists","sortObjectKeys","getPackageManagerDisplayCommands","configureTsProject","TS_LIB_GENERATOR_INFO","filename","getTsLibDetails","tree","schema","scope","normalizedName","name","fullyQualifiedName","dir","directory","subDirectory","tsProjectGenerator","skipPackageJson","bundler","linter","unitTestRunner","addPlugin","delete","dirname","pkgMgrCmd","exec","overwriteStrategy","KeepExisting","projectConfiguration","targets","executor","outputs","options","command","cwd","dependsOn","nxJson","namedInputs","default","filter","input","dependentTasksOutputFiles","transitive","targetDefaults","compile","cache","inputs","i","build","test","plugins","plugin","typecheck","targetName","configName","buildDepsName","watchDepsName","p","skipInstall"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,aAAa,EACbC,mBAAmB,EACnBC,iBAAiB,EAEjBC,iBAAiB,EACjBC,wBAAwB,EAExBC,UAAU,EACVC,0BAA0B,QACrB,aAAa;AACpB,SAASC,gBAAgB,QAAQ,SAAS;AAC1C,SAASC,oBAAoB,QAAQ,wBAAqB;AAC1D,SAASC,+BAA+B,QAAQ,yBAAsB;AACtE,SAASC,WAAW,QAAQ,uBAAoB;AAChD,SAASC,iBAAiB,QAAQ,2BAAwB;AAC1D,SACEC,oBAAoB,EACpBC,gBAAgB,EAEhBC,aAAa,QACR,oBAAiB;AACxB,SAASC,cAAc,QAAQ,wBAAqB;AACpD,SAASC,gCAAgC,QAAQ,6BAA0B;AAE3E,SAASC,kBAAkB,QAAQ,wBAAqB;AAExD,OAAO,MAAMC,wBAAyCL,iBACpD,YAAYM,QAAQ,EACpB;AAaF;;CAEC,GACD,OAAO,MAAMC,kBAAkB,CAC7BC,MACAC;IAEA,MAAMC,QAAQZ,kBAAkBU;IAChC,MAAMG,iBAAiBd,YAAYY,OAAOG,IAAI;IAC9C,MAAMC,qBAAqB,GAAGH,QAAQC,gBAAgB;IACtD,yDAAyD;IACzD,MAAMG,MAAMzB,kBACVoB,OAAOM,SAAS,IAAI,KACpBN,OAAOO,YAAY,IAAIL;IAEzB,OAAO;QAAEG;QAAKD;IAAmB;AACnC,EAAE;AAEF;;CAEC,GACD,OAAO,MAAMI,qBAAqB,OAChCT,MACAC;IAEA,MAAM,EAAEI,kBAAkB,EAAEC,GAAG,EAAE,GAAGP,gBAAgBC,MAAMC;IAE1D,0EAA0E;IAC1E,0EAA0E;IAC1E,IAAI,CAACR,cAAcO,MAAMK,qBAAqB;QAC5C,MAAMnB,iBAAiBc,MAAM;YAC3B,GAAGC,MAAM;YACTG,MAAMC;YACNE,WAAWD;YACXI,iBAAiB;YACjBC,SAAS;YACTC,QAAQ;YACRC,gBAAgB;YAChB,uEAAuE;YACvE,gEAAgE;YAChEC,WAAW;QACb;QAEA,0CAA0C;QAC1Cd,KAAKe,MAAM,CAAClC,kBAAkByB,KAAK;QACnC3B,cACEqB,MACAnB,kBAAkB,YAAYmC,OAAO,EAAE,UACvCnC,kBAAkByB,MAClB;YACED;YACAY,WAAWtB,mCAAmCuB,IAAI;QACpD,GACA;YACEC,mBAAmBrC,kBAAkBsC,YAAY;QACnD;IAEJ;IACA,MAAMxB,mBAAmBI,MAAM;QAC7BM;QACAD;IACF;IAEA,MAAMgB,uBAAuBtC,yBAC3BiB,MACAK;IAEF,MAAMiB,UAAUD,qBAAqBC,OAAO;IAE5CA,OAAO,CAAC,UAAU,GAAG;QACnBC,UAAU;QACVC,SAAS;YAAC;SAAyC;QACnDC,SAAS;YACPC,SAAS;YACTC,KAAK;QACP;IACF;IACAL,OAAO,CAAC,QAAQ,GAAG;QACjBM,WAAW;YAAC;YAAQ;YAAW;SAAO;IACxC;IACAP,qBAAqBC,OAAO,GAAG5B,eAAe4B;IAE9CrC,2BAA2Be,MAAMK,oBAAoBgB;IAErD9B,qBAAqBS,MAAMK,oBAAoBR;IAE/Cb,WAAWgB,MAAM,WAAW,CAAC6B;QAC3BA,OAAOC,WAAW,GAAG;YACnB,GAAGD,OAAOC,WAAW;YACrBC,SAAS;mBACJ,AAACF,CAAAA,OAAOC,WAAW,EAAEC,WAAW,EAAE,AAAD,EAAGC,MAAM,CAC3C,CAACC,QACC,OAAOA,UAAU,YACjB,CAAE,CAAA,+BAA+BA,KAAI,KACrC,CAAEA,CAAAA,MAAMC,yBAAyB,KAAK,UAAUD,MAAME,UAAU,AAAD;gBAEnE;oBACED,2BAA2B;oBAC3BC,YAAY;gBACd;aACD;QACH;QAEAN,OAAOO,cAAc,GAAG;YACtB,GAAGP,OAAOO,cAAc;YACxBC,SAAS;gBACPC,OAAO;gBACP,GAAGT,OAAOO,cAAc,EAAEC,OAAO;gBACjCE,QAAQ;uBACH,AAACV,CAAAA,OAAOO,cAAc,EAAEC,SAASE,UAAU,EAAE,AAAD,EAAGP,MAAM,CACtD,CAACQ,IAAMA,MAAM;oBAEf;iBACD;YACH;YACAC,OAAO;gBACLH,OAAO;gBACP,GAAGT,OAAOO,cAAc,EAAEK,KAAK;gBAC/BF,QAAQ;uBACH,AAACV,CAAAA,OAAOO,cAAc,EAAEK,OAAOF,UAAU,EAAE,AAAD,EAAGP,MAAM,CACpD,CAACQ,IAAMA,MAAM;oBAEf;iBACD;YACH;YACAE,MAAM;gBACJ,GAAGb,OAAOO,cAAc,EAAEM,IAAI;gBAC9BH,QAAQ;uBACH,AAACV,CAAAA,OAAOO,cAAc,EAAEM,MAAMH,UAAU,EAAE,AAAD,EAAGP,MAAM,CACnD,CAACQ,IAAMA,MAAM;oBAEf;iBACD;YACH;QACF;QAEA,8EAA8E;QAC9EX,OAAOc,OAAO,GAAG;YACf;gBACEC,QAAQ;gBACRnB,SAAS;oBACPoB,WAAW;wBACTC,YAAY;oBACd;oBACAL,OAAO;wBACLK,YAAY;wBACZC,YAAY;wBACZC,eAAe;wBACfC,eAAe;oBACjB;gBACF;YACF;eACG,AAACpB,CAAAA,OAAOc,OAAO,IAAI,EAAE,AAAD,EAAGX,MAAM,CAC9B,CAACkB,IAAM,OAAOA,MAAM,YAAYA,EAAEN,MAAM,KAAK;SAEhD;QAED,OAAOf;IACT;IAEA,MAAMzC,gCAAgCY,MAAM;QAACH;KAAsB;IAEnE,MAAMV,qBAAqBa;IAE3B,OAAO;QACL,IAAI,CAACC,OAAOkD,WAAW,EAAE;YACvBvE,oBAAoBoB;QACtB;IACF;AACF,EAAE;AACF,eAAeS,mBAAmB"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lib/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 generateFiles,\n joinPathFragments,\n type NxJsonConfiguration,\n OverwriteStrategy,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { libraryGenerator } from '@nx/js';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toKebabCase } from '../../utils/names';\nimport { getNpmScopePrefix } from '../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getPackageManagerDisplayCommands } from '../../utils/pkg-manager';\nimport type { TsProjectGeneratorSchema } from './schema';\nimport { configureTsProject } from './ts-project-utils';\n\nexport const TS_LIB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport interface TsLibDetails {\n /**\n * Full package name including scope (eg @foo/bar)\n */\n readonly fullyQualifiedName: string;\n /**\n * Directory of the library relative to the root\n */\n readonly dir: string;\n}\n\n/**\n * Returns details about the TS library to be created\n */\nexport const getTsLibDetails = (\n tree: Tree,\n schema: TsProjectGeneratorSchema,\n): TsLibDetails => {\n const scope = getNpmScopePrefix(tree);\n const normalizedName = toKebabCase(schema.name);\n const fullyQualifiedName = `${scope}${normalizedName}`;\n // NB: interactive nx generator cli can pass empty string\n const dir = joinPathFragments(\n schema.directory || '.',\n schema.subDirectory || normalizedName,\n );\n return { dir, fullyQualifiedName };\n};\n\n/**\n * Generates a typescript project\n */\nexport const tsProjectGenerator = async (\n tree: Tree,\n schema: TsProjectGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const { fullyQualifiedName, dir } = getTsLibDetails(tree, schema);\n\n // Only scaffold the project on first run; on re-run skip creation so user\n // edits are preserved, but continue to (re)apply the configuration below.\n if (!projectExists(tree, fullyQualifiedName)) {\n await libraryGenerator(tree, {\n ...schema,\n name: fullyQualifiedName,\n directory: dir,\n skipPackageJson: true,\n bundler: 'tsc', // TODO: consider supporting others\n linter: 'none',\n unitTestRunner: 'vitest',\n // Register the @nx/vitest plugin so the test target is inferred rather\n // than emitting the deprecated @nx/vitest:test executor target.\n addPlugin: true,\n });\n\n // Replace with simpler sample source code\n tree.delete(joinPathFragments(dir, 'src'));\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n joinPathFragments(dir),\n {\n fullyQualifiedName,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n await configureTsProject(tree, {\n dir,\n fullyQualifiedName,\n });\n\n const projectConfiguration = readProjectConfiguration(\n tree,\n fullyQualifiedName,\n );\n const targets = projectConfiguration.targets;\n\n targets['compile'] = {\n executor: 'nx:run-commands',\n outputs: ['{workspaceRoot}/dist/{projectRoot}/tsc'],\n options: {\n command: 'tsc --build tsconfig.lib.json',\n cwd: '{projectRoot}',\n },\n };\n targets['build'] = {\n dependsOn: ['lint', 'compile', 'test'],\n };\n projectConfiguration.targets = sortObjectKeys(targets);\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfiguration);\n\n addGeneratorMetadata(tree, fullyQualifiedName, TS_LIB_GENERATOR_INFO);\n\n updateJson(tree, 'nx.json', (nxJson: NxJsonConfiguration) => {\n nxJson.namedInputs = {\n ...nxJson.namedInputs,\n default: [\n ...(nxJson.namedInputs?.default ?? []).filter(\n (input) =>\n typeof input !== 'object' ||\n !('dependentTasksOutputFiles' in input) ||\n !(input.dependentTasksOutputFiles === '**/*' && input.transitive),\n ),\n {\n dependentTasksOutputFiles: '**/*',\n transitive: true,\n },\n ],\n };\n\n nxJson.targetDefaults = {\n ...nxJson.targetDefaults,\n compile: {\n cache: true,\n ...nxJson.targetDefaults?.compile,\n inputs: [\n ...(nxJson.targetDefaults?.compile?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n build: {\n cache: true,\n ...nxJson.targetDefaults?.build,\n inputs: [\n ...(nxJson.targetDefaults?.build?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n test: {\n ...nxJson.targetDefaults?.test,\n inputs: [\n ...(nxJson.targetDefaults?.test?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n };\n\n // Ensure we only declare a single typescript plugin with the correct settings\n nxJson.plugins = [\n {\n plugin: '@nx/js/typescript',\n options: {\n typecheck: {\n targetName: 'typecheck',\n },\n build: {\n targetName: 'compile',\n configName: 'tsconfig.lib.json',\n buildDepsName: 'build-deps',\n watchDepsName: 'watch-deps',\n },\n },\n },\n ...(nxJson.plugins ?? []).filter(\n (p) => typeof p === 'string' || p.plugin !== '@nx/js/typescript',\n ),\n ];\n\n return nxJson;\n });\n\n await addGeneratorMetricsIfApplicable(tree, [TS_LIB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n\n // `installDependencies` ensures vitest resolves for the `typescript` language (the\n // generated vitest.config.mts imports it and Nx loads that config when\n // computing the project graph), so a deferred install still runs when needed.\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\nexport default tsProjectGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","readProjectConfiguration","updateJson","updateProjectConfiguration","libraryGenerator","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toKebabCase","getNpmScopePrefix","addGeneratorMetadata","getGeneratorInfo","projectExists","sortObjectKeys","getPackageManagerDisplayCommands","configureTsProject","TS_LIB_GENERATOR_INFO","filename","getTsLibDetails","tree","schema","scope","normalizedName","name","fullyQualifiedName","dir","directory","subDirectory","tsProjectGenerator","skipPackageJson","bundler","linter","unitTestRunner","addPlugin","delete","dirname","pkgMgrCmd","exec","overwriteStrategy","KeepExisting","projectConfiguration","targets","executor","outputs","options","command","cwd","dependsOn","nxJson","namedInputs","default","filter","input","dependentTasksOutputFiles","transitive","targetDefaults","compile","cache","inputs","i","build","test","plugins","plugin","typecheck","targetName","configName","buildDepsName","watchDepsName","p","preferInstallDependencies","languages"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lib/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { LibraryGeneratorSchema } from '@nx/js/src/utils/schema';\nexport interface TsProjectGeneratorSchema {\n name: LibraryGeneratorSchema['name'];\n directory?: string;\n // unitTestRunner?: LibraryGeneratorSchema['unitTestRunner'];\n // TODO: test and consider exposing alternate bundlers\n // bundler?: LibraryGeneratorSchema['bundler'];\n subDirectory?: string;\n skipInstall?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED,WAQC"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lib/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { LibraryGeneratorSchema } from '@nx/js/src/utils/schema';\nexport interface TsProjectGeneratorSchema {\n name: LibraryGeneratorSchema['name'];\n directory?: string;\n // unitTestRunner?: LibraryGeneratorSchema['unitTestRunner'];\n // TODO: test and consider exposing alternate bundlers\n // bundler?: LibraryGeneratorSchema['bundler'];\n subDirectory?: string;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED,WAQC"}
@@ -10,5 +10,5 @@ export interface TsProjectGeneratorSchema {
10
10
  // TODO: test and consider exposing alternate bundlers
11
11
  // bundler?: LibraryGeneratorSchema['bundler'];
12
12
  subDirectory?: string;
13
- skipInstall?: boolean;
13
+ preferInstallDependencies?: boolean;
14
14
  }
@@ -26,6 +26,11 @@
26
26
  "type": "string",
27
27
  "description": "The sub directory the lib is placed in. By default this is the library name.",
28
28
  "x-prompt": "Which sub directory do you want to create the library in? (By default this is the library name)"
29
+ },
30
+ "preferInstallDependencies": {
31
+ "type": "boolean",
32
+ "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.",
33
+ "default": true
29
34
  }
30
35
  },
31
36
  "required": ["name"]
@@ -489,7 +489,7 @@ resource "null_resource" "runtime_ready" {
489
489
 
490
490
  provisioner "local-exec" {
491
491
  command = <<-EOT
492
- uv run --with boto3==1.43.29 python -c "
492
+ uv run --with boto3==1.43.37 python -c "
493
493
  import boto3
494
494
  import json
495
495
  import os
@@ -797,7 +797,7 @@ exports[`ts#mcp-server generator > should match snapshot for generated files > u
797
797
  },
798
798
  "dependencies": {
799
799
  "@aws-lambda-powertools/parameters": "2.33.1",
800
- "@aws-sdk/client-appconfigdata": "3.1068.0",
800
+ "@aws-sdk/client-appconfigdata": "3.1075.0",
801
801
  "@modelcontextprotocol/sdk": "1.29.0",
802
802
  "express": "5.2.1",
803
803
  "zod": "4.4.3"
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
- */ import { addDependenciesToPackageJson, detectPackageManager, generateFiles, installPackagesTask, joinPathFragments, OverwriteStrategy, readJson, updateJson, updateProjectConfiguration, writeJson } from "@nx/devkit";
4
+ */ import { addDependenciesToPackageJson, detectPackageManager, generateFiles, joinPathFragments, OverwriteStrategy, readJson, updateJson, updateProjectConfiguration, writeJson } from "@nx/devkit";
5
5
  import { ensureLicenseExceptions } from "../../license/config.js";
6
6
  import { MCP_INSPECTOR_EXCEPTIONS } from "../../license/known-exceptions.js";
7
7
  import { addMcpServerInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
@@ -10,6 +10,7 @@ import { resolveContainers } from "../../utils/containers.js";
10
10
  import { formatFilesInSubtree } from "../../utils/format.js";
11
11
  import { FsCommands } from "../../utils/fs.js";
12
12
  import { resolveIac } from "../../utils/iac.js";
13
+ import { installDependencies } from "../../utils/install.js";
13
14
  import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
14
15
  import { kebabCase, toClassName } from "../../utils/names.js";
15
16
  import { getNpmScope } from "../../utils/npm-scope.js";
@@ -239,9 +240,11 @@ export const tsMcpServerGenerator = async (tree, options)=>{
239
240
  ]);
240
241
  await ensureLicenseExceptions(tree, MCP_INSPECTOR_EXCEPTIONS);
241
242
  await formatFilesInSubtree(tree);
242
- return ()=>{
243
- installPackagesTask(tree);
244
- };
243
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
244
+ languages: [
245
+ 'typescript'
246
+ ]
247
+ });
245
248
  };
246
249
  export default tsMcpServerGenerator;
247
250