@aws-cdk-testing/cli-integ 3.30.2 → 3.31.1

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 (23) hide show
  1. package/lib/aws.d.ts +2 -0
  2. package/lib/aws.js +4 -1
  3. package/lib/regions.d.ts +5 -1
  4. package/lib/regions.js +18 -3
  5. package/npm-shrinkwrap.json +1409 -1384
  6. package/package.json +22 -21
  7. package/resources/cdk-apps/app/app.js +33 -2
  8. package/resources/cdk-apps/diagnose-app/app.js +77 -0
  9. package/resources/cdk-apps/diagnose-app/cdk.json +7 -0
  10. package/tests/cli-integ-tests/deploy/cdk-import-existing-resources-error-message-includes-construct-paths.integtest.js +2 -2
  11. package/tests/cli-integ-tests/deploy/cdk-two-step-deploy-prepare-then-execute-change-set.integtest.d.ts +1 -0
  12. package/tests/cli-integ-tests/deploy/cdk-two-step-deploy-prepare-then-execute-change-set.integtest.js +36 -0
  13. package/tests/cli-integ-tests/diagnose/cdk-diagnose-changeset-failure.integtest.d.ts +1 -0
  14. package/tests/cli-integ-tests/diagnose/cdk-diagnose-changeset-failure.integtest.js +43 -0
  15. package/tests/cli-integ-tests/diagnose/cdk-diagnose-deployment-failure.integtest.d.ts +1 -0
  16. package/tests/cli-integ-tests/diagnose/cdk-diagnose-deployment-failure.integtest.js +20 -0
  17. package/tests/cli-integ-tests/diagnose/cdk-diagnose-early-validation-failure.integtest.d.ts +1 -0
  18. package/tests/cli-integ-tests/diagnose/cdk-diagnose-early-validation-failure.integtest.js +26 -0
  19. package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-caches-template.integtest.d.ts +1 -0
  20. package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-caches-template.integtest.js +73 -0
  21. package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-supports-cloudcontrol-based-resources.integtest.js +3 -2
  22. package/tests/cli-integ-tests/orphan/cdk-orphan-detaches-resource.integtest.d.ts +1 -0
  23. package/tests/cli-integ-tests/orphan/cdk-orphan-detaches-resource.integtest.js +72 -0
package/package.json CHANGED
@@ -39,9 +39,9 @@
39
39
  "organization": true
40
40
  },
41
41
  "devDependencies": {
42
- "@aws-cdk/toolkit-lib": "1.24.0",
42
+ "@aws-cdk/toolkit-lib": "1.25.0",
43
43
  "@aws-cdk/yarn-cling": "0.0.0",
44
- "@cdklabs/eslint-plugin": "^2.0.0",
44
+ "@cdklabs/eslint-plugin": "^2.0.2",
45
45
  "@stylistic/eslint-plugin": "^3",
46
46
  "@types/fs-extra": "^11",
47
47
  "@types/jest": "^29.5.14",
@@ -62,30 +62,31 @@
62
62
  "jest": "^29.7.0",
63
63
  "jest-junit": "^16",
64
64
  "license-checker": "^25.0.1",
65
- "nx": "^22.6.4",
65
+ "nx": "^22.6.5",
66
66
  "prettier": "^2.8",
67
- "projen": "^0.99.48",
67
+ "projen": "^0.99.52",
68
68
  "ts-jest": "^29.2.5",
69
69
  "typescript": "5.9"
70
70
  },
71
71
  "dependencies": {
72
- "@aws-sdk/client-cloudformation": "^3.1028.0",
73
- "@aws-sdk/client-codeartifact": "^3.1029.0",
74
- "@aws-sdk/client-ecr": "^3.1028.0",
75
- "@aws-sdk/client-ecr-public": "^3.1028.0",
76
- "@aws-sdk/client-ecs": "^3.1028.0",
77
- "@aws-sdk/client-iam": "^3.1028.0",
78
- "@aws-sdk/client-lambda": "^3.1028.0",
79
- "@aws-sdk/client-s3": "^3.1028.0",
80
- "@aws-sdk/client-secrets-manager": "^3.1028.0",
81
- "@aws-sdk/client-sns": "^3.1028.0",
82
- "@aws-sdk/client-sso": "^3.1028.0",
83
- "@aws-sdk/client-sts": "^3.1029.0",
84
- "@aws-sdk/credential-providers": "^3.1029.0",
85
- "@cdklabs/cdk-atmosphere-client": "^0.0.96",
72
+ "@aws-sdk/client-cloudformation": "^3",
73
+ "@aws-sdk/client-codeartifact": "^3",
74
+ "@aws-sdk/client-dynamodb": "^3",
75
+ "@aws-sdk/client-ecr": "^3",
76
+ "@aws-sdk/client-ecr-public": "^3",
77
+ "@aws-sdk/client-ecs": "^3",
78
+ "@aws-sdk/client-iam": "^3",
79
+ "@aws-sdk/client-lambda": "^3",
80
+ "@aws-sdk/client-s3": "^3",
81
+ "@aws-sdk/client-secrets-manager": "^3",
82
+ "@aws-sdk/client-sns": "^3",
83
+ "@aws-sdk/client-sso": "^3",
84
+ "@aws-sdk/client-sts": "^3",
85
+ "@aws-sdk/credential-providers": "^3",
86
+ "@cdklabs/cdk-atmosphere-client": "^0.0.98",
86
87
  "@octokit/rest": "^20",
87
- "@smithy/types": "^4.14.0",
88
- "@smithy/util-retry": "^4.3.1",
88
+ "@smithy/types": "^4",
89
+ "@smithy/util-retry": "^4",
89
90
  "chalk": "^4",
90
91
  "fast-glob": "^3.3.3",
91
92
  "fs-extra": "^11",
@@ -124,7 +125,7 @@
124
125
  "publishConfig": {
125
126
  "access": "public"
126
127
  },
127
- "version": "3.30.2",
128
+ "version": "3.31.1",
128
129
  "packageManager": "yarn@4.13.0",
129
130
  "types": "lib/index.d.ts",
130
131
  "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"yarn projen\"."
@@ -479,6 +479,35 @@ class LambdaStack extends cdk.Stack {
479
479
  }
480
480
  }
481
481
 
482
+ class OrphanableStack extends cdk.Stack {
483
+ constructor(parent, id, props) {
484
+ super(parent, id, props);
485
+
486
+ const table = new cdk.aws_dynamodb.Table(this, 'MyTable', {
487
+ partitionKey: { name: 'PK', type: cdk.aws_dynamodb.AttributeType.STRING },
488
+ billingMode: cdk.aws_dynamodb.BillingMode.PAY_PER_REQUEST,
489
+ removalPolicy: cdk.RemovalPolicy.RETAIN,
490
+ });
491
+
492
+ // Lambda that references the table via Ref (TABLE_NAME) and GetAtt (TABLE_ARN)
493
+ const fn = new lambda.Function(this, 'Consumer', {
494
+ runtime: lambda.Runtime.NODEJS_LATEST,
495
+ handler: 'index.handler',
496
+ code: lambda.Code.fromInline('exports.handler = async () => {}'),
497
+ environment: {
498
+ TABLE_NAME: table.tableName,
499
+ TABLE_ARN: table.tableArn,
500
+ },
501
+ });
502
+
503
+ table.grantReadData(fn);
504
+
505
+ new cdk.CfnOutput(this, 'TableName', { value: table.tableName });
506
+ new cdk.CfnOutput(this, 'TableArn', { value: table.tableArn });
507
+ new cdk.CfnOutput(this, 'FunctionName', { value: fn.functionName });
508
+ }
509
+ }
510
+
482
511
  class DriftableStack extends cdk.Stack {
483
512
  constructor(parent, id, props) {
484
513
  const synthesizer = parent.node.tryGetContext('legacySynth') === 'true' ?
@@ -748,8 +777,8 @@ class CloudControlHotswapStack extends cdk.Stack {
748
777
  agentName: `${cdk.Stack.of(this).stackName}-agent`.substring(0, 40),
749
778
  agentResourceRoleArn: agentRole.roleArn,
750
779
  instruction: process.env.DYNAMIC_CC_PROPERTY_VALUE
751
- ? `You help query the table ${table.tableName}. ${process.env.DYNAMIC_CC_PROPERTY_VALUE}`
752
- : `You help query the table ${table.tableName}. original`,
780
+ ? `You help query the table ${table.tableName}. ${process.env.DYNAMIC_CC_PROPERTY_VALUE}. ${process.env.DYNAMIC_CC_PROPERTY_VALUE_2 ?? 'original'}`
781
+ : `You help query the table ${table.tableName}. original. original`,
753
782
  foundationModel: 'anthropic.claude-instant-v1',
754
783
  });
755
784
 
@@ -1103,6 +1132,8 @@ switch (stackSet) {
1103
1132
 
1104
1133
  new DriftableStack(app, `${stackPrefix}-driftable`);
1105
1134
 
1135
+ new OrphanableStack(app, `${stackPrefix}-orphanable`);
1136
+
1106
1137
  new EarlyValidationStack(app, `${stackPrefix}-early-validation-stack1`);
1107
1138
  new EarlyValidationStack(app, `${stackPrefix}-early-validation-stack2`);
1108
1139
  break;
@@ -0,0 +1,77 @@
1
+ const cdk = require('aws-cdk-lib');
2
+ const s3 = require('aws-cdk-lib/aws-s3');
3
+ const iam = require('aws-cdk-lib/aws-iam');
4
+
5
+ const stackPrefix = process.env.STACK_NAME_PREFIX;
6
+ if (!stackPrefix) {
7
+ throw new Error('the STACK_NAME_PREFIX environment variable is required');
8
+ }
9
+
10
+ const app = new cdk.App({
11
+ context: {
12
+ '@aws-cdk/core:assetHashSalt': process.env.CODEBUILD_BUILD_ID ?? process.env.GITHUB_RUN_ID,
13
+ },
14
+ });
15
+
16
+ const defaultEnv = {
17
+ account: process.env.CDK_DEFAULT_ACCOUNT,
18
+ region: process.env.CDK_DEFAULT_REGION,
19
+ };
20
+
21
+ /**
22
+ * A stack that will fail during deployment because it creates an IAM Policy
23
+ * without the required PolicyDocument property.
24
+ */
25
+ class DeployFailStack extends cdk.Stack {
26
+ constructor(scope, id, props) {
27
+ super(scope, id, props);
28
+
29
+ new cdk.CfnResource(this, 'BadPolicy', {
30
+ type: 'AWS::IAM::Policy',
31
+ properties: {
32
+ PolicyName: 'SomePolicy',
33
+ // Missing required PolicyDocument property — will fail during deployment
34
+ },
35
+ });
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Two stacks that create S3 buckets with the same name.
41
+ * Deploying the first, then the second, triggers an early validation error.
42
+ */
43
+ class EarlyValidationStack extends cdk.Stack {
44
+ constructor(scope, id, props) {
45
+ super(scope, id, props);
46
+
47
+ new s3.Bucket(this, 'MyBucket', {
48
+ bucketName: process.env.BUCKET_NAME,
49
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
50
+ });
51
+ }
52
+ }
53
+
54
+ /**
55
+ * A stack with a named IAM role. Used for the auto-import failure test:
56
+ * deploy with RETAIN, destroy, then re-deploy without RETAIN using --import-existing-resources.
57
+ */
58
+ class ImportFailStack extends cdk.Stack {
59
+ constructor(scope, id, props) {
60
+ super(scope, id, props);
61
+
62
+ const retain = process.env.REMOVAL_POLICY === 'retain';
63
+
64
+ const role = new iam.Role(this, 'MyRole', {
65
+ assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
66
+ roleName: `${stackPrefix}-diagnose-import-role`,
67
+ });
68
+ role.applyRemovalPolicy(retain ? cdk.RemovalPolicy.RETAIN : cdk.RemovalPolicy.DESTROY);
69
+ }
70
+ }
71
+
72
+ new DeployFailStack(app, `${stackPrefix}-diagnose-deploy-fail`, { env: defaultEnv });
73
+ new EarlyValidationStack(app, `${stackPrefix}-diagnose-early-val-1`, { env: defaultEnv });
74
+ new EarlyValidationStack(app, `${stackPrefix}-diagnose-early-val-2`, { env: defaultEnv });
75
+ new ImportFailStack(app, `${stackPrefix}-diagnose-import-fail`, { env: defaultEnv });
76
+
77
+ app.synth();
@@ -0,0 +1,7 @@
1
+ {
2
+ "app": "node app.js",
3
+ "versionReporting": false,
4
+ "context": {
5
+ "aws-cdk:enableDiffNoFail": "true"
6
+ }
7
+ }
@@ -20,7 +20,7 @@ const lib_1 = require("../../../lib");
20
20
  options: ['--import-existing-resources'],
21
21
  allowErrExit: true,
22
22
  });
23
- expect(stdErr).toContain('Import of existing resources failed');
23
+ expect(stdErr).toContain('needs a DeletionPolicy');
24
24
  expect(stdErr).toContain('MyRole');
25
25
  expect(stdErr).toContain('RemovalPolicy.RETAIN');
26
26
  expect(stdErr).toContain('https://docs.aws.amazon.com/cdk/v2/guide/resources.html#resources-removal');
@@ -40,4 +40,4 @@ const lib_1 = require("../../../lib");
40
40
  }
41
41
  }
42
42
  }));
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMtZXJyb3ItbWVzc2FnZS1pbmNsdWRlcy1jb25zdHJ1Y3QtcGF0aHMuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMtZXJyb3ItbWVzc2FnZS1pbmNsdWRlcy1jb25zdHJ1Y3QtcGF0aHMuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0RBQXdEO0FBQ3hELHNDQUE4RDtBQUU5RCxJQUFBLGVBQVMsRUFDUCxrRUFBa0UsRUFDbEUsSUFBQSx5QkFBbUIsRUFBQywrQkFBK0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDckUsTUFBTSxRQUFRLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxjQUFjLENBQUM7SUFFMUQsSUFBSSxDQUFDO1FBQ0gsK0VBQStFO1FBQy9FLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFO1NBQ3JDLENBQUMsQ0FBQztRQUVILGlFQUFpRTtRQUNqRSxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUU7WUFDMUMsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRTtTQUNyQyxDQUFDLENBQUM7UUFFSCw2RUFBNkU7UUFDN0Usb0ZBQW9GO1FBQ3BGLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtZQUN4RCxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO1lBQ3hDLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7UUFFdEcsbUZBQW1GO1FBQ25GLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFO1lBQ3BDLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7WUFBUyxDQUFDO1FBQ1QsK0NBQStDO1FBQy9DLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksOEJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw4QkFBOEI7UUFDaEMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVsZXRlUm9sZUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtaWFtJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aFNwZWNpZmljRml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2ltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyBjb25zdHJ1Y3QgcGF0aHMnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdpbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzLWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgcm9sZU5hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0taW1wb3J0LXJvbGVgO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFN0ZXAgMTogRGVwbG95IHdpdGggUkVUQUlOIHNvIHRoZSByb2xlIGV4aXN0cyBhbmQgY2FuIHN1cnZpdmUgc3RhY2sgZGVsZXRpb25cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnQtZXhpc3RpbmcnLCB7XG4gICAgICAgIG1vZEVudjogeyBSRU1PVkFMX1BPTElDWTogJ3JldGFpbicgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTdGVwIDI6IERlbGV0ZSB0aGUgc3RhY2sg4oCUIHRoZSByb2xlIHN1cnZpdmVzIGJlY2F1c2Ugb2YgUkVUQUlOXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2ltcG9ydC1leGlzdGluZycsIHtcbiAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAncmV0YWluJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFN0ZXAgMzogUmUtZGVwbG95IHdpdGggREVTVFJPWSAobm8gcmV0YWluKSBhbmQgLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzXG4gICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIGJlY2F1c2UgQ2xvdWRGb3JtYXRpb24gcmVxdWlyZXMgRGVsZXRpb25Qb2xpY3k9UmV0YWluIGZvciBpbXBvcnRcbiAgICAgIGNvbnN0IHN0ZEVyciA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnQtZXhpc3RpbmcnLCB7XG4gICAgICAgIG1vZEVudjogeyBSRU1PVkFMX1BPTElDWTogJ2Rlc3Ryb3knIH0sXG4gICAgICAgIG9wdGlvbnM6IFsnLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzJ10sXG4gICAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ0ltcG9ydCBvZiBleGlzdGluZyByZXNvdXJjZXMgZmFpbGVkJyk7XG4gICAgICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ015Um9sZScpO1xuICAgICAgZXhwZWN0KHN0ZEVycikudG9Db250YWluKCdSZW1vdmFsUG9saWN5LlJFVEFJTicpO1xuICAgICAgZXhwZWN0KHN0ZEVycikudG9Db250YWluKCdodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL3YyL2d1aWRlL3Jlc291cmNlcy5odG1sI3Jlc291cmNlcy1yZW1vdmFsJyk7XG5cbiAgICAgIC8vIFN0ZXAgNDogRGVwbG95IHdpdGggUkVUQUlOIGFuZCAtLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMg4oCUIHRoaXMgc2hvdWxkIHN1Y2NlZWRcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnQtZXhpc3RpbmcnLCB7XG4gICAgICAgIG1vZEVudjogeyBSRU1PVkFMX1BPTElDWTogJ3JldGFpbicgfSxcbiAgICAgICAgb3B0aW9uczogWyctLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMnXSxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhbiB1cDogZGVsZXRlIHRoZSByb2xlIGlmIGl0IHdhcyByZXRhaW5lZFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZml4dHVyZS5hd3MuaWFtLnNlbmQobmV3IERlbGV0ZVJvbGVDb21tYW5kKHsgUm9sZU5hbWU6IHJvbGVOYW1lIH0pKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBSb2xlIG1heSBhbHJlYWR5IGJlIGRlbGV0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKTtcbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMtZXJyb3ItbWVzc2FnZS1pbmNsdWRlcy1jb25zdHJ1Y3QtcGF0aHMuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMtZXJyb3ItbWVzc2FnZS1pbmNsdWRlcy1jb25zdHJ1Y3QtcGF0aHMuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0RBQXdEO0FBQ3hELHNDQUE4RDtBQUU5RCxJQUFBLGVBQVMsRUFDUCxrRUFBa0UsRUFDbEUsSUFBQSx5QkFBbUIsRUFBQywrQkFBK0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDckUsTUFBTSxRQUFRLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxjQUFjLENBQUM7SUFFMUQsSUFBSSxDQUFDO1FBQ0gsK0VBQStFO1FBQy9FLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFO1NBQ3JDLENBQUMsQ0FBQztRQUVILGlFQUFpRTtRQUNqRSxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUU7WUFDMUMsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRTtTQUNyQyxDQUFDLENBQUM7UUFFSCw2RUFBNkU7UUFDN0Usb0ZBQW9GO1FBQ3BGLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtZQUN4RCxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO1lBQ3hDLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNuRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7UUFFdEcsbUZBQW1GO1FBQ25GLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFO1lBQ3BDLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7WUFBUyxDQUFDO1FBQ1QsK0NBQStDO1FBQy9DLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksOEJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw4QkFBOEI7UUFDaEMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVsZXRlUm9sZUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtaWFtJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aFNwZWNpZmljRml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2ltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyBjb25zdHJ1Y3QgcGF0aHMnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdpbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzLWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgcm9sZU5hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0taW1wb3J0LXJvbGVgO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFN0ZXAgMTogRGVwbG95IHdpdGggUkVUQUlOIHNvIHRoZSByb2xlIGV4aXN0cyBhbmQgY2FuIHN1cnZpdmUgc3RhY2sgZGVsZXRpb25cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnQtZXhpc3RpbmcnLCB7XG4gICAgICAgIG1vZEVudjogeyBSRU1PVkFMX1BPTElDWTogJ3JldGFpbicgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTdGVwIDI6IERlbGV0ZSB0aGUgc3RhY2sg4oCUIHRoZSByb2xlIHN1cnZpdmVzIGJlY2F1c2Ugb2YgUkVUQUlOXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2ltcG9ydC1leGlzdGluZycsIHtcbiAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAncmV0YWluJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFN0ZXAgMzogUmUtZGVwbG95IHdpdGggREVTVFJPWSAobm8gcmV0YWluKSBhbmQgLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzXG4gICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIGJlY2F1c2UgQ2xvdWRGb3JtYXRpb24gcmVxdWlyZXMgRGVsZXRpb25Qb2xpY3k9UmV0YWluIGZvciBpbXBvcnRcbiAgICAgIGNvbnN0IHN0ZEVyciA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnQtZXhpc3RpbmcnLCB7XG4gICAgICAgIG1vZEVudjogeyBSRU1PVkFMX1BPTElDWTogJ2Rlc3Ryb3knIH0sXG4gICAgICAgIG9wdGlvbnM6IFsnLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzJ10sXG4gICAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ25lZWRzIGEgRGVsZXRpb25Qb2xpY3knKTtcbiAgICAgIGV4cGVjdChzdGRFcnIpLnRvQ29udGFpbignTXlSb2xlJyk7XG4gICAgICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ1JlbW92YWxQb2xpY3kuUkVUQUlOJyk7XG4gICAgICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ2h0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvdjIvZ3VpZGUvcmVzb3VyY2VzLmh0bWwjcmVzb3VyY2VzLXJlbW92YWwnKTtcblxuICAgICAgLy8gU3RlcCA0OiBEZXBsb3kgd2l0aCBSRVRBSU4gYW5kIC0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcyDigJQgdGhpcyBzaG91bGQgc3VjY2VlZFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydC1leGlzdGluZycsIHtcbiAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAncmV0YWluJyB9LFxuICAgICAgICBvcHRpb25zOiBbJy0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcyddLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFuIHVwOiBkZWxldGUgdGhlIHJvbGUgaWYgaXQgd2FzIHJldGFpbmVkXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChuZXcgRGVsZXRlUm9sZUNvbW1hbmQoeyBSb2xlTmFtZTogcm9sZU5hbWUgfSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFJvbGUgbWF5IGFscmVhZHkgYmUgZGVsZXRlZFxuICAgICAgfVxuICAgIH1cbiAgfSksXG4pO1xuIl19
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
4
+ const lib_1 = require("../../../lib");
5
+ (0, lib_1.integTest)('two-step deploy: prepare then execute change set', (0, lib_1.withDefaultFixture)(async (fixture) => {
6
+ const changeSetName = `review-${fixture.stackNamePrefix}`;
7
+ const stackName = 'test-2';
8
+ const fullStackName = fixture.fullStackName(stackName);
9
+ // Step 1: Create the change set without executing it
10
+ await fixture.cdkDeploy(stackName, {
11
+ options: ['--method=prepare-change-set', '--change-set-name', changeSetName],
12
+ captureStderr: false,
13
+ });
14
+ // Verify the stack is in REVIEW_IN_PROGRESS
15
+ const describeResponse = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: fullStackName }));
16
+ expect(describeResponse.Stacks?.[0].StackStatus).toEqual('REVIEW_IN_PROGRESS');
17
+ // Verify the change set exists and is ready
18
+ const changeSetResponse = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeChangeSetCommand({
19
+ StackName: fullStackName,
20
+ ChangeSetName: changeSetName,
21
+ }));
22
+ expect(changeSetResponse.Status).toEqual('CREATE_COMPLETE');
23
+ // Step 2: Execute the change set
24
+ await fixture.cdk([
25
+ 'deploy',
26
+ '--require-approval=never',
27
+ '--method=execute-change-set',
28
+ '--change-set-name', changeSetName,
29
+ '--progress', 'events',
30
+ fullStackName,
31
+ ]);
32
+ // Verify the stack is now deployed
33
+ const finalResponse = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: fullStackName }));
34
+ expect(finalResponse.Stacks?.[0].StackStatus).toEqual('CREATE_COMPLETE');
35
+ }));
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXR3by1zdGVwLWRlcGxveS1wcmVwYXJlLXRoZW4tZXhlY3V0ZS1jaGFuZ2Utc2V0LmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10d28tc3RlcC1kZXBsb3ktcHJlcGFyZS10aGVuLWV4ZWN1dGUtY2hhbmdlLXNldC5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBaUc7QUFDakcsc0NBQTZEO0FBRTdELElBQUEsZUFBUyxFQUNQLGtEQUFrRCxFQUNsRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLGFBQWEsR0FBRyxVQUFVLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDM0IsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2RCxxREFBcUQ7SUFDckQsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtRQUNqQyxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLENBQUM7UUFDNUUsYUFBYSxFQUFFLEtBQUs7S0FDckIsQ0FBQyxDQUFDO0lBRUgsNENBQTRDO0lBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzVELElBQUksNkNBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FDeEQsQ0FBQztJQUNGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUUvRSw0Q0FBNEM7SUFDNUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDN0QsSUFBSSxnREFBd0IsQ0FBQztRQUMzQixTQUFTLEVBQUUsYUFBYTtRQUN4QixhQUFhLEVBQUUsYUFBYTtLQUM3QixDQUFDLENBQ0gsQ0FBQztJQUNGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUU1RCxpQ0FBaUM7SUFDakMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2hCLFFBQVE7UUFDUiwwQkFBMEI7UUFDMUIsNkJBQTZCO1FBQzdCLG1CQUFtQixFQUFFLGFBQWE7UUFDbEMsWUFBWSxFQUFFLFFBQVE7UUFDdEIsYUFBYTtLQUNkLENBQUMsQ0FBQztJQUVILG1DQUFtQztJQUNuQyxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDekQsSUFBSSw2Q0FBcUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUN4RCxDQUFDO0lBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMzRSxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kLCBEZXNjcmliZVN0YWNrc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5pbnRlZ1Rlc3QoXG4gICd0d28tc3RlcCBkZXBsb3k6IHByZXBhcmUgdGhlbiBleGVjdXRlIGNoYW5nZSBzZXQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBjaGFuZ2VTZXROYW1lID0gYHJldmlldy0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWA7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ3Rlc3QtMic7XG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpO1xuXG4gICAgLy8gU3RlcCAxOiBDcmVhdGUgdGhlIGNoYW5nZSBzZXQgd2l0aG91dCBleGVjdXRpbmcgaXRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1tZXRob2Q9cHJlcGFyZS1jaGFuZ2Utc2V0JywgJy0tY2hhbmdlLXNldC1uYW1lJywgY2hhbmdlU2V0TmFtZV0sXG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIFZlcmlmeSB0aGUgc3RhY2sgaXMgaW4gUkVWSUVXX0lOX1BST0dSRVNTXG4gICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGRlc2NyaWJlUmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1JFVklFV19JTl9QUk9HUkVTUycpO1xuXG4gICAgLy8gVmVyaWZ5IHRoZSBjaGFuZ2Ugc2V0IGV4aXN0cyBhbmQgaXMgcmVhZHlcbiAgICBjb25zdCBjaGFuZ2VTZXRSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lLFxuICAgICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0UmVzcG9uc2UuU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcblxuICAgIC8vIFN0ZXAgMjogRXhlY3V0ZSB0aGUgY2hhbmdlIHNldFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFtcbiAgICAgICdkZXBsb3knLFxuICAgICAgJy0tcmVxdWlyZS1hcHByb3ZhbD1uZXZlcicsXG4gICAgICAnLS1tZXRob2Q9ZXhlY3V0ZS1jaGFuZ2Utc2V0JyxcbiAgICAgICctLWNoYW5nZS1zZXQtbmFtZScsIGNoYW5nZVNldE5hbWUsXG4gICAgICAnLS1wcm9ncmVzcycsICdldmVudHMnLFxuICAgICAgZnVsbFN0YWNrTmFtZSxcbiAgICBdKTtcblxuICAgIC8vIFZlcmlmeSB0aGUgc3RhY2sgaXMgbm93IGRlcGxveWVkXG4gICAgY29uc3QgZmluYWxSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGZpbmFsUmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICB9KSxcbik7XG4iXX0=
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const client_iam_1 = require("@aws-sdk/client-iam");
4
+ const lib_1 = require("../../../lib");
5
+ (0, lib_1.integTest)('cdk diagnose after changeset failure (auto-import)', (0, lib_1.withSpecificFixture)('diagnose-app', async (fixture) => {
6
+ const roleName = `${fixture.stackNamePrefix}-diagnose-import-role`;
7
+ try {
8
+ // Step 1: Deploy with RETAIN so the role survives stack deletion
9
+ await fixture.cdkDeploy('diagnose-import-fail', {
10
+ modEnv: { REMOVAL_POLICY: 'retain' },
11
+ });
12
+ // Step 2: Delete the stack — the role survives because of RETAIN
13
+ await fixture.cdkDestroy('diagnose-import-fail', {
14
+ modEnv: { REMOVAL_POLICY: 'retain' },
15
+ });
16
+ // Step 3: Re-deploy with DESTROY (no retain) and --import-existing-resources
17
+ // This should fail because CloudFormation requires DeletionPolicy=Retain for import
18
+ const deployOutput = await fixture.cdkDeploy('diagnose-import-fail', {
19
+ modEnv: { REMOVAL_POLICY: 'destroy' },
20
+ options: ['--import-existing-resources'],
21
+ allowErrExit: true,
22
+ });
23
+ expect(deployOutput).toContain('DeletionPolicy');
24
+ // Step 4: Run cdk diagnose
25
+ const diagnoseOutput = await fixture.cdk(['--unstable=diagnose', 'diagnose', fixture.fullStackName('diagnose-import-fail')], {
26
+ modEnv: { REMOVAL_POLICY: 'destroy' },
27
+ allowErrExit: true,
28
+ });
29
+ // The diagnose output should mention the import issue
30
+ expect(diagnoseOutput).toContain('diagnose-import-fail');
31
+ expect(diagnoseOutput).toContain('DeletionPolicy');
32
+ }
33
+ finally {
34
+ // Clean up: delete the role if it was retained
35
+ try {
36
+ await fixture.aws.iam.send(new client_iam_1.DeleteRoleCommand({ RoleName: roleName }));
37
+ }
38
+ catch {
39
+ // Role may already be deleted
40
+ }
41
+ }
42
+ }));
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRpYWdub3NlLWNoYW5nZXNldC1mYWlsdXJlLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1kaWFnbm9zZS1jaGFuZ2VzZXQtZmFpbHVyZS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFBd0Q7QUFDeEQsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLG9EQUFvRCxFQUNwRCxJQUFBLHlCQUFtQixFQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDcEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSx1QkFBdUIsQ0FBQztJQUVuRSxJQUFJLENBQUM7UUFDSCxpRUFBaUU7UUFDakUsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFO1lBQzlDLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUU7U0FDckMsQ0FBQyxDQUFDO1FBRUgsaUVBQWlFO1FBQ2pFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRTtZQUMvQyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFO1NBQ3JDLENBQUMsQ0FBQztRQUVILDZFQUE2RTtRQUM3RSxvRkFBb0Y7UUFDcEYsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFO1lBQ25FLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUU7WUFDckMsT0FBTyxFQUFFLENBQUMsNkJBQTZCLENBQUM7WUFDeEMsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWpELDJCQUEyQjtRQUMzQixNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxFQUNsRjtZQUNFLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUU7WUFDckMsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FDRixDQUFDO1FBRUYsc0RBQXNEO1FBQ3RELE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckQsQ0FBQztZQUFTLENBQUM7UUFDVCwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSw4QkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDhCQUE4QjtRQUNoQyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWxldGVSb2xlQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1pYW0nO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpYWdub3NlIGFmdGVyIGNoYW5nZXNldCBmYWlsdXJlIChhdXRvLWltcG9ydCknLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdkaWFnbm9zZS1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHJvbGVOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LWRpYWdub3NlLWltcG9ydC1yb2xlYDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBTdGVwIDE6IERlcGxveSB3aXRoIFJFVEFJTiBzbyB0aGUgcm9sZSBzdXJ2aXZlcyBzdGFjayBkZWxldGlvblxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RpYWdub3NlLWltcG9ydC1mYWlsJywge1xuICAgICAgICBtb2RFbnY6IHsgUkVNT1ZBTF9QT0xJQ1k6ICdyZXRhaW4nIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gU3RlcCAyOiBEZWxldGUgdGhlIHN0YWNrIOKAlCB0aGUgcm9sZSBzdXJ2aXZlcyBiZWNhdXNlIG9mIFJFVEFJTlxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdkaWFnbm9zZS1pbXBvcnQtZmFpbCcsIHtcbiAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAncmV0YWluJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFN0ZXAgMzogUmUtZGVwbG95IHdpdGggREVTVFJPWSAobm8gcmV0YWluKSBhbmQgLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzXG4gICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIGJlY2F1c2UgQ2xvdWRGb3JtYXRpb24gcmVxdWlyZXMgRGVsZXRpb25Qb2xpY3k9UmV0YWluIGZvciBpbXBvcnRcbiAgICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkaWFnbm9zZS1pbXBvcnQtZmFpbCcsIHtcbiAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAnZGVzdHJveScgfSxcbiAgICAgICAgb3B0aW9uczogWyctLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMnXSxcbiAgICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignRGVsZXRpb25Qb2xpY3knKTtcblxuICAgICAgLy8gU3RlcCA0OiBSdW4gY2RrIGRpYWdub3NlXG4gICAgICBjb25zdCBkaWFnbm9zZU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFxuICAgICAgICBbJy0tdW5zdGFibGU9ZGlhZ25vc2UnLCAnZGlhZ25vc2UnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RpYWdub3NlLWltcG9ydC1mYWlsJyldLFxuICAgICAgICB7XG4gICAgICAgICAgbW9kRW52OiB7IFJFTU9WQUxfUE9MSUNZOiAnZGVzdHJveScgfSxcbiAgICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICAvLyBUaGUgZGlhZ25vc2Ugb3V0cHV0IHNob3VsZCBtZW50aW9uIHRoZSBpbXBvcnQgaXNzdWVcbiAgICAgIGV4cGVjdChkaWFnbm9zZU91dHB1dCkudG9Db250YWluKCdkaWFnbm9zZS1pbXBvcnQtZmFpbCcpO1xuICAgICAgZXhwZWN0KGRpYWdub3NlT3V0cHV0KS50b0NvbnRhaW4oJ0RlbGV0aW9uUG9saWN5Jyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFuIHVwOiBkZWxldGUgdGhlIHJvbGUgaWYgaXQgd2FzIHJldGFpbmVkXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChuZXcgRGVsZXRlUm9sZUNvbW1hbmQoeyBSb2xlTmFtZTogcm9sZU5hbWUgfSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFJvbGUgbWF5IGFscmVhZHkgYmUgZGVsZXRlZFxuICAgICAgfVxuICAgIH1cbiAgfSksXG4pO1xuIl19
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ (0, lib_1.integTest)('cdk diagnose after deployment failure', (0, lib_1.withSpecificFixture)('diagnose-app', async (fixture) => {
5
+ // Deploy a stack that will fail (IAM Policy without PolicyDocument)
6
+ const deployOutput = await fixture.cdkDeploy('diagnose-deploy-fail', {
7
+ allowErrExit: true,
8
+ });
9
+ // The deploy should have failed.
10
+ // Missing property failure counts as "early validation failure".
11
+ expect(deployOutput).toContain('Early validation failed for change set');
12
+ expect(deployOutput).toContain('Required property [PolicyDocument] not found');
13
+ // Run cdk diagnose on the failed stack
14
+ const diagnoseOutput = await fixture.cdk(['--unstable=diagnose', 'diagnose', fixture.fullStackName('diagnose-deploy-fail')], { allowErrExit: true });
15
+ // The diagnose output should mention the stack and contain error information
16
+ expect(diagnoseOutput).toContain('diagnose-deploy-fail');
17
+ expect(diagnoseOutput).toContain('Early validation failed for change set');
18
+ expect(diagnoseOutput).toContain('Required property [PolicyDocument] not found');
19
+ }));
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRpYWdub3NlLWRlcGxveW1lbnQtZmFpbHVyZS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstZGlhZ25vc2UtZGVwbG95bWVudC1mYWlsdXJlLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE4RDtBQUU5RCxJQUFBLGVBQVMsRUFDUCx1Q0FBdUMsRUFDdkMsSUFBQSx5QkFBbUIsRUFBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ3BELG9FQUFvRTtJQUNwRSxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUU7UUFDbkUsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQyxDQUFDO0lBRUgsaUNBQWlDO0lBQ2pDLGlFQUFpRTtJQUNqRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDekUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBRS9FLHVDQUF1QztJQUN2QyxNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxFQUNsRixFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FDdkIsQ0FBQztJQUVGLDZFQUE2RTtJQUM3RSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsOENBQThDLENBQUMsQ0FBQztBQUNuRixDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpYWdub3NlIGFmdGVyIGRlcGxveW1lbnQgZmFpbHVyZScsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ2RpYWdub3NlLWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IGEgc3RhY2sgdGhhdCB3aWxsIGZhaWwgKElBTSBQb2xpY3kgd2l0aG91dCBQb2xpY3lEb2N1bWVudClcbiAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGlhZ25vc2UtZGVwbG95LWZhaWwnLCB7XG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZGVwbG95IHNob3VsZCBoYXZlIGZhaWxlZC5cbiAgICAvLyBNaXNzaW5nIHByb3BlcnR5IGZhaWx1cmUgY291bnRzIGFzIFwiZWFybHkgdmFsaWRhdGlvbiBmYWlsdXJlXCIuXG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdFYXJseSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgY2hhbmdlIHNldCcpO1xuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignUmVxdWlyZWQgcHJvcGVydHkgW1BvbGljeURvY3VtZW50XSBub3QgZm91bmQnKTtcblxuICAgIC8vIFJ1biBjZGsgZGlhZ25vc2Ugb24gdGhlIGZhaWxlZCBzdGFja1xuICAgIGNvbnN0IGRpYWdub3NlT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgICBbJy0tdW5zdGFibGU9ZGlhZ25vc2UnLCAnZGlhZ25vc2UnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RpYWdub3NlLWRlcGxveS1mYWlsJyldLFxuICAgICAgeyBhbGxvd0VyckV4aXQ6IHRydWUgfSxcbiAgICApO1xuXG4gICAgLy8gVGhlIGRpYWdub3NlIG91dHB1dCBzaG91bGQgbWVudGlvbiB0aGUgc3RhY2sgYW5kIGNvbnRhaW4gZXJyb3IgaW5mb3JtYXRpb25cbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbignZGlhZ25vc2UtZGVwbG95LWZhaWwnKTtcbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbignRWFybHkgdmFsaWRhdGlvbiBmYWlsZWQgZm9yIGNoYW5nZSBzZXQnKTtcbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbignUmVxdWlyZWQgcHJvcGVydHkgW1BvbGljeURvY3VtZW50XSBub3QgZm91bmQnKTtcbiAgfSksXG4pO1xuIl19
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const node_crypto_1 = require("node:crypto");
4
+ const lib_1 = require("../../../lib");
5
+ (0, lib_1.integTest)('cdk diagnose after early validation failure', (0, lib_1.withSpecificFixture)('diagnose-app', async (fixture) => {
6
+ const bucketName = (0, node_crypto_1.randomUUID)();
7
+ // Deploy the first stack with a named bucket — should succeed
8
+ await fixture.cdkDeploy('diagnose-early-val-1', {
9
+ modEnv: { BUCKET_NAME: bucketName },
10
+ });
11
+ // Deploy the second stack with the same bucket name — should fail with early validation
12
+ const deployOutput = await fixture.cdkDeploy('diagnose-early-val-2', {
13
+ modEnv: { BUCKET_NAME: bucketName },
14
+ allowErrExit: true,
15
+ });
16
+ expect(deployOutput).toContain('already exists');
17
+ // Run cdk diagnose on the second stack
18
+ const diagnoseOutput = await fixture.cdk(['--unstable=diagnose', 'diagnose', fixture.fullStackName('diagnose-early-val-2')], {
19
+ modEnv: { BUCKET_NAME: bucketName },
20
+ allowErrExit: true,
21
+ });
22
+ // The diagnose output should mention the stack and the validation error
23
+ expect(diagnoseOutput).toContain('diagnose-early-val-2');
24
+ expect(diagnoseOutput).toContain('already exists');
25
+ }));
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRpYWdub3NlLWVhcmx5LXZhbGlkYXRpb24tZmFpbHVyZS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstZGlhZ25vc2UtZWFybHktdmFsaWRhdGlvbi1mYWlsdXJlLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUF5QztBQUN6QyxzQ0FBOEQ7QUFFOUQsSUFBQSxlQUFTLEVBQ1AsNkNBQTZDLEVBQzdDLElBQUEseUJBQW1CLEVBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFBLHdCQUFVLEdBQUUsQ0FBQztJQUVoQyw4REFBOEQ7SUFDOUQsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFO1FBQzlDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUU7S0FDcEMsQ0FBQyxDQUFDO0lBRUgsd0ZBQXdGO0lBQ3hGLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRTtRQUNuRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFO1FBQ25DLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVqRCx1Q0FBdUM7SUFDdkMsTUFBTSxjQUFjLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUN0QyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFDbEY7UUFDRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFO1FBQ25DLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQ0YsQ0FBQztJQUVGLHdFQUF3RTtJQUN4RSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpYWdub3NlIGFmdGVyIGVhcmx5IHZhbGlkYXRpb24gZmFpbHVyZScsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ2RpYWdub3NlLWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgYnVja2V0TmFtZSA9IHJhbmRvbVVVSUQoKTtcblxuICAgIC8vIERlcGxveSB0aGUgZmlyc3Qgc3RhY2sgd2l0aCBhIG5hbWVkIGJ1Y2tldCDigJQgc2hvdWxkIHN1Y2NlZWRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGlhZ25vc2UtZWFybHktdmFsLTEnLCB7XG4gICAgICBtb2RFbnY6IHsgQlVDS0VUX05BTUU6IGJ1Y2tldE5hbWUgfSxcbiAgICB9KTtcblxuICAgIC8vIERlcGxveSB0aGUgc2Vjb25kIHN0YWNrIHdpdGggdGhlIHNhbWUgYnVja2V0IG5hbWUg4oCUIHNob3VsZCBmYWlsIHdpdGggZWFybHkgdmFsaWRhdGlvblxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkaWFnbm9zZS1lYXJseS12YWwtMicsIHtcbiAgICAgIG1vZEVudjogeyBCVUNLRVRfTkFNRTogYnVja2V0TmFtZSB9LFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdhbHJlYWR5IGV4aXN0cycpO1xuXG4gICAgLy8gUnVuIGNkayBkaWFnbm9zZSBvbiB0aGUgc2Vjb25kIHN0YWNrXG4gICAgY29uc3QgZGlhZ25vc2VPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICAgIFsnLS11bnN0YWJsZT1kaWFnbm9zZScsICdkaWFnbm9zZScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnZGlhZ25vc2UtZWFybHktdmFsLTInKV0sXG4gICAgICB7XG4gICAgICAgIG1vZEVudjogeyBCVUNLRVRfTkFNRTogYnVja2V0TmFtZSB9LFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBUaGUgZGlhZ25vc2Ugb3V0cHV0IHNob3VsZCBtZW50aW9uIHRoZSBzdGFjayBhbmQgdGhlIHZhbGlkYXRpb24gZXJyb3JcbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbignZGlhZ25vc2UtZWFybHktdmFsLTInKTtcbiAgICBleHBlY3QoZGlhZ25vc2VPdXRwdXQpLnRvQ29udGFpbignYWxyZWFkeSBleGlzdHMnKTtcbiAgfSksXG4pO1xuIl19
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+ const lib_1 = require("../../../lib");
6
+ const regions_1 = require("../../../lib/regions");
7
+ jest.setTimeout(5 * 60 * 1000);
8
+ (0, lib_1.integTest)('hotswap deployment caches template and uses it for subsequent hotswaps', (0, lib_1.withDefaultFixture)(async (fixture) => {
9
+ const stackName = 'cc-hotswap';
10
+ // GIVEN - initial full deploy
11
+ await fixture.cdkDeploy(stackName, {
12
+ captureStderr: false,
13
+ modEnv: {
14
+ DYNAMIC_CC_PROPERTY_VALUE: 'v1',
15
+ DYNAMIC_CC_PROPERTY_VALUE_2: 'v1',
16
+ },
17
+ });
18
+ // WHEN - first hotswap changes ALL resources, creates the cache
19
+ await fixture.cdkDeploy(stackName, {
20
+ options: ['--hotswap'],
21
+ captureStderr: false,
22
+ modEnv: {
23
+ DYNAMIC_CC_PROPERTY_VALUE: 'v2',
24
+ DYNAMIC_CC_PROPERTY_VALUE_2: 'v2',
25
+ },
26
+ });
27
+ const fullStackName = fixture.fullStackName(stackName);
28
+ const cacheFile = path.join(fixture.integTestDir, 'cdk.out', '.hotswap-cache', `${fullStackName}.json`);
29
+ expect(fs.existsSync(cacheFile)).toBe(true);
30
+ // THEN - second hotswap changes only the Agent (via DYNAMIC_CC_PROPERTY_VALUE_2).
31
+ // If the cache is used, the diff is against the cached template, only 1 resource should be hotswapped.
32
+ const deployOutput = await fixture.cdkDeploy(stackName, {
33
+ options: ['--hotswap'],
34
+ captureStderr: true,
35
+ onlyStderr: true,
36
+ modEnv: {
37
+ DYNAMIC_CC_PROPERTY_VALUE: 'v2', // unchanged from first hotswap
38
+ DYNAMIC_CC_PROPERTY_VALUE_2: 'v3',
39
+ },
40
+ });
41
+ // should only see one hotswapped message in output
42
+ const hotswapCount = (deployOutput.match(/hotswapped!/g) || []).length;
43
+ expect(hotswapCount).toBe(1);
44
+ }, { aws: { regions: regions_1.BEDROCK_AGENT_REGIONS } }));
45
+ (0, lib_1.integTest)('hotswap cache is invalidated after a full CloudFormation deployment', (0, lib_1.withDefaultFixture)(async (fixture) => {
46
+ // GIVEN - deploy then hotswap to create cache
47
+ await fixture.cdkDeploy('lambda-hotswap', {
48
+ captureStderr: false,
49
+ modEnv: {
50
+ DYNAMIC_LAMBDA_PROPERTY_VALUE: 'v1',
51
+ },
52
+ });
53
+ await fixture.cdkDeploy('lambda-hotswap', {
54
+ options: ['--hotswap'],
55
+ captureStderr: false,
56
+ modEnv: {
57
+ DYNAMIC_LAMBDA_PROPERTY_VALUE: 'v2',
58
+ },
59
+ });
60
+ const stackName = fixture.fullStackName('lambda-hotswap');
61
+ const cacheFile = path.join(fixture.integTestDir, 'cdk.out', '.hotswap-cache', `${stackName}.json`);
62
+ expect(fs.existsSync(cacheFile)).toBe(true);
63
+ // WHEN - full CFN deploy
64
+ await fixture.cdkDeploy('lambda-hotswap', {
65
+ captureStderr: false,
66
+ modEnv: {
67
+ DYNAMIC_LAMBDA_PROPERTY_VALUE: 'v3',
68
+ },
69
+ });
70
+ // THEN - cache should be invalidated
71
+ expect(fs.existsSync(cacheFile)).toBe(false);
72
+ }));
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWhvdHN3YXAtZGVwbG95bWVudC1jYWNoZXMtdGVtcGxhdGUuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWhvdHN3YXAtZGVwbG95bWVudC1jYWNoZXMtdGVtcGxhdGUuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixzQ0FBNkQ7QUFDN0Qsa0RBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUUvQixJQUFBLGVBQVMsRUFDUCx3RUFBd0UsRUFDeEUsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDO0lBRS9CLDhCQUE4QjtJQUM5QixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ2pDLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLE1BQU0sRUFBRTtZQUNOLHlCQUF5QixFQUFFLElBQUk7WUFDL0IsMkJBQTJCLEVBQUUsSUFBSTtTQUNsQztLQUNGLENBQUMsQ0FBQztJQUVILGdFQUFnRTtJQUNoRSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ2pDLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN0QixhQUFhLEVBQUUsS0FBSztRQUNwQixNQUFNLEVBQUU7WUFDTix5QkFBeUIsRUFBRSxJQUFJO1lBQy9CLDJCQUEyQixFQUFFLElBQUk7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxhQUFhLE9BQU8sQ0FBQyxDQUFDO0lBQ3hHLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVDLGtGQUFrRjtJQUNsRix1R0FBdUc7SUFDdkcsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtRQUN0RCxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDdEIsYUFBYSxFQUFFLElBQUk7UUFDbkIsVUFBVSxFQUFFLElBQUk7UUFDaEIsTUFBTSxFQUFFO1lBQ04seUJBQXlCLEVBQUUsSUFBSSxFQUFFLCtCQUErQjtZQUNoRSwyQkFBMkIsRUFBRSxJQUFJO1NBQ2xDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsbURBQW1EO0lBQ25ELE1BQU0sWUFBWSxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0JBQXFCLEVBQUUsRUFBRSxDQUFDLENBQ2hELENBQUM7QUFFRixJQUFBLGVBQVMsRUFDUCxxRUFBcUUsRUFDckUsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsOENBQThDO0lBQzlDLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN4QyxhQUFhLEVBQUUsS0FBSztRQUNwQixNQUFNLEVBQUU7WUFDTiw2QkFBNkIsRUFBRSxJQUFJO1NBQ3BDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFO1FBQ3hDLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN0QixhQUFhLEVBQUUsS0FBSztRQUNwQixNQUFNLEVBQUU7WUFDTiw2QkFBNkIsRUFBRSxJQUFJO1NBQ3BDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxTQUFTLE9BQU8sQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVDLHlCQUF5QjtJQUN6QixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUU7UUFDeEMsYUFBYSxFQUFFLEtBQUs7UUFDcEIsTUFBTSxFQUFFO1lBQ04sNkJBQTZCLEVBQUUsSUFBSTtTQUNwQztLQUNGLENBQUMsQ0FBQztJQUVILHFDQUFxQztJQUNyQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCB7IEJFRFJPQ0tfQUdFTlRfUkVHSU9OUyB9IGZyb20gJy4uLy4uLy4uL2xpYi9yZWdpb25zJztcblxuamVzdC5zZXRUaW1lb3V0KDUgKiA2MCAqIDEwMDApO1xuXG5pbnRlZ1Rlc3QoXG4gICdob3Rzd2FwIGRlcGxveW1lbnQgY2FjaGVzIHRlbXBsYXRlIGFuZCB1c2VzIGl0IGZvciBzdWJzZXF1ZW50IGhvdHN3YXBzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2NjLWhvdHN3YXAnO1xuXG4gICAgLy8gR0lWRU4gLSBpbml0aWFsIGZ1bGwgZGVwbG95XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koc3RhY2tOYW1lLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFOiAndjEnLFxuICAgICAgICBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFXzI6ICd2MScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTiAtIGZpcnN0IGhvdHN3YXAgY2hhbmdlcyBBTEwgcmVzb3VyY2VzLCBjcmVhdGVzIHRoZSBjYWNoZVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICd2MicsXG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUVfMjogJ3YyJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSk7XG4gICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcsICcuaG90c3dhcC1jYWNoZScsIGAke2Z1bGxTdGFja05hbWV9Lmpzb25gKTtcbiAgICBleHBlY3QoZnMuZXhpc3RzU3luYyhjYWNoZUZpbGUpKS50b0JlKHRydWUpO1xuXG4gICAgLy8gVEhFTiAtIHNlY29uZCBob3Rzd2FwIGNoYW5nZXMgb25seSB0aGUgQWdlbnQgKHZpYSBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFXzIpLlxuICAgIC8vIElmIHRoZSBjYWNoZSBpcyB1c2VkLCB0aGUgZGlmZiBpcyBhZ2FpbnN0IHRoZSBjYWNoZWQgdGVtcGxhdGUsIG9ubHkgMSByZXNvdXJjZSBzaG91bGQgYmUgaG90c3dhcHBlZC5cbiAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0NDX1BST1BFUlRZX1ZBTFVFOiAndjInLCAvLyB1bmNoYW5nZWQgZnJvbSBmaXJzdCBob3Rzd2FwXG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUVfMjogJ3YzJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBzaG91bGQgb25seSBzZWUgb25lIGhvdHN3YXBwZWQgbWVzc2FnZSBpbiBvdXRwdXRcbiAgICBjb25zdCBob3Rzd2FwQ291bnQgPSAoZGVwbG95T3V0cHV0Lm1hdGNoKC9ob3Rzd2FwcGVkIS9nKSB8fCBbXSkubGVuZ3RoO1xuICAgIGV4cGVjdChob3Rzd2FwQ291bnQpLnRvQmUoMSk7XG4gIH0sIHsgYXdzOiB7IHJlZ2lvbnM6IEJFRFJPQ0tfQUdFTlRfUkVHSU9OUyB9IH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBjYWNoZSBpcyBpbnZhbGlkYXRlZCBhZnRlciBhIGZ1bGwgQ2xvdWRGb3JtYXRpb24gZGVwbG95bWVudCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOIC0gZGVwbG95IHRoZW4gaG90c3dhcCB0byBjcmVhdGUgY2FjaGVcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ3YxJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgRFlOQU1JQ19MQU1CREFfUFJPUEVSVFlfVkFMVUU6ICd2MicsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdsYW1iZGEtaG90c3dhcCcpO1xuICAgIGNvbnN0IGNhY2hlRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5vdXQnLCAnLmhvdHN3YXAtY2FjaGUnLCBgJHtzdGFja05hbWV9Lmpzb25gKTtcbiAgICBleHBlY3QoZnMuZXhpc3RzU3luYyhjYWNoZUZpbGUpKS50b0JlKHRydWUpO1xuXG4gICAgLy8gV0hFTiAtIGZ1bGwgQ0ZOIGRlcGxveVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfTEFNQkRBX1BST1BFUlRZX1ZBTFVFOiAndjMnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU4gLSBjYWNoZSBzaG91bGQgYmUgaW52YWxpZGF0ZWRcbiAgICBleHBlY3QoZnMuZXhpc3RzU3luYyhjYWNoZUZpbGUpKS50b0JlKGZhbHNlKTtcbiAgfSksXG4pO1xuIl19
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
4
4
  const lib_1 = require("../../../lib");
5
+ const regions_1 = require("../../../lib/regions");
5
6
  jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
6
7
  (0, lib_1.integTest)('hotswap deployment supports CloudControl-based resources with attribute resolution', (0, lib_1.withDefaultFixture)(async (fixture) => {
7
8
  // GIVEN
@@ -37,5 +38,5 @@ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-c
37
38
  expect(queueUrl).toBeDefined();
38
39
  expect(agentName).toBeDefined();
39
40
  expect(ruleName).toBeDefined();
40
- }));
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWhvdHN3YXAtZGVwbG95bWVudC1zdXBwb3J0cy1jbG91ZGNvbnRyb2wtYmFzZWQtcmVzb3VyY2VzLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1ob3Rzd2FwLWRlcGxveW1lbnQtc3VwcG9ydHMtY2xvdWRjb250cm9sLWJhc2VkLXJlc291cmNlcy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBdUU7QUFDdkUsc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCxvRkFBb0YsRUFDcEYsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsUUFBUTtJQUNSLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQztJQUMvQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ2pDLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLE1BQU0sRUFBRTtZQUNOLHlCQUF5QixFQUFFLGdCQUFnQjtTQUM1QztLQUNGLENBQUMsQ0FBQztJQUVILE9BQU87SUFDUCxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ3RELE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN0QixhQUFhLEVBQUUsSUFBSTtRQUNuQixVQUFVLEVBQUUsSUFBSTtRQUNoQixNQUFNLEVBQUU7WUFDTix5QkFBeUIsRUFBRSxXQUFXO1NBQ3ZDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3BELElBQUksNkNBQXFCLENBQUM7UUFDeEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO0tBQzVDLENBQUMsQ0FDSCxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQzlHLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQztJQUNoSCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUMsRUFBRSxXQUFXLENBQUM7SUFFOUcsT0FBTztJQUVQLDJGQUEyRjtJQUMzRixvQkFBb0I7SUFDcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwRSwwQkFBMEI7SUFDMUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1Qyx5REFBeUQ7SUFDekQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdChcbiAgJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBDbG91ZENvbnRyb2wtYmFzZWQgcmVzb3VyY2VzIHdpdGggYXR0cmlidXRlIHJlc29sdXRpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrTmFtZSA9ICdjYy1ob3Rzd2FwJztcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICdvcmlnaW5hbCB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IHRydWUsXG4gICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHF1ZXVlVXJsID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09PSAnUXVldWVVcmwnKT8uT3V0cHV0VmFsdWU7XG4gICAgY29uc3QgYWdlbnROYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09PSAnQWdlbnROYW1lJyk/Lk91dHB1dFZhbHVlO1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09PSAnUnVsZU5hbWUnKT8uT3V0cHV0VmFsdWU7XG5cbiAgICAvLyBUSEVOXG5cbiAgICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluXG4gICAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgLy8gVmVyaWZ5IGhvdHN3YXAgd2FzIHVzZWRcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b01hdGNoKC9ob3Rzd2FwcGVkIS8pO1xuICAgIC8vIFZlcmlmeSBhbGwgdGhyZWUgQ0NBUEktYmFzZWQgcmVzb3VyY2VzIHdlcmUgaG90c3dhcHBlZFxuICAgIGV4cGVjdChxdWV1ZVVybCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoYWdlbnROYW1lKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChydWxlTmFtZSkudG9CZURlZmluZWQoKTtcbiAgfSksXG4pO1xuIl19
41
+ }, { aws: { regions: regions_1.BEDROCK_AGENT_REGIONS } }));
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWhvdHN3YXAtZGVwbG95bWVudC1zdXBwb3J0cy1jbG91ZGNvbnRyb2wtYmFzZWQtcmVzb3VyY2VzLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1ob3Rzd2FwLWRlcGxveW1lbnQtc3VwcG9ydHMtY2xvdWRjb250cm9sLWJhc2VkLXJlc291cmNlcy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBdUU7QUFDdkUsc0NBQTZEO0FBQzdELGtEQUE2RDtBQUU3RCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyx5RUFBeUU7QUFFM0csSUFBQSxlQUFTLEVBQ1Asb0ZBQW9GLEVBQ3BGLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25DLFFBQVE7SUFDUixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUM7SUFDL0IsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtRQUNqQyxhQUFhLEVBQUUsS0FBSztRQUNwQixNQUFNLEVBQUU7WUFDTix5QkFBeUIsRUFBRSxnQkFBZ0I7U0FDNUM7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPO0lBQ1AsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtRQUN0RCxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDdEIsYUFBYSxFQUFFLElBQUk7UUFDbkIsVUFBVSxFQUFFLElBQUk7UUFDaEIsTUFBTSxFQUFFO1lBQ04seUJBQXlCLEVBQUUsV0FBVztTQUN2QztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNwRCxJQUFJLDZDQUFxQixDQUFDO1FBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztLQUM1QyxDQUFDLENBQ0gsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxFQUFFLFdBQVcsQ0FBQztJQUM5RyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDaEgsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBRTlHLE9BQU87SUFFUCwyRkFBMkY7SUFDM0Ysb0JBQW9CO0lBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEUsMEJBQTBCO0lBQzFCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUMseURBQXlEO0lBQ3pELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSwrQkFBcUIsRUFBRSxFQUFFLENBQUMsQ0FDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5pbXBvcnQgeyBCRURST0NLX0FHRU5UX1JFR0lPTlMgfSBmcm9tICcuLi8uLi8uLi9saWIvcmVnaW9ucyc7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdChcbiAgJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBDbG91ZENvbnRyb2wtYmFzZWQgcmVzb3VyY2VzIHdpdGggYXR0cmlidXRlIHJlc29sdXRpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrTmFtZSA9ICdjYy1ob3Rzd2FwJztcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICdvcmlnaW5hbCB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IHRydWUsXG4gICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfQ0NfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHF1ZXVlVXJsID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09PSAnUXVldWVVcmwnKT8uT3V0cHV0VmFsdWU7XG4gICAgY29uc3QgYWdlbnROYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09PSAnQWdlbnROYW1lJyk/Lk91dHB1dFZhbHVlO1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09PSAnUnVsZU5hbWUnKT8uT3V0cHV0VmFsdWU7XG5cbiAgICAvLyBUSEVOXG5cbiAgICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluXG4gICAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgLy8gVmVyaWZ5IGhvdHN3YXAgd2FzIHVzZWRcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b01hdGNoKC9ob3Rzd2FwcGVkIS8pO1xuICAgIC8vIFZlcmlmeSBhbGwgdGhyZWUgQ0NBUEktYmFzZWQgcmVzb3VyY2VzIHdlcmUgaG90c3dhcHBlZFxuICAgIGV4cGVjdChxdWV1ZVVybCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoYWdlbnROYW1lKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChydWxlTmFtZSkudG9CZURlZmluZWQoKTtcbiAgfSwgeyBhd3M6IHsgcmVnaW9uczogQkVEUk9DS19BR0VOVF9SRUdJT05TIH0gfSksXG4pO1xuIl19