@aws/nx-plugin 1.0.0-rc.33 → 1.0.0-rc.34

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 (109) hide show
  1. package/LICENSE-THIRD-PARTY +28 -41
  2. package/generators.json +27 -0
  3. package/package.json +6 -6
  4. package/src/connection/generator.js +12 -1
  5. package/src/connection/generator.js.map +1 -1
  6. package/src/connection/supported-connections.d.ts +10 -1
  7. package/src/connection/supported-connections.js +13 -0
  8. package/src/connection/supported-connections.js.map +1 -1
  9. package/src/infra/app/__snapshots__/generator.spec.ts.snap +6 -6
  10. package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +12 -12
  11. package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +74 -10
  12. package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +22 -4
  13. package/src/open-api/ts-client/__snapshots__/generator.duplicate-types.spec.ts.snap +53 -8
  14. package/src/open-api/ts-client/__snapshots__/generator.edge-cases.spec.ts.snap +32 -4
  15. package/src/open-api/ts-client/__snapshots__/generator.fast-api-gaps.spec.ts.snap +736 -0
  16. package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +86 -11
  17. package/src/open-api/ts-client/__snapshots__/generator.multipart.spec.ts.snap +21 -3
  18. package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +2 -2
  19. package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +6 -6
  20. package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +2 -2
  21. package/src/open-api/ts-client/__snapshots__/generator.spec-compliance.spec.ts.snap +1883 -0
  22. package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +4 -4
  23. package/src/open-api/ts-client/files/client.gen.ts.template +195 -12
  24. package/src/open-api/ts-client/files/types.gen.ts.template +2 -0
  25. package/src/open-api/ts-client/generator.js +22 -1
  26. package/src/open-api/ts-client/generator.js.map +1 -1
  27. package/src/open-api/utils/codegen-data/languages.js +6 -0
  28. package/src/open-api/utils/codegen-data/languages.js.map +1 -1
  29. package/src/open-api/utils/codegen-data/types.d.ts +16 -1
  30. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  31. package/src/open-api/utils/codegen-data.js +71 -0
  32. package/src/open-api/utils/codegen-data.js.map +1 -1
  33. package/src/open-api/utils/normalise.js +53 -8
  34. package/src/open-api/utils/normalise.js.map +1 -1
  35. package/src/open-api/utils/parser.js +48 -15
  36. package/src/open-api/utils/parser.js.map +1 -1
  37. package/src/preset/__snapshots__/generator.spec.ts.snap +4 -2
  38. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +1 -1
  39. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2038 -0
  40. package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +104 -0
  41. package/src/py/rdb/agent-connection/generator.d.ts +10 -0
  42. package/src/py/rdb/agent-connection/generator.js +46 -0
  43. package/src/py/rdb/agent-connection/generator.js.map +1 -0
  44. package/src/py/rdb/agent-connection/schema.d.js +8 -0
  45. package/src/py/rdb/agent-connection/schema.d.js.map +1 -0
  46. package/src/py/rdb/agent-connection/schema.d.ts +15 -0
  47. package/src/py/rdb/agent-connection/schema.json +27 -0
  48. package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +44 -0
  49. package/src/py/rdb/fast-api-connection/files/__apiModuleName__/dependencies/__rdbNameSnake__.py.template +14 -0
  50. package/src/py/rdb/fast-api-connection/generator.d.ts +10 -0
  51. package/src/py/rdb/fast-api-connection/generator.js +54 -0
  52. package/src/py/rdb/fast-api-connection/generator.js.map +1 -0
  53. package/src/py/rdb/fast-api-connection/schema.d.js +8 -0
  54. package/src/py/rdb/fast-api-connection/schema.d.js.map +1 -0
  55. package/src/py/rdb/fast-api-connection/schema.d.ts +13 -0
  56. package/src/py/rdb/fast-api-connection/schema.json +23 -0
  57. package/src/py/rdb/files/Dockerfile.create-db-user.template +10 -0
  58. package/src/py/rdb/files/Dockerfile.migration.template +10 -0
  59. package/src/py/rdb/files/__name__/__init__.py.template +3 -0
  60. package/src/py/rdb/files/__name__/connection.py.template +55 -0
  61. package/src/py/rdb/files/__name__/create_db_user_handler.py.template +97 -0
  62. package/src/py/rdb/files/__name__/migration_handler.py.template +36 -0
  63. package/src/py/rdb/files/__name__/models/__init__.py.template +3 -0
  64. package/src/py/rdb/files/__name__/models/example.py.template +8 -0
  65. package/src/py/rdb/files/__name__/utils.py.template +104 -0
  66. package/src/py/rdb/files/alembic.ini.template +38 -0
  67. package/src/py/rdb/files/config.json.template +14 -0
  68. package/src/py/rdb/files/migrations/env.py.template +80 -0
  69. package/src/py/rdb/files/migrations/script.py.mako.template +28 -0
  70. package/src/py/rdb/generator.d.ts +6 -0
  71. package/src/py/rdb/generator.js +263 -0
  72. package/src/py/rdb/generator.js.map +1 -0
  73. package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +101 -0
  74. package/src/py/rdb/mcp-server-connection/generator.d.ts +10 -0
  75. package/src/py/rdb/mcp-server-connection/generator.js +46 -0
  76. package/src/py/rdb/mcp-server-connection/generator.js.map +1 -0
  77. package/src/py/rdb/mcp-server-connection/schema.d.js +8 -0
  78. package/src/py/rdb/mcp-server-connection/schema.d.js.map +1 -0
  79. package/src/py/rdb/mcp-server-connection/schema.d.ts +15 -0
  80. package/src/py/rdb/mcp-server-connection/schema.json +27 -0
  81. package/src/py/rdb/schema.d.js +6 -0
  82. package/src/py/rdb/schema.d.js.map +1 -0
  83. package/src/py/rdb/schema.d.ts +16 -0
  84. package/src/py/rdb/schema.json +77 -0
  85. package/src/py/rdb/utils.d.ts +6 -0
  86. package/src/py/rdb/utils.js +16 -0
  87. package/src/py/rdb/utils.js.map +1 -0
  88. package/src/sdk/py.d.ts +2 -0
  89. package/src/sdk/py.js +1 -0
  90. package/src/sdk/py.js.map +1 -1
  91. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +145 -173
  92. package/src/ts/rdb/generator.js +4 -3
  93. package/src/ts/rdb/generator.js.map +1 -1
  94. package/src/ts/rdb/schema.json +1 -1
  95. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +16 -16
  96. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +58 -14
  97. package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +68 -78
  98. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +88 -8
  99. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +5 -32
  100. package/src/utils/rdb-constructs/rdb-constructs.d.ts +11 -1
  101. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  102. package/src/utils/shared-constructs.js +9 -21
  103. package/src/utils/shared-constructs.js.map +1 -1
  104. package/src/utils/shared-rdb-scripts.js +5 -1
  105. package/src/utils/shared-rdb-scripts.js.map +1 -1
  106. package/src/utils/versions.d.ts +34 -30
  107. package/src/utils/versions.js +34 -30
  108. package/src/utils/versions.js.map +1 -1
  109. package/src/utils/files/terraform/scripts/reset-runtime-config.ts.template +0 -25
@@ -120,16 +120,26 @@ variable "tags" {
120
120
  default = {}
121
121
  }
122
122
 
123
- variable "docker_image_tag" {
123
+ variable "migration_docker_image_tag" {
124
124
  description = "Docker image tag for the migration handler. Defaults to the tag built by the Nx docker target."
125
125
  type = string
126
- default = "<%= dockerImageTag %>"
126
+ default = "<%= migrationDockerImageTag %>"
127
127
  }
128
128
 
129
+ <%_ if (framework === 'sqlmodel') { _%>
130
+ variable "create_db_user_docker_image_tag" {
131
+ description = "Docker image tag for the Python create-db-user handler. Defaults to the tag built by the Nx docker target."
132
+ type = string
133
+ default = "<%= createDbUserDockerImageTag %>"
134
+ }
135
+ <%_ } _%>
136
+
137
+ <%_ if (framework !== 'sqlmodel') { _%>
129
138
  variable "asset_bucket_name" {
130
139
  description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the `core/asset-bucket` module once per deployment and pass its `bucket_name` output here."
131
140
  type = string
132
141
  }
142
+ <%_ } _%>
133
143
 
134
144
  data "aws_region" "current" {}
135
145
  data "aws_caller_identity" "current" {}
@@ -143,7 +153,9 @@ resource "random_string" "suffix" {
143
153
  locals {
144
154
  config = jsondecode(file("${path.module}/../../../../../../../<%= projectRoot %>/config.json"))
145
155
  runtime_config_key = local.config.runtimeConfigKey
156
+ <%_ if (framework !== 'sqlmodel') { _%>
146
157
  create_db_user_bundle_path = "${path.module}/../../../../../../../<%- createDbUserBundleDir %>"
158
+ <%_ } _%>
147
159
  migration_function_name = "<%= nameKebabCase %>-migration-${random_string.suffix.result}"
148
160
  create_db_user_function_name = "<%= nameKebabCase %>-create-db-user-${random_string.suffix.result}"
149
161
  database_runtime_user = "db_${random_string.suffix.result}"
@@ -183,6 +195,22 @@ resource "aws_iam_role_policy" "proxy_db_user_connect" {
183
195
  policy = jsonencode({
184
196
  Version = "2012-10-17"
185
197
  Statement = [
198
+ <%_ if (engine === 'mysql' && framework !== 'sqlmodel') { _%>
199
+ {
200
+ Effect = "Allow"
201
+ Action = [
202
+ "secretsmanager:GetSecretValue"
203
+ ]
204
+ Resource = [module.aurora.secret_arn]
205
+ },
206
+ {
207
+ Effect = "Allow"
208
+ Action = [
209
+ "kms:Decrypt"
210
+ ]
211
+ Resource = [module.aurora.kms_key_arn]
212
+ }
213
+ <%_ } else { _%>
186
214
  {
187
215
  Effect = "Allow"
188
216
  Action = ["rds-db:connect"]
@@ -190,10 +218,12 @@ resource "aws_iam_role_policy" "proxy_db_user_connect" {
190
218
  "arn:aws:rds-db:${data.aws_region.current.region}:${data.aws_caller_identity.current.account_id}:dbuser:${module.aurora.cluster_resource_id}/${local.database_runtime_user}"
191
219
  ]
192
220
  }
221
+ <%_ } _%>
193
222
  ]
194
223
  })
195
224
  }
196
225
 
226
+ <%_ if (framework !== 'sqlmodel') { _%>
197
227
  data "archive_file" "create_db_user_zip" {
198
228
  type = "zip"
199
229
  source_dir = local.create_db_user_bundle_path
@@ -207,6 +237,7 @@ resource "aws_s3_object" "create_db_user_zip" {
207
237
  source_hash = data.archive_file.create_db_user_zip.output_base64sha256
208
238
  etag = data.archive_file.create_db_user_zip.output_md5
209
239
  }
240
+ <%_ } _%>
210
241
 
211
242
  module "add_rdb_to_runtime_config" {
212
243
  source = "../../../core/runtime-config/entry"
@@ -274,33 +305,55 @@ resource "aws_ecr_repository_policy" "migration_handler" {
274
305
  }
275
306
 
276
307
  data "external" "docker_digest" {
277
- program = ["sh", "-c", "echo '{\"digest\":\"'$(<%= containerEngine %> inspect ${var.docker_image_tag} --format '{{.Id}}')'\"}' "]
308
+ program = ["sh", "-c", "echo '{\"digest\":\"'$(<%= containerEngine %> inspect ${var.migration_docker_image_tag} --format '{{.Id}}')'\"}' "]
278
309
  }
279
310
 
280
311
  locals {
281
312
  # Content-based, immutable image tag derived from the local image digest
282
313
  image_tag = replace(data.external.docker_digest.result.digest, "sha256:", "")
283
314
  }
315
+ <%_ if (framework === 'sqlmodel') { _%>
316
+ data "external" "create_db_user_docker_digest" {
317
+ program = ["sh", "-c", "echo '{\"digest\":\"'$(<%= containerEngine %> inspect ${var.create_db_user_docker_image_tag} --format '{{.Id}}')'\"}' "]
318
+ }
319
+
320
+ locals {
321
+ create_db_user_image_tag = replace(data.external.create_db_user_docker_digest.result.digest, "sha256:", "")
322
+ }
323
+ <%_ } _%>
284
324
 
285
325
  resource "null_resource" "docker_publish" {
286
326
  triggers = {
287
327
  docker_digest = data.external.docker_digest.result.digest
288
328
  repository_url = aws_ecr_repository.migration_handler.repository_url
289
- docker_image_tag = var.docker_image_tag
329
+ migration_docker_image_tag = var.migration_docker_image_tag
290
330
  image_tag = local.image_tag
331
+ <%_ if (framework === 'sqlmodel') { _%>
332
+ create_db_user_docker_digest = data.external.create_db_user_docker_digest.result.digest
333
+ create_db_user_docker_image_tag = var.create_db_user_docker_image_tag
334
+ create_db_user_image_tag = local.create_db_user_image_tag
335
+ <%_ } _%>
291
336
  }
292
337
 
293
338
  provisioner "local-exec" {
294
339
  command = <<-EOT
295
340
  aws ecr get-login-password --region "$AWS_REGION" | <%= containerEngine %> login --username AWS --password-stdin "$REPOSITORY_URL"
296
- <%= containerEngine %> tag "$DOCKER_IMAGE_TAG" "$REPOSITORY_URL:$IMAGE_TAG"
341
+ <%= containerEngine %> tag "$MIGRATION_DOCKER_IMAGE_TAG" "$REPOSITORY_URL:$IMAGE_TAG"
297
342
  <%= containerEngine %> push "$REPOSITORY_URL:$IMAGE_TAG"
343
+ <%_ if (framework === 'sqlmodel') { _%>
344
+ <%= containerEngine %> tag "$CREATE_DB_USER_DOCKER_IMAGE_TAG" "$REPOSITORY_URL:create-db-user-$CREATE_DB_USER_IMAGE_TAG"
345
+ <%= containerEngine %> push "$REPOSITORY_URL:create-db-user-$CREATE_DB_USER_IMAGE_TAG"
346
+ <%_ } _%>
298
347
  EOT
299
348
  environment = {
300
349
  AWS_REGION = data.aws_region.current.region
301
350
  REPOSITORY_URL = self.triggers.repository_url
302
- DOCKER_IMAGE_TAG = self.triggers.docker_image_tag
351
+ MIGRATION_DOCKER_IMAGE_TAG = self.triggers.migration_docker_image_tag
303
352
  IMAGE_TAG = self.triggers.image_tag
353
+ <%_ if (framework === 'sqlmodel') { _%>
354
+ CREATE_DB_USER_DOCKER_IMAGE_TAG = self.triggers.create_db_user_docker_image_tag
355
+ CREATE_DB_USER_IMAGE_TAG = self.triggers.create_db_user_image_tag
356
+ <%_ } _%>
304
357
  }
305
358
  }
306
359
 
@@ -512,6 +565,18 @@ resource "aws_lambda_function" "create_db_user" {
512
565
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for the create-db-user handler
513
566
  #checkov:skip=CKV_AWS_173:Lambda environment variables encrypted by managed key
514
567
  #checkov:skip=CKV_AWS_272:Code signing not configured as deployment packages are built and deployed within the same pipeline
568
+ <%_ if (framework === 'sqlmodel') { _%>
569
+ package_type = "Image"
570
+ image_uri = "${aws_ecr_repository.migration_handler.repository_url}:create-db-user-${local.create_db_user_image_tag}"
571
+ function_name = local.create_db_user_function_name
572
+ role = aws_iam_role.create_db_user.arn
573
+ timeout = 300
574
+ architectures = ["arm64"]
575
+
576
+ image_config {
577
+ command = ["<%= databasePackageAlias %>.create_db_user_handler.handler"]
578
+ }
579
+ <%_ } else { _%>
515
580
  s3_bucket = aws_s3_object.create_db_user_zip.bucket
516
581
  s3_key = aws_s3_object.create_db_user_zip.key
517
582
  s3_object_version = aws_s3_object.create_db_user_zip.version_id
@@ -522,6 +587,7 @@ resource "aws_lambda_function" "create_db_user" {
522
587
  runtime = "nodejs24.x"
523
588
  timeout = 300
524
589
  architectures = ["arm64"]
590
+ <%_ } _%>
525
591
 
526
592
  tracing_config {
527
593
  mode = "Active"
@@ -535,14 +601,20 @@ resource "aws_lambda_function" "create_db_user" {
535
601
  environment {
536
602
  variables = {
537
603
  DATABASE_SECRET_ARN = module.aurora.secret_arn
604
+ <%_ if (framework === 'prisma') { _%>
538
605
  NODE_EXTRA_CA_CERTS = "/var/runtime/ca-cert.pem"
606
+ <%_ } _%>
539
607
  }
540
608
  }
541
609
 
542
610
  tags = var.tags
543
611
 
544
612
  depends_on = [
613
+ <%_ if (framework === 'sqlmodel') { _%>
614
+ null_resource.docker_publish,
615
+ <%_ } else { _%>
545
616
  aws_s3_object.create_db_user_zip,
617
+ <%_ } _%>
546
618
  aws_iam_role_policy_attachment.create_db_user_basic_execution,
547
619
  aws_iam_role_policy_attachment.create_db_user_vpc_access,
548
620
  aws_iam_role_policy_attachment.create_db_user_xray,
@@ -557,7 +629,11 @@ resource "null_resource" "create_db_user_trigger" {
557
629
  cluster_arn = module.aurora.cluster_arn
558
630
  function_name = aws_lambda_function.create_db_user.function_name
559
631
  db_user = local.database_runtime_user
632
+ <%_ if (framework === 'sqlmodel') { _%>
633
+ bundle_hash = data.external.create_db_user_docker_digest.result.digest
634
+ <%_ } else { _%>
560
635
  bundle_hash = data.archive_file.create_db_user_zip.output_base64sha256
636
+ <%_ } _%>
561
637
  }
562
638
 
563
639
  provisioner "local-exec" {
@@ -634,7 +710,7 @@ resource "null_resource" "migration_trigger" {
634
710
  cluster_arn = module.aurora.cluster_arn
635
711
  database_ready = module.aurora.database_ready
636
712
  function_name = aws_lambda_function.migration_handler.function_name
637
- <%_ if (engine !== 'mysql') { _%>
713
+ <%_ if (engine !== 'mysql' && framework !== 'sqlmodel') { _%>
638
714
  db_user = local.database_runtime_user
639
715
  <%_ } _%>
640
716
  }
@@ -689,6 +765,11 @@ output "proxy_resource_id" {
689
765
  value = module.aurora.proxy_resource_id
690
766
  }
691
767
 
768
+ output "connect_resource_id" {
769
+ description = "Resource ID to use in IAM rds-db:connect policies for the application database user. Resolves to the RDS Proxy resource ID when the proxy is enabled (the default), or the Aurora cluster resource ID when it is disabled — connecting through the proxy and connecting directly to the cluster are different IAM permission boundaries."
770
+ value = module.aurora.connect_resource_id
771
+ }
772
+
692
773
  output "kms_key_arn" {
693
774
  description = "ARN of the KMS key protecting Aurora and the admin credentials secret, used to grant decrypt access alongside secret_arn."
694
775
  value = module.aurora.kms_key_arn
@@ -723,4 +804,3 @@ output "database_runtime_user" {
723
804
  description = "Application database user created for IAM-authenticated access."
724
805
  value = local.database_runtime_user
725
806
  }
726
-
@@ -454,27 +454,6 @@ resource "aws_iam_role" "proxy" {
454
454
  })
455
455
  }
456
456
 
457
- resource "aws_iam_role_policy" "proxy_secret_access" {
458
- count = var.enable_rds_proxy ? 1 : 0
459
- role = aws_iam_role.proxy[0].name
460
-
461
- policy = jsonencode({
462
- Version = "2012-10-17"
463
- Statement = [
464
- {
465
- Effect = "Allow"
466
- Action = ["secretsmanager:GetSecretValue"]
467
- Resource = [aws_secretsmanager_secret.credentials.arn]
468
- },
469
- {
470
- Effect = "Allow"
471
- Action = ["kms:Decrypt"]
472
- Resource = [aws_kms_key.database.arn]
473
- }
474
- ]
475
- })
476
- }
477
-
478
457
  resource "aws_security_group" "proxy" {
479
458
  #checkov:skip=CKV2_AWS_5:Security group is attached to aws_db_proxy.aurora; Checkov cannot resolve count-conditional cross-resource references
480
459
  count = var.enable_rds_proxy ? 1 : 0
@@ -498,17 +477,6 @@ resource "aws_db_proxy" "aurora" {
498
477
  vpc_subnet_ids = var.subnet_ids
499
478
  vpc_security_group_ids = [aws_security_group.proxy[0].id]
500
479
  require_tls = true
501
-
502
- auth {
503
- auth_scheme = "SECRETS"
504
- iam_auth = "REQUIRED"
505
- secret_arn = aws_secretsmanager_secret.credentials.arn
506
- }
507
-
508
- depends_on = [
509
- aws_iam_role_policy.proxy_secret_access,
510
- aws_secretsmanager_secret_version.credentials,
511
- ]
512
480
  }
513
481
 
514
482
  resource "aws_db_proxy_default_target_group" "default" {
@@ -691,6 +659,11 @@ output "proxy_resource_id" {
691
659
  value = var.enable_rds_proxy ? split(":", aws_db_proxy.aurora[0].arn)[6] : null
692
660
  }
693
661
 
662
+ output "connect_resource_id" {
663
+ description = "Resource ID to use in IAM rds-db:connect policies for the application database user. Resolves to the RDS Proxy resource ID when the proxy is enabled (the default), or the Aurora cluster resource ID when it is disabled — connecting through the proxy and connecting directly to the cluster are different IAM permission boundaries."
664
+ value = var.enable_rds_proxy ? split(":", aws_db_proxy.aurora[0].arn)[6] : aws_rds_cluster.database.cluster_resource_id
665
+ }
666
+
694
667
  output "cluster_endpoint" {
695
668
  description = "Writer endpoint of the Aurora cluster or proxy."
696
669
  value = var.enable_rds_proxy ? aws_db_proxy.aurora[0].endpoint : aws_rds_cluster.database.endpoint
@@ -15,8 +15,18 @@ export interface AddRdbConstructOptions {
15
15
  adminUser: string;
16
16
  engine: 'postgres' | 'mysql';
17
17
  migrationBundleDir: string;
18
+ /**
19
+ * Node.js zip bundle directory for the create-db-user Lambda (ts#rdb).
20
+ * When absent the migration Docker image is reused with the
21
+ * `create_db_user_handler.handler` command (py#rdb).
22
+ */
18
23
  createDbUserBundleDir: string;
19
- dockerImageTag: string;
24
+ /** ORM framework used by the create-db-user Lambda. */
25
+ framework: 'prisma' | 'sqlmodel';
26
+ /** Local Docker tag for the Python create-db-user Lambda image. */
27
+ createDbUserDockerImageTag?: string;
28
+ /** Local Docker tag for the migration Lambda image. */
29
+ migrationDockerImageTag: string;
20
30
  containerEngine: Containers;
21
31
  }
22
32
  export declare const addRdbInfra: (tree: Tree, options: AddRdbConstructOptions & {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/utils/rdb-constructs/rdb-constructs.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport { addStarExport } from '../ast';\nimport type { Containers } from '../containers';\nimport type { Iac } from '../iac';\nimport { esmVars } from '../module-format';\nimport { addDependencyToTargetIfNotPresent } from '../nx';\nimport {\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n SHARED_TERRAFORM_DIR,\n} from '../shared-constructs-constants';\nimport { terraformProviderVersions } from '../versions';\n\nexport interface AddRdbConstructOptions {\n projectName: string;\n projectRoot: string;\n nameClassName: string;\n nameKebabCase: string;\n databasePackageAlias: string;\n databaseName: string;\n adminUser: string;\n engine: 'postgres' | 'mysql';\n migrationBundleDir: string;\n createDbUserBundleDir: string;\n dockerImageTag: string;\n containerEngine: Containers;\n}\n\nexport const addRdbInfra = async (\n tree: Tree,\n options: AddRdbConstructOptions & { iac: Iac },\n) => {\n if (options.iac === 'cdk') {\n await addRdbCdkConstructs(tree, options);\n } else if (options.iac === 'terraform') {\n addRdbTerraformModules(tree, options);\n } else {\n throw new Error(`Unsupported iac ${options.iac}`);\n }\n\n updateJson(\n tree,\n joinPathFragments(\n PACKAGES_DIR,\n options.iac === 'cdk' ? SHARED_CONSTRUCTS_DIR : SHARED_TERRAFORM_DIR,\n 'project.json',\n ),\n (config: ProjectConfiguration) => {\n addDependencyToTargetIfNotPresent(\n config,\n 'build',\n `${options.projectName}:build`,\n );\n return config;\n },\n );\n};\n\nexport const addRdbCdkConstructs = async (\n tree: Tree,\n options: AddRdbConstructOptions,\n) => {\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'cdk', 'core', 'rdb'),\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n 'src',\n 'core',\n 'rdb',\n ),\n { ...options, ...esmVars(tree) },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'cdk', 'app', 'dbs'),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src', 'app', 'dbs'),\n { ...options, ...esmVars(tree) },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n await addStarExport(\n tree,\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n 'src',\n 'core',\n 'index.ts',\n ),\n './rdb/aurora.js',\n );\n await addStarExport(\n tree,\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n 'src',\n 'app',\n 'dbs',\n 'index.ts',\n ),\n `./${options.nameKebabCase}.js`,\n );\n await addStarExport(\n tree,\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n 'src',\n 'app',\n 'index.ts',\n ),\n './dbs/index.js',\n );\n};\n\nexport const addRdbTerraformModules = (\n tree: Tree,\n options: AddRdbConstructOptions,\n) => {\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'terraform', 'core', 'rdb'),\n joinPathFragments(PACKAGES_DIR, SHARED_TERRAFORM_DIR, 'src', 'core', 'rdb'),\n { ...terraformProviderVersions() },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'terraform', 'app', 'dbs'),\n joinPathFragments(PACKAGES_DIR, SHARED_TERRAFORM_DIR, 'src', 'app', 'dbs'),\n { ...options, ...terraformProviderVersions() },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n};\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateJson","addStarExport","esmVars","addDependencyToTargetIfNotPresent","PACKAGES_DIR","SHARED_CONSTRUCTS_DIR","SHARED_TERRAFORM_DIR","terraformProviderVersions","addRdbInfra","tree","options","iac","addRdbCdkConstructs","addRdbTerraformModules","Error","config","projectName","dirname","overwriteStrategy","KeepExisting","nameKebabCase"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAGjBC,UAAU,QACL,aAAa;AACpB,SAASC,aAAa,QAAQ,YAAS;AAGvC,SAASC,OAAO,QAAQ,sBAAmB;AAC3C,SAASC,iCAAiC,QAAQ,WAAQ;AAC1D,SACEC,YAAY,EACZC,qBAAqB,EACrBC,oBAAoB,QACf,oCAAiC;AACxC,SAASC,yBAAyB,QAAQ,iBAAc;AAiBxD,OAAO,MAAMC,cAAc,OACzBC,MACAC;IAEA,IAAIA,QAAQC,GAAG,KAAK,OAAO;QACzB,MAAMC,oBAAoBH,MAAMC;IAClC,OAAO,IAAIA,QAAQC,GAAG,KAAK,aAAa;QACtCE,uBAAuBJ,MAAMC;IAC/B,OAAO;QACL,MAAM,IAAII,MAAM,CAAC,gBAAgB,EAAEJ,QAAQC,GAAG,EAAE;IAClD;IAEAX,WACES,MACAX,kBACEM,cACAM,QAAQC,GAAG,KAAK,QAAQN,wBAAwBC,sBAChD,iBAEF,CAACS;QACCZ,kCACEY,QACA,SACA,GAAGL,QAAQM,WAAW,CAAC,MAAM,CAAC;QAEhC,OAAOD;IACT;AAEJ,EAAE;AAEF,OAAO,MAAMH,sBAAsB,OACjCH,MACAC;IAEAb,cACEY,MACAX,kBAAkB,YAAYmB,OAAO,EAAE,SAAS,OAAO,QAAQ,QAC/DnB,kBACEM,cACAC,uBACA,OACA,QACA,QAEF;QAAE,GAAGK,OAAO;QAAE,GAAGR,QAAQO,KAAK;IAAC,GAC/B;QACES,mBAAmBnB,kBAAkBoB,YAAY;IACnD;IAGFtB,cACEY,MACAX,kBAAkB,YAAYmB,OAAO,EAAE,SAAS,OAAO,OAAO,QAC9DnB,kBAAkBM,cAAcC,uBAAuB,OAAO,OAAO,QACrE;QAAE,GAAGK,OAAO;QAAE,GAAGR,QAAQO,KAAK;IAAC,GAC/B;QACES,mBAAmBnB,kBAAkBoB,YAAY;IACnD;IAGF,MAAMlB,cACJQ,MACAX,kBACEM,cACAC,uBACA,OACA,QACA,aAEF;IAEF,MAAMJ,cACJQ,MACAX,kBACEM,cACAC,uBACA,OACA,OACA,OACA,aAEF,CAAC,EAAE,EAAEK,QAAQU,aAAa,CAAC,GAAG,CAAC;IAEjC,MAAMnB,cACJQ,MACAX,kBACEM,cACAC,uBACA,OACA,OACA,aAEF;AAEJ,EAAE;AAEF,OAAO,MAAMQ,yBAAyB,CACpCJ,MACAC;IAEAb,cACEY,MACAX,kBAAkB,YAAYmB,OAAO,EAAE,SAAS,aAAa,QAAQ,QACrEnB,kBAAkBM,cAAcE,sBAAsB,OAAO,QAAQ,QACrE;QAAE,GAAGC,2BAA2B;IAAC,GACjC;QACEW,mBAAmBnB,kBAAkBoB,YAAY;IACnD;IAGFtB,cACEY,MACAX,kBAAkB,YAAYmB,OAAO,EAAE,SAAS,aAAa,OAAO,QACpEnB,kBAAkBM,cAAcE,sBAAsB,OAAO,OAAO,QACpE;QAAE,GAAGI,OAAO;QAAE,GAAGH,2BAA2B;IAAC,GAC7C;QACEW,mBAAmBnB,kBAAkBoB,YAAY;IACnD;AAEJ,EAAE"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/utils/rdb-constructs/rdb-constructs.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport { addStarExport } from '../ast';\nimport type { Containers } from '../containers';\nimport type { Iac } from '../iac';\nimport { esmVars } from '../module-format';\nimport { addDependencyToTargetIfNotPresent } from '../nx';\nimport {\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n SHARED_TERRAFORM_DIR,\n} from '../shared-constructs-constants';\nimport { terraformProviderVersions } from '../versions';\n\nexport interface AddRdbConstructOptions {\n projectName: string;\n projectRoot: string;\n nameClassName: string;\n nameKebabCase: string;\n databasePackageAlias: string;\n databaseName: string;\n adminUser: string;\n engine: 'postgres' | 'mysql';\n migrationBundleDir: string;\n /**\n * Node.js zip bundle directory for the create-db-user Lambda (ts#rdb).\n * When absent the migration Docker image is reused with the\n * `create_db_user_handler.handler` command (py#rdb).\n */\n createDbUserBundleDir: string;\n /** ORM framework used by the create-db-user Lambda. */\n framework: 'prisma' | 'sqlmodel';\n /** Local Docker tag for the Python create-db-user Lambda image. */\n createDbUserDockerImageTag?: string;\n /** Local Docker tag for the migration Lambda image. */\n migrationDockerImageTag: string;\n containerEngine: Containers;\n}\n\nexport const addRdbInfra = async (\n tree: Tree,\n options: AddRdbConstructOptions & { iac: Iac },\n) => {\n if (options.iac === 'cdk') {\n await addRdbCdkConstructs(tree, options);\n } else if (options.iac === 'terraform') {\n addRdbTerraformModules(tree, options);\n } else {\n throw new Error(`Unsupported iac ${options.iac}`);\n }\n\n updateJson(\n tree,\n joinPathFragments(\n PACKAGES_DIR,\n options.iac === 'cdk' ? SHARED_CONSTRUCTS_DIR : SHARED_TERRAFORM_DIR,\n 'project.json',\n ),\n (config: ProjectConfiguration) => {\n addDependencyToTargetIfNotPresent(\n config,\n 'build',\n `${options.projectName}:build`,\n );\n return config;\n },\n );\n};\n\nexport const addRdbCdkConstructs = async (\n tree: Tree,\n options: AddRdbConstructOptions,\n) => {\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'cdk', 'core', 'rdb'),\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n 'src',\n 'core',\n 'rdb',\n ),\n { ...options, ...esmVars(tree) },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'cdk', 'app', 'dbs'),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src', 'app', 'dbs'),\n { ...options, ...esmVars(tree) },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n await addStarExport(\n tree,\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n 'src',\n 'core',\n 'index.ts',\n ),\n './rdb/aurora.js',\n );\n await addStarExport(\n tree,\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n 'src',\n 'app',\n 'dbs',\n 'index.ts',\n ),\n `./${options.nameKebabCase}.js`,\n );\n await addStarExport(\n tree,\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n 'src',\n 'app',\n 'index.ts',\n ),\n './dbs/index.js',\n );\n};\n\nexport const addRdbTerraformModules = (\n tree: Tree,\n options: AddRdbConstructOptions,\n) => {\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'terraform', 'core', 'rdb'),\n joinPathFragments(PACKAGES_DIR, SHARED_TERRAFORM_DIR, 'src', 'core', 'rdb'),\n { ...terraformProviderVersions() },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'terraform', 'app', 'dbs'),\n joinPathFragments(PACKAGES_DIR, SHARED_TERRAFORM_DIR, 'src', 'app', 'dbs'),\n { ...options, ...terraformProviderVersions() },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n};\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateJson","addStarExport","esmVars","addDependencyToTargetIfNotPresent","PACKAGES_DIR","SHARED_CONSTRUCTS_DIR","SHARED_TERRAFORM_DIR","terraformProviderVersions","addRdbInfra","tree","options","iac","addRdbCdkConstructs","addRdbTerraformModules","Error","config","projectName","dirname","overwriteStrategy","KeepExisting","nameKebabCase"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAGjBC,UAAU,QACL,aAAa;AACpB,SAASC,aAAa,QAAQ,YAAS;AAGvC,SAASC,OAAO,QAAQ,sBAAmB;AAC3C,SAASC,iCAAiC,QAAQ,WAAQ;AAC1D,SACEC,YAAY,EACZC,qBAAqB,EACrBC,oBAAoB,QACf,oCAAiC;AACxC,SAASC,yBAAyB,QAAQ,iBAAc;AA2BxD,OAAO,MAAMC,cAAc,OACzBC,MACAC;IAEA,IAAIA,QAAQC,GAAG,KAAK,OAAO;QACzB,MAAMC,oBAAoBH,MAAMC;IAClC,OAAO,IAAIA,QAAQC,GAAG,KAAK,aAAa;QACtCE,uBAAuBJ,MAAMC;IAC/B,OAAO;QACL,MAAM,IAAII,MAAM,CAAC,gBAAgB,EAAEJ,QAAQC,GAAG,EAAE;IAClD;IAEAX,WACES,MACAX,kBACEM,cACAM,QAAQC,GAAG,KAAK,QAAQN,wBAAwBC,sBAChD,iBAEF,CAACS;QACCZ,kCACEY,QACA,SACA,GAAGL,QAAQM,WAAW,CAAC,MAAM,CAAC;QAEhC,OAAOD;IACT;AAEJ,EAAE;AAEF,OAAO,MAAMH,sBAAsB,OACjCH,MACAC;IAEAb,cACEY,MACAX,kBAAkB,YAAYmB,OAAO,EAAE,SAAS,OAAO,QAAQ,QAC/DnB,kBACEM,cACAC,uBACA,OACA,QACA,QAEF;QAAE,GAAGK,OAAO;QAAE,GAAGR,QAAQO,KAAK;IAAC,GAC/B;QACES,mBAAmBnB,kBAAkBoB,YAAY;IACnD;IAGFtB,cACEY,MACAX,kBAAkB,YAAYmB,OAAO,EAAE,SAAS,OAAO,OAAO,QAC9DnB,kBAAkBM,cAAcC,uBAAuB,OAAO,OAAO,QACrE;QAAE,GAAGK,OAAO;QAAE,GAAGR,QAAQO,KAAK;IAAC,GAC/B;QACES,mBAAmBnB,kBAAkBoB,YAAY;IACnD;IAGF,MAAMlB,cACJQ,MACAX,kBACEM,cACAC,uBACA,OACA,QACA,aAEF;IAEF,MAAMJ,cACJQ,MACAX,kBACEM,cACAC,uBACA,OACA,OACA,OACA,aAEF,CAAC,EAAE,EAAEK,QAAQU,aAAa,CAAC,GAAG,CAAC;IAEjC,MAAMnB,cACJQ,MACAX,kBACEM,cACAC,uBACA,OACA,OACA,aAEF;AAEJ,EAAE;AAEF,OAAO,MAAMQ,yBAAyB,CACpCJ,MACAC;IAEAb,cACEY,MACAX,kBAAkB,YAAYmB,OAAO,EAAE,SAAS,aAAa,QAAQ,QACrEnB,kBAAkBM,cAAcE,sBAAsB,OAAO,QAAQ,QACrE;QAAE,GAAGC,2BAA2B;IAAC,GACjC;QACEW,mBAAmBnB,kBAAkBoB,YAAY;IACnD;IAGFtB,cACEY,MACAX,kBAAkB,YAAYmB,OAAO,EAAE,SAAS,aAAa,OAAO,QACpEnB,kBAAkBM,cAAcE,sBAAsB,OAAO,OAAO,QACpE;QAAE,GAAGI,OAAO;QAAE,GAAGH,2BAA2B;IAAC,GAC7C;QACEW,mBAAmBnB,kBAAkBoB,YAAY;IACnD;AAEJ,EAAE"}
@@ -56,27 +56,18 @@ export async function sharedConstructsGenerator(tree, options) {
56
56
  directory: joinPathFragments(PACKAGES_DIR, 'common'),
57
57
  type: 'library'
58
58
  });
59
- // Add target to reset runtime config as part of the build, ensuring any plan/apply target
60
- // which depends on shared terraform will build runtime-config.json from scratch, meaning no old
61
- // values will remain when resources are removed.
62
- // NB: runtime-config.json starts as an empty object to keep the reader terraform module simple
59
+ // `build` is a no-op orchestration target that produces no files of its
60
+ // own. Terraform writes runtime-config entries into
61
+ // `dist/{projectRoot}/runtime-config` at apply time, and other terraform
62
+ // projects contribute their own entries to the same directory. Without
63
+ // explicit outputs, Nx infers `dist/{projectRoot}` as this target's
64
+ // cached output and, on a cache hit, restores the cached copy over the
65
+ // freshly-applied config — wiping the very values consumers read. Declare
66
+ // no outputs so Nx never treats runtime config as a cacheable artifact.
63
67
  updateJson(tree, joinPathFragments(PACKAGES_DIR, SHARED_TERRAFORM_DIR, 'project.json'), (projectConfig)=>{
64
68
  projectConfig.targets ??= {};
65
- projectConfig.targets['reset-runtime-config'] = {
66
- executor: 'nx:run-commands',
67
- options: {
68
- command: 'tsx scripts/reset-runtime-config.ts',
69
- cwd: '{projectRoot}',
70
- env: {
71
- DIST_DIR: '{workspaceRoot}/dist/{projectRoot}'
72
- }
73
- }
74
- };
75
69
  projectConfig.targets.build ??= {};
76
- projectConfig.targets.build.dependsOn = [
77
- ...(projectConfig.targets.build.dependsOn ?? []).filter((t)=>t !== 'reset-runtime-config'),
78
- 'reset-runtime-config'
79
- ];
70
+ projectConfig.targets.build.outputs = [];
80
71
  return projectConfig;
81
72
  });
82
73
  tree.delete(joinPathFragments(terraformLibPath, 'src', 'main.tf'));
@@ -86,9 +77,6 @@ export async function sharedConstructsGenerator(tree, options) {
86
77
  }, {
87
78
  overwriteStrategy: OverwriteStrategy.KeepExisting
88
79
  });
89
- addDependenciesToPackageJson(tree, {}, withVersions([
90
- 'tsx'
91
- ]));
92
80
  await formatFilesInSubtree(tree);
93
81
  }
94
82
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-constructs.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport terraformProjectGenerator from '../terraform/project/generator';\nimport tsProjectGenerator from '../ts/lib/generator';\nimport { readAwsNxPluginConfig } from './config/utils';\nimport { formatFilesInSubtree } from './format';\nimport type { Iac } from './iac';\nimport { esmVars } from './module-format';\nimport { getNpmScopePrefix, toScopeAlias } from './npm-scope';\nimport { getPackageManagerDisplayCommands } from './pkg-manager';\nimport {\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n SHARED_CONSTRUCTS_NAME,\n SHARED_TERRAFORM_DIR,\n SHARED_TERRAFORM_NAME,\n} from './shared-constructs-constants';\nimport { terraformProviderVersions, withVersions } from './versions';\n\nexport interface SharedConstructsGeneratorOptions {\n iac: Iac;\n}\n\nexport async function sharedConstructsGenerator(\n tree: Tree,\n options: SharedConstructsGeneratorOptions,\n) {\n const { iac } = options;\n const npmScopePrefix = getNpmScopePrefix(tree);\n updateGitignore(tree);\n\n if (iac === 'cdk') {\n if (\n !tree.exists(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'project.json'),\n )\n ) {\n await tsProjectGenerator(tree, {\n name: SHARED_CONSTRUCTS_NAME,\n directory: PACKAGES_DIR,\n subDirectory: SHARED_CONSTRUCTS_DIR,\n });\n tree.delete(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'),\n );\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_CONSTRUCTS_DIR,\n 'src',\n ),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'),\n {\n npmScopePrefix,\n scopeAlias: toScopeAlias(npmScopePrefix),\n tags: (await readAwsNxPluginConfig(tree))?.tags ?? [],\n ...esmVars(tree),\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common', 'readme'),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR),\n {\n fullyQualifiedName: `${npmScopePrefix}${SHARED_CONSTRUCTS_NAME}`,\n name: SHARED_CONSTRUCTS_NAME,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n addDependenciesToPackageJson(\n tree,\n withVersions(['constructs', 'aws-cdk-lib']),\n withVersions(['@types/node']),\n );\n await formatFilesInSubtree(tree);\n }\n }\n\n // Handle Terraform provider\n if (iac === 'terraform') {\n const terraformLibPath = joinPathFragments(\n PACKAGES_DIR,\n SHARED_TERRAFORM_DIR,\n );\n if (!tree.exists(joinPathFragments(terraformLibPath, 'project.json'))) {\n await terraformProjectGenerator(tree, {\n name: SHARED_TERRAFORM_NAME,\n directory: joinPathFragments(PACKAGES_DIR, 'common'),\n type: 'library',\n });\n\n // Add target to reset runtime config as part of the build, ensuring any plan/apply target\n // which depends on shared terraform will build runtime-config.json from scratch, meaning no old\n // values will remain when resources are removed.\n // NB: runtime-config.json starts as an empty object to keep the reader terraform module simple\n updateJson(\n tree,\n joinPathFragments(PACKAGES_DIR, SHARED_TERRAFORM_DIR, 'project.json'),\n (projectConfig: ProjectConfiguration) => {\n projectConfig.targets ??= {};\n projectConfig.targets['reset-runtime-config'] = {\n executor: 'nx:run-commands',\n options: {\n command: 'tsx scripts/reset-runtime-config.ts',\n cwd: '{projectRoot}',\n env: {\n DIST_DIR: '{workspaceRoot}/dist/{projectRoot}',\n },\n },\n };\n projectConfig.targets.build ??= {};\n projectConfig.targets.build.dependsOn = [\n ...(projectConfig.targets.build.dependsOn ?? []).filter(\n (t) => t !== 'reset-runtime-config',\n ),\n 'reset-runtime-config',\n ];\n return projectConfig;\n },\n );\n\n tree.delete(joinPathFragments(terraformLibPath, 'src', 'main.tf'));\n\n // Create the metrics.tf file with empty initial values\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'terraform'),\n terraformLibPath,\n { ...terraformProviderVersions() },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n addDependenciesToPackageJson(tree, {}, withVersions(['tsx']));\n\n await formatFilesInSubtree(tree);\n }\n }\n}\n\nconst updateGitignore = (tree: Tree) => {\n const gitignore = tree.exists('.gitignore')\n ? tree.read('.gitignore', 'utf-8')\n : '';\n const regex = /runtime-config.json/gm;\n const hasRuntimeConfig = regex.test(gitignore ?? '');\n if (hasRuntimeConfig) {\n return;\n }\n tree.write('.gitignore', `${gitignore}\\n\\nruntime-config.json`);\n};\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","updateJson","terraformProjectGenerator","tsProjectGenerator","readAwsNxPluginConfig","formatFilesInSubtree","esmVars","getNpmScopePrefix","toScopeAlias","getPackageManagerDisplayCommands","PACKAGES_DIR","SHARED_CONSTRUCTS_DIR","SHARED_CONSTRUCTS_NAME","SHARED_TERRAFORM_DIR","SHARED_TERRAFORM_NAME","terraformProviderVersions","withVersions","sharedConstructsGenerator","tree","options","iac","npmScopePrefix","updateGitignore","exists","name","directory","subDirectory","delete","dirname","scopeAlias","tags","overwriteStrategy","KeepExisting","fullyQualifiedName","pkgMgrCmd","exec","Overwrite","terraformLibPath","type","projectConfig","targets","executor","command","cwd","env","DIST_DIR","build","dependsOn","filter","t","gitignore","read","regex","hasRuntimeConfig","test","write"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-constructs.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport terraformProjectGenerator from '../terraform/project/generator';\nimport tsProjectGenerator from '../ts/lib/generator';\nimport { readAwsNxPluginConfig } from './config/utils';\nimport { formatFilesInSubtree } from './format';\nimport type { Iac } from './iac';\nimport { esmVars } from './module-format';\nimport { getNpmScopePrefix, toScopeAlias } from './npm-scope';\nimport { getPackageManagerDisplayCommands } from './pkg-manager';\nimport {\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n SHARED_CONSTRUCTS_NAME,\n SHARED_TERRAFORM_DIR,\n SHARED_TERRAFORM_NAME,\n} from './shared-constructs-constants';\nimport { terraformProviderVersions, withVersions } from './versions';\n\nexport interface SharedConstructsGeneratorOptions {\n iac: Iac;\n}\n\nexport async function sharedConstructsGenerator(\n tree: Tree,\n options: SharedConstructsGeneratorOptions,\n) {\n const { iac } = options;\n const npmScopePrefix = getNpmScopePrefix(tree);\n updateGitignore(tree);\n\n if (iac === 'cdk') {\n if (\n !tree.exists(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'project.json'),\n )\n ) {\n await tsProjectGenerator(tree, {\n name: SHARED_CONSTRUCTS_NAME,\n directory: PACKAGES_DIR,\n subDirectory: SHARED_CONSTRUCTS_DIR,\n });\n tree.delete(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'),\n );\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_CONSTRUCTS_DIR,\n 'src',\n ),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'),\n {\n npmScopePrefix,\n scopeAlias: toScopeAlias(npmScopePrefix),\n tags: (await readAwsNxPluginConfig(tree))?.tags ?? [],\n ...esmVars(tree),\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common', 'readme'),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR),\n {\n fullyQualifiedName: `${npmScopePrefix}${SHARED_CONSTRUCTS_NAME}`,\n name: SHARED_CONSTRUCTS_NAME,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n addDependenciesToPackageJson(\n tree,\n withVersions(['constructs', 'aws-cdk-lib']),\n withVersions(['@types/node']),\n );\n await formatFilesInSubtree(tree);\n }\n }\n\n // Handle Terraform provider\n if (iac === 'terraform') {\n const terraformLibPath = joinPathFragments(\n PACKAGES_DIR,\n SHARED_TERRAFORM_DIR,\n );\n if (!tree.exists(joinPathFragments(terraformLibPath, 'project.json'))) {\n await terraformProjectGenerator(tree, {\n name: SHARED_TERRAFORM_NAME,\n directory: joinPathFragments(PACKAGES_DIR, 'common'),\n type: 'library',\n });\n\n // `build` is a no-op orchestration target that produces no files of its\n // own. Terraform writes runtime-config entries into\n // `dist/{projectRoot}/runtime-config` at apply time, and other terraform\n // projects contribute their own entries to the same directory. Without\n // explicit outputs, Nx infers `dist/{projectRoot}` as this target's\n // cached output and, on a cache hit, restores the cached copy over the\n // freshly-applied config — wiping the very values consumers read. Declare\n // no outputs so Nx never treats runtime config as a cacheable artifact.\n updateJson(\n tree,\n joinPathFragments(PACKAGES_DIR, SHARED_TERRAFORM_DIR, 'project.json'),\n (projectConfig: ProjectConfiguration) => {\n projectConfig.targets ??= {};\n projectConfig.targets.build ??= {};\n projectConfig.targets.build.outputs = [];\n return projectConfig;\n },\n );\n\n tree.delete(joinPathFragments(terraformLibPath, 'src', 'main.tf'));\n\n // Create the metrics.tf file with empty initial values\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'terraform'),\n terraformLibPath,\n { ...terraformProviderVersions() },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n await formatFilesInSubtree(tree);\n }\n }\n}\n\nconst updateGitignore = (tree: Tree) => {\n const gitignore = tree.exists('.gitignore')\n ? tree.read('.gitignore', 'utf-8')\n : '';\n const regex = /runtime-config.json/gm;\n const hasRuntimeConfig = regex.test(gitignore ?? '');\n if (hasRuntimeConfig) {\n return;\n }\n tree.write('.gitignore', `${gitignore}\\n\\nruntime-config.json`);\n};\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","updateJson","terraformProjectGenerator","tsProjectGenerator","readAwsNxPluginConfig","formatFilesInSubtree","esmVars","getNpmScopePrefix","toScopeAlias","getPackageManagerDisplayCommands","PACKAGES_DIR","SHARED_CONSTRUCTS_DIR","SHARED_CONSTRUCTS_NAME","SHARED_TERRAFORM_DIR","SHARED_TERRAFORM_NAME","terraformProviderVersions","withVersions","sharedConstructsGenerator","tree","options","iac","npmScopePrefix","updateGitignore","exists","name","directory","subDirectory","delete","dirname","scopeAlias","tags","overwriteStrategy","KeepExisting","fullyQualifiedName","pkgMgrCmd","exec","Overwrite","terraformLibPath","type","projectConfig","targets","build","outputs","gitignore","read","regex","hasRuntimeConfig","test","write"],"mappings":"AAAA;;;CAGC,GACD,SACEA,4BAA4B,EAC5BC,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAGjBC,UAAU,QACL,aAAa;AACpB,OAAOC,+BAA+B,oCAAiC;AACvE,OAAOC,wBAAwB,yBAAsB;AACrD,SAASC,qBAAqB,QAAQ,oBAAiB;AACvD,SAASC,oBAAoB,QAAQ,cAAW;AAEhD,SAASC,OAAO,QAAQ,qBAAkB;AAC1C,SAASC,iBAAiB,EAAEC,YAAY,QAAQ,iBAAc;AAC9D,SAASC,gCAAgC,QAAQ,mBAAgB;AACjE,SACEC,YAAY,EACZC,qBAAqB,EACrBC,sBAAsB,EACtBC,oBAAoB,EACpBC,qBAAqB,QAChB,mCAAgC;AACvC,SAASC,yBAAyB,EAAEC,YAAY,QAAQ,gBAAa;AAMrE,OAAO,eAAeC,0BACpBC,IAAU,EACVC,OAAyC;IAEzC,MAAM,EAAEC,GAAG,EAAE,GAAGD;IAChB,MAAME,iBAAiBd,kBAAkBW;IACzCI,gBAAgBJ;IAEhB,IAAIE,QAAQ,OAAO;QACjB,IACE,CAACF,KAAKK,MAAM,CACVxB,kBAAkBW,cAAcC,uBAAuB,kBAEzD;YACA,MAAMR,mBAAmBe,MAAM;gBAC7BM,MAAMZ;gBACNa,WAAWf;gBACXgB,cAAcf;YAChB;YACAO,KAAKS,MAAM,CACT5B,kBAAkBW,cAAcC,uBAAuB;YAEzDb,cACEoB,MACAnB,kBACE,YAAY6B,OAAO,EACnB,SACAjB,uBACA,QAEFZ,kBAAkBW,cAAcC,uBAAuB,QACvD;gBACEU;gBACAQ,YAAYrB,aAAaa;gBACzBS,MAAM,AAAC,CAAA,MAAM1B,sBAAsBc,KAAI,GAAIY,QAAQ,EAAE;gBACrD,GAAGxB,QAAQY,KAAK;YAClB,GACA;gBACEa,mBAAmB/B,kBAAkBgC,YAAY;YACnD;YAEFlC,cACEoB,MACAnB,kBAAkB,YAAY6B,OAAO,EAAE,SAAS,UAAU,WAC1D7B,kBAAkBW,cAAcC,wBAChC;gBACEsB,oBAAoB,GAAGZ,iBAAiBT,wBAAwB;gBAChEY,MAAMZ;gBACNsB,WAAWzB,mCAAmC0B,IAAI;YACpD,GACA;gBACEJ,mBAAmB/B,kBAAkBoC,SAAS;YAChD;YAEFvC,6BACEqB,MACAF,aAAa;gBAAC;gBAAc;aAAc,GAC1CA,aAAa;gBAAC;aAAc;YAE9B,MAAMX,qBAAqBa;QAC7B;IACF;IAEA,4BAA4B;IAC5B,IAAIE,QAAQ,aAAa;QACvB,MAAMiB,mBAAmBtC,kBACvBW,cACAG;QAEF,IAAI,CAACK,KAAKK,MAAM,CAACxB,kBAAkBsC,kBAAkB,kBAAkB;YACrE,MAAMnC,0BAA0BgB,MAAM;gBACpCM,MAAMV;gBACNW,WAAW1B,kBAAkBW,cAAc;gBAC3C4B,MAAM;YACR;YAEA,wEAAwE;YACxE,oDAAoD;YACpD,yEAAyE;YACzE,uEAAuE;YACvE,oEAAoE;YACpE,uEAAuE;YACvE,0EAA0E;YAC1E,wEAAwE;YACxErC,WACEiB,MACAnB,kBAAkBW,cAAcG,sBAAsB,iBACtD,CAAC0B;gBACCA,cAAcC,OAAO,KAAK,CAAC;gBAC3BD,cAAcC,OAAO,CAACC,KAAK,KAAK,CAAC;gBACjCF,cAAcC,OAAO,CAACC,KAAK,CAACC,OAAO,GAAG,EAAE;gBACxC,OAAOH;YACT;YAGFrB,KAAKS,MAAM,CAAC5B,kBAAkBsC,kBAAkB,OAAO;YAEvD,uDAAuD;YACvDvC,cACEoB,MACAnB,kBAAkB,YAAY6B,OAAO,EAAE,SAAS,cAChDS,kBACA;gBAAE,GAAGtB,2BAA2B;YAAC,GACjC;gBACEgB,mBAAmB/B,kBAAkBgC,YAAY;YACnD;YAGF,MAAM3B,qBAAqBa;QAC7B;IACF;AACF;AAEA,MAAMI,kBAAkB,CAACJ;IACvB,MAAMyB,YAAYzB,KAAKK,MAAM,CAAC,gBAC1BL,KAAK0B,IAAI,CAAC,cAAc,WACxB;IACJ,MAAMC,QAAQ;IACd,MAAMC,mBAAmBD,MAAME,IAAI,CAACJ,aAAa;IACjD,IAAIG,kBAAkB;QACpB;IACF;IACA5B,KAAK8B,KAAK,CAAC,cAAc,GAAGL,UAAU,uBAAuB,CAAC;AAChE"}
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
- */ import { generateFiles, joinPathFragments, OverwriteStrategy } from "@nx/devkit";
4
+ */ import { addDependenciesToPackageJson, generateFiles, joinPathFragments, OverwriteStrategy } from "@nx/devkit";
5
5
  import { PACKAGES_DIR, SHARED_SCRIPTS_DIR } from "./shared-constructs-constants.js";
6
6
  import { ensureSharedScriptsProject } from "./shared-scripts.js";
7
+ import { withVersions } from "./versions.js";
7
8
  /**
8
9
  * Ensures the shared scripts package exists and adds RDB local-dev scripts
9
10
  * to packages/common/scripts/src/rdb/. Used by ts#rdb.
@@ -23,6 +24,9 @@ import { ensureSharedScriptsProject } from "./shared-scripts.js";
23
24
  generateFiles(tree, joinPathFragments(rdbScriptsDir, engine), targetDir, {}, {
24
25
  overwriteStrategy: OverwriteStrategy.KeepExisting
25
26
  });
27
+ addDependenciesToPackageJson(tree, {}, withVersions([
28
+ 'tsx'
29
+ ]));
26
30
  }
27
31
 
28
32
  //# sourceMappingURL=shared-rdb-scripts.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-rdb-scripts.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n} from '@nx/devkit';\nimport {\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from './shared-constructs-constants';\nimport { ensureSharedScriptsProject } from './shared-scripts';\n\n/**\n * Ensures the shared scripts package exists and adds RDB local-dev scripts\n * to packages/common/scripts/src/rdb/. Used by ts#rdb.\n *\n * Engine-agnostic scripts (pull-image, start-container) are always vended.\n * Only the wait-for-db script for the requested engine is vended so that\n * projects do not reference database client packages they don't install.\n * The engine-specific file names allow postgres and mysql projects to\n * coexist in the same workspace.\n */\nexport async function sharedRdbScriptsGenerator(\n tree: Tree,\n engine: 'postgres' | 'mysql',\n): Promise<void> {\n await ensureSharedScriptsProject(tree);\n\n const rdbScriptsDir = joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_SCRIPTS_DIR,\n 'src',\n 'rdb',\n );\n const targetDir = joinPathFragments(\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n 'src',\n 'rdb',\n );\n\n generateFiles(\n tree,\n joinPathFragments(rdbScriptsDir, 'shared'),\n targetDir,\n {},\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n generateFiles(\n tree,\n joinPathFragments(rdbScriptsDir, engine),\n targetDir,\n {},\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n}\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","PACKAGES_DIR","SHARED_SCRIPTS_DIR","ensureSharedScriptsProject","sharedRdbScriptsGenerator","tree","engine","rdbScriptsDir","dirname","targetDir","overwriteStrategy","KeepExisting"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,QAEZ,aAAa;AACpB,SACEC,YAAY,EACZC,kBAAkB,QACb,mCAAgC;AACvC,SAASC,0BAA0B,QAAQ,sBAAmB;AAE9D;;;;;;;;;CASC,GACD,OAAO,eAAeC,0BACpBC,IAAU,EACVC,MAA4B;IAE5B,MAAMH,2BAA2BE;IAEjC,MAAME,gBAAgBR,kBACpB,YAAYS,OAAO,EACnB,SACAN,oBACA,OACA;IAEF,MAAMO,YAAYV,kBAChBE,cACAC,oBACA,OACA;IAGFJ,cACEO,MACAN,kBAAkBQ,eAAe,WACjCE,WACA,CAAC,GACD;QAAEC,mBAAmBV,kBAAkBW,YAAY;IAAC;IAEtDb,cACEO,MACAN,kBAAkBQ,eAAeD,SACjCG,WACA,CAAC,GACD;QAAEC,mBAAmBV,kBAAkBW,YAAY;IAAC;AAExD"}
1
+ {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-rdb-scripts.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n} from '@nx/devkit';\nimport {\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from './shared-constructs-constants';\nimport { ensureSharedScriptsProject } from './shared-scripts';\nimport { withVersions } from './versions';\n\n/**\n * Ensures the shared scripts package exists and adds RDB local-dev scripts\n * to packages/common/scripts/src/rdb/. Used by ts#rdb.\n *\n * Engine-agnostic scripts (pull-image, start-container) are always vended.\n * Only the wait-for-db script for the requested engine is vended so that\n * projects do not reference database client packages they don't install.\n * The engine-specific file names allow postgres and mysql projects to\n * coexist in the same workspace.\n */\nexport async function sharedRdbScriptsGenerator(\n tree: Tree,\n engine: 'postgres' | 'mysql',\n): Promise<void> {\n await ensureSharedScriptsProject(tree);\n\n const rdbScriptsDir = joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_SCRIPTS_DIR,\n 'src',\n 'rdb',\n );\n const targetDir = joinPathFragments(\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n 'src',\n 'rdb',\n );\n\n generateFiles(\n tree,\n joinPathFragments(rdbScriptsDir, 'shared'),\n targetDir,\n {},\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n generateFiles(\n tree,\n joinPathFragments(rdbScriptsDir, engine),\n targetDir,\n {},\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n addDependenciesToPackageJson(tree, {}, withVersions(['tsx']));\n}\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","PACKAGES_DIR","SHARED_SCRIPTS_DIR","ensureSharedScriptsProject","withVersions","sharedRdbScriptsGenerator","tree","engine","rdbScriptsDir","dirname","targetDir","overwriteStrategy","KeepExisting"],"mappings":"AAAA;;;CAGC,GACD,SACEA,4BAA4B,EAC5BC,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,QAEZ,aAAa;AACpB,SACEC,YAAY,EACZC,kBAAkB,QACb,mCAAgC;AACvC,SAASC,0BAA0B,QAAQ,sBAAmB;AAC9D,SAASC,YAAY,QAAQ,gBAAa;AAE1C;;;;;;;;;CASC,GACD,OAAO,eAAeC,0BACpBC,IAAU,EACVC,MAA4B;IAE5B,MAAMJ,2BAA2BG;IAEjC,MAAME,gBAAgBT,kBACpB,YAAYU,OAAO,EACnB,SACAP,oBACA,OACA;IAEF,MAAMQ,YAAYX,kBAChBE,cACAC,oBACA,OACA;IAGFJ,cACEQ,MACAP,kBAAkBS,eAAe,WACjCE,WACA,CAAC,GACD;QAAEC,mBAAmBX,kBAAkBY,YAAY;IAAC;IAEtDd,cACEQ,MACAP,kBAAkBS,eAAeD,SACjCG,WACA,CAAC,GACD;QAAEC,mBAAmBX,kBAAkBY,YAAY;IAAC;IAGtDf,6BAA6BS,MAAM,CAAC,GAAGF,aAAa;QAAC;KAAM;AAC7D"}
@@ -8,32 +8,32 @@
8
8
  export declare const TS_VERSIONS: {
9
9
  readonly '@a2a-js/sdk': "0.3.14";
10
10
  readonly '@aws/aws-distro-opentelemetry-node-autoinstrumentation': "0.12.0";
11
- readonly '@aws-sdk/client-dynamodb': "3.1084.0";
12
- readonly '@aws-sdk/client-bedrock-runtime': "3.1084.0";
13
- readonly '@aws-sdk/client-s3': "3.1084.0";
14
- readonly '@aws-sdk/client-sts': "3.1084.0";
15
- readonly '@aws-sdk/credential-providers': "3.1084.0";
11
+ readonly '@aws-sdk/client-dynamodb': "3.1085.0";
12
+ readonly '@aws-sdk/client-bedrock-runtime': "3.1085.0";
13
+ readonly '@aws-sdk/client-s3': "3.1085.0";
14
+ readonly '@aws-sdk/client-sts': "3.1085.0";
15
+ readonly '@aws-sdk/credential-providers': "3.1085.0";
16
16
  readonly '@aws-sdk/credential-provider-cognito-identity': "3.972.56";
17
- readonly '@aws-sdk/client-secrets-manager': "3.1084.0";
18
- readonly '@aws-sdk/rds-signer': "3.1084.0";
17
+ readonly '@aws-sdk/client-secrets-manager': "3.1085.0";
18
+ readonly '@aws-sdk/rds-signer': "3.1085.0";
19
19
  readonly '@aws-smithy/server-apigateway': "1.0.0-alpha.10";
20
20
  readonly '@aws-smithy/server-node': "1.0.0-alpha.10";
21
- readonly '@aws-lambda-powertools/logger': "2.33.1";
22
- readonly '@aws-lambda-powertools/metrics': "2.33.1";
23
- readonly '@aws-lambda-powertools/parameters': "2.33.1";
24
- readonly '@aws-lambda-powertools/tracer': "2.33.1";
25
- readonly '@aws-lambda-powertools/parser': "2.33.1";
26
- readonly '@aws-sdk/client-appconfigdata': "3.1084.0";
21
+ readonly '@aws-lambda-powertools/logger': "2.34.0";
22
+ readonly '@aws-lambda-powertools/metrics': "2.34.0";
23
+ readonly '@aws-lambda-powertools/parameters': "2.34.0";
24
+ readonly '@aws-lambda-powertools/tracer': "2.34.0";
25
+ readonly '@aws-lambda-powertools/parser': "2.34.0";
26
+ readonly '@aws-sdk/client-appconfigdata': "3.1085.0";
27
27
  readonly '@middy/core': "7.7.0";
28
28
  readonly '@nxlv/python': "22.2.1";
29
29
  readonly '@nx-extend/terraform': "10.3.0";
30
- readonly '@nx/devkit': "23.0.1";
31
- readonly '@nx/react': "23.0.1";
32
- readonly 'create-nx-workspace': "23.0.1";
30
+ readonly '@nx/devkit': "23.0.2";
31
+ readonly '@nx/react': "23.0.2";
32
+ readonly 'create-nx-workspace': "23.0.2";
33
33
  readonly '@swc-node/register': "1.11.1";
34
34
  readonly '@swc/core': "1.15.43";
35
35
  readonly '@modelcontextprotocol/sdk': "1.29.0";
36
- readonly '@modelcontextprotocol/inspector': "0.19.0";
36
+ readonly '@modelcontextprotocol/inspector': "0.22.0";
37
37
  readonly '@ag-ui/aws-strands': "0.2.3";
38
38
  readonly '@ag-ui/client': "0.0.57";
39
39
  readonly '@ag-ui/core': "0.0.57";
@@ -41,15 +41,15 @@ export declare const TS_VERSIONS: {
41
41
  readonly 'agent-chat-cli': "0.3.0";
42
42
  readonly '@copilotkit/react-core': "1.62.3";
43
43
  readonly rxjs: "7.8.2";
44
- readonly '@strands-agents/sdk': "1.8.0";
44
+ readonly '@strands-agents/sdk': "1.9.0";
45
45
  readonly '@tanstack/react-router': "1.170.17";
46
46
  readonly '@tanstack/router-plugin': "1.168.19";
47
47
  readonly '@tanstack/router-generator': "1.167.18";
48
48
  readonly '@tanstack/virtual-file-routes': "1.162.0";
49
49
  readonly '@tanstack/router-utils': "1.162.2";
50
- readonly '@cloudscape-design/board-components': "3.0.200";
51
- readonly '@cloudscape-design/chat-components': "1.0.148";
52
- readonly '@cloudscape-design/components': "3.0.1324";
50
+ readonly '@cloudscape-design/board-components': "3.0.201";
51
+ readonly '@cloudscape-design/chat-components': "1.0.149";
52
+ readonly '@cloudscape-design/components': "3.0.1325";
53
53
  readonly '@cloudscape-design/global-styles': "1.0.62";
54
54
  readonly '@tanstack/react-query': "5.101.2";
55
55
  readonly '@tanstack/react-query-devtools': "5.101.2";
@@ -62,17 +62,17 @@ export declare const TS_VERSIONS: {
62
62
  readonly '@types/pg': "8.20.0";
63
63
  readonly '@types/ws': "8.18.1";
64
64
  readonly '@types/express': "5.0.6";
65
- readonly '@smithy/config-resolver': "4.6.7";
66
- readonly '@smithy/node-config-provider': "4.5.7";
67
- readonly '@smithy/node-http-handler': "4.9.4";
68
- readonly '@smithy/types': "4.16.0";
65
+ readonly '@smithy/config-resolver': "4.6.8";
66
+ readonly '@smithy/node-config-provider': "4.5.8";
67
+ readonly '@smithy/node-http-handler': "4.9.5";
68
+ readonly '@smithy/types': "4.16.1";
69
69
  readonly '@vitest/coverage-v8': "4.1.10";
70
70
  readonly '@vitest/ui': "4.1.10";
71
71
  readonly '@astrojs/react': "6.0.1";
72
72
  readonly '@astrojs/starlight': "0.41.3";
73
73
  readonly astro: "7.0.7";
74
74
  readonly aws4fetch: "1.0.20";
75
- readonly 'aws-cdk': "2.1129.0";
75
+ readonly 'aws-cdk': "2.1130.0";
76
76
  readonly 'aws-cdk-lib': "2.261.0";
77
77
  readonly 'aws-xray-sdk-core': "3.12.0";
78
78
  readonly constructs: "10.6.0";
@@ -110,7 +110,7 @@ export declare const TS_VERSIONS: {
110
110
  readonly rolldown: "1.1.5";
111
111
  readonly 'simple-git': "3.36.0";
112
112
  readonly 'source-map-support': "0.5.21";
113
- readonly 'starlight-blog': "0.27.0";
113
+ readonly 'starlight-blog': "0.28.0";
114
114
  readonly tailwindcss: "4.3.2";
115
115
  readonly '@tailwindcss/vite': "4.3.2";
116
116
  readonly tsx: "4.23.0";
@@ -130,7 +130,7 @@ export type ITsDepVersion = keyof typeof TS_VERSIONS;
130
130
  * Add versions to the given dependencies
131
131
  */
132
132
  export declare const withVersions: (deps: ITsDepVersion[]) => {
133
- [k: string]: "0.3.14" | "0.12.0" | "3.1084.0" | "3.972.56" | "1.0.0-alpha.10" | "2.33.1" | "7.7.0" | "22.2.1" | "10.3.0" | "23.0.1" | "1.11.1" | "1.15.43" | "1.29.0" | "0.19.0" | "0.2.3" | "0.0.57" | "0.3.0" | "1.62.3" | "7.8.2" | "1.8.0" | "1.170.17" | "1.168.19" | "1.167.18" | "1.162.0" | "1.162.2" | "3.0.200" | "1.0.148" | "3.0.1324" | "1.0.62" | "5.101.2" | "11.18.0" | "26.1.1" | "8.10.162" | "2.8.19" | "8.20.0" | "8.18.1" | "5.0.6" | "4.6.7" | "4.5.7" | "4.9.4" | "4.16.0" | "4.1.10" | "6.0.1" | "0.41.3" | "7.0.7" | "1.0.20" | "2.1129.0" | "2.261.0" | "3.12.0" | "10.6.0" | "2.8.6" | "5.6.2" | "0.7.1" | "2.1.1" | "15.0.0" | "3.9.1" | "0.28.1" | "1.0.31" | "1.0.5" | "2.5.3" | "7.8.0" | "3.1.5" | "5.2.1" | "3.3.3" | "9.1.7" | "11.3.6" | "11.0.4" | "4.0.0" | "3.5.3" | "2.0.0" | "22.2.9" | "3.5.0" | "8.22.0" | "3.3.1" | "19.2.7" | "6.1.3" | "1.1.5" | "3.36.0" | "0.5.21" | "0.27.0" | "4.3.2" | "4.23.0" | "1.24.0" | "1.6.2" | "4.13.0" | "1.4.0" | "3.6.0" | "8.1.4" | "6.0.3" | "4.4.3" | "8.21.0";
133
+ [k: string]: "0.3.14" | "0.12.0" | "3.1085.0" | "3.972.56" | "1.0.0-alpha.10" | "2.34.0" | "7.7.0" | "22.2.1" | "10.3.0" | "23.0.2" | "1.11.1" | "1.15.43" | "1.29.0" | "0.22.0" | "0.2.3" | "0.0.57" | "0.3.0" | "1.62.3" | "7.8.2" | "1.9.0" | "1.170.17" | "1.168.19" | "1.167.18" | "1.162.0" | "1.162.2" | "3.0.201" | "1.0.149" | "3.0.1325" | "1.0.62" | "5.101.2" | "11.18.0" | "26.1.1" | "8.10.162" | "2.8.19" | "8.20.0" | "8.18.1" | "5.0.6" | "4.6.8" | "4.5.8" | "4.9.5" | "4.16.1" | "4.1.10" | "6.0.1" | "0.41.3" | "7.0.7" | "1.0.20" | "2.1130.0" | "2.261.0" | "3.12.0" | "10.6.0" | "2.8.6" | "5.6.2" | "0.7.1" | "2.1.1" | "15.0.0" | "3.9.1" | "0.28.1" | "1.0.31" | "1.0.5" | "2.5.3" | "7.8.0" | "3.1.5" | "5.2.1" | "3.3.3" | "9.1.7" | "11.3.6" | "11.0.4" | "4.0.0" | "3.5.3" | "2.0.0" | "22.2.9" | "3.5.0" | "8.22.0" | "3.3.1" | "19.2.7" | "6.1.3" | "1.1.5" | "3.36.0" | "0.5.21" | "0.28.0" | "4.3.2" | "4.23.0" | "1.24.0" | "1.6.2" | "4.13.0" | "1.4.0" | "3.6.0" | "8.1.4" | "6.0.3" | "4.4.3" | "8.21.0";
134
134
  };
135
135
  /**
136
136
  * Versions for Python dependencies added by generators
@@ -150,7 +150,7 @@ export declare const PY_VERSIONS: {
150
150
  readonly fastapi: "==0.139.0";
151
151
  readonly 'fastapi[standard]': "==0.139.0";
152
152
  readonly httpx: "==0.28.1";
153
- readonly langchain: "==1.3.12";
153
+ readonly langchain: "==1.3.13";
154
154
  readonly 'langchain-aws': "==1.6.2";
155
155
  readonly 'langchain-mcp-adapters': "==0.3.0";
156
156
  readonly langgraph: "==1.2.9";
@@ -160,9 +160,13 @@ export declare const PY_VERSIONS: {
160
160
  readonly 'strands-agents': "==1.47.0";
161
161
  readonly 'strands-agents[a2a]': "==1.47.0";
162
162
  readonly 'strands-agents-tools': "==0.8.3";
163
- readonly ty: "==0.0.58";
163
+ readonly ty: "==0.0.59";
164
164
  readonly pynamodb: "==6.1.0";
165
165
  readonly uvicorn: "==0.51.0";
166
+ readonly sqlmodel: "==0.0.38";
167
+ readonly alembic: "==1.18.4";
168
+ readonly aiomysql: "==0.3.2";
169
+ readonly asyncpg: "==0.31.0";
166
170
  };
167
171
  export type IPyDepVersion = keyof typeof PY_VERSIONS;
168
172
  /**