@aws/nx-plugin 1.0.0-rc.54 → 1.0.0-rc.56

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 (284) hide show
  1. package/migrations.json +50 -0
  2. package/package.json +1 -1
  3. package/src/agentcore-gateway/gateway-connection/generator.js +3 -1
  4. package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
  5. package/src/agentcore-gateway/generator.d.ts +49 -1
  6. package/src/agentcore-gateway/generator.js +55 -22
  7. package/src/agentcore-gateway/generator.js.map +1 -1
  8. package/src/agentcore-gateway/mcp-connection/generator.js +3 -1
  9. package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
  10. package/src/infra/app/__snapshots__/generator.spec.ts.snap +2 -0
  11. package/src/infra/app/generator.d.ts +43 -0
  12. package/src/infra/app/generator.js +47 -18
  13. package/src/infra/app/generator.js.map +1 -1
  14. package/src/init/generator.d.ts +13 -0
  15. package/src/init/generator.js +14 -3
  16. package/src/init/generator.js.map +1 -1
  17. package/src/migrations/latest/backfill-generator-metadata/migration.d.ts +96 -0
  18. package/src/migrations/latest/backfill-generator-metadata/migration.js +670 -0
  19. package/src/migrations/latest/backfill-generator-metadata/migration.js.map +1 -0
  20. package/src/migrations/latest/dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
  21. package/src/migrations/latest/dynamodb-local-remove-optimize-flag/migration.js +89 -0
  22. package/src/migrations/latest/dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
  23. package/src/migrations/latest/modernize-function-props-cast/migration.js +0 -1
  24. package/src/migrations/latest/modernize-function-props-cast/migration.js.map +1 -1
  25. package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js +0 -1
  26. package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -1
  27. package/src/migrations/latest/restrict-cors-to-custom-domains/migration.js +0 -2
  28. package/src/migrations/latest/restrict-cors-to-custom-domains/migration.js.map +1 -1
  29. package/src/migrations/latest/terraform-bootstrap-adopt-existing-bucket/migration.js +0 -1
  30. package/src/migrations/latest/terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -1
  31. package/src/migrations/latest/user-identity-waf-allow-localhost-callback/migration.js +0 -2
  32. package/src/migrations/latest/user-identity-waf-allow-localhost-callback/migration.js.map +1 -1
  33. package/src/preset/generator.d.ts +13 -0
  34. package/src/preset/generator.js +12 -3
  35. package/src/preset/generator.js.map +1 -1
  36. package/src/py/agent/a2a-connection/generator.d.ts +24 -0
  37. package/src/py/agent/a2a-connection/generator.js +49 -20
  38. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  39. package/src/py/agent/gateway-connection/generator.d.ts +23 -0
  40. package/src/py/agent/gateway-connection/generator.js +45 -11
  41. package/src/py/agent/gateway-connection/generator.js.map +1 -1
  42. package/src/py/agent/generator.d.ts +146 -1
  43. package/src/py/agent/generator.js +173 -76
  44. package/src/py/agent/generator.js.map +1 -1
  45. package/src/py/agent/mcp-connection/generator.d.ts +23 -0
  46. package/src/py/agent/mcp-connection/generator.js +45 -11
  47. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  48. package/src/py/agent/react-connection/generator.d.ts +146 -0
  49. package/src/py/agent/react-connection/generator.js +27 -4
  50. package/src/py/agent/react-connection/generator.js.map +1 -1
  51. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +0 -2
  52. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
  53. package/src/py/dynamodb/agent-connection/generator.js +7 -1
  54. package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
  55. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +9 -0
  56. package/src/py/dynamodb/fast-api-connection/generator.js +3 -1
  57. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
  58. package/src/py/dynamodb/generator.d.ts +29 -0
  59. package/src/py/dynamodb/generator.js +32 -12
  60. package/src/py/dynamodb/generator.js.map +1 -1
  61. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
  62. package/src/py/dynamodb/mcp-server-connection/generator.js +7 -1
  63. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
  64. package/src/py/fast-api/generator.d.ts +63 -0
  65. package/src/py/fast-api/generator.js +58 -23
  66. package/src/py/fast-api/generator.js.map +1 -1
  67. package/src/py/fast-api/react/generator.d.ts +16 -1
  68. package/src/py/fast-api/react/generator.js +15 -3
  69. package/src/py/fast-api/react/generator.js.map +1 -1
  70. package/src/py/lambda-function/generator.d.ts +21 -0
  71. package/src/py/lambda-function/generator.js +29 -10
  72. package/src/py/lambda-function/generator.js.map +1 -1
  73. package/src/py/mcp-server/generator.d.ts +60 -0
  74. package/src/py/mcp-server/generator.js +62 -25
  75. package/src/py/mcp-server/generator.js.map +1 -1
  76. package/src/py/project/generator.d.ts +13 -0
  77. package/src/py/project/generator.js +29 -10
  78. package/src/py/project/generator.js.map +1 -1
  79. package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +19 -0
  80. package/src/py/rdb/agent-connection/generator.js +7 -1
  81. package/src/py/rdb/agent-connection/generator.js.map +1 -1
  82. package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +7 -0
  83. package/src/py/rdb/fast-api-connection/generator.js +3 -1
  84. package/src/py/rdb/fast-api-connection/generator.js.map +1 -1
  85. package/src/py/rdb/generator.d.ts +89 -0
  86. package/src/py/rdb/generator.js +88 -40
  87. package/src/py/rdb/generator.js.map +1 -1
  88. package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
  89. package/src/py/rdb/mcp-server-connection/generator.js +7 -1
  90. package/src/py/rdb/mcp-server-connection/generator.js.map +1 -1
  91. package/src/smithy/project/generator.d.ts +7 -0
  92. package/src/smithy/project/generator.js +8 -2
  93. package/src/smithy/project/generator.js.map +1 -1
  94. package/src/smithy/react-connection/generator.d.ts +15 -0
  95. package/src/smithy/react-connection/generator.js +17 -3
  96. package/src/smithy/react-connection/generator.js.map +1 -1
  97. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +1 -0
  98. package/src/smithy/ts/api/generator.d.ts +79 -0
  99. package/src/smithy/ts/api/generator.js +77 -33
  100. package/src/smithy/ts/api/generator.js.map +1 -1
  101. package/src/terraform/project/generator.d.ts +50 -0
  102. package/src/terraform/project/generator.js +63 -17
  103. package/src/terraform/project/generator.js.map +1 -1
  104. package/src/trpc/backend/generator.d.ts +84 -0
  105. package/src/trpc/backend/generator.js +98 -38
  106. package/src/trpc/backend/generator.js.map +1 -1
  107. package/src/trpc/react/generator.d.ts +37 -0
  108. package/src/trpc/react/generator.js +63 -26
  109. package/src/trpc/react/generator.js.map +1 -1
  110. package/src/ts/agent/a2a-connection/generator.d.ts +46 -0
  111. package/src/ts/agent/a2a-connection/generator.js +53 -16
  112. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  113. package/src/ts/agent/gateway-connection/generator.d.ts +37 -0
  114. package/src/ts/agent/gateway-connection/generator.js +41 -14
  115. package/src/ts/agent/gateway-connection/generator.js.map +1 -1
  116. package/src/ts/agent/generator.d.ts +162 -0
  117. package/src/ts/agent/generator.js +166 -75
  118. package/src/ts/agent/generator.js.map +1 -1
  119. package/src/ts/agent/mcp-connection/generator.d.ts +37 -0
  120. package/src/ts/agent/mcp-connection/generator.js +41 -14
  121. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  122. package/src/ts/agent/react-connection/generator.d.ts +186 -0
  123. package/src/ts/agent/react-connection/generator.js +70 -21
  124. package/src/ts/agent/react-connection/generator.js.map +1 -1
  125. package/src/ts/astro-docs/generator.d.ts +38 -0
  126. package/src/ts/astro-docs/generator.js +58 -19
  127. package/src/ts/astro-docs/generator.js.map +1 -1
  128. package/src/ts/dcr-proxy/generator.d.ts +24 -0
  129. package/src/ts/dcr-proxy/generator.js +31 -14
  130. package/src/ts/dcr-proxy/generator.js.map +1 -1
  131. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +0 -2
  132. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
  133. package/src/ts/dynamodb/agent-connection/generator.js +7 -1
  134. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
  135. package/src/ts/dynamodb/generator.d.ts +41 -0
  136. package/src/ts/dynamodb/generator.js +47 -20
  137. package/src/ts/dynamodb/generator.js.map +1 -1
  138. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
  139. package/src/ts/dynamodb/mcp-server-connection/generator.js +7 -1
  140. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
  141. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
  142. package/src/ts/dynamodb/smithy-connection/generator.js +3 -1
  143. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
  144. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
  145. package/src/ts/dynamodb/trpc-connection/generator.js +3 -1
  146. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
  147. package/src/ts/lambda-function/generator.d.ts +38 -0
  148. package/src/ts/lambda-function/generator.js +49 -20
  149. package/src/ts/lambda-function/generator.js.map +1 -1
  150. package/src/ts/lib/generator.d.ts +7 -0
  151. package/src/ts/lib/generator.js +8 -1
  152. package/src/ts/lib/generator.js.map +1 -1
  153. package/src/ts/lib/ts-project-utils.d.ts +3 -1
  154. package/src/ts/lib/ts-project-utils.js +3 -2
  155. package/src/ts/lib/ts-project-utils.js.map +1 -1
  156. package/src/ts/lib/vitest.d.ts +10 -1
  157. package/src/ts/lib/vitest.js +14 -2
  158. package/src/ts/lib/vitest.js.map +1 -1
  159. package/src/ts/mcp-server/generator.d.ts +71 -0
  160. package/src/ts/mcp-server/generator.js +73 -36
  161. package/src/ts/mcp-server/generator.js.map +1 -1
  162. package/src/ts/nx-generator/generator.d.ts +3 -0
  163. package/src/ts/nx-generator/generator.js +8 -2
  164. package/src/ts/nx-generator/generator.js.map +1 -1
  165. package/src/ts/nx-migration/files/migration.ts.template +4 -0
  166. package/src/ts/nx-migration/generator.d.ts +3 -0
  167. package/src/ts/nx-migration/generator.js +8 -2
  168. package/src/ts/nx-migration/generator.js.map +1 -1
  169. package/src/ts/nx-plugin/generator.d.ts +3 -0
  170. package/src/ts/nx-plugin/generator.js +8 -2
  171. package/src/ts/nx-plugin/generator.js.map +1 -1
  172. package/src/ts/nx-plugin/utils.d.ts +7 -2
  173. package/src/ts/nx-plugin/utils.js +10 -4
  174. package/src/ts/nx-plugin/utils.js.map +1 -1
  175. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +10 -0
  176. package/src/ts/rdb/agent-connection/generator.js +8 -1
  177. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  178. package/src/ts/rdb/generator.d.ts +101 -0
  179. package/src/ts/rdb/generator.js +93 -41
  180. package/src/ts/rdb/generator.js.map +1 -1
  181. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +10 -0
  182. package/src/ts/rdb/mcp-server-connection/generator.js +8 -1
  183. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  184. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
  185. package/src/ts/rdb/smithy-connection/generator.js +4 -1
  186. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  187. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
  188. package/src/ts/rdb/trpc-connection/generator.js +3 -1
  189. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  190. package/src/ts/react-website/agui/generator.d.ts +86 -0
  191. package/src/ts/react-website/agui/generator.js +63 -28
  192. package/src/ts/react-website/agui/generator.js.map +1 -1
  193. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +8 -2
  194. package/src/ts/react-website/app/generator.d.ts +136 -1
  195. package/src/ts/react-website/app/generator.js +109 -40
  196. package/src/ts/react-website/app/generator.js.map +1 -1
  197. package/src/ts/react-website/cognito-auth/generator.d.ts +19 -0
  198. package/src/ts/react-website/cognito-auth/generator.js +21 -9
  199. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  200. package/src/utils/add-dependencies.d.ts +38 -0
  201. package/src/utils/add-dependencies.js +83 -0
  202. package/src/utils/add-dependencies.js.map +1 -0
  203. package/src/utils/agent-connection/agent-connection.d.ts +27 -6
  204. package/src/utils/agent-connection/agent-connection.js +47 -18
  205. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  206. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +19 -1
  207. package/src/utils/agent-core-constructs/agent-core-constructs.js +26 -6
  208. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  209. package/src/utils/api-constructs/api-constructs.d.ts +21 -2
  210. package/src/utils/api-constructs/api-constructs.js +26 -5
  211. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  212. package/src/utils/bundle/bundle.d.ts +6 -1
  213. package/src/utils/bundle/bundle.js +8 -2
  214. package/src/utils/bundle/bundle.js.map +1 -1
  215. package/src/utils/commands.d.ts +5 -4
  216. package/src/utils/commands.js +2 -6
  217. package/src/utils/commands.js.map +1 -1
  218. package/src/utils/connection/open-api/react.d.ts +18 -1
  219. package/src/utils/connection/open-api/react.js +27 -3
  220. package/src/utils/connection/open-api/react.js.map +1 -1
  221. package/src/utils/declared-dependencies.d.ts +140 -0
  222. package/src/utils/declared-dependencies.js +64 -0
  223. package/src/utils/declared-dependencies.js.map +1 -0
  224. package/src/utils/docker.d.ts +10 -1
  225. package/src/utils/docker.js +7 -3
  226. package/src/utils/docker.js.map +1 -1
  227. package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +0 -1
  228. package/src/utils/fs.d.ts +15 -4
  229. package/src/utils/fs.js +26 -13
  230. package/src/utils/fs.js.map +1 -1
  231. package/src/utils/init.d.ts +14 -1
  232. package/src/utils/init.js +25 -7
  233. package/src/utils/init.js.map +1 -1
  234. package/src/utils/migration-versions.d.ts +25 -6
  235. package/src/utils/migration-versions.js +72 -14
  236. package/src/utils/migration-versions.js.map +1 -1
  237. package/src/utils/nx.d.ts +18 -0
  238. package/src/utils/nx.js +4 -0
  239. package/src/utils/nx.js.map +1 -1
  240. package/src/utils/py.d.ts +3 -2
  241. package/src/utils/py.js +10 -10
  242. package/src/utils/py.js.map +1 -1
  243. package/src/utils/shared-constructs-constants.d.ts +39 -4
  244. package/src/utils/shared-constructs-constants.js +29 -0
  245. package/src/utils/shared-constructs-constants.js.map +1 -1
  246. package/src/utils/shared-constructs.d.ts +4 -1
  247. package/src/utils/shared-constructs.js +5 -4
  248. package/src/utils/shared-constructs.js.map +1 -1
  249. package/src/utils/shared-dynamodb-scripts.d.ts +8 -1
  250. package/src/utils/shared-dynamodb-scripts.js +11 -3
  251. package/src/utils/shared-dynamodb-scripts.js.map +1 -1
  252. package/src/utils/shared-infra-scripts.d.ts +16 -1
  253. package/src/utils/shared-infra-scripts.js +18 -3
  254. package/src/utils/shared-infra-scripts.js.map +1 -1
  255. package/src/utils/shared-rdb-scripts.d.ts +12 -1
  256. package/src/utils/shared-rdb-scripts.js +17 -3
  257. package/src/utils/shared-rdb-scripts.js.map +1 -1
  258. package/src/utils/shared-shadcn.d.ts +26 -1
  259. package/src/utils/shared-shadcn.js +31 -14
  260. package/src/utils/shared-shadcn.js.map +1 -1
  261. package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
  262. package/src/utils/version-upgrade-migration/migration.js +16 -0
  263. package/src/utils/version-upgrade-migration/migration.js.map +1 -0
  264. package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +45 -0
  265. package/src/utils/version-upgrade-migration/nx-package-updates.js +50 -0
  266. package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
  267. package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +50 -0
  268. package/src/utils/version-upgrade-migration/owned-dependencies.js +98 -0
  269. package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
  270. package/src/utils/version-upgrade-migration/register.d.ts +23 -0
  271. package/src/utils/version-upgrade-migration/register.js +38 -0
  272. package/src/utils/version-upgrade-migration/register.js.map +1 -0
  273. package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
  274. package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
  275. package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
  276. package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
  277. package/src/utils/version-upgrade-migration/sync-vended-versions.js +504 -0
  278. package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
  279. package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
  280. package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
  281. package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
  282. package/src/utils/versions.d.ts +25 -5
  283. package/src/utils/versions.js +46 -4
  284. package/src/utils/versions.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/rdb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { relative } from 'node:path';\nimport {\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTypeScriptBundleTarget } from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport { addDependenciesToPackageJson } from '../../utils/dependencies';\nimport { addDockerScanTarget, nodeImageVersions } from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FsCommands } from '../../utils/fs';\nimport { updateGitIgnore } from '../../utils/git';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, snakeCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths';\nimport { registerPnpmBuiltDependencies } from '../../utils/pnpm-workspace';\nimport { assignPort } from '../../utils/port';\nimport { addRdbInfra } from '../../utils/rdb-constructs/rdb-constructs';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport {\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from '../../utils/shared-constructs-constants';\nimport { sharedRdbScriptsGenerator } from '../../utils/shared-rdb-scripts';\nimport { TS_VERSIONS, withVersions } from '../../utils/versions';\nimport tsProjectGenerator, { getTsLibDetails } from '../lib/generator';\nimport type { TsRdbGeneratorSchema } from './schema';\n\nexport const TS_RDB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsRdbGenerator = async (\n tree: Tree,\n options: TsRdbGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameKebabCase = kebabCase(options.name);\n const nameClassName = toClassName(options.name);\n const databaseUser = options.databaseUser ?? 'dbadmin';\n const databaseName = snakeCase(options.databaseName ?? 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 updateJson(tree, joinPathFragments(dir, 'tsconfig.lib.json'), (tsConfig) => ({\n ...tsConfig,\n include: ['src/**/*.ts', 'generated/prisma/**/*.ts'],\n }));\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const localDbPort = assignPort(\n tree,\n projectConfig,\n options.engine === 'mysql' ? 3306 : 5432,\n );\n const localDbHost = 'localhost';\n const localDbUser = options.engine === 'mysql' ? 'root' : 'dbadmin';\n const localDbPassword = 'password';\n const containerName = `${getNpmScope(tree)}-${databaseName}`;\n const dockerImage =\n options.engine === 'mysql'\n ? 'public.ecr.aws/docker/library/mysql:8.0.44'\n : 'public.ecr.aws/docker/library/postgres:17.7';\n\n const templateOptions = {\n engine: options.engine,\n runtimeConfigKey: nameClassName,\n databasePackageAlias: fullyQualifiedName,\n databaseProvider: options.engine === 'mysql' ? 'mysql' : 'postgresql',\n prismaVersion: TS_VERSIONS.prisma,\n ...nodeImageVersions(),\n prismaAdapterPackage:\n options.engine === 'mysql'\n ? '@prisma/adapter-mariadb'\n : '@prisma/adapter-pg',\n prismaAdapterClassName:\n options.engine === 'mysql' ? 'PrismaMariaDb' : 'PrismaPg',\n localDbPort,\n localDbHost,\n localDbName: databaseName,\n localDbUser,\n localDbPassword,\n containerEngine,\n containerName,\n dockerImage,\n ...esmVars(tree),\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n updateGitIgnore(tree, dir, (patterns) => [...patterns, 'generated/prisma']);\n await sharedRdbScriptsGenerator(tree, options.engine);\n const waitForDbScript =\n options.engine === 'mysql'\n ? 'wait-for-mysql-db.ts'\n : 'wait-for-postgres-db.ts';\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'rdb'),\n );\n const relativePathToRoot = getRelativePathToRootByDirectory(\n projectConfig.root,\n );\n const fs = new FsCommands(tree);\n const migrationBundleDir = joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'migration',\n );\n const migrationDockerImageTag = `${getNpmScope(tree)}-${kebabCase(options.name)}-migration:latest`;\n\n if (options.infra !== 'none') {\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: 'src/migration-handler.ts',\n bundleOutputDir: 'migration',\n });\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: 'src/create-db-user-handler.ts',\n bundleOutputDir: 'create-db-user',\n });\n const bundleTarget = projectConfig.targets['bundle'];\n // The bundle target starts with a single rolldown `command`. Wrap it with\n // the migration asset copy steps, unless it has already been transformed\n // into a `commands` array on a previous run.\n if (!bundleTarget.options.commands) {\n const rolldownCommand = bundleTarget.options.command;\n delete bundleTarget.options.command;\n bundleTarget.options = {\n ...bundleTarget.options,\n commands: [\n fs.rm(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.mkdir(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.cp(\n 'prisma',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma`,\n ),\n fs.cp(\n 'prisma.config.ts',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma.config.ts`,\n ),\n fs.cp(\n 'Dockerfile',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/Dockerfile`,\n ),\n rolldownCommand,\n ],\n parallel: false,\n };\n }\n }\n\n projectConfig.targets.generate = {\n executor: 'nx:run-commands',\n outputs: ['{projectRoot}/generated/prisma'],\n options: {\n command: 'prisma generate',\n cwd: '{projectRoot}',\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 options: {\n command: `tsx ${scriptsDir}/start-container.ts`,\n cwd: '{projectRoot}',\n },\n continuous: true,\n };\n projectConfig.targets['wait-for-db'] = {\n executor: 'nx:run-commands',\n dependsOn: ['dev'],\n options: {\n command: `tsx ${scriptsDir}/${waitForDbScript}`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets.prisma = {\n executor: 'nx:run-commands',\n dependsOn: ['dev', 'wait-for-db'],\n options: {\n cwd: '{projectRoot}',\n command: 'prisma',\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n if (iac === 'terraform') {\n projectConfig.targets['docker'] = {\n cache: true,\n executor: 'nx:run-commands',\n options: {\n command: `${containerEngine} build --platform linux/arm64 --provenance=false -t ${migrationDockerImageTag} ${migrationBundleDir}`,\n },\n dependsOn: ['bundle'],\n };\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'docker');\n\n addDockerScanTarget(tree, {\n project: projectConfig,\n containerEngine,\n trivyTargetName: 'trivy',\n dockerTargetName: 'docker',\n imageTags: [migrationDockerImageTag],\n });\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'compile', 'generate');\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n addGeneratorMetadata(tree, fullyQualifiedName, TS_RDB_GENERATOR_INFO, {\n engine: options.engine,\n });\n\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac });\n await addRdbInfra(tree, {\n iac,\n projectName: fullyQualifiedName,\n projectRoot: dir,\n nameClassName,\n nameKebabCase,\n databasePackageAlias: fullyQualifiedName,\n databaseName,\n adminUser: databaseUser,\n engine: options.engine,\n migrationBundleDir,\n createDbUserBundleDir: joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'create-db-user',\n ),\n framework: options.framework,\n migrationDockerImageTag,\n containerEngine,\n });\n }\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n '@aws-sdk/client-secrets-manager',\n '@aws-sdk/rds-signer',\n '@prisma/client',\n ...(options.engine === 'mysql'\n ? (['@prisma/adapter-mariadb', 'mariadb'] as const)\n : (['@prisma/adapter-pg', 'pg'] as const)),\n ]),\n withVersions([\n '@types/aws-lambda',\n ...(options.engine === 'mysql'\n ? ([] as const)\n : (['@types/pg'] as const)),\n ]),\n joinPathFragments(projectConfig.root, 'package.json'),\n );\n\n // @prisma/adapter-pg depends on @types/pg ^8.16.0. Yarn does not dedupe it to\n // the workspace's pinned @types/pg, so it installs a separate copy under the\n // adapter's own node_modules whenever a newer @types/pg is published. The two\n // copies declare structurally incompatible Pool types, so passing our `new\n // Pool(...)` to `new PrismaPg(...)` fails to compile. Scope the resolution to\n // the adapter so other @types/pg consumers are unaffected. Classic yarn only\n // honours the `**/`-prefixed descriptor in a workspace and berry only the\n // bare one, so declare both.\n if (options.engine === 'postgres' && detectPackageManager() === 'yarn') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.resolutions = {\n ...packageJson.resolutions,\n '**/@prisma/adapter-pg/@types/pg': TS_VERSIONS['@types/pg'],\n '@prisma/adapter-pg/@types/pg': TS_VERSIONS['@types/pg'],\n };\n return packageJson;\n });\n }\n\n // The prisma CLI and tsx run migration/seed scripts from the root.\n addDependenciesToPackageJson(tree, {}, withVersions(['prisma', 'tsx']));\n\n registerPnpmBuiltDependencies(tree, {\n '@prisma/engines': false,\n prisma: false,\n });\n\n await addGeneratorMetricsIfApplicable(tree, [TS_RDB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsRdbGenerator;\n"],"names":["relative","detectPackageManager","generateFiles","joinPathFragments","readProjectConfiguration","updateJson","updateProjectConfiguration","addTypeScriptBundleTarget","resolveContainers","addDependenciesToPackageJson","addDockerScanTarget","nodeImageVersions","formatFilesInSubtree","FsCommands","updateGitIgnore","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","snakeCase","toClassName","getNpmScope","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","getRelativePathToRootByDirectory","registerPnpmBuiltDependencies","assignPort","addRdbInfra","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SCRIPTS_DIR","sharedRdbScriptsGenerator","TS_VERSIONS","withVersions","tsProjectGenerator","getTsLibDetails","TS_RDB_GENERATOR_INFO","filename","tsRdbGenerator","tree","options","nameKebabCase","name","nameClassName","databaseUser","databaseName","containerEngine","fullyQualifiedName","dir","directory","subDirectory","projectExists","preferInstallDependencies","tsConfig","include","projectConfig","localDbPort","engine","localDbHost","localDbUser","localDbPassword","containerName","dockerImage","templateOptions","runtimeConfigKey","databasePackageAlias","databaseProvider","prismaVersion","prisma","prismaAdapterPackage","prismaAdapterClassName","localDbName","dirname","patterns","waitForDbScript","scriptsDir","relativePathToRoot","root","fs","migrationBundleDir","migrationDockerImageTag","infra","targetFilePath","bundleOutputDir","bundleTarget","targets","commands","rolldownCommand","command","rm","mkdir","cp","parallel","generate","executor","outputs","cwd","continuous","dependsOn","env","LOCAL_DEV","iac","cache","project","trivyTargetName","dockerTargetName","imageTags","projectName","projectRoot","adminUser","createDbUserBundleDir","framework","packageJson","resolutions","languages"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/rdb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { relative } from 'node:path';\nimport {\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport {\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { updateGitIgnore } from '../../utils/git';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, snakeCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths';\nimport { registerPnpmBuiltDependencies } from '../../utils/pnpm-workspace';\nimport { assignPort } from '../../utils/port';\nimport { addRdbInfra } from '../../utils/rdb-constructs/rdb-constructs';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport {\n type IacMetadata,\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from '../../utils/shared-constructs-constants';\nimport {\n SHARED_RDB_SCRIPTS_DEPENDENCIES,\n sharedRdbScriptsGenerator,\n} from '../../utils/shared-rdb-scripts';\nimport { TS_VERSIONS } from '../../utils/versions';\nimport tsProjectGenerator, { getTsLibDetails } from '../lib/generator';\nimport type { TsRdbGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsRdbMetadata extends IacMetadata {\n readonly engine: TsRdbGeneratorSchema['engine'];\n}\n\n// Each entry names the engine branch it belongs to, so the same declaration\n// drives both adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsRdbMetadata>()({\n ts: [\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@aws-sdk/client-secrets-manager' },\n { name: '@aws-sdk/rds-signer' },\n { name: '@prisma/client' },\n { name: '@prisma/adapter-mariadb', when: (m) => m.engine === 'mysql' },\n { name: 'mariadb', when: (m) => m.engine === 'mysql' },\n { name: '@prisma/adapter-pg', when: (m) => m.engine !== 'mysql' },\n { name: 'pg', when: (m) => m.engine !== 'mysql' },\n { name: '@types/aws-lambda', dev: true },\n { name: '@types/pg', when: (m) => m.engine !== 'mysql', dev: true },\n // The prisma CLI and tsx run migration/seed scripts from the root.\n { name: 'prisma', dev: true, root: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(SHARED_RDB_SCRIPTS_DEPENDENCIES),\n ],\n});\n\nexport const TS_RDB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsRdbGenerator = async (\n tree: Tree,\n options: TsRdbGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameKebabCase = kebabCase(options.name);\n const nameClassName = toClassName(options.name);\n const databaseUser = options.databaseUser ?? 'dbadmin';\n const databaseName = snakeCase(options.databaseName ?? 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 updateJson(tree, joinPathFragments(dir, 'tsconfig.lib.json'), (tsConfig) => ({\n ...tsConfig,\n include: ['src/**/*.ts', 'generated/prisma/**/*.ts'],\n }));\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const localDbPort = assignPort(\n tree,\n projectConfig,\n options.engine === 'mysql' ? 3306 : 5432,\n );\n const localDbHost = 'localhost';\n const localDbUser = options.engine === 'mysql' ? 'root' : 'dbadmin';\n const localDbPassword = 'password';\n const containerName = `${getNpmScope(tree)}-${databaseName}`;\n const dockerImage =\n options.engine === 'mysql'\n ? 'public.ecr.aws/docker/library/mysql:8.0.44'\n : 'public.ecr.aws/docker/library/postgres:17.7';\n\n const templateOptions = {\n engine: options.engine,\n runtimeConfigKey: nameClassName,\n databasePackageAlias: fullyQualifiedName,\n databaseProvider: options.engine === 'mysql' ? 'mysql' : 'postgresql',\n prismaVersion: TS_VERSIONS.prisma,\n ...nodeImageVersions(),\n prismaAdapterPackage:\n options.engine === 'mysql'\n ? '@prisma/adapter-mariadb'\n : '@prisma/adapter-pg',\n prismaAdapterClassName:\n options.engine === 'mysql' ? 'PrismaMariaDb' : 'PrismaPg',\n localDbPort,\n localDbHost,\n localDbName: databaseName,\n localDbUser,\n localDbPassword,\n containerEngine,\n containerName,\n dockerImage,\n ...esmVars(tree),\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n updateGitIgnore(tree, dir, (patterns) => [...patterns, 'generated/prisma']);\n await sharedRdbScriptsGenerator(tree, options.engine, DEPENDENCIES);\n const waitForDbScript =\n options.engine === 'mysql'\n ? 'wait-for-mysql-db.ts'\n : 'wait-for-postgres-db.ts';\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'rdb'),\n );\n const relativePathToRoot = getRelativePathToRootByDirectory(\n projectConfig.root,\n );\n const fs = new FsCommands(tree, DEPENDENCIES);\n const migrationBundleDir = joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'migration',\n );\n const migrationDockerImageTag = `${getNpmScope(tree)}-${kebabCase(options.name)}-migration:latest`;\n\n if (options.infra !== 'none') {\n await addTypeScriptBundleTarget(\n tree,\n projectConfig,\n {\n targetFilePath: 'src/migration-handler.ts',\n bundleOutputDir: 'migration',\n },\n DEPENDENCIES,\n );\n await addTypeScriptBundleTarget(\n tree,\n projectConfig,\n {\n targetFilePath: 'src/create-db-user-handler.ts',\n bundleOutputDir: 'create-db-user',\n },\n DEPENDENCIES,\n );\n const bundleTarget = projectConfig.targets['bundle'];\n // The bundle target starts with a single rolldown `command`. Wrap it with\n // the migration asset copy steps, unless it has already been transformed\n // into a `commands` array on a previous run.\n if (!bundleTarget.options.commands) {\n const rolldownCommand = bundleTarget.options.command;\n delete bundleTarget.options.command;\n bundleTarget.options = {\n ...bundleTarget.options,\n commands: [\n fs.rm(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.mkdir(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.cp(\n 'prisma',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma`,\n ),\n fs.cp(\n 'prisma.config.ts',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma.config.ts`,\n ),\n fs.cp(\n 'Dockerfile',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/Dockerfile`,\n ),\n rolldownCommand,\n ],\n parallel: false,\n };\n }\n }\n\n projectConfig.targets.generate = {\n executor: 'nx:run-commands',\n outputs: ['{projectRoot}/generated/prisma'],\n options: {\n command: 'prisma generate',\n cwd: '{projectRoot}',\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 options: {\n command: `tsx ${scriptsDir}/start-container.ts`,\n cwd: '{projectRoot}',\n },\n continuous: true,\n };\n projectConfig.targets['wait-for-db'] = {\n executor: 'nx:run-commands',\n dependsOn: ['dev'],\n options: {\n command: `tsx ${scriptsDir}/${waitForDbScript}`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets.prisma = {\n executor: 'nx:run-commands',\n dependsOn: ['dev', 'wait-for-db'],\n options: {\n cwd: '{projectRoot}',\n command: 'prisma',\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n // Recorded in the metadata below so the version sync can tell a CDK project\n // from a Terraform one; undefined when no infrastructure was generated, in\n // which case neither provider's packages were added.\n const iac =\n options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n if (options.infra !== 'none') {\n if (iac === 'terraform') {\n projectConfig.targets['docker'] = {\n cache: true,\n executor: 'nx:run-commands',\n options: {\n command: `${containerEngine} build --platform linux/arm64 --provenance=false -t ${migrationDockerImageTag} ${migrationBundleDir}`,\n },\n dependsOn: ['bundle'],\n };\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project: projectConfig,\n containerEngine,\n trivyTargetName: 'trivy',\n dockerTargetName: 'docker',\n imageTags: [migrationDockerImageTag],\n },\n DEPENDENCIES,\n );\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'compile', 'generate');\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n // Recorded here and read by the declaration's predicates, so the packages\n // added below are exactly the ones the version sync will own.\n const metadata: TsRdbMetadata = {\n engine: options.engine,\n ...(iac ? { iac } : {}),\n };\n addGeneratorMetadata(\n tree,\n fullyQualifiedName,\n TS_RDB_GENERATOR_INFO,\n metadata,\n );\n\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n await addRdbInfra(tree, {\n iac,\n projectName: fullyQualifiedName,\n projectRoot: dir,\n nameClassName,\n nameKebabCase,\n databasePackageAlias: fullyQualifiedName,\n databaseName,\n adminUser: databaseUser,\n engine: options.engine,\n migrationBundleDir,\n createDbUserBundleDir: joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'create-db-user',\n ),\n framework: options.framework,\n migrationDockerImageTag,\n containerEngine,\n });\n }\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: projectConfig.root,\n });\n\n // @prisma/adapter-pg depends on @types/pg ^8.16.0. Yarn does not dedupe it to\n // the workspace's pinned @types/pg, so it installs a separate copy under the\n // adapter's own node_modules whenever a newer @types/pg is published. The two\n // copies declare structurally incompatible Pool types, so passing our `new\n // Pool(...)` to `new PrismaPg(...)` fails to compile. Scope the resolution to\n // the adapter so other @types/pg consumers are unaffected. Classic yarn only\n // honours the `**/`-prefixed descriptor in a workspace and berry only the\n // bare one, so declare both.\n if (options.engine === 'postgres' && detectPackageManager() === 'yarn') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.resolutions = {\n ...packageJson.resolutions,\n '**/@prisma/adapter-pg/@types/pg': TS_VERSIONS['@types/pg'],\n '@prisma/adapter-pg/@types/pg': TS_VERSIONS['@types/pg'],\n };\n return packageJson;\n });\n }\n\n registerPnpmBuiltDependencies(tree, {\n '@prisma/engines': false,\n prisma: false,\n });\n\n await addGeneratorMetricsIfApplicable(tree, [TS_RDB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsRdbGenerator;\n"],"names":["relative","detectPackageManager","generateFiles","joinPathFragments","readProjectConfiguration","updateJson","updateProjectConfiguration","addTsDependencies","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","addDockerScanTarget","DOCKER_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","updateGitIgnore","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","snakeCase","toClassName","getNpmScope","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","getRelativePathToRootByDirectory","registerPnpmBuiltDependencies","assignPort","addRdbInfra","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SCRIPTS_DIR","SHARED_RDB_SCRIPTS_DEPENDENCIES","sharedRdbScriptsGenerator","TS_VERSIONS","tsProjectGenerator","getTsLibDetails","DEPENDENCIES","ts","name","when","m","engine","dev","root","TS_RDB_GENERATOR_INFO","filename","tsRdbGenerator","tree","options","nameKebabCase","nameClassName","databaseUser","databaseName","containerEngine","fullyQualifiedName","dir","directory","subDirectory","projectExists","preferInstallDependencies","tsConfig","include","projectConfig","localDbPort","localDbHost","localDbUser","localDbPassword","containerName","dockerImage","templateOptions","runtimeConfigKey","databasePackageAlias","databaseProvider","prismaVersion","prisma","prismaAdapterPackage","prismaAdapterClassName","localDbName","dirname","patterns","waitForDbScript","scriptsDir","relativePathToRoot","fs","migrationBundleDir","migrationDockerImageTag","infra","targetFilePath","bundleOutputDir","bundleTarget","targets","commands","rolldownCommand","command","rm","mkdir","cp","parallel","generate","executor","outputs","cwd","continuous","dependsOn","env","LOCAL_DEV","iac","undefined","cache","project","trivyTargetName","dockerTargetName","imageTags","metadata","projectName","projectRoot","adminUser","createDbUserBundleDir","framework","packageJson","resolutions","languages"],"mappings":"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"}
