@aws/nx-plugin 1.0.0-rc.54 → 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 (267) hide show
  1. package/migrations.json +45 -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/preset/generator.d.ts +13 -0
  21. package/src/preset/generator.js +12 -3
  22. package/src/preset/generator.js.map +1 -1
  23. package/src/py/agent/a2a-connection/generator.d.ts +24 -0
  24. package/src/py/agent/a2a-connection/generator.js +49 -20
  25. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  26. package/src/py/agent/gateway-connection/generator.d.ts +23 -0
  27. package/src/py/agent/gateway-connection/generator.js +45 -11
  28. package/src/py/agent/gateway-connection/generator.js.map +1 -1
  29. package/src/py/agent/generator.d.ts +146 -1
  30. package/src/py/agent/generator.js +173 -76
  31. package/src/py/agent/generator.js.map +1 -1
  32. package/src/py/agent/mcp-connection/generator.d.ts +23 -0
  33. package/src/py/agent/mcp-connection/generator.js +45 -11
  34. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  35. package/src/py/agent/react-connection/generator.d.ts +146 -0
  36. package/src/py/agent/react-connection/generator.js +27 -4
  37. package/src/py/agent/react-connection/generator.js.map +1 -1
  38. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
  39. package/src/py/dynamodb/agent-connection/generator.js +7 -1
  40. package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
  41. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +9 -0
  42. package/src/py/dynamodb/fast-api-connection/generator.js +3 -1
  43. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
  44. package/src/py/dynamodb/generator.d.ts +29 -0
  45. package/src/py/dynamodb/generator.js +32 -12
  46. package/src/py/dynamodb/generator.js.map +1 -1
  47. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
  48. package/src/py/dynamodb/mcp-server-connection/generator.js +7 -1
  49. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
  50. package/src/py/fast-api/generator.d.ts +63 -0
  51. package/src/py/fast-api/generator.js +58 -23
  52. package/src/py/fast-api/generator.js.map +1 -1
  53. package/src/py/fast-api/react/generator.d.ts +16 -1
  54. package/src/py/fast-api/react/generator.js +15 -3
  55. package/src/py/fast-api/react/generator.js.map +1 -1
  56. package/src/py/lambda-function/generator.d.ts +21 -0
  57. package/src/py/lambda-function/generator.js +29 -10
  58. package/src/py/lambda-function/generator.js.map +1 -1
  59. package/src/py/mcp-server/generator.d.ts +60 -0
  60. package/src/py/mcp-server/generator.js +62 -25
  61. package/src/py/mcp-server/generator.js.map +1 -1
  62. package/src/py/project/generator.d.ts +13 -0
  63. package/src/py/project/generator.js +29 -10
  64. package/src/py/project/generator.js.map +1 -1
  65. package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +19 -0
  66. package/src/py/rdb/agent-connection/generator.js +7 -1
  67. package/src/py/rdb/agent-connection/generator.js.map +1 -1
  68. package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +7 -0
  69. package/src/py/rdb/fast-api-connection/generator.js +3 -1
  70. package/src/py/rdb/fast-api-connection/generator.js.map +1 -1
  71. package/src/py/rdb/generator.d.ts +89 -0
  72. package/src/py/rdb/generator.js +88 -40
  73. package/src/py/rdb/generator.js.map +1 -1
  74. package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
  75. package/src/py/rdb/mcp-server-connection/generator.js +7 -1
  76. package/src/py/rdb/mcp-server-connection/generator.js.map +1 -1
  77. package/src/smithy/project/generator.d.ts +7 -0
  78. package/src/smithy/project/generator.js +8 -2
  79. package/src/smithy/project/generator.js.map +1 -1
  80. package/src/smithy/react-connection/generator.d.ts +15 -0
  81. package/src/smithy/react-connection/generator.js +17 -3
  82. package/src/smithy/react-connection/generator.js.map +1 -1
  83. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +1 -0
  84. package/src/smithy/ts/api/generator.d.ts +79 -0
  85. package/src/smithy/ts/api/generator.js +77 -33
  86. package/src/smithy/ts/api/generator.js.map +1 -1
  87. package/src/terraform/project/generator.d.ts +50 -0
  88. package/src/terraform/project/generator.js +63 -17
  89. package/src/terraform/project/generator.js.map +1 -1
  90. package/src/trpc/backend/generator.d.ts +84 -0
  91. package/src/trpc/backend/generator.js +98 -38
  92. package/src/trpc/backend/generator.js.map +1 -1
  93. package/src/trpc/react/generator.d.ts +37 -0
  94. package/src/trpc/react/generator.js +63 -26
  95. package/src/trpc/react/generator.js.map +1 -1
  96. package/src/ts/agent/a2a-connection/generator.d.ts +46 -0
  97. package/src/ts/agent/a2a-connection/generator.js +53 -16
  98. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  99. package/src/ts/agent/gateway-connection/generator.d.ts +37 -0
  100. package/src/ts/agent/gateway-connection/generator.js +41 -14
  101. package/src/ts/agent/gateway-connection/generator.js.map +1 -1
  102. package/src/ts/agent/generator.d.ts +162 -0
  103. package/src/ts/agent/generator.js +166 -75
  104. package/src/ts/agent/generator.js.map +1 -1
  105. package/src/ts/agent/mcp-connection/generator.d.ts +37 -0
  106. package/src/ts/agent/mcp-connection/generator.js +41 -14
  107. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  108. package/src/ts/agent/react-connection/generator.d.ts +186 -0
  109. package/src/ts/agent/react-connection/generator.js +70 -21
  110. package/src/ts/agent/react-connection/generator.js.map +1 -1
  111. package/src/ts/astro-docs/generator.d.ts +38 -0
  112. package/src/ts/astro-docs/generator.js +58 -19
  113. package/src/ts/astro-docs/generator.js.map +1 -1
  114. package/src/ts/dcr-proxy/generator.d.ts +24 -0
  115. package/src/ts/dcr-proxy/generator.js +31 -14
  116. package/src/ts/dcr-proxy/generator.js.map +1 -1
  117. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
  118. package/src/ts/dynamodb/agent-connection/generator.js +7 -1
  119. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
  120. package/src/ts/dynamodb/generator.d.ts +41 -0
  121. package/src/ts/dynamodb/generator.js +47 -20
  122. package/src/ts/dynamodb/generator.js.map +1 -1
  123. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
  124. package/src/ts/dynamodb/mcp-server-connection/generator.js +7 -1
  125. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
  126. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
  127. package/src/ts/dynamodb/smithy-connection/generator.js +3 -1
  128. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
  129. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
  130. package/src/ts/dynamodb/trpc-connection/generator.js +3 -1
  131. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
  132. package/src/ts/lambda-function/generator.d.ts +38 -0
  133. package/src/ts/lambda-function/generator.js +49 -20
  134. package/src/ts/lambda-function/generator.js.map +1 -1
  135. package/src/ts/lib/generator.d.ts +7 -0
  136. package/src/ts/lib/generator.js +8 -1
  137. package/src/ts/lib/generator.js.map +1 -1
  138. package/src/ts/lib/ts-project-utils.d.ts +3 -1
  139. package/src/ts/lib/ts-project-utils.js +3 -2
  140. package/src/ts/lib/ts-project-utils.js.map +1 -1
  141. package/src/ts/lib/vitest.d.ts +10 -1
  142. package/src/ts/lib/vitest.js +14 -2
  143. package/src/ts/lib/vitest.js.map +1 -1
  144. package/src/ts/mcp-server/generator.d.ts +71 -0
  145. package/src/ts/mcp-server/generator.js +73 -36
  146. package/src/ts/mcp-server/generator.js.map +1 -1
  147. package/src/ts/nx-generator/generator.d.ts +3 -0
  148. package/src/ts/nx-generator/generator.js +8 -2
  149. package/src/ts/nx-generator/generator.js.map +1 -1
  150. package/src/ts/nx-migration/generator.d.ts +3 -0
  151. package/src/ts/nx-migration/generator.js +8 -2
  152. package/src/ts/nx-migration/generator.js.map +1 -1
  153. package/src/ts/nx-plugin/generator.d.ts +3 -0
  154. package/src/ts/nx-plugin/generator.js +8 -2
  155. package/src/ts/nx-plugin/generator.js.map +1 -1
  156. package/src/ts/nx-plugin/utils.d.ts +7 -2
  157. package/src/ts/nx-plugin/utils.js +10 -4
  158. package/src/ts/nx-plugin/utils.js.map +1 -1
  159. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +10 -0
  160. package/src/ts/rdb/agent-connection/generator.js +8 -1
  161. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  162. package/src/ts/rdb/generator.d.ts +101 -0
  163. package/src/ts/rdb/generator.js +93 -41
  164. package/src/ts/rdb/generator.js.map +1 -1
  165. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +10 -0
  166. package/src/ts/rdb/mcp-server-connection/generator.js +8 -1
  167. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  168. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
  169. package/src/ts/rdb/smithy-connection/generator.js +4 -1
  170. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  171. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
  172. package/src/ts/rdb/trpc-connection/generator.js +3 -1
  173. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  174. package/src/ts/react-website/agui/generator.d.ts +86 -0
  175. package/src/ts/react-website/agui/generator.js +63 -28
  176. package/src/ts/react-website/agui/generator.js.map +1 -1
  177. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +8 -2
  178. package/src/ts/react-website/app/generator.d.ts +136 -1
  179. package/src/ts/react-website/app/generator.js +109 -40
  180. package/src/ts/react-website/app/generator.js.map +1 -1
  181. package/src/ts/react-website/cognito-auth/generator.d.ts +19 -0
  182. package/src/ts/react-website/cognito-auth/generator.js +21 -9
  183. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  184. package/src/utils/add-dependencies.d.ts +38 -0
  185. package/src/utils/add-dependencies.js +83 -0
  186. package/src/utils/add-dependencies.js.map +1 -0
  187. package/src/utils/agent-connection/agent-connection.d.ts +27 -6
  188. package/src/utils/agent-connection/agent-connection.js +47 -18
  189. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  190. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +19 -1
  191. package/src/utils/agent-core-constructs/agent-core-constructs.js +26 -6
  192. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  193. package/src/utils/api-constructs/api-constructs.d.ts +21 -2
  194. package/src/utils/api-constructs/api-constructs.js +26 -5
  195. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  196. package/src/utils/bundle/bundle.d.ts +6 -1
  197. package/src/utils/bundle/bundle.js +8 -2
  198. package/src/utils/bundle/bundle.js.map +1 -1
  199. package/src/utils/commands.d.ts +5 -4
  200. package/src/utils/commands.js +2 -6
  201. package/src/utils/commands.js.map +1 -1
  202. package/src/utils/connection/open-api/react.d.ts +18 -1
  203. package/src/utils/connection/open-api/react.js +27 -3
  204. package/src/utils/connection/open-api/react.js.map +1 -1
  205. package/src/utils/declared-dependencies.d.ts +140 -0
  206. package/src/utils/declared-dependencies.js +64 -0
  207. package/src/utils/declared-dependencies.js.map +1 -0
  208. package/src/utils/docker.d.ts +10 -1
  209. package/src/utils/docker.js +7 -3
  210. package/src/utils/docker.js.map +1 -1
  211. package/src/utils/fs.d.ts +15 -4
  212. package/src/utils/fs.js +26 -13
  213. package/src/utils/fs.js.map +1 -1
  214. package/src/utils/init.d.ts +14 -1
  215. package/src/utils/init.js +25 -7
  216. package/src/utils/init.js.map +1 -1
  217. package/src/utils/migration-versions.d.ts +15 -1
  218. package/src/utils/migration-versions.js +53 -7
  219. package/src/utils/migration-versions.js.map +1 -1
  220. package/src/utils/nx.d.ts +18 -0
  221. package/src/utils/nx.js +4 -0
  222. package/src/utils/nx.js.map +1 -1
  223. package/src/utils/py.d.ts +3 -2
  224. package/src/utils/py.js +10 -10
  225. package/src/utils/py.js.map +1 -1
  226. package/src/utils/shared-constructs-constants.d.ts +39 -4
  227. package/src/utils/shared-constructs-constants.js +29 -0
  228. package/src/utils/shared-constructs-constants.js.map +1 -1
  229. package/src/utils/shared-constructs.d.ts +4 -1
  230. package/src/utils/shared-constructs.js +5 -4
  231. package/src/utils/shared-constructs.js.map +1 -1
  232. package/src/utils/shared-dynamodb-scripts.d.ts +8 -1
  233. package/src/utils/shared-dynamodb-scripts.js +11 -3
  234. package/src/utils/shared-dynamodb-scripts.js.map +1 -1
  235. package/src/utils/shared-infra-scripts.d.ts +16 -1
  236. package/src/utils/shared-infra-scripts.js +18 -3
  237. package/src/utils/shared-infra-scripts.js.map +1 -1
  238. package/src/utils/shared-rdb-scripts.d.ts +12 -1
  239. package/src/utils/shared-rdb-scripts.js +17 -3
  240. package/src/utils/shared-rdb-scripts.js.map +1 -1
  241. package/src/utils/shared-shadcn.d.ts +26 -1
  242. package/src/utils/shared-shadcn.js +31 -14
  243. package/src/utils/shared-shadcn.js.map +1 -1
  244. package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
  245. package/src/utils/version-upgrade-migration/migration.js +16 -0
  246. package/src/utils/version-upgrade-migration/migration.js.map +1 -0
  247. package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +35 -0
  248. package/src/utils/version-upgrade-migration/nx-package-updates.js +42 -0
  249. package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
  250. package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +50 -0
  251. package/src/utils/version-upgrade-migration/owned-dependencies.js +98 -0
  252. package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
  253. package/src/utils/version-upgrade-migration/register.d.ts +18 -0
  254. package/src/utils/version-upgrade-migration/register.js +33 -0
  255. package/src/utils/version-upgrade-migration/register.js.map +1 -0
  256. package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
  257. package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
  258. package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
  259. package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
  260. package/src/utils/version-upgrade-migration/sync-vended-versions.js +504 -0
  261. package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
  262. package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
  263. package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
  264. package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
  265. package/src/utils/versions.d.ts +25 -5
  266. package/src/utils/versions.js +46 -4
  267. package/src/utils/versions.js.map +1 -1
@@ -4,6 +4,11 @@
4
4
  */
5
5
  import { type ProjectConfiguration, type Tree } from '@nx/devkit';
6
6
  import type { PackageJson } from 'nx/src/utils/package-json';
7
+ import { type DependencyDeclaration, type MustDeclare } from '../../utils/declared-dependencies';
8
+ /** Dependencies a caller must declare to configure an Nx Plugin project. */
9
+ export declare const NX_PLUGIN_DEPENDENCIES: readonly [{
10
+ readonly name: "@nx/devkit";
11
+ }];
7
12
  /**
8
13
  * Read the configuration of a project which can host Nx Plugin generators or
9
14
  * migrations, ie a TypeScript project.
@@ -21,9 +26,9 @@ export declare const configureNxPluginPackageJson: <TField extends NxPluginManif
21
26
  * workspace and the plugin, since both must resolve for Nx to load them. A
22
27
  * no-op inside the plugin's own monorepo, where they are already present.
23
28
  */
24
- export declare const addNxPluginDependencies: (tree: Tree, pluginPackageJsonPath: string) => void;
29
+ export declare const addNxPluginDependencies: <const D extends DependencyDeclaration>(tree: Tree, pluginPackageJsonPath: string, declaration: D & MustDeclare<typeof NX_PLUGIN_DEPENDENCIES, D>) => void;
25
30
  /**
26
31
  * Configures a TypeScript project as an Nx Plugin
27
32
  */
28
- export declare const configureTsProjectAsNxPlugin: (tree: Tree, projectName: string) => void;
33
+ export declare const configureTsProjectAsNxPlugin: <const D extends DependencyDeclaration>(tree: Tree, projectName: string, declaration: D & MustDeclare<typeof NX_PLUGIN_DEPENDENCIES, D>) => void;
29
34
  export {};
@@ -2,10 +2,16 @@
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */ import { joinPathFragments, updateJson, writeJson } from "@nx/devkit";
5
+ import { forDependencies } from "../../utils/declared-dependencies.js";
5
6
  import { addDependenciesToPackageJson } from "../../utils/dependencies.js";
6
7
  import { isEsmWorkspace } from "../../utils/module-format.js";
7
8
  import { nxPluginSelfDependency, readProjectConfigurationUnqualified } from "../../utils/nx.js";
8
9
  import { withVersions } from "../../utils/versions.js";
10
+ /** Dependencies a caller must declare to configure an Nx Plugin project. */ export const NX_PLUGIN_DEPENDENCIES = [
11
+ {
12
+ name: '@nx/devkit'
13
+ }
14
+ ];
9
15
  /**
10
16
  * Read the configuration of a project which can host Nx Plugin generators or
11
17
  * migrations, ie a TypeScript project.
@@ -43,13 +49,13 @@ import { withVersions } from "../../utils/versions.js";
43
49
  * Declare the dependencies the plugin's `.ts` files import on both the
44
50
  * workspace and the plugin, since both must resolve for Nx to load them. A
45
51
  * no-op inside the plugin's own monorepo, where they are already present.
46
- */ export const addNxPluginDependencies = (tree, pluginPackageJsonPath)=>{
52
+ */ export const addNxPluginDependencies = (tree, pluginPackageJsonPath, declaration)=>{
47
53
  const selfDependency = nxPluginSelfDependency(tree);
48
54
  if (Object.keys(selfDependency).length === 0) {
49
55
  return;
50
56
  }
51
57
  const deps = {
52
- ...withVersions([
58
+ ...withVersions(forDependencies(declaration), [
53
59
  '@nx/devkit'
54
60
  ]),
55
61
  ...selfDependency
@@ -59,7 +65,7 @@ import { withVersions } from "../../utils/versions.js";
59
65
  };
60
66
  /**
61
67
  * Configures a TypeScript project as an Nx Plugin
62
- */ export const configureTsProjectAsNxPlugin = (tree, projectName)=>{
68
+ */ export const configureTsProjectAsNxPlugin = (tree, projectName, declaration)=>{
63
69
  const project = readNxPluginProject(tree, projectName);
64
70
  // Create an empty generators.json if one dosn't exist
65
71
  const generatorsJsonPath = joinPathFragments(project.root, 'generators.json');
@@ -69,7 +75,7 @@ import { withVersions } from "../../utils/versions.js";
69
75
  });
70
76
  }
71
77
  const pluginPackageJsonPath = configureNxPluginPackageJson(tree, project, 'generators', './generators.json');
72
- addNxPluginDependencies(tree, pluginPackageJsonPath);
78
+ addNxPluginDependencies(tree, pluginPackageJsonPath, forDependencies(declaration));
73
79
  };
74
80
 
75
81
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/nx-plugin/utils.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 ProjectConfiguration,\n type Tree,\n updateJson,\n writeJson,\n} from '@nx/devkit';\nimport type { PackageJson } from 'nx/src/utils/package-json';\nimport { addDependenciesToPackageJson } from '../../utils/dependencies';\nimport { isEsmWorkspace } from '../../utils/module-format';\nimport {\n nxPluginSelfDependency,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { withVersions } from '../../utils/versions';\n\n/**\n * Read the configuration of a project which can host Nx Plugin generators or\n * migrations, ie a TypeScript project.\n */\nexport const readNxPluginProject = (\n tree: Tree,\n projectName: string,\n): ProjectConfiguration => {\n const project = readProjectConfigurationUnqualified(tree, projectName);\n\n const tsConfigPath = joinPathFragments(project.root, 'tsconfig.json');\n if (!tree.exists(tsConfigPath)) {\n throw new Error(\n `Selected plugin project ${projectName} is not a TypeScript project`,\n );\n }\n\n return project;\n};\n\n/** `package.json` field pointing Nx at one of a plugin's manifests. */\ntype NxPluginManifestField = 'generators' | 'nx-migrations';\n\n/**\n * Create the plugin project's package.json if absent and point it at the given\n * manifest, returning its path.\n */\nexport const configureNxPluginPackageJson = <\n TField extends NxPluginManifestField,\n>(\n tree: Tree,\n project: ProjectConfiguration,\n manifestField: TField,\n manifestValue: PackageJson[TField],\n): string => {\n const pluginPackageJsonPath = joinPathFragments(project.root, 'package.json');\n if (!tree.exists(pluginPackageJsonPath)) {\n writeJson(tree, pluginPackageJsonPath, {\n name: project.name,\n });\n }\n const esm = isEsmWorkspace(tree);\n updateJson(tree, pluginPackageJsonPath, (pkg) => {\n // Match the plugin's module system to the workspace. Nx loads `.ts` files\n // via Node's native type stripping, as ESM (workspace root is\n // `type: module`) or CommonJS accordingly.\n pkg.type ??= esm ? 'module' : 'commonjs';\n pkg.main ??= esm ? './src/index.js' : './src/index';\n pkg[manifestField] ??= manifestValue;\n return pkg;\n });\n return pluginPackageJsonPath;\n};\n\n/**\n * Declare the dependencies the plugin's `.ts` files import on both the\n * workspace and the plugin, since both must resolve for Nx to load them. A\n * no-op inside the plugin's own monorepo, where they are already present.\n */\nexport const addNxPluginDependencies = (\n tree: Tree,\n pluginPackageJsonPath: string,\n): void => {\n const selfDependency = nxPluginSelfDependency(tree);\n if (Object.keys(selfDependency).length === 0) {\n return;\n }\n const deps = {\n ...withVersions(['@nx/devkit']),\n ...selfDependency,\n };\n addDependenciesToPackageJson(tree, {}, deps);\n addDependenciesToPackageJson(tree, deps, {}, pluginPackageJsonPath);\n};\n\n/**\n * Configures a TypeScript project as an Nx Plugin\n */\nexport const configureTsProjectAsNxPlugin = (\n tree: Tree,\n projectName: string,\n) => {\n const project = readNxPluginProject(tree, projectName);\n\n // Create an empty generators.json if one dosn't exist\n const generatorsJsonPath = joinPathFragments(project.root, 'generators.json');\n if (!tree.exists(generatorsJsonPath)) {\n writeJson(tree, generatorsJsonPath, {\n generators: {},\n });\n }\n\n const pluginPackageJsonPath = configureNxPluginPackageJson(\n tree,\n project,\n 'generators',\n './generators.json',\n );\n\n addNxPluginDependencies(tree, pluginPackageJsonPath);\n};\n"],"names":["joinPathFragments","updateJson","writeJson","addDependenciesToPackageJson","isEsmWorkspace","nxPluginSelfDependency","readProjectConfigurationUnqualified","withVersions","readNxPluginProject","tree","projectName","project","tsConfigPath","root","exists","Error","configureNxPluginPackageJson","manifestField","manifestValue","pluginPackageJsonPath","name","esm","pkg","type","main","addNxPluginDependencies","selfDependency","Object","keys","length","deps","configureTsProjectAsNxPlugin","generatorsJsonPath","generators"],"mappings":"AAAA;;;CAGC,GACD,SACEA,iBAAiB,EAGjBC,UAAU,EACVC,SAAS,QACJ,aAAa;AAEpB,SAASC,4BAA4B,QAAQ,8BAA2B;AACxE,SAASC,cAAc,QAAQ,+BAA4B;AAC3D,SACEC,sBAAsB,EACtBC,mCAAmC,QAC9B,oBAAiB;AACxB,SAASC,YAAY,QAAQ,0BAAuB;AAEpD;;;CAGC,GACD,OAAO,MAAMC,sBAAsB,CACjCC,MACAC;IAEA,MAAMC,UAAUL,oCAAoCG,MAAMC;IAE1D,MAAME,eAAeZ,kBAAkBW,QAAQE,IAAI,EAAE;IACrD,IAAI,CAACJ,KAAKK,MAAM,CAACF,eAAe;QAC9B,MAAM,IAAIG,MACR,CAAC,wBAAwB,EAAEL,YAAY,4BAA4B,CAAC;IAExE;IAEA,OAAOC;AACT,EAAE;AAKF;;;CAGC,GACD,OAAO,MAAMK,+BAA+B,CAG1CP,MACAE,SACAM,eACAC;IAEA,MAAMC,wBAAwBnB,kBAAkBW,QAAQE,IAAI,EAAE;IAC9D,IAAI,CAACJ,KAAKK,MAAM,CAACK,wBAAwB;QACvCjB,UAAUO,MAAMU,uBAAuB;YACrCC,MAAMT,QAAQS,IAAI;QACpB;IACF;IACA,MAAMC,MAAMjB,eAAeK;IAC3BR,WAAWQ,MAAMU,uBAAuB,CAACG;QACvC,0EAA0E;QAC1E,8DAA8D;QAC9D,2CAA2C;QAC3CA,IAAIC,IAAI,KAAKF,MAAM,WAAW;QAC9BC,IAAIE,IAAI,KAAKH,MAAM,mBAAmB;QACtCC,GAAG,CAACL,cAAc,KAAKC;QACvB,OAAOI;IACT;IACA,OAAOH;AACT,EAAE;AAEF;;;;CAIC,GACD,OAAO,MAAMM,0BAA0B,CACrChB,MACAU;IAEA,MAAMO,iBAAiBrB,uBAAuBI;IAC9C,IAAIkB,OAAOC,IAAI,CAACF,gBAAgBG,MAAM,KAAK,GAAG;QAC5C;IACF;IACA,MAAMC,OAAO;QACX,GAAGvB,aAAa;YAAC;SAAa,CAAC;QAC/B,GAAGmB,cAAc;IACnB;IACAvB,6BAA6BM,MAAM,CAAC,GAAGqB;IACvC3B,6BAA6BM,MAAMqB,MAAM,CAAC,GAAGX;AAC/C,EAAE;AAEF;;CAEC,GACD,OAAO,MAAMY,+BAA+B,CAC1CtB,MACAC;IAEA,MAAMC,UAAUH,oBAAoBC,MAAMC;IAE1C,sDAAsD;IACtD,MAAMsB,qBAAqBhC,kBAAkBW,QAAQE,IAAI,EAAE;IAC3D,IAAI,CAACJ,KAAKK,MAAM,CAACkB,qBAAqB;QACpC9B,UAAUO,MAAMuB,oBAAoB;YAClCC,YAAY,CAAC;QACf;IACF;IAEA,MAAMd,wBAAwBH,6BAC5BP,MACAE,SACA,cACA;IAGFc,wBAAwBhB,MAAMU;AAChC,EAAE"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/nx-plugin/utils.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 ProjectConfiguration,\n type Tree,\n updateJson,\n writeJson,\n} from '@nx/devkit';\nimport type { PackageJson } from 'nx/src/utils/package-json';\nimport {\n type DependencyDeclaration,\n forDependencies,\n type MustDeclare,\n} from '../../utils/declared-dependencies';\nimport { addDependenciesToPackageJson } from '../../utils/dependencies';\nimport { isEsmWorkspace } from '../../utils/module-format';\nimport {\n nxPluginSelfDependency,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { type ITsDepVersion, withVersions } from '../../utils/versions';\n\n/** Dependencies a caller must declare to configure an Nx Plugin project. */\nexport const NX_PLUGIN_DEPENDENCIES = [\n { name: '@nx/devkit' },\n] as const satisfies readonly { name: ITsDepVersion }[];\n\n/**\n * Read the configuration of a project which can host Nx Plugin generators or\n * migrations, ie a TypeScript project.\n */\nexport const readNxPluginProject = (\n tree: Tree,\n projectName: string,\n): ProjectConfiguration => {\n const project = readProjectConfigurationUnqualified(tree, projectName);\n\n const tsConfigPath = joinPathFragments(project.root, 'tsconfig.json');\n if (!tree.exists(tsConfigPath)) {\n throw new Error(\n `Selected plugin project ${projectName} is not a TypeScript project`,\n );\n }\n\n return project;\n};\n\n/** `package.json` field pointing Nx at one of a plugin's manifests. */\ntype NxPluginManifestField = 'generators' | 'nx-migrations';\n\n/**\n * Create the plugin project's package.json if absent and point it at the given\n * manifest, returning its path.\n */\nexport const configureNxPluginPackageJson = <\n TField extends NxPluginManifestField,\n>(\n tree: Tree,\n project: ProjectConfiguration,\n manifestField: TField,\n manifestValue: PackageJson[TField],\n): string => {\n const pluginPackageJsonPath = joinPathFragments(project.root, 'package.json');\n if (!tree.exists(pluginPackageJsonPath)) {\n writeJson(tree, pluginPackageJsonPath, {\n name: project.name,\n });\n }\n const esm = isEsmWorkspace(tree);\n updateJson(tree, pluginPackageJsonPath, (pkg) => {\n // Match the plugin's module system to the workspace. Nx loads `.ts` files\n // via Node's native type stripping, as ESM (workspace root is\n // `type: module`) or CommonJS accordingly.\n pkg.type ??= esm ? 'module' : 'commonjs';\n pkg.main ??= esm ? './src/index.js' : './src/index';\n pkg[manifestField] ??= manifestValue;\n return pkg;\n });\n return pluginPackageJsonPath;\n};\n\n/**\n * Declare the dependencies the plugin's `.ts` files import on both the\n * workspace and the plugin, since both must resolve for Nx to load them. A\n * no-op inside the plugin's own monorepo, where they are already present.\n */\nexport const addNxPluginDependencies = <const D extends DependencyDeclaration>(\n tree: Tree,\n pluginPackageJsonPath: string,\n declaration: D & MustDeclare<typeof NX_PLUGIN_DEPENDENCIES, D>,\n): void => {\n const selfDependency = nxPluginSelfDependency(tree);\n if (Object.keys(selfDependency).length === 0) {\n return;\n }\n const deps = {\n ...withVersions(\n forDependencies<typeof NX_PLUGIN_DEPENDENCIES>(declaration),\n ['@nx/devkit'],\n ),\n ...selfDependency,\n };\n addDependenciesToPackageJson(tree, {}, deps);\n addDependenciesToPackageJson(tree, deps, {}, pluginPackageJsonPath);\n};\n\n/**\n * Configures a TypeScript project as an Nx Plugin\n */\nexport const configureTsProjectAsNxPlugin = <\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n projectName: string,\n declaration: D & MustDeclare<typeof NX_PLUGIN_DEPENDENCIES, D>,\n) => {\n const project = readNxPluginProject(tree, projectName);\n\n // Create an empty generators.json if one dosn't exist\n const generatorsJsonPath = joinPathFragments(project.root, 'generators.json');\n if (!tree.exists(generatorsJsonPath)) {\n writeJson(tree, generatorsJsonPath, {\n generators: {},\n });\n }\n\n const pluginPackageJsonPath = configureNxPluginPackageJson(\n tree,\n project,\n 'generators',\n './generators.json',\n );\n\n addNxPluginDependencies(\n tree,\n pluginPackageJsonPath,\n forDependencies<typeof NX_PLUGIN_DEPENDENCIES>(declaration),\n );\n};\n"],"names":["joinPathFragments","updateJson","writeJson","forDependencies","addDependenciesToPackageJson","isEsmWorkspace","nxPluginSelfDependency","readProjectConfigurationUnqualified","withVersions","NX_PLUGIN_DEPENDENCIES","name","readNxPluginProject","tree","projectName","project","tsConfigPath","root","exists","Error","configureNxPluginPackageJson","manifestField","manifestValue","pluginPackageJsonPath","esm","pkg","type","main","addNxPluginDependencies","declaration","selfDependency","Object","keys","length","deps","configureTsProjectAsNxPlugin","generatorsJsonPath","generators"],"mappings":"AAAA;;;CAGC,GACD,SACEA,iBAAiB,EAGjBC,UAAU,EACVC,SAAS,QACJ,aAAa;AAEpB,SAEEC,eAAe,QAEV,uCAAoC;AAC3C,SAASC,4BAA4B,QAAQ,8BAA2B;AACxE,SAASC,cAAc,QAAQ,+BAA4B;AAC3D,SACEC,sBAAsB,EACtBC,mCAAmC,QAC9B,oBAAiB;AACxB,SAA6BC,YAAY,QAAQ,0BAAuB;AAExE,0EAA0E,GAC1E,OAAO,MAAMC,yBAAyB;IACpC;QAAEC,MAAM;IAAa;CACtB,CAAuD;AAExD;;;CAGC,GACD,OAAO,MAAMC,sBAAsB,CACjCC,MACAC;IAEA,MAAMC,UAAUP,oCAAoCK,MAAMC;IAE1D,MAAME,eAAef,kBAAkBc,QAAQE,IAAI,EAAE;IACrD,IAAI,CAACJ,KAAKK,MAAM,CAACF,eAAe;QAC9B,MAAM,IAAIG,MACR,CAAC,wBAAwB,EAAEL,YAAY,4BAA4B,CAAC;IAExE;IAEA,OAAOC;AACT,EAAE;AAKF;;;CAGC,GACD,OAAO,MAAMK,+BAA+B,CAG1CP,MACAE,SACAM,eACAC;IAEA,MAAMC,wBAAwBtB,kBAAkBc,QAAQE,IAAI,EAAE;IAC9D,IAAI,CAACJ,KAAKK,MAAM,CAACK,wBAAwB;QACvCpB,UAAUU,MAAMU,uBAAuB;YACrCZ,MAAMI,QAAQJ,IAAI;QACpB;IACF;IACA,MAAMa,MAAMlB,eAAeO;IAC3BX,WAAWW,MAAMU,uBAAuB,CAACE;QACvC,0EAA0E;QAC1E,8DAA8D;QAC9D,2CAA2C;QAC3CA,IAAIC,IAAI,KAAKF,MAAM,WAAW;QAC9BC,IAAIE,IAAI,KAAKH,MAAM,mBAAmB;QACtCC,GAAG,CAACJ,cAAc,KAAKC;QACvB,OAAOG;IACT;IACA,OAAOF;AACT,EAAE;AAEF;;;;CAIC,GACD,OAAO,MAAMK,0BAA0B,CACrCf,MACAU,uBACAM;IAEA,MAAMC,iBAAiBvB,uBAAuBM;IAC9C,IAAIkB,OAAOC,IAAI,CAACF,gBAAgBG,MAAM,KAAK,GAAG;QAC5C;IACF;IACA,MAAMC,OAAO;QACX,GAAGzB,aACDL,gBAA+CyB,cAC/C;YAAC;SAAa,CACf;QACD,GAAGC,cAAc;IACnB;IACAzB,6BAA6BQ,MAAM,CAAC,GAAGqB;IACvC7B,6BAA6BQ,MAAMqB,MAAM,CAAC,GAAGX;AAC/C,EAAE;AAEF;;CAEC,GACD,OAAO,MAAMY,+BAA+B,CAG1CtB,MACAC,aACAe;IAEA,MAAMd,UAAUH,oBAAoBC,MAAMC;IAE1C,sDAAsD;IACtD,MAAMsB,qBAAqBnC,kBAAkBc,QAAQE,IAAI,EAAE;IAC3D,IAAI,CAACJ,KAAKK,MAAM,CAACkB,qBAAqB;QACpCjC,UAAUU,MAAMuB,oBAAoB;YAClCC,YAAY,CAAC;QACf;IACF;IAEA,MAAMd,wBAAwBH,6BAC5BP,MACAE,SACA,cACA;IAGFa,wBACEf,MACAU,uBACAnB,gBAA+CyB;AAEnD,EAAE"}
@@ -53,6 +53,11 @@ exports[`ts#rdb agent-connection generator > should add rdb dev dependency to th
53
53
  "path": "src/my-agent",
54
54
  "protocol": "HTTP",
55
55
  },
56
+ {
57
+ "generator": "ts#rdb#agent-connection",
58
+ "name": "my-agent-db",
59
+ "path": "src/my-agent/agent.ts",
60
+ },
56
61
  ],
57
62
  },
58
63
  "name": "my-service",
@@ -152,6 +157,11 @@ exports[`ts#rdb agent-connection generator > should fall back to agent-dev when
152
157
  "path": "src/agent",
153
158
  "protocol": "HTTP",
154
159
  },
160
+ {
161
+ "generator": "ts#rdb#agent-connection",
162
+ "name": "agent-db",
163
+ "path": "src/agent/agent.ts",
164
+ },
155
165
  ],
156
166
  },
157
167
  "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_AGENT_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
13
14
  export const tsRdbAgentConnectionGenerator = async (tree, options)=>{
@@ -57,6 +58,12 @@ export const tsRdbAgentConnectionGenerator = async (tree, options)=>{
57
58
  tree.write(agentPath, content.replace(dbDecl, `${dbDecl}\n ${onCall}`));
58
59
  }
59
60
  }
61
+ // Recorded so the version sync can identify this connection.
62
+ addComponentGeneratorMetadata(tree, sourceProject.name, TS_RDB_AGENT_CONNECTION_GENERATOR_INFO, toProjectRelativePath(sourceProject, agentPath), `${agentName}-${rdbNameCamel}`, // The source component this connection is made from, so the pair is
63
+ // identifiable rather than just the two projects.
64
+ {
65
+ sourcePath: options.sourceComponent?.path
66
+ });
60
67
  await addGeneratorMetricsIfApplicable(tree, [
61
68
  TS_RDB_AGENT_CONNECTION_GENERATOR_INFO
62
69
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/agent-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n 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 { TsRdbAgentConnectionGeneratorSchema } from './schema';\n\nexport const TS_RDB_AGENT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsRdbAgentConnectionGenerator = async (\n tree: Tree,\n options: TsRdbAgentConnectionGeneratorSchema,\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 agentName = options.sourceComponent?.name ?? 'agent';\n const devTarget = `${agentName}-dev`;\n\n if (sourceProject.targets?.[devTarget]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTarget, {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n 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 agentSourceDir = joinPathFragments(\n sourceProject.root,\n 'src',\n agentName,\n );\n const agentPath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n // Dockerfile: install RDS CA bundle for direct Aurora SSL connections\n const dockerfilePath = joinPathFragments(agentSourceDir, 'Dockerfile');\n injectRdsCaBundleIntoDockerfile(tree, dockerfilePath);\n\n if (tree.exists(agentPath)) {\n await addDestructuredImport(\n tree,\n agentPath,\n [getterAlias],\n rdbPackageAlias,\n );\n\n // Block body form: export const getAgent = async () => { ... }\n await applyGritQL(\n tree,\n agentPath,\n `\\`export const getAgent = async () => { $body }\\` => raw\\`export const getAgent = async () => {\n const ${rdbNameCamel} = await get${rdbNamePascal}();\n $body\n}\\` where { $body <: not some \\`const ${rdbNameCamel} = await get${rdbNamePascal}()\\` }`,\n );\n\n // Expression body form: export const getAgent = async () => expr\n await applyGritQL(\n tree,\n agentPath,\n `\\`export const getAgent = async () => $expr\\` => raw\\`export const getAgent = async () => {\n const ${rdbNameCamel} = await get${rdbNamePascal}();\n return $expr;\n}\\` where { $expr <: not \\`{ $_ }\\` }`,\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(agentPath, 'utf-8')!;\n if (content.includes(dbDecl) && !content.includes(`${rdbNameCamel}.$on`)) {\n tree.write(agentPath, content.replace(dbDecl, `${dbDecl}\\n ${onCall}`));\n }\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_RDB_AGENT_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n};\n\nexport default tsRdbAgentConnectionGenerator;\n"],"names":["joinPathFragments","updateProjectConfiguration","camelCase","addDestructuredImport","applyGritQL","formatFilesInSubtree","addGeneratorMetricsIfApplicable","pascalCase","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","injectRdsCaBundleIntoDockerfile","TS_RDB_AGENT_CONNECTION_GENERATOR_INFO","filename","tsRdbAgentConnectionGenerator","tree","options","sourceProject","targetProject","agentName","sourceComponent","name","devTarget","targets","projects","target","rdbBaseName","split","pop","rdbNameCamel","rdbNamePascal","rdbPackageAlias","getterAlias","agentSourceDir","root","agentPath","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,yCACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,gCAAgC,OAC3CC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvB,MAAMC,YAAYH,QAAQI,eAAe,EAAEC,QAAQ;IACnD,MAAMC,YAAY,GAAGH,UAAU,IAAI,CAAC;IAEpC,IAAIF,cAAcM,OAAO,EAAE,CAACD,UAAU,EAAE;QACtCd,kCAAkCS,eAAeK,WAAW;YAC1DE,UAAU;gBAACN,cAAcG,IAAI;aAAC;YAC9BI,QAAQ;QACV;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,iBAAiBjC,kBACrBiB,cAAciB,IAAI,EAClB,OACAf;IAEF,MAAMgB,YAAYnC,kBAAkBiC,gBAAgB;IAEpD,sEAAsE;IACtE,MAAMG,iBAAiBpC,kBAAkBiC,gBAAgB;IACzDtB,gCAAgCI,MAAMqB;IAEtC,IAAIrB,KAAKsB,MAAM,CAACF,YAAY;QAC1B,MAAMhC,sBACJY,MACAoB,WACA;YAACH;SAAY,EACbD;QAGF,+DAA+D;QAC/D,MAAM3B,YACJW,MACAoB,WACA,CAAC;QACC,EAAEN,aAAa,YAAY,EAAEC,cAAc;;sCAEb,EAAED,aAAa,YAAY,EAAEC,cAAc,MAAM,CAAC;QAGpF,iEAAiE;QACjE,MAAM1B,YACJW,MACAoB,WACA,CAAC;QACC,EAAEN,aAAa,YAAY,EAAEC,cAAc;;qCAEd,CAAC;QAGlC,kDAAkD;QAClD,2EAA2E;QAC3E,MAAMQ,SAAS,CAAC,MAAM,EAAET,aAAa,YAAY,EAAEC,cAAc,GAAG,CAAC;QACrE,MAAMS,SAAS,GAAGV,aAAa,6BAA6B,CAAC;QAC7D,MAAMW,UAAUzB,KAAK0B,IAAI,CAACN,WAAW;QACrC,IAAIK,QAAQE,QAAQ,CAACJ,WAAW,CAACE,QAAQE,QAAQ,CAAC,GAAGb,aAAa,IAAI,CAAC,GAAG;YACxEd,KAAK4B,KAAK,CAACR,WAAWK,QAAQI,OAAO,CAACN,QAAQ,GAAGA,OAAO,IAAI,EAAEC,QAAQ;QACxE;IACF;IAEA,MAAMjC,gCAAgCS,MAAM;QAC1CH;KACD;IACD,MAAMP,qBAAqBU;AAC7B,EAAE;AAEF,eAAeD,8BAA8B"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/agent-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n 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 { TsRdbAgentConnectionGeneratorSchema } from './schema';\n\nexport const TS_RDB_AGENT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsRdbAgentConnectionGenerator = async (\n tree: Tree,\n options: TsRdbAgentConnectionGeneratorSchema,\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 agentName = options.sourceComponent?.name ?? 'agent';\n const devTarget = `${agentName}-dev`;\n\n if (sourceProject.targets?.[devTarget]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTarget, {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n 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 agentSourceDir = joinPathFragments(\n sourceProject.root,\n 'src',\n agentName,\n );\n const agentPath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n // Dockerfile: install RDS CA bundle for direct Aurora SSL connections\n const dockerfilePath = joinPathFragments(agentSourceDir, 'Dockerfile');\n injectRdsCaBundleIntoDockerfile(tree, dockerfilePath);\n\n if (tree.exists(agentPath)) {\n await addDestructuredImport(\n tree,\n agentPath,\n [getterAlias],\n rdbPackageAlias,\n );\n\n // Block body form: export const getAgent = async () => { ... }\n await applyGritQL(\n tree,\n agentPath,\n `\\`export const getAgent = async () => { $body }\\` => raw\\`export const getAgent = async () => {\n const ${rdbNameCamel} = await get${rdbNamePascal}();\n $body\n}\\` where { $body <: not some \\`const ${rdbNameCamel} = await get${rdbNamePascal}()\\` }`,\n );\n\n // Expression body form: export const getAgent = async () => expr\n await applyGritQL(\n tree,\n agentPath,\n `\\`export const getAgent = async () => $expr\\` => raw\\`export const getAgent = async () => {\n const ${rdbNameCamel} = await get${rdbNamePascal}();\n return $expr;\n}\\` where { $expr <: not \\`{ $_ }\\` }`,\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(agentPath, 'utf-8')!;\n if (content.includes(dbDecl) && !content.includes(`${rdbNameCamel}.$on`)) {\n tree.write(agentPath, 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_AGENT_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(sourceProject, agentPath),\n `${agentName}-${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_AGENT_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n};\n\nexport default tsRdbAgentConnectionGenerator;\n"],"names":["joinPathFragments","updateProjectConfiguration","camelCase","addDestructuredImport","applyGritQL","formatFilesInSubtree","addGeneratorMetricsIfApplicable","pascalCase","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","injectRdsCaBundleIntoDockerfile","TS_RDB_AGENT_CONNECTION_GENERATOR_INFO","filename","tsRdbAgentConnectionGenerator","tree","options","sourceProject","targetProject","agentName","sourceComponent","name","devTarget","targets","projects","target","rdbBaseName","split","pop","rdbNameCamel","rdbNamePascal","rdbPackageAlias","getterAlias","agentSourceDir","root","agentPath","dockerfilePath","exists","dbDecl","onCall","content","read","includes","write","replace","sourcePath","path"],"mappings":"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"}
@@ -1,6 +1,107 @@
1
1
  import { type GeneratorCallback, type Tree } from '@nx/devkit';
2
2
  import { type NxGeneratorInfo } from '../../utils/nx';
3
+ import { type IacMetadata } from '../../utils/shared-constructs-constants';
3
4
  import type { TsRdbGeneratorSchema } from './schema';
5
+ /** The metadata this generator records, which its predicates read. */
6
+ export interface TsRdbMetadata extends IacMetadata {
7
+ readonly engine: TsRdbGeneratorSchema['engine'];
8
+ }
9
+ export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
10
+ readonly name: "@aws-lambda-powertools/parameters";
11
+ }, {
12
+ readonly name: "@aws-sdk/client-appconfigdata";
13
+ }, {
14
+ readonly name: "@aws-sdk/client-secrets-manager";
15
+ }, {
16
+ readonly name: "@aws-sdk/rds-signer";
17
+ }, {
18
+ readonly name: "@prisma/client";
19
+ }, {
20
+ readonly name: "@prisma/adapter-mariadb";
21
+ readonly when: (m: TsRdbMetadata) => boolean;
22
+ }, {
23
+ readonly name: "mariadb";
24
+ readonly when: (m: TsRdbMetadata) => boolean;
25
+ }, {
26
+ readonly name: "@prisma/adapter-pg";
27
+ readonly when: (m: TsRdbMetadata) => boolean;
28
+ }, {
29
+ readonly name: "pg";
30
+ readonly when: (m: TsRdbMetadata) => boolean;
31
+ }, {
32
+ readonly name: "@types/aws-lambda";
33
+ readonly dev: true;
34
+ }, {
35
+ readonly name: "@types/pg";
36
+ readonly when: (m: TsRdbMetadata) => boolean;
37
+ readonly dev: true;
38
+ }, {
39
+ readonly name: "prisma";
40
+ readonly dev: true;
41
+ readonly root: true;
42
+ }, {
43
+ readonly name: "tsx";
44
+ readonly dev: true;
45
+ readonly root: true;
46
+ }, {
47
+ readonly name: "rolldown";
48
+ } & {
49
+ versionOnly: true;
50
+ }, {
51
+ readonly name: "ncp";
52
+ } & {
53
+ versionOnly: true;
54
+ }, {
55
+ readonly name: "rimraf";
56
+ } & {
57
+ versionOnly: true;
58
+ }, {
59
+ readonly name: "make-dir-cli";
60
+ } & {
61
+ versionOnly: true;
62
+ }, {
63
+ readonly name: "ncp";
64
+ } & {
65
+ versionOnly: true;
66
+ }, {
67
+ readonly name: "rimraf";
68
+ } & {
69
+ versionOnly: true;
70
+ }, {
71
+ readonly name: "make-dir-cli";
72
+ } & {
73
+ versionOnly: true;
74
+ }, {
75
+ readonly name: "constructs";
76
+ readonly when: (m: IacMetadata) => boolean;
77
+ } & {
78
+ versionOnly: true;
79
+ }, {
80
+ readonly name: "aws-cdk-lib";
81
+ readonly when: (m: IacMetadata) => boolean;
82
+ } & {
83
+ versionOnly: true;
84
+ }, {
85
+ readonly name: "@types/node";
86
+ } & {
87
+ versionOnly: true;
88
+ }, {
89
+ readonly name: "pg";
90
+ } & {
91
+ versionOnly: true;
92
+ }, {
93
+ readonly name: "@types/pg";
94
+ } & {
95
+ versionOnly: true;
96
+ }, {
97
+ readonly name: "mariadb";
98
+ } & {
99
+ versionOnly: true;
100
+ }, {
101
+ readonly name: "tsx";
102
+ } & {
103
+ versionOnly: true;
104
+ }], readonly import("../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", TsRdbMetadata>[]>;
4
105
  export declare const TS_RDB_GENERATOR_INFO: NxGeneratorInfo;
5
106
  export declare const tsRdbGenerator: (tree: Tree, options: TsRdbGeneratorSchema) => Promise<GeneratorCallback>;
6
107
  export default tsRdbGenerator;
@@ -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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"}