@aws-cdk-testing/cli-integ 3.15.0 → 3.16.0

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 (20) hide show
  1. package/lib/aws.d.ts +8 -0
  2. package/lib/aws.js +31 -21
  3. package/lib/with-cdk-app.d.ts +4 -0
  4. package/lib/with-cdk-app.js +4 -1
  5. package/npm-shrinkwrap.json +1099 -1112
  6. package/package.json +20 -20
  7. package/resources/cdk-apps/refactoring/refactoring.js +28 -9
  8. package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-deploy-role-cannot-be-assumed-with-external-id.integtest.d.ts +1 -0
  9. package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-deploy-role-cannot-be-assumed-with-external-id.integtest.js +37 -0
  10. package/tests/cli-integ-tests/cdk-assets/cdk-assets-docker-credential.integtest.js +11 -8
  11. package/tests/cli-integ-tests/migrate/cdk-migrate-deploys-successfully-java.integtest.js +3 -3
  12. package/tests/cli-integ-tests/refactor/cdk-refactor-dry-run.integtest.js +9 -7
  13. package/tests/cli-integ-tests/refactor/cdk-refactor-move-same-to-different-stacks.integtest.d.ts +7 -0
  14. package/tests/cli-integ-tests/refactor/cdk-refactor-move-same-to-different-stacks.integtest.js +47 -0
  15. package/tests/cli-integ-tests/refactor/cdk-refactor-no-ambiguities-execution.integtest.d.ts +1 -0
  16. package/tests/cli-integ-tests/refactor/cdk-refactor-no-ambiguities-execution.integtest.js +42 -0
  17. package/tests/cli-integ-tests/refactor/cdk-refactor-with-ambiguities-execution.integtest.d.ts +7 -0
  18. package/tests/cli-integ-tests/refactor/cdk-refactor-with-ambiguities-execution.integtest.js +68 -0
  19. package/tests/cli-integ-tests/synth/cdk-synth-telemetry-with-errors.integtest.js +1 -3
  20. package/tests/cli-integ-tests/synth/cdk-synth-telemetry.integtest.js +1 -3
package/package.json CHANGED
@@ -39,9 +39,9 @@
39
39
  "organization": true
40
40
  },
41
41
  "devDependencies": {
42
- "@aws-cdk/toolkit-lib": "1.4.1",
42
+ "@aws-cdk/toolkit-lib": "1.8.0",
43
43
  "@aws-cdk/yarn-cling": "0.0.0",
44
- "@cdklabs/eslint-plugin": "^1.3.2",
44
+ "@cdklabs/eslint-plugin": "^1.3.4",
45
45
  "@stylistic/eslint-plugin": "^3",
46
46
  "@types/fs-extra": "^9",
47
47
  "@types/jest": "^29.5.14",
@@ -58,7 +58,7 @@
58
58
  "eslint-plugin-import": "^2.32.0",
59
59
  "eslint-plugin-jest": "^28.14.0",
60
60
  "eslint-plugin-jsdoc": "^50.8.0",
61
- "eslint-plugin-prettier": "^5.5.3",
61
+ "eslint-plugin-prettier": "^5.5.4",
62
62
  "jest": "^29.7.0",
63
63
  "jest-junit": "^16",
64
64
  "license-checker": "^25.0.1",
@@ -67,23 +67,23 @@
67
67
  "typescript": "5.8"
68
68
  },
69
69
  "dependencies": {
70
- "@aws-sdk/client-cloudformation": "^3.859.0",
71
- "@aws-sdk/client-codeartifact": "^3.859.0",
72
- "@aws-sdk/client-ecr": "^3.859.0",
73
- "@aws-sdk/client-ecr-public": "^3.859.0",
74
- "@aws-sdk/client-ecs": "^3.859.0",
75
- "@aws-sdk/client-iam": "^3.859.0",
76
- "@aws-sdk/client-lambda": "^3.859.0",
77
- "@aws-sdk/client-s3": "^3.859.0",
78
- "@aws-sdk/client-secrets-manager": "^3.859.0",
79
- "@aws-sdk/client-sns": "^3.859.0",
80
- "@aws-sdk/client-sso": "^3.858.0",
81
- "@aws-sdk/client-sts": "^3.859.0",
82
- "@aws-sdk/credential-providers": "^3.859.0",
83
- "@cdklabs/cdk-atmosphere-client": "^0.0.59",
70
+ "@aws-sdk/client-cloudformation": "^3.879.0",
71
+ "@aws-sdk/client-codeartifact": "^3.879.0",
72
+ "@aws-sdk/client-ecr": "^3.879.0",
73
+ "@aws-sdk/client-ecr-public": "^3.879.0",
74
+ "@aws-sdk/client-ecs": "^3.879.0",
75
+ "@aws-sdk/client-iam": "^3.879.0",
76
+ "@aws-sdk/client-lambda": "^3.879.0",
77
+ "@aws-sdk/client-s3": "^3.879.0",
78
+ "@aws-sdk/client-secrets-manager": "^3.879.0",
79
+ "@aws-sdk/client-sns": "^3.879.0",
80
+ "@aws-sdk/client-sso": "^3.879.0",
81
+ "@aws-sdk/client-sts": "^3.879.0",
82
+ "@aws-sdk/credential-providers": "^3.879.0",
83
+ "@cdklabs/cdk-atmosphere-client": "^0.0.62",
84
84
  "@octokit/rest": "^20",
85
- "@smithy/types": "^4.3.1",
86
- "@smithy/util-retry": "^4.0.6",
85
+ "@smithy/types": "^4.3.2",
86
+ "@smithy/util-retry": "^4.0.7",
87
87
  "axios": "^1",
88
88
  "chalk": "^4",
89
89
  "fs-extra": "^9",
@@ -116,7 +116,7 @@
116
116
  "publishConfig": {
117
117
  "access": "public"
118
118
  },
119
- "version": "3.15.0",
119
+ "version": "3.16.0",
120
120
  "types": "lib/index.d.ts",
121
121
  "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
122
122
  }
@@ -1,18 +1,37 @@
1
1
  const cdk = require('aws-cdk-lib');
2
2
  const sqs = require('aws-cdk-lib/aws-sqs');
3
-
4
- class BasicStack extends cdk.Stack {
5
- constructor(parent, id, props) {
6
- super(parent, id, props);
7
- new sqs.Queue(this, props.queueName);
8
- }
9
- }
3
+ const lambda = require('aws-cdk-lib/aws-lambda');
4
+ const s3 = require('aws-cdk-lib/aws-s3');
10
5
 
11
6
  const stackPrefix = process.env.STACK_NAME_PREFIX;
12
7
  const app = new cdk.App();
13
8
 
14
- new BasicStack(app, `${stackPrefix}-basic`, {
15
- queueName: process.env.BASIC_QUEUE_LOGICAL_ID ?? 'BasicQueue',
9
+ const mainStack = new cdk.Stack(app, `${stackPrefix}-basic`);
10
+ new sqs.Queue(mainStack, process.env.BASIC_QUEUE_LOGICAL_ID ?? 'BasicQueue');
11
+
12
+ const bucketStack = new cdk.Stack(app, `${stackPrefix}-bucket-stack`);
13
+ const dummy = new s3.Bucket(bucketStack, 'DummyBucket', {
14
+ bucketName: `dummy-bucket-for-${stackPrefix}`
16
15
  });
17
16
 
17
+ // This part is to test adding a resource to an existing stack
18
+
19
+ if (process.env.ADDITIONAL_QUEUE_LOGICAL_ID) {
20
+ new sqs.Queue(mainStack, process.env.ADDITIONAL_QUEUE_LOGICAL_ID);
21
+ }
22
+
23
+ // This part is to test moving a resource to a separate stack
24
+ const bucket = new s3.Bucket(process.env.BUCKET_IN_SEPARATE_STACK ? bucketStack : mainStack, 'Bucket');
25
+
26
+ new lambda.Function(mainStack, 'Func', {
27
+ runtime: lambda.Runtime.NODEJS_22_X,
28
+ code: lambda.Code.fromInline(`exports.handler = handler.toString()`),
29
+ handler: 'index.handler',
30
+ environment: {
31
+ BUCKET: bucket.bucketName
32
+ }
33
+ });
34
+
35
+
36
+
18
37
  app.synth();
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const client_sts_1 = require("@aws-sdk/client-sts");
4
+ const lib_1 = require("../../../lib");
5
+ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
6
+ (0, lib_1.integTest)('deploy role cannot be assumed with external id', (0, lib_1.withoutBootstrap)(async (fixture) => {
7
+ const bootstrapStackName = fixture.bootstrapStackName;
8
+ await fixture.cdkBootstrapModern({
9
+ toolkitStackName: bootstrapStackName,
10
+ cfnExecutionPolicy: 'arn:aws:iam::aws:policy/AdministratorAccess',
11
+ });
12
+ const account = await fixture.aws.account();
13
+ const deployRoleArn = `arn:aws:iam::${account}:role/cdk-${fixture.qualifier}-deploy-role-${account}-${fixture.aws.region}`;
14
+ // Attempt to assume the deploy role with an external ID should fail
15
+ await expect(fixture.aws.sts.send(new client_sts_1.AssumeRoleCommand({
16
+ RoleArn: deployRoleArn,
17
+ RoleSessionName: 'test-external-id-failure',
18
+ ExternalId: 'some-external-id',
19
+ }))).rejects.toThrow();
20
+ }));
21
+ (0, lib_1.integTest)('deploy role can be assumed with ExternalId if protection is switched off', (0, lib_1.withoutBootstrap)(async (fixture) => {
22
+ const bootstrapStackName = fixture.bootstrapStackName;
23
+ await fixture.cdkBootstrapModern({
24
+ toolkitStackName: bootstrapStackName,
25
+ cfnExecutionPolicy: 'arn:aws:iam::aws:policy/AdministratorAccess',
26
+ denyExternalId: false,
27
+ });
28
+ const account = await fixture.aws.account();
29
+ const deployRoleArn = `arn:aws:iam::${account}:role/cdk-${fixture.qualifier}-deploy-role-${account}-${fixture.aws.region}`;
30
+ // Attempt to assume the deploy role with an external ID should fail
31
+ await expect(fixture.aws.sts.send(new client_sts_1.AssumeRoleCommand({
32
+ RoleArn: deployRoleArn,
33
+ RoleSessionName: 'test-external-id-failure',
34
+ ExternalId: 'some-external-id',
35
+ }))).resolves.toBeTruthy();
36
+ }));
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWJvb3RzdHJhcC1kZXBsb3ktcm9sZS1jYW5ub3QtYmUtYXNzdW1lZC13aXRoLWV4dGVybmFsLWlkLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1ib290c3RyYXAtZGVwbG95LXJvbGUtY2Fubm90LWJlLWFzc3VtZWQtd2l0aC1leHRlcm5hbC1pZC5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFBd0Q7QUFDeEQsc0NBQTJEO0FBRTNELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFBQyxnREFBZ0QsRUFBRSxJQUFBLHNCQUFnQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUM3RixNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztJQUV0RCxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQixnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsa0JBQWtCLEVBQUUsNkNBQTZDO0tBQ2xFLENBQUMsQ0FBQztJQUVILE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsT0FBTyxhQUFhLE9BQU8sQ0FBQyxTQUFTLGdCQUFnQixPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUUzSCxvRUFBb0U7SUFDcEUsTUFBTSxNQUFNLENBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksOEJBQWlCLENBQUM7UUFDekMsT0FBTyxFQUFFLGFBQWE7UUFDdEIsZUFBZSxFQUFFLDBCQUEwQjtRQUMzQyxVQUFVLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxDQUNKLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFSixJQUFBLGVBQVMsRUFBQywwRUFBMEUsRUFBRSxJQUFBLHNCQUFnQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUN2SCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztJQUV0RCxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQixnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsa0JBQWtCLEVBQUUsNkNBQTZDO1FBQ2pFLGNBQWMsRUFBRSxLQUFLO0tBQ3RCLENBQUMsQ0FBQztJQUVILE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsT0FBTyxhQUFhLE9BQU8sQ0FBQyxTQUFTLGdCQUFnQixPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUUzSCxvRUFBb0U7SUFDcEUsTUFBTSxNQUFNLENBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksOEJBQWlCLENBQUM7UUFDekMsT0FBTyxFQUFFLGFBQWE7UUFDdEIsZUFBZSxFQUFFLDBCQUEwQjtRQUMzQyxVQUFVLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxDQUNKLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3N1bWVSb2xlQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRob3V0Qm9vdHN0cmFwIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7IC8vIEluY2x1ZGVzIHRoZSB0aW1lIHRvIGFjcXVpcmUgbG9ja3MsIHdvcnN0LWNhc2Ugc2luZ2xlLXRocmVhZGVkIHJ1bnRpbWVcblxuaW50ZWdUZXN0KCdkZXBsb3kgcm9sZSBjYW5ub3QgYmUgYXNzdW1lZCB3aXRoIGV4dGVybmFsIGlkJywgd2l0aG91dEJvb3RzdHJhcChhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBib290c3RyYXBTdGFja05hbWUgPSBmaXh0dXJlLmJvb3RzdHJhcFN0YWNrTmFtZTtcblxuICBhd2FpdCBmaXh0dXJlLmNka0Jvb3RzdHJhcE1vZGVybih7XG4gICAgdG9vbGtpdFN0YWNrTmFtZTogYm9vdHN0cmFwU3RhY2tOYW1lLFxuICAgIGNmbkV4ZWN1dGlvblBvbGljeTogJ2Fybjphd3M6aWFtOjphd3M6cG9saWN5L0FkbWluaXN0cmF0b3JBY2Nlc3MnLFxuICB9KTtcblxuICBjb25zdCBhY2NvdW50ID0gYXdhaXQgZml4dHVyZS5hd3MuYWNjb3VudCgpO1xuICBjb25zdCBkZXBsb3lSb2xlQXJuID0gYGFybjphd3M6aWFtOjoke2FjY291bnR9OnJvbGUvY2RrLSR7Zml4dHVyZS5xdWFsaWZpZXJ9LWRlcGxveS1yb2xlLSR7YWNjb3VudH0tJHtmaXh0dXJlLmF3cy5yZWdpb259YDtcblxuICAvLyBBdHRlbXB0IHRvIGFzc3VtZSB0aGUgZGVwbG95IHJvbGUgd2l0aCBhbiBleHRlcm5hbCBJRCBzaG91bGQgZmFpbFxuICBhd2FpdCBleHBlY3QoXG4gICAgZml4dHVyZS5hd3Muc3RzLnNlbmQobmV3IEFzc3VtZVJvbGVDb21tYW5kKHtcbiAgICAgIFJvbGVBcm46IGRlcGxveVJvbGVBcm4sXG4gICAgICBSb2xlU2Vzc2lvbk5hbWU6ICd0ZXN0LWV4dGVybmFsLWlkLWZhaWx1cmUnLFxuICAgICAgRXh0ZXJuYWxJZDogJ3NvbWUtZXh0ZXJuYWwtaWQnLFxuICAgIH0pKSxcbiAgKS5yZWplY3RzLnRvVGhyb3coKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgcm9sZSBjYW4gYmUgYXNzdW1lZCB3aXRoIEV4dGVybmFsSWQgaWYgcHJvdGVjdGlvbiBpcyBzd2l0Y2hlZCBvZmYnLCB3aXRob3V0Qm9vdHN0cmFwKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IGJvb3RzdHJhcFN0YWNrTmFtZSA9IGZpeHR1cmUuYm9vdHN0cmFwU3RhY2tOYW1lO1xuXG4gIGF3YWl0IGZpeHR1cmUuY2RrQm9vdHN0cmFwTW9kZXJuKHtcbiAgICB0b29sa2l0U3RhY2tOYW1lOiBib290c3RyYXBTdGFja05hbWUsXG4gICAgY2ZuRXhlY3V0aW9uUG9saWN5OiAnYXJuOmF3czppYW06OmF3czpwb2xpY3kvQWRtaW5pc3RyYXRvckFjY2VzcycsXG4gICAgZGVueUV4dGVybmFsSWQ6IGZhbHNlLFxuICB9KTtcblxuICBjb25zdCBhY2NvdW50ID0gYXdhaXQgZml4dHVyZS5hd3MuYWNjb3VudCgpO1xuICBjb25zdCBkZXBsb3lSb2xlQXJuID0gYGFybjphd3M6aWFtOjoke2FjY291bnR9OnJvbGUvY2RrLSR7Zml4dHVyZS5xdWFsaWZpZXJ9LWRlcGxveS1yb2xlLSR7YWNjb3VudH0tJHtmaXh0dXJlLmF3cy5yZWdpb259YDtcblxuICAvLyBBdHRlbXB0IHRvIGFzc3VtZSB0aGUgZGVwbG95IHJvbGUgd2l0aCBhbiBleHRlcm5hbCBJRCBzaG91bGQgZmFpbFxuICBhd2FpdCBleHBlY3QoXG4gICAgZml4dHVyZS5hd3Muc3RzLnNlbmQobmV3IEFzc3VtZVJvbGVDb21tYW5kKHtcbiAgICAgIFJvbGVBcm46IGRlcGxveVJvbGVBcm4sXG4gICAgICBSb2xlU2Vzc2lvbk5hbWU6ICd0ZXN0LWV4dGVybmFsLWlkLWZhaWx1cmUnLFxuICAgICAgRXh0ZXJuYWxJZDogJ3NvbWUtZXh0ZXJuYWwtaWQnLFxuICAgIH0pKSxcbiAgKS5yZXNvbHZlcy50b0JlVHJ1dGh5KCk7XG59KSk7XG4iXX0=
@@ -69,13 +69,16 @@ async function testDockerCredential(fixture, credSource) {
69
69
  const input = path.join(fixture.integTestDir, 'input.txt');
70
70
  fs.writeFileSync(input, `${domain}\n`);
71
71
  await fixture.cdkAssets.makeCliAvailable();
72
- const output = await fixture.shell(['docker-credential-cdk-assets', 'get'], {
73
- modEnv: {
74
- ...fixture.cdkShellEnv(),
75
- CDK_DOCKER_CREDS_FILE: credsFilePath,
76
- },
77
- stdio: [fs.openSync(input, 'r')],
78
- captureStderr: false,
72
+ let output = '';
73
+ await (0, lib_1.retry)(process.stdout, 'Getting docker credentials', lib_1.retry.forSeconds(60), async () => {
74
+ output = await fixture.shell(['docker-credential-cdk-assets', 'get'], {
75
+ modEnv: {
76
+ ...fixture.cdkShellEnv(),
77
+ CDK_DOCKER_CREDS_FILE: credsFilePath,
78
+ },
79
+ stdio: [fs.openSync(input, 'r')],
80
+ captureStderr: false,
81
+ });
79
82
  });
80
83
  const response = JSON.parse(output);
81
84
  expect(response).toMatchObject({
@@ -83,4 +86,4 @@ async function testDockerCredential(fixture, credSource) {
83
86
  Secret: expect.anything(),
84
87
  });
85
88
  }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWFzc2V0cy1kb2NrZXItY3JlZGVudGlhbC5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstYXNzZXRzLWRvY2tlci1jcmVkZW50aWFsLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsOEZBQThGO0FBQzlGLG9EQUErRDtBQUkvRCxzQ0FBd0U7QUFFeEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLElBQUEsZUFBUyxFQUNQLHdFQUF3RSxFQUN4RSxJQUFBLGVBQVMsRUFBQyxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUM3QyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLHFDQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFNUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUU7UUFDL0Q7WUFDRSxNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLE1BQU0sRUFBRSxPQUFPO1lBQ2YsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7U0FDbkM7S0FDRixFQUFFO1FBQ0Q7WUFDRSxNQUFNLEVBQUUsT0FBTztZQUNmLFFBQVEsRUFBRSxHQUFHO1lBQ2IsTUFBTSxFQUFFLENBQUMsMkJBQTJCLENBQUM7U0FDdEM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFN0MsTUFBTSxvQkFBb0IsQ0FBQyxPQUFPLEVBQUU7UUFDbEMsYUFBYSxFQUFFLElBQUk7UUFDbkIsc0VBQXNFO1FBQ3RFLGFBQWEsRUFBRSxPQUFPO0tBQ3ZCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDLENBQ0osQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNEJFO0FBRUYsS0FBSyxVQUFVLG9CQUFvQixDQUFDLE9BQW9CLEVBQUUsVUFBd0M7SUFDaEcsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUM7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFFL0UsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM3QyxPQUFPLEVBQUUsS0FBSztRQUNkLGlCQUFpQixFQUFFO1lBQ2pCLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVTtTQUNyQjtLQUNGLENBQUMsQ0FBQyxDQUFDO0lBRUosTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNELEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUV2QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUMxRSxNQUFNLEVBQUU7WUFDTixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDeEIscUJBQXFCLEVBQUUsYUFBYTtTQUNyQztRQUNELEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLGFBQWEsRUFBRSxLQUFLO0tBQ3JCLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUM3QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUMzQixNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtLQUMxQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbi8vIGltcG9ydCB7IENyZWF0ZVNlY3JldENvbW1hbmQsIERlbGV0ZVNlY3JldENvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcbmltcG9ydCB7IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1yZWxhdGl2ZS1wYWNrYWdlc1xuaW1wb3J0IHR5cGUgeyBEb2NrZXJEb21haW5DcmVkZW50aWFsU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vQGF3cy1jZGsvY2RrLWFzc2V0cy1saWIvbGliL3ByaXZhdGUvZG9ja2VyLWNyZWRlbnRpYWxzJztcbmltcG9ydCB0eXBlIHsgVGVzdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUsIHdpdGhSZXRyeSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdChcbiAgJ2RvY2tlci1jcmVkZW50aWFsLWNkay1hc3NldHMgY2FuIGFzc3VtZSByb2xlIGFuZCBmZXRjaCBFQ1IgY3JlZGVudGlhbHMnLFxuICB3aXRoUmV0cnkod2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgY2FsbGVyID0gYXdhaXQgZml4dHVyZS5hd3Muc3RzLnNlbmQobmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSkpO1xuXG4gICAgY29uc3Qgcm9sZUFybiA9IGF3YWl0IGZpeHR1cmUuYXdzLnRlbXBvcmFyeVJvbGUoJ2Vjci1yZXBvLXJvbGUnLCBbXG4gICAgICB7XG4gICAgICAgIEFjdGlvbjogJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICBQcmluY2lwYWw6IHsgQVdTOiBjYWxsZXIuQWNjb3VudCB9LFxuICAgICAgfSxcbiAgICBdLCBbXG4gICAgICB7XG4gICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgQWN0aW9uOiBbJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nXSxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmF3cy53YWl0Rm9yQXNzdW1lUm9sZShyb2xlQXJuKTtcblxuICAgIGF3YWl0IHRlc3REb2NrZXJDcmVkZW50aWFsKGZpeHR1cmUsIHtcbiAgICAgIGVjclJlcG9zaXRvcnk6IHRydWUsXG4gICAgICAvLyBUaGlzIHJvbGUgbXVzdCBoYXZlIHBlcm1pc3Npb25zIHRvIGNhbGwgYGVjcjpHZXRBdXRob3JpemF0aW9uVG9rZW5gXG4gICAgICBhc3N1bWVSb2xlQXJuOiByb2xlQXJuLFxuICAgIH0pO1xuICB9KSksXG4pO1xuXG4vKlxuXG4vLyBTS0lQUEVEIEZPUiBOT1dcbi8vIFJlcXVpcmVzIFNlY3JldHNNYW5hZ2VyIHBlcm1pc3Npb25zIG9uIHRoZSByb2xlIHRoYXQncyBleGVjdXRpbmcgdGhpcywgYW5kIHRoYXQnc1xuLy8gdG9vIG11Y2ggdG8gc2V0IHVwIHJpZ2h0IG5vdy5cblxuaW50ZWdUZXN0KFxuICAnZG9ja2VyLWNyZWRlbnRpYWwtY2RrLWFzc2V0cyByZWFkIGZyb20gU2VjcmV0c01hbmFnZXInLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzZWNyZXQgPSBhd2FpdCBmaXh0dXJlLmF3cy5zZWNyZXRzTWFuYWdlci5zZW5kKG5ldyBDcmVhdGVTZWNyZXRDb21tYW5kKHtcbiAgICAgIE5hbWU6IGBvdXItc2VjcmV0LSR7Zml4dHVyZS5yYW5kb21TdHJpbmd9YCxcbiAgICAgIFNlY3JldFN0cmluZzogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1c2VybmFtZTogJ3Rlc3QtdXNlcicsXG4gICAgICAgIHBhc3N3b3JkOiAndGVzdC1wYXNzd29yZCcsXG4gICAgICB9KSxcbiAgICB9KSk7XG4gICAgZml4dHVyZS5hd3MuYWRkQ2xlYW51cCgoKSA9PiBmaXh0dXJlLmF3cy5zZWNyZXRzTWFuYWdlci5zZW5kKG5ldyBEZWxldGVTZWNyZXRDb21tYW5kKHtcbiAgICAgIFNlY3JldElkOiBzZWNyZXQuQVJOLFxuICAgIH0pKSk7XG5cbiAgICBhd2FpdCB0ZXN0RG9ja2VyQ3JlZGVudGlhbChmaXh0dXJlLCB7XG4gICAgICBzZWNyZXRzTWFuYWdlclNlY3JldElkOiBzZWNyZXQuQVJOLFxuICAgICAgc2VjcmV0c1VzZXJuYW1lRmllbGQ6ICd1c2VybmFtZScsXG4gICAgICBzZWNyZXRzUGFzc3dvcmRGaWVsZDogJ3Bhc3N3b3JkJyxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG4qL1xuXG5hc3luYyBmdW5jdGlvbiB0ZXN0RG9ja2VyQ3JlZGVudGlhbChmaXh0dXJlOiBUZXN0Rml4dHVyZSwgY3JlZFNvdXJjZTogRG9ja2VyRG9tYWluQ3JlZGVudGlhbFNvdXJjZSkge1xuICBjb25zdCBkb21haW4gPSAnaW50ZWcudGVzdC5kb21haW4nO1xuICBjb25zdCBjcmVkc0ZpbGVQYXRoID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLWRvY2tlci1jcmVkcy5qc29uJyk7XG5cbiAgZnMud3JpdGVGaWxlU3luYyhjcmVkc0ZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgdmVyc2lvbjogJzEuMCcsXG4gICAgZG9tYWluQ3JlZGVudGlhbHM6IHtcbiAgICAgIFtkb21haW5dOiBjcmVkU291cmNlLFxuICAgIH0sXG4gIH0pKTtcblxuICBjb25zdCBpbnB1dCA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2lucHV0LnR4dCcpO1xuICBmcy53cml0ZUZpbGVTeW5jKGlucHV0LCBgJHtkb21haW59XFxuYCk7XG5cbiAgYXdhaXQgZml4dHVyZS5jZGtBc3NldHMubWFrZUNsaUF2YWlsYWJsZSgpO1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnZG9ja2VyLWNyZWRlbnRpYWwtY2RrLWFzc2V0cycsICdnZXQnXSwge1xuICAgIG1vZEVudjoge1xuICAgICAgLi4uZml4dHVyZS5jZGtTaGVsbEVudigpLFxuICAgICAgQ0RLX0RPQ0tFUl9DUkVEU19GSUxFOiBjcmVkc0ZpbGVQYXRoLFxuICAgIH0sXG4gICAgc3RkaW86IFtmcy5vcGVuU3luYyhpbnB1dCwgJ3InKV0sXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShvdXRwdXQpO1xuICBleHBlY3QocmVzcG9uc2UpLnRvTWF0Y2hPYmplY3Qoe1xuICAgIFVzZXJuYW1lOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICBTZWNyZXQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICB9KTtcbn1cbiJdfQ==
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWFzc2V0cy1kb2NrZXItY3JlZGVudGlhbC5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstYXNzZXRzLWRvY2tlci1jcmVkZW50aWFsLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsOEZBQThGO0FBQzlGLG9EQUErRDtBQUkvRCxzQ0FBK0U7QUFFL0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLElBQUEsZUFBUyxFQUNQLHdFQUF3RSxFQUN4RSxJQUFBLGVBQVMsRUFBQyxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUM3QyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLHFDQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFNUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUU7UUFDL0Q7WUFDRSxNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLE1BQU0sRUFBRSxPQUFPO1lBQ2YsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7U0FDbkM7S0FDRixFQUFFO1FBQ0Q7WUFDRSxNQUFNLEVBQUUsT0FBTztZQUNmLFFBQVEsRUFBRSxHQUFHO1lBQ2IsTUFBTSxFQUFFLENBQUMsMkJBQTJCLENBQUM7U0FDdEM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFN0MsTUFBTSxvQkFBb0IsQ0FBQyxPQUFPLEVBQUU7UUFDbEMsYUFBYSxFQUFFLElBQUk7UUFDbkIsc0VBQXNFO1FBQ3RFLGFBQWEsRUFBRSxPQUFPO0tBQ3ZCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDLENBQ0osQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNEJFO0FBRUYsS0FBSyxVQUFVLG9CQUFvQixDQUFDLE9BQW9CLEVBQUUsVUFBd0M7SUFDaEcsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUM7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFFL0UsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM3QyxPQUFPLEVBQUUsS0FBSztRQUNkLGlCQUFpQixFQUFFO1lBQ2pCLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVTtTQUNyQjtLQUNGLENBQUMsQ0FBQyxDQUFDO0lBRUosTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNELEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUV2QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7SUFFeEIsTUFBTSxJQUFBLFdBQUssRUFBQyxPQUFPLENBQUMsTUFBTSxFQUFFLDRCQUE0QixFQUFFLFdBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekYsTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sRUFBRTtnQkFDTixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3hCLHFCQUFxQixFQUFFLGFBQWE7YUFDckM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUM3QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUMzQixNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtLQUMxQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbi8vIGltcG9ydCB7IENyZWF0ZVNlY3JldENvbW1hbmQsIERlbGV0ZVNlY3JldENvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcbmltcG9ydCB7IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1yZWxhdGl2ZS1wYWNrYWdlc1xuaW1wb3J0IHR5cGUgeyBEb2NrZXJEb21haW5DcmVkZW50aWFsU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vQGF3cy1jZGsvY2RrLWFzc2V0cy1saWIvbGliL3ByaXZhdGUvZG9ja2VyLWNyZWRlbnRpYWxzJztcbmltcG9ydCB0eXBlIHsgVGVzdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUsIHdpdGhSZXRyeSwgcmV0cnkgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICdkb2NrZXItY3JlZGVudGlhbC1jZGstYXNzZXRzIGNhbiBhc3N1bWUgcm9sZSBhbmQgZmV0Y2ggRUNSIGNyZWRlbnRpYWxzJyxcbiAgd2l0aFJldHJ5KHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGNhbGxlciA9IGF3YWl0IGZpeHR1cmUuYXdzLnN0cy5zZW5kKG5ldyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQoe30pKTtcblxuICAgIGNvbnN0IHJvbGVBcm4gPSBhd2FpdCBmaXh0dXJlLmF3cy50ZW1wb3JhcnlSb2xlKCdlY3ItcmVwby1yb2xlJywgW1xuICAgICAge1xuICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgUHJpbmNpcGFsOiB7IEFXUzogY2FsbGVyLkFjY291bnQgfSxcbiAgICAgIH0sXG4gICAgXSwgW1xuICAgICAge1xuICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgIFJlc291cmNlOiAnKicsXG4gICAgICAgIEFjdGlvbjogWydlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJ10sXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgYXdhaXQgZml4dHVyZS5hd3Mud2FpdEZvckFzc3VtZVJvbGUocm9sZUFybik7XG5cbiAgICBhd2FpdCB0ZXN0RG9ja2VyQ3JlZGVudGlhbChmaXh0dXJlLCB7XG4gICAgICBlY3JSZXBvc2l0b3J5OiB0cnVlLFxuICAgICAgLy8gVGhpcyByb2xlIG11c3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBjYWxsIGBlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuYFxuICAgICAgYXNzdW1lUm9sZUFybjogcm9sZUFybixcbiAgICB9KTtcbiAgfSkpLFxuKTtcblxuLypcblxuLy8gU0tJUFBFRCBGT1IgTk9XXG4vLyBSZXF1aXJlcyBTZWNyZXRzTWFuYWdlciBwZXJtaXNzaW9ucyBvbiB0aGUgcm9sZSB0aGF0J3MgZXhlY3V0aW5nIHRoaXMsIGFuZCB0aGF0J3Ncbi8vIHRvbyBtdWNoIHRvIHNldCB1cCByaWdodCBub3cuXG5cbmludGVnVGVzdChcbiAgJ2RvY2tlci1jcmVkZW50aWFsLWNkay1hc3NldHMgcmVhZCBmcm9tIFNlY3JldHNNYW5hZ2VyJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgZml4dHVyZS5hd3Muc2VjcmV0c01hbmFnZXIuc2VuZChuZXcgQ3JlYXRlU2VjcmV0Q29tbWFuZCh7XG4gICAgICBOYW1lOiBgb3VyLXNlY3JldC0ke2ZpeHR1cmUucmFuZG9tU3RyaW5nfWAsXG4gICAgICBTZWNyZXRTdHJpbmc6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdXNlcm5hbWU6ICd0ZXN0LXVzZXInLFxuICAgICAgICBwYXNzd29yZDogJ3Rlc3QtcGFzc3dvcmQnLFxuICAgICAgfSksXG4gICAgfSkpO1xuICAgIGZpeHR1cmUuYXdzLmFkZENsZWFudXAoKCkgPT4gZml4dHVyZS5hd3Muc2VjcmV0c01hbmFnZXIuc2VuZChuZXcgRGVsZXRlU2VjcmV0Q29tbWFuZCh7XG4gICAgICBTZWNyZXRJZDogc2VjcmV0LkFSTixcbiAgICB9KSkpO1xuXG4gICAgYXdhaXQgdGVzdERvY2tlckNyZWRlbnRpYWwoZml4dHVyZSwge1xuICAgICAgc2VjcmV0c01hbmFnZXJTZWNyZXRJZDogc2VjcmV0LkFSTixcbiAgICAgIHNlY3JldHNVc2VybmFtZUZpZWxkOiAndXNlcm5hbWUnLFxuICAgICAgc2VjcmV0c1Bhc3N3b3JkRmllbGQ6ICdwYXNzd29yZCcsXG4gICAgfSk7XG4gIH0pLFxuKTtcblxuKi9cblxuYXN5bmMgZnVuY3Rpb24gdGVzdERvY2tlckNyZWRlbnRpYWwoZml4dHVyZTogVGVzdEZpeHR1cmUsIGNyZWRTb3VyY2U6IERvY2tlckRvbWFpbkNyZWRlbnRpYWxTb3VyY2UpIHtcbiAgY29uc3QgZG9tYWluID0gJ2ludGVnLnRlc3QuZG9tYWluJztcbiAgY29uc3QgY3JlZHNGaWxlUGF0aCA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay1kb2NrZXItY3JlZHMuanNvbicpO1xuXG4gIGZzLndyaXRlRmlsZVN5bmMoY3JlZHNGaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgIHZlcnNpb246ICcxLjAnLFxuICAgIGRvbWFpbkNyZWRlbnRpYWxzOiB7XG4gICAgICBbZG9tYWluXTogY3JlZFNvdXJjZSxcbiAgICB9LFxuICB9KSk7XG5cbiAgY29uc3QgaW5wdXQgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdpbnB1dC50eHQnKTtcbiAgZnMud3JpdGVGaWxlU3luYyhpbnB1dCwgYCR7ZG9tYWlufVxcbmApO1xuXG4gIGF3YWl0IGZpeHR1cmUuY2RrQXNzZXRzLm1ha2VDbGlBdmFpbGFibGUoKTtcbiAgbGV0IG91dHB1dDogc3RyaW5nID0gJyc7XG5cbiAgYXdhaXQgcmV0cnkocHJvY2Vzcy5zdGRvdXQsICdHZXR0aW5nIGRvY2tlciBjcmVkZW50aWFscycsIHJldHJ5LmZvclNlY29uZHMoNjApLCBhc3luYyAoKSA9PiB7XG4gICAgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5zaGVsbChbJ2RvY2tlci1jcmVkZW50aWFsLWNkay1hc3NldHMnLCAnZ2V0J10sIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICAuLi5maXh0dXJlLmNka1NoZWxsRW52KCksXG4gICAgICAgIENES19ET0NLRVJfQ1JFRFNfRklMRTogY3JlZHNGaWxlUGF0aCxcbiAgICAgIH0sXG4gICAgICBzdGRpbzogW2ZzLm9wZW5TeW5jKGlucHV0LCAncicpXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2Uob3V0cHV0KTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b01hdGNoT2JqZWN0KHtcbiAgICBVc2VybmFtZTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgU2VjcmV0OiBleHBlY3QuYW55dGhpbmcoKSxcbiAgfSk7XG59XG4iXX0=
@@ -4,7 +4,7 @@ const testcase_1 = require("./testcase");
4
4
  const lib_1 = require("../../../lib");
5
5
  const language = 'java';
6
6
  jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
7
- (0, lib_1.integTest)(`cdk migrate ${language} deploys successfully`, (0, lib_1.withCDKMigrateFixture)(language, async (fixture) => {
7
+ (0, lib_1.integTest)(`cdk migrate ${language} deploys successfully`, (0, lib_1.withRetry)((0, lib_1.withCDKMigrateFixture)(language, async (fixture) => {
8
8
  await (0, testcase_1.deploysSuccessfully)(fixture, language);
9
- }));
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW1pZ3JhdGUtZGVwbG95cy1zdWNjZXNzZnVsbHktamF2YS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstbWlncmF0ZS1kZXBsb3lzLXN1Y2Nlc3NmdWxseS1qYXZhLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUFpRDtBQUNqRCxzQ0FBZ0U7QUFFaEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBRXhCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCxlQUFlLFFBQVEsdUJBQXVCLEVBQzlDLElBQUEsMkJBQXFCLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNoRCxNQUFNLElBQUEsOEJBQW1CLEVBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXBsb3lzU3VjY2Vzc2Z1bGx5IH0gZnJvbSAnLi90ZXN0Y2FzZSc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhDREtNaWdyYXRlRml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmNvbnN0IGxhbmd1YWdlID0gJ2phdmEnO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gIGBjZGsgbWlncmF0ZSAke2xhbmd1YWdlfSBkZXBsb3lzIHN1Y2Nlc3NmdWxseWAsXG4gIHdpdGhDREtNaWdyYXRlRml4dHVyZShsYW5ndWFnZSwgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBkZXBsb3lzU3VjY2Vzc2Z1bGx5KGZpeHR1cmUsIGxhbmd1YWdlKTtcbiAgfSksXG4pO1xuIl19
9
+ })));
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW1pZ3JhdGUtZGVwbG95cy1zdWNjZXNzZnVsbHktamF2YS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstbWlncmF0ZS1kZXBsb3lzLXN1Y2Nlc3NmdWxseS1qYXZhLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUFpRDtBQUNqRCxzQ0FBMkU7QUFFM0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBRXhCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCxlQUFlLFFBQVEsdUJBQXVCLEVBQzlDLElBQUEsZUFBUyxFQUFDLElBQUEsMkJBQXFCLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUMxRCxNQUFNLElBQUEsOEJBQW1CLEVBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDLENBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlcGxveXNTdWNjZXNzZnVsbHkgfSBmcm9tICcuL3Rlc3RjYXNlJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aENES01pZ3JhdGVGaXh0dXJlLCB3aXRoUmV0cnkgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5jb25zdCBsYW5ndWFnZSA9ICdqYXZhJztcblxuamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7IC8vIEluY2x1ZGVzIHRoZSB0aW1lIHRvIGFjcXVpcmUgbG9ja3MsIHdvcnN0LWNhc2Ugc2luZ2xlLXRocmVhZGVkIHJ1bnRpbWVcblxuaW50ZWdUZXN0KFxuICBgY2RrIG1pZ3JhdGUgJHtsYW5ndWFnZX0gZGVwbG95cyBzdWNjZXNzZnVsbHlgLFxuICB3aXRoUmV0cnkod2l0aENES01pZ3JhdGVGaXh0dXJlKGxhbmd1YWdlLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGRlcGxveXNTdWNjZXNzZnVsbHkoZml4dHVyZSwgbGFuZ3VhZ2UpO1xuICB9KSksXG4pO1xuIl19
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const lib_1 = require("../../../lib");
4
- (0, lib_1.integTest)('detects refactoring changes and prints the result', (0, lib_1.withSpecificFixture)('refactoring', async (fixture) => {
5
- // First, deploy a stack
4
+ (0, lib_1.integTest)('cdk refactor - detects refactoring changes and prints the result', (0, lib_1.withSpecificFixture)('refactoring', async (fixture) => {
5
+ // First, deploy the stacks
6
+ await fixture.cdkDeploy('bucket-stack');
6
7
  await fixture.cdkDeploy('basic', {
7
8
  modEnv: {
8
9
  BASIC_QUEUE_LOGICAL_ID: 'OldName',
@@ -12,8 +13,8 @@ const lib_1 = require("../../../lib");
12
13
  const stdErr = await fixture.cdkRefactor({
13
14
  options: ['--dry-run', '--unstable=refactor'],
14
15
  allowErrExit: true,
15
- // Making sure the synthesized stack has the new name
16
- // so that a refactor is detected
16
+ // Making sure the synthesized stack has a queue with
17
+ // the new name so that a refactor is detected
17
18
  modEnv: {
18
19
  BASIC_QUEUE_LOGICAL_ID: 'NewName',
19
20
  },
@@ -21,11 +22,12 @@ const lib_1 = require("../../../lib");
21
22
  expect(stdErr).toContain('The following resources were moved or renamed:');
22
23
  expect(removeColor(stdErr)).toMatch(/│ AWS::SQS::Queue │ .*\/OldName\/Resource │ .*\/NewName\/Resource │/);
23
24
  }));
24
- (0, lib_1.integTest)('no refactoring changes detected', (0, lib_1.withSpecificFixture)('refactoring', async (fixture) => {
25
+ (0, lib_1.integTest)('cdk refactor - no refactoring changes detected', (0, lib_1.withSpecificFixture)('refactoring', async (fixture) => {
25
26
  const modEnv = {
26
27
  BASIC_QUEUE_LOGICAL_ID: 'OldName',
27
28
  };
28
- // First, deploy a stack
29
+ // First, deploy the stacks
30
+ await fixture.cdkDeploy('bucket-stack');
29
31
  await fixture.cdkDeploy('basic', { modEnv });
30
32
  // Then see if the refactoring tool detects the change
31
33
  const stdErr = await fixture.cdkRefactor({
@@ -38,4 +40,4 @@ const lib_1 = require("../../../lib");
38
40
  function removeColor(str) {
39
41
  return str.replace(/\x1B[[(?);]{0,2}(;?\d)*./g, '');
40
42
  }
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLWRyeS1ydW4uaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXJlZmFjdG9yLWRyeS1ydW4uaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLG1EQUFtRCxFQUNuRCxJQUFBLHlCQUFtQixFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkQsd0JBQXdCO0lBQ3hCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7UUFDL0IsTUFBTSxFQUFFO1lBQ04sc0JBQXNCLEVBQUUsU0FBUztTQUNsQztLQUNGLENBQUMsQ0FBQztJQUVILHNEQUFzRDtJQUN0RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDdkMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLHFCQUFxQixDQUFDO1FBQzdDLFlBQVksRUFBRSxJQUFJO1FBQ2xCLHFEQUFxRDtRQUNyRCxpQ0FBaUM7UUFDakMsTUFBTSxFQUFFO1lBQ04sc0JBQXNCLEVBQUUsU0FBUztTQUNsQztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUMzRSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7QUFDN0csQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUVGLElBQUEsZUFBUyxFQUNQLGlDQUFpQyxFQUNqQyxJQUFBLHlCQUFtQixFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkQsTUFBTSxNQUFNLEdBQUc7UUFDYixzQkFBc0IsRUFBRSxTQUFTO0tBQ2xDLENBQUM7SUFFRix3QkFBd0I7SUFDeEIsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFN0Msc0RBQXNEO0lBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN2QyxPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUscUJBQXFCLENBQUM7UUFDN0MsWUFBWSxFQUFFLElBQUk7UUFDbEIsTUFBTTtLQUNQLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNsRCxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBRUYsU0FBUyxXQUFXLENBQUMsR0FBVztJQUM5QixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aFNwZWNpZmljRml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2RldGVjdHMgcmVmYWN0b3JpbmcgY2hhbmdlcyBhbmQgcHJpbnRzIHRoZSByZXN1bHQnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdyZWZhY3RvcmluZycsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRmlyc3QsIGRlcGxveSBhIHN0YWNrXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Jhc2ljJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEJBU0lDX1FVRVVFX0xPR0lDQUxfSUQ6ICdPbGROYW1lJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUaGVuIHNlZSBpZiB0aGUgcmVmYWN0b3JpbmcgdG9vbCBkZXRlY3RzIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBzdGRFcnIgPSBhd2FpdCBmaXh0dXJlLmNka1JlZmFjdG9yKHtcbiAgICAgIG9wdGlvbnM6IFsnLS1kcnktcnVuJywgJy0tdW5zdGFibGU9cmVmYWN0b3InXSxcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIC8vIE1ha2luZyBzdXJlIHRoZSBzeW50aGVzaXplZCBzdGFjayBoYXMgdGhlIG5ldyBuYW1lXG4gICAgICAvLyBzbyB0aGF0IGEgcmVmYWN0b3IgaXMgZGV0ZWN0ZWRcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBCQVNJQ19RVUVVRV9MT0dJQ0FMX0lEOiAnTmV3TmFtZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0ZEVycikudG9Db250YWluKCdUaGUgZm9sbG93aW5nIHJlc291cmNlcyB3ZXJlIG1vdmVkIG9yIHJlbmFtZWQ6Jyk7XG4gICAgZXhwZWN0KHJlbW92ZUNvbG9yKHN0ZEVycikpLnRvTWF0Y2goL+KUgiBBV1M6OlNRUzo6UXVldWUg4pSCIC4qXFwvT2xkTmFtZVxcL1Jlc291cmNlIOKUgiAuKlxcL05ld05hbWVcXC9SZXNvdXJjZSDilIIvKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdubyByZWZhY3RvcmluZyBjaGFuZ2VzIGRldGVjdGVkJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncmVmYWN0b3JpbmcnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG1vZEVudiA9IHtcbiAgICAgIEJBU0lDX1FVRVVFX0xPR0lDQUxfSUQ6ICdPbGROYW1lJyxcbiAgICB9O1xuXG4gICAgLy8gRmlyc3QsIGRlcGxveSBhIHN0YWNrXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Jhc2ljJywgeyBtb2RFbnYgfSk7XG5cbiAgICAvLyBUaGVuIHNlZSBpZiB0aGUgcmVmYWN0b3JpbmcgdG9vbCBkZXRlY3RzIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBzdGRFcnIgPSBhd2FpdCBmaXh0dXJlLmNka1JlZmFjdG9yKHtcbiAgICAgIG9wdGlvbnM6IFsnLS1kcnktcnVuJywgJy0tdW5zdGFibGU9cmVmYWN0b3InXSxcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIG1vZEVudixcbiAgICB9KTtcblxuICAgIGV4cGVjdChzdGRFcnIpLnRvQ29udGFpbignTm90aGluZyB0byByZWZhY3RvcicpO1xuICB9KSxcbik7XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbG9yKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHgxQltbKD8pO117MCwyfSg7P1xcZCkqLi9nLCAnJyk7XG59XG5cbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLWRyeS1ydW4uaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXJlZmFjdG9yLWRyeS1ydW4uaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLGtFQUFrRSxFQUNsRSxJQUFBLHlCQUFtQixFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkQsMkJBQTJCO0lBQzNCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1FBQy9CLE1BQU0sRUFBRTtZQUNOLHNCQUFzQixFQUFFLFNBQVM7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxzREFBc0Q7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQztRQUM3QyxZQUFZLEVBQUUsSUFBSTtRQUNsQixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLE1BQU0sRUFBRTtZQUNOLHNCQUFzQixFQUFFLFNBQVM7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDM0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0FBQzdHLENBQUMsQ0FBQyxDQUNILENBQUM7QUFFRixJQUFBLGVBQVMsRUFDUCxnREFBZ0QsRUFDaEQsSUFBQSx5QkFBbUIsRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELE1BQU0sTUFBTSxHQUFHO1FBQ2Isc0JBQXNCLEVBQUUsU0FBUztLQUNsQyxDQUFDO0lBRUYsMkJBQTJCO0lBQzNCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU3QyxzREFBc0Q7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQztRQUM3QyxZQUFZLEVBQUUsSUFBSTtRQUNsQixNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQyxDQUNILENBQUM7QUFFRixTQUFTLFdBQVcsQ0FBQyxHQUFXO0lBQzlCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIHJlZmFjdG9yIC0gZGV0ZWN0cyByZWZhY3RvcmluZyBjaGFuZ2VzIGFuZCBwcmludHMgdGhlIHJlc3VsdCcsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JlZmFjdG9yaW5nJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBGaXJzdCwgZGVwbG95IHRoZSBzdGFja3NcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYnVja2V0LXN0YWNrJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Jhc2ljJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEJBU0lDX1FVRVVFX0xPR0lDQUxfSUQ6ICdPbGROYW1lJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUaGVuIHNlZSBpZiB0aGUgcmVmYWN0b3JpbmcgdG9vbCBkZXRlY3RzIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBzdGRFcnIgPSBhd2FpdCBmaXh0dXJlLmNka1JlZmFjdG9yKHtcbiAgICAgIG9wdGlvbnM6IFsnLS1kcnktcnVuJywgJy0tdW5zdGFibGU9cmVmYWN0b3InXSxcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIC8vIE1ha2luZyBzdXJlIHRoZSBzeW50aGVzaXplZCBzdGFjayBoYXMgYSBxdWV1ZSB3aXRoXG4gICAgICAvLyB0aGUgbmV3IG5hbWUgc28gdGhhdCBhIHJlZmFjdG9yIGlzIGRldGVjdGVkXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgQkFTSUNfUVVFVUVfTE9HSUNBTF9JRDogJ05ld05hbWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChzdGRFcnIpLnRvQ29udGFpbignVGhlIGZvbGxvd2luZyByZXNvdXJjZXMgd2VyZSBtb3ZlZCBvciByZW5hbWVkOicpO1xuICAgIGV4cGVjdChyZW1vdmVDb2xvcihzdGRFcnIpKS50b01hdGNoKC/ilIIgQVdTOjpTUVM6OlF1ZXVlIOKUgiAuKlxcL09sZE5hbWVcXC9SZXNvdXJjZSDilIIgLipcXC9OZXdOYW1lXFwvUmVzb3VyY2Ug4pSCLyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIHJlZmFjdG9yIC0gbm8gcmVmYWN0b3JpbmcgY2hhbmdlcyBkZXRlY3RlZCcsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JlZmFjdG9yaW5nJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBtb2RFbnYgPSB7XG4gICAgICBCQVNJQ19RVUVVRV9MT0dJQ0FMX0lEOiAnT2xkTmFtZScsXG4gICAgfTtcblxuICAgIC8vIEZpcnN0LCBkZXBsb3kgdGhlIHN0YWNrc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidWNrZXQtc3RhY2snKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYmFzaWMnLCB7IG1vZEVudiB9KTtcblxuICAgIC8vIFRoZW4gc2VlIGlmIHRoZSByZWZhY3RvcmluZyB0b29sIGRldGVjdHMgdGhlIGNoYW5nZVxuICAgIGNvbnN0IHN0ZEVyciA9IGF3YWl0IGZpeHR1cmUuY2RrUmVmYWN0b3Ioe1xuICAgICAgb3B0aW9uczogWyctLWRyeS1ydW4nLCAnLS11bnN0YWJsZT1yZWZhY3RvciddLFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgbW9kRW52LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0ZEVycikudG9Db250YWluKCdOb3RoaW5nIHRvIHJlZmFjdG9yJyk7XG4gIH0pLFxuKTtcblxuZnVuY3Rpb24gcmVtb3ZlQ29sb3Ioc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xceDFCW1soPyk7XXswLDJ9KDs/XFxkKSouL2csICcnKTtcbn1cblxuIl19
@@ -0,0 +1,7 @@
1
+ interface StackInfo {
2
+ readonly account: string;
3
+ readonly region: string;
4
+ readonly name: string;
5
+ }
6
+ export declare function getStackInfoFromArn(stackArn: string): StackInfo;
7
+ export {};
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getStackInfoFromArn = getStackInfoFromArn;
4
+ const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
5
+ const lib_1 = require("../../../lib");
6
+ (0, lib_1.integTest)('cdk refactor - moves a referenced resource to a different stack', (0, lib_1.withSpecificFixture)('refactoring', async (fixture) => {
7
+ // First, deploy the stacks
8
+ await fixture.cdkDeploy('bucket-stack');
9
+ const originalStackArn = await fixture.cdkDeploy('basic');
10
+ const originalStackInfo = getStackInfoFromArn(originalStackArn);
11
+ const stackPrefix = originalStackInfo.name.replace(/-basic$/, '');
12
+ // Then see if the refactoring tool detects the change
13
+ const stdErr = await fixture.cdkRefactor({
14
+ options: ['--unstable=refactor', '--force'],
15
+ allowErrExit: true,
16
+ // Making sure the synthesized stack has a queue with
17
+ // the new name so that a refactor is detected
18
+ modEnv: {
19
+ BUCKET_IN_SEPARATE_STACK: 'true',
20
+ },
21
+ });
22
+ expect(stdErr).toMatch('Stack refactor complete');
23
+ const stacks = await fixture.aws.cloudFormation.send(new client_cloudformation_1.ListStacksCommand());
24
+ const bucketStack = (stacks.StackSummaries ?? []).find((s) => s.StackName === `${stackPrefix}-bucket-stack`);
25
+ expect(bucketStack).toBeDefined();
26
+ const stackDescription = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStackResourcesCommand({
27
+ StackName: bucketStack.StackName,
28
+ }));
29
+ const resources = Object.fromEntries((stackDescription.StackResources ?? []).map((resource) => [resource.LogicalResourceId, resource]));
30
+ expect(resources.Bucket83908E77).toBeDefined();
31
+ // CloudFormation may complete the refactoring, while the stack is still in the "UPDATE_IN_PROGRESS" state.
32
+ // Give it a couple of seconds to finish the update.
33
+ await new Promise((resolve) => setTimeout(resolve, 2000));
34
+ }));
35
+ function getStackInfoFromArn(stackArn) {
36
+ // Example ARN: arn:aws:cloudformation:region:account-id:stack/stack-name/guid
37
+ const arnParts = stackArn.split(':');
38
+ const resource = arnParts[5]; // "stack/stack-name/guid"
39
+ const resourceParts = resource.split('/');
40
+ // The stack name is the second part: ["stack", "stack-name", "guid"]
41
+ return {
42
+ region: arnParts[3],
43
+ account: arnParts[4],
44
+ name: resourceParts[1],
45
+ };
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLW1vdmUtc2FtZS10by1kaWZmZXJlbnQtc3RhY2tzLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1yZWZhY3Rvci1tb3ZlLXNhbWUtdG8tZGlmZmVyZW50LXN0YWNrcy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF5REEsa0RBV0M7QUFwRUQsMEVBQXNIO0FBQ3RILHNDQUE4RDtBQUU5RCxJQUFBLGVBQVMsRUFDUCxpRUFBaUUsRUFDakUsSUFBQSx5QkFBbUIsRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELDJCQUEyQjtJQUMzQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUQsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWxFLHNEQUFzRDtJQUN0RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDdkMsT0FBTyxFQUFFLENBQUMscUJBQXFCLEVBQUUsU0FBUyxDQUFDO1FBQzNDLFlBQVksRUFBRSxJQUFJO1FBQ2xCLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsTUFBTSxFQUFFO1lBQ04sd0JBQXdCLEVBQUUsTUFBTTtTQUNqQztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUVsRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLHlDQUFpQixFQUFFLENBQUMsQ0FBQztJQUU5RSxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEdBQUcsV0FBVyxlQUFlLENBQUMsQ0FBQztJQUU3RyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFbEMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDNUQsSUFBSSxxREFBNkIsQ0FBQztRQUNoQyxTQUFTLEVBQUUsV0FBWSxDQUFDLFNBQVM7S0FDbEMsQ0FBQyxDQUNILENBQUM7SUFFRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUNsQyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ3pDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBa0IsRUFBRSxRQUFRLENBQTRCLENBQ2pGLENBQ0YsQ0FBQztJQUVGLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFL0MsMkdBQTJHO0lBQzNHLG9EQUFvRDtJQUNwRCxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQVFGLFNBQWdCLG1CQUFtQixDQUFDLFFBQWdCO0lBQ2xELDhFQUE4RTtJQUM5RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUN4RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLHFFQUFxRTtJQUNyRSxPQUFPO1FBQ0wsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDdkIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCwgTGlzdFN0YWNrc0NvbW1hbmQsIHR5cGUgU3RhY2tSZXNvdXJjZSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgcmVmYWN0b3IgLSBtb3ZlcyBhIHJlZmVyZW5jZWQgcmVzb3VyY2UgdG8gYSBkaWZmZXJlbnQgc3RhY2snLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdyZWZhY3RvcmluZycsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRmlyc3QsIGRlcGxveSB0aGUgc3RhY2tzXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2J1Y2tldC1zdGFjaycpO1xuICAgIGNvbnN0IG9yaWdpbmFsU3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYmFzaWMnKTtcbiAgICBjb25zdCBvcmlnaW5hbFN0YWNrSW5mbyA9IGdldFN0YWNrSW5mb0Zyb21Bcm4ob3JpZ2luYWxTdGFja0Fybik7XG4gICAgY29uc3Qgc3RhY2tQcmVmaXggPSBvcmlnaW5hbFN0YWNrSW5mby5uYW1lLnJlcGxhY2UoLy1iYXNpYyQvLCAnJyk7XG5cbiAgICAvLyBUaGVuIHNlZSBpZiB0aGUgcmVmYWN0b3JpbmcgdG9vbCBkZXRlY3RzIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBzdGRFcnIgPSBhd2FpdCBmaXh0dXJlLmNka1JlZmFjdG9yKHtcbiAgICAgIG9wdGlvbnM6IFsnLS11bnN0YWJsZT1yZWZhY3RvcicsICctLWZvcmNlJ10sXG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICAvLyBNYWtpbmcgc3VyZSB0aGUgc3ludGhlc2l6ZWQgc3RhY2sgaGFzIGEgcXVldWUgd2l0aFxuICAgICAgLy8gdGhlIG5ldyBuYW1lIHNvIHRoYXQgYSByZWZhY3RvciBpcyBkZXRlY3RlZFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEJVQ0tFVF9JTl9TRVBBUkFURV9TVEFDSzogJ3RydWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChzdGRFcnIpLnRvTWF0Y2goJ1N0YWNrIHJlZmFjdG9yIGNvbXBsZXRlJyk7XG5cbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKG5ldyBMaXN0U3RhY2tzQ29tbWFuZCgpKTtcblxuICAgIGNvbnN0IGJ1Y2tldFN0YWNrID0gKHN0YWNrcy5TdGFja1N1bW1hcmllcyA/PyBbXSkuZmluZCgocykgPT4gcy5TdGFja05hbWUgPT09IGAke3N0YWNrUHJlZml4fS1idWNrZXQtc3RhY2tgKTtcblxuICAgIGV4cGVjdChidWNrZXRTdGFjaykudG9CZURlZmluZWQoKTtcblxuICAgIGNvbnN0IHN0YWNrRGVzY3JpcHRpb24gPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBidWNrZXRTdGFjayEuU3RhY2tOYW1lLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc291cmNlcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIChzdGFja0Rlc2NyaXB0aW9uLlN0YWNrUmVzb3VyY2VzID8/IFtdKS5tYXAoXG4gICAgICAgIChyZXNvdXJjZSkgPT4gW3Jlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkISwgcmVzb3VyY2VdIGFzIFtzdHJpbmcsIFN0YWNrUmVzb3VyY2VdLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc291cmNlcy5CdWNrZXQ4MzkwOEU3NykudG9CZURlZmluZWQoKTtcblxuICAgIC8vIENsb3VkRm9ybWF0aW9uIG1heSBjb21wbGV0ZSB0aGUgcmVmYWN0b3JpbmcsIHdoaWxlIHRoZSBzdGFjayBpcyBzdGlsbCBpbiB0aGUgXCJVUERBVEVfSU5fUFJPR1JFU1NcIiBzdGF0ZS5cbiAgICAvLyBHaXZlIGl0IGEgY291cGxlIG9mIHNlY29uZHMgdG8gZmluaXNoIHRoZSB1cGRhdGUuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwMCkpO1xuICB9KSxcbik7XG5cbmludGVyZmFjZSBTdGFja0luZm8ge1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja0luZm9Gcm9tQXJuKHN0YWNrQXJuOiBzdHJpbmcpOiBTdGFja0luZm8ge1xuICAvLyBFeGFtcGxlIEFSTjogYXJuOmF3czpjbG91ZGZvcm1hdGlvbjpyZWdpb246YWNjb3VudC1pZDpzdGFjay9zdGFjay1uYW1lL2d1aWRcbiAgY29uc3QgYXJuUGFydHMgPSBzdGFja0Fybi5zcGxpdCgnOicpO1xuICBjb25zdCByZXNvdXJjZSA9IGFyblBhcnRzWzVdOyAvLyBcInN0YWNrL3N0YWNrLW5hbWUvZ3VpZFwiXG4gIGNvbnN0IHJlc291cmNlUGFydHMgPSByZXNvdXJjZS5zcGxpdCgnLycpO1xuICAvLyBUaGUgc3RhY2sgbmFtZSBpcyB0aGUgc2Vjb25kIHBhcnQ6IFtcInN0YWNrXCIsIFwic3RhY2stbmFtZVwiLCBcImd1aWRcIl1cbiAgcmV0dXJuIHtcbiAgICByZWdpb246IGFyblBhcnRzWzNdLFxuICAgIGFjY291bnQ6IGFyblBhcnRzWzRdLFxuICAgIG5hbWU6IHJlc291cmNlUGFydHNbMV0sXG4gIH07XG59XG5cbiJdfQ==
@@ -0,0 +1 @@
1
+ export declare function getStackNameFromArn(stackArn: string): string;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getStackNameFromArn = getStackNameFromArn;
4
+ const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
5
+ const lib_1 = require("../../../lib");
6
+ (0, lib_1.integTest)('cdk refactor - detects refactoring changes and executes the refactor', (0, lib_1.withSpecificFixture)('refactoring', async (fixture) => {
7
+ // First, deploy the stacks
8
+ await fixture.cdkDeploy('bucket-stack');
9
+ const stackArn = await fixture.cdkDeploy('basic', {
10
+ modEnv: {
11
+ BASIC_QUEUE_LOGICAL_ID: 'OldName',
12
+ },
13
+ });
14
+ // Then see if the refactoring tool detects the change
15
+ const stdErr = await fixture.cdkRefactor({
16
+ options: ['--unstable=refactor', '--force'],
17
+ allowErrExit: true,
18
+ // Making sure the synthesized stack has a queue with
19
+ // the new name so that a refactor is detected
20
+ modEnv: {
21
+ BASIC_QUEUE_LOGICAL_ID: 'NewName',
22
+ },
23
+ });
24
+ expect(stdErr).toMatch('Stack refactor complete');
25
+ const stackDescription = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStackResourcesCommand({
26
+ StackName: getStackNameFromArn(stackArn),
27
+ }));
28
+ const resources = Object.fromEntries((stackDescription.StackResources ?? []).map((resource) => [resource.LogicalResourceId, resource]));
29
+ expect(resources.NewName57B171FE).toBeDefined();
30
+ // CloudFormation may complete the refactoring, while the stack is still in the "UPDATE_IN_PROGRESS" state.
31
+ // Give it a couple of seconds to finish the update.
32
+ await new Promise((resolve) => setTimeout(resolve, 2000));
33
+ }));
34
+ function getStackNameFromArn(stackArn) {
35
+ // Example ARN: arn:aws:cloudformation:region:account-id:stack/stack-name/guid
36
+ const arnParts = stackArn.split(':');
37
+ const resource = arnParts[5]; // "stack/stack-name/guid"
38
+ const resourceParts = resource.split('/');
39
+ // The stack name is the second part: ["stack", "stack-name", "guid"]
40
+ return resourceParts[1];
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLW5vLWFtYmlndWl0aWVzLWV4ZWN1dGlvbi5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstcmVmYWN0b3Itbm8tYW1iaWd1aXRpZXMtZXhlY3V0aW9uLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStDQSxrREFPQztBQXRERCwwRUFBbUc7QUFDbkcsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLHNFQUFzRSxFQUN0RSxJQUFBLHlCQUFtQixFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkQsMkJBQTJCO0lBQzNCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1FBQ2hELE1BQU0sRUFBRTtZQUNOLHNCQUFzQixFQUFFLFNBQVM7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxzREFBc0Q7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLFNBQVMsQ0FBQztRQUMzQyxZQUFZLEVBQUUsSUFBSTtRQUNsQixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLE1BQU0sRUFBRTtZQUNOLHNCQUFzQixFQUFFLFNBQVM7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFFbEQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDNUQsSUFBSSxxREFBNkIsQ0FBQztRQUNoQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxDQUFDO0tBQ3pDLENBQUMsQ0FDSCxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDbEMsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUN6QyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWtCLEVBQUUsUUFBUSxDQUE0QixDQUNqRixDQUNGLENBQUM7SUFFRixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRWhELDJHQUEyRztJQUMzRyxvREFBb0Q7SUFDcEQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxDQUNILENBQUM7QUFFRixTQUFnQixtQkFBbUIsQ0FBQyxRQUFnQjtJQUNsRCw4RUFBOEU7SUFDOUUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7SUFDeEQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxxRUFBcUU7SUFDckUsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kLCB0eXBlIFN0YWNrUmVzb3VyY2UgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIHJlZmFjdG9yIC0gZGV0ZWN0cyByZWZhY3RvcmluZyBjaGFuZ2VzIGFuZCBleGVjdXRlcyB0aGUgcmVmYWN0b3InLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdyZWZhY3RvcmluZycsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRmlyc3QsIGRlcGxveSB0aGUgc3RhY2tzXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2J1Y2tldC1zdGFjaycpO1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Jhc2ljJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEJBU0lDX1FVRVVFX0xPR0lDQUxfSUQ6ICdPbGROYW1lJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUaGVuIHNlZSBpZiB0aGUgcmVmYWN0b3JpbmcgdG9vbCBkZXRlY3RzIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBzdGRFcnIgPSBhd2FpdCBmaXh0dXJlLmNka1JlZmFjdG9yKHtcbiAgICAgIG9wdGlvbnM6IFsnLS11bnN0YWJsZT1yZWZhY3RvcicsICctLWZvcmNlJ10sXG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICAvLyBNYWtpbmcgc3VyZSB0aGUgc3ludGhlc2l6ZWQgc3RhY2sgaGFzIGEgcXVldWUgd2l0aFxuICAgICAgLy8gdGhlIG5ldyBuYW1lIHNvIHRoYXQgYSByZWZhY3RvciBpcyBkZXRlY3RlZFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEJBU0lDX1FVRVVFX0xPR0lDQUxfSUQ6ICdOZXdOYW1lJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc3RkRXJyKS50b01hdGNoKCdTdGFjayByZWZhY3RvciBjb21wbGV0ZScpO1xuXG4gICAgY29uc3Qgc3RhY2tEZXNjcmlwdGlvbiA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGdldFN0YWNrTmFtZUZyb21Bcm4oc3RhY2tBcm4pLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc291cmNlcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIChzdGFja0Rlc2NyaXB0aW9uLlN0YWNrUmVzb3VyY2VzID8/IFtdKS5tYXAoXG4gICAgICAgIChyZXNvdXJjZSkgPT4gW3Jlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkISwgcmVzb3VyY2VdIGFzIFtzdHJpbmcsIFN0YWNrUmVzb3VyY2VdLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc291cmNlcy5OZXdOYW1lNTdCMTcxRkUpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAvLyBDbG91ZEZvcm1hdGlvbiBtYXkgY29tcGxldGUgdGhlIHJlZmFjdG9yaW5nLCB3aGlsZSB0aGUgc3RhY2sgaXMgc3RpbGwgaW4gdGhlIFwiVVBEQVRFX0lOX1BST0dSRVNTXCIgc3RhdGUuXG4gICAgLy8gR2l2ZSBpdCBhIGNvdXBsZSBvZiBzZWNvbmRzIHRvIGZpbmlzaCB0aGUgdXBkYXRlLlxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMDApKTtcbiAgfSksXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhY2tOYW1lRnJvbUFybihzdGFja0Fybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gRXhhbXBsZSBBUk46IGFybjphd3M6Y2xvdWRmb3JtYXRpb246cmVnaW9uOmFjY291bnQtaWQ6c3RhY2svc3RhY2stbmFtZS9ndWlkXG4gIGNvbnN0IGFyblBhcnRzID0gc3RhY2tBcm4uc3BsaXQoJzonKTtcbiAgY29uc3QgcmVzb3VyY2UgPSBhcm5QYXJ0c1s1XTsgLy8gXCJzdGFjay9zdGFjay1uYW1lL2d1aWRcIlxuICBjb25zdCByZXNvdXJjZVBhcnRzID0gcmVzb3VyY2Uuc3BsaXQoJy8nKTtcbiAgLy8gVGhlIHN0YWNrIG5hbWUgaXMgdGhlIHNlY29uZCBwYXJ0OiBbXCJzdGFja1wiLCBcInN0YWNrLW5hbWVcIiwgXCJndWlkXCJdXG4gIHJldHVybiByZXNvdXJjZVBhcnRzWzFdO1xufVxuIl19
@@ -0,0 +1,7 @@
1
+ interface StackInfo {
2
+ readonly account: string;
3
+ readonly region: string;
4
+ readonly name: string;
5
+ }
6
+ export declare function getStackInfoFromArn(stackArn: string): StackInfo;
7
+ export {};
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getStackInfoFromArn = getStackInfoFromArn;
4
+ const fs = require("node:fs");
5
+ const os = require("node:os");
6
+ const path = require("node:path");
7
+ const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
8
+ const lib_1 = require("../../../lib");
9
+ (0, lib_1.integTest)('cdk refactor - detects refactoring changes and executes the refactor, overriding ambiguities', (0, lib_1.withSpecificFixture)('refactoring', async (fixture) => {
10
+ // First, deploy the stacks
11
+ await fixture.cdkDeploy('bucket-stack');
12
+ const stackArn = await fixture.cdkDeploy('basic', {
13
+ modEnv: {
14
+ BASIC_QUEUE_LOGICAL_ID: 'OldName',
15
+ ADDITIONAL_QUEUE_LOGICAL_ID: 'AdditionalOldName',
16
+ },
17
+ });
18
+ const stackInfo = getStackInfoFromArn(stackArn);
19
+ const stackName = stackInfo.name;
20
+ const overrides = {
21
+ environments: [
22
+ {
23
+ account: stackInfo.account,
24
+ region: stackInfo.region,
25
+ resources: {
26
+ [`${stackName}/OldName/Resource`]: `${stackName}/NewName/Resource`,
27
+ [`${stackName}/AdditionalOldName/Resource`]: `${stackName}/AdditionalNewName/Resource`,
28
+ },
29
+ },
30
+ ],
31
+ };
32
+ const overridesPath = path.join(os.tmpdir(), `overrides-${Date.now()}.json`);
33
+ fs.writeFileSync(overridesPath, JSON.stringify(overrides));
34
+ // Then see if the refactoring tool detects the change
35
+ const stdErr = await fixture.cdkRefactor({
36
+ options: ['--unstable=refactor', '--force', `--override-file=${overridesPath}`],
37
+ allowErrExit: true,
38
+ // Making sure the synthesized stack has a queue with
39
+ // the new name so that a refactor is detected
40
+ modEnv: {
41
+ BASIC_QUEUE_LOGICAL_ID: 'NewName',
42
+ ADDITIONAL_QUEUE_LOGICAL_ID: 'AdditionalNewName',
43
+ },
44
+ });
45
+ expect(stdErr).toMatch('Stack refactor complete');
46
+ const stackDescription = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStackResourcesCommand({
47
+ StackName: stackName,
48
+ }));
49
+ const resources = Object.fromEntries((stackDescription.StackResources ?? []).map((resource) => [resource.LogicalResourceId, resource]));
50
+ expect(resources.AdditionalNewNameE2FC5A4C).toBeDefined();
51
+ expect(resources.NewName57B171FE).toBeDefined();
52
+ // CloudFormation may complete the refactoring, while the stack is still in the "UPDATE_IN_PROGRESS" state.
53
+ // Give it a couple of seconds to finish the update.
54
+ await new Promise((resolve) => setTimeout(resolve, 2000));
55
+ }));
56
+ function getStackInfoFromArn(stackArn) {
57
+ // Example ARN: arn:aws:cloudformation:region:account-id:stack/stack-name/guid
58
+ const arnParts = stackArn.split(':');
59
+ const resource = arnParts[5]; // "stack/stack-name/guid"
60
+ const resourceParts = resource.split('/');
61
+ // The stack name is the second part: ["stack", "stack-name", "guid"]
62
+ return {
63
+ region: arnParts[3],
64
+ account: arnParts[4],
65
+ name: resourceParts[1],
66
+ };
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLXdpdGgtYW1iaWd1aXRpZXMtZXhlY3V0aW9uLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1yZWZhY3Rvci13aXRoLWFtYmlndWl0aWVzLWV4ZWN1dGlvbi5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErRUEsa0RBV0M7QUExRkQsOEJBQThCO0FBQzlCLDhCQUE4QjtBQUM5QixrQ0FBa0M7QUFFbEMsMEVBQStFO0FBQy9FLHNDQUE4RDtBQUU5RCxJQUFBLGVBQVMsRUFDUCw4RkFBOEYsRUFDOUYsSUFBQSx5QkFBbUIsRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELDJCQUEyQjtJQUMzQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtRQUNoRCxNQUFNLEVBQUU7WUFDTixzQkFBc0IsRUFBRSxTQUFTO1lBQ2pDLDJCQUEyQixFQUFFLG1CQUFtQjtTQUNqRDtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFFakMsTUFBTSxTQUFTLEdBQUc7UUFDaEIsWUFBWSxFQUFFO1lBQ1o7Z0JBQ0UsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPO2dCQUMxQixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3hCLFNBQVMsRUFBRTtvQkFDVCxDQUFDLEdBQUcsU0FBUyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUcsU0FBUyxtQkFBbUI7b0JBQ2xFLENBQUMsR0FBRyxTQUFTLDZCQUE2QixDQUFDLEVBQUUsR0FBRyxTQUFTLDZCQUE2QjtpQkFDdkY7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RSxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFM0Qsc0RBQXNEO0lBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN2QyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLGFBQWEsRUFBRSxDQUFDO1FBQy9FLFlBQVksRUFBRSxJQUFJO1FBQ2xCLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsTUFBTSxFQUFFO1lBQ04sc0JBQXNCLEVBQUUsU0FBUztZQUNqQywyQkFBMkIsRUFBRSxtQkFBbUI7U0FDakQ7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFFbEQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDNUQsSUFBSSxxREFBNkIsQ0FBQztRQUNoQyxTQUFTLEVBQUUsU0FBUztLQUNyQixDQUFDLENBQ0gsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDekMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFrQixFQUFFLFFBQVEsQ0FBNEIsQ0FDakYsQ0FDRixDQUFDO0lBRUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzFELE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFaEQsMkdBQTJHO0lBQzNHLG9EQUFvRDtJQUNwRCxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQVFGLFNBQWdCLG1CQUFtQixDQUFDLFFBQWdCO0lBQ2xELDhFQUE4RTtJQUM5RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUN4RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLHFFQUFxRTtJQUNyRSxPQUFPO1FBQ0wsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDdkIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBTdGFja1Jlc291cmNlIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aFNwZWNpZmljRml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2NkayByZWZhY3RvciAtIGRldGVjdHMgcmVmYWN0b3JpbmcgY2hhbmdlcyBhbmQgZXhlY3V0ZXMgdGhlIHJlZmFjdG9yLCBvdmVycmlkaW5nIGFtYmlndWl0aWVzJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncmVmYWN0b3JpbmcnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEZpcnN0LCBkZXBsb3kgdGhlIHN0YWNrc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidWNrZXQtc3RhY2snKTtcbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdiYXNpYycsIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBCQVNJQ19RVUVVRV9MT0dJQ0FMX0lEOiAnT2xkTmFtZScsXG4gICAgICAgIEFERElUSU9OQUxfUVVFVUVfTE9HSUNBTF9JRDogJ0FkZGl0aW9uYWxPbGROYW1lJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGFja0luZm8gPSBnZXRTdGFja0luZm9Gcm9tQXJuKHN0YWNrQXJuKTtcbiAgICBjb25zdCBzdGFja05hbWUgPSBzdGFja0luZm8ubmFtZTtcblxuICAgIGNvbnN0IG92ZXJyaWRlcyA9IHtcbiAgICAgIGVudmlyb25tZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogc3RhY2tJbmZvLmFjY291bnQsXG4gICAgICAgICAgcmVnaW9uOiBzdGFja0luZm8ucmVnaW9uLFxuICAgICAgICAgIHJlc291cmNlczoge1xuICAgICAgICAgICAgW2Ake3N0YWNrTmFtZX0vT2xkTmFtZS9SZXNvdXJjZWBdOiBgJHtzdGFja05hbWV9L05ld05hbWUvUmVzb3VyY2VgLFxuICAgICAgICAgICAgW2Ake3N0YWNrTmFtZX0vQWRkaXRpb25hbE9sZE5hbWUvUmVzb3VyY2VgXTogYCR7c3RhY2tOYW1lfS9BZGRpdGlvbmFsTmV3TmFtZS9SZXNvdXJjZWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGNvbnN0IG92ZXJyaWRlc1BhdGggPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksIGBvdmVycmlkZXMtJHtEYXRlLm5vdygpfS5qc29uYCk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhvdmVycmlkZXNQYXRoLCBKU09OLnN0cmluZ2lmeShvdmVycmlkZXMpKTtcblxuICAgIC8vIFRoZW4gc2VlIGlmIHRoZSByZWZhY3RvcmluZyB0b29sIGRldGVjdHMgdGhlIGNoYW5nZVxuICAgIGNvbnN0IHN0ZEVyciA9IGF3YWl0IGZpeHR1cmUuY2RrUmVmYWN0b3Ioe1xuICAgICAgb3B0aW9uczogWyctLXVuc3RhYmxlPXJlZmFjdG9yJywgJy0tZm9yY2UnLCBgLS1vdmVycmlkZS1maWxlPSR7b3ZlcnJpZGVzUGF0aH1gXSxcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIC8vIE1ha2luZyBzdXJlIHRoZSBzeW50aGVzaXplZCBzdGFjayBoYXMgYSBxdWV1ZSB3aXRoXG4gICAgICAvLyB0aGUgbmV3IG5hbWUgc28gdGhhdCBhIHJlZmFjdG9yIGlzIGRldGVjdGVkXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgQkFTSUNfUVVFVUVfTE9HSUNBTF9JRDogJ05ld05hbWUnLFxuICAgICAgICBBRERJVElPTkFMX1FVRVVFX0xPR0lDQUxfSUQ6ICdBZGRpdGlvbmFsTmV3TmFtZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0ZEVycikudG9NYXRjaCgnU3RhY2sgcmVmYWN0b3IgY29tcGxldGUnKTtcblxuICAgIGNvbnN0IHN0YWNrRGVzY3JpcHRpb24gPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgKHN0YWNrRGVzY3JpcHRpb24uU3RhY2tSZXNvdXJjZXMgPz8gW10pLm1hcChcbiAgICAgICAgKHJlc291cmNlKSA9PiBbcmVzb3VyY2UuTG9naWNhbFJlc291cmNlSWQhLCByZXNvdXJjZV0gYXMgW3N0cmluZywgU3RhY2tSZXNvdXJjZV0sXG4gICAgICApLFxuICAgICk7XG5cbiAgICBleHBlY3QocmVzb3VyY2VzLkFkZGl0aW9uYWxOZXdOYW1lRTJGQzVBNEMpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KHJlc291cmNlcy5OZXdOYW1lNTdCMTcxRkUpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAvLyBDbG91ZEZvcm1hdGlvbiBtYXkgY29tcGxldGUgdGhlIHJlZmFjdG9yaW5nLCB3aGlsZSB0aGUgc3RhY2sgaXMgc3RpbGwgaW4gdGhlIFwiVVBEQVRFX0lOX1BST0dSRVNTXCIgc3RhdGUuXG4gICAgLy8gR2l2ZSBpdCBhIGNvdXBsZSBvZiBzZWNvbmRzIHRvIGZpbmlzaCB0aGUgdXBkYXRlLlxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMDApKTtcbiAgfSksXG4pO1xuXG5pbnRlcmZhY2UgU3RhY2tJbmZvIHtcbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhY2tJbmZvRnJvbUFybihzdGFja0Fybjogc3RyaW5nKTogU3RhY2tJbmZvIHtcbiAgLy8gRXhhbXBsZSBBUk46IGFybjphd3M6Y2xvdWRmb3JtYXRpb246cmVnaW9uOmFjY291bnQtaWQ6c3RhY2svc3RhY2stbmFtZS9ndWlkXG4gIGNvbnN0IGFyblBhcnRzID0gc3RhY2tBcm4uc3BsaXQoJzonKTtcbiAgY29uc3QgcmVzb3VyY2UgPSBhcm5QYXJ0c1s1XTsgLy8gXCJzdGFjay9zdGFjay1uYW1lL2d1aWRcIlxuICBjb25zdCByZXNvdXJjZVBhcnRzID0gcmVzb3VyY2Uuc3BsaXQoJy8nKTtcbiAgLy8gVGhlIHN0YWNrIG5hbWUgaXMgdGhlIHNlY29uZCBwYXJ0OiBbXCJzdGFja1wiLCBcInN0YWNrLW5hbWVcIiwgXCJndWlkXCJdXG4gIHJldHVybiB7XG4gICAgcmVnaW9uOiBhcm5QYXJ0c1szXSxcbiAgICBhY2NvdW50OiBhcm5QYXJ0c1s0XSxcbiAgICBuYW1lOiByZXNvdXJjZVBhcnRzWzFdLFxuICB9O1xufVxuIl19
@@ -28,7 +28,6 @@ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-c
28
28
  json: false,
29
29
  debug: false,
30
30
  staging: true,
31
- notices: true,
32
31
  ['no-color']: false,
33
32
  ci: expect.anything(), // changes based on where this is called
34
33
  validation: true,
@@ -77,7 +76,6 @@ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-c
77
76
  json: false,
78
77
  debug: false,
79
78
  staging: true,
80
- notices: true,
81
79
  ['no-color']: false,
82
80
  ci: expect.anything(), // changes based on where this is called
83
81
  validation: true,
@@ -119,4 +117,4 @@ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-c
119
117
  ]);
120
118
  fs.unlinkSync(telemetryFile);
121
119
  }));
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXN5bnRoLXRlbGVtZXRyeS13aXRoLWVycm9ycy5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstc3ludGgtdGVsZW1ldHJ5LXdpdGgtZXJyb3JzLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0Isc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCx1RUFBdUUsRUFDdkUsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLGFBQWEsRUFBRSxDQUFDLEVBQUU7UUFDdkcsWUFBWSxFQUFFLElBQUk7UUFDbEIsTUFBTSxFQUFFO1lBQ04sZUFBZSxFQUFFLG1CQUFtQjtTQUNyQztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUU3QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkIsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9C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RUFBRTtnQkFDakMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQzVCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO2dCQUNyRCxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDekIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2FBQzdCLENBQUM7WUFDRixXQUFXLEVBQUU7Z0JBQ1gsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3JCLEVBQUUsRUFBRTtvQkFDRixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFDM0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7aUJBQzNCO2dCQUNELFdBQVcsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2FBQy9CO1lBQ0QsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7YUFDekI7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLGVBQWU7YUFDdEI7U0FDRixDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7IC8vIEluY2x1ZGVzIHRoZSB0aW1lIHRvIGFjcXVpcmUgbG9ja3MsIHdvcnN0LWNhc2Ugc2luZ2xlLXRocmVhZGVkIHJ1bnRpbWVcblxuaW50ZWdUZXN0KFxuICAnY2RrIHN5bnRoIHdpdGggdGVsZW1ldHJ5IGFuZCB2YWxpZGF0aW9uIGVycm9yIGxlYWRzIHRvIGludm9rZSBmYWlsdXJlJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgdGVsZW1ldHJ5RmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgYHRlbGVtZXRyeS0ke0RhdGUubm93KCl9Lmpzb25gKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgJy0tdW5zdGFibGU9dGVsZW1ldHJ5JywgYC0tdGVsZW1ldHJ5LWZpbGU9JHt0ZWxlbWV0cnlGaWxlfWBdLCB7XG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2Utd2l0aC1lcnJvcnMnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignVGhpcyBpcyBhbiBlcnJvcicpO1xuXG4gICAgY29uc3QganNvbiA9IGZzLnJlYWRKU09OU3luYyh0ZWxlbWV0cnlGaWxlKTtcbiAgICBleHBlY3QoanNvbikudG9FcXVhbChbXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIGV2ZW50OiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgY29tbWFuZDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgcGF0aDogWydzeW50aCddLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICB2ZXJib3NlOiAxLFxuICAgICAgICAgICAgICB1bnN0YWJsZTogJzxyZWRhY3RlZD4nLFxuICAgICAgICAgICAgICBbJ3RlbGVtZXRyeS1maWxlJ106ICc8cmVkYWN0ZWQ+JyxcbiAgICAgICAgICAgICAgbG9va3VwczogdHJ1ZSxcbiAgICAgICAgICAgICAgWydpZ25vcmUtZXJyb3JzJ106IGZhbHNlLFxuICAgICAgICAgICAgICBqc29uOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGVidWc6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGFnaW5nOiB0cnVlLFxuICAgICAgICAgICAgICBub3RpY2VzOiB0cnVlLFxuICAgICAgICAgICAgICBbJ25vLWNvbG9yJ106IGZhbHNlLFxuICAgICAgICAgICAgICBjaTogZXhwZWN0LmFueXRoaW5nKCksIC8vIGNoYW5nZXMgYmFzZWQgb24gd2hlcmUgdGhpcyBpcyBjYWxsZWRcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgcXVpZXQ6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3RhdGU6ICdTVUNDRUVERUQnLFxuICAgICAgICAgIGV2ZW50VHlwZTogJ1NZTlRIJyxcbiAgICAgICAgfSksXG4gICAgICAgIGlkZW50aWZpZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIHNlc3Npb25JZDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgdGVsZW1ldHJ5VmVyc2lvbjogJzEuMCcsXG4gICAgICAgICAgY2RrQ2xpVmVyc2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgY2RrTGlicmFyeVZlcnNpb246IGZpeHR1cmUubGlicmFyeS5yZXF1ZXN0ZWRWZXJzaW9uKCksXG4gICAgICAgICAgcmVnaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBldmVudElkOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnOjEnKSxcbiAgICAgICAgICB0aW1lc3RhbXA6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBjaTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgb3M6IHtcbiAgICAgICAgICAgIHBsYXRmb3JtOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICAgIHJlbGVhc2U6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm9kZVZlcnNpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9LFxuICAgICAgICBwcm9qZWN0OiB7fSxcbiAgICAgICAgZHVyYXRpb246IHtcbiAgICAgICAgICB0b3RhbDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgZXZlbnQ6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBjb21tYW5kOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBwYXRoOiBbJ3N5bnRoJ10sXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIHZlcmJvc2U6IDEsXG4gICAgICAgICAgICAgIHVuc3RhYmxlOiAnPHJlZGFjdGVkPicsXG4gICAgICAgICAgICAgIFsndGVsZW1ldHJ5LWZpbGUnXTogJzxyZWRhY3RlZD4nLFxuICAgICAgICAgICAgICBsb29rdXBzOiB0cnVlLFxuICAgICAgICAgICAgICBbJ2lnbm9yZS1lcnJvcnMnXTogZmFsc2UsXG4gICAgICAgICAgICAgIGpzb246IGZhbHNlLFxuICAgICAgICAgICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgICAgICAgICAgIHN0YWdpbmc6IHRydWUsXG4gICAgICAgICAgICAgIG5vdGljZXM6IHRydWUsXG4gICAgICAgICAgICAgIFsnbm8tY29sb3InXTogZmFsc2UsXG4gICAgICAgICAgICAgIGNpOiBleHBlY3QuYW55dGhpbmcoKSwgLy8gY2hhbmdlcyBiYXNlZCBvbiB3aGVyZSB0aGlzIGlzIGNhbGxlZFxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICBxdWlldDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzdGF0ZTogJ0ZBSUxFRCcsXG4gICAgICAgICAgZXZlbnRUeXBlOiAnSU5WT0tFJyxcbiAgICAgICAgfSksXG4gICAgICAgIGlkZW50aWZpZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIHNlc3Npb25JZDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgdGVsZW1ldHJ5VmVyc2lvbjogJzEuMCcsXG4gICAgICAgICAgY2RrQ2xpVmVyc2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgY2RrTGlicmFyeVZlcnNpb246IGZpeHR1cmUubGlicmFyeS5yZXF1ZXN0ZWRWZXJzaW9uKCksXG4gICAgICAgICAgcmVnaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBldmVudElkOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnOjInKSxcbiAgICAgICAgICB0aW1lc3RhbXA6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBjaTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgb3M6IHtcbiAgICAgICAgICAgIHBsYXRmb3JtOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICAgIHJlbGVhc2U6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm9kZVZlcnNpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9LFxuICAgICAgICBwcm9qZWN0OiB7fSxcbiAgICAgICAgZHVyYXRpb246IHtcbiAgICAgICAgICB0b3RhbDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgbmFtZTogJ0Fzc2VtYmx5RXJyb3InLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgXSk7XG4gICAgZnMudW5saW5rU3luYyh0ZWxlbWV0cnlGaWxlKTtcbiAgfSksXG4pO1xuXG4iXX0=
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXN5bnRoLXRlbGVtZXRyeS13aXRoLWVycm9ycy5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstc3ludGgtdGVsZW1ldHJ5LXdpdGgtZXJyb3JzLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0Isc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCx1RUFBdUUsRUFDdkUsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLGFBQWEsRUFBRSxDQUFDLEVBQUU7UUFDdkcsWUFBWSxFQUFFLElBQUk7UUFDbEIsTUFBTSxFQUFFO1lBQ04sZUFBZSxFQUFFLG1CQUFtQjtTQUNyQztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUU3QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkIsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9C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Z0JBQzVCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO2dCQUNyRCxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDekIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2FBQzdCLENBQUM7WUFDRixXQUFXLEVBQUU7Z0JBQ1gsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3JCLEVBQUUsRUFBRTtvQkFDRixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFDM0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7aUJBQzNCO2dCQUNELFdBQVcsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2FBQy9CO1lBQ0QsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7YUFDekI7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLGVBQWU7YUFDdEI7U0FDRixDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7IC8vIEluY2x1ZGVzIHRoZSB0aW1lIHRvIGFjcXVpcmUgbG9ja3MsIHdvcnN0LWNhc2Ugc2luZ2xlLXRocmVhZGVkIHJ1bnRpbWVcblxuaW50ZWdUZXN0KFxuICAnY2RrIHN5bnRoIHdpdGggdGVsZW1ldHJ5IGFuZCB2YWxpZGF0aW9uIGVycm9yIGxlYWRzIHRvIGludm9rZSBmYWlsdXJlJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgdGVsZW1ldHJ5RmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgYHRlbGVtZXRyeS0ke0RhdGUubm93KCl9Lmpzb25gKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgJy0tdW5zdGFibGU9dGVsZW1ldHJ5JywgYC0tdGVsZW1ldHJ5LWZpbGU9JHt0ZWxlbWV0cnlGaWxlfWBdLCB7XG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2Utd2l0aC1lcnJvcnMnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignVGhpcyBpcyBhbiBlcnJvcicpO1xuXG4gICAgY29uc3QganNvbiA9IGZzLnJlYWRKU09OU3luYyh0ZWxlbWV0cnlGaWxlKTtcbiAgICBleHBlY3QoanNvbikudG9FcXVhbChbXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIGV2ZW50OiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgY29tbWFuZDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgcGF0aDogWydzeW50aCddLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICB2ZXJib3NlOiAxLFxuICAgICAgICAgICAgICB1bnN0YWJsZTogJzxyZWRhY3RlZD4nLFxuICAgICAgICAgICAgICBbJ3RlbGVtZXRyeS1maWxlJ106ICc8cmVkYWN0ZWQ+JyxcbiAgICAgICAgICAgICAgbG9va3VwczogdHJ1ZSxcbiAgICAgICAgICAgICAgWydpZ25vcmUtZXJyb3JzJ106IGZhbHNlLFxuICAgICAgICAgICAgICBqc29uOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGVidWc6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGFnaW5nOiB0cnVlLFxuICAgICAgICAgICAgICBbJ25vLWNvbG9yJ106IGZhbHNlLFxuICAgICAgICAgICAgICBjaTogZXhwZWN0LmFueXRoaW5nKCksIC8vIGNoYW5nZXMgYmFzZWQgb24gd2hlcmUgdGhpcyBpcyBjYWxsZWRcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgcXVpZXQ6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3RhdGU6ICdTVUNDRUVERUQnLFxuICAgICAgICAgIGV2ZW50VHlwZTogJ1NZTlRIJyxcbiAgICAgICAgfSksXG4gICAgICAgIGlkZW50aWZpZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIHNlc3Npb25JZDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgdGVsZW1ldHJ5VmVyc2lvbjogJzEuMCcsXG4gICAgICAgICAgY2RrQ2xpVmVyc2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgY2RrTGlicmFyeVZlcnNpb246IGZpeHR1cmUubGlicmFyeS5yZXF1ZXN0ZWRWZXJzaW9uKCksXG4gICAgICAgICAgcmVnaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBldmVudElkOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnOjEnKSxcbiAgICAgICAgICB0aW1lc3RhbXA6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBjaTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgb3M6IHtcbiAgICAgICAgICAgIHBsYXRmb3JtOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICAgIHJlbGVhc2U6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm9kZVZlcnNpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9LFxuICAgICAgICBwcm9qZWN0OiB7fSxcbiAgICAgICAgZHVyYXRpb246IHtcbiAgICAgICAgICB0b3RhbDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgZXZlbnQ6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBjb21tYW5kOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBwYXRoOiBbJ3N5bnRoJ10sXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIHZlcmJvc2U6IDEsXG4gICAgICAgICAgICAgIHVuc3RhYmxlOiAnPHJlZGFjdGVkPicsXG4gICAgICAgICAgICAgIFsndGVsZW1ldHJ5LWZpbGUnXTogJzxyZWRhY3RlZD4nLFxuICAgICAgICAgICAgICBsb29rdXBzOiB0cnVlLFxuICAgICAgICAgICAgICBbJ2lnbm9yZS1lcnJvcnMnXTogZmFsc2UsXG4gICAgICAgICAgICAgIGpzb246IGZhbHNlLFxuICAgICAgICAgICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgICAgICAgICAgIHN0YWdpbmc6IHRydWUsXG4gICAgICAgICAgICAgIFsnbm8tY29sb3InXTogZmFsc2UsXG4gICAgICAgICAgICAgIGNpOiBleHBlY3QuYW55dGhpbmcoKSwgLy8gY2hhbmdlcyBiYXNlZCBvbiB3aGVyZSB0aGlzIGlzIGNhbGxlZFxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICBxdWlldDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzdGF0ZTogJ0ZBSUxFRCcsXG4gICAgICAgICAgZXZlbnRUeXBlOiAnSU5WT0tFJyxcbiAgICAgICAgfSksXG4gICAgICAgIGlkZW50aWZpZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIHNlc3Npb25JZDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgdGVsZW1ldHJ5VmVyc2lvbjogJzEuMCcsXG4gICAgICAgICAgY2RrQ2xpVmVyc2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgY2RrTGlicmFyeVZlcnNpb246IGZpeHR1cmUubGlicmFyeS5yZXF1ZXN0ZWRWZXJzaW9uKCksXG4gICAgICAgICAgcmVnaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBldmVudElkOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnOjInKSxcbiAgICAgICAgICB0aW1lc3RhbXA6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBjaTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgb3M6IHtcbiAgICAgICAgICAgIHBsYXRmb3JtOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICAgIHJlbGVhc2U6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm9kZVZlcnNpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9LFxuICAgICAgICBwcm9qZWN0OiB7fSxcbiAgICAgICAgZHVyYXRpb246IHtcbiAgICAgICAgICB0b3RhbDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgbmFtZTogJ0Fzc2VtYmx5RXJyb3InLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgXSk7XG4gICAgZnMudW5saW5rU3luYyh0ZWxlbWV0cnlGaWxlKTtcbiAgfSksXG4pO1xuXG4iXX0=