@aws/nx-plugin 1.0.0-rc.53 → 1.0.0-rc.55

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 (271) 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/order-access-log-delivery-after-bucket-policy/migration.d.ts +6 -0
  21. package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js +94 -0
  22. package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
  23. package/src/preset/generator.d.ts +13 -0
  24. package/src/preset/generator.js +12 -3
  25. package/src/preset/generator.js.map +1 -1
  26. package/src/py/agent/a2a-connection/generator.d.ts +24 -0
  27. package/src/py/agent/a2a-connection/generator.js +49 -20
  28. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  29. package/src/py/agent/gateway-connection/generator.d.ts +23 -0
  30. package/src/py/agent/gateway-connection/generator.js +45 -11
  31. package/src/py/agent/gateway-connection/generator.js.map +1 -1
  32. package/src/py/agent/generator.d.ts +146 -1
  33. package/src/py/agent/generator.js +173 -76
  34. package/src/py/agent/generator.js.map +1 -1
  35. package/src/py/agent/mcp-connection/generator.d.ts +23 -0
  36. package/src/py/agent/mcp-connection/generator.js +45 -11
  37. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  38. package/src/py/agent/react-connection/generator.d.ts +146 -0
  39. package/src/py/agent/react-connection/generator.js +27 -4
  40. package/src/py/agent/react-connection/generator.js.map +1 -1
  41. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
  42. package/src/py/dynamodb/agent-connection/generator.js +7 -1
  43. package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
  44. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +9 -0
  45. package/src/py/dynamodb/fast-api-connection/generator.js +3 -1
  46. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
  47. package/src/py/dynamodb/generator.d.ts +29 -0
  48. package/src/py/dynamodb/generator.js +32 -12
  49. package/src/py/dynamodb/generator.js.map +1 -1
  50. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
  51. package/src/py/dynamodb/mcp-server-connection/generator.js +7 -1
  52. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
  53. package/src/py/fast-api/generator.d.ts +63 -0
  54. package/src/py/fast-api/generator.js +58 -23
  55. package/src/py/fast-api/generator.js.map +1 -1
  56. package/src/py/fast-api/react/generator.d.ts +16 -1
  57. package/src/py/fast-api/react/generator.js +15 -3
  58. package/src/py/fast-api/react/generator.js.map +1 -1
  59. package/src/py/lambda-function/generator.d.ts +21 -0
  60. package/src/py/lambda-function/generator.js +29 -10
  61. package/src/py/lambda-function/generator.js.map +1 -1
  62. package/src/py/mcp-server/generator.d.ts +60 -0
  63. package/src/py/mcp-server/generator.js +62 -25
  64. package/src/py/mcp-server/generator.js.map +1 -1
  65. package/src/py/project/generator.d.ts +13 -0
  66. package/src/py/project/generator.js +29 -10
  67. package/src/py/project/generator.js.map +1 -1
  68. package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +19 -0
  69. package/src/py/rdb/agent-connection/generator.js +7 -1
  70. package/src/py/rdb/agent-connection/generator.js.map +1 -1
  71. package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +7 -0
  72. package/src/py/rdb/fast-api-connection/generator.js +3 -1
  73. package/src/py/rdb/fast-api-connection/generator.js.map +1 -1
  74. package/src/py/rdb/generator.d.ts +89 -0
  75. package/src/py/rdb/generator.js +88 -40
  76. package/src/py/rdb/generator.js.map +1 -1
  77. package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
  78. package/src/py/rdb/mcp-server-connection/generator.js +7 -1
  79. package/src/py/rdb/mcp-server-connection/generator.js.map +1 -1
  80. package/src/smithy/project/generator.d.ts +7 -0
  81. package/src/smithy/project/generator.js +8 -2
  82. package/src/smithy/project/generator.js.map +1 -1
  83. package/src/smithy/react-connection/generator.d.ts +15 -0
  84. package/src/smithy/react-connection/generator.js +17 -3
  85. package/src/smithy/react-connection/generator.js.map +1 -1
  86. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +1 -0
  87. package/src/smithy/ts/api/generator.d.ts +79 -0
  88. package/src/smithy/ts/api/generator.js +77 -33
  89. package/src/smithy/ts/api/generator.js.map +1 -1
  90. package/src/terraform/project/generator.d.ts +50 -0
  91. package/src/terraform/project/generator.js +63 -17
  92. package/src/terraform/project/generator.js.map +1 -1
  93. package/src/trpc/backend/generator.d.ts +84 -0
  94. package/src/trpc/backend/generator.js +98 -38
  95. package/src/trpc/backend/generator.js.map +1 -1
  96. package/src/trpc/react/generator.d.ts +37 -0
  97. package/src/trpc/react/generator.js +63 -26
  98. package/src/trpc/react/generator.js.map +1 -1
  99. package/src/ts/agent/a2a-connection/generator.d.ts +46 -0
  100. package/src/ts/agent/a2a-connection/generator.js +53 -16
  101. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  102. package/src/ts/agent/gateway-connection/generator.d.ts +37 -0
  103. package/src/ts/agent/gateway-connection/generator.js +41 -14
  104. package/src/ts/agent/gateway-connection/generator.js.map +1 -1
  105. package/src/ts/agent/generator.d.ts +162 -0
  106. package/src/ts/agent/generator.js +166 -75
  107. package/src/ts/agent/generator.js.map +1 -1
  108. package/src/ts/agent/mcp-connection/generator.d.ts +37 -0
  109. package/src/ts/agent/mcp-connection/generator.js +41 -14
  110. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  111. package/src/ts/agent/react-connection/generator.d.ts +186 -0
  112. package/src/ts/agent/react-connection/generator.js +70 -21
  113. package/src/ts/agent/react-connection/generator.js.map +1 -1
  114. package/src/ts/astro-docs/generator.d.ts +38 -0
  115. package/src/ts/astro-docs/generator.js +58 -19
  116. package/src/ts/astro-docs/generator.js.map +1 -1
  117. package/src/ts/dcr-proxy/generator.d.ts +24 -0
  118. package/src/ts/dcr-proxy/generator.js +31 -14
  119. package/src/ts/dcr-proxy/generator.js.map +1 -1
  120. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
  121. package/src/ts/dynamodb/agent-connection/generator.js +7 -1
  122. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
  123. package/src/ts/dynamodb/generator.d.ts +41 -0
  124. package/src/ts/dynamodb/generator.js +47 -20
  125. package/src/ts/dynamodb/generator.js.map +1 -1
  126. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
  127. package/src/ts/dynamodb/mcp-server-connection/generator.js +7 -1
  128. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
  129. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
  130. package/src/ts/dynamodb/smithy-connection/generator.js +3 -1
  131. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
  132. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
  133. package/src/ts/dynamodb/trpc-connection/generator.js +3 -1
  134. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
  135. package/src/ts/lambda-function/generator.d.ts +38 -0
  136. package/src/ts/lambda-function/generator.js +49 -20
  137. package/src/ts/lambda-function/generator.js.map +1 -1
  138. package/src/ts/lib/generator.d.ts +7 -0
  139. package/src/ts/lib/generator.js +8 -1
  140. package/src/ts/lib/generator.js.map +1 -1
  141. package/src/ts/lib/ts-project-utils.d.ts +3 -1
  142. package/src/ts/lib/ts-project-utils.js +3 -2
  143. package/src/ts/lib/ts-project-utils.js.map +1 -1
  144. package/src/ts/lib/vitest.d.ts +10 -1
  145. package/src/ts/lib/vitest.js +14 -2
  146. package/src/ts/lib/vitest.js.map +1 -1
  147. package/src/ts/mcp-server/generator.d.ts +71 -0
  148. package/src/ts/mcp-server/generator.js +73 -36
  149. package/src/ts/mcp-server/generator.js.map +1 -1
  150. package/src/ts/nx-generator/generator.d.ts +3 -0
  151. package/src/ts/nx-generator/generator.js +8 -2
  152. package/src/ts/nx-generator/generator.js.map +1 -1
  153. package/src/ts/nx-migration/generator.d.ts +3 -0
  154. package/src/ts/nx-migration/generator.js +8 -2
  155. package/src/ts/nx-migration/generator.js.map +1 -1
  156. package/src/ts/nx-plugin/generator.d.ts +3 -0
  157. package/src/ts/nx-plugin/generator.js +8 -2
  158. package/src/ts/nx-plugin/generator.js.map +1 -1
  159. package/src/ts/nx-plugin/utils.d.ts +7 -2
  160. package/src/ts/nx-plugin/utils.js +10 -4
  161. package/src/ts/nx-plugin/utils.js.map +1 -1
  162. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +10 -0
  163. package/src/ts/rdb/agent-connection/generator.js +8 -1
  164. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  165. package/src/ts/rdb/generator.d.ts +101 -0
  166. package/src/ts/rdb/generator.js +93 -41
  167. package/src/ts/rdb/generator.js.map +1 -1
  168. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +10 -0
  169. package/src/ts/rdb/mcp-server-connection/generator.js +8 -1
  170. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  171. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
  172. package/src/ts/rdb/smithy-connection/generator.js +4 -1
  173. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  174. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
  175. package/src/ts/rdb/trpc-connection/generator.js +3 -1
  176. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  177. package/src/ts/react-website/agui/generator.d.ts +86 -0
  178. package/src/ts/react-website/agui/generator.js +63 -28
  179. package/src/ts/react-website/agui/generator.js.map +1 -1
  180. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +20 -2
  181. package/src/ts/react-website/app/generator.d.ts +136 -1
  182. package/src/ts/react-website/app/generator.js +109 -40
  183. package/src/ts/react-website/app/generator.js.map +1 -1
  184. package/src/ts/react-website/cognito-auth/generator.d.ts +19 -0
  185. package/src/ts/react-website/cognito-auth/generator.js +21 -9
  186. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  187. package/src/utils/add-dependencies.d.ts +38 -0
  188. package/src/utils/add-dependencies.js +83 -0
  189. package/src/utils/add-dependencies.js.map +1 -0
  190. package/src/utils/agent-connection/agent-connection.d.ts +27 -6
  191. package/src/utils/agent-connection/agent-connection.js +47 -18
  192. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  193. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +19 -1
  194. package/src/utils/agent-core-constructs/agent-core-constructs.js +26 -6
  195. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  196. package/src/utils/api-constructs/api-constructs.d.ts +21 -2
  197. package/src/utils/api-constructs/api-constructs.js +26 -5
  198. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  199. package/src/utils/bundle/bundle.d.ts +6 -1
  200. package/src/utils/bundle/bundle.js +8 -2
  201. package/src/utils/bundle/bundle.js.map +1 -1
  202. package/src/utils/commands.d.ts +5 -4
  203. package/src/utils/commands.js +2 -6
  204. package/src/utils/commands.js.map +1 -1
  205. package/src/utils/connection/open-api/react.d.ts +18 -1
  206. package/src/utils/connection/open-api/react.js +27 -3
  207. package/src/utils/connection/open-api/react.js.map +1 -1
  208. package/src/utils/declared-dependencies.d.ts +140 -0
  209. package/src/utils/declared-dependencies.js +64 -0
  210. package/src/utils/declared-dependencies.js.map +1 -0
  211. package/src/utils/docker.d.ts +10 -1
  212. package/src/utils/docker.js +7 -3
  213. package/src/utils/docker.js.map +1 -1
  214. package/src/utils/fs.d.ts +15 -4
  215. package/src/utils/fs.js +26 -13
  216. package/src/utils/fs.js.map +1 -1
  217. package/src/utils/init.d.ts +14 -1
  218. package/src/utils/init.js +25 -7
  219. package/src/utils/init.js.map +1 -1
  220. package/src/utils/migration-versions.d.ts +15 -1
  221. package/src/utils/migration-versions.js +53 -7
  222. package/src/utils/migration-versions.js.map +1 -1
  223. package/src/utils/nx.d.ts +18 -0
  224. package/src/utils/nx.js +4 -0
  225. package/src/utils/nx.js.map +1 -1
  226. package/src/utils/py.d.ts +3 -2
  227. package/src/utils/py.js +10 -10
  228. package/src/utils/py.js.map +1 -1
  229. package/src/utils/shared-constructs-constants.d.ts +39 -4
  230. package/src/utils/shared-constructs-constants.js +29 -0
  231. package/src/utils/shared-constructs-constants.js.map +1 -1
  232. package/src/utils/shared-constructs.d.ts +4 -1
  233. package/src/utils/shared-constructs.js +5 -4
  234. package/src/utils/shared-constructs.js.map +1 -1
  235. package/src/utils/shared-dynamodb-scripts.d.ts +8 -1
  236. package/src/utils/shared-dynamodb-scripts.js +11 -3
  237. package/src/utils/shared-dynamodb-scripts.js.map +1 -1
  238. package/src/utils/shared-infra-scripts.d.ts +16 -1
  239. package/src/utils/shared-infra-scripts.js +18 -3
  240. package/src/utils/shared-infra-scripts.js.map +1 -1
  241. package/src/utils/shared-rdb-scripts.d.ts +12 -1
  242. package/src/utils/shared-rdb-scripts.js +17 -3
  243. package/src/utils/shared-rdb-scripts.js.map +1 -1
  244. package/src/utils/shared-shadcn.d.ts +26 -1
  245. package/src/utils/shared-shadcn.js +31 -14
  246. package/src/utils/shared-shadcn.js.map +1 -1
  247. package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
  248. package/src/utils/version-upgrade-migration/migration.js +16 -0
  249. package/src/utils/version-upgrade-migration/migration.js.map +1 -0
  250. package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +35 -0
  251. package/src/utils/version-upgrade-migration/nx-package-updates.js +42 -0
  252. package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
  253. package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +50 -0
  254. package/src/utils/version-upgrade-migration/owned-dependencies.js +98 -0
  255. package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
  256. package/src/utils/version-upgrade-migration/register.d.ts +18 -0
  257. package/src/utils/version-upgrade-migration/register.js +33 -0
  258. package/src/utils/version-upgrade-migration/register.js.map +1 -0
  259. package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
  260. package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
  261. package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
  262. package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
  263. package/src/utils/version-upgrade-migration/sync-vended-versions.js +504 -0
  264. package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
  265. package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
  266. package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
  267. package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
  268. package/src/utils/versions.d.ts +25 -5
  269. package/src/utils/versions.js +46 -4
  270. package/src/utils/versions.js.map +1 -1
  271. package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +4 -0
@@ -3,12 +3,13 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */ import { relative } from "node:path";
5
5
  import { detectPackageManager, generateFiles, joinPathFragments, readProjectConfiguration, updateJson, updateProjectConfiguration } from "@nx/devkit";
6
- import { addTypeScriptBundleTarget } from "../../utils/bundle/bundle.js";
6
+ import { addTsDependencies } from "../../utils/add-dependencies.js";
7
+ import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../utils/bundle/bundle.js";
7
8
  import { resolveContainers } from "../../utils/containers.js";
8
- import { addDependenciesToPackageJson } from "../../utils/dependencies.js";
9
- import { addDockerScanTarget, nodeImageVersions } from "../../utils/docker.js";
9
+ import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
10
+ import { addDockerScanTarget, DOCKER_DEPENDENCIES, nodeImageVersions } from "../../utils/docker.js";
10
11
  import { formatFilesInSubtree } from "../../utils/format.js";
11
- import { FsCommands } from "../../utils/fs.js";
12
+ import { FS_DEPENDENCIES, FsCommands } from "../../utils/fs.js";
12
13
  import { updateGitIgnore } from "../../utils/git.js";
13
14
  import { resolveIac } from "../../utils/iac.js";
14
15
  import { installDependencies } from "../../utils/install.js";
@@ -21,11 +22,73 @@ import { getRelativePathToRootByDirectory } from "../../utils/paths.js";
21
22
  import { registerPnpmBuiltDependencies } from "../../utils/pnpm-workspace.js";
22
23
  import { assignPort } from "../../utils/port.js";
23
24
  import { addRdbInfra } from "../../utils/rdb-constructs/rdb-constructs.js";
24
- import { sharedConstructsGenerator } from "../../utils/shared-constructs.js";
25
+ import { SHARED_CONSTRUCTS_DEPENDENCIES, sharedConstructsGenerator } from "../../utils/shared-constructs.js";
25
26
  import { PACKAGES_DIR, SHARED_SCRIPTS_DIR } from "../../utils/shared-constructs-constants.js";
26
- import { sharedRdbScriptsGenerator } from "../../utils/shared-rdb-scripts.js";
27
- import { TS_VERSIONS, withVersions } from "../../utils/versions.js";
27
+ import { SHARED_RDB_SCRIPTS_DEPENDENCIES, sharedRdbScriptsGenerator } from "../../utils/shared-rdb-scripts.js";
28
+ import { TS_VERSIONS } from "../../utils/versions.js";
28
29
  import tsProjectGenerator, { getTsLibDetails } from "../lib/generator.js";
30
+ // Each entry names the engine branch it belongs to, so the same declaration
31
+ // drives both adding and the version sync.
32
+ export const DEPENDENCIES = declareDependencies()({
33
+ ts: [
34
+ {
35
+ name: '@aws-lambda-powertools/parameters'
36
+ },
37
+ {
38
+ name: '@aws-sdk/client-appconfigdata'
39
+ },
40
+ {
41
+ name: '@aws-sdk/client-secrets-manager'
42
+ },
43
+ {
44
+ name: '@aws-sdk/rds-signer'
45
+ },
46
+ {
47
+ name: '@prisma/client'
48
+ },
49
+ {
50
+ name: '@prisma/adapter-mariadb',
51
+ when: (m)=>m.engine === 'mysql'
52
+ },
53
+ {
54
+ name: 'mariadb',
55
+ when: (m)=>m.engine === 'mysql'
56
+ },
57
+ {
58
+ name: '@prisma/adapter-pg',
59
+ when: (m)=>m.engine !== 'mysql'
60
+ },
61
+ {
62
+ name: 'pg',
63
+ when: (m)=>m.engine !== 'mysql'
64
+ },
65
+ {
66
+ name: '@types/aws-lambda',
67
+ dev: true
68
+ },
69
+ {
70
+ name: '@types/pg',
71
+ when: (m)=>m.engine !== 'mysql',
72
+ dev: true
73
+ },
74
+ // The prisma CLI and tsx run migration/seed scripts from the root.
75
+ {
76
+ name: 'prisma',
77
+ dev: true,
78
+ root: true
79
+ },
80
+ {
81
+ name: 'tsx',
82
+ dev: true,
83
+ root: true
84
+ },
85
+ ...ownedElsewhere(BUNDLE_DEPENDENCIES),
86
+ ...ownedElsewhere(FS_DEPENDENCIES),
87
+ ...ownedElsewhere(DOCKER_DEPENDENCIES),
88
+ ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),
89
+ ...ownedElsewhere(SHARED_RDB_SCRIPTS_DEPENDENCIES)
90
+ ]
91
+ });
29
92
  export const TS_RDB_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
30
93
  export const tsRdbGenerator = async (tree, options)=>{
31
94
  const nameKebabCase = kebabCase(options.name);
@@ -90,22 +153,22 @@ export const tsRdbGenerator = async (tree, options)=>{
90
153
  ...patterns,
91
154
  'generated/prisma'
92
155
  ]);
93
- await sharedRdbScriptsGenerator(tree, options.engine);
156
+ await sharedRdbScriptsGenerator(tree, options.engine, DEPENDENCIES);
94
157
  const waitForDbScript = options.engine === 'mysql' ? 'wait-for-mysql-db.ts' : 'wait-for-postgres-db.ts';
95
158
  const scriptsDir = relative(dir, joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'rdb'));
96
159
  const relativePathToRoot = getRelativePathToRootByDirectory(projectConfig.root);
97
- const fs = new FsCommands(tree);
160
+ const fs = new FsCommands(tree, DEPENDENCIES);
98
161
  const migrationBundleDir = joinPathFragments('dist', projectConfig.root, 'bundle', 'migration');
99
162
  const migrationDockerImageTag = `${getNpmScope(tree)}-${kebabCase(options.name)}-migration:latest`;
100
163
  if (options.infra !== 'none') {
101
164
  await addTypeScriptBundleTarget(tree, projectConfig, {
102
165
  targetFilePath: 'src/migration-handler.ts',
103
166
  bundleOutputDir: 'migration'
104
- });
167
+ }, DEPENDENCIES);
105
168
  await addTypeScriptBundleTarget(tree, projectConfig, {
106
169
  targetFilePath: 'src/create-db-user-handler.ts',
107
170
  bundleOutputDir: 'create-db-user'
108
- });
171
+ }, DEPENDENCIES);
109
172
  const bundleTarget = projectConfig.targets['bundle'];
110
173
  // The bundle target starts with a single rolldown `command`. Wrap it with
111
174
  // the migration asset copy steps, unless it has already been transformed
@@ -176,8 +239,11 @@ export const tsRdbGenerator = async (tree, options)=>{
176
239
  }
177
240
  }
178
241
  };
242
+ // Recorded in the metadata below so the version sync can tell a CDK project
243
+ // from a Terraform one; undefined when no infrastructure was generated, in
244
+ // which case neither provider's packages were added.
245
+ const iac = options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;
179
246
  if (options.infra !== 'none') {
180
- const iac = await resolveIac(tree, options.iac);
181
247
  if (iac === 'terraform') {
182
248
  projectConfig.targets['docker'] = {
183
249
  cache: true,
@@ -198,20 +264,26 @@ export const tsRdbGenerator = async (tree, options)=>{
198
264
  imageTags: [
199
265
  migrationDockerImageTag
200
266
  ]
201
- });
267
+ }, DEPENDENCIES);
202
268
  }
203
269
  addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');
204
270
  }
205
271
  addDependencyToTargetIfNotPresent(projectConfig, 'compile', 'generate');
206
272
  updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);
207
- addGeneratorMetadata(tree, fullyQualifiedName, TS_RDB_GENERATOR_INFO, {
208
- engine: options.engine
209
- });
273
+ // Recorded here and read by the declaration's predicates, so the packages
274
+ // added below are exactly the ones the version sync will own.
275
+ const metadata = {
276
+ engine: options.engine,
277
+ ...iac ? {
278
+ iac
279
+ } : {}
280
+ };
281
+ addGeneratorMetadata(tree, fullyQualifiedName, TS_RDB_GENERATOR_INFO, metadata);
210
282
  if (options.infra !== 'none') {
211
283
  const iac = await resolveIac(tree, options.iac);
212
284
  await sharedConstructsGenerator(tree, {
213
285
  iac
214
- });
286
+ }, DEPENDENCIES);
215
287
  await addRdbInfra(tree, {
216
288
  iac,
217
289
  projectName: fullyQualifiedName,
@@ -229,25 +301,10 @@ export const tsRdbGenerator = async (tree, options)=>{
229
301
  containerEngine
230
302
  });
231
303
  }
232
- addDependenciesToPackageJson(tree, withVersions([
233
- '@aws-lambda-powertools/parameters',
234
- '@aws-sdk/client-appconfigdata',
235
- '@aws-sdk/client-secrets-manager',
236
- '@aws-sdk/rds-signer',
237
- '@prisma/client',
238
- ...options.engine === 'mysql' ? [
239
- '@prisma/adapter-mariadb',
240
- 'mariadb'
241
- ] : [
242
- '@prisma/adapter-pg',
243
- 'pg'
244
- ]
245
- ]), withVersions([
246
- '@types/aws-lambda',
247
- ...options.engine === 'mysql' ? [] : [
248
- '@types/pg'
249
- ]
250
- ]), joinPathFragments(projectConfig.root, 'package.json'));
304
+ addTsDependencies(tree, DEPENDENCIES, {
305
+ metadata,
306
+ projectRoot: projectConfig.root
307
+ });
251
308
  // @prisma/adapter-pg depends on @types/pg ^8.16.0. Yarn does not dedupe it to
252
309
  // the workspace's pinned @types/pg, so it installs a separate copy under the
253
310
  // adapter's own node_modules whenever a newer @types/pg is published. The two
@@ -266,11 +323,6 @@ export const tsRdbGenerator = async (tree, options)=>{
266
323
  return packageJson;
267
324
  });
268
325
  }
269
- // The prisma CLI and tsx run migration/seed scripts from the root.
270
- addDependenciesToPackageJson(tree, {}, withVersions([
271
- 'prisma',
272
- 'tsx'
273
- ]));
274
326
  registerPnpmBuiltDependencies(tree, {
275
327
  '@prisma/engines': false,
276
328
  prisma: false
@@ -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":"AAAA;;;CAGC,GACD,SAASA,QAAQ,QAAQ,YAAY;AACrC,SACEC,oBAAoB,EAEpBC,aAAa,EACbC,iBAAiB,EACjBC,wBAAwB,EAExBC,UAAU,EACVC,0BAA0B,QACrB,aAAa;AACpB,SAASC,yBAAyB,QAAQ,+BAA4B;AACtE,SAASC,iBAAiB,QAAQ,4BAAyB;AAC3D,SAASC,4BAA4B,QAAQ,8BAA2B;AACxE,SAASC,mBAAmB,EAAEC,iBAAiB,QAAQ,wBAAqB;AAC5E,SAASC,oBAAoB,QAAQ,wBAAqB;AAC1D,SAASC,UAAU,QAAQ,oBAAiB;AAC5C,SAASC,eAAe,QAAQ,qBAAkB;AAClD,SAASC,UAAU,QAAQ,qBAAkB;AAC7C,SAASC,mBAAmB,QAAQ,yBAAsB;AAC1D,SAASC,+BAA+B,QAAQ,yBAAsB;AACtE,SAASC,OAAO,QAAQ,+BAA4B;AACpD,SAASC,SAAS,EAAEC,SAAS,EAAEC,WAAW,QAAQ,uBAAoB;AACtE,SAASC,WAAW,QAAQ,2BAAwB;AACpD,SACEC,iCAAiC,EACjCC,oBAAoB,EACpBC,gBAAgB,QAEX,oBAAiB;AACxB,SAASC,gCAAgC,QAAQ,uBAAoB;AACrE,SAASC,6BAA6B,QAAQ,gCAA6B;AAC3E,SAASC,UAAU,QAAQ,sBAAmB;AAC9C,SAASC,WAAW,QAAQ,+CAA4C;AACxE,SAASC,yBAAyB,QAAQ,mCAAgC;AAC1E,SACEC,YAAY,EACZC,kBAAkB,QACb,6CAA0C;AACjD,SAASC,yBAAyB,QAAQ,oCAAiC;AAC3E,SAASC,WAAW,EAAEC,YAAY,QAAQ,0BAAuB;AACjE,OAAOC,sBAAsBC,eAAe,QAAQ,sBAAmB;AAGvE,OAAO,MAAMC,wBAAyCb,iBACpD,YAAYc,QAAQ,EACpB;AAEF,OAAO,MAAMC,iBAAiB,OAC5BC,MACAC;IAEA,MAAMC,gBAAgBxB,UAAUuB,QAAQE,IAAI;IAC5C,MAAMC,gBAAgBxB,YAAYqB,QAAQE,IAAI;IAC9C,MAAME,eAAeJ,QAAQI,YAAY,IAAI;IAC7C,MAAMC,eAAe3B,UAAUsB,QAAQK,YAAY,IAAIL,QAAQE,IAAI;IACnE,MAAMI,kBAAkB,MAAMxC,kBAAkBiC,MAAM;IACtD,MAAM,EAAEQ,kBAAkB,EAAEC,GAAG,EAAE,GAAGb,gBAAgBI,MAAM;QACxDG,MAAMF,QAAQE,IAAI;QAClBO,WAAWT,QAAQS,SAAS;QAC5BC,cAAcV,QAAQU,YAAY;IACpC;IAEA,IAAIC;IACJ,IAAI;QACFjD,yBAAyBqC,MAAMQ;QAC/BI,gBAAgB;IAClB,EAAE,OAAM;QACNA,gBAAgB;IAClB;IAEA,IAAI,CAACA,eAAe;QAClB,MAAMjB,mBAAmBK,MAAM;YAC7BG,MAAMF,QAAQE,IAAI;YAClBO,WAAWT,QAAQS,SAAS;YAC5BG,2BAA2B;QAC7B;IACF;IAEAjD,WAAWoC,MAAMtC,kBAAkB+C,KAAK,sBAAsB,CAACK,WAAc,CAAA;YAC3E,GAAGA,QAAQ;YACXC,SAAS;gBAAC;gBAAe;aAA2B;QACtD,CAAA;IAEA,MAAMC,gBAAgBrD,yBAAyBqC,MAAMQ;IACrD,MAAMS,cAAc9B,WAClBa,MACAgB,eACAf,QAAQiB,MAAM,KAAK,UAAU,OAAO;IAEtC,MAAMC,cAAc;IACpB,MAAMC,cAAcnB,QAAQiB,MAAM,KAAK,UAAU,SAAS;IAC1D,MAAMG,kBAAkB;IACxB,MAAMC,gBAAgB,GAAGzC,YAAYmB,MAAM,CAAC,EAAEM,cAAc;IAC5D,MAAMiB,cACJtB,QAAQiB,MAAM,KAAK,UACf,+CACA;IAEN,MAAMM,kBAAkB;QACtBN,QAAQjB,QAAQiB,MAAM;QACtBO,kBAAkBrB;QAClBsB,sBAAsBlB;QACtBmB,kBAAkB1B,QAAQiB,MAAM,KAAK,UAAU,UAAU;QACzDU,eAAenC,YAAYoC,MAAM;QACjC,GAAG3D,mBAAmB;QACtB4D,sBACE7B,QAAQiB,MAAM,KAAK,UACf,4BACA;QACNa,wBACE9B,QAAQiB,MAAM,KAAK,UAAU,kBAAkB;QACjDD;QACAE;QACAa,aAAa1B;QACbc;QACAC;QACAd;QACAe;QACAC;QACA,GAAG9C,QAAQuB,KAAK;IAClB;IAEAvC,cACEuC,MACAtC,kBAAkB,YAAYuE,OAAO,EAAE,UACvCxB,KACAe;IAEFnD,gBAAgB2B,MAAMS,KAAK,CAACyB,WAAa;eAAIA;YAAU;SAAmB;IAC1E,MAAM1C,0BAA0BQ,MAAMC,QAAQiB,MAAM;IACpD,MAAMiB,kBACJlC,QAAQiB,MAAM,KAAK,UACf,yBACA;IACN,MAAMkB,aAAa7E,SACjBkD,KACA/C,kBAAkB4B,cAAcC,oBAAoB,OAAO;IAE7D,MAAM8C,qBAAqBpD,iCACzB+B,cAAcsB,IAAI;IAEpB,MAAMC,KAAK,IAAInE,WAAW4B;IAC1B,MAAMwC,qBAAqB9E,kBACzB,QACAsD,cAAcsB,IAAI,EAClB,UACA;IAEF,MAAMG,0BAA0B,GAAG5D,YAAYmB,MAAM,CAAC,EAAEtB,UAAUuB,QAAQE,IAAI,EAAE,iBAAiB,CAAC;IAElG,IAAIF,QAAQyC,KAAK,KAAK,QAAQ;QAC5B,MAAM5E,0BAA0BkC,MAAMgB,eAAe;YACnD2B,gBAAgB;YAChBC,iBAAiB;QACnB;QACA,MAAM9E,0BAA0BkC,MAAMgB,eAAe;YACnD2B,gBAAgB;YAChBC,iBAAiB;QACnB;QACA,MAAMC,eAAe7B,cAAc8B,OAAO,CAAC,SAAS;QACpD,0EAA0E;QAC1E,yEAAyE;QACzE,6CAA6C;QAC7C,IAAI,CAACD,aAAa5C,OAAO,CAAC8C,QAAQ,EAAE;YAClC,MAAMC,kBAAkBH,aAAa5C,OAAO,CAACgD,OAAO;YACpD,OAAOJ,aAAa5C,OAAO,CAACgD,OAAO;YACnCJ,aAAa5C,OAAO,GAAG;gBACrB,GAAG4C,aAAa5C,OAAO;gBACvB8C,UAAU;oBACRR,GAAGW,EAAE,CAAC,GAAGb,mBAAmB,mCAAmC,CAAC;oBAChEE,GAAGY,KAAK,CAAC,GAAGd,mBAAmB,mCAAmC,CAAC;oBACnEE,GAAGa,EAAE,CACH,UACA,GAAGf,mBAAmB,0CAA0C,CAAC;oBAEnEE,GAAGa,EAAE,CACH,oBACA,GAAGf,mBAAmB,oDAAoD,CAAC;oBAE7EE,GAAGa,EAAE,CACH,cACA,GAAGf,mBAAmB,8CAA8C,CAAC;oBAEvEW;iBACD;gBACDK,UAAU;YACZ;QACF;IACF;IAEArC,cAAc8B,OAAO,CAACQ,QAAQ,GAAG;QAC/BC,UAAU;QACVC,SAAS;YAAC;SAAiC;QAC3CvD,SAAS;YACPgD,SAAS;YACTQ,KAAK;QACP;IACF;IACAzC,cAAc8B,OAAO,CAAC,aAAa,GAAG;QACpCS,UAAU;QACVtD,SAAS;YACPgD,SAAS,CAAC,IAAI,EAAEb,WAAW,cAAc,CAAC;YAC1CqB,KAAK;QACP;IACF;IACAzC,cAAc8B,OAAO,CAAC,MAAM,GAAG;QAC7BS,UAAU;QACVtD,SAAS;YACPgD,SAAS,CAAC,IAAI,EAAEb,WAAW,mBAAmB,CAAC;YAC/CqB,KAAK;QACP;QACAC,YAAY;IACd;IACA1C,cAAc8B,OAAO,CAAC,cAAc,GAAG;QACrCS,UAAU;QACVI,WAAW;YAAC;SAAM;QAClB1D,SAAS;YACPgD,SAAS,CAAC,IAAI,EAAEb,WAAW,CAAC,EAAED,iBAAiB;YAC/CsB,KAAK;QACP;IACF;IACAzC,cAAc8B,OAAO,CAACjB,MAAM,GAAG;QAC7B0B,UAAU;QACVI,WAAW;YAAC;YAAO;SAAc;QACjC1D,SAAS;YACPwD,KAAK;YACLR,SAAS;YACTW,KAAK;gBACHC,WAAW;YACb;QACF;IACF;IACA,IAAI5D,QAAQyC,KAAK,KAAK,QAAQ;QAC5B,MAAMoB,MAAM,MAAMxF,WAAW0B,MAAMC,QAAQ6D,GAAG;QAC9C,IAAIA,QAAQ,aAAa;YACvB9C,cAAc8B,OAAO,CAAC,SAAS,GAAG;gBAChCiB,OAAO;gBACPR,UAAU;gBACVtD,SAAS;oBACPgD,SAAS,GAAG1C,gBAAgB,oDAAoD,EAAEkC,wBAAwB,CAAC,EAAED,oBAAoB;gBACnI;gBACAmB,WAAW;oBAAC;iBAAS;YACvB;YACA7E,kCAAkCkC,eAAe,SAAS;YAE1D/C,oBAAoB+B,MAAM;gBACxBgE,SAAShD;gBACTT;gBACA0D,iBAAiB;gBACjBC,kBAAkB;gBAClBC,WAAW;oBAAC1B;iBAAwB;YACtC;QACF;QACA3D,kCAAkCkC,eAAe,SAAS;IAC5D;IACAlC,kCAAkCkC,eAAe,WAAW;IAC5DnD,2BAA2BmC,MAAMQ,oBAAoBQ;IACrDjC,qBAAqBiB,MAAMQ,oBAAoBX,uBAAuB;QACpEqB,QAAQjB,QAAQiB,MAAM;IACxB;IAEA,IAAIjB,QAAQyC,KAAK,KAAK,QAAQ;QAC5B,MAAMoB,MAAM,MAAMxF,WAAW0B,MAAMC,QAAQ6D,GAAG;QAC9C,MAAMzE,0BAA0BW,MAAM;YAAE8D;QAAI;QAC5C,MAAM1E,YAAYY,MAAM;YACtB8D;YACAM,aAAa5D;YACb6D,aAAa5D;YACbL;YACAF;YACAwB,sBAAsBlB;YACtBF;YACAgE,WAAWjE;YACXa,QAAQjB,QAAQiB,MAAM;YACtBsB;YACA+B,uBAAuB7G,kBACrB,QACAsD,cAAcsB,IAAI,EAClB,UACA;YAEFkC,WAAWvE,QAAQuE,SAAS;YAC5B/B;YACAlC;QACF;IACF;IAEAvC,6BACEgC,MACAN,aAAa;QACX;QACA;QACA;QACA;QACA;WACIO,QAAQiB,MAAM,KAAK,UAClB;YAAC;YAA2B;SAAU,GACtC;YAAC;YAAsB;SAAK;KAClC,GACDxB,aAAa;QACX;WACIO,QAAQiB,MAAM,KAAK,UAClB,EAAE,GACF;YAAC;SAAY;KACnB,GACDxD,kBAAkBsD,cAAcsB,IAAI,EAAE;IAGxC,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,8EAA8E;IAC9E,6EAA6E;IAC7E,0EAA0E;IAC1E,6BAA6B;IAC7B,IAAIrC,QAAQiB,MAAM,KAAK,cAAc1D,2BAA2B,QAAQ;QACtEI,WAAWoC,MAAM,gBAAgB,CAACyE;YAChCA,YAAYC,WAAW,GAAG;gBACxB,GAAGD,YAAYC,WAAW;gBAC1B,mCAAmCjF,WAAW,CAAC,YAAY;gBAC3D,gCAAgCA,WAAW,CAAC,YAAY;YAC1D;YACA,OAAOgF;QACT;IACF;IAEA,mEAAmE;IACnEzG,6BAA6BgC,MAAM,CAAC,GAAGN,aAAa;QAAC;QAAU;KAAM;IAErER,8BAA8Bc,MAAM;QAClC,mBAAmB;QACnB6B,QAAQ;IACV;IAEA,MAAMrD,gCAAgCwB,MAAM;QAACH;KAAsB;IAEnE,MAAM1B,qBAAqB6B;IAC3B,OAAO,IACLzB,oBAAoByB,MAAMC,QAAQY,yBAAyB,EAAE;YAC3D8D,WAAW;gBAAC;aAAa;QAC3B;AACJ,EAAE;AAEF,eAAe5E,eAAe"}
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"}