@@ -31,6 +31,11 @@ exports[`ts#rdb mcp-server-connection generator > should add rdb dev dependency
31
31
  "name": "my-mcp",
32
32
  "path": "src/my-mcp",
33
33
  },
34
+ {
35
+ "generator": "ts#rdb#mcp-server-connection",
36
+ "name": "my-mcp-db",
37
+ "path": "src/my-mcp/server.ts",
38
+ },
34
39
  ],
35
40
  },
36
41
  "name": "my-service",
@@ -100,6 +105,11 @@ exports[`ts#rdb mcp-server-connection generator > should fall back to mcp-server
100
105
  "name": "mcp-server",
101
106
  "path": "src/mcp-server",
102
107
  },
108
+ {
109
+ "generator": "ts#rdb#mcp-server-connection",
110
+ "name": "mcp-server-db",
111
+ "path": "src/mcp-server/server.ts",
112
+ },
103
113
  ],
104
114
  },
105
115
  "name": "my-service",
@@ -7,7 +7,8 @@ import { addDestructuredImport, applyGritQL } from "../../../utils/ast.js";
7
7
  import { formatFilesInSubtree } from "../../../utils/format.js";
8
8
  import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
9
9
  import { pascalCase } from "../../../utils/names.js";
10
- import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
10
+ import { addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
11
+ import { toProjectRelativePath } from "../../../utils/paths.js";
11
12
  import { injectRdsCaBundleIntoDockerfile } from "../utils.js";
12
13
  export const TS_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
13
14
  export const tsRdbMcpServerConnectionGenerator = async (tree, options)=>{
@@ -51,6 +52,12 @@ export const tsRdbMcpServerConnectionGenerator = async (tree, options)=>{
51
52
  tree.write(serverPath, content.replace(dbDecl, `${dbDecl}\n ${onCall}`));
52
53
  }
53
54
  }
55
+ // Recorded so the version sync can identify this connection.
56
+ addComponentGeneratorMetadata(tree, sourceProject.name, TS_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO, toProjectRelativePath(sourceProject, serverPath), `${mcpServerName}-${rdbNameCamel}`, // The source component this connection is made from, so the pair is
57
+ // identifiable rather than just the two projects.
58
+ {
59
+ sourcePath: options.sourceComponent?.path
60
+ });
54
61
  await addGeneratorMetricsIfApplicable(tree, [
55
62
  TS_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO
56
63
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/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 joinPathFragments,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport camelCase from 'lodash.camelcase';\nimport { addDestructuredImport, applyGritQL } from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { pascalCase } from '../../../utils/names';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { injectRdsCaBundleIntoDockerfile } from '../utils';\nimport type { TsRdbMcpServerConnectionGeneratorSchema } from './schema';\n\nexport const TS_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsRdbMcpServerConnectionGenerator = async (\n tree: Tree,\n options: TsRdbMcpServerConnectionGeneratorSchema,\n): Promise<void> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\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 const rdbBaseName = targetProject.name.split('/').pop();\n const rdbNameCamel = camelCase(rdbBaseName);\n const rdbNamePascal = pascalCase(rdbBaseName);\n const rdbPackageAlias = targetProject.name;\n const getterAlias = `getPrisma as get${rdbNamePascal}`;\n\n const serverPath = joinPathFragments(\n sourceProject.root,\n 'src',\n mcpServerName,\n 'server.ts',\n );\n\n // Dockerfile: install RDS CA bundle for direct Aurora SSL connections\n const dockerfilePath = joinPathFragments(\n sourceProject.root,\n 'src',\n mcpServerName,\n 'Dockerfile',\n );\n injectRdsCaBundleIntoDockerfile(tree, dockerfilePath);\n\n // server.ts: inject db inside createServer body\n if (tree.exists(serverPath)) {\n await addDestructuredImport(\n tree,\n serverPath,\n [getterAlias],\n rdbPackageAlias,\n );\n\n await applyGritQL(\n tree,\n serverPath,\n `\\`export const createServer = async () => { $body }\\` => raw\\`export const createServer = async () => {\n const ${rdbNameCamel} = await get${rdbNamePascal}();\n $body\n}\\` where { $body <: not some \\`const ${rdbNameCamel} = await get${rdbNamePascal}()\\` }`,\n );\n\n // Add $on error handler after the db declaration.\n // Done via string replacement because GritQL treats $on as a metavariable.\n const dbDecl = `const ${rdbNameCamel} = await get${rdbNamePascal}();`;\n const onCall = `${rdbNameCamel}.$on('error', console.error);`;\n const content = tree.read(serverPath, 'utf-8')!;\n if (content.includes(dbDecl) && !content.includes(`${rdbNameCamel}.$on`)) {\n tree.write(serverPath, content.replace(dbDecl, `${dbDecl}\\n ${onCall}`));\n }\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n};\n\nexport default tsRdbMcpServerConnectionGenerator;\n"],"names":["joinPathFragments","updateProjectConfiguration","camelCase","addDestructuredImport","applyGritQL","formatFilesInSubtree","addGeneratorMetricsIfApplicable","pascalCase","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","injectRdsCaBundleIntoDockerfile","TS_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO","filename","tsRdbMcpServerConnectionGenerator","tree","options","sourceProject","targetProject","mcpServerName","sourceComponent","name","devTarget","targets","projects","target","rdbBaseName","split","pop","rdbNameCamel","rdbNamePascal","rdbPackageAlias","getterAlias","serverPath","root","dockerfilePath","exists","dbDecl","onCall","content","read","includes","write","replace"],"mappings":"AAAA;;;CAGC,GACD,SACEA,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,OAAOC,eAAe,mBAAmB;AACzC,SAASC,qBAAqB,EAAEC,WAAW,QAAQ,wBAAqB;AACxE,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,+BAA+B,QAAQ,cAAW;AAG3D,OAAO,MAAMC,8CACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,oCAAoC,OAC/CC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvB,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;QACAxB,2BAA2Bc,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMS,cAAcR,cAAcG,IAAI,CAACM,KAAK,CAAC,KAAKC,GAAG;IACrD,MAAMC,eAAe3B,UAAUwB;IAC/B,MAAMI,gBAAgBvB,WAAWmB;IACjC,MAAMK,kBAAkBb,cAAcG,IAAI;IAC1C,MAAMW,cAAc,CAAC,gBAAgB,EAAEF,eAAe;IAEtD,MAAMG,aAAajC,kBACjBiB,cAAciB,IAAI,EAClB,OACAf,eACA;IAGF,sEAAsE;IACtE,MAAMgB,iBAAiBnC,kBACrBiB,cAAciB,IAAI,EAClB,OACAf,eACA;IAEFR,gCAAgCI,MAAMoB;IAEtC,gDAAgD;IAChD,IAAIpB,KAAKqB,MAAM,CAACH,aAAa;QAC3B,MAAM9B,sBACJY,MACAkB,YACA;YAACD;SAAY,EACbD;QAGF,MAAM3B,YACJW,MACAkB,YACA,CAAC;QACC,EAAEJ,aAAa,YAAY,EAAEC,cAAc;;sCAEb,EAAED,aAAa,YAAY,EAAEC,cAAc,MAAM,CAAC;QAGpF,kDAAkD;QAClD,2EAA2E;QAC3E,MAAMO,SAAS,CAAC,MAAM,EAAER,aAAa,YAAY,EAAEC,cAAc,GAAG,CAAC;QACrE,MAAMQ,SAAS,GAAGT,aAAa,6BAA6B,CAAC;QAC7D,MAAMU,UAAUxB,KAAKyB,IAAI,CAACP,YAAY;QACtC,IAAIM,QAAQE,QAAQ,CAACJ,WAAW,CAACE,QAAQE,QAAQ,CAAC,GAAGZ,aAAa,IAAI,CAAC,GAAG;YACxEd,KAAK2B,KAAK,CAACT,YAAYM,QAAQI,OAAO,CAACN,QAAQ,GAAGA,OAAO,IAAI,EAAEC,QAAQ;QACzE;IACF;IAEA,MAAMhC,gCAAgCS,MAAM;QAC1CH;KACD;IACD,MAAMP,qBAAqBU;AAC7B,EAAE;AAEF,eAAeD,kCAAkC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/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 joinPathFragments,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport camelCase from 'lodash.camelcase';\nimport { addDestructuredImport, applyGritQL } from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { pascalCase } from '../../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { toProjectRelativePath } from '../../../utils/paths';\nimport { injectRdsCaBundleIntoDockerfile } from '../utils';\nimport type { TsRdbMcpServerConnectionGeneratorSchema } from './schema';\n\nexport const TS_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsRdbMcpServerConnectionGenerator = async (\n tree: Tree,\n options: TsRdbMcpServerConnectionGeneratorSchema,\n): Promise<void> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\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 const rdbBaseName = targetProject.name.split('/').pop();\n const rdbNameCamel = camelCase(rdbBaseName);\n const rdbNamePascal = pascalCase(rdbBaseName);\n const rdbPackageAlias = targetProject.name;\n const getterAlias = `getPrisma as get${rdbNamePascal}`;\n\n const serverPath = joinPathFragments(\n sourceProject.root,\n 'src',\n mcpServerName,\n 'server.ts',\n );\n\n // Dockerfile: install RDS CA bundle for direct Aurora SSL connections\n const dockerfilePath = joinPathFragments(\n sourceProject.root,\n 'src',\n mcpServerName,\n 'Dockerfile',\n );\n injectRdsCaBundleIntoDockerfile(tree, dockerfilePath);\n\n // server.ts: inject db inside createServer body\n if (tree.exists(serverPath)) {\n await addDestructuredImport(\n tree,\n serverPath,\n [getterAlias],\n rdbPackageAlias,\n );\n\n await applyGritQL(\n tree,\n serverPath,\n `\\`export const createServer = async () => { $body }\\` => raw\\`export const createServer = async () => {\n const ${rdbNameCamel} = await get${rdbNamePascal}();\n $body\n}\\` where { $body <: not some \\`const ${rdbNameCamel} = await get${rdbNamePascal}()\\` }`,\n );\n\n // Add $on error handler after the db declaration.\n // Done via string replacement because GritQL treats $on as a metavariable.\n const dbDecl = `const ${rdbNameCamel} = await get${rdbNamePascal}();`;\n const onCall = `${rdbNameCamel}.$on('error', console.error);`;\n const content = tree.read(serverPath, 'utf-8')!;\n if (content.includes(dbDecl) && !content.includes(`${rdbNameCamel}.$on`)) {\n tree.write(serverPath, content.replace(dbDecl, `${dbDecl}\\n ${onCall}`));\n }\n }\n\n // Recorded so the version sync can identify this connection.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n TS_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(sourceProject, serverPath),\n `${mcpServerName}-${rdbNameCamel}`,\n // The source component this connection is made from, so the pair is\n // identifiable rather than just the two projects.\n { sourcePath: options.sourceComponent?.path },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n};\n\nexport default tsRdbMcpServerConnectionGenerator;\n"],"names":["joinPathFragments","updateProjectConfiguration","camelCase","addDestructuredImport","applyGritQL","formatFilesInSubtree","addGeneratorMetricsIfApplicable","pascalCase","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","injectRdsCaBundleIntoDockerfile","TS_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO","filename","tsRdbMcpServerConnectionGenerator","tree","options","sourceProject","targetProject","mcpServerName","sourceComponent","name","devTarget","targets","projects","target","rdbBaseName","split","pop","rdbNameCamel","rdbNamePascal","rdbPackageAlias","getterAlias","serverPath","root","dockerfilePath","exists","dbDecl","onCall","content","read","includes","write","replace","sourcePath","path"],"mappings":"AAAA;;;CAGC,GACD,SACEA,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,OAAOC,eAAe,mBAAmB;AACzC,SAASC,qBAAqB,EAAEC,WAAW,QAAQ,wBAAqB;AACxE,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SACEC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,qBAAqB,QAAQ,0BAAuB;AAC7D,SAASC,+BAA+B,QAAQ,cAAW;AAG3D,OAAO,MAAMC,8CACXJ,iBAAiB,YAAYK,QAAQ,EAAE;AAEzC,OAAO,MAAMC,oCAAoC,OAC/CC,MACAC;IAEA,MAAMC,gBAAgBR,oCACpBM,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBT,oCACpBM,MACAC,QAAQE,aAAa;IAGvB,MAAMC,gBAAgBH,QAAQI,eAAe,EAAEC,QAAQ;IACvD,MAAMC,YAAY,GAAGH,cAAc,IAAI,CAAC;IAExC,IAAIF,cAAcM,OAAO,EAAE,CAACD,UAAU,EAAE;QACtCf,kCAAkCU,eAAeK,WAAW;YAC1DE,UAAU;gBAACN,cAAcG,IAAI;aAAC;YAC9BI,QAAQ;QACV;QACA1B,2BAA2BgB,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMS,cAAcR,cAAcG,IAAI,CAACM,KAAK,CAAC,KAAKC,GAAG;IACrD,MAAMC,eAAe7B,UAAU0B;IAC/B,MAAMI,gBAAgBzB,WAAWqB;IACjC,MAAMK,kBAAkBb,cAAcG,IAAI;IAC1C,MAAMW,cAAc,CAAC,gBAAgB,EAAEF,eAAe;IAEtD,MAAMG,aAAanC,kBACjBmB,cAAciB,IAAI,EAClB,OACAf,eACA;IAGF,sEAAsE;IACtE,MAAMgB,iBAAiBrC,kBACrBmB,cAAciB,IAAI,EAClB,OACAf,eACA;IAEFR,gCAAgCI,MAAMoB;IAEtC,gDAAgD;IAChD,IAAIpB,KAAKqB,MAAM,CAACH,aAAa;QAC3B,MAAMhC,sBACJc,MACAkB,YACA;YAACD;SAAY,EACbD;QAGF,MAAM7B,YACJa,MACAkB,YACA,CAAC;QACC,EAAEJ,aAAa,YAAY,EAAEC,cAAc;;sCAEb,EAAED,aAAa,YAAY,EAAEC,cAAc,MAAM,CAAC;QAGpF,kDAAkD;QAClD,2EAA2E;QAC3E,MAAMO,SAAS,CAAC,MAAM,EAAER,aAAa,YAAY,EAAEC,cAAc,GAAG,CAAC;QACrE,MAAMQ,SAAS,GAAGT,aAAa,6BAA6B,CAAC;QAC7D,MAAMU,UAAUxB,KAAKyB,IAAI,CAACP,YAAY;QACtC,IAAIM,QAAQE,QAAQ,CAACJ,WAAW,CAACE,QAAQE,QAAQ,CAAC,GAAGZ,aAAa,IAAI,CAAC,GAAG;YACxEd,KAAK2B,KAAK,CAACT,YAAYM,QAAQI,OAAO,CAACN,QAAQ,GAAGA,OAAO,IAAI,EAAEC,QAAQ;QACzE;IACF;IAEA,6DAA6D;IAC7DhC,8BACES,MACAE,cAAcI,IAAI,EAClBT,6CACAF,sBAAsBO,eAAegB,aACrC,GAAGd,cAAc,CAAC,EAAEU,cAAc,EAClC,oEAAoE;IACpE,kDAAkD;IAClD;QAAEe,YAAY5B,QAAQI,eAAe,EAAEyB;IAAK;IAG9C,MAAMzC,gCAAgCW,MAAM;QAC1CH;KACD;IACD,MAAMT,qBAAqBY;AAC7B,EAAE;AAEF,eAAeD,kCAAkC"}
@@ -3,6 +3,15 @@
3
3
  exports[`ts#rdb smithy-connection generator > should add rdb dev dependency to smithy backend dev 1`] = `
4
4
  {
5
5
  "$schema": "../../node_modules/nx/schemas/project-schema.json",
6
+ "metadata": {
7
+ "components": [
8
+ {
9
+ "generator": "ts#rdb#smithy-connection",
10
+ "name": "db",
11
+ "path": "src/context.ts",
12
+ },
13
+ ],
14
+ },
6
15
  "name": "api",
7
16
  "root": "packages/api",
8
17
  "targets": {
@@ -7,7 +7,8 @@ import { addDestructuredImport, applyGritQL, matchGritQL } from "../../../utils/
7
7
  import { formatFilesInSubtree } from "../../../utils/format.js";
8
8
  import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
9
9
  import { pascalCase } from "../../../utils/names.js";
10
- import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
10
+ import { addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
11
+ import { toProjectRelativePath } from "../../../utils/paths.js";
11
12
  export const TS_RDB_SMITHY_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
12
13
  export const tsRdbSmithyConnectionGenerator = async (tree, options)=>{
13
14
  const sourceProject = readProjectConfigurationUnqualified(tree, options.sourceProject);
@@ -64,6 +65,8 @@ export const tsRdbSmithyConnectionGenerator = async (tree, options)=>{
64
65
  $props += \`\n ${rdbNameCamel}\`
65
66
  }`);
66
67
  }
68
+ // Recorded so the version sync can identify this connection.
69
+ addComponentGeneratorMetadata(tree, sourceProject.name, TS_RDB_SMITHY_CONNECTION_GENERATOR_INFO, toProjectRelativePath(sourceProject, contextPath), rdbNameCamel);
67
70
  await addGeneratorMetricsIfApplicable(tree, [
68
71
  TS_RDB_SMITHY_CONNECTION_GENERATOR_INFO
69
72
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/smithy-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 joinPathFragments,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport camelCase from 'lodash.camelcase';\nimport {\n addDestructuredImport,\n applyGritQL,\n matchGritQL,\n} from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { pascalCase } from '../../../utils/names';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport type { TsRdbSmithyConnectionGeneratorSchema } from './schema';\n\nexport const TS_RDB_SMITHY_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsRdbSmithyConnectionGenerator = async (\n tree: Tree,\n options: TsRdbSmithyConnectionGeneratorSchema,\n): Promise<void> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\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 const rdbBaseName = targetProject.name.split('/').pop();\n const rdbNameCamel = camelCase(rdbBaseName);\n const rdbNamePascal = pascalCase(rdbBaseName);\n const rdbPackageAlias = targetProject.name;\n const getterAlias = `getPrisma as get${rdbNamePascal}`;\n\n const contextPath = joinPathFragments(sourceProject.root, 'src/context.ts');\n const handlerPath = joinPathFragments(sourceProject.root, 'src/handler.ts');\n const localServerPath = joinPathFragments(\n sourceProject.root,\n 'src/local-server.ts',\n );\n\n if (tree.exists(contextPath)) {\n await addDestructuredImport(\n tree,\n contextPath,\n [getterAlias],\n rdbPackageAlias,\n );\n\n await applyGritQL(\n tree,\n contextPath,\n `\\`interface ServiceContext { $members }\\` where {\n $members <: not some \\`${rdbNameCamel}: $_\\`,\n $members += \\`\\n ${rdbNameCamel}: Awaited<ReturnType<typeof get${rdbNamePascal}>>\\`\n }`,\n );\n }\n\n if (tree.exists(handlerPath)) {\n await addDestructuredImport(\n tree,\n handlerPath,\n [getterAlias],\n rdbPackageAlias,\n );\n\n const alreadyHasDecl = await matchGritQL(\n tree,\n handlerPath,\n `\\`const ${rdbNameCamel} = await get${rdbNamePascal}()\\``,\n );\n if (!alreadyHasDecl) {\n await applyGritQL(\n tree,\n handlerPath,\n `\\`const httpResponse = await serviceHandler.handle($req, $ctx)\\` => \\`const ${rdbNameCamel} = await get${rdbNamePascal}();\\n const httpResponse = await serviceHandler.handle($req, $ctx)\\``,\n );\n }\n\n await applyGritQL(\n tree,\n handlerPath,\n `\\`serviceHandler.handle($req, { $props })\\` where {\n $props <: not some \\`${rdbNameCamel}\\`,\n $props += \\`\\n ${rdbNameCamel}\\`\n }`,\n );\n }\n\n if (tree.exists(localServerPath)) {\n await addDestructuredImport(\n tree,\n localServerPath,\n [getterAlias],\n rdbPackageAlias,\n );\n\n const alreadyHasDeclLocal = await matchGritQL(\n tree,\n localServerPath,\n `\\`const ${rdbNameCamel} = await get${rdbNamePascal}()\\``,\n );\n if (!alreadyHasDeclLocal) {\n await applyGritQL(\n tree,\n localServerPath,\n `\\`const httpResponse = await serviceHandler.handle($req, $ctx)\\` => \\`const ${rdbNameCamel} = await get${rdbNamePascal}();\\n const httpResponse = await serviceHandler.handle($req, $ctx)\\``,\n );\n }\n\n await applyGritQL(\n tree,\n localServerPath,\n `\\`serviceHandler.handle($req, { $props })\\` where {\n $props <: not some \\`${rdbNameCamel}\\`,\n $props += \\`\\n ${rdbNameCamel}\\`\n }`,\n );\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_RDB_SMITHY_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n};\n\nexport default tsRdbSmithyConnectionGenerator;\n"],"names":["joinPathFragments","updateProjectConfiguration","camelCase","addDestructuredImport","applyGritQL","matchGritQL","formatFilesInSubtree","addGeneratorMetricsIfApplicable","pascalCase","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","TS_RDB_SMITHY_CONNECTION_GENERATOR_INFO","filename","tsRdbSmithyConnectionGenerator","tree","options","sourceProject","targetProject","targets","projects","name","target","rdbBaseName","split","pop","rdbNameCamel","rdbNamePascal","rdbPackageAlias","getterAlias","contextPath","root","handlerPath","localServerPath","exists","alreadyHasDecl","alreadyHasDeclLocal"],"mappings":"AAAA;;;CAGC,GACD,SACEA,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,OAAOC,eAAe,mBAAmB;AACzC,SACEC,qBAAqB,EACrBC,WAAW,EACXC,WAAW,QACN,wBAAqB;AAC5B,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAG3B,OAAO,MAAMC,0CACXF,iBAAiB,YAAYG,QAAQ,EAAE;AAEzC,OAAO,MAAMC,iCAAiC,OAC5CC,MACAC;IAEA,MAAMC,gBAAgBN,oCACpBI,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBP,oCACpBI,MACAC,QAAQE,aAAa;IAGvB,IAAID,cAAcE,OAAO,EAAE,CAAC,MAAM,EAAE;QAClCV,kCAAkCQ,eAAe,OAAO;YACtDG,UAAU;gBAACF,cAAcG,IAAI;aAAC;YAC9BC,QAAQ;QACV;QACArB,2BAA2Bc,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMM,cAAcL,cAAcG,IAAI,CAACG,KAAK,CAAC,KAAKC,GAAG;IACrD,MAAMC,eAAexB,UAAUqB;IAC/B,MAAMI,gBAAgBnB,WAAWe;IACjC,MAAMK,kBAAkBV,cAAcG,IAAI;IAC1C,MAAMQ,cAAc,CAAC,gBAAgB,EAAEF,eAAe;IAEtD,MAAMG,cAAc9B,kBAAkBiB,cAAcc,IAAI,EAAE;IAC1D,MAAMC,cAAchC,kBAAkBiB,cAAcc,IAAI,EAAE;IAC1D,MAAME,kBAAkBjC,kBACtBiB,cAAcc,IAAI,EAClB;IAGF,IAAIhB,KAAKmB,MAAM,CAACJ,cAAc;QAC5B,MAAM3B,sBACJY,MACAe,aACA;YAACD;SAAY,EACbD;QAGF,MAAMxB,YACJW,MACAe,aACA,CAAC;+BACwB,EAAEJ,aAAa;0BACpB,EAAEA,aAAa,+BAA+B,EAAEC,cAAc;OACjF,CAAC;IAEN;IAEA,IAAIZ,KAAKmB,MAAM,CAACF,cAAc;QAC5B,MAAM7B,sBACJY,MACAiB,aACA;YAACH;SAAY,EACbD;QAGF,MAAMO,iBAAiB,MAAM9B,YAC3BU,MACAiB,aACA,CAAC,QAAQ,EAAEN,aAAa,YAAY,EAAEC,cAAc,IAAI,CAAC;QAE3D,IAAI,CAACQ,gBAAgB;YACnB,MAAM/B,YACJW,MACAiB,aACA,CAAC,4EAA4E,EAAEN,aAAa,YAAY,EAAEC,cAAc,qEAAqE,CAAC;QAElM;QAEA,MAAMvB,YACJW,MACAiB,aACA,CAAC;6BACsB,EAAEN,aAAa;0BAClB,EAAEA,aAAa;OAClC,CAAC;IAEN;IAEA,IAAIX,KAAKmB,MAAM,CAACD,kBAAkB;QAChC,MAAM9B,sBACJY,MACAkB,iBACA;YAACJ;SAAY,EACbD;QAGF,MAAMQ,sBAAsB,MAAM/B,YAChCU,MACAkB,iBACA,CAAC,QAAQ,EAAEP,aAAa,YAAY,EAAEC,cAAc,IAAI,CAAC;QAE3D,IAAI,CAACS,qBAAqB;YACxB,MAAMhC,YACJW,MACAkB,iBACA,CAAC,4EAA4E,EAAEP,aAAa,YAAY,EAAEC,cAAc,qEAAqE,CAAC;QAElM;QAEA,MAAMvB,YACJW,MACAkB,iBACA,CAAC;6BACsB,EAAEP,aAAa;0BAClB,EAAEA,aAAa;OAClC,CAAC;IAEN;IAEA,MAAMnB,gCAAgCQ,MAAM;QAC1CH;KACD;IACD,MAAMN,qBAAqBS;AAC7B,EAAE;AAEF,eAAeD,+BAA+B"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/smithy-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 joinPathFragments,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport camelCase from 'lodash.camelcase';\nimport {\n addDestructuredImport,\n applyGritQL,\n matchGritQL,\n} from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { pascalCase } from '../../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { toProjectRelativePath } from '../../../utils/paths';\nimport type { TsRdbSmithyConnectionGeneratorSchema } from './schema';\n\nexport const TS_RDB_SMITHY_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsRdbSmithyConnectionGenerator = async (\n tree: Tree,\n options: TsRdbSmithyConnectionGeneratorSchema,\n): Promise<void> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\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 const rdbBaseName = targetProject.name.split('/').pop();\n const rdbNameCamel = camelCase(rdbBaseName);\n const rdbNamePascal = pascalCase(rdbBaseName);\n const rdbPackageAlias = targetProject.name;\n const getterAlias = `getPrisma as get${rdbNamePascal}`;\n\n const contextPath = joinPathFragments(sourceProject.root, 'src/context.ts');\n const handlerPath = joinPathFragments(sourceProject.root, 'src/handler.ts');\n const localServerPath = joinPathFragments(\n sourceProject.root,\n 'src/local-server.ts',\n );\n\n if (tree.exists(contextPath)) {\n await addDestructuredImport(\n tree,\n contextPath,\n [getterAlias],\n rdbPackageAlias,\n );\n\n await applyGritQL(\n tree,\n contextPath,\n `\\`interface ServiceContext { $members }\\` where {\n $members <: not some \\`${rdbNameCamel}: $_\\`,\n $members += \\`\\n ${rdbNameCamel}: Awaited<ReturnType<typeof get${rdbNamePascal}>>\\`\n }`,\n );\n }\n\n if (tree.exists(handlerPath)) {\n await addDestructuredImport(\n tree,\n handlerPath,\n [getterAlias],\n rdbPackageAlias,\n );\n\n const alreadyHasDecl = await matchGritQL(\n tree,\n handlerPath,\n `\\`const ${rdbNameCamel} = await get${rdbNamePascal}()\\``,\n );\n if (!alreadyHasDecl) {\n await applyGritQL(\n tree,\n handlerPath,\n `\\`const httpResponse = await serviceHandler.handle($req, $ctx)\\` => \\`const ${rdbNameCamel} = await get${rdbNamePascal}();\\n const httpResponse = await serviceHandler.handle($req, $ctx)\\``,\n );\n }\n\n await applyGritQL(\n tree,\n handlerPath,\n `\\`serviceHandler.handle($req, { $props })\\` where {\n $props <: not some \\`${rdbNameCamel}\\`,\n $props += \\`\\n ${rdbNameCamel}\\`\n }`,\n );\n }\n\n if (tree.exists(localServerPath)) {\n await addDestructuredImport(\n tree,\n localServerPath,\n [getterAlias],\n rdbPackageAlias,\n );\n\n const alreadyHasDeclLocal = await matchGritQL(\n tree,\n localServerPath,\n `\\`const ${rdbNameCamel} = await get${rdbNamePascal}()\\``,\n );\n if (!alreadyHasDeclLocal) {\n await applyGritQL(\n tree,\n localServerPath,\n `\\`const httpResponse = await serviceHandler.handle($req, $ctx)\\` => \\`const ${rdbNameCamel} = await get${rdbNamePascal}();\\n const httpResponse = await serviceHandler.handle($req, $ctx)\\``,\n );\n }\n\n await applyGritQL(\n tree,\n localServerPath,\n `\\`serviceHandler.handle($req, { $props })\\` where {\n $props <: not some \\`${rdbNameCamel}\\`,\n $props += \\`\\n ${rdbNameCamel}\\`\n }`,\n );\n }\n\n // Recorded so the version sync can identify this connection.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n TS_RDB_SMITHY_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(sourceProject, contextPath),\n rdbNameCamel,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_RDB_SMITHY_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n};\n\nexport default tsRdbSmithyConnectionGenerator;\n"],"names":["joinPathFragments","updateProjectConfiguration","camelCase","addDestructuredImport","applyGritQL","matchGritQL","formatFilesInSubtree","addGeneratorMetricsIfApplicable","pascalCase","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","TS_RDB_SMITHY_CONNECTION_GENERATOR_INFO","filename","tsRdbSmithyConnectionGenerator","tree","options","sourceProject","targetProject","targets","projects","name","target","rdbBaseName","split","pop","rdbNameCamel","rdbNamePascal","rdbPackageAlias","getterAlias","contextPath","root","handlerPath","localServerPath","exists","alreadyHasDecl","alreadyHasDeclLocal"],"mappings":"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"}
@@ -3,6 +3,15 @@
3
3
  exports[`ts#rdb trpc-connection generator > should add rdb dev dependency to trpc dev 1`] = `
4
4
  {
5
5
  "$schema": "../../node_modules/nx/schemas/project-schema.json",
6
+ "metadata": {
7
+ "components": [
8
+ {
9
+ "generator": "ts#rdb#trpc-connection",
10
+ "name": "db",
11
+ "path": "src/middleware/db.ts",
12
+ },
13
+ ],
14
+ },
6
15
  "name": "api",
7
16
  "root": "packages/api",
8
17
  "targets": {
@@ -6,7 +6,7 @@ import camelCase from "lodash.camelcase";
6
6
  import { formatFilesInSubtree } from "../../../utils/format.js";
7
7
  import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
8
8
  import { kebabCase, pascalCase } from "../../../utils/names.js";
9
- import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
9
+ import { addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
10
10
  export const TS_RDB_TRPC_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
11
11
  export const tsRdbTrpcConnectionGenerator = async (tree, options)=>{
12
12
  const sourceProject = readProjectConfigurationUnqualified(tree, options.sourceProject);
@@ -35,6 +35,8 @@ export const tsRdbTrpcConnectionGenerator = async (tree, options)=>{
35
35
  }, {
36
36
  overwriteStrategy: OverwriteStrategy.KeepExisting
37
37
  });
38
+ // Recorded so the version sync can identify this connection.
39
+ addComponentGeneratorMetadata(tree, sourceProject.name, TS_RDB_TRPC_CONNECTION_GENERATOR_INFO, joinPathFragments('src', 'middleware', `${rdbNameKebab}.ts`), rdbNameCamel);
38
40
  await addGeneratorMetricsIfApplicable(tree, [
39
41
  TS_RDB_TRPC_CONNECTION_GENERATOR_INFO
40
42
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/trpc-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 camelCase from 'lodash.camelcase';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, pascalCase } from '../../../utils/names';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport type { TsRdbTrpcConnectionGeneratorSchema } from './schema';\n\nexport const TS_RDB_TRPC_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsRdbTrpcConnectionGenerator = async (\n tree: Tree,\n options: TsRdbTrpcConnectionGeneratorSchema,\n): Promise<void> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\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 const rdbBaseName = targetProject.name.split('/').pop();\n const rdbNameKebab = kebabCase(rdbBaseName);\n const rdbNameCamel = camelCase(rdbBaseName);\n const rdbNamePascal = pascalCase(rdbBaseName);\n const rdbPackageAlias = targetProject.name;\n const engine = ((targetProject.metadata as any) ?? {}).engine ?? 'PostgreSQL';\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n sourceProject.root,\n { rdbNameKebab, rdbNameCamel, rdbNamePascal, rdbPackageAlias, engine },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_RDB_TRPC_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n};\n\nexport default tsRdbTrpcConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","camelCase","formatFilesInSubtree","addGeneratorMetricsIfApplicable","kebabCase","pascalCase","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","TS_RDB_TRPC_CONNECTION_GENERATOR_INFO","filename","tsRdbTrpcConnectionGenerator","tree","options","sourceProject","targetProject","targets","projects","name","target","rdbBaseName","split","pop","rdbNameKebab","rdbNameCamel","rdbNamePascal","rdbPackageAlias","engine","metadata","dirname","root","overwriteStrategy","KeepExisting"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,OAAOC,eAAe,mBAAmB;AACzC,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,SAAS,EAAEC,UAAU,QAAQ,0BAAuB;AAC7D,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAG3B,OAAO,MAAMC,wCACXF,iBAAiB,YAAYG,QAAQ,EAAE;AAEzC,OAAO,MAAMC,+BAA+B,OAC1CC,MACAC;IAEA,MAAMC,gBAAgBN,oCACpBI,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBP,oCACpBI,MACAC,QAAQE,aAAa;IAGvB,IAAID,cAAcE,OAAO,EAAE,CAAC,MAAM,EAAE;QAClCV,kCAAkCQ,eAAe,OAAO;YACtDG,UAAU;gBAACF,cAAcG,IAAI;aAAC;YAC9BC,QAAQ;QACV;QACAnB,2BAA2BY,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMM,cAAcL,cAAcG,IAAI,CAACG,KAAK,CAAC,KAAKC,GAAG;IACrD,MAAMC,eAAenB,UAAUgB;IAC/B,MAAMI,eAAevB,UAAUmB;IAC/B,MAAMK,gBAAgBpB,WAAWe;IACjC,MAAMM,kBAAkBX,cAAcG,IAAI;IAC1C,MAAMS,SAAS,AAAC,CAAA,AAACZ,cAAca,QAAQ,IAAY,CAAC,CAAA,EAAGD,MAAM,IAAI;IAEjE9B,cACEe,MACAd,kBAAkB,YAAY+B,OAAO,EAAE,UACvCf,cAAcgB,IAAI,EAClB;QAAEP;QAAcC;QAAcC;QAAeC;QAAiBC;IAAO,GACrE;QAAEI,mBAAmBhC,kBAAkBiC,YAAY;IAAC;IAGtD,MAAM7B,gCAAgCS,MAAM;QAC1CH;KACD;IACD,MAAMP,qBAAqBU;AAC7B,EAAE;AAEF,eAAeD,6BAA6B"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/trpc-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 camelCase from 'lodash.camelcase';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, pascalCase } from '../../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport type { TsRdbTrpcConnectionGeneratorSchema } from './schema';\n\nexport const TS_RDB_TRPC_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsRdbTrpcConnectionGenerator = async (\n tree: Tree,\n options: TsRdbTrpcConnectionGeneratorSchema,\n): Promise<void> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\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 const rdbBaseName = targetProject.name.split('/').pop();\n const rdbNameKebab = kebabCase(rdbBaseName);\n const rdbNameCamel = camelCase(rdbBaseName);\n const rdbNamePascal = pascalCase(rdbBaseName);\n const rdbPackageAlias = targetProject.name;\n const engine = ((targetProject.metadata as any) ?? {}).engine ?? 'PostgreSQL';\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n sourceProject.root,\n { rdbNameKebab, rdbNameCamel, rdbNamePascal, rdbPackageAlias, engine },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Recorded so the version sync can identify this connection.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n TS_RDB_TRPC_CONNECTION_GENERATOR_INFO,\n joinPathFragments('src', 'middleware', `${rdbNameKebab}.ts`),\n rdbNameCamel,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_RDB_TRPC_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n};\n\nexport default tsRdbTrpcConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","camelCase","formatFilesInSubtree","addGeneratorMetricsIfApplicable","kebabCase","pascalCase","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","TS_RDB_TRPC_CONNECTION_GENERATOR_INFO","filename","tsRdbTrpcConnectionGenerator","tree","options","sourceProject","targetProject","targets","projects","name","target","rdbBaseName","split","pop","rdbNameKebab","rdbNameCamel","rdbNamePascal","rdbPackageAlias","engine","metadata","dirname","root","overwriteStrategy","KeepExisting"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,OAAOC,eAAe,mBAAmB;AACzC,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,SAAS,EAAEC,UAAU,QAAQ,0BAAuB;AAC7D,SACEC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAG3B,OAAO,MAAMC,wCACXF,iBAAiB,YAAYG,QAAQ,EAAE;AAEzC,OAAO,MAAMC,+BAA+B,OAC1CC,MACAC;IAEA,MAAMC,gBAAgBN,oCACpBI,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBP,oCACpBI,MACAC,QAAQE,aAAa;IAGvB,IAAID,cAAcE,OAAO,EAAE,CAAC,MAAM,EAAE;QAClCV,kCAAkCQ,eAAe,OAAO;YACtDG,UAAU;gBAACF,cAAcG,IAAI;aAAC;YAC9BC,QAAQ;QACV;QACApB,2BAA2Ba,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMM,cAAcL,cAAcG,IAAI,CAACG,KAAK,CAAC,KAAKC,GAAG;IACrD,MAAMC,eAAepB,UAAUiB;IAC/B,MAAMI,eAAexB,UAAUoB;IAC/B,MAAMK,gBAAgBrB,WAAWgB;IACjC,MAAMM,kBAAkBX,cAAcG,IAAI;IAC1C,MAAMS,SAAS,AAAC,CAAA,AAACZ,cAAca,QAAQ,IAAY,CAAC,CAAA,EAAGD,MAAM,IAAI;IAEjE/B,cACEgB,MACAf,kBAAkB,YAAYgC,OAAO,EAAE,UACvCf,cAAcgB,IAAI,EAClB;QAAEP;QAAcC;QAAcC;QAAeC;QAAiBC;IAAO,GACrE;QAAEI,mBAAmBjC,kBAAkBkC,YAAY;IAAC;IAGtD,6DAA6D;IAC7D3B,8BACEO,MACAE,cAAcI,IAAI,EAClBT,uCACAZ,kBAAkB,OAAO,cAAc,GAAG0B,aAAa,GAAG,CAAC,GAC3DC;IAGF,MAAMtB,gCAAgCU,MAAM;QAC1CH;KACD;IACD,MAAMR,qBAAqBW;AAC7B,EAAE;AAEF,eAAeD,6BAA6B"}
@@ -3,7 +3,87 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
5
  import { type ProjectConfiguration, type Tree } from '@nx/devkit';
6
+ /**
7
+ * The values this helper's predicates read. Its callers record them, so the
8
+ * theme and auth branches taken here can be confirmed at upgrade time.
9
+ */
10
+ export interface AgUiMetadata {
11
+ readonly theme: string;
12
+ readonly auth: string;
13
+ }
14
+ export declare const DEPENDENCIES: import("../../../utils/declared-dependencies").DependencyDeclaration<readonly [{
15
+ readonly name: "@copilotkit/react-core";
16
+ }, {
17
+ readonly name: "@ag-ui/client";
18
+ }, {
19
+ readonly name: "@cloudscape-design/chat-components";
20
+ readonly when: (m: AgUiMetadata) => boolean;
21
+ }, {
22
+ readonly name: "lucide-react";
23
+ readonly when: (m: AgUiMetadata) => boolean;
24
+ }, {
25
+ readonly name: "oidc-client-ts";
26
+ readonly when: (m: AgUiMetadata) => boolean;
27
+ }, {
28
+ readonly name: "aws4fetch";
29
+ readonly when: (m: AgUiMetadata) => boolean;
30
+ }, {
31
+ readonly name: "@aws-sdk/credential-provider-cognito-identity";
32
+ readonly when: (m: AgUiMetadata) => boolean;
33
+ }, {
34
+ readonly name: "react-oidc-context";
35
+ readonly when: (m: AgUiMetadata) => boolean;
36
+ }, {
37
+ readonly name: "@smithy/types";
38
+ readonly when: (m: AgUiMetadata) => boolean;
39
+ readonly dev: true;
40
+ }, {
41
+ readonly name: "react";
42
+ } & {
43
+ versionOnly: true;
44
+ }, {
45
+ readonly name: "react-dom";
46
+ } & {
47
+ versionOnly: true;
48
+ }, {
49
+ readonly name: "class-variance-authority";
50
+ } & {
51
+ versionOnly: true;
52
+ }, {
53
+ readonly name: "clsx";
54
+ } & {
55
+ versionOnly: true;
56
+ }, {
57
+ readonly name: "tailwind-merge";
58
+ } & {
59
+ versionOnly: true;
60
+ }, {
61
+ readonly name: "lucide-react";
62
+ } & {
63
+ versionOnly: true;
64
+ }, {
65
+ readonly name: "tw-animate-css";
66
+ } & {
67
+ versionOnly: true;
68
+ }, {
69
+ readonly name: "radix-ui";
70
+ } & {
71
+ versionOnly: true;
72
+ }, {
73
+ readonly name: "vite";
74
+ } & {
75
+ versionOnly: true;
76
+ }, {
77
+ readonly name: "vitest";
78
+ } & {
79
+ versionOnly: true;
80
+ }, {
81
+ readonly name: "@vitest/coverage-v8";
82
+ } & {
83
+ versionOnly: true;
84
+ }], readonly import("../../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", AgUiMetadata>[]>;
6
85
  export type AgUiAuth = 'iam' | 'cognito' | 'none';
86
+ export type AgUiTheme = 'cloudscape' | 'shadcn' | 'default';
7
87
  export interface AgUiReactConnectionOptions {
8
88
  /** The React website project to connect FROM */
9
89
  frontendProjectConfig: ProjectConfiguration;
@@ -27,3 +107,9 @@ export interface AgUiReactConnectionOptions {
27
107
  * website's `metadata.ux` (cloudscape / shadcn / default).
28
108
  */
29
109
  export declare const addAgUiReactConnection: (tree: Tree, options: AgUiReactConnectionOptions) => Promise<void>;
110
+ /**
111
+ * The theme module this helper vends, from the website's `metadata.ux`. Callers
112
+ * record the resolved value, so the theme predicates read what the code branches
113
+ * on.
114
+ */
115
+ export declare const resolveAgUiTheme: (frontendProjectConfig: ProjectConfiguration) => AgUiTheme;
@@ -3,14 +3,58 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */ import { generateFiles, joinPathFragments, OverwriteStrategy } from "@nx/devkit";
5
5
  import { addAgentRuntimeToConnectionNamespace } from "../../../connection/agent-runtime-config.js";
6
+ import { addTsDependencies } from "../../../utils/add-dependencies.js";
6
7
  import { addDestructuredImport, addSingleImport, applyGritQL } from "../../../utils/ast.js";
7
- import { addDependenciesToPackageJson } from "../../../utils/dependencies.js";
8
+ import { declareDependencies, ownedElsewhere } from "../../../utils/declared-dependencies.js";
8
9
  import { kebabCase } from "../../../utils/names.js";
9
10
  import { getNpmScopePrefix } from "../../../utils/npm-scope.js";
10
11
  import { registerPnpmBuiltDependencies } from "../../../utils/pnpm-workspace.js";
11
- import { sharedShadcnGenerator } from "../../../utils/shared-shadcn.js";
12
- import { withVersions } from "../../../utils/versions.js";
12
+ import { SHADCN_DEPENDENCIES, sharedShadcnGenerator } from "../../../utils/shared-shadcn.js";
13
13
  import { runtimeConfigGenerator } from "../runtime-config/generator.js";
14
+ // Each entry names the theme or auth branch it belongs to, so the same
15
+ // declaration drives both adding and the version sync.
16
+ export const DEPENDENCIES = declareDependencies()({
17
+ ts: [
18
+ {
19
+ name: '@copilotkit/react-core'
20
+ },
21
+ {
22
+ name: '@ag-ui/client'
23
+ },
24
+ {
25
+ name: '@cloudscape-design/chat-components',
26
+ when: (m)=>m.theme === 'cloudscape'
27
+ },
28
+ {
29
+ name: 'lucide-react',
30
+ when: (m)=>m.theme === 'shadcn'
31
+ },
32
+ {
33
+ name: 'oidc-client-ts',
34
+ when: (m)=>m.auth === 'iam'
35
+ },
36
+ {
37
+ name: 'aws4fetch',
38
+ when: (m)=>m.auth === 'iam'
39
+ },
40
+ {
41
+ name: '@aws-sdk/credential-provider-cognito-identity',
42
+ when: (m)=>m.auth === 'iam'
43
+ },
44
+ {
45
+ name: 'react-oidc-context',
46
+ when: (m)=>m.auth === 'iam' || m.auth === 'cognito'
47
+ },
48
+ {
49
+ name: '@smithy/types',
50
+ when: (m)=>m.auth === 'iam',
51
+ dev: true
52
+ },
53
+ // `sharedShadcnGenerator` adds these to the shared shadcn project it
54
+ // creates, not to the website.
55
+ ...ownedElsewhere(SHADCN_DEPENDENCIES)
56
+ ]
57
+ });
14
58
  /**
15
59
  * Wires a React website up to an AG-UI agent using CopilotKit and
16
60
  * @ag-ui/client's HttpAgent. Agent-server-language agnostic.
@@ -25,6 +69,12 @@ import { runtimeConfigGenerator } from "../runtime-config/generator.js";
25
69
  */ export const addAgUiReactConnection = async (tree, options)=>{
26
70
  const { frontendProjectConfig, agentName, agentNameClassName, auth } = options;
27
71
  const theme = resolveAgUiTheme(frontendProjectConfig);
72
+ // The values the declaration's predicates read. Callers record the same pair,
73
+ // so what is added here is exactly what the version sync owns.
74
+ const metadata = {
75
+ theme,
76
+ auth
77
+ };
28
78
  const scopeAlias = getNpmScopePrefix(tree);
29
79
  // Generates `src/components/AguiProvider.tsx` (if absent) and
30
80
  // `src/hooks/useAgui<AgentName>.tsx`. Existing files are kept so re-running
@@ -38,7 +88,7 @@ import { runtimeConfigGenerator } from "../runtime-config/generator.js";
38
88
  });
39
89
  // Shadcn theme imports from the shared shadcn library, so it must exist.
40
90
  if (theme === 'shadcn') {
41
- await sharedShadcnGenerator(tree);
91
+ await sharedShadcnGenerator(tree, DEPENDENCIES);
42
92
  }
43
93
  generateFiles(tree, joinPathFragments(import.meta.dirname, 'files', theme), frontendProjectConfig.root, {
44
94
  scopeAlias
@@ -67,29 +117,10 @@ import { runtimeConfigGenerator } from "../runtime-config/generator.js";
67
117
  registerPnpmBuiltDependencies(tree, {
68
118
  '@scarf/scarf': false
69
119
  });
70
- addDependenciesToPackageJson(tree, withVersions([
71
- '@copilotkit/react-core',
72
- '@ag-ui/client',
73
- ...theme === 'cloudscape' ? [
74
- '@cloudscape-design/chat-components'
75
- ] : [],
76
- ...theme === 'shadcn' ? [
77
- 'lucide-react'
78
- ] : [],
79
- ...auth === 'iam' ? [
80
- 'oidc-client-ts',
81
- 'aws4fetch',
82
- '@aws-sdk/credential-provider-cognito-identity',
83
- 'react-oidc-context'
84
- ] : [],
85
- ...auth === 'cognito' ? [
86
- 'react-oidc-context'
87
- ] : []
88
- ]), withVersions([
89
- ...auth === 'iam' ? [
90
- '@smithy/types'
91
- ] : []
92
- ]), joinPathFragments(frontendProjectConfig.root, 'package.json'));
120
+ addTsDependencies(tree, DEPENDENCIES, {
121
+ metadata,
122
+ projectRoot: frontendProjectConfig.root
123
+ });
93
124
  // Agents only publish their runtime ARN to the 'agentcore' namespace by
94
125
  // default, which isn't exposed to the website. Patch the agent's CDK/TF
95
126
  // construct to also publish under 'connection' so the browser can read it
@@ -99,7 +130,11 @@ import { runtimeConfigGenerator } from "../runtime-config/generator.js";
99
130
  agentNameClassName
100
131
  });
101
132
  };
102
- const resolveAgUiTheme = (frontendProjectConfig)=>{
133
+ /**
134
+ * The theme module this helper vends, from the website's `metadata.ux`. Callers
135
+ * record the resolved value, so the theme predicates read what the code branches
136
+ * on.
137
+ */ export const resolveAgUiTheme = (frontendProjectConfig)=>{
103
138
  const ux = frontendProjectConfig.metadata?.ux?.toLowerCase();
104
139
  switch(ux){
105
140
  case 'cloudscape':