@aws-cdk-testing/cli-integ 3.28.0 → 3.29.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 (42) hide show
  1. package/README.md +8 -8
  2. package/lib/assertions.d.ts +14 -0
  3. package/lib/assertions.js +29 -0
  4. package/lib/shell.d.ts +6 -0
  5. package/lib/shell.js +2 -2
  6. package/lib/with-sam.js +3 -8
  7. package/npm-shrinkwrap.json +110 -179
  8. package/package.json +2 -3
  9. package/resources/cdk-apps/guard-hook-app/app.js +99 -0
  10. package/resources/cdk-apps/guard-hook-app/cdk.json +4 -0
  11. package/resources/cdk-apps/nested-stack-with-iam/app.js +38 -0
  12. package/resources/cdk-apps/nested-stack-with-iam/cdk.json +7 -0
  13. package/resources/cdk-apps/tty-app/app.js +29 -0
  14. package/resources/cdk-apps/tty-app/cdk.json +4 -0
  15. package/tests/cli-integ-tests/deploy/cdk-deploy-guard-hook-failure-displays-annotations.integtest.js +19 -0
  16. package/tests/cli-integ-tests/deploy/cdk-deploy-skips-unnecessary-updates-for-nested-stacks.integtest.js +36 -0
  17. package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-can-be-run-twice-on-a-new-stack.integtest.js +13 -0
  18. package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-doubly-nested-stacks.integtest.d.ts +1 -0
  19. package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-doubly-nested-stacks.integtest.js +16 -0
  20. package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-nested-stacks-through-full-lifecycle.integtest.d.ts +1 -0
  21. package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-nested-stacks-through-full-lifecycle.integtest.js +30 -0
  22. package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only--method-change-set-detects-security-changes-in-nested-stacks.integtest.d.ts +1 -0
  23. package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only--method-change-set-detects-security-changes-in-nested-stacks.integtest.js +15 -0
  24. package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only-detects-security-changes-in-nested-stacks.integtest.d.ts +1 -0
  25. package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only-detects-security-changes-in-nested-stacks.integtest.js +15 -0
  26. package/tests/cli-integ-tests/output/cdk-apps-must-have-terminal.integtest.d.ts +1 -0
  27. package/tests/cli-integ-tests/output/cdk-apps-must-have-terminal.integtest.js +11 -0
  28. package/tests/cli-integ-tests/output/cdk-ci-output-to-stderr.integtest.d.ts +1 -0
  29. package/tests/cli-integ-tests/output/cdk-ci-true-output-to-stdout.integtest.d.ts +1 -0
  30. package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-idempotent-and-force.integtest.d.ts +1 -0
  31. package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-idempotent-and-force.integtest.js +18 -0
  32. package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-then-deploy.integtest.d.ts +1 -0
  33. package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-then-deploy.integtest.js +17 -0
  34. package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-without-deploying.integtest.d.ts +1 -0
  35. package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-without-deploying.integtest.js +15 -0
  36. package/tests/telemetry-integ-tests/cdk-synth-telemetry.integtest.js +4 -1
  37. package/tests/cli-integ-tests/deploy/cdk-fast-deploy.integtest.js +0 -33
  38. /package/tests/cli-integ-tests/{ci-output/cdk-ci-output-to-stderr.integtest.d.ts → deploy/cdk-deploy-guard-hook-failure-displays-annotations.integtest.d.ts} +0 -0
  39. /package/tests/cli-integ-tests/{ci-output/cdk-ci-true-output-to-stdout.integtest.d.ts → deploy/cdk-deploy-skips-unnecessary-updates-for-nested-stacks.integtest.d.ts} +0 -0
  40. /package/tests/cli-integ-tests/{deploy/cdk-fast-deploy.integtest.d.ts → diff/cdk-cdk-diff---method-change-set-can-be-run-twice-on-a-new-stack.integtest.d.ts} +0 -0
  41. /package/tests/cli-integ-tests/{ci-output → output}/cdk-ci-output-to-stderr.integtest.js +0 -0
  42. /package/tests/cli-integ-tests/{ci-output → output}/cdk-ci-true-output-to-stdout.integtest.js +0 -0
@@ -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)('deploy skips unnecessary updates for nested stacks', (0, lib_1.withDefaultFixture)(async (fixture) => {
6
+ // Deploy a stack with nested stacks. With IncludeNestedStacks, CloudFormation
7
+ // can accurately detect whether nested stacks have actual changes, rather than
8
+ // always reporting them as needing an update.
9
+ const stackArn = await fixture.cdkDeploy('with-nested-stack', { captureStderr: false });
10
+ const changeSet1 = await getLatestChangeSet();
11
+ // Deploy the same stack again, there should be no new change set created
12
+ await fixture.cdkDeploy('with-nested-stack');
13
+ const changeSet2 = await getLatestChangeSet();
14
+ expect(changeSet2.ChangeSetId).toEqual(changeSet1.ChangeSetId);
15
+ // Deploy the stack again with --force. CloudFormation creates a changeset but
16
+ // accurately reports no changes (including in nested stacks), so the changeset
17
+ // is not executed and the stack's ChangeSetId remains the same.
18
+ const forceOutput = await fixture.cdk(fixture.cdkDeployCommandLine('with-nested-stack', { options: ['--force'] }));
19
+ expect(forceOutput).toContain('CloudFormation reported that the deployment would not make any changes');
20
+ const changeSet3 = await getLatestChangeSet();
21
+ expect(changeSet3.ChangeSetId).toEqual(changeSet2.ChangeSetId);
22
+ // Deploy the stack again with tags, expected to create a new changeset
23
+ // even though the resources didn't change.
24
+ await fixture.cdkDeploy('with-nested-stack', { options: ['--tags', 'key=value'] });
25
+ const changeSet4 = await getLatestChangeSet();
26
+ expect(changeSet4.ChangeSetId).not.toEqual(changeSet3.ChangeSetId);
27
+ async function getLatestChangeSet() {
28
+ const response = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: stackArn }));
29
+ if (!response.Stacks?.[0]) {
30
+ throw new Error('Did not get a ChangeSet at all');
31
+ }
32
+ fixture.log(`Found Change Set ${response.Stacks?.[0].ChangeSetId}`);
33
+ return response.Stacks?.[0];
34
+ }
35
+ }));
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS1za2lwcy11bm5lY2Vzc2FyeS11cGRhdGVzLWZvci1uZXN0ZWQtc3RhY2tzLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1kZXBsb3ktc2tpcHMtdW5uZWNlc3NhcnktdXBkYXRlcy1mb3ItbmVzdGVkLXN0YWNrcy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBdUU7QUFDdkUsc0NBQTZEO0FBRTdELElBQUEsZUFBUyxFQUNQLG9EQUFvRCxFQUNwRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyw4RUFBOEU7SUFDOUUsK0VBQStFO0lBQy9FLDhDQUE4QztJQUM5QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4RixNQUFNLFVBQVUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7SUFFOUMseUVBQXlFO0lBQ3pFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sVUFBVSxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztJQUM5QyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFL0QsOEVBQThFO0lBQzlFLCtFQUErRTtJQUMvRSxnRUFBZ0U7SUFDaEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNuQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQzVFLENBQUM7SUFDRixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7SUFDeEcsTUFBTSxVQUFVLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUUvRCx1RUFBdUU7SUFDdkUsMkNBQTJDO0lBQzNDLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkYsTUFBTSxVQUFVLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFbkUsS0FBSyxVQUFVLGtCQUFrQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLDZDQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBza2lwcyB1bm5lY2Vzc2FyeSB1cGRhdGVzIGZvciBuZXN0ZWQgc3RhY2tzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IGEgc3RhY2sgd2l0aCBuZXN0ZWQgc3RhY2tzLiBXaXRoIEluY2x1ZGVOZXN0ZWRTdGFja3MsIENsb3VkRm9ybWF0aW9uXG4gICAgLy8gY2FuIGFjY3VyYXRlbHkgZGV0ZWN0IHdoZXRoZXIgbmVzdGVkIHN0YWNrcyBoYXZlIGFjdHVhbCBjaGFuZ2VzLCByYXRoZXIgdGhhblxuICAgIC8vIGFsd2F5cyByZXBvcnRpbmcgdGhlbSBhcyBuZWVkaW5nIGFuIHVwZGF0ZS5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjaycsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG4gICAgY29uc3QgY2hhbmdlU2V0MSA9IGF3YWl0IGdldExhdGVzdENoYW5nZVNldCgpO1xuXG4gICAgLy8gRGVwbG95IHRoZSBzYW1lIHN0YWNrIGFnYWluLCB0aGVyZSBzaG91bGQgYmUgbm8gbmV3IGNoYW5nZSBzZXQgY3JlYXRlZFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjaycpO1xuICAgIGNvbnN0IGNoYW5nZVNldDIgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0Mi5DaGFuZ2VTZXRJZCkudG9FcXVhbChjaGFuZ2VTZXQxLkNoYW5nZVNldElkKTtcblxuICAgIC8vIERlcGxveSB0aGUgc3RhY2sgYWdhaW4gd2l0aCAtLWZvcmNlLiBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIGEgY2hhbmdlc2V0IGJ1dFxuICAgIC8vIGFjY3VyYXRlbHkgcmVwb3J0cyBubyBjaGFuZ2VzIChpbmNsdWRpbmcgaW4gbmVzdGVkIHN0YWNrcyksIHNvIHRoZSBjaGFuZ2VzZXRcbiAgICAvLyBpcyBub3QgZXhlY3V0ZWQgYW5kIHRoZSBzdGFjaydzIENoYW5nZVNldElkIHJlbWFpbnMgdGhlIHNhbWUuXG4gICAgY29uc3QgZm9yY2VPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICAgIGZpeHR1cmUuY2RrRGVwbG95Q29tbWFuZExpbmUoJ3dpdGgtbmVzdGVkLXN0YWNrJywgeyBvcHRpb25zOiBbJy0tZm9yY2UnXSB9KSxcbiAgICApO1xuICAgIGV4cGVjdChmb3JjZU91dHB1dCkudG9Db250YWluKCdDbG91ZEZvcm1hdGlvbiByZXBvcnRlZCB0aGF0IHRoZSBkZXBsb3ltZW50IHdvdWxkIG5vdCBtYWtlIGFueSBjaGFuZ2VzJyk7XG4gICAgY29uc3QgY2hhbmdlU2V0MyA9IGF3YWl0IGdldExhdGVzdENoYW5nZVNldCgpO1xuICAgIGV4cGVjdChjaGFuZ2VTZXQzLkNoYW5nZVNldElkKS50b0VxdWFsKGNoYW5nZVNldDIuQ2hhbmdlU2V0SWQpO1xuXG4gICAgLy8gRGVwbG95IHRoZSBzdGFjayBhZ2FpbiB3aXRoIHRhZ3MsIGV4cGVjdGVkIHRvIGNyZWF0ZSBhIG5ldyBjaGFuZ2VzZXRcbiAgICAvLyBldmVuIHRob3VnaCB0aGUgcmVzb3VyY2VzIGRpZG4ndCBjaGFuZ2UuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrJywgeyBvcHRpb25zOiBbJy0tdGFncycsICdrZXk9dmFsdWUnXSB9KTtcbiAgICBjb25zdCBjaGFuZ2VTZXQ0ID0gYXdhaXQgZ2V0TGF0ZXN0Q2hhbmdlU2V0KCk7XG4gICAgZXhwZWN0KGNoYW5nZVNldDQuQ2hhbmdlU2V0SWQpLm5vdC50b0VxdWFsKGNoYW5nZVNldDMuQ2hhbmdlU2V0SWQpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0Q2hhbmdlU2V0KCkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoeyBTdGFja05hbWU6IHN0YWNrQXJuIH0pKTtcbiAgICAgIGlmICghcmVzcG9uc2UuU3RhY2tzPy5bMF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWQgbm90IGdldCBhIENoYW5nZVNldCBhdCBhbGwnKTtcbiAgICAgIH1cbiAgICAgIGZpeHR1cmUubG9nKGBGb3VuZCBDaGFuZ2UgU2V0ICR7cmVzcG9uc2UuU3RhY2tzPy5bMF0uQ2hhbmdlU2V0SWR9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuU3RhY2tzPy5bMF07XG4gICAgfVxuICB9KSxcbik7XG4iXX0=
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ (0, lib_1.integTest)('cdk diff --method=change-set can be run twice on a new stack', (0, lib_1.withDefaultFixture)(async (fixture) => {
5
+ const stackName = fixture.fullStackName('test-1');
6
+ // First diff creates a CREATE changeset, leaving the stack in REVIEW_IN_PROGRESS
7
+ const diff1 = await fixture.cdk(['diff', '--method=change-set', stackName]);
8
+ expect(diff1).toContain('AWS::SNS::Topic');
9
+ // Second diff should also succeed, not fail with "Stack does not exist" or UPDATE errors
10
+ const diff2 = await fixture.cdk(['diff', '--method=change-set', stackName]);
11
+ expect(diff2).toContain('AWS::SNS::Topic');
12
+ }));
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tbWV0aG9kLWNoYW5nZS1zZXQtY2FuLWJlLXJ1bi10d2ljZS1vbi1hLW5ldy1zdGFjay5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstY2RrLWRpZmYtLS1tZXRob2QtY2hhbmdlLXNldC1jYW4tYmUtcnVuLXR3aWNlLW9uLWEtbmV3LXN0YWNrLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE2RDtBQUU3RCxJQUFBLGVBQVMsRUFDUCw4REFBOEQsRUFDOUQsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVsRCxpRkFBaUY7SUFDakYsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRTNDLHlGQUF5RjtJQUN6RixNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1tZXRob2Q9Y2hhbmdlLXNldCBjYW4gYmUgcnVuIHR3aWNlIG9uIGEgbmV3IHN0YWNrJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKTtcblxuICAgIC8vIEZpcnN0IGRpZmYgY3JlYXRlcyBhIENSRUFURSBjaGFuZ2VzZXQsIGxlYXZpbmcgdGhlIHN0YWNrIGluIFJFVklFV19JTl9QUk9HUkVTU1xuICAgIGNvbnN0IGRpZmYxID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdKTtcbiAgICBleHBlY3QoZGlmZjEpLnRvQ29udGFpbignQVdTOjpTTlM6OlRvcGljJyk7XG5cbiAgICAvLyBTZWNvbmQgZGlmZiBzaG91bGQgYWxzbyBzdWNjZWVkLCBub3QgZmFpbCB3aXRoIFwiU3RhY2sgZG9lcyBub3QgZXhpc3RcIiBvciBVUERBVEUgZXJyb3JzXG4gICAgY29uc3QgZGlmZjIgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1tZXRob2Q9Y2hhbmdlLXNldCcsIHN0YWNrTmFtZV0pO1xuICAgIGV4cGVjdChkaWZmMikudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcbiAgfSksXG4pO1xuIl19
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ (0, lib_1.integTest)('cdk diff --method=change-set with doubly nested stacks', (0, lib_1.withDefaultFixture)(async (fixture) => {
5
+ const stackName = fixture.fullStackName('with-doubly-nested-stack');
6
+ // Diff a stack with two levels of nesting
7
+ const diff = await fixture.cdk(['diff', '--method=change-set', stackName]);
8
+ // Root stack should contain the outer nested stack
9
+ expect(diff).toContain('AWS::CloudFormation::Stack');
10
+ // The inner nested stack should contain the SNS topic
11
+ expect(diff).toContain('AWS::SNS::Topic');
12
+ // Should use changeset-based diff successfully
13
+ expect(diff).not.toContain('Could not create a change set');
14
+ expect(diff).toContain('read-only change set');
15
+ }));
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tbWV0aG9kLWNoYW5nZS1zZXQtd2l0aC1kb3VibHktbmVzdGVkLXN0YWNrcy5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstY2RrLWRpZmYtLS1tZXRob2QtY2hhbmdlLXNldC13aXRoLWRvdWJseS1uZXN0ZWQtc3RhY2tzLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE2RDtBQUU3RCxJQUFBLGVBQVMsRUFDUCx3REFBd0QsRUFDeEQsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBRXBFLDBDQUEwQztJQUMxQyxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUUzRSxtREFBbUQ7SUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3JELHNEQUFzRDtJQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUMsK0NBQStDO0lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tbWV0aG9kPWNoYW5nZS1zZXQgd2l0aCBkb3VibHkgbmVzdGVkIHN0YWNrcycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnd2l0aC1kb3VibHktbmVzdGVkLXN0YWNrJyk7XG5cbiAgICAvLyBEaWZmIGEgc3RhY2sgd2l0aCB0d28gbGV2ZWxzIG9mIG5lc3RpbmdcbiAgICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdKTtcblxuICAgIC8vIFJvb3Qgc3RhY2sgc2hvdWxkIGNvbnRhaW4gdGhlIG91dGVyIG5lc3RlZCBzdGFja1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyk7XG4gICAgLy8gVGhlIGlubmVyIG5lc3RlZCBzdGFjayBzaG91bGQgY29udGFpbiB0aGUgU05TIHRvcGljXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQVdTOjpTTlM6OlRvcGljJyk7XG4gICAgLy8gU2hvdWxkIHVzZSBjaGFuZ2VzZXQtYmFzZWQgZGlmZiBzdWNjZXNzZnVsbHlcbiAgICBleHBlY3QoZGlmZikubm90LnRvQ29udGFpbignQ291bGQgbm90IGNyZWF0ZSBhIGNoYW5nZSBzZXQnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdyZWFkLW9ubHkgY2hhbmdlIHNldCcpO1xuICB9KSxcbik7XG4iXX0=
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ (0, lib_1.integTest)('cdk diff --method=change-set with nested stacks through full lifecycle', (0, lib_1.withDefaultFixture)(async (fixture) => {
5
+ const stackName = fixture.fullStackName('with-nested-stack');
6
+ // 1. Diff a new stack with nested stacks (CREATE change set)
7
+ const diffNew = await fixture.cdk(['diff', '--method=change-set', stackName]);
8
+ // Should show the nested stack resource in the root stack
9
+ expect(diffNew).toContain('AWS::CloudFormation::Stack');
10
+ // Should show the SNS topic from inside the nested stack
11
+ expect(diffNew).toContain('AWS::SNS::Topic');
12
+ // Should use changeset-based diff, not fall back to template diff
13
+ expect(diffNew).not.toContain('Could not create a change set');
14
+ expect(diffNew).not.toContain('falling back to template diff');
15
+ // Should show the changeset info message
16
+ expect(diffNew).toContain('read-only change set');
17
+ // 2. Deploy the stack
18
+ await fixture.cdkDeploy('with-nested-stack');
19
+ // 3. Diff after deploy with no changes — should report no differences
20
+ const diffNoChanges = await fixture.cdk(['diff', '--method=change-set', stackName]);
21
+ expect(diffNoChanges).toContain('There were no differences');
22
+ expect(diffNoChanges).not.toContain('Could not create a change set');
23
+ // 4. Destroy the stack
24
+ await fixture.cdkDestroy('with-nested-stack');
25
+ // 5. Diff again after destroy (CREATE change set for a new stack)
26
+ const diffAfterDestroy = await fixture.cdk(['diff', '--method=change-set', stackName]);
27
+ expect(diffAfterDestroy).toContain('AWS::CloudFormation::Stack');
28
+ expect(diffAfterDestroy).toContain('AWS::SNS::Topic');
29
+ }));
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tbWV0aG9kLWNoYW5nZS1zZXQtd2l0aC1uZXN0ZWQtc3RhY2tzLXRocm91Z2gtZnVsbC1saWZlY3ljbGUuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWNkay1kaWZmLS0tbWV0aG9kLWNoYW5nZS1zZXQtd2l0aC1uZXN0ZWQtc3RhY2tzLXRocm91Z2gtZnVsbC1saWZlY3ljbGUuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQTZEO0FBRTdELElBQUEsZUFBUyxFQUNQLHdFQUF3RSxFQUN4RSxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFN0QsNkRBQTZEO0lBQzdELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlFLDBEQUEwRDtJQUMxRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDeEQseURBQXlEO0lBQ3pELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM3QyxrRUFBa0U7SUFDbEUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUMvRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQy9ELHlDQUF5QztJQUN6QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFbEQsc0JBQXNCO0lBQ3RCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRTdDLHNFQUFzRTtJQUN0RSxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNwRixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDN0QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUVyRSx1QkFBdUI7SUFDdkIsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFOUMsa0VBQWtFO0lBQ2xFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDakUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDeEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1tZXRob2Q9Y2hhbmdlLXNldCB3aXRoIG5lc3RlZCBzdGFja3MgdGhyb3VnaCBmdWxsIGxpZmVjeWNsZScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnd2l0aC1uZXN0ZWQtc3RhY2snKTtcblxuICAgIC8vIDEuIERpZmYgYSBuZXcgc3RhY2sgd2l0aCBuZXN0ZWQgc3RhY2tzIChDUkVBVEUgY2hhbmdlIHNldClcbiAgICBjb25zdCBkaWZmTmV3ID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdKTtcbiAgICAvLyBTaG91bGQgc2hvdyB0aGUgbmVzdGVkIHN0YWNrIHJlc291cmNlIGluIHRoZSByb290IHN0YWNrXG4gICAgZXhwZWN0KGRpZmZOZXcpLnRvQ29udGFpbignQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snKTtcbiAgICAvLyBTaG91bGQgc2hvdyB0aGUgU05TIHRvcGljIGZyb20gaW5zaWRlIHRoZSBuZXN0ZWQgc3RhY2tcbiAgICBleHBlY3QoZGlmZk5ldykudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcbiAgICAvLyBTaG91bGQgdXNlIGNoYW5nZXNldC1iYXNlZCBkaWZmLCBub3QgZmFsbCBiYWNrIHRvIHRlbXBsYXRlIGRpZmZcbiAgICBleHBlY3QoZGlmZk5ldykubm90LnRvQ29udGFpbignQ291bGQgbm90IGNyZWF0ZSBhIGNoYW5nZSBzZXQnKTtcbiAgICBleHBlY3QoZGlmZk5ldykubm90LnRvQ29udGFpbignZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlIGRpZmYnKTtcbiAgICAvLyBTaG91bGQgc2hvdyB0aGUgY2hhbmdlc2V0IGluZm8gbWVzc2FnZVxuICAgIGV4cGVjdChkaWZmTmV3KS50b0NvbnRhaW4oJ3JlYWQtb25seSBjaGFuZ2Ugc2V0Jyk7XG5cbiAgICAvLyAyLiBEZXBsb3kgdGhlIHN0YWNrXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrJyk7XG5cbiAgICAvLyAzLiBEaWZmIGFmdGVyIGRlcGxveSB3aXRoIG5vIGNoYW5nZXMg4oCUIHNob3VsZCByZXBvcnQgbm8gZGlmZmVyZW5jZXNcbiAgICBjb25zdCBkaWZmTm9DaGFuZ2VzID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdKTtcbiAgICBleHBlY3QoZGlmZk5vQ2hhbmdlcykudG9Db250YWluKCdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzJyk7XG4gICAgZXhwZWN0KGRpZmZOb0NoYW5nZXMpLm5vdC50b0NvbnRhaW4oJ0NvdWxkIG5vdCBjcmVhdGUgYSBjaGFuZ2Ugc2V0Jyk7XG5cbiAgICAvLyA0LiBEZXN0cm95IHRoZSBzdGFja1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnd2l0aC1uZXN0ZWQtc3RhY2snKTtcblxuICAgIC8vIDUuIERpZmYgYWdhaW4gYWZ0ZXIgZGVzdHJveSAoQ1JFQVRFIGNoYW5nZSBzZXQgZm9yIGEgbmV3IHN0YWNrKVxuICAgIGNvbnN0IGRpZmZBZnRlckRlc3Ryb3kgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1tZXRob2Q9Y2hhbmdlLXNldCcsIHN0YWNrTmFtZV0pO1xuICAgIGV4cGVjdChkaWZmQWZ0ZXJEZXN0cm95KS50b0NvbnRhaW4oJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyk7XG4gICAgZXhwZWN0KGRpZmZBZnRlckRlc3Ryb3kpLnRvQ29udGFpbignQVdTOjpTTlM6OlRvcGljJyk7XG4gIH0pLFxuKTtcbiJdfQ==
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ require("../../../lib/assertions");
5
+ (0, lib_1.integTest)('cdk diff --security-only --method=change-set detects security changes in nested stacks', (0, lib_1.withSpecificFixture)('nested-stack-with-iam', async (fixture) => {
6
+ const stackName = fixture.fullStackName('nested-iam');
7
+ const diff = await fixture.cdk(['diff', '--security-only', '--method=change-set', stackName]);
8
+ // Two nested stacks have IAM roles
9
+ expect(diff).toContain('sts:AssumeRole');
10
+ expect(diff).toContain('lambda.amazonaws.com');
11
+ expect(diff).toContain('Number of stacks with differences: 2');
12
+ // The nested stack without security changes should say so on the next line
13
+ expect(diff).toHaveNextLineMatching(/Stack NoSecurityNested\S+/, 'There were no security-related changes');
14
+ }));
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tc2VjdXJpdHktb25seS0tbWV0aG9kLWNoYW5nZS1zZXQtZGV0ZWN0cy1zZWN1cml0eS1jaGFuZ2VzLWluLW5lc3RlZC1zdGFja3MuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWNkay1kaWZmLS0tc2VjdXJpdHktb25seS0tbWV0aG9kLWNoYW5nZS1zZXQtZGV0ZWN0cy1zZWN1cml0eS1jaGFuZ2VzLWluLW5lc3RlZC1zdGFja3MuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBQzlELG1DQUFpQztBQUVqQyxJQUFBLGVBQVMsRUFDUCx3RkFBd0YsRUFDeEYsSUFBQSx5QkFBbUIsRUFBQyx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDN0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV0RCxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUU5RixtQ0FBbUM7SUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFFL0QsMkVBQTJFO0lBQzNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQywyQkFBMkIsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzdHLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuaW1wb3J0ICcuLi8uLi8uLi9saWIvYXNzZXJ0aW9ucyc7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLW1ldGhvZD1jaGFuZ2Utc2V0IGRldGVjdHMgc2VjdXJpdHkgY2hhbmdlcyBpbiBuZXN0ZWQgc3RhY2tzJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgnbmVzdGVkLXN0YWNrLXdpdGgtaWFtJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ25lc3RlZC1pYW0nKTtcblxuICAgIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdKTtcblxuICAgIC8vIFR3byBuZXN0ZWQgc3RhY2tzIGhhdmUgSUFNIHJvbGVzXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignc3RzOkFzc3VtZVJvbGUnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ051bWJlciBvZiBzdGFja3Mgd2l0aCBkaWZmZXJlbmNlczogMicpO1xuXG4gICAgLy8gVGhlIG5lc3RlZCBzdGFjayB3aXRob3V0IHNlY3VyaXR5IGNoYW5nZXMgc2hvdWxkIHNheSBzbyBvbiB0aGUgbmV4dCBsaW5lXG4gICAgZXhwZWN0KGRpZmYpLnRvSGF2ZU5leHRMaW5lTWF0Y2hpbmcoL1N0YWNrIE5vU2VjdXJpdHlOZXN0ZWRcXFMrLywgJ1RoZXJlIHdlcmUgbm8gc2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzJyk7XG4gIH0pLFxuKTtcbiJdfQ==
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ require("../../../lib/assertions");
5
+ (0, lib_1.integTest)('cdk diff --security-only detects security changes in nested stacks', (0, lib_1.withSpecificFixture)('nested-stack-with-iam', async (fixture) => {
6
+ const stackName = fixture.fullStackName('nested-iam');
7
+ const diff = await fixture.cdk(['diff', '--security-only', stackName]);
8
+ // Two nested stacks have IAM roles
9
+ expect(diff).toContain('sts:AssumeRole');
10
+ expect(diff).toContain('lambda.amazonaws.com');
11
+ expect(diff).toContain('Number of stacks with differences: 2');
12
+ // The nested stack without security changes should say so on the next line
13
+ expect(diff).toHaveNextLineMatching(/Stack NoSecurityNested\S+/, 'There were no security-related changes');
14
+ }));
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tc2VjdXJpdHktb25seS1kZXRlY3RzLXNlY3VyaXR5LWNoYW5nZXMtaW4tbmVzdGVkLXN0YWNrcy5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstY2RrLWRpZmYtLS1zZWN1cml0eS1vbmx5LWRldGVjdHMtc2VjdXJpdHktY2hhbmdlcy1pbi1uZXN0ZWQtc3RhY2tzLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE4RDtBQUM5RCxtQ0FBaUM7QUFFakMsSUFBQSxlQUFTLEVBQ1Asb0VBQW9FLEVBQ3BFLElBQUEseUJBQW1CLEVBQUMsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQzdELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFdkUsbUNBQW1DO0lBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBRS9ELDJFQUEyRTtJQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsc0JBQXNCLENBQUMsMkJBQTJCLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztBQUM3RyxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCAnLi4vLi4vLi4vbGliL2Fzc2VydGlvbnMnO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgZGV0ZWN0cyBzZWN1cml0eSBjaGFuZ2VzIGluIG5lc3RlZCBzdGFja3MnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCduZXN0ZWQtc3RhY2std2l0aC1pYW0nLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbmVzdGVkLWlhbScpO1xuXG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCBzdGFja05hbWVdKTtcblxuICAgIC8vIFR3byBuZXN0ZWQgc3RhY2tzIGhhdmUgSUFNIHJvbGVzXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignc3RzOkFzc3VtZVJvbGUnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ051bWJlciBvZiBzdGFja3Mgd2l0aCBkaWZmZXJlbmNlczogMicpO1xuXG4gICAgLy8gVGhlIG5lc3RlZCBzdGFjayB3aXRob3V0IHNlY3VyaXR5IGNoYW5nZXMgc2hvdWxkIHNheSBzbyBvbiB0aGUgbmV4dCBsaW5lXG4gICAgZXhwZWN0KGRpZmYpLnRvSGF2ZU5leHRMaW5lTWF0Y2hpbmcoL1N0YWNrIE5vU2VjdXJpdHlOZXN0ZWRcXFMrLywgJ1RoZXJlIHdlcmUgbm8gc2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzJyk7XG4gIH0pLFxuKTtcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ (0, lib_1.integTest)('cdk apps must run attached to a TTY', (0, lib_1.withAws)((0, lib_1.withSpecificCdkApp)('tty-app', async (fixture) => {
5
+ // Certain customers pretty display libraries which stop being pretty if stdout is not attached to a terminal
6
+ // This application will fail if it doesn't detect a TTY
7
+ await fixture.cdkSynth({
8
+ tty: true,
9
+ });
10
+ }), { disableBootstrap: true }));
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWFwcHMtbXVzdC1oYXZlLXRlcm1pbmFsLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1hcHBzLW11c3QtaGF2ZS10ZXJtaW5hbC5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBc0U7QUFFdEUsSUFBQSxlQUFTLEVBQ1AscUNBQXFDLEVBQ3JDLElBQUEsYUFBTyxFQUFDLElBQUEsd0JBQWtCLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUN0RCw2R0FBNkc7SUFDN0csd0RBQXdEO0lBQ3hELE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNyQixHQUFHLEVBQUUsSUFBSTtLQUNWLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aEF3cywgd2l0aFNwZWNpZmljQ2RrQXBwIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGFwcHMgbXVzdCBydW4gYXR0YWNoZWQgdG8gYSBUVFknLFxuICB3aXRoQXdzKHdpdGhTcGVjaWZpY0Nka0FwcCgndHR5LWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gQ2VydGFpbiBjdXN0b21lcnMgcHJldHR5IGRpc3BsYXkgbGlicmFyaWVzIHdoaWNoIHN0b3AgYmVpbmcgcHJldHR5IGlmIHN0ZG91dCBpcyBub3QgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbFxuICAgIC8vIFRoaXMgYXBwbGljYXRpb24gd2lsbCBmYWlsIGlmIGl0IGRvZXNuJ3QgZGV0ZWN0IGEgVFRZXG4gICAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgICB0dHk6IHRydWUsXG4gICAgfSk7XG4gIH0pLCB7IGRpc2FibGVCb290c3RyYXA6IHRydWUgfSksXG4pO1xuXG4iXX0=
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
5
+ (0, lib_1.integTest)('publish-assets is idempotent and --force re-uploads', (0, lib_1.withDefaultFixture)(async (fixture) => {
6
+ const stackName = 'lambda';
7
+ const fullStackName = fixture.fullStackName(stackName);
8
+ // First publish
9
+ const firstOutput = await fixture.cdk(['publish-assets', fullStackName, '--unstable=publish-assets']);
10
+ expect(firstOutput).toMatch('Assets published successfully');
11
+ // Second publish without --force should detect nothing to do
12
+ const secondOutput = await fixture.cdk(['publish-assets', fullStackName, '--unstable=publish-assets']);
13
+ expect(secondOutput).toMatch('All assets are already published');
14
+ // Third publish with --force should re-upload
15
+ const forceOutput = await fixture.cdk(['publish-assets', fullStackName, '--unstable=publish-assets', '--force']);
16
+ expect(forceOutput).toMatch('Assets published successfully');
17
+ }));
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXB1Ymxpc2gtYXNzZXRzLWlkZW1wb3RlbnQtYW5kLWZvcmNlLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1wdWJsaXNoLWFzc2V0cy1pZGVtcG90ZW50LWFuZC1mb3JjZS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBNkQ7QUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLElBQUEsZUFBUyxFQUNQLHFEQUFxRCxFQUNyRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDM0IsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2RCxnQkFBZ0I7SUFDaEIsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQztJQUN0RyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFFN0QsNkRBQTZEO0lBQzdELE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLENBQUM7SUFDdkcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBRWpFLDhDQUE4QztJQUM5QyxNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsMkJBQTJCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqSCxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7IC8vIEluY2x1ZGVzIHRoZSB0aW1lIHRvIGFjcXVpcmUgbG9ja3MsIHdvcnN0LWNhc2Ugc2luZ2xlLXRocmVhZGVkIHJ1bnRpbWVcblxuaW50ZWdUZXN0KFxuICAncHVibGlzaC1hc3NldHMgaXMgaWRlbXBvdGVudCBhbmQgLS1mb3JjZSByZS11cGxvYWRzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2xhbWJkYSc7XG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpO1xuXG4gICAgLy8gRmlyc3QgcHVibGlzaFxuICAgIGNvbnN0IGZpcnN0T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydwdWJsaXNoLWFzc2V0cycsIGZ1bGxTdGFja05hbWUsICctLXVuc3RhYmxlPXB1Ymxpc2gtYXNzZXRzJ10pO1xuICAgIGV4cGVjdChmaXJzdE91dHB1dCkudG9NYXRjaCgnQXNzZXRzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHknKTtcblxuICAgIC8vIFNlY29uZCBwdWJsaXNoIHdpdGhvdXQgLS1mb3JjZSBzaG91bGQgZGV0ZWN0IG5vdGhpbmcgdG8gZG9cbiAgICBjb25zdCBzZWNvbmRPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ3B1Ymxpc2gtYXNzZXRzJywgZnVsbFN0YWNrTmFtZSwgJy0tdW5zdGFibGU9cHVibGlzaC1hc3NldHMnXSk7XG4gICAgZXhwZWN0KHNlY29uZE91dHB1dCkudG9NYXRjaCgnQWxsIGFzc2V0cyBhcmUgYWxyZWFkeSBwdWJsaXNoZWQnKTtcblxuICAgIC8vIFRoaXJkIHB1Ymxpc2ggd2l0aCAtLWZvcmNlIHNob3VsZCByZS11cGxvYWRcbiAgICBjb25zdCBmb3JjZU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsncHVibGlzaC1hc3NldHMnLCBmdWxsU3RhY2tOYW1lLCAnLS11bnN0YWJsZT1wdWJsaXNoLWFzc2V0cycsICctLWZvcmNlJ10pO1xuICAgIGV4cGVjdChmb3JjZU91dHB1dCkudG9NYXRjaCgnQXNzZXRzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHknKTtcbiAgfSksXG4pO1xuIl19
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
5
+ (0, lib_1.integTest)('publish-assets then deploy detects already uploaded assets', (0, lib_1.withDefaultFixture)(async (fixture) => {
6
+ const stackName = 'lambda';
7
+ const fullStackName = fixture.fullStackName(stackName);
8
+ // First, publish assets
9
+ const publishOutput = await fixture.cdk(['publish-assets', fullStackName, '--unstable=publish-assets']);
10
+ expect(publishOutput).toMatch('Assets published successfully');
11
+ // Then deploy the same stack; it should detect the already published assets and skip re-publishing
12
+ const deployOutput = await fixture.cdkDeploy(stackName, { options: ['-v'], captureStderr: true });
13
+ expect(deployOutput).toMatch(/0 still need to be published/);
14
+ // Clean up
15
+ await fixture.cdkDestroy(stackName);
16
+ }));
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXB1Ymxpc2gtYXNzZXRzLXRoZW4tZGVwbG95LmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1wdWJsaXNoLWFzc2V0cy10aGVuLWRlcGxveS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBNkQ7QUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLElBQUEsZUFBUyxFQUNQLDREQUE0RCxFQUM1RCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDM0IsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2RCx3QkFBd0I7SUFDeEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQztJQUN4RyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFFL0QsbUdBQW1HO0lBQ25HLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFN0QsV0FBVztJQUNYLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICdwdWJsaXNoLWFzc2V0cyB0aGVuIGRlcGxveSBkZXRlY3RzIGFscmVhZHkgdXBsb2FkZWQgYXNzZXRzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2xhbWJkYSc7XG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpO1xuXG4gICAgLy8gRmlyc3QsIHB1Ymxpc2ggYXNzZXRzXG4gICAgY29uc3QgcHVibGlzaE91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsncHVibGlzaC1hc3NldHMnLCBmdWxsU3RhY2tOYW1lLCAnLS11bnN0YWJsZT1wdWJsaXNoLWFzc2V0cyddKTtcbiAgICBleHBlY3QocHVibGlzaE91dHB1dCkudG9NYXRjaCgnQXNzZXRzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHknKTtcblxuICAgIC8vIFRoZW4gZGVwbG95IHRoZSBzYW1lIHN0YWNrOyBpdCBzaG91bGQgZGV0ZWN0IHRoZSBhbHJlYWR5IHB1Ymxpc2hlZCBhc3NldHMgYW5kIHNraXAgcmUtcHVibGlzaGluZ1xuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwgeyBvcHRpb25zOiBbJy12J10sIGNhcHR1cmVTdGRlcnI6IHRydWUgfSk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9NYXRjaCgvMCBzdGlsbCBuZWVkIHRvIGJlIHB1Ymxpc2hlZC8pO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koc3RhY2tOYW1lKTtcbiAgfSksXG4pO1xuIl19
@@ -0,0 +1,15 @@
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
+ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
6
+ (0, lib_1.integTest)('publish-assets without deploying', (0, lib_1.withDefaultFixture)(async (fixture) => {
7
+ const stackName = 'lambda';
8
+ const fullStackName = fixture.fullStackName(stackName);
9
+ const output = await fixture.cdk(['publish-assets', fullStackName, '--unstable=publish-assets']);
10
+ expect(output).toMatch('Assets published successfully');
11
+ // assert the stack was not deployed
12
+ await expect(fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: fullStackName })))
13
+ .rejects.toThrow(/does not exist/);
14
+ }));
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXB1Ymxpc2gtYXNzZXRzLXdpdGhvdXQtZGVwbG95aW5nLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1wdWJsaXNoLWFzc2V0cy13aXRob3V0LWRlcGxveWluZy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBdUU7QUFDdkUsc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCxrQ0FBa0MsRUFDbEMsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzNCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQztJQUNqRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFFeEQsb0NBQW9DO0lBQ3BDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLDZDQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNuRyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdChcbiAgJ3B1Ymxpc2gtYXNzZXRzIHdpdGhvdXQgZGVwbG95aW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2xhbWJkYSc7XG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydwdWJsaXNoLWFzc2V0cycsIGZ1bGxTdGFja05hbWUsICctLXVuc3RhYmxlPXB1Ymxpc2gtYXNzZXRzJ10pO1xuICAgIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2goJ0Fzc2V0cyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAvLyBhc3NlcnQgdGhlIHN0YWNrIHdhcyBub3QgZGVwbG95ZWRcbiAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pKSlcbiAgICAgIC5yZWplY3RzLnRvVGhyb3coL2RvZXMgbm90IGV4aXN0Lyk7XG4gIH0pLFxuKTtcbiJdfQ==
@@ -59,6 +59,9 @@ const lib_1 = require("../../lib");
59
59
  duration: expect.objectContaining({
60
60
  total: expect.anything(),
61
61
  }),
62
+ counters: expect.objectContaining({
63
+ stacks: expect.anything(),
64
+ }),
62
65
  }),
63
66
  expect.objectContaining({
64
67
  event: expect.objectContaining({
@@ -111,4 +114,4 @@ const lib_1 = require("../../lib");
111
114
  ]);
112
115
  fs.unlinkSync(telemetryFile);
113
116
  }));
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXN5bnRoLXRlbGVtZXRyeS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstc3ludGgtdGVsZW1ldHJ5LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsMkNBQXdEO0FBQ3hELG1DQUEwRDtBQUUxRCxJQUFBLGVBQVMsRUFDUCwrQkFBK0IsRUFDL0IsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV0RixNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ25DLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsb0JBQW9CLGFBQWEsRUFBRSxDQUFDLEVBQy9FLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUNwQixDQUFDO0lBRUYsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUU3RCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkIsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7b0JBQzVCLFVBQVUsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2xDLFFBQVEsRUFB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QyxnQkFBZ0IsQ0FBQztnQkFDbkMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUM1QixnQkFBZ0IsRUFBRSxxQ0FBeUI7Z0JBQzNDLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO2dCQUNyRCxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDekIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2FBQzdCLENBQUM7WUFDRixXQUFXLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO2dCQUNuQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDckIsRUFBRSxFQUFFO29CQUNGLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO29CQUMzQixPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtpQkFDM0I7Z0JBQ0QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7YUFDL0IsQ0FBQztZQUNGLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3BDLFFBQVEsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2hDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO2FBQ3pCLENBQUM7U0FDSCxDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IENVUlJFTlRfVEVMRU1FVFJZX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2NkayBzeW50aCB3aXRoIHRlbGVtZXRyeSBkYXRhJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgdGVsZW1ldHJ5RmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgYHRlbGVtZXRyeS0ke0RhdGUubm93KCl9Lmpzb25gKTtcblxuICAgIGNvbnN0IHN5bnRoT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgICBbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKSwgYC0tdGVsZW1ldHJ5LWZpbGU9JHt0ZWxlbWV0cnlGaWxlfWBdLFxuICAgICAgeyB2ZXJib3NlTGV2ZWw6IDMgfSwgLy8gdHJhY2UgbW9kZVxuICAgICk7XG5cbiAgICAvLyBDaGVjayB0aGUgdHJhY2UgdGhhdCB0ZWxlbWV0cnkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICAgIGV4cGVjdChzeW50aE91dHB1dCkudG9Db250YWluKCdUZWxlbWV0cnkgU2VudCBTdWNjZXNzZnVsbHknKTtcblxuICAgIGNvbnN0IGpzb24gPSBmcy5yZWFkSlNPTlN5bmModGVsZW1ldHJ5RmlsZSk7XG4gICAgZXhwZWN0KGpzb24pLnRvRXF1YWwoW1xuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBldmVudDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGNvbW1hbmQ6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgIHBhdGg6IFsnc3ludGgnLCAnJFNUQUNLU18xJ10sXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICAgIHVuc3RhYmxlOiAnPHJlZGFjdGVkPicsXG4gICAgICAgICAgICAgIFsndGVsZW1ldHJ5LWZpbGUnXTogJzxyZWRhY3RlZD4nLFxuICAgICAgICAgICAgICBsb29rdXBzOiB0cnVlLFxuICAgICAgICAgICAgICBbJ2lnbm9yZS1lcnJvcnMnXTogZmFsc2UsXG4gICAgICAgICAgICAgIGpzb246IGZhbHNlLFxuICAgICAgICAgICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgICAgICAgICAgIHN0YWdpbmc6IHRydWUsXG4gICAgICAgICAgICAgIFsnbm8tY29sb3InXTogZmFsc2UsXG4gICAgICAgICAgICAgIGNpOiBleHBlY3QuYW55dGhpbmcoKSwgLy8gY2hhbmdlcyBiYXNlZCBvbiB3aGVyZSB0aGlzIGlzIGNhbGxlZFxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICBxdWlldDogZmFsc2UsXG4gICAgICAgICAgICAgIHllczogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3RhdGU6ICdTVUNDRUVERUQnLFxuICAgICAgICAgIGV2ZW50VHlwZTogJ1NZTlRIJyxcbiAgICAgICAgfSksXG4gICAgICAgIC8vIHNvbWUgb2YgdGhlc2UgY2FuIGNoYW5nZTsgYnV0IHdlIGFzc2VydCB0aGF0IHNvbWUgdmFsdWUgaXMgcmVjb3JkZWRcbiAgICAgICAgaWRlbnRpZmllcnM6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBpbnN0YWxsYXRpb25JZDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgc2Vzc2lvbklkOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICB0ZWxlbWV0cnlWZXJzaW9uOiBDVVJSRU5UX1RFTEVNRVRSWV9WRVJTSU9OLFxuICAgICAgICAgIGNka0NsaVZlcnNpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIGNka0xpYnJhcnlWZXJzaW9uOiBmaXh0dXJlLmxpYnJhcnkucmVxdWVzdGVkVmVyc2lvbigpLFxuICAgICAgICAgIHJlZ2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgZXZlbnRJZDogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJzoxJyksXG4gICAgICAgICAgdGltZXN0YW1wOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgfSksXG4gICAgICAgIGVudmlyb25tZW50OiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgY2k6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIG9zOiB7XG4gICAgICAgICAgICBwbGF0Zm9ybTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgICByZWxlYXNlOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vZGVWZXJzaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgfSksXG4gICAgICAgIHByb2plY3Q6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHt9KSxcbiAgICAgICAgZHVyYXRpb246IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICB0b3RhbDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIGV2ZW50OiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgY29tbWFuZDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgcGF0aDogWydzeW50aCcsICckU1RBQ0tTXzEnXSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgICAgdW5zdGFibGU6ICc8cmVkYWN0ZWQ+JyxcbiAgICAgICAgICAgICAgWyd0ZWxlbWV0cnktZmlsZSddOiAnPHJlZGFjdGVkPicsXG4gICAgICAgICAgICAgIGxvb2t1cHM6IHRydWUsXG4gICAgICAgICAgICAgIFsnaWdub3JlLWVycm9ycyddOiBmYWxzZSxcbiAgICAgICAgICAgICAganNvbjogZmFsc2UsXG4gICAgICAgICAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3RhZ2luZzogdHJ1ZSxcbiAgICAgICAgICAgICAgWyduby1jb2xvciddOiBmYWxzZSxcbiAgICAgICAgICAgICAgY2k6IGV4cGVjdC5hbnl0aGluZygpLCAvLyBjaGFuZ2VzIGJhc2VkIG9uIHdoZXJlIHRoaXMgaXMgY2FsbGVkXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IHRydWUsXG4gICAgICAgICAgICAgIHF1aWV0OiBmYWxzZSxcbiAgICAgICAgICAgICAgeWVzOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzdGF0ZTogJ1NVQ0NFRURFRCcsXG4gICAgICAgICAgZXZlbnRUeXBlOiAnSU5WT0tFJyxcbiAgICAgICAgfSksXG4gICAgICAgIGlkZW50aWZpZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIHNlc3Npb25JZDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgdGVsZW1ldHJ5VmVyc2lvbjogQ1VSUkVOVF9URUxFTUVUUllfVkVSU0lPTixcbiAgICAgICAgICBjZGtDbGlWZXJzaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBjZGtMaWJyYXJ5VmVyc2lvbjogZml4dHVyZS5saWJyYXJ5LnJlcXVlc3RlZFZlcnNpb24oKSxcbiAgICAgICAgICByZWdpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIGV2ZW50SWQ6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCc6MicpLFxuICAgICAgICAgIHRpbWVzdGFtcDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBlbnZpcm9ubWVudDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGNpOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBvczoge1xuICAgICAgICAgICAgcGxhdGZvcm06IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgICAgcmVsZWFzZTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub2RlVmVyc2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBwcm9qZWN0OiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7fSksXG4gICAgICAgIGR1cmF0aW9uOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgdG90YWw6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIF0pO1xuICAgIGZzLnVubGlua1N5bmModGVsZW1ldHJ5RmlsZSk7XG4gIH0pLFxuKTtcbiJdfQ==
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXN5bnRoLXRlbGVtZXRyeS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstc3ludGgtdGVsZW1ldHJ5LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsMkNBQXdEO0FBQ3hELG1DQUEwRDtBQUUxRCxJQUFBLGVBQVMsRUFDUCwrQkFBK0IsRUFDL0IsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV0RixNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ25DLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsb0JBQW9CLGFBQWEsRUFBRSxDQUFDLEVBQy9FLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUNwQixDQUFDO0lBRUYsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUU3RCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkIsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7b0JBQzVCLFVBQVUsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2xDLFFBQVEsRUFB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ZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBDVVJSRU5UX1RFTEVNRVRSWV9WRVJTSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi9saWInO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgc3ludGggd2l0aCB0ZWxlbWV0cnkgZGF0YScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHRlbGVtZXRyeUZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsIGB0ZWxlbWV0cnktJHtEYXRlLm5vdygpfS5qc29uYCk7XG5cbiAgICBjb25zdCBzeW50aE91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFxuICAgICAgWydzeW50aCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyksIGAtLXRlbGVtZXRyeS1maWxlPSR7dGVsZW1ldHJ5RmlsZX1gXSxcbiAgICAgIHsgdmVyYm9zZUxldmVsOiAzIH0sIC8vIHRyYWNlIG1vZGVcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgdGhlIHRyYWNlIHRoYXQgdGVsZW1ldHJ5IHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHlcbiAgICBleHBlY3Qoc3ludGhPdXRwdXQpLnRvQ29udGFpbignVGVsZW1ldHJ5IFNlbnQgU3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICBjb25zdCBqc29uID0gZnMucmVhZEpTT05TeW5jKHRlbGVtZXRyeUZpbGUpO1xuICAgIGV4cGVjdChqc29uKS50b0VxdWFsKFtcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgZXZlbnQ6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBjb21tYW5kOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBwYXRoOiBbJ3N5bnRoJywgJyRTVEFDS1NfMSddLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgICB1bnN0YWJsZTogJzxyZWRhY3RlZD4nLFxuICAgICAgICAgICAgICBbJ3RlbGVtZXRyeS1maWxlJ106ICc8cmVkYWN0ZWQ+JyxcbiAgICAgICAgICAgICAgbG9va3VwczogdHJ1ZSxcbiAgICAgICAgICAgICAgWydpZ25vcmUtZXJyb3JzJ106IGZhbHNlLFxuICAgICAgICAgICAgICBqc29uOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGVidWc6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGFnaW5nOiB0cnVlLFxuICAgICAgICAgICAgICBbJ25vLWNvbG9yJ106IGZhbHNlLFxuICAgICAgICAgICAgICBjaTogZXhwZWN0LmFueXRoaW5nKCksIC8vIGNoYW5nZXMgYmFzZWQgb24gd2hlcmUgdGhpcyBpcyBjYWxsZWRcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgcXVpZXQ6IGZhbHNlLFxuICAgICAgICAgICAgICB5ZXM6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgY29udGV4dDoge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN0YXRlOiAnU1VDQ0VFREVEJyxcbiAgICAgICAgICBldmVudFR5cGU6ICdTWU5USCcsXG4gICAgICAgIH0pLFxuICAgICAgICAvLyBzb21lIG9mIHRoZXNlIGNhbiBjaGFuZ2U7IGJ1dCB3ZSBhc3NlcnQgdGhhdCBzb21lIHZhbHVlIGlzIHJlY29yZGVkXG4gICAgICAgIGlkZW50aWZpZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIHNlc3Npb25JZDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgdGVsZW1ldHJ5VmVyc2lvbjogQ1VSUkVOVF9URUxFTUVUUllfVkVSU0lPTixcbiAgICAgICAgICBjZGtDbGlWZXJzaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBjZGtMaWJyYXJ5VmVyc2lvbjogZml4dHVyZS5saWJyYXJ5LnJlcXVlc3RlZFZlcnNpb24oKSxcbiAgICAgICAgICByZWdpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIGV2ZW50SWQ6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCc6MScpLFxuICAgICAgICAgIHRpbWVzdGFtcDogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBlbnZpcm9ubWVudDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGNpOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBvczoge1xuICAgICAgICAgICAgcGxhdGZvcm06IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgICAgcmVsZWFzZTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub2RlVmVyc2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBwcm9qZWN0OiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7fSksXG4gICAgICAgIGR1cmF0aW9uOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgdG90YWw6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgY291bnRlcnM6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBzdGFja3M6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBldmVudDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGNvbW1hbmQ6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgIHBhdGg6IFsnc3ludGgnLCAnJFNUQUNLU18xJ10sXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICAgIHVuc3RhYmxlOiAnPHJlZGFjdGVkPicsXG4gICAgICAgICAgICAgIFsndGVsZW1ldHJ5LWZpbGUnXTogJzxyZWRhY3RlZD4nLFxuICAgICAgICAgICAgICBsb29rdXBzOiB0cnVlLFxuICAgICAgICAgICAgICBbJ2lnbm9yZS1lcnJvcnMnXTogZmFsc2UsXG4gICAgICAgICAgICAgIGpzb246IGZhbHNlLFxuICAgICAgICAgICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgICAgICAgICAgIHN0YWdpbmc6IHRydWUsXG4gICAgICAgICAgICAgIFsnbm8tY29sb3InXTogZmFsc2UsXG4gICAgICAgICAgICAgIGNpOiBleHBlY3QuYW55dGhpbmcoKSwgLy8gY2hhbmdlcyBiYXNlZCBvbiB3aGVyZSB0aGlzIGlzIGNhbGxlZFxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICBxdWlldDogZmFsc2UsXG4gICAgICAgICAgICAgIHllczogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3RhdGU6ICdTVUNDRUVERUQnLFxuICAgICAgICAgIGV2ZW50VHlwZTogJ0lOVk9LRScsXG4gICAgICAgIH0pLFxuICAgICAgICBpZGVudGlmaWVyczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBzZXNzaW9uSWQ6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIHRlbGVtZXRyeVZlcnNpb246IENVUlJFTlRfVEVMRU1FVFJZX1ZFUlNJT04sXG4gICAgICAgICAgY2RrQ2xpVmVyc2lvbjogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgY2RrTGlicmFyeVZlcnNpb246IGZpeHR1cmUubGlicmFyeS5yZXF1ZXN0ZWRWZXJzaW9uKCksXG4gICAgICAgICAgcmVnaW9uOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICBldmVudElkOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnOjInKSxcbiAgICAgICAgICB0aW1lc3RhbXA6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBjaTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICAgICAgb3M6IHtcbiAgICAgICAgICAgIHBsYXRmb3JtOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgICAgIHJlbGVhc2U6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm9kZVZlcnNpb246IGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgcHJvamVjdDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe30pLFxuICAgICAgICBkdXJhdGlvbjogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIHRvdGFsOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBmcy51bmxpbmtTeW5jKHRlbGVtZXRyeUZpbGUpO1xuICB9KSxcbik7XG4iXX0=
@@ -1,33 +0,0 @@
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)('fast deploy', (0, lib_1.withDefaultFixture)(async (fixture) => {
6
- // we are using a stack with a nested stack because CFN will always attempt to
7
- // update a nested stack, which will allow us to verify that updates are actually
8
- // skipped unless --force is specified.
9
- const stackArn = await fixture.cdkDeploy('with-nested-stack', { captureStderr: false });
10
- const changeSet1 = await getLatestChangeSet();
11
- // Deploy the same stack again, there should be no new change set created
12
- await fixture.cdkDeploy('with-nested-stack');
13
- const changeSet2 = await getLatestChangeSet();
14
- expect(changeSet2.ChangeSetId).toEqual(changeSet1.ChangeSetId);
15
- // Deploy the stack again with --force, now we should create a changeset
16
- await fixture.cdkDeploy('with-nested-stack', { options: ['--force'] });
17
- const changeSet3 = await getLatestChangeSet();
18
- expect(changeSet3.ChangeSetId).not.toEqual(changeSet2.ChangeSetId);
19
- // Deploy the stack again with tags, expected to create a new changeset
20
- // even though the resources didn't change.
21
- await fixture.cdkDeploy('with-nested-stack', { options: ['--tags', 'key=value'] });
22
- const changeSet4 = await getLatestChangeSet();
23
- expect(changeSet4.ChangeSetId).not.toEqual(changeSet3.ChangeSetId);
24
- async function getLatestChangeSet() {
25
- const response = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: stackArn }));
26
- if (!response.Stacks?.[0]) {
27
- throw new Error('Did not get a ChangeSet at all');
28
- }
29
- fixture.log(`Found Change Set ${response.Stacks?.[0].ChangeSetId}`);
30
- return response.Stacks?.[0];
31
- }
32
- }));
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWZhc3QtZGVwbG95LmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1mYXN0LWRlcGxveS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBdUU7QUFDdkUsc0NBQTZEO0FBRTdELElBQUEsZUFBUyxFQUNQLGFBQWEsRUFDYixJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyw4RUFBOEU7SUFDOUUsaUZBQWlGO0lBQ2pGLHVDQUF1QztJQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4RixNQUFNLFVBQVUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7SUFFOUMseUVBQXlFO0lBQ3pFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sVUFBVSxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztJQUM5QyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFL0Qsd0VBQXdFO0lBQ3hFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RSxNQUFNLFVBQVUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7SUFDOUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuRSx1RUFBdUU7SUFDdkUsMkNBQTJDO0lBQzNDLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkYsTUFBTSxVQUFVLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFbkUsS0FBSyxVQUFVLGtCQUFrQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLDZDQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2Zhc3QgZGVwbG95JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gd2UgYXJlIHVzaW5nIGEgc3RhY2sgd2l0aCBhIG5lc3RlZCBzdGFjayBiZWNhdXNlIENGTiB3aWxsIGFsd2F5cyBhdHRlbXB0IHRvXG4gICAgLy8gdXBkYXRlIGEgbmVzdGVkIHN0YWNrLCB3aGljaCB3aWxsIGFsbG93IHVzIHRvIHZlcmlmeSB0aGF0IHVwZGF0ZXMgYXJlIGFjdHVhbGx5XG4gICAgLy8gc2tpcHBlZCB1bmxlc3MgLS1mb3JjZSBpcyBzcGVjaWZpZWQuXG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDEgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcblxuICAgIC8vIERlcGxveSB0aGUgc2FtZSBzdGFjayBhZ2FpbiwgdGhlcmUgc2hvdWxkIGJlIG5vIG5ldyBjaGFuZ2Ugc2V0IGNyZWF0ZWRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snKTtcbiAgICBjb25zdCBjaGFuZ2VTZXQyID0gYXdhaXQgZ2V0TGF0ZXN0Q2hhbmdlU2V0KCk7XG4gICAgZXhwZWN0KGNoYW5nZVNldDIuQ2hhbmdlU2V0SWQpLnRvRXF1YWwoY2hhbmdlU2V0MS5DaGFuZ2VTZXRJZCk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIGFnYWluIHdpdGggLS1mb3JjZSwgbm93IHdlIHNob3VsZCBjcmVhdGUgYSBjaGFuZ2VzZXRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IG9wdGlvbnM6IFsnLS1mb3JjZSddIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDMgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0My5DaGFuZ2VTZXRJZCkubm90LnRvRXF1YWwoY2hhbmdlU2V0Mi5DaGFuZ2VTZXRJZCk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIGFnYWluIHdpdGggdGFncywgZXhwZWN0ZWQgdG8gY3JlYXRlIGEgbmV3IGNoYW5nZXNldFxuICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSByZXNvdXJjZXMgZGlkbid0IGNoYW5nZS5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IG9wdGlvbnM6IFsnLS10YWdzJywgJ2tleT12YWx1ZSddIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDQgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0NC5DaGFuZ2VTZXRJZCkubm90LnRvRXF1YWwoY2hhbmdlU2V0My5DaGFuZ2VTZXRJZCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RDaGFuZ2VTZXQoKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogc3RhY2tBcm4gfSkpO1xuICAgICAgaWYgKCFyZXNwb25zZS5TdGFja3M/LlswXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpZCBub3QgZ2V0IGEgQ2hhbmdlU2V0IGF0IGFsbCcpO1xuICAgICAgfVxuICAgICAgZml4dHVyZS5sb2coYEZvdW5kIENoYW5nZSBTZXQgJHtyZXNwb25zZS5TdGFja3M/LlswXS5DaGFuZ2VTZXRJZH1gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5TdGFja3M/LlswXTtcbiAgICB9XG4gIH0pLFxuKTtcblxuIl19