@aws/nx-plugin 1.0.0-rc.89 → 1.0.0-rc.90

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 (148) hide show
  1. package/README.md +22 -22
  2. package/executors.json +5 -0
  3. package/generators.json +2 -1
  4. package/migrations.json +47 -2
  5. package/package.json +1 -1
  6. package/src/infra/app/__snapshots__/generator.spec.ts.snap +24 -12
  7. package/src/infra/app/generator.js +9 -7
  8. package/src/infra/app/generator.js.map +1 -1
  9. package/src/mcp-server/generator-info.d.ts +5 -0
  10. package/src/mcp-server/generator-info.js +6 -2
  11. package/src/mcp-server/generator-info.js.map +1 -1
  12. package/src/migrations/latest/add-assemble-target/metadata.json +3 -0
  13. package/src/migrations/latest/add-assemble-target/migration.d.ts +6 -0
  14. package/src/migrations/latest/add-assemble-target/migration.js +241 -0
  15. package/src/migrations/latest/add-assemble-target/migration.js.map +1 -0
  16. package/src/migrations/latest/declare-cacheable-target-inputs/metadata.json +3 -0
  17. package/src/migrations/latest/declare-cacheable-target-inputs/migration.d.ts +6 -0
  18. package/src/migrations/latest/declare-cacheable-target-inputs/migration.js +94 -0
  19. package/src/migrations/latest/declare-cacheable-target-inputs/migration.js.map +1 -0
  20. package/src/migrations/latest/dev-target-depends-on-pull-image/metadata.json +3 -0
  21. package/src/migrations/latest/dev-target-depends-on-pull-image/migration.d.ts +6 -0
  22. package/src/migrations/latest/dev-target-depends-on-pull-image/migration.js +67 -0
  23. package/src/migrations/latest/dev-target-depends-on-pull-image/migration.js.map +1 -0
  24. package/src/migrations/latest/docker-target-cache-soundness/metadata.json +3 -0
  25. package/src/migrations/latest/docker-target-cache-soundness/migration.d.ts +6 -0
  26. package/src/migrations/latest/docker-target-cache-soundness/migration.js +95 -0
  27. package/src/migrations/latest/docker-target-cache-soundness/migration.js.map +1 -0
  28. package/src/migrations/latest/open-api-codegen-executor/metadata.json +3 -0
  29. package/src/migrations/latest/open-api-codegen-executor/migration.d.ts +6 -0
  30. package/src/migrations/latest/open-api-codegen-executor/migration.js +100 -0
  31. package/src/migrations/latest/open-api-codegen-executor/migration.js.map +1 -0
  32. package/src/migrations/latest/python-test-input-scoping/metadata.json +3 -0
  33. package/src/migrations/latest/python-test-input-scoping/migration.d.ts +6 -0
  34. package/src/migrations/latest/python-test-input-scoping/migration.js +142 -0
  35. package/src/migrations/latest/python-test-input-scoping/migration.js.map +1 -0
  36. package/src/migrations/latest/terraform-fmt-check/metadata.json +3 -0
  37. package/src/migrations/latest/terraform-fmt-check/migration.d.ts +6 -0
  38. package/src/migrations/latest/terraform-fmt-check/migration.js +165 -0
  39. package/src/migrations/latest/terraform-fmt-check/migration.js.map +1 -0
  40. package/src/migrations/latest/terraform-provider-plugin-cache/metadata.json +3 -0
  41. package/src/migrations/latest/terraform-provider-plugin-cache/migration.d.ts +6 -0
  42. package/src/migrations/latest/terraform-provider-plugin-cache/migration.js +164 -0
  43. package/src/migrations/latest/terraform-provider-plugin-cache/migration.js.map +1 -0
  44. package/src/migrations/latest/vitest-coverage-output-dir/metadata.json +3 -0
  45. package/src/migrations/latest/vitest-coverage-output-dir/migration.d.ts +6 -0
  46. package/src/migrations/latest/vitest-coverage-output-dir/migration.js +177 -0
  47. package/src/migrations/latest/vitest-coverage-output-dir/migration.js.map +1 -0
  48. package/src/open-api/codegen/executor-schema.d.js +6 -0
  49. package/src/open-api/codegen/executor-schema.d.js.map +1 -0
  50. package/src/open-api/codegen/executor-schema.d.ts +18 -0
  51. package/src/open-api/codegen/executor-schema.json +33 -0
  52. package/src/open-api/codegen/executor.d.ts +18 -0
  53. package/src/open-api/codegen/executor.js +56 -0
  54. package/src/open-api/codegen/executor.js.map +1 -0
  55. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -1
  56. package/src/py/agent/generator.js +21 -22
  57. package/src/py/agent/generator.js.map +1 -1
  58. package/src/py/agent/react-connection/generator.js +9 -0
  59. package/src/py/agent/react-connection/generator.js.map +1 -1
  60. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +0 -30
  61. package/src/py/fast-api/react/open-api.js +19 -7
  62. package/src/py/fast-api/react/open-api.js.map +1 -1
  63. package/src/py/mcp-server/generator.js +4 -4
  64. package/src/py/mcp-server/generator.js.map +1 -1
  65. package/src/py/project/generator.d.ts +9 -0
  66. package/src/py/project/generator.js +51 -1
  67. package/src/py/project/generator.js.map +1 -1
  68. package/src/py/rdb/generator.js +10 -4
  69. package/src/py/rdb/generator.js.map +1 -1
  70. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +15 -0
  71. package/src/smithy/project/generator.js +10 -0
  72. package/src/smithy/project/generator.js.map +1 -1
  73. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +7 -0
  74. package/src/terraform/project/files/application/scripts/env.ts.template +11 -0
  75. package/src/terraform/project/files/application/scripts/init.ts.template +2 -1
  76. package/src/terraform/project/files/application/src/providers.tf.template +2 -2
  77. package/src/terraform/project/generator.d.ts +11 -1
  78. package/src/terraform/project/generator.js +104 -20
  79. package/src/terraform/project/generator.js.map +1 -1
  80. package/src/trpc/backend/generator.js +2 -2
  81. package/src/trpc/backend/generator.js.map +1 -1
  82. package/src/ts/agent/generator.js +4 -7
  83. package/src/ts/agent/generator.js.map +1 -1
  84. package/src/ts/astro-docs/generator.js +5 -0
  85. package/src/ts/astro-docs/generator.js.map +1 -1
  86. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +0 -30
  87. package/src/ts/dynamodb/generator.js +3 -0
  88. package/src/ts/dynamodb/generator.js.map +1 -1
  89. package/src/ts/lib/__snapshots__/generator.spec.ts.snap +10 -1
  90. package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +1 -1
  91. package/src/ts/lib/generator.d.ts +16 -0
  92. package/src/ts/lib/generator.js +31 -5
  93. package/src/ts/lib/generator.js.map +1 -1
  94. package/src/ts/lib/vitest.d.ts +11 -0
  95. package/src/ts/lib/vitest.js +31 -2
  96. package/src/ts/lib/vitest.js.map +1 -1
  97. package/src/ts/mcp-server/generator.js +4 -7
  98. package/src/ts/mcp-server/generator.js.map +1 -1
  99. package/src/ts/rdb/generator.js +8 -5
  100. package/src/ts/rdb/generator.js.map +1 -1
  101. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +27 -11
  102. package/src/ts/react-website/app/generator.js +9 -1
  103. package/src/ts/react-website/app/generator.js.map +1 -1
  104. package/src/ts/sync/generator.js +19 -2
  105. package/src/ts/sync/generator.js.map +1 -1
  106. package/src/utils/agent-core-constructs/agent-core-constructs.js +3 -3
  107. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  108. package/src/utils/api-constructs/api-constructs.js +2 -2
  109. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  110. package/src/utils/api-constructs/open-api-metadata.js +15 -36
  111. package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
  112. package/src/utils/api-constructs/trpc-operations-metadata.js +9 -3
  113. package/src/utils/api-constructs/trpc-operations-metadata.js.map +1 -1
  114. package/src/utils/bundle/bundle.js +13 -4
  115. package/src/utils/bundle/bundle.js.map +1 -1
  116. package/src/utils/connection/open-api/react.js +7 -17
  117. package/src/utils/connection/open-api/react.js.map +1 -1
  118. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js +2 -2
  119. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js.map +1 -1
  120. package/src/utils/docker.d.ts +22 -10
  121. package/src/utils/docker.js +27 -17
  122. package/src/utils/docker.js.map +1 -1
  123. package/src/utils/dynamodb-constructs/dynamodb-constructs.js +2 -2
  124. package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
  125. package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +0 -15
  126. package/src/utils/files/common/scripts/src/rdb/shared/start-container.ts.template +0 -15
  127. package/src/utils/format.d.ts +5 -0
  128. package/src/utils/format.js +5 -0
  129. package/src/utils/format.js.map +1 -1
  130. package/src/utils/function-constructs/function-constructs.js +2 -2
  131. package/src/utils/function-constructs/function-constructs.js.map +1 -1
  132. package/src/utils/generators.d.ts +33 -0
  133. package/src/utils/generators.js +18 -3
  134. package/src/utils/generators.js.map +1 -1
  135. package/src/utils/init.js +4 -6
  136. package/src/utils/init.js.map +1 -1
  137. package/src/utils/mock-project-graph.js +5 -2
  138. package/src/utils/mock-project-graph.js.map +1 -1
  139. package/src/utils/nx.d.ts +19 -0
  140. package/src/utils/nx.js +23 -0
  141. package/src/utils/nx.js.map +1 -1
  142. package/src/utils/open-api-codegen-target.d.ts +28 -0
  143. package/src/utils/open-api-codegen-target.js +31 -0
  144. package/src/utils/open-api-codegen-target.js.map +1 -0
  145. package/src/utils/rdb-constructs/rdb-constructs.js +2 -2
  146. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  147. package/src/utils/website-constructs/website-constructs.js +2 -2
  148. package/src/utils/website-constructs/website-constructs.js.map +1 -1
package/README.md CHANGED
@@ -77,28 +77,28 @@ pnpm nx g @aws/nx-plugin:ts#infra
77
77
 
78
78
  ## Available Generators
79
79
 
80
- | Generator | Description |
81
- | ----------------------- | ----------------------------------------------------------------------------------------------------------------- |
82
- | `ts#project` | TypeScript library |
83
- | `ts#api` | TypeScript API (tRPC or Smithy) with API Gateway + Lambda + [Powertools](https://github.com/aws-powertools/powertools-lambda-typescript) |
84
- | `ts#rdb` | Relational databases with Aurora RDS |
85
- | `ts#website` | React app (Vite) |
86
- | `ts#website#auth` | Add Cognito auth to a website |
87
- | `ts#infra` | AWS CDK infrastructure project |
88
- | `ts#lambda-function` | TypeScript Lambda with type-safe event sources |
89
- | `ts#mcp-server` | MCP server (TypeScript) |
90
- | `ts#agent` | [Strands Agent](https://strandsagents.com/) (TypeScript) |
91
- | `ts#nx-generator` | Nx generator scaffold |
92
- | `smithy#project` | Smithy model project — a service model, or a shape library shared between Smithy projects |
93
- | `py#project` | Python project (uv) |
94
- | `py#api` | Python API (FastAPI) with API Gateway + Lambda + [Powertools](https://github.com/aws-powertools/powertools-lambda-python) |
95
- | `py#lambda-function` | Python Lambda with type-safe event sources |
96
- | `py#mcp-server` | MCP server (Python) |
97
- | `py#agent` | [Strands Agent](https://strandsagents.com/) (Python) |
98
- | `agentcore-harness` | [AgentCore Harness](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/harness.html) agent loop |
99
- | `connection` | Connect projects together (e.g. frontend to API) |
100
- | `terraform#project` | Terraform project |
101
- | `license` | Manage LICENSE files and source headers |
80
+ | Generator | Description |
81
+ | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
82
+ | `ts#project` | TypeScript library |
83
+ | `ts#api` | TypeScript API (tRPC or Smithy) with API Gateway + Lambda + [Powertools](https://github.com/aws-powertools/powertools-lambda-typescript) |
84
+ | `ts#rdb` | Relational databases with Aurora RDS |
85
+ | `ts#website` | React app (Vite) |
86
+ | `ts#website#auth` | Add Cognito auth to a website |
87
+ | `ts#infra` | AWS CDK infrastructure project |
88
+ | `ts#lambda-function` | TypeScript Lambda with type-safe event sources |
89
+ | `ts#mcp-server` | MCP server (TypeScript) |
90
+ | `ts#agent` | [Strands Agent](https://strandsagents.com/) (TypeScript) |
91
+ | `ts#nx-generator` | Nx generator scaffold |
92
+ | `smithy#project` | Smithy model project — a service model, or a shape library shared between Smithy projects |
93
+ | `py#project` | Python project (uv) |
94
+ | `py#api` | Python API (FastAPI) with API Gateway + Lambda + [Powertools](https://github.com/aws-powertools/powertools-lambda-python) |
95
+ | `py#lambda-function` | Python Lambda with type-safe event sources |
96
+ | `py#mcp-server` | MCP server (Python) |
97
+ | `py#agent` | [Strands Agent](https://strandsagents.com/) (Python) |
98
+ | `agentcore-harness` | [AgentCore Harness](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/harness.html) agent loop (experimental) |
99
+ | `connection` | Connect projects together (e.g. frontend to API) |
100
+ | `terraform#project` | Terraform project |
101
+ | `license` | Manage LICENSE files and source headers |
102
102
 
103
103
  ## Community
104
104
 
package/executors.json CHANGED
@@ -4,6 +4,11 @@
4
4
  "implementation": "./src/license/dependency-check/executor",
5
5
  "schema": "./src/license/dependency-check/executor-schema.json",
6
6
  "description": "Check that all workspace dependencies conform to a license allowlist"
7
+ },
8
+ "open-api-codegen": {
9
+ "implementation": "./src/open-api/codegen/executor",
10
+ "schema": "./src/open-api/codegen/executor-schema.json",
11
+ "description": "Generate a client, hooks or operation metadata from an OpenAPI specification"
7
12
  }
8
13
  }
9
14
  }
package/generators.json CHANGED
@@ -49,7 +49,8 @@
49
49
  "schema": "./src/agentcore-harness/schema.json",
50
50
  "description": "Generate an AgentCore Harness project",
51
51
  "metric": "g71",
52
- "guidePages": ["agentcore-harness"]
52
+ "guidePages": ["agentcore-harness"],
53
+ "experimental": true
53
54
  },
54
55
  "connection": {
55
56
  "factory": "./src/connection/generator",
package/migrations.json CHANGED
@@ -27,6 +27,51 @@
27
27
  "description": "Set nx.json parallel to 8 so full builds use available cores, preserving an existing value",
28
28
  "implementation": "./src/migrations/latest/nx-parallel-default/migration"
29
29
  },
30
+ "latest-dev-target-depends-on-pull-image": {
31
+ "version": "1.0.0-rc.90",
32
+ "description": "Add dependsOn pull-image to the dev target of ts#dynamodb and ts#rdb projects",
33
+ "implementation": "./src/migrations/latest/dev-target-depends-on-pull-image/migration"
34
+ },
35
+ "latest-open-api-codegen-executor": {
36
+ "version": "1.0.0-rc.90",
37
+ "description": "Switch generated OpenAPI codegen targets to the in-process open-api-codegen executor",
38
+ "implementation": "./src/migrations/latest/open-api-codegen-executor/migration"
39
+ },
40
+ "latest-terraform-provider-plugin-cache": {
41
+ "version": "1.0.0-rc.90",
42
+ "description": "Share Terraform provider downloads across terraform init targets via TF_PLUGIN_CACHE_DIR",
43
+ "implementation": "./src/migrations/latest/terraform-provider-plugin-cache/migration"
44
+ },
45
+ "latest-python-test-input-scoping": {
46
+ "version": "1.0.0-rc.90",
47
+ "description": "Exclude Python test files from the production named input and scope dependent task outputs to dist so Python test edits do not invalidate build tasks",
48
+ "implementation": "./src/migrations/latest/python-test-input-scoping/migration"
49
+ },
50
+ "latest-vitest-coverage-output-dir": {
51
+ "version": "1.0.0-rc.90",
52
+ "description": "Write vitest coverage reports to the project's dist directory rather than inside the project",
53
+ "implementation": "./src/migrations/latest/vitest-coverage-output-dir/migration"
54
+ },
55
+ "latest-add-assemble-target": {
56
+ "version": "1.0.0-rc.90",
57
+ "description": "Add an assemble target as the artifact-only sibling of build, point the deploy targets at it, and narrow compile targets depending on ^build to ^compile",
58
+ "implementation": "./src/migrations/latest/add-assemble-target/migration"
59
+ },
60
+ "latest-docker-target-cache-soundness": {
61
+ "version": "1.0.0-rc.90",
62
+ "description": "Make container image build and scan targets non-cacheable, so a cache hit can never report success for an image the container engine no longer has",
63
+ "implementation": "./src/migrations/latest/docker-target-cache-soundness/migration"
64
+ },
65
+ "latest-declare-cacheable-target-inputs": {
66
+ "version": "1.0.0-rc.90",
67
+ "description": "Declare explicit inputs on cacheable bundle, openapi, operations and checkov targets so they no longer read a dependency's whole project directory through Nx's implicit inputs",
68
+ "implementation": "./src/migrations/latest/declare-cacheable-target-inputs/migration"
69
+ },
70
+ "latest-terraform-fmt-check": {
71
+ "version": "1.0.0-rc.90",
72
+ "description": "Make the terraform fmt target check formatting rather than rewrite its own inputs, moving the write to a fix configuration, and add a lint target which orchestrates it",
73
+ "implementation": "./src/migrations/latest/terraform-fmt-check/migration"
74
+ },
30
75
  "v1.0.0-rc.50-0001-modernize-function-props-cast": {
31
76
  "version": "1.0.0-rc.50",
32
77
  "description": "Replace the legacy angle-bracket FunctionProps type assertion with the modern as syntax in generated API constructs",
@@ -243,7 +288,7 @@
243
288
  "implementation": "./src/migrations/v1.0.0-rc.85/0001-terraform-project-checkov-target-and-bootstrap-destroy/migration"
244
289
  },
245
290
  "sync-vended-versions": {
246
- "version": "1.0.0-rc.89",
291
+ "version": "1.0.0-rc.90",
247
292
  "description": "Sync vended dependency versions and the tracked plugin version to those vended by this release",
248
293
  "implementation": "./src/utils/version-upgrade-migration/migration"
249
294
  }
@@ -283,7 +328,7 @@
283
328
  }
284
329
  },
285
330
  "nx-23.1.2-nx-packages": {
286
- "version": "1.0.0-rc.89",
331
+ "version": "1.0.0-rc.90",
287
332
  "packages": {
288
333
  "nx": {
289
334
  "version": "23.1.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws/nx-plugin",
3
- "version": "1.0.0-rc.89",
3
+ "version": "1.0.0-rc.90",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/awslabs/nx-plugin-for-aws.git",
@@ -79,7 +79,7 @@ exports[`infra generator > should configure project.json with correct targets >
79
79
  exports[`infra generator > should configure project.json with correct targets > deploy-target 1`] = `
80
80
  {
81
81
  "dependsOn": [
82
- "^build",
82
+ "^assemble",
83
83
  "compile",
84
84
  ],
85
85
  "executor": "nx:run-commands",
@@ -93,7 +93,7 @@ exports[`infra generator > should configure project.json with correct targets >
93
93
  exports[`infra generator > should configure project.json with correct targets > destroy-target 1`] = `
94
94
  {
95
95
  "dependsOn": [
96
- "^build",
96
+ "^assemble",
97
97
  "compile",
98
98
  ],
99
99
  "executor": "nx:run-commands",
@@ -117,6 +117,12 @@ exports[`infra generator > should configure project.json with correct targets >
117
117
  "sourceRoot": "packages/test/src",
118
118
  "tags": [],
119
119
  "targets": {
120
+ "assemble": {
121
+ "dependsOn": [
122
+ "compile",
123
+ "synth",
124
+ ],
125
+ },
120
126
  "bootstrap": {
121
127
  "executor": "nx:run-commands",
122
128
  "options": {
@@ -168,7 +174,7 @@ exports[`infra generator > should configure project.json with correct targets >
168
174
  },
169
175
  "deploy": {
170
176
  "dependsOn": [
171
- "^build",
177
+ "^assemble",
172
178
  "compile",
173
179
  ],
174
180
  "executor": "nx:run-commands",
@@ -186,7 +192,7 @@ exports[`infra generator > should configure project.json with correct targets >
186
192
  },
187
193
  "deploy-sandbox": {
188
194
  "dependsOn": [
189
- "^build",
195
+ "^assemble",
190
196
  "compile",
191
197
  ],
192
198
  "executor": "nx:run-commands",
@@ -197,7 +203,7 @@ exports[`infra generator > should configure project.json with correct targets >
197
203
  },
198
204
  "destroy": {
199
205
  "dependsOn": [
200
- "^build",
206
+ "^assemble",
201
207
  "compile",
202
208
  ],
203
209
  "executor": "nx:run-commands",
@@ -215,7 +221,7 @@ exports[`infra generator > should configure project.json with correct targets >
215
221
  },
216
222
  "destroy-sandbox": {
217
223
  "dependsOn": [
218
- "^build",
224
+ "^assemble",
219
225
  "compile",
220
226
  ],
221
227
  "executor": "nx:run-commands",
@@ -266,7 +272,7 @@ exports[`infra generator > should configure project.json with correct targets >
266
272
  "synth": {
267
273
  "cache": true,
268
274
  "dependsOn": [
269
- "^build",
275
+ "^assemble",
270
276
  "compile",
271
277
  ],
272
278
  "executor": "nx:run-commands",
@@ -723,6 +729,12 @@ exports[`infra generator > should handle custom project names correctly > custom
723
729
  "sourceRoot": "packages/custom-infra/src",
724
730
  "tags": [],
725
731
  "targets": {
732
+ "assemble": {
733
+ "dependsOn": [
734
+ "compile",
735
+ "synth",
736
+ ],
737
+ },
726
738
  "bootstrap": {
727
739
  "executor": "nx:run-commands",
728
740
  "options": {
@@ -774,7 +786,7 @@ exports[`infra generator > should handle custom project names correctly > custom
774
786
  },
775
787
  "deploy": {
776
788
  "dependsOn": [
777
- "^build",
789
+ "^assemble",
778
790
  "compile",
779
791
  ],
780
792
  "executor": "nx:run-commands",
@@ -792,7 +804,7 @@ exports[`infra generator > should handle custom project names correctly > custom
792
804
  },
793
805
  "deploy-sandbox": {
794
806
  "dependsOn": [
795
- "^build",
807
+ "^assemble",
796
808
  "compile",
797
809
  ],
798
810
  "executor": "nx:run-commands",
@@ -803,7 +815,7 @@ exports[`infra generator > should handle custom project names correctly > custom
803
815
  },
804
816
  "destroy": {
805
817
  "dependsOn": [
806
- "^build",
818
+ "^assemble",
807
819
  "compile",
808
820
  ],
809
821
  "executor": "nx:run-commands",
@@ -821,7 +833,7 @@ exports[`infra generator > should handle custom project names correctly > custom
821
833
  },
822
834
  "destroy-sandbox": {
823
835
  "dependsOn": [
824
- "^build",
836
+ "^assemble",
825
837
  "compile",
826
838
  ],
827
839
  "executor": "nx:run-commands",
@@ -872,7 +884,7 @@ exports[`infra generator > should handle custom project names correctly > custom
872
884
  "synth": {
873
885
  "cache": true,
874
886
  "dependsOn": [
875
- "^build",
887
+ "^assemble",
876
888
  "compile",
877
889
  ],
878
890
  "executor": "nx:run-commands",
@@ -14,7 +14,7 @@ import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
14
14
  import { esmVars } from "../../utils/module-format.js";
15
15
  import { kebabCase } from "../../utils/names.js";
16
16
  import { getNpmScopePrefix } from "../../utils/npm-scope.js";
17
- import { addDependencyToTargetIfNotPresent, addGeneratorMetadata, getGeneratorInfo, projectExists } from "../../utils/nx.js";
17
+ import { addArtifactDependencyToTargets, addDependencyToTargetIfNotPresent, addGeneratorMetadata, getGeneratorInfo, projectExists } from "../../utils/nx.js";
18
18
  import { sortObjectKeys } from "../../utils/object.js";
19
19
  import { getPackageManagerDisplayCommands } from "../../utils/pkg-manager.js";
20
20
  import { uvxCommand } from "../../utils/py.js";
@@ -124,7 +124,9 @@ export async function tsInfraGenerator(tree, schema) {
124
124
  });
125
125
  updateJson(tree, `${libraryRoot}/project.json`, (config)=>{
126
126
  config.projectType = 'application';
127
- addDependencyToTargetIfNotPresent(config, 'build', 'synth');
127
+ // `synth` is the CDK artifact, so it belongs on `assemble` too; `checkov`
128
+ // is a quality gate, so it stays on `build` alone.
129
+ addArtifactDependencyToTargets(config, 'synth');
128
130
  addDependencyToTargetIfNotPresent(config, 'build', 'checkov');
129
131
  config.targets.compile.outputs = [
130
132
  '{workspaceRoot}/dist/{projectRoot}/tsc'
@@ -139,7 +141,7 @@ export async function tsInfraGenerator(tree, schema) {
139
141
  '{workspaceRoot}/dist/{projectRoot}/cdk.out'
140
142
  ],
141
143
  dependsOn: [
142
- '^build',
144
+ '^assemble',
143
145
  'compile'
144
146
  ],
145
147
  options: withCdkEnv({
@@ -166,7 +168,7 @@ export async function tsInfraGenerator(tree, schema) {
166
168
  config.targets.deploy = {
167
169
  executor: 'nx:run-commands',
168
170
  dependsOn: [
169
- '^build',
171
+ '^assemble',
170
172
  'compile'
171
173
  ],
172
174
  options: stageConfig ? withCdkEnv({
@@ -179,7 +181,7 @@ export async function tsInfraGenerator(tree, schema) {
179
181
  config.targets['deploy-sandbox'] = {
180
182
  executor: 'nx:run-commands',
181
183
  dependsOn: [
182
- '^build',
184
+ '^assemble',
183
185
  'compile'
184
186
  ],
185
187
  options: stageConfig ? withCdkEnv({
@@ -199,7 +201,7 @@ export async function tsInfraGenerator(tree, schema) {
199
201
  config.targets.destroy = {
200
202
  executor: 'nx:run-commands',
201
203
  dependsOn: [
202
- '^build',
204
+ '^assemble',
203
205
  'compile'
204
206
  ],
205
207
  options: stageConfig ? withCdkEnv({
@@ -212,7 +214,7 @@ export async function tsInfraGenerator(tree, schema) {
212
214
  config.targets['destroy-sandbox'] = {
213
215
  executor: 'nx:run-commands',
214
216
  dependsOn: [
215
- '^build',
217
+ '^assemble',
216
218
  'compile'
217
219
  ],
218
220
  options: stageConfig ? withCdkEnv({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/infra/app/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n readProjectConfiguration,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport path from 'path';\nimport tsProjectGenerator, { getTsLibDetails } from '../../ts/lib/generator.js';\nimport { mergeTsReferences } from '../../ts/lib/ts-project-utils.js';\nimport { addTsDependencies } from '../../utils/add-dependencies.js';\nimport { resolveContainers } from '../../utils/containers.js';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies.js';\nimport { formatFilesInSubtree } from '../../utils/format.js';\nimport { installDependencies } from '../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics.js';\nimport { esmVars } from '../../utils/module-format.js';\nimport { kebabCase } from '../../utils/names.js';\nimport { getNpmScopePrefix } from '../../utils/npm-scope.js';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx.js';\nimport { sortObjectKeys } from '../../utils/object.js';\nimport { getPackageManagerDisplayCommands } from '../../utils/pkg-manager.js';\nimport { uvxCommand } from '../../utils/py.js';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs.js';\nimport {\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n SHARED_INFRA_CONFIG_DIR,\n} from '../../utils/shared-constructs-constants.js';\nimport { sharedInfraConfigGenerator } from '../../utils/shared-infra-config.js';\nimport {\n SHARED_INFRA_SCRIPTS_DEPENDENCIES,\n sharedInfraScriptsGenerator,\n} from '../../utils/shared-infra-scripts.js';\nimport type { TsInfraGeneratorSchema } from './schema';\n\n// This generator records no metadata, so nothing a predicate could read: the\n// CDK app always needs the app libraries, and the CLI, bundler and tsx are\n// shared tooling.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n { name: 'aws-cdk-lib' },\n { name: 'constructs' },\n { name: 'source-map-support' },\n // The `aws-cdk` CLI, esbuild (CDK bundling) and tsx are shared tooling.\n { name: 'aws-cdk', dev: true, root: true },\n { name: 'esbuild', dev: true, root: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(SHARED_INFRA_SCRIPTS_DEPENDENCIES),\n ],\n});\n\nexport const INFRA_APP_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport async function tsInfraGenerator(\n tree: Tree,\n schema: TsInfraGeneratorSchema,\n): Promise<GeneratorCallback> {\n const lib = getTsLibDetails(tree, schema);\n\n if (!projectExists(tree, lib.fullyQualifiedName)) {\n await tsProjectGenerator(tree, {\n ...schema,\n preferInstallDependencies: false,\n });\n }\n\n // CDK shells out to a container engine to build image assets. Default\n // (docker) needs no env override; finch is set via CDK_DOCKER per\n // https://docs.aws.amazon.com/cdk/v2/guide/build-containers.html#build-container-replace.\n const containers = await resolveContainers(tree, 'inherit');\n const cdkEnv: Record<string, string> | undefined =\n containers === 'docker' ? undefined : { CDK_DOCKER: containers };\n const withCdkEnv = <T extends Record<string, unknown>>(opts: T): T => {\n if (!cdkEnv) return opts;\n const existingEnv = (opts.env as Record<string, string> | undefined) ?? {};\n return { ...opts, env: { ...existingEnv, ...cdkEnv } } as T;\n };\n\n // This generator IS the CDK infrastructure project, so the provider is fixed.\n addGeneratorMetadata(tree, lib.fullyQualifiedName, INFRA_APP_GENERATOR_INFO, {\n iac: 'cdk',\n });\n\n // Shared constructs always in CDK for typescript infra generator\n await sharedConstructsGenerator(\n tree,\n {\n iac: 'cdk',\n },\n DEPENDENCIES,\n );\n\n // Shared infra-config and infra-scripts packages (lazy creation, only when enabled)\n const stageConfig = schema.stageConfig ?? false;\n if (stageConfig) {\n await sharedInfraConfigGenerator(tree);\n await sharedInfraScriptsGenerator(tree, DEPENDENCIES);\n }\n\n const synthDirFromRoot = `/dist/${lib.dir}/cdk.out`;\n const synthDirFromProject =\n lib.dir\n .split('/')\n .map(() => '..')\n .join('/') + `/dist/${lib.dir}/cdk.out`;\n const distDirFromProjectRoot =\n lib.dir\n .split('/')\n .map(() => '..')\n .join('/') + '/dist/{projectRoot}/cdk.out';\n const projectConfig = readProjectConfiguration(tree, lib.fullyQualifiedName);\n const libraryRoot = projectConfig.root;\n const npmScopePrefix = getNpmScopePrefix(tree);\n const scopeAlias = npmScopePrefix;\n const fullyQualifiedName = `${npmScopePrefix}${schema.name}`;\n const namespace = kebabCase(fullyQualifiedName);\n // The stage instantiated in main.ts. Quoted so the shell does not glob `*`.\n const sandboxStagePattern = `\"${namespace}-sandbox/*\"`;\n tree.delete(joinPathFragments(libraryRoot, 'src'));\n\n generateFiles(\n tree, // the virtual file system\n joinPathFragments(import.meta.dirname, './files/app'), // path to the file templates\n libraryRoot, // destination path of the files\n {\n synthDir: synthDirFromProject,\n scopeAlias: scopeAlias,\n namespace,\n fullyQualifiedName,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n dir: lib.dir,\n stageConfig,\n ...schema,\n ...esmVars(tree),\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n updateJson(\n tree,\n `${libraryRoot}/project.json`,\n (config: ProjectConfiguration) => {\n config.projectType = 'application';\n addDependencyToTargetIfNotPresent(config, 'build', 'synth');\n addDependencyToTargetIfNotPresent(config, 'build', 'checkov');\n config.targets.compile.outputs = [\n '{workspaceRoot}/dist/{projectRoot}/tsc',\n ];\n config.targets.synth = {\n cache: true,\n executor: 'nx:run-commands',\n inputs: ['default'],\n outputs: ['{workspaceRoot}/dist/{projectRoot}/cdk.out'],\n dependsOn: ['^build', 'compile'], // compile clobbers dist directory, so ensure synth runs afterwards\n options: withCdkEnv({\n cwd: '{projectRoot}',\n command: 'cdk synth',\n }),\n };\n config.targets.checkov = {\n cache: true,\n executor: 'nx:run-commands',\n inputs: ['{workspaceRoot}/dist/{projectRoot}/cdk.out'],\n outputs: ['{workspaceRoot}/dist/{projectRoot}/checkov'],\n dependsOn: ['synth'],\n options: {\n command: uvxCommand(\n 'checkov',\n '--config-file {projectRoot}/checkov.yml --directory dist/{projectRoot}/cdk.out --framework cloudformation',\n ),\n },\n };\n config.targets.deploy = {\n executor: 'nx:run-commands',\n dependsOn: ['^build', 'compile'],\n options: stageConfig\n ? withCdkEnv({\n command: `tsx packages/common/scripts/src/infra/infra-deploy.ts ${libraryRoot}`,\n })\n : withCdkEnv({\n cwd: '{projectRoot}',\n command: 'cdk deploy --require-approval=never',\n }),\n };\n config.targets['deploy-sandbox'] = {\n executor: 'nx:run-commands',\n dependsOn: ['^build', 'compile'],\n options: stageConfig\n ? withCdkEnv({\n command: `tsx packages/common/scripts/src/infra/infra-deploy.ts ${libraryRoot} ${sandboxStagePattern}`,\n })\n : withCdkEnv({\n cwd: '{projectRoot}',\n command: `cdk deploy --require-approval=never ${sandboxStagePattern}`,\n }),\n };\n config.targets['deploy-ci'] = {\n executor: 'nx:run-commands',\n options: withCdkEnv({\n cwd: '{projectRoot}',\n command: `cdk deploy --require-approval=never --app ${distDirFromProjectRoot}`,\n }),\n };\n config.targets.destroy = {\n executor: 'nx:run-commands',\n dependsOn: ['^build', 'compile'],\n options: stageConfig\n ? withCdkEnv({\n command: `tsx packages/common/scripts/src/infra/infra-destroy.ts ${libraryRoot}`,\n })\n : withCdkEnv({\n cwd: '{projectRoot}',\n command: 'cdk destroy',\n }),\n };\n config.targets['destroy-sandbox'] = {\n executor: 'nx:run-commands',\n dependsOn: ['^build', 'compile'],\n options: stageConfig\n ? withCdkEnv({\n command: `tsx packages/common/scripts/src/infra/infra-destroy.ts ${libraryRoot} ${sandboxStagePattern}`,\n })\n : withCdkEnv({\n cwd: '{projectRoot}',\n command: `cdk destroy ${sandboxStagePattern}`,\n }),\n };\n config.targets['destroy-ci'] = {\n executor: 'nx:run-commands',\n options: withCdkEnv({\n cwd: '{projectRoot}',\n command: `cdk destroy --app ${distDirFromProjectRoot}`,\n }),\n };\n config.targets.cdk = {\n executor: 'nx:run-commands',\n options: withCdkEnv({\n cwd: '{projectRoot}',\n command: 'cdk',\n }),\n };\n config.targets.bootstrap = {\n executor: 'nx:run-commands',\n options: withCdkEnv({\n cwd: '{projectRoot}',\n command: 'cdk bootstrap',\n }),\n };\n config.targets = sortObjectKeys(config.targets);\n return config;\n },\n );\n\n addTsDependencies(tree, DEPENDENCIES, { projectRoot: libraryRoot });\n\n updateJson(tree, `${libraryRoot}/tsconfig.lib.json`, (tsConfig) => ({\n ...tsConfig,\n references: mergeTsReferences(tsConfig.references, [\n {\n path: `${path.relative(\n libraryRoot,\n `${tree.root}/${PACKAGES_DIR}`,\n )}/${SHARED_CONSTRUCTS_DIR}/tsconfig.lib.json`,\n },\n ...(stageConfig\n ? [\n {\n path: `${path.relative(\n libraryRoot,\n `${tree.root}/${PACKAGES_DIR}`,\n )}/${SHARED_INFRA_CONFIG_DIR}/tsconfig.json`,\n },\n ]\n : []),\n ]),\n }));\n\n await addGeneratorMetricsIfApplicable(tree, [INFRA_APP_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\nexport default tsInfraGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","readProjectConfiguration","updateJson","path","tsProjectGenerator","getTsLibDetails","mergeTsReferences","addTsDependencies","resolveContainers","declareDependencies","ownedElsewhere","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","getNpmScopePrefix","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","projectExists","sortObjectKeys","getPackageManagerDisplayCommands","uvxCommand","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","PACKAGES_DIR","SHARED_CONSTRUCTS_DIR","SHARED_INFRA_CONFIG_DIR","sharedInfraConfigGenerator","SHARED_INFRA_SCRIPTS_DEPENDENCIES","sharedInfraScriptsGenerator","DEPENDENCIES","ts","name","dev","root","INFRA_APP_GENERATOR_INFO","filename","tsInfraGenerator","tree","schema","lib","fullyQualifiedName","preferInstallDependencies","containers","cdkEnv","undefined","CDK_DOCKER","withCdkEnv","opts","existingEnv","env","iac","stageConfig","synthDirFromRoot","dir","synthDirFromProject","split","map","join","distDirFromProjectRoot","projectConfig","libraryRoot","npmScopePrefix","scopeAlias","namespace","sandboxStagePattern","delete","dirname","synthDir","pkgMgrCmd","exec","overwriteStrategy","Overwrite","config","projectType","targets","compile","outputs","synth","cache","executor","inputs","dependsOn","options","cwd","command","checkov","deploy","destroy","cdk","bootstrap","projectRoot","tsConfig","references","relative","languages"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/infra/app/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n readProjectConfiguration,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport path from 'path';\nimport tsProjectGenerator, { getTsLibDetails } from '../../ts/lib/generator.js';\nimport { mergeTsReferences } from '../../ts/lib/ts-project-utils.js';\nimport { addTsDependencies } from '../../utils/add-dependencies.js';\nimport { resolveContainers } from '../../utils/containers.js';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies.js';\nimport { formatFilesInSubtree } from '../../utils/format.js';\nimport { installDependencies } from '../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics.js';\nimport { esmVars } from '../../utils/module-format.js';\nimport { kebabCase } from '../../utils/names.js';\nimport { getNpmScopePrefix } from '../../utils/npm-scope.js';\nimport {\n addArtifactDependencyToTargets,\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx.js';\nimport { sortObjectKeys } from '../../utils/object.js';\nimport { getPackageManagerDisplayCommands } from '../../utils/pkg-manager.js';\nimport { uvxCommand } from '../../utils/py.js';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs.js';\nimport {\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n SHARED_INFRA_CONFIG_DIR,\n} from '../../utils/shared-constructs-constants.js';\nimport { sharedInfraConfigGenerator } from '../../utils/shared-infra-config.js';\nimport {\n SHARED_INFRA_SCRIPTS_DEPENDENCIES,\n sharedInfraScriptsGenerator,\n} from '../../utils/shared-infra-scripts.js';\nimport type { TsInfraGeneratorSchema } from './schema';\n\n// This generator records no metadata, so nothing a predicate could read: the\n// CDK app always needs the app libraries, and the CLI, bundler and tsx are\n// shared tooling.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n { name: 'aws-cdk-lib' },\n { name: 'constructs' },\n { name: 'source-map-support' },\n // The `aws-cdk` CLI, esbuild (CDK bundling) and tsx are shared tooling.\n { name: 'aws-cdk', dev: true, root: true },\n { name: 'esbuild', dev: true, root: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(SHARED_INFRA_SCRIPTS_DEPENDENCIES),\n ],\n});\n\nexport const INFRA_APP_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport async function tsInfraGenerator(\n tree: Tree,\n schema: TsInfraGeneratorSchema,\n): Promise<GeneratorCallback> {\n const lib = getTsLibDetails(tree, schema);\n\n if (!projectExists(tree, lib.fullyQualifiedName)) {\n await tsProjectGenerator(tree, {\n ...schema,\n preferInstallDependencies: false,\n });\n }\n\n // CDK shells out to a container engine to build image assets. Default\n // (docker) needs no env override; finch is set via CDK_DOCKER per\n // https://docs.aws.amazon.com/cdk/v2/guide/build-containers.html#build-container-replace.\n const containers = await resolveContainers(tree, 'inherit');\n const cdkEnv: Record<string, string> | undefined =\n containers === 'docker' ? undefined : { CDK_DOCKER: containers };\n const withCdkEnv = <T extends Record<string, unknown>>(opts: T): T => {\n if (!cdkEnv) return opts;\n const existingEnv = (opts.env as Record<string, string> | undefined) ?? {};\n return { ...opts, env: { ...existingEnv, ...cdkEnv } } as T;\n };\n\n // This generator IS the CDK infrastructure project, so the provider is fixed.\n addGeneratorMetadata(tree, lib.fullyQualifiedName, INFRA_APP_GENERATOR_INFO, {\n iac: 'cdk',\n });\n\n // Shared constructs always in CDK for typescript infra generator\n await sharedConstructsGenerator(\n tree,\n {\n iac: 'cdk',\n },\n DEPENDENCIES,\n );\n\n // Shared infra-config and infra-scripts packages (lazy creation, only when enabled)\n const stageConfig = schema.stageConfig ?? false;\n if (stageConfig) {\n await sharedInfraConfigGenerator(tree);\n await sharedInfraScriptsGenerator(tree, DEPENDENCIES);\n }\n\n const synthDirFromRoot = `/dist/${lib.dir}/cdk.out`;\n const synthDirFromProject =\n lib.dir\n .split('/')\n .map(() => '..')\n .join('/') + `/dist/${lib.dir}/cdk.out`;\n const distDirFromProjectRoot =\n lib.dir\n .split('/')\n .map(() => '..')\n .join('/') + '/dist/{projectRoot}/cdk.out';\n const projectConfig = readProjectConfiguration(tree, lib.fullyQualifiedName);\n const libraryRoot = projectConfig.root;\n const npmScopePrefix = getNpmScopePrefix(tree);\n const scopeAlias = npmScopePrefix;\n const fullyQualifiedName = `${npmScopePrefix}${schema.name}`;\n const namespace = kebabCase(fullyQualifiedName);\n // The stage instantiated in main.ts. Quoted so the shell does not glob `*`.\n const sandboxStagePattern = `\"${namespace}-sandbox/*\"`;\n tree.delete(joinPathFragments(libraryRoot, 'src'));\n\n generateFiles(\n tree, // the virtual file system\n joinPathFragments(import.meta.dirname, './files/app'), // path to the file templates\n libraryRoot, // destination path of the files\n {\n synthDir: synthDirFromProject,\n scopeAlias: scopeAlias,\n namespace,\n fullyQualifiedName,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n dir: lib.dir,\n stageConfig,\n ...schema,\n ...esmVars(tree),\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n updateJson(\n tree,\n `${libraryRoot}/project.json`,\n (config: ProjectConfiguration) => {\n config.projectType = 'application';\n // `synth` is the CDK artifact, so it belongs on `assemble` too; `checkov`\n // is a quality gate, so it stays on `build` alone.\n addArtifactDependencyToTargets(config, 'synth');\n addDependencyToTargetIfNotPresent(config, 'build', 'checkov');\n config.targets.compile.outputs = [\n '{workspaceRoot}/dist/{projectRoot}/tsc',\n ];\n config.targets.synth = {\n cache: true,\n executor: 'nx:run-commands',\n inputs: ['default'],\n outputs: ['{workspaceRoot}/dist/{projectRoot}/cdk.out'],\n dependsOn: ['^assemble', 'compile'], // compile clobbers dist directory, so ensure synth runs afterwards\n options: withCdkEnv({\n cwd: '{projectRoot}',\n command: 'cdk synth',\n }),\n };\n config.targets.checkov = {\n cache: true,\n executor: 'nx:run-commands',\n inputs: ['{workspaceRoot}/dist/{projectRoot}/cdk.out'],\n outputs: ['{workspaceRoot}/dist/{projectRoot}/checkov'],\n dependsOn: ['synth'],\n options: {\n command: uvxCommand(\n 'checkov',\n '--config-file {projectRoot}/checkov.yml --directory dist/{projectRoot}/cdk.out --framework cloudformation',\n ),\n },\n };\n config.targets.deploy = {\n executor: 'nx:run-commands',\n dependsOn: ['^assemble', 'compile'],\n options: stageConfig\n ? withCdkEnv({\n command: `tsx packages/common/scripts/src/infra/infra-deploy.ts ${libraryRoot}`,\n })\n : withCdkEnv({\n cwd: '{projectRoot}',\n command: 'cdk deploy --require-approval=never',\n }),\n };\n config.targets['deploy-sandbox'] = {\n executor: 'nx:run-commands',\n dependsOn: ['^assemble', 'compile'],\n options: stageConfig\n ? withCdkEnv({\n command: `tsx packages/common/scripts/src/infra/infra-deploy.ts ${libraryRoot} ${sandboxStagePattern}`,\n })\n : withCdkEnv({\n cwd: '{projectRoot}',\n command: `cdk deploy --require-approval=never ${sandboxStagePattern}`,\n }),\n };\n config.targets['deploy-ci'] = {\n executor: 'nx:run-commands',\n options: withCdkEnv({\n cwd: '{projectRoot}',\n command: `cdk deploy --require-approval=never --app ${distDirFromProjectRoot}`,\n }),\n };\n config.targets.destroy = {\n executor: 'nx:run-commands',\n dependsOn: ['^assemble', 'compile'],\n options: stageConfig\n ? withCdkEnv({\n command: `tsx packages/common/scripts/src/infra/infra-destroy.ts ${libraryRoot}`,\n })\n : withCdkEnv({\n cwd: '{projectRoot}',\n command: 'cdk destroy',\n }),\n };\n config.targets['destroy-sandbox'] = {\n executor: 'nx:run-commands',\n dependsOn: ['^assemble', 'compile'],\n options: stageConfig\n ? withCdkEnv({\n command: `tsx packages/common/scripts/src/infra/infra-destroy.ts ${libraryRoot} ${sandboxStagePattern}`,\n })\n : withCdkEnv({\n cwd: '{projectRoot}',\n command: `cdk destroy ${sandboxStagePattern}`,\n }),\n };\n config.targets['destroy-ci'] = {\n executor: 'nx:run-commands',\n options: withCdkEnv({\n cwd: '{projectRoot}',\n command: `cdk destroy --app ${distDirFromProjectRoot}`,\n }),\n };\n config.targets.cdk = {\n executor: 'nx:run-commands',\n options: withCdkEnv({\n cwd: '{projectRoot}',\n command: 'cdk',\n }),\n };\n config.targets.bootstrap = {\n executor: 'nx:run-commands',\n options: withCdkEnv({\n cwd: '{projectRoot}',\n command: 'cdk bootstrap',\n }),\n };\n config.targets = sortObjectKeys(config.targets);\n return config;\n },\n );\n\n addTsDependencies(tree, DEPENDENCIES, { projectRoot: libraryRoot });\n\n updateJson(tree, `${libraryRoot}/tsconfig.lib.json`, (tsConfig) => ({\n ...tsConfig,\n references: mergeTsReferences(tsConfig.references, [\n {\n path: `${path.relative(\n libraryRoot,\n `${tree.root}/${PACKAGES_DIR}`,\n )}/${SHARED_CONSTRUCTS_DIR}/tsconfig.lib.json`,\n },\n ...(stageConfig\n ? [\n {\n path: `${path.relative(\n libraryRoot,\n `${tree.root}/${PACKAGES_DIR}`,\n )}/${SHARED_INFRA_CONFIG_DIR}/tsconfig.json`,\n },\n ]\n : []),\n ]),\n }));\n\n await addGeneratorMetricsIfApplicable(tree, [INFRA_APP_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\nexport default tsInfraGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","readProjectConfiguration","updateJson","path","tsProjectGenerator","getTsLibDetails","mergeTsReferences","addTsDependencies","resolveContainers","declareDependencies","ownedElsewhere","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","getNpmScopePrefix","addArtifactDependencyToTargets","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","projectExists","sortObjectKeys","getPackageManagerDisplayCommands","uvxCommand","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","PACKAGES_DIR","SHARED_CONSTRUCTS_DIR","SHARED_INFRA_CONFIG_DIR","sharedInfraConfigGenerator","SHARED_INFRA_SCRIPTS_DEPENDENCIES","sharedInfraScriptsGenerator","DEPENDENCIES","ts","name","dev","root","INFRA_APP_GENERATOR_INFO","filename","tsInfraGenerator","tree","schema","lib","fullyQualifiedName","preferInstallDependencies","containers","cdkEnv","undefined","CDK_DOCKER","withCdkEnv","opts","existingEnv","env","iac","stageConfig","synthDirFromRoot","dir","synthDirFromProject","split","map","join","distDirFromProjectRoot","projectConfig","libraryRoot","npmScopePrefix","scopeAlias","namespace","sandboxStagePattern","delete","dirname","synthDir","pkgMgrCmd","exec","overwriteStrategy","Overwrite","config","projectType","targets","compile","outputs","synth","cache","executor","inputs","dependsOn","options","cwd","command","checkov","deploy","destroy","cdk","bootstrap","projectRoot","tsConfig","references","relative","languages"],"mappings":"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"}
@@ -4,6 +4,11 @@
4
4
  */
5
5
  import type { NxGeneratorInfo } from '../utils/generators.js';
6
6
  export { buildNxCommand } from './guide-render.js';
7
+ /**
8
+ * Warn agents that an experimental generator's output may change in a future
9
+ * release without a migration to carry an existing workspace across.
10
+ */
11
+ export declare const renderExperimentalWarning: (generatorId: string) => string;
7
12
  /**
8
13
  * Render summary information about a generator
9
14
  */
@@ -11,6 +11,10 @@ import { evaluatePredicate } from "./option-filter.js";
11
11
  import { filterableOptionsFromSchema } from "./schema-registry.js";
12
12
  // Re-export so existing callers of `generator-info` continue working.
13
13
  export { buildNxCommand } from "./guide-render.js";
14
+ /**
15
+ * Warn agents that an experimental generator's output may change in a future
16
+ * release without a migration to carry an existing workspace across.
17
+ */ export const renderExperimentalWarning = (generatorId)=>`> [!WARNING] Experimental: the \`${generatorId}\` generator's behaviour and generated output may change in a future release without a migration being published to apply the change to an existing workspace.`;
14
18
  /**
15
19
  * Render summary information about a generator
16
20
  */ export const renderGeneratorInfo = (packageManager, info)=>{
@@ -18,7 +22,7 @@ export { buildNxCommand } from "./guide-render.js";
18
22
  return `${info.id}
19
23
 
20
24
  Description: ${info.description}
21
-
25
+ ${info.experimental ? `\n${renderExperimentalWarning(info.id)}\n` : ''}
22
26
  Available Parameters:
23
27
  ${renderSchema(schema)}
24
28
 
@@ -113,7 +117,7 @@ const renderUnsupportedMessage = (info, requested, predicates)=>{
113
117
  return `## ${info.id}
114
118
 
115
119
  > [!WARNING] Unsupported combination: ${requestedDesc}. The \`${info.id}\` generator has no guide variant matching this combination — running it will likely fail.
116
-
120
+ ${info.experimental ? `\n${renderExperimentalWarning(info.id)}\n` : ''}
117
121
  Supported combinations:
118
122
  ${supportedList}
119
123