@aws/nx-plugin 1.0.0-rc.64 → 1.0.0-rc.66

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 (99) hide show
  1. package/LICENSE-THIRD-PARTY +59 -87
  2. package/migrations.json +57 -47
  3. package/package.json +4 -4
  4. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +1 -1
  5. package/src/mcp-server/guide-pipeline.js.map +1 -1
  6. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js.map +1 -0
  7. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js.map +1 -0
  8. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js.map +1 -0
  9. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js.map +1 -0
  10. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js.map +1 -0
  11. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js.map +1 -0
  12. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js.map +1 -0
  13. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js.map +1 -0
  14. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js.map +1 -0
  15. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/metadata.json +3 -0
  16. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.d.ts +6 -0
  17. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js +71 -0
  18. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js.map +1 -0
  19. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/metadata.json +3 -0
  20. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.d.ts +6 -0
  21. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js +57 -0
  22. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js.map +1 -0
  23. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -2
  24. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +4 -4
  25. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +3 -3
  26. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +2 -2
  27. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
  28. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +12 -12
  29. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  30. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +3 -3
  31. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +4 -4
  32. package/src/py/rdb/files/migrations/env.py.template +1 -1
  33. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +7 -7
  34. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +12 -12
  35. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +2 -2
  36. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +1 -1
  37. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
  38. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  39. package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +1 -1
  40. package/src/ts/lib/vitest.js +12 -0
  41. package/src/ts/lib/vitest.js.map +1 -1
  42. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
  43. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +1 -1
  44. package/src/ts/nx-generator/files/local/generator.spec.ts.template +1 -1
  45. package/src/ts/nx-migration/files/migration.spec.ts.template +1 -1
  46. package/src/ts/nx-migration/generator.js +7 -1
  47. package/src/ts/nx-migration/generator.js.map +1 -1
  48. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +6 -6
  49. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +29 -29
  50. package/src/ts/react-website/app/generator.js +1 -1
  51. package/src/ts/react-website/app/generator.js.map +1 -1
  52. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +2 -2
  53. package/src/utils/bundle/bundle.js +1 -1
  54. package/src/utils/bundle/bundle.js.map +1 -1
  55. package/src/utils/versions.d.ts +47 -47
  56. package/src/utils/versions.js +46 -46
  57. package/src/utils/versions.js.map +1 -1
  58. package/src/migrations/latest/add-deploy-sandbox-target/migration.js.map +0 -1
  59. package/src/migrations/latest/gateway-agent-targets/migration.js.map +0 -1
  60. package/src/migrations/latest/gateway-cognito-passthrough/migration.js.map +0 -1
  61. package/src/migrations/latest/py-agent-lifespan-construction/migration.js.map +0 -1
  62. package/src/migrations/latest/rename-load-runtime-config-target/migration.js.map +0 -1
  63. package/src/migrations/latest/smithy-build-without-docker/migration.js.map +0 -1
  64. package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js.map +0 -1
  65. package/src/migrations/latest/strip-pip-from-python-images/migration.js.map +0 -1
  66. package/src/migrations/latest/waf-log-group-removal/migration.js.map +0 -1
  67. /package/src/migrations/{latest/smithy-ssdk-bundle-pins → v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins}/metadata.json +0 -0
  68. /package/src/migrations/{latest/add-deploy-sandbox-target → v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins}/migration.d.ts +0 -0
  69. /package/src/migrations/{latest/smithy-ssdk-bundle-pins → v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins}/migration.js +0 -0
  70. /package/src/migrations/{latest/smithy-ssdk-bundle-pins → v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins}/rc57-service.Dockerfile.fixture +0 -0
  71. /package/src/migrations/{latest/gateway-agent-targets → v1.0.0-rc.59/0001-gateway-agent-targets}/__snapshots__/migration.spec.ts.snap +0 -0
  72. /package/src/migrations/{latest/gateway-agent-targets → v1.0.0-rc.59/0001-gateway-agent-targets}/metadata.json +0 -0
  73. /package/src/migrations/{latest/gateway-agent-targets → v1.0.0-rc.59/0001-gateway-agent-targets}/migration.d.ts +0 -0
  74. /package/src/migrations/{latest/gateway-agent-targets → v1.0.0-rc.59/0001-gateway-agent-targets}/migration.js +0 -0
  75. /package/src/migrations/{latest/gateway-cognito-passthrough → v1.0.0-rc.60/0001-gateway-cognito-passthrough}/__snapshots__/migration.spec.ts.snap +0 -0
  76. /package/src/migrations/{latest/gateway-cognito-passthrough → v1.0.0-rc.60/0001-gateway-cognito-passthrough}/metadata.json +0 -0
  77. /package/src/migrations/{latest/gateway-cognito-passthrough → v1.0.0-rc.60/0001-gateway-cognito-passthrough}/migration.d.ts +0 -0
  78. /package/src/migrations/{latest/gateway-cognito-passthrough → v1.0.0-rc.60/0001-gateway-cognito-passthrough}/migration.js +0 -0
  79. /package/src/migrations/{latest/waf-log-group-removal → v1.0.0-rc.60/0002-waf-log-group-removal}/__snapshots__/migration.spec.ts.snap +0 -0
  80. /package/src/migrations/{latest/waf-log-group-removal → v1.0.0-rc.60/0002-waf-log-group-removal}/metadata.json +0 -0
  81. /package/src/migrations/{latest/waf-log-group-removal → v1.0.0-rc.60/0002-waf-log-group-removal}/migration.d.ts +0 -0
  82. /package/src/migrations/{latest/waf-log-group-removal → v1.0.0-rc.60/0002-waf-log-group-removal}/migration.js +0 -0
  83. /package/src/migrations/{latest/strip-pip-from-python-images → v1.0.0-rc.60/0003-strip-pip-from-python-images}/__snapshots__/migration.spec.ts.snap +0 -0
  84. /package/src/migrations/{latest/strip-pip-from-python-images → v1.0.0-rc.60/0003-strip-pip-from-python-images}/metadata.json +0 -0
  85. /package/src/migrations/{latest/py-agent-lifespan-construction → v1.0.0-rc.60/0003-strip-pip-from-python-images}/migration.d.ts +0 -0
  86. /package/src/migrations/{latest/strip-pip-from-python-images → v1.0.0-rc.60/0003-strip-pip-from-python-images}/migration.js +0 -0
  87. /package/src/migrations/{latest/py-agent-lifespan-construction → v1.0.0-rc.61/0001-py-agent-lifespan-construction}/metadata.json +0 -0
  88. /package/src/migrations/{latest/rename-load-runtime-config-target → v1.0.0-rc.61/0001-py-agent-lifespan-construction}/migration.d.ts +0 -0
  89. /package/src/migrations/{latest/py-agent-lifespan-construction → v1.0.0-rc.61/0001-py-agent-lifespan-construction}/migration.js +0 -0
  90. /package/src/migrations/{latest/rename-load-runtime-config-target → v1.0.0-rc.62/0001-rename-load-runtime-config-target}/metadata.json +0 -0
  91. /package/src/migrations/{latest/smithy-build-without-docker → v1.0.0-rc.62/0001-rename-load-runtime-config-target}/migration.d.ts +0 -0
  92. /package/src/migrations/{latest/rename-load-runtime-config-target → v1.0.0-rc.62/0001-rename-load-runtime-config-target}/migration.js +0 -0
  93. /package/src/migrations/{latest/add-deploy-sandbox-target → v1.0.0-rc.63/0001-add-deploy-sandbox-target}/metadata.json +0 -0
  94. /package/src/migrations/{latest/smithy-ssdk-bundle-pins → v1.0.0-rc.63/0001-add-deploy-sandbox-target}/migration.d.ts +0 -0
  95. /package/src/migrations/{latest/add-deploy-sandbox-target → v1.0.0-rc.63/0001-add-deploy-sandbox-target}/migration.js +0 -0
  96. /package/src/migrations/{latest/smithy-build-without-docker → v1.0.0-rc.64/0001-smithy-build-without-docker}/legacy-service.Dockerfile.fixture +0 -0
  97. /package/src/migrations/{latest/smithy-build-without-docker → v1.0.0-rc.64/0001-smithy-build-without-docker}/metadata.json +0 -0
  98. /package/src/migrations/{latest/strip-pip-from-python-images → v1.0.0-rc.64/0001-smithy-build-without-docker}/migration.d.ts +0 -0
  99. /package/src/migrations/{latest/smithy-build-without-docker → v1.0.0-rc.64/0001-smithy-build-without-docker}/migration.js +0 -0
@@ -9,7 +9,7 @@ from sqlalchemy.ext.asyncio import create_async_engine
9
9
  from sqlmodel import SQLModel
10
10
 
11
11
  # Import all models to register them in SQLModel.metadata
12
- from <%= name %>.models import * # noqa: F401, F403
12
+ from <%= name %>.models import * # noqa: F403
13
13
 
14
14
  config = context.config
15
15
 
@@ -413,7 +413,7 @@ terraform {
413
413
  required_providers {
414
414
  aws = {
415
415
  source = "hashicorp/aws"
416
- version = "6.57.1"
416
+ version = "6.58.0"
417
417
  }
418
418
  random = {
419
419
  source = "hashicorp/random"
@@ -672,7 +672,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform pro
672
672
  required_providers {
673
673
  aws = {
674
674
  source = "hashicorp/aws"
675
- version = "6.57.1"
675
+ version = "6.58.0"
676
676
  }
677
677
  }
678
678
  }
@@ -1904,7 +1904,7 @@ terraform {
1904
1904
  required_providers {
1905
1905
  aws = {
1906
1906
  source = "hashicorp/aws"
1907
- version = "6.57.1"
1907
+ version = "6.58.0"
1908
1908
  }
1909
1909
  random = {
1910
1910
  source = "hashicorp/random"
@@ -2160,7 +2160,7 @@ output "waf_web_acl_arn" {
2160
2160
  required_providers {
2161
2161
  aws = {
2162
2162
  source = "hashicorp/aws"
2163
- version = "6.57.1"
2163
+ version = "6.58.0"
2164
2164
  }
2165
2165
  }
2166
2166
  }
@@ -2879,7 +2879,7 @@ terraform {
2879
2879
  required_providers {
2880
2880
  aws = {
2881
2881
  source = "hashicorp/aws"
2882
- version = "6.57.1"
2882
+ version = "6.58.0"
2883
2883
  }
2884
2884
  random = {
2885
2885
  source = "hashicorp/random"
@@ -3135,7 +3135,7 @@ output "waf_web_acl_arn" {
3135
3135
  required_providers {
3136
3136
  aws = {
3137
3137
  source = "hashicorp/aws"
3138
- version = "6.57.1"
3138
+ version = "6.58.0"
3139
3139
  }
3140
3140
  }
3141
3141
  }
@@ -3839,7 +3839,7 @@ exports[`tsSmithyApiGenerator > terraform iac > should generate terraform with c
3839
3839
  required_providers {
3840
3840
  aws = {
3841
3841
  source = "hashicorp/aws"
3842
- version = "6.57.1"
3842
+ version = "6.58.0"
3843
3843
  }
3844
3844
  }
3845
3845
  }
@@ -3175,7 +3175,7 @@ terraform {
3175
3175
  required_providers {
3176
3176
  aws = {
3177
3177
  source = "hashicorp/aws"
3178
- version = "6.57.1"
3178
+ version = "6.58.0"
3179
3179
  }
3180
3180
  }
3181
3181
  }
@@ -3422,7 +3422,7 @@ output "api_log_group_arn" {
3422
3422
  required_providers {
3423
3423
  aws = {
3424
3424
  source = "hashicorp/aws"
3425
- version = "6.57.1"
3425
+ version = "6.58.0"
3426
3426
  }
3427
3427
  }
3428
3428
  }
@@ -3917,7 +3917,7 @@ terraform {
3917
3917
  required_providers {
3918
3918
  aws = {
3919
3919
  source = "hashicorp/aws"
3920
- version = "6.57.1"
3920
+ version = "6.58.0"
3921
3921
  }
3922
3922
  }
3923
3923
  }
@@ -4164,7 +4164,7 @@ output "api_log_group_arn" {
4164
4164
  required_providers {
4165
4165
  aws = {
4166
4166
  source = "hashicorp/aws"
4167
- version = "6.57.1"
4167
+ version = "6.58.0"
4168
4168
  }
4169
4169
  }
4170
4170
  }
@@ -4731,7 +4731,7 @@ terraform {
4731
4731
  required_providers {
4732
4732
  aws = {
4733
4733
  source = "hashicorp/aws"
4734
- version = "6.57.1"
4734
+ version = "6.58.0"
4735
4735
  }
4736
4736
  }
4737
4737
  }
@@ -4978,7 +4978,7 @@ output "api_log_group_arn" {
4978
4978
  required_providers {
4979
4979
  aws = {
4980
4980
  source = "hashicorp/aws"
4981
- version = "6.57.1"
4981
+ version = "6.58.0"
4982
4982
  }
4983
4983
  }
4984
4984
  }
@@ -5450,7 +5450,7 @@ terraform {
5450
5450
  required_providers {
5451
5451
  aws = {
5452
5452
  source = "hashicorp/aws"
5453
- version = "6.57.1"
5453
+ version = "6.58.0"
5454
5454
  }
5455
5455
  random = {
5456
5456
  source = "hashicorp/random"
@@ -5706,7 +5706,7 @@ output "waf_web_acl_arn" {
5706
5706
  required_providers {
5707
5707
  aws = {
5708
5708
  source = "hashicorp/aws"
5709
- version = "6.57.1"
5709
+ version = "6.58.0"
5710
5710
  }
5711
5711
  }
5712
5712
  }
@@ -6426,7 +6426,7 @@ terraform {
6426
6426
  required_providers {
6427
6427
  aws = {
6428
6428
  source = "hashicorp/aws"
6429
- version = "6.57.1"
6429
+ version = "6.58.0"
6430
6430
  }
6431
6431
  random = {
6432
6432
  source = "hashicorp/random"
@@ -6682,7 +6682,7 @@ output "waf_web_acl_arn" {
6682
6682
  required_providers {
6683
6683
  aws = {
6684
6684
  source = "hashicorp/aws"
6685
- version = "6.57.1"
6685
+ version = "6.58.0"
6686
6686
  }
6687
6687
  }
6688
6688
  }
@@ -7391,7 +7391,7 @@ terraform {
7391
7391
  required_providers {
7392
7392
  aws = {
7393
7393
  source = "hashicorp/aws"
7394
- version = "6.57.1"
7394
+ version = "6.58.0"
7395
7395
  }
7396
7396
  random = {
7397
7397
  source = "hashicorp/random"
@@ -7647,7 +7647,7 @@ output "waf_web_acl_arn" {
7647
7647
  required_providers {
7648
7648
  aws = {
7649
7649
  source = "hashicorp/aws"
7650
- version = "6.57.1"
7650
+ version = "6.58.0"
7651
7651
  }
7652
7652
  }
7653
7653
  }
@@ -1263,7 +1263,7 @@ exports[`ts#agent generator > should match snapshot for Terraform generated file
1263
1263
  required_providers {
1264
1264
  aws = {
1265
1265
  source = "hashicorp/aws"
1266
- version = "6.57.1"
1266
+ version = "6.58.0"
1267
1267
  }
1268
1268
  null = {
1269
1269
  source = "hashicorp/null"
@@ -1679,7 +1679,7 @@ resource "null_resource" "runtime_ready" {
1679
1679
 
1680
1680
  provisioner "local-exec" {
1681
1681
  command = <<-EOT
1682
- uv run --with boto3==1.43.63 python -c "
1682
+ uv run --with boto3==1.43.67 python -c "
1683
1683
  import boto3
1684
1684
  import json
1685
1685
  import os
@@ -579,7 +579,7 @@ terraform {
579
579
  required_providers {
580
580
  aws = {
581
581
  source = "hashicorp/aws"
582
- version = "6.57.1"
582
+ version = "6.58.0"
583
583
  }
584
584
  archive = {
585
585
  source = "hashicorp/archive"
@@ -35,7 +35,7 @@ exports[`ts#dynamodb generator > should generate terraform modules when iac is t
35
35
  required_providers {
36
36
  aws = {
37
37
  source = "hashicorp/aws"
38
- version = "6.57.1"
38
+ version = "6.58.0"
39
39
  }
40
40
  }
41
41
  }
@@ -192,7 +192,7 @@ exports[`ts#dynamodb generator > should generate terraform modules when iac is t
192
192
  required_providers {
193
193
  aws = {
194
194
  source = "hashicorp/aws"
195
- version = "6.57.1"
195
+ version = "6.58.0"
196
196
  }
197
197
  random = {
198
198
  source = "hashicorp/random"
@@ -141,7 +141,7 @@ exports[`ts-lambda-function generator > terraform iac > should generate terrafor
141
141
  required_providers {
142
142
  aws = {
143
143
  source = "hashicorp/aws"
144
- version = "6.57.1"
144
+ version = "6.58.0"
145
145
  }
146
146
  archive = {
147
147
  source = "hashicorp/archive"
@@ -322,7 +322,7 @@ exports[`ts-lambda-function generator > terraform iac > should match snapshot fo
322
322
  required_providers {
323
323
  aws = {
324
324
  source = "hashicorp/aws"
325
- version = "6.57.1"
325
+ version = "6.58.0"
326
326
  }
327
327
  archive = {
328
328
  source = "hashicorp/archive"
@@ -4,7 +4,7 @@ exports[`vitest utils > should generate a valid vitest.config.mts without a doub
4
4
  "import { defineConfig } from 'vitest/config';
5
5
 
6
6
  export default defineConfig(() => ({
7
- root: __dirname,
7
+ root: import.meta.dirname,
8
8
  cacheDir: '../node_modules/.vite/test',
9
9
  test: {
10
10
  passWithNoTests: true,
@@ -9,6 +9,17 @@ import { forDependencies } from "../../utils/declared-dependencies.js";
9
9
  import { addDependenciesToPackageJson } from "../../utils/dependencies.js";
10
10
  import { withVersions } from "../../utils/versions.js";
11
11
  const readGritPattern = (name)=>readFileSync(join(import.meta.dirname, 'grit', `${name}.grit`), 'utf-8').trim();
12
+ /**
13
+ * Resolve the config's `root` from `import.meta.dirname`.
14
+ *
15
+ * `@nx/js` writes `root: __dirname`, which Vite's native config loader does not
16
+ * provide — it warns today and will reject once `configLoader: 'native'` becomes
17
+ * the default. Scoped with `some` to a direct property of the object the config
18
+ * factory returns, so a nested `root` (a `test.alias` entry, say) is untouched.
19
+ */ const ROOT_IMPORT_META_DIRNAME = `\`defineConfig(() => ({ $props }))\` where {
20
+ $props <: some \`root: __dirname\` as $root,
21
+ $root => \`root: import.meta.dirname\`
22
+ }`;
12
23
  /** Dependencies a caller must declare to configure vitest. */ export const VITEST_DEPENDENCIES = [
13
24
  {
14
25
  name: 'vite'
@@ -28,6 +39,7 @@ export const configureVitest = async (tree, options, declaration)=>{
28
39
  ].find((config)=>tree.exists(config));
29
40
  if (configPath) {
30
41
  await applyGritQL(tree, configPath, readGritPattern('vitest-pass-with-no-tests'));
42
+ await applyGritQL(tree, configPath, ROOT_IMPORT_META_DIRNAME);
31
43
  const nxJson = readNxJson(tree);
32
44
  updateNxJson(tree, {
33
45
  ...nxJson,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lib/vitest.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { readNxJson, type Tree, updateNxJson } from '@nx/devkit';\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { applyGritQL } from '../../utils/ast';\nimport {\n type DependencyDeclaration,\n forDependencies,\n type MustDeclare,\n} from '../../utils/declared-dependencies';\nimport { addDependenciesToPackageJson } from '../../utils/dependencies';\nimport { type ITsDepVersion, withVersions } from '../../utils/versions';\nimport type { ConfigureProjectOptions } from './types';\n\nconst readGritPattern = (name: string): string =>\n readFileSync(\n join(import.meta.dirname, 'grit', `${name}.grit`),\n 'utf-8',\n ).trim();\n\n/** Dependencies a caller must declare to configure vitest. */\nexport const VITEST_DEPENDENCIES = [\n { name: 'vite' },\n { name: 'vitest' },\n { name: '@vitest/coverage-v8' },\n] as const satisfies readonly { name: ITsDepVersion }[];\n\nexport const configureVitest = async <const D extends DependencyDeclaration>(\n tree: Tree,\n options: ConfigureProjectOptions,\n declaration: D & MustDeclare<typeof VITEST_DEPENDENCIES, D>,\n) => {\n // Find vitest.config.mts or vite.config.mts\n const configPath = [\n join(options.dir, 'vitest.config.mts'),\n join(options.dir, 'vite.config.mts'),\n ].find((config) => tree.exists(config));\n\n if (configPath) {\n await applyGritQL(\n tree,\n configPath,\n readGritPattern('vitest-pass-with-no-tests'),\n );\n\n const nxJson = readNxJson(tree);\n updateNxJson(tree, {\n ...nxJson,\n targetDefaults: {\n ...(nxJson.targetDefaults ?? {}),\n '@nx/vitest:test': {\n cache: true,\n inputs: ['default', '^production'],\n configurations: {\n 'update-snapshot': {\n args: '--update',\n },\n },\n ...nxJson.targetDefaults['@nx/vitest:test'],\n },\n },\n });\n }\n\n addDependenciesToPackageJson(\n tree,\n {},\n withVersions(forDependencies<typeof VITEST_DEPENDENCIES>(declaration), [\n 'vite',\n 'vitest',\n '@vitest/coverage-v8',\n ]),\n );\n};\n"],"names":["readNxJson","updateNxJson","readFileSync","join","applyGritQL","forDependencies","addDependenciesToPackageJson","withVersions","readGritPattern","name","dirname","trim","VITEST_DEPENDENCIES","configureVitest","tree","options","declaration","configPath","dir","find","config","exists","nxJson","targetDefaults","cache","inputs","configurations","args"],"mappings":"AAAA;;;CAGC,GACD,SAASA,UAAU,EAAaC,YAAY,QAAQ,aAAa;AACjE,SAASC,YAAY,QAAQ,KAAK;AAClC,SAASC,IAAI,QAAQ,OAAO;AAC5B,SAASC,WAAW,QAAQ,qBAAkB;AAC9C,SAEEC,eAAe,QAEV,uCAAoC;AAC3C,SAASC,4BAA4B,QAAQ,8BAA2B;AACxE,SAA6BC,YAAY,QAAQ,0BAAuB;AAGxE,MAAMC,kBAAkB,CAACC,OACvBP,aACEC,KAAK,YAAYO,OAAO,EAAE,QAAQ,GAAGD,KAAK,KAAK,CAAC,GAChD,SACAE,IAAI;AAER,4DAA4D,GAC5D,OAAO,MAAMC,sBAAsB;IACjC;QAAEH,MAAM;IAAO;IACf;QAAEA,MAAM;IAAS;IACjB;QAAEA,MAAM;IAAsB;CAC/B,CAAuD;AAExD,OAAO,MAAMI,kBAAkB,OAC7BC,MACAC,SACAC;IAEA,4CAA4C;IAC5C,MAAMC,aAAa;QACjBd,KAAKY,QAAQG,GAAG,EAAE;QAClBf,KAAKY,QAAQG,GAAG,EAAE;KACnB,CAACC,IAAI,CAAC,CAACC,SAAWN,KAAKO,MAAM,CAACD;IAE/B,IAAIH,YAAY;QACd,MAAMb,YACJU,MACAG,YACAT,gBAAgB;QAGlB,MAAMc,SAAStB,WAAWc;QAC1Bb,aAAaa,MAAM;YACjB,GAAGQ,MAAM;YACTC,gBAAgB;gBACd,GAAID,OAAOC,cAAc,IAAI,CAAC,CAAC;gBAC/B,mBAAmB;oBACjBC,OAAO;oBACPC,QAAQ;wBAAC;wBAAW;qBAAc;oBAClCC,gBAAgB;wBACd,mBAAmB;4BACjBC,MAAM;wBACR;oBACF;oBACA,GAAGL,OAAOC,cAAc,CAAC,kBAAkB;gBAC7C;YACF;QACF;IACF;IAEAjB,6BACEQ,MACA,CAAC,GACDP,aAAaF,gBAA4CW,cAAc;QACrE;QACA;QACA;KACD;AAEL,EAAE"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lib/vitest.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { readNxJson, type Tree, updateNxJson } from '@nx/devkit';\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { applyGritQL } from '../../utils/ast';\nimport {\n type DependencyDeclaration,\n forDependencies,\n type MustDeclare,\n} from '../../utils/declared-dependencies';\nimport { addDependenciesToPackageJson } from '../../utils/dependencies';\nimport { type ITsDepVersion, withVersions } from '../../utils/versions';\nimport type { ConfigureProjectOptions } from './types';\n\nconst readGritPattern = (name: string): string =>\n readFileSync(\n join(import.meta.dirname, 'grit', `${name}.grit`),\n 'utf-8',\n ).trim();\n\n/**\n * Resolve the config's `root` from `import.meta.dirname`.\n *\n * `@nx/js` writes `root: __dirname`, which Vite's native config loader does not\n * provide — it warns today and will reject once `configLoader: 'native'` becomes\n * the default. Scoped with `some` to a direct property of the object the config\n * factory returns, so a nested `root` (a `test.alias` entry, say) is untouched.\n */\nconst ROOT_IMPORT_META_DIRNAME = `\\`defineConfig(() => ({ $props }))\\` where {\n $props <: some \\`root: __dirname\\` as $root,\n $root => \\`root: import.meta.dirname\\`\n}`;\n\n/** Dependencies a caller must declare to configure vitest. */\nexport const VITEST_DEPENDENCIES = [\n { name: 'vite' },\n { name: 'vitest' },\n { name: '@vitest/coverage-v8' },\n] as const satisfies readonly { name: ITsDepVersion }[];\n\nexport const configureVitest = async <const D extends DependencyDeclaration>(\n tree: Tree,\n options: ConfigureProjectOptions,\n declaration: D & MustDeclare<typeof VITEST_DEPENDENCIES, D>,\n) => {\n // Find vitest.config.mts or vite.config.mts\n const configPath = [\n join(options.dir, 'vitest.config.mts'),\n join(options.dir, 'vite.config.mts'),\n ].find((config) => tree.exists(config));\n\n if (configPath) {\n await applyGritQL(\n tree,\n configPath,\n readGritPattern('vitest-pass-with-no-tests'),\n );\n\n await applyGritQL(tree, configPath, ROOT_IMPORT_META_DIRNAME);\n\n const nxJson = readNxJson(tree);\n updateNxJson(tree, {\n ...nxJson,\n targetDefaults: {\n ...(nxJson.targetDefaults ?? {}),\n '@nx/vitest:test': {\n cache: true,\n inputs: ['default', '^production'],\n configurations: {\n 'update-snapshot': {\n args: '--update',\n },\n },\n ...nxJson.targetDefaults['@nx/vitest:test'],\n },\n },\n });\n }\n\n addDependenciesToPackageJson(\n tree,\n {},\n withVersions(forDependencies<typeof VITEST_DEPENDENCIES>(declaration), [\n 'vite',\n 'vitest',\n '@vitest/coverage-v8',\n ]),\n );\n};\n"],"names":["readNxJson","updateNxJson","readFileSync","join","applyGritQL","forDependencies","addDependenciesToPackageJson","withVersions","readGritPattern","name","dirname","trim","ROOT_IMPORT_META_DIRNAME","VITEST_DEPENDENCIES","configureVitest","tree","options","declaration","configPath","dir","find","config","exists","nxJson","targetDefaults","cache","inputs","configurations","args"],"mappings":"AAAA;;;CAGC,GACD,SAASA,UAAU,EAAaC,YAAY,QAAQ,aAAa;AACjE,SAASC,YAAY,QAAQ,KAAK;AAClC,SAASC,IAAI,QAAQ,OAAO;AAC5B,SAASC,WAAW,QAAQ,qBAAkB;AAC9C,SAEEC,eAAe,QAEV,uCAAoC;AAC3C,SAASC,4BAA4B,QAAQ,8BAA2B;AACxE,SAA6BC,YAAY,QAAQ,0BAAuB;AAGxE,MAAMC,kBAAkB,CAACC,OACvBP,aACEC,KAAK,YAAYO,OAAO,EAAE,QAAQ,GAAGD,KAAK,KAAK,CAAC,GAChD,SACAE,IAAI;AAER;;;;;;;CAOC,GACD,MAAMC,2BAA2B,CAAC;;;CAGjC,CAAC;AAEF,4DAA4D,GAC5D,OAAO,MAAMC,sBAAsB;IACjC;QAAEJ,MAAM;IAAO;IACf;QAAEA,MAAM;IAAS;IACjB;QAAEA,MAAM;IAAsB;CAC/B,CAAuD;AAExD,OAAO,MAAMK,kBAAkB,OAC7BC,MACAC,SACAC;IAEA,4CAA4C;IAC5C,MAAMC,aAAa;QACjBf,KAAKa,QAAQG,GAAG,EAAE;QAClBhB,KAAKa,QAAQG,GAAG,EAAE;KACnB,CAACC,IAAI,CAAC,CAACC,SAAWN,KAAKO,MAAM,CAACD;IAE/B,IAAIH,YAAY;QACd,MAAMd,YACJW,MACAG,YACAV,gBAAgB;QAGlB,MAAMJ,YAAYW,MAAMG,YAAYN;QAEpC,MAAMW,SAASvB,WAAWe;QAC1Bd,aAAac,MAAM;YACjB,GAAGQ,MAAM;YACTC,gBAAgB;gBACd,GAAID,OAAOC,cAAc,IAAI,CAAC,CAAC;gBAC/B,mBAAmB;oBACjBC,OAAO;oBACPC,QAAQ;wBAAC;wBAAW;qBAAc;oBAClCC,gBAAgB;wBACd,mBAAmB;4BACjBC,MAAM;wBACR;oBACF;oBACA,GAAGL,OAAOC,cAAc,CAAC,kBAAkB;gBAC7C;YACF;QACF;IACF;IAEAlB,6BACES,MACA,CAAC,GACDR,aAAaF,gBAA4CY,cAAc;QACrE;QACA;QACA;KACD;AAEL,EAAE"}
@@ -155,7 +155,7 @@ exports[`ts#mcp-server generator > should match snapshot for Terraform generated
155
155
  required_providers {
156
156
  aws = {
157
157
  source = "hashicorp/aws"
158
- version = "6.57.1"
158
+ version = "6.58.0"
159
159
  }
160
160
  null = {
161
161
  source = "hashicorp/null"
@@ -571,7 +571,7 @@ resource "null_resource" "runtime_ready" {
571
571
 
572
572
  provisioner "local-exec" {
573
573
  command = <<-EOT
574
- uv run --with boto3==1.43.63 python -c "
574
+ uv run --with boto3==1.43.67 python -c "
575
575
  import boto3
576
576
  import json
577
577
  import os
@@ -206,7 +206,7 @@ exports[`nx-generator generator > within @aws/nx-plugin > should update generato
206
206
  exports[`nx-generator generator > within another workspace > should generate an example schema, generator and test > local-generator.spec.ts 1`] = `
207
207
  "import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
208
208
  import { Tree } from '@nx/devkit';
209
- import { fooBarGenerator } from './generator';
209
+ import { fooBarGenerator } from './generator.js';
210
210
 
211
211
  describe('foo#bar generator', () => {
212
212
  let tree: Tree;
@@ -1,6 +1,6 @@
1
1
  import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
2
2
  import { Tree } from '@nx/devkit';
3
- import { <%- nameCamelCase %>Generator } from './generator';
3
+ import { <%- nameCamelCase %>Generator } from './generator<% if (esm) { %>.js<% } %>';
4
4
 
5
5
  describe('<%- name %> generator', () => {
6
6
  let tree: Tree;
@@ -1,6 +1,6 @@
1
1
  import type { Tree } from '@nx/devkit';
2
2
  import { createTreeUsingTsSolutionSetup } from '<%- testImportPath %>';
3
- import migration from './migration';
3
+ import migration from './migration<% if (esm) { %>.js<% } %>';
4
4
 
5
5
  describe('<%= name %> migration', () => {
6
6
  let tree: Tree;
@@ -10,6 +10,7 @@ import { formatFilesInSubtree } from "../../utils/format.js";
10
10
  import { installDependencies } from "../../utils/install.js";
11
11
  import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
12
12
  import { LATEST_MIGRATIONS_DIR, migrationKey } from "../../utils/migration-versions.js";
13
+ import { isEsmWorkspace } from "../../utils/module-format.js";
13
14
  import { kebabCase } from "../../utils/names.js";
14
15
  import { getGeneratorInfo, isNxPluginForAwsWorkspace } from "../../utils/nx.js";
15
16
  import { sortObjectKeys } from "../../utils/object.js";
@@ -58,6 +59,10 @@ export const NX_MIGRATION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename
58
59
  // shared utils are relative. Elsewhere they come from the SDK.
59
60
  const formatImportPath = isNxPluginForAws ? '../../../utils/format' : `${PackageJson.name}/sdk/utils/format`;
60
61
  const testImportPath = isNxPluginForAws ? '../../../utils/test' : `${PackageJson.name}/sdk/utils/test`;
62
+ // A generated workspace resolves with `nodenext`, which needs the explicit
63
+ // extension on the spec's sibling import; this repo resolves with `bundler`,
64
+ // which takes it extensionless.
65
+ const esm = !isNxPluginForAws && isEsmWorkspace(tree);
61
66
  // One template set covers all kinds — scaffold it, then prune what this kind
62
67
  // doesn't use.
63
68
  generateFiles(tree, joinPathFragments(import.meta.dirname, 'files'), migrationDir, {
@@ -65,7 +70,8 @@ export const NX_MIGRATION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename
65
70
  description,
66
71
  isHybrid,
67
72
  formatImportPath,
68
- testImportPath
73
+ testImportPath,
74
+ esm
69
75
  }, {
70
76
  overwriteStrategy: OverwriteStrategy.KeepExisting
71
77
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/nx-migration/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 readJson,\n type Tree,\n writeJson,\n} from '@nx/devkit';\nimport PackageJson from '../../../package.json' with { type: 'json' };\nimport { declareDependencies } from '../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport {\n LATEST_MIGRATIONS_DIR,\n migrationKey,\n} from '../../utils/migration-versions';\nimport { kebabCase } from '../../utils/names';\nimport {\n getGeneratorInfo,\n isNxPluginForAwsWorkspace,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport {\n addNxPluginDependencies,\n configureNxPluginPackageJson,\n NX_PLUGIN_DEPENDENCIES,\n readNxPluginProject,\n} from '../nx-plugin/utils';\nimport type { TsNxMigrationGeneratorSchema } from './schema';\n\nexport const DEPENDENCIES = declareDependencies()({\n ts: [...NX_PLUGIN_DEPENDENCIES],\n});\n\nexport const NX_MIGRATION_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\n/**\n * Scaffolds a migration in an Nx Plugin project and registers it in the\n * plugin's `migrations.json` (creating the manifest and wiring the\n * `nx-migrations` field into the plugin's `package.json` if absent), so\n * `nx migrate` applies it when users upgrade the plugin.\n *\n * Supports all three migration kinds:\n * - `deterministic`: a codemod (`implementation`).\n * - `agentic`: a `prompt` markdown file applied by the user's agent.\n * - `hybrid`: both — the codemod does the mechanical part and returns\n * `agentContext`, then the prompt hands off to the agent for the rest.\n *\n * No `version` is written — the plugin author stamps versions at release time.\n */\nexport const tsNxMigrationGenerator = async (\n tree: Tree,\n options: TsNxMigrationGeneratorSchema,\n): Promise<GeneratorCallback | void> => {\n const name = kebabCase(options.name);\n // Shown by `nx migrate` when the migration runs, so it needs to say something\n const description =\n options.description ?? 'TODO: Add short description of the migration';\n const kind = options.kind ?? 'deterministic';\n\n const hasImplementation = kind === 'deterministic' || kind === 'hybrid';\n const hasPrompt = kind === 'agentic' || kind === 'hybrid';\n const isHybrid = kind === 'hybrid';\n\n const plugin = readNxPluginProject(tree, options.project);\n\n const sourceRoot = plugin.sourceRoot ?? joinPathFragments(plugin.root, 'src');\n const srcDir = sourceRoot.split('/').filter(Boolean).pop();\n // Migrations are grouped by the release that ships them. A new one lands in\n // `latest` — the release that picks it up moves it into its version folder.\n const migrationPath = `${srcDir}/migrations/${LATEST_MIGRATIONS_DIR}/${name}`;\n const migrationDir = joinPathFragments(\n sourceRoot,\n 'migrations',\n LATEST_MIGRATIONS_DIR,\n name,\n );\n const key = migrationKey(LATEST_MIGRATIONS_DIR, name);\n\n const isNxPluginForAws = isNxPluginForAwsWorkspace(tree);\n\n // Point the plugin at its migrations manifest so `nx migrate` finds them\n const pluginPackageJsonPath = configureNxPluginPackageJson(\n tree,\n plugin,\n 'nx-migrations',\n { migrations: './migrations.json' },\n );\n\n // Migrations sit three levels below the source root, so in this repo the\n // shared utils are relative. Elsewhere they come from the SDK.\n const formatImportPath = isNxPluginForAws\n ? '../../../utils/format'\n : `${PackageJson.name}/sdk/utils/format`;\n const testImportPath = isNxPluginForAws\n ? '../../../utils/test'\n : `${PackageJson.name}/sdk/utils/test`;\n\n // One template set covers all kinds — scaffold it, then prune what this kind\n // doesn't use.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n migrationDir,\n { name, description, isHybrid, formatImportPath, testImportPath },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n if (!hasImplementation) {\n tree.delete(joinPathFragments(migrationDir, 'migration.ts'));\n tree.delete(joinPathFragments(migrationDir, 'migration.spec.ts'));\n }\n if (!hasPrompt) {\n tree.delete(joinPathFragments(migrationDir, 'prompt.md'));\n }\n\n if (isNxPluginForAws) {\n // In the plugin's own repo migrations.json is assembled from these folders\n // at build time (see utils/migration-manifest.ts), so registration is just\n // the description beside the code — its kind comes from the files present.\n // Two migration PRs then touch disjoint files rather than one shared manifest.\n const metadataPath = joinPathFragments(migrationDir, 'metadata.json');\n if (!tree.exists(metadataPath)) {\n writeJson(tree, metadataPath, { description });\n }\n } else {\n // Elsewhere, register the migration under its folder-prefixed key. The fields\n // present discriminate the kind for nx, and paths are relative to\n // migrations.json. No version is written, but an already-stamped one is kept.\n const migrationsJsonPath = joinPathFragments(\n plugin.root,\n 'migrations.json',\n );\n const migrationsJson = tree.exists(migrationsJsonPath)\n ? readJson(tree, migrationsJsonPath)\n : {\n $schema: 'http://json-schema.org/schema',\n name: readJson(tree, pluginPackageJsonPath).name ?? plugin.name,\n generators: {},\n };\n writeJson(tree, migrationsJsonPath, {\n ...migrationsJson,\n generators: sortObjectKeys({\n ...migrationsJson.generators,\n [key]: {\n ...(migrationsJson.generators?.[key]?.version\n ? { version: migrationsJson.generators[key].version }\n : {}),\n description,\n ...(hasImplementation\n ? { implementation: `./${migrationPath}/migration` }\n : {}),\n ...(hasPrompt ? { prompt: `./${migrationPath}/prompt.md` } : {}),\n },\n }),\n });\n }\n\n // Codemods import @nx/devkit and the @aws/nx-plugin SDK, both of which must\n // resolve for nx to run them\n if (hasImplementation) {\n addNxPluginDependencies(tree, pluginPackageJsonPath, DEPENDENCIES);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [NX_MIGRATION_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n\n if (hasImplementation && !isNxPluginForAws) {\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n ensureResolvable: ['@nx/devkit'],\n });\n }\n};\n\nexport default tsNxMigrationGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","readJson","writeJson","PackageJson","type","declareDependencies","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","LATEST_MIGRATIONS_DIR","migrationKey","kebabCase","getGeneratorInfo","isNxPluginForAwsWorkspace","sortObjectKeys","addNxPluginDependencies","configureNxPluginPackageJson","NX_PLUGIN_DEPENDENCIES","readNxPluginProject","DEPENDENCIES","ts","NX_MIGRATION_GENERATOR_INFO","filename","tsNxMigrationGenerator","tree","options","name","description","kind","hasImplementation","hasPrompt","isHybrid","plugin","project","sourceRoot","root","srcDir","split","filter","Boolean","pop","migrationPath","migrationDir","key","isNxPluginForAws","pluginPackageJsonPath","migrations","formatImportPath","testImportPath","dirname","overwriteStrategy","KeepExisting","delete","metadataPath","exists","migrationsJsonPath","migrationsJson","$schema","generators","version","implementation","prompt","preferInstallDependencies","languages","ensureResolvable"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/nx-migration/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 readJson,\n type Tree,\n writeJson,\n} from '@nx/devkit';\nimport PackageJson from '../../../package.json' with { type: 'json' };\nimport { declareDependencies } from '../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport {\n LATEST_MIGRATIONS_DIR,\n migrationKey,\n} from '../../utils/migration-versions';\nimport { isEsmWorkspace } from '../../utils/module-format';\nimport { kebabCase } from '../../utils/names';\nimport {\n getGeneratorInfo,\n isNxPluginForAwsWorkspace,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport {\n addNxPluginDependencies,\n configureNxPluginPackageJson,\n NX_PLUGIN_DEPENDENCIES,\n readNxPluginProject,\n} from '../nx-plugin/utils';\nimport type { TsNxMigrationGeneratorSchema } from './schema';\n\nexport const DEPENDENCIES = declareDependencies()({\n ts: [...NX_PLUGIN_DEPENDENCIES],\n});\n\nexport const NX_MIGRATION_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\n/**\n * Scaffolds a migration in an Nx Plugin project and registers it in the\n * plugin's `migrations.json` (creating the manifest and wiring the\n * `nx-migrations` field into the plugin's `package.json` if absent), so\n * `nx migrate` applies it when users upgrade the plugin.\n *\n * Supports all three migration kinds:\n * - `deterministic`: a codemod (`implementation`).\n * - `agentic`: a `prompt` markdown file applied by the user's agent.\n * - `hybrid`: both — the codemod does the mechanical part and returns\n * `agentContext`, then the prompt hands off to the agent for the rest.\n *\n * No `version` is written — the plugin author stamps versions at release time.\n */\nexport const tsNxMigrationGenerator = async (\n tree: Tree,\n options: TsNxMigrationGeneratorSchema,\n): Promise<GeneratorCallback | void> => {\n const name = kebabCase(options.name);\n // Shown by `nx migrate` when the migration runs, so it needs to say something\n const description =\n options.description ?? 'TODO: Add short description of the migration';\n const kind = options.kind ?? 'deterministic';\n\n const hasImplementation = kind === 'deterministic' || kind === 'hybrid';\n const hasPrompt = kind === 'agentic' || kind === 'hybrid';\n const isHybrid = kind === 'hybrid';\n\n const plugin = readNxPluginProject(tree, options.project);\n\n const sourceRoot = plugin.sourceRoot ?? joinPathFragments(plugin.root, 'src');\n const srcDir = sourceRoot.split('/').filter(Boolean).pop();\n // Migrations are grouped by the release that ships them. A new one lands in\n // `latest` — the release that picks it up moves it into its version folder.\n const migrationPath = `${srcDir}/migrations/${LATEST_MIGRATIONS_DIR}/${name}`;\n const migrationDir = joinPathFragments(\n sourceRoot,\n 'migrations',\n LATEST_MIGRATIONS_DIR,\n name,\n );\n const key = migrationKey(LATEST_MIGRATIONS_DIR, name);\n\n const isNxPluginForAws = isNxPluginForAwsWorkspace(tree);\n\n // Point the plugin at its migrations manifest so `nx migrate` finds them\n const pluginPackageJsonPath = configureNxPluginPackageJson(\n tree,\n plugin,\n 'nx-migrations',\n { migrations: './migrations.json' },\n );\n\n // Migrations sit three levels below the source root, so in this repo the\n // shared utils are relative. Elsewhere they come from the SDK.\n const formatImportPath = isNxPluginForAws\n ? '../../../utils/format'\n : `${PackageJson.name}/sdk/utils/format`;\n const testImportPath = isNxPluginForAws\n ? '../../../utils/test'\n : `${PackageJson.name}/sdk/utils/test`;\n // A generated workspace resolves with `nodenext`, which needs the explicit\n // extension on the spec's sibling import; this repo resolves with `bundler`,\n // which takes it extensionless.\n const esm = !isNxPluginForAws && isEsmWorkspace(tree);\n\n // One template set covers all kinds — scaffold it, then prune what this kind\n // doesn't use.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n migrationDir,\n {\n name,\n description,\n isHybrid,\n formatImportPath,\n testImportPath,\n esm,\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n if (!hasImplementation) {\n tree.delete(joinPathFragments(migrationDir, 'migration.ts'));\n tree.delete(joinPathFragments(migrationDir, 'migration.spec.ts'));\n }\n if (!hasPrompt) {\n tree.delete(joinPathFragments(migrationDir, 'prompt.md'));\n }\n\n if (isNxPluginForAws) {\n // In the plugin's own repo migrations.json is assembled from these folders\n // at build time (see utils/migration-manifest.ts), so registration is just\n // the description beside the code — its kind comes from the files present.\n // Two migration PRs then touch disjoint files rather than one shared manifest.\n const metadataPath = joinPathFragments(migrationDir, 'metadata.json');\n if (!tree.exists(metadataPath)) {\n writeJson(tree, metadataPath, { description });\n }\n } else {\n // Elsewhere, register the migration under its folder-prefixed key. The fields\n // present discriminate the kind for nx, and paths are relative to\n // migrations.json. No version is written, but an already-stamped one is kept.\n const migrationsJsonPath = joinPathFragments(\n plugin.root,\n 'migrations.json',\n );\n const migrationsJson = tree.exists(migrationsJsonPath)\n ? readJson(tree, migrationsJsonPath)\n : {\n $schema: 'http://json-schema.org/schema',\n name: readJson(tree, pluginPackageJsonPath).name ?? plugin.name,\n generators: {},\n };\n writeJson(tree, migrationsJsonPath, {\n ...migrationsJson,\n generators: sortObjectKeys({\n ...migrationsJson.generators,\n [key]: {\n ...(migrationsJson.generators?.[key]?.version\n ? { version: migrationsJson.generators[key].version }\n : {}),\n description,\n ...(hasImplementation\n ? { implementation: `./${migrationPath}/migration` }\n : {}),\n ...(hasPrompt ? { prompt: `./${migrationPath}/prompt.md` } : {}),\n },\n }),\n });\n }\n\n // Codemods import @nx/devkit and the @aws/nx-plugin SDK, both of which must\n // resolve for nx to run them\n if (hasImplementation) {\n addNxPluginDependencies(tree, pluginPackageJsonPath, DEPENDENCIES);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [NX_MIGRATION_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n\n if (hasImplementation && !isNxPluginForAws) {\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n ensureResolvable: ['@nx/devkit'],\n });\n }\n};\n\nexport default tsNxMigrationGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","readJson","writeJson","PackageJson","type","declareDependencies","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","LATEST_MIGRATIONS_DIR","migrationKey","isEsmWorkspace","kebabCase","getGeneratorInfo","isNxPluginForAwsWorkspace","sortObjectKeys","addNxPluginDependencies","configureNxPluginPackageJson","NX_PLUGIN_DEPENDENCIES","readNxPluginProject","DEPENDENCIES","ts","NX_MIGRATION_GENERATOR_INFO","filename","tsNxMigrationGenerator","tree","options","name","description","kind","hasImplementation","hasPrompt","isHybrid","plugin","project","sourceRoot","root","srcDir","split","filter","Boolean","pop","migrationPath","migrationDir","key","isNxPluginForAws","pluginPackageJsonPath","migrations","formatImportPath","testImportPath","esm","dirname","overwriteStrategy","KeepExisting","delete","metadataPath","exists","migrationsJsonPath","migrationsJson","$schema","generators","version","implementation","prompt","preferInstallDependencies","languages","ensureResolvable"],"mappings":"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"}
@@ -799,7 +799,7 @@ terraform {
799
799
  required_providers {
800
800
  aws = {
801
801
  source = "hashicorp/aws"
802
- version = "6.57.1"
802
+ version = "6.58.0"
803
803
  }
804
804
  null = {
805
805
  source = "hashicorp/null"
@@ -1553,7 +1553,7 @@ exports[`ts#rdb generator > should generate terraform modules when iac is Terraf
1553
1553
  }
1554
1554
  aws = {
1555
1555
  source = "hashicorp/aws"
1556
- version = "6.57.1"
1556
+ version = "6.58.0"
1557
1557
  }
1558
1558
  null = {
1559
1559
  source = "hashicorp/null"
@@ -2285,7 +2285,7 @@ terraform {
2285
2285
  required_providers {
2286
2286
  aws = {
2287
2287
  source = "hashicorp/aws"
2288
- version = "6.57.1"
2288
+ version = "6.58.0"
2289
2289
  }
2290
2290
  null = {
2291
2291
  source = "hashicorp/null"
@@ -3039,7 +3039,7 @@ exports[`ts#rdb generator > should generate terraform modules with MySQL engine
3039
3039
  }
3040
3040
  aws = {
3041
3041
  source = "hashicorp/aws"
3042
- version = "6.57.1"
3042
+ version = "6.58.0"
3043
3043
  }
3044
3044
  null = {
3045
3045
  source = "hashicorp/null"
@@ -4714,7 +4714,7 @@ export default defineConfig([
4714
4714
  output: {
4715
4715
  file: '../../dist/packages/db/bundle/migration/index.js',
4716
4716
  format: 'cjs',
4717
- inlineDynamicImports: true,
4717
+ codeSplitting: false,
4718
4718
  },
4719
4719
  platform: 'node',
4720
4720
  },
@@ -4724,7 +4724,7 @@ export default defineConfig([
4724
4724
  output: {
4725
4725
  file: '../../dist/packages/db/bundle/create-db-user/index.js',
4726
4726
  format: 'cjs',
4727
- inlineDynamicImports: true,
4727
+ codeSplitting: false,
4728
4728
  },
4729
4729
  platform: 'node',
4730
4730
  },