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

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.
package/package.json CHANGED
@@ -39,9 +39,9 @@
39
39
  "organization": true
40
40
  },
41
41
  "devDependencies": {
42
- "@aws-cdk/toolkit-lib": "1.8.0",
42
+ "@aws-cdk/toolkit-lib": "1.9.0",
43
43
  "@aws-cdk/yarn-cling": "0.0.0",
44
- "@cdklabs/eslint-plugin": "^1.3.4",
44
+ "@cdklabs/eslint-plugin": "^1.3.5",
45
45
  "@stylistic/eslint-plugin": "^3",
46
46
  "@types/fs-extra": "^9",
47
47
  "@types/jest": "^29.5.14",
@@ -67,23 +67,23 @@
67
67
  "typescript": "5.8"
68
68
  },
69
69
  "dependencies": {
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",
70
+ "@aws-sdk/client-cloudformation": "^3.893.0",
71
+ "@aws-sdk/client-codeartifact": "^3.893.0",
72
+ "@aws-sdk/client-ecr": "^3.893.0",
73
+ "@aws-sdk/client-ecr-public": "^3.893.0",
74
+ "@aws-sdk/client-ecs": "^3.893.0",
75
+ "@aws-sdk/client-iam": "^3.893.0",
76
+ "@aws-sdk/client-lambda": "^3.893.0",
77
+ "@aws-sdk/client-s3": "^3.893.0",
78
+ "@aws-sdk/client-secrets-manager": "^3.893.0",
79
+ "@aws-sdk/client-sns": "^3.893.0",
80
+ "@aws-sdk/client-sso": "^3.893.0",
81
+ "@aws-sdk/client-sts": "^3.893.0",
82
+ "@aws-sdk/credential-providers": "^3.893.0",
83
+ "@cdklabs/cdk-atmosphere-client": "^0.0.65",
84
84
  "@octokit/rest": "^20",
85
- "@smithy/types": "^4.3.2",
86
- "@smithy/util-retry": "^4.0.7",
85
+ "@smithy/types": "^4.5.0",
86
+ "@smithy/util-retry": "^4.1.2",
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.16.0",
119
+ "version": "3.16.2",
120
120
  "types": "lib/index.d.ts",
121
121
  "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
122
122
  }
@@ -0,0 +1,7 @@
1
+ {
2
+ "app": "node refactoring.js",
3
+ "versionReporting": false,
4
+ "context": {
5
+ "aws-cdk:enableDiffNoFail": "true"
6
+ }
7
+ }
@@ -0,0 +1,26 @@
1
+ const cdk = require('aws-cdk-lib');
2
+ const s3 = require('aws-cdk-lib/aws-s3');
3
+
4
+ const BUCKET_ID = process.env.BUCKET_ID ?? 'OldName';
5
+ const stackPrefix = process.env.STACK_NAME_PREFIX;
6
+
7
+ const app = new cdk.App();
8
+
9
+ let gamma = {
10
+ region: 'eu-central-1',
11
+ };
12
+ let prod = {
13
+ region: 'us-east-1',
14
+ };
15
+
16
+ class MyStack extends cdk.Stack {
17
+ constructor(scope, id) {
18
+ super(scope, id);
19
+ new s3.Bucket(this, BUCKET_ID);
20
+ }
21
+ }
22
+
23
+ new MyStack(app, `${stackPrefix}-gamma-stack`, { env: gamma });
24
+ new MyStack(app, `${stackPrefix}-prod-stack`, { env: prod });
25
+
26
+ app.synth();
@@ -37,7 +37,33 @@ const lib_1 = require("../../../lib");
37
37
  });
38
38
  expect(stdErr).toContain('Nothing to refactor');
39
39
  }));
40
+ (0, lib_1.integTest)('cdk refactor - filters stacks by pattern', (0, lib_1.withSpecificFixture)('refactoring-multiple-envs', async (fixture) => {
41
+ // First, deploy the stacks
42
+ await fixture.cdkDeploy('gamma-stack', {
43
+ modEnv: {
44
+ BUCKET_ID: 'OldName',
45
+ },
46
+ });
47
+ await fixture.cdkDeploy('prod-stack', {
48
+ modEnv: {
49
+ BUCKET_ID: 'OldName',
50
+ },
51
+ });
52
+ // Then see if the refactoring tool detects the change
53
+ const stdErr = await fixture.cdkRefactor({
54
+ options: ['*-gamma-stack', '--dry-run', '--unstable=refactor'],
55
+ allowErrExit: true,
56
+ captureStderr: true,
57
+ // Making sure the synthesized stack has a queue with
58
+ // the new name so that a refactor is detected
59
+ modEnv: {
60
+ BUCKET_ID: 'NewName',
61
+ },
62
+ });
63
+ const numberOfEnvironments = (stdErr.match(/Resource Type/g) || []).length;
64
+ expect(numberOfEnvironments).toEqual(1);
65
+ }));
40
66
  function removeColor(str) {
41
67
  return str.replace(/\x1B[[(?);]{0,2}(;?\d)*./g, '');
42
68
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLWRyeS1ydW4uaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXJlZmFjdG9yLWRyeS1ydW4uaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLGtFQUFrRSxFQUNsRSxJQUFBLHlCQUFtQixFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkQsMkJBQTJCO0lBQzNCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1FBQy9CLE1BQU0sRUFBRTtZQUNOLHNCQUFzQixFQUFFLFNBQVM7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxzREFBc0Q7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQztRQUM3QyxZQUFZLEVBQUUsSUFBSTtRQUNsQixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLE1BQU0sRUFBRTtZQUNOLHNCQUFzQixFQUFFLFNBQVM7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDM0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0FBQzdHLENBQUMsQ0FBQyxDQUNILENBQUM7QUFFRixJQUFBLGVBQVMsRUFDUCxnREFBZ0QsRUFDaEQsSUFBQSx5QkFBbUIsRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELE1BQU0sTUFBTSxHQUFHO1FBQ2Isc0JBQXNCLEVBQUUsU0FBUztLQUNsQyxDQUFDO0lBRUYsMkJBQTJCO0lBQzNCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU3QyxzREFBc0Q7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQztRQUM3QyxZQUFZLEVBQUUsSUFBSTtRQUNsQixNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQyxDQUNILENBQUM7QUFFRixTQUFTLFdBQVcsQ0FBQyxHQUFXO0lBQzlCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIHJlZmFjdG9yIC0gZGV0ZWN0cyByZWZhY3RvcmluZyBjaGFuZ2VzIGFuZCBwcmludHMgdGhlIHJlc3VsdCcsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JlZmFjdG9yaW5nJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBGaXJzdCwgZGVwbG95IHRoZSBzdGFja3NcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYnVja2V0LXN0YWNrJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Jhc2ljJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEJBU0lDX1FVRVVFX0xPR0lDQUxfSUQ6ICdPbGROYW1lJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUaGVuIHNlZSBpZiB0aGUgcmVmYWN0b3JpbmcgdG9vbCBkZXRlY3RzIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBzdGRFcnIgPSBhd2FpdCBmaXh0dXJlLmNka1JlZmFjdG9yKHtcbiAgICAgIG9wdGlvbnM6IFsnLS1kcnktcnVuJywgJy0tdW5zdGFibGU9cmVmYWN0b3InXSxcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIC8vIE1ha2luZyBzdXJlIHRoZSBzeW50aGVzaXplZCBzdGFjayBoYXMgYSBxdWV1ZSB3aXRoXG4gICAgICAvLyB0aGUgbmV3IG5hbWUgc28gdGhhdCBhIHJlZmFjdG9yIGlzIGRldGVjdGVkXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgQkFTSUNfUVVFVUVfTE9HSUNBTF9JRDogJ05ld05hbWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChzdGRFcnIpLnRvQ29udGFpbignVGhlIGZvbGxvd2luZyByZXNvdXJjZXMgd2VyZSBtb3ZlZCBvciByZW5hbWVkOicpO1xuICAgIGV4cGVjdChyZW1vdmVDb2xvcihzdGRFcnIpKS50b01hdGNoKC/ilIIgQVdTOjpTUVM6OlF1ZXVlIOKUgiAuKlxcL09sZE5hbWVcXC9SZXNvdXJjZSDilIIgLipcXC9OZXdOYW1lXFwvUmVzb3VyY2Ug4pSCLyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIHJlZmFjdG9yIC0gbm8gcmVmYWN0b3JpbmcgY2hhbmdlcyBkZXRlY3RlZCcsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JlZmFjdG9yaW5nJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBtb2RFbnYgPSB7XG4gICAgICBCQVNJQ19RVUVVRV9MT0dJQ0FMX0lEOiAnT2xkTmFtZScsXG4gICAgfTtcblxuICAgIC8vIEZpcnN0LCBkZXBsb3kgdGhlIHN0YWNrc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidWNrZXQtc3RhY2snKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYmFzaWMnLCB7IG1vZEVudiB9KTtcblxuICAgIC8vIFRoZW4gc2VlIGlmIHRoZSByZWZhY3RvcmluZyB0b29sIGRldGVjdHMgdGhlIGNoYW5nZVxuICAgIGNvbnN0IHN0ZEVyciA9IGF3YWl0IGZpeHR1cmUuY2RrUmVmYWN0b3Ioe1xuICAgICAgb3B0aW9uczogWyctLWRyeS1ydW4nLCAnLS11bnN0YWJsZT1yZWZhY3RvciddLFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgbW9kRW52LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0ZEVycikudG9Db250YWluKCdOb3RoaW5nIHRvIHJlZmFjdG9yJyk7XG4gIH0pLFxuKTtcblxuZnVuY3Rpb24gcmVtb3ZlQ29sb3Ioc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xceDFCW1soPyk7XXswLDJ9KDs/XFxkKSouL2csICcnKTtcbn1cblxuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLWRyeS1ydW4uaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXJlZmFjdG9yLWRyeS1ydW4uaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLGtFQUFrRSxFQUNsRSxJQUFBLHlCQUFtQixFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkQsMkJBQTJCO0lBQzNCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1FBQy9CLE1BQU0sRUFBRTtZQUNOLHNCQUFzQixFQUFFLFNBQVM7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxzREFBc0Q7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQztRQUM3QyxZQUFZLEVBQUUsSUFBSTtRQUNsQixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLE1BQU0sRUFBRTtZQUNOLHNCQUFzQixFQUFFLFNBQVM7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDM0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0FBQzdHLENBQUMsQ0FBQyxDQUNILENBQUM7QUFFRixJQUFBLGVBQVMsRUFDUCxnREFBZ0QsRUFDaEQsSUFBQSx5QkFBbUIsRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELE1BQU0sTUFBTSxHQUFHO1FBQ2Isc0JBQXNCLEVBQUUsU0FBUztLQUNsQyxDQUFDO0lBRUYsMkJBQTJCO0lBQzNCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU3QyxzREFBc0Q7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQztRQUM3QyxZQUFZLEVBQUUsSUFBSTtRQUNsQixNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQyxDQUNILENBQUM7QUFFRixJQUFBLGVBQVMsRUFDUCwwQ0FBMEMsRUFDMUMsSUFBQSx5QkFBbUIsRUFBQywyQkFBMkIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDakUsMkJBQTJCO0lBQzNCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7UUFDckMsTUFBTSxFQUFFO1lBQ04sU0FBUyxFQUFFLFNBQVM7U0FDckI7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO1FBQ3BDLE1BQU0sRUFBRTtZQUNOLFNBQVMsRUFBRSxTQUFTO1NBQ3JCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsc0RBQXNEO0lBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN2QyxPQUFPLEVBQUUsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixDQUFDO1FBQzlELFlBQVksRUFBRSxJQUFJO1FBQ2xCLGFBQWEsRUFBRSxJQUFJO1FBQ25CLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsTUFBTSxFQUFFO1lBQ04sU0FBUyxFQUFFLFNBQVM7U0FDckI7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzRSxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUVGLFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgcmVmYWN0b3IgLSBkZXRlY3RzIHJlZmFjdG9yaW5nIGNoYW5nZXMgYW5kIHByaW50cyB0aGUgcmVzdWx0JyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncmVmYWN0b3JpbmcnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEZpcnN0LCBkZXBsb3kgdGhlIHN0YWNrc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidWNrZXQtc3RhY2snKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYmFzaWMnLCB7XG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgQkFTSUNfUVVFVUVfTE9HSUNBTF9JRDogJ09sZE5hbWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFRoZW4gc2VlIGlmIHRoZSByZWZhY3RvcmluZyB0b29sIGRldGVjdHMgdGhlIGNoYW5nZVxuICAgIGNvbnN0IHN0ZEVyciA9IGF3YWl0IGZpeHR1cmUuY2RrUmVmYWN0b3Ioe1xuICAgICAgb3B0aW9uczogWyctLWRyeS1ydW4nLCAnLS11bnN0YWJsZT1yZWZhY3RvciddLFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgLy8gTWFraW5nIHN1cmUgdGhlIHN5bnRoZXNpemVkIHN0YWNrIGhhcyBhIHF1ZXVlIHdpdGhcbiAgICAgIC8vIHRoZSBuZXcgbmFtZSBzbyB0aGF0IGEgcmVmYWN0b3IgaXMgZGV0ZWN0ZWRcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBCQVNJQ19RVUVVRV9MT0dJQ0FMX0lEOiAnTmV3TmFtZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0ZEVycikudG9Db250YWluKCdUaGUgZm9sbG93aW5nIHJlc291cmNlcyB3ZXJlIG1vdmVkIG9yIHJlbmFtZWQ6Jyk7XG4gICAgZXhwZWN0KHJlbW92ZUNvbG9yKHN0ZEVycikpLnRvTWF0Y2goL+KUgiBBV1M6OlNRUzo6UXVldWUg4pSCIC4qXFwvT2xkTmFtZVxcL1Jlc291cmNlIOKUgiAuKlxcL05ld05hbWVcXC9SZXNvdXJjZSDilIIvKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgcmVmYWN0b3IgLSBubyByZWZhY3RvcmluZyBjaGFuZ2VzIGRldGVjdGVkJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncmVmYWN0b3JpbmcnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG1vZEVudiA9IHtcbiAgICAgIEJBU0lDX1FVRVVFX0xPR0lDQUxfSUQ6ICdPbGROYW1lJyxcbiAgICB9O1xuXG4gICAgLy8gRmlyc3QsIGRlcGxveSB0aGUgc3RhY2tzXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2J1Y2tldC1zdGFjaycpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdiYXNpYycsIHsgbW9kRW52IH0pO1xuXG4gICAgLy8gVGhlbiBzZWUgaWYgdGhlIHJlZmFjdG9yaW5nIHRvb2wgZGV0ZWN0cyB0aGUgY2hhbmdlXG4gICAgY29uc3Qgc3RkRXJyID0gYXdhaXQgZml4dHVyZS5jZGtSZWZhY3Rvcih7XG4gICAgICBvcHRpb25zOiBbJy0tZHJ5LXJ1bicsICctLXVuc3RhYmxlPXJlZmFjdG9yJ10sXG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICBtb2RFbnYsXG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ05vdGhpbmcgdG8gcmVmYWN0b3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgcmVmYWN0b3IgLSBmaWx0ZXJzIHN0YWNrcyBieSBwYXR0ZXJuJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncmVmYWN0b3JpbmctbXVsdGlwbGUtZW52cycsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRmlyc3QsIGRlcGxveSB0aGUgc3RhY2tzXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2dhbW1hLXN0YWNrJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEJVQ0tFVF9JRDogJ09sZE5hbWUnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgncHJvZC1zdGFjaycsIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBCVUNLRVRfSUQ6ICdPbGROYW1lJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUaGVuIHNlZSBpZiB0aGUgcmVmYWN0b3JpbmcgdG9vbCBkZXRlY3RzIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBzdGRFcnIgPSBhd2FpdCBmaXh0dXJlLmNka1JlZmFjdG9yKHtcbiAgICAgIG9wdGlvbnM6IFsnKi1nYW1tYS1zdGFjaycsICctLWRyeS1ydW4nLCAnLS11bnN0YWJsZT1yZWZhY3RvciddLFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICAgIC8vIE1ha2luZyBzdXJlIHRoZSBzeW50aGVzaXplZCBzdGFjayBoYXMgYSBxdWV1ZSB3aXRoXG4gICAgICAvLyB0aGUgbmV3IG5hbWUgc28gdGhhdCBhIHJlZmFjdG9yIGlzIGRldGVjdGVkXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgQlVDS0VUX0lEOiAnTmV3TmFtZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgbnVtYmVyT2ZFbnZpcm9ubWVudHMgPSAoc3RkRXJyLm1hdGNoKC9SZXNvdXJjZSBUeXBlL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgZXhwZWN0KG51bWJlck9mRW52aXJvbm1lbnRzKS50b0VxdWFsKDEpO1xuICB9KSxcbik7XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbG9yKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHgxQltbKD8pO117MCwyfSg7P1xcZCkqLi9nLCAnJyk7XG59XG5cbiJdfQ==