@aws-cdk-testing/cli-integ 3.28.0 → 3.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/lib/shell.d.ts +6 -0
- package/lib/shell.js +2 -2
- package/npm-shrinkwrap.json +1 -1
- package/package.json +2 -2
- package/resources/cdk-apps/tty-app/app.js +29 -0
- package/resources/cdk-apps/tty-app/cdk.json +4 -0
- package/tests/cli-integ-tests/output/cdk-apps-must-have-terminal.integtest.js +11 -0
- package/tests/cli-integ-tests/output/cdk-ci-true-output-to-stdout.integtest.d.ts +1 -0
- /package/tests/cli-integ-tests/{ci-output/cdk-ci-output-to-stderr.integtest.d.ts → output/cdk-apps-must-have-terminal.integtest.d.ts} +0 -0
- /package/tests/cli-integ-tests/{ci-output/cdk-ci-true-output-to-stdout.integtest.d.ts → output/cdk-ci-output-to-stderr.integtest.d.ts} +0 -0
- /package/tests/cli-integ-tests/{ci-output → output}/cdk-ci-output-to-stderr.integtest.js +0 -0
- /package/tests/cli-integ-tests/{ci-output → output}/cdk-ci-true-output-to-stdout.integtest.js +0 -0
package/README.md
CHANGED
|
@@ -70,10 +70,10 @@ $ bin/run-suite --cli-version=2.34.5 <SUITE_NAME>
|
|
|
70
70
|
$ bin/run-suite --framework-version=2.34.5 <SUITE_NAME>
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
To run a specific test, add `-t` and a substring of the test name. For example:
|
|
73
|
+
To run a specific test, add `-F`/`-t` and a substring of the test name. For example:
|
|
74
74
|
|
|
75
75
|
```shell
|
|
76
|
-
bin/run-suite -a cli-integ-tests -t 'load old assemblies'
|
|
76
|
+
bin/run-suite -a cli-integ-tests -F some-test.integ -t 'load old assemblies'
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
### Running a test suite against binaries
|
|
@@ -132,16 +132,16 @@ of the suite, detailing which tests passed/failed, and some additional statistic
|
|
|
132
132
|
|
|
133
133
|
> For exmaple: https://github.com/aws/aws-cdk-cli/actions/runs/15305859516
|
|
134
134
|
|
|
135
|
-
To debug a failing test, navigate to the execution logs and search for the name of the test.
|
|
135
|
+
To debug a failing test, navigate to the execution logs and search for the name of the test.
|
|
136
136
|
You'll find a verbose log that displays all operations taken during the test.
|
|
137
137
|
|
|
138
|
-
Unlike running locally, PRs make use of the *Atmosphere* service, an internal CDK service designed
|
|
139
|
-
to provide integration tests with clean AWS environments. It allows us to run many concurrent tests,
|
|
140
|
-
and significantly reduce suite durations. Most of the time, *Atmosphere* should be transparent to you,
|
|
141
|
-
but sometimes, tests that pass locally may fail during PRs because of additional restrictions
|
|
138
|
+
Unlike running locally, PRs make use of the *Atmosphere* service, an internal CDK service designed
|
|
139
|
+
to provide integration tests with clean AWS environments. It allows us to run many concurrent tests,
|
|
140
|
+
and significantly reduce suite durations. Most of the time, *Atmosphere* should be transparent to you,
|
|
141
|
+
but sometimes, tests that pass locally may fail during PRs because of additional restrictions
|
|
142
142
|
it imposes:
|
|
143
143
|
|
|
144
|
-
- **Service Control Policy (SCP):** AWS environments (i.e accounts) are subject to an SCP that denies access
|
|
144
|
+
- **Service Control Policy (SCP):** AWS environments (i.e accounts) are subject to an SCP that denies access
|
|
145
145
|
to specific services. For example, you might see a failure similar to:
|
|
146
146
|
|
|
147
147
|
```
|
package/lib/shell.d.ts
CHANGED
|
@@ -92,6 +92,12 @@ export interface ShellOptions extends child_process.SpawnOptions {
|
|
|
92
92
|
* Order and count should correspond to the expected prompts issued by the subprocess.
|
|
93
93
|
*/
|
|
94
94
|
readonly interact?: UserInteraction[];
|
|
95
|
+
/**
|
|
96
|
+
* Force a TTY, even if there are no interactions
|
|
97
|
+
*
|
|
98
|
+
* @default false
|
|
99
|
+
*/
|
|
100
|
+
readonly tty?: boolean;
|
|
95
101
|
}
|
|
96
102
|
export declare class ShellHelper {
|
|
97
103
|
private readonly _cwd;
|
package/lib/shell.js
CHANGED
|
@@ -27,7 +27,7 @@ async function shell(command, options = {}) {
|
|
|
27
27
|
writeToOutputs(`💻 ${command.join(' ')}\n`);
|
|
28
28
|
const show = options.show ?? 'always';
|
|
29
29
|
const env = options.env ?? (options.modEnv ? { ...process.env, ...options.modEnv } : process.env);
|
|
30
|
-
const tty = options.interact && options.interact.length > 0;
|
|
30
|
+
const tty = options.tty || (options.interact && options.interact.length > 0);
|
|
31
31
|
// Coerce to `any` because `ShellOptions` contains custom properties
|
|
32
32
|
// that don't exist in the underlying interfaces. We could either rebuild each options map,
|
|
33
33
|
// or just pass through and let the underlying implemenation ignore what it doesn't know about.
|
|
@@ -212,4 +212,4 @@ class LastLine {
|
|
|
212
212
|
this.lastLine = '';
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzaGVsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhQSxzQkE4R0M7QUFxSUQsd0JBNEJDO0FBRUQsd0NBUUM7QUFyU0QseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0IsdUNBQW9DO0FBR3BDOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsS0FBSyxDQUFDLE9BQWlCLEVBQUUsVUFBd0IsRUFBRTtJQUN2RSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDbkMsS0FBSyxNQUFNLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNuQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRiw0QkFBNEI7SUFDNUIsY0FBYyxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUM7SUFFdEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEcsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEs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R0FBRyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxRQUFRO0lBQ0osUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUV2QixNQUFNLENBQUMsS0FBYTtRQUN6QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sbUVBQW1FO1lBQ25FLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFTSxHQUFHO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgVGVzdENvbnRleHQgfSBmcm9tICcuL2ludGVnLXRlc3QnO1xuaW1wb3J0IHsgUHJvY2VzcyB9IGZyb20gJy4vcHJvY2Vzcyc7XG5pbXBvcnQgdHlwZSB7IFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQgfSBmcm9tICcuL3dpdGgtdGVtcG9yYXJ5LWRpcmVjdG9yeSc7XG5cbi8qKlxuICogQSBzaGVsbCBjb21tYW5kIHRoYXQgZG9lcyB3aGF0IHlvdSB3YW50XG4gKlxuICogSXMgcGxhdGZvcm0tYXdhcmUsIGhhbmRsZXMgZXJyb3JzIG5pY2VseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoZWxsKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBTaGVsbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChvcHRpb25zLm1vZEVudiAmJiBvcHRpb25zLmVudikge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlIGVpdGhlciBlbnYgb3IgbW9kRW52IGJ1dCBub3QgYm90aCcpO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0cyA9IG5ldyBTZXQob3B0aW9ucy5vdXRwdXRzKTtcbiAgY29uc3Qgd3JpdGVUb091dHB1dHMgPSAoeDogc3RyaW5nKSA9PiB7XG4gICAgZm9yIChjb25zdCBvdXRwdXRTdHJlYW0gb2Ygb3V0cHV0cykge1xuICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKHgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBBbHdheXMgb3V0cHV0IHRoZSBjb21tYW5kXG4gIHdyaXRlVG9PdXRwdXRzKGDwn5K7ICR7Y29tbWFuZC5qb2luKCcgJyl9XFxuYCk7XG4gIGNvbnN0IHNob3cgPSBvcHRpb25zLnNob3cgPz8gJ2Fsd2F5cyc7XG5cbiAgY29uc3QgZW52ID0gb3B0aW9ucy5lbnYgPz8gKG9wdGlvbnMubW9kRW52ID8geyAuLi5wcm9jZXNzLmVudiwgLi4ub3B0aW9ucy5tb2RFbnYgfSA6IHByb2Nlc3MuZW52KTtcbiAgY29uc3QgdHR5ID0gb3B0aW9ucy5pbnRlcmFjdCAmJiBvcHRpb25zLmludGVyYWN0Lmxlbmd0aCA+IDA7XG5cbiAgLy8gQ29lcmNlIHRvIGBhbnlgIGJlY2F1c2UgYFNoZWxsT3B0aW9uc2AgY29udGFpbnMgY3VzdG9tIHByb3BlcnRpZXNcbiAgLy8gdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgdW5kZXJseWluZyBpbnRlcmZhY2VzLiBXZSBjb3VsZCBlaXRoZXIgcmVidWlsZCBlYWNoIG9wdGlvbnMgbWFwLFxuICAvLyBvciBqdXN0IHBhc3MgdGhyb3VnaCBhbmQgbGV0IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVuYXRpb24gaWdub3JlIHdoYXQgaXQgZG9lc24ndCBrbm93IGFib3V0LlxuICAvLyBXZSBjaG9vc2UgdGhlIGxhenkgb25lLlxuICBjb25zdCBzcGF3bk9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIGVudiB9IGFzIGFueTtcblxuICBjb25zdCBjaGlsZCA9IHR0eVxuICAgID8gUHJvY2Vzcy5zcGF3blRUWShjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpLCBzcGF3bk9wdGlvbnMpXG4gICAgOiBQcm9jZXNzLnNwYXduKGNvbW1hbmRbMF0sIGNvbW1hbmQuc2xpY2UoMSksIHNwYXduT3B0aW9ucyk7XG5cbiAgLy8gY29weSBiZWNhdXNlIHdlIHdpbGwgYmUgc2hpZnRpbmcgaXRcbiAgY29uc3QgcmVtYWluaW5nSW50ZXJhY3Rpb25zID0gWy4uLihvcHRpb25zLmludGVyYWN0ID8/IFtdKV07XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN0ZG91dCA9IG5ldyBBcnJheTxCdWZmZXI+KCk7XG4gICAgY29uc3Qgc3RkZXJyID0gbmV3IEFycmF5PEJ1ZmZlcj4oKTtcblxuICAgIGNvbnN0IGxhc3RMaW5lID0gbmV3IExhc3RMaW5lKCk7XG5cbiAgICBjaGlsZC5vblN0ZG91dChjaHVuayA9PiB7XG4gICAgICBpZiAoc2hvdyA9PT0gJ2Fsd2F5cycpIHtcbiAgICAgICAgd3JpdGVUb091dHB1dHMoY2h1bmsudG9TdHJpbmcoJ3V0Zi04JykpO1xuICAgICAgfVxuICAgICAgc3Rkb3V0LnB1c2goY2h1bmspO1xuICAgICAgbGFzdExpbmUuYXBwZW5kKGNodW5rLnRvU3RyaW5nKCd1dGYtOCcpKTtcblxuICAgICAgY29uc3QgaW50ZXJhY3Rpb24gPSByZW1haW5pbmdJbnRlcmFjdGlvbnNbMF07XG4gICAgICBpZiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaWYgKGludGVyYWN0aW9uLnByb21wdC50ZXN0KGxhc3RMaW5lLmdldCgpKSkge1xuICAgICAgICAgIC8vIHN1YnByb2Nlc3MgZXhwZWN0cyBhIHVzZXIgaW5wdXQgbm93LlxuICAgICAgICAgIC8vIGZpcnN0LCBzaGlmdCB0aGUgaW50ZXJhY3Rpb25zIHRvIGVuc3VyZSB0aGUgc2FtZSBpbnRlcmFjdGlvbiBpcyBub3QgcmV1c2VkXG4gICAgICAgICAgcmVtYWluaW5nSW50ZXJhY3Rpb25zLnNoaWZ0KCk7XG5cbiAgICAgICAgICAvLyB0aGVuLCByZXNldCB0aGUgbGFzdCBsaW5lIHRvIHByZXZlbnQgcmVwZWF0ZWQgbWF0Y2hlcyBjYXVzZWQgYnkgdHR5IGVjaG9pbmdcbiAgICAgICAgICBsYXN0TGluZS5yZXNldCgpO1xuXG4gICAgICAgICAgLy8gbm93IHdyaXRlIHRoZSBpbnB1dCB3aXRoIGEgc2xpZ2h0IGRlbGF5IHRvIGVuc3VyZVxuICAgICAgICAgIC8vIHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBhbHJlYWR5IHN0YXJ0ZWQgcmVhZGluZy5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNoaWxkLndyaXRlU3RkaW4oaW50ZXJhY3Rpb24uaW5wdXQgKyAoaW50ZXJhY3Rpb24uZW5kID8/IG9zLkVPTCkpO1xuICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0dHkgJiYgb3B0aW9ucy5jYXB0dXJlU3RkZXJyID09PSBmYWxzZSkge1xuICAgICAgLy8gaW4gYSB0dHkgc3RkZXJyIGdvZXMgdG8gdGhlIHNhbWUgZmQgYXMgc3Rkb3V0XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkaXNhYmxlIFxcJ2NhcHR1cmVTdGRlcnJcXCcgaW4gdHR5Jyk7XG4gICAgfVxuXG4gICAgaWYgKCF0dHkpIHtcbiAgICAgIC8vIGluIGEgdHR5IHN0ZGVyciBnb2VzIHRvIHRoZSBzYW1lIGZkIGFzIHN0ZG91dCwgc28gb25TdGRvdXRcbiAgICAgIC8vIGlzIHN1ZmZpY2llbnQuXG4gICAgICBjaGlsZC5vblN0ZGVycihjaHVuayA9PiB7XG4gICAgICAgIGlmIChzaG93ID09PSAnYWx3YXlzJykge1xuICAgICAgICAgIHdyaXRlVG9PdXRwdXRzKGNodW5rLnRvU3RyaW5nKCd1dGYtOCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5jYXB0dXJlU3RkZXJyID8/IHRydWUpIHtcbiAgICAgICAgICBzdGRlcnIucHVzaChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoaWxkLm9uRXJyb3IocmVqZWN0KTtcblxuICAgIGNoaWxkLm9uRXhpdChjb2RlID0+IHtcbiAgICAgIGNvbnN0IHN0ZGVyck91dHB1dCA9IEJ1ZmZlci5jb25jYXQoc3RkZXJyKS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIGNvbnN0IHN0ZG91dE91dHB1dCA9IEJ1ZmZlci5jb25jYXQoc3Rkb3V0KS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIGNvbnN0IG91dCA9IChvcHRpb25zLm9ubHlTdGRlcnIgPyBzdGRlcnJPdXRwdXQgOiBzdGRvdXRPdXRwdXQgKyBzdGRlcnJPdXRwdXQpLnRyaW0oKTtcblxuICAgICAgY29uc3QgbG9nQW5kcmVqZWN0ID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICBpZiAoc2hvdyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIHdyaXRlVG9PdXRwdXRzKGAke291dH1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHJlbWFpbmluZ0ludGVyYWN0aW9ucy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgZXhpdCBjb2RlLCBpZiB3ZSBkaWRuJ3QgY29uc3VtZSBhbGwgZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIHdlIHByb2JhYmx5XG4gICAgICAgIC8vIGRpZCBzb21ldGhpaW5nIHdyb25nLlxuICAgICAgICBsb2dBbmRyZWplY3QobmV3IEVycm9yKGBFeHBlY3RlZCBtb3JlIHVzZXIgaW50ZXJhY3Rpb25zIGJ1dCBzdWJwcm9jZXNzIGV4aXRlZCB3aXRoICR7Y29kZX1gKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvZGUgPT09IDAgfHwgb3B0aW9ucy5hbGxvd0VyckV4aXQpIHtcbiAgICAgICAgcmVzb2x2ZShvdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nQW5kcmVqZWN0KG5ldyBFcnJvcihgJyR7Y29tbWFuZC5qb2luKCcgJyl9JyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICR7Y29kZX0uYCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzaW5nbGUgdXNlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzaGVsbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySW50ZXJhY3Rpb24ge1xuICAvKipcbiAgICogVGhlIHByb21wdCB0byBleHBlY3QuIFJlZ2V4IG1hdGNoZWQgYWdhaW5zdCB0aGUgbGFzdCBsaW5lIGluXG4gICAqIHRoZSBvdXRwdXQgYmVmb3JlIHRoZSBwcm9tcHQgaXMgZGlzcGxheWVkLlxuICAgKlxuICAgKiBNb3N0IGNvbW1vbmx5IHRoaXMgd291bGQgYmUgYSBzaW1wbGUgc3RyaW5nIHRvIG1hdGNoIGZvciBpbmNsdXNpb24uXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAtIFByb2Nlc3MgT3V0cHV0OiBcIkhleSB0aGVyZSEgQXJlIHlvdSBzdXJlP1wiXG4gICAqICAgUHJvbXB0OiAvQXJlIHlvdSBzdXJlPy9cbiAgICogICBNYXRjaCAoWWVzL05vKTogWWVzXG4gICAqICAgUmVhc29uOiBcIkhleSB0aGVyZSEgQXJlIHlvdSBzdXJlP1wiIH4gL0FyZSB5b3Ugc3VyZT8vXG4gICAqXG4gICAqIC0gUHJvY2VzcyBPdXRwdXQ6IFwiSGV5IHRoZXJlIVxcbkFyZSB5b3Ugc3VyZT9cIlxuICAgKiAgIFByb21wdDogL0FyZSB5b3Ugc3VyZT8vXG4gICAqICAgTWF0Y2ggKFllcy9Obyk6IFllc1xuICAgKiAgIFJlYXNvbjogXCJBcmUgeW91IHN1cmU/XCIgfiAvQXJlIHlvdSBzdXJlPy9cbiAgICpcbiAgICogLSBQcm9jZXNzIE91dHB1dDogXCJBcmUgeW91IHN1cmU/XFxuKHJlbWVtYmVyIHRoaXMgaXMgZGVzdHJ1Y3RpdmUpXCJcbiAgICogICBQcm9tcHQ6IC9BcmUgeW91IHN1cmU/L1xuICAgKiAgIE1hdGNoIChZZXMvTm8pOiBOb1xuICAgKiAgIFJlYXNvbjogXCIocmVtZW1iZXIgdGhpcyBpcyBkZXN0cnVjdGl2ZSlcIiDiiYQgL0FyZSB5b3Ugc3VyZT8vXG4gICAqXG4gICAqIC0gUHJvY2VzcyBPdXRwdXQ6IFwiQXJlIHlvdSBzdXJlP1xcbihyZW1lbWJlciB0aGlzIGlzIGRlc3RydWN0aXZlKVwiXG4gICAqICAgUHJvbXB0OiAvcmVtZW1iZXIgdGhpcyBpcyBkZXN0cnVjdGl2ZS9cbiAgICogICBNYXRjaCAoWWVzL05vKTogWWVzXG4gICAqICAgUmVhc29uOiBcIihyZW1lbWJlciB0aGlzIGlzIGRlc3RydWN0aXZlKVwiIH4gL3JlbWVtYmVyIHRoaXMgaXMgZGVzdHJ1Y3RpdmUvXG4gICAqXG4gICAqL1xuICByZWFkb25seSBwcm9tcHQ6IFJlZ0V4cDtcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB0byBwcm92aWRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmluZyB0byBzaWduYWwgdGhlIGVuZCBvZiBpbnB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgb3MuRU9MXG4gICAqL1xuICByZWFkb25seSBlbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hlbGxPcHRpb25zIGV4dGVuZHMgY2hpbGRfcHJvY2Vzcy5TcGF3bk9wdGlvbnMge1xuICAvKipcbiAgICogUHJvcGVydGllcyB0byBhZGQgdG8gJ2VudidcbiAgICovXG4gIHJlYWRvbmx5IG1vZEVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbiAgLyoqXG4gICAqIERvbid0IGZhaWwgd2hlbiBleGl0aW5nIHdpdGggYW4gZXJyb3JcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93RXJyRXhpdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2FwdHVyZSBzdGRlcnJcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FwdHVyZVN0ZGVycj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhc3Mgb3V0cHV0IGhlcmVcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM/OiBOb2RlSlMuV3JpdGFibGVTdHJlYW1bXTtcblxuICAvKipcbiAgICogT25seSByZXR1cm4gc3RkZXJyLiBGb3IgZXhhbXBsZSwgdGhpcyBpcyB1c2VkIHRvIHZhbGlkYXRlXG4gICAqIHRoYXQgd2hlbiBDST10cnVlLCBhbGwgbG9ncyBhcmUgc2VudCB0byBzdGRvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBvbmx5U3RkZXJyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG9uJ3QgbG9nIHRvIHN0ZG91dFxuICAgKlxuICAgKiBAZGVmYXVsdCBhbHdheXNcbiAgICovXG4gIHJlYWRvbmx5IHNob3c/OiAnYWx3YXlzJyB8ICduZXZlcicgfCAnZXJyb3InO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlIHVzZXIgaW50ZXJhY3Rpb24gdG8gcmVzcG9uZCB0byBzaGVsbCBwcm9tcHRzLlxuICAgKlxuICAgKiBPcmRlciBhbmQgY291bnQgc2hvdWxkIGNvcnJlc3BvbmQgdG8gdGhlIGV4cGVjdGVkIHByb21wdHMgaXNzdWVkIGJ5IHRoZSBzdWJwcm9jZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJhY3Q/OiBVc2VySW50ZXJhY3Rpb25bXTtcblxufVxuXG5leHBvcnQgY2xhc3MgU2hlbGxIZWxwZXIge1xuICBwdWJsaWMgc3RhdGljIGZyb21Db250ZXh0KGNvbnRleHQ6IFRlc3RDb250ZXh0ICYgVGVtcG9yYXJ5RGlyZWN0b3J5Q29udGV4dCkge1xuICAgIHJldHVybiBuZXcgU2hlbGxIZWxwZXIoY29udGV4dC5pbnRlZ1Rlc3REaXIsIGNvbnRleHQub3V0cHV0KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2N3ZDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX291dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtKSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRvY2tlckNvbmZpZ0RpcigpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMuX2N3ZCwgJy5kb2NrZXInKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaGVsbChjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogT21pdDxTaGVsbE9wdGlvbnMsICdjd2QnIHwgJ291dHB1dHMnPiA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gc2hlbGwoY29tbWFuZCwge1xuICAgICAgb3V0cHV0czogW3RoaXMuX291dHB1dF0sXG4gICAgICBjd2Q6IHRoaXMuX2N3ZCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgLy8gZ2l2ZSBldmVyeSBzaGVsbCBpdHMgb3duIGRvY2tlciBjb25maWcgZGlyZWN0b3J5XG4gICAgICAgIC8vIHNvIHRoYXQgcGFyYWxsZWwgcnVucyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLlxuICAgICAgICBET0NLRVJfQ09ORklHOiB0aGlzLmRvY2tlckNvbmZpZ0RpcixcbiAgICAgICAgLi4ub3B0aW9ucy5tb2RFbnYsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogcm0gLXJmIHJlaW1wbGVtZW50YXRpb24sIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIGFuIE5QTSBwYWNrYWdlIGZvciB0aGlzXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgZXZlcnl0aGluZyBnb3QgZGVsZXRlZCwgb3IgYGZhbHNlYCBpZiBzb21lIGZpbGVzIGNvdWxkXG4gKiBub3QgYmUgZGVsZXRlZCBkdWUgdG8gcGVybWlzc2lvbnMgaXNzdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmltcmFmKGZzUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIGNvbnN0IGlzRGlyID0gZnMubHN0YXRTeW5jKGZzUGF0aCkuaXNEaXJlY3RvcnkoKTtcblxuICAgIGlmIChpc0Rpcikge1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZzLnJlYWRkaXJTeW5jKGZzUGF0aCkpIHtcbiAgICAgICAgc3VjY2VzcyAmJj0gcmltcmFmKHBhdGguam9pbihmc1BhdGgsIGZpbGUpKTtcbiAgICAgIH1cbiAgICAgIGZzLnJtZGlyU3luYyhmc1BhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGZzUGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAvLyBDYW4gaGFwcGVuIGlmIHNvbWUgZmlsZXMgZ290IGdlbmVyYXRlZCBpbnNpZGUgYSBEb2NrZXIgY29udGFpbmVyIGFuZCBhcmUgbm93IGluYWR2ZXJ0ZW50bHkgb3duZWQgYnkgYHJvb3RgLlxuICAgIC8vIFdlIGNhbid0IGV2ZXIgY2xlYW4gdGhvc2UgdXAgYW55bW9yZSwgYnV0IHNpbmNlIGl0IG9ubHkgaGFwcGVucyBpbnNpZGUgR2l0SHViIEFjdGlvbnMgY29udGFpbmVycyB3ZSBhbHNvIGRvbid0IGNhcmUgdG9vIG11Y2guXG4gICAgaWYgKGUuY29kZSA9PT0gJ0VBQ0NFUycgfHwgZS5jb2RlID09PSAnRU5PVEVNUFRZJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFscmVhZHkgZ29uZVxuICAgIGlmIChlLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb1NoZWxsUGF0aCh4OiBzdHJpbmcpIHtcbiAgY29uc3QgcGFydHMgPSBwcm9jZXNzLmVudi5QQVRIPy5zcGxpdCgnOicpID8/IFtdO1xuXG4gIGlmICghcGFydHMuaW5jbHVkZXMoeCkpIHtcbiAgICBwYXJ0cy51bnNoaWZ0KHgpO1xuICB9XG5cbiAgcHJvY2Vzcy5lbnYuUEFUSCA9IHBhcnRzLmpvaW4oJzonKTtcbn1cblxuLyoqXG4gKiBBY2N1bXVsYXRlIHRleHQgc2luY2UgdGhlIGxhc3QgbGluZSBicmVhayAob3IgYmVnaW5uaW5nIG9mIHN0cmluZykgaXQgaGFzIHNlZW4gaW4gdGhlIGNodW5rcy5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAtIENodW5rczogWydvbmVcXG4nLCAndHdvXFxuJywgdGhyZWUnXVxuICogLSBMYXN0IExpbmU6ICd0aHJlZSdcbiAqXG4gKiAtIENodW5rczogWydvbmUnLCAndHdvJywgJ1xcbnRocmVlJ11cbiAqIC0gTGFzdCBMaW5lOiAndGhyZWUnXG4gKlxuICogLSBDaHVua3M6IFsnb25lJywgJ3R3byddXG4gKiAtIExhc3QgTGluZTogJ29uZXR3bydcbiAqXG4gKiAtIENodW5rczogWydvbmUnLCAndHdvJywgJ1xcbnRocmVlJywgJ2ZvdXInXVxuICogLSBMYXN0IExpbmU6ICd0aHJlZWZvdXInXG4gKi9cbmNsYXNzIExhc3RMaW5lIHtcbiAgcHJpdmF0ZSBsYXN0TGluZTogc3RyaW5nID0gJyc7XG5cbiAgcHVibGljIGFwcGVuZChjaHVuazogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbGluZXMgPSBjaHVuay5zcGxpdChvcy5FT0wpO1xuICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIGNodW5rIGRvZXNuJ3QgY29udGFpbiBhIG5ldyBsaW5lIHNvIGp1c3QgYXBwZW5kXG4gICAgICB0aGlzLmxhc3RMaW5lICs9IGxpbmVzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjaHVuayBjb250YWlucyBtdWx0aXBsZSBsaW5lcyBzbyBqdXN0IG92ZXJyaWRlIHdpdGggdGhlIGxhc3Qgb25lXG4gICAgICB0aGlzLmxhc3RMaW5lID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxhc3RMaW5lO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIHRoaXMubGFzdExpbmUgPSAnJztcbiAgfVxufVxuIl19
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzaGVsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhQSxzQkE4R0M7QUEySUQsd0JBNEJDO0FBRUQsd0NBUUM7QUEzU0QseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0IsdUNBQW9DO0FBR3BDOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsS0FBSyxDQUFDLE9BQWlCLEVBQUUsVUFBd0IsRUFBRTtJQUN2RSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDbkMsS0FBSyxNQUFNLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNuQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRiw0QkFBNEI7SUFDNUIsY0FBYyxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUM7SUFFdEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEcsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcs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SUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxRQUFRO0lBQ0osUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUV2QixNQUFNLENBQUMsS0FBYTtRQUN6QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sbUVBQW1FO1lBQ25FLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFTSxHQUFHO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgVGVzdENvbnRleHQgfSBmcm9tICcuL2ludGVnLXRlc3QnO1xuaW1wb3J0IHsgUHJvY2VzcyB9IGZyb20gJy4vcHJvY2Vzcyc7XG5pbXBvcnQgdHlwZSB7IFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQgfSBmcm9tICcuL3dpdGgtdGVtcG9yYXJ5LWRpcmVjdG9yeSc7XG5cbi8qKlxuICogQSBzaGVsbCBjb21tYW5kIHRoYXQgZG9lcyB3aGF0IHlvdSB3YW50XG4gKlxuICogSXMgcGxhdGZvcm0tYXdhcmUsIGhhbmRsZXMgZXJyb3JzIG5pY2VseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoZWxsKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBTaGVsbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChvcHRpb25zLm1vZEVudiAmJiBvcHRpb25zLmVudikge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlIGVpdGhlciBlbnYgb3IgbW9kRW52IGJ1dCBub3QgYm90aCcpO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0cyA9IG5ldyBTZXQob3B0aW9ucy5vdXRwdXRzKTtcbiAgY29uc3Qgd3JpdGVUb091dHB1dHMgPSAoeDogc3RyaW5nKSA9PiB7XG4gICAgZm9yIChjb25zdCBvdXRwdXRTdHJlYW0gb2Ygb3V0cHV0cykge1xuICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKHgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBBbHdheXMgb3V0cHV0IHRoZSBjb21tYW5kXG4gIHdyaXRlVG9PdXRwdXRzKGDwn5K7ICR7Y29tbWFuZC5qb2luKCcgJyl9XFxuYCk7XG4gIGNvbnN0IHNob3cgPSBvcHRpb25zLnNob3cgPz8gJ2Fsd2F5cyc7XG5cbiAgY29uc3QgZW52ID0gb3B0aW9ucy5lbnYgPz8gKG9wdGlvbnMubW9kRW52ID8geyAuLi5wcm9jZXNzLmVudiwgLi4ub3B0aW9ucy5tb2RFbnYgfSA6IHByb2Nlc3MuZW52KTtcbiAgY29uc3QgdHR5ID0gb3B0aW9ucy50dHkgfHwgKG9wdGlvbnMuaW50ZXJhY3QgJiYgb3B0aW9ucy5pbnRlcmFjdC5sZW5ndGggPiAwKTtcblxuICAvLyBDb2VyY2UgdG8gYGFueWAgYmVjYXVzZSBgU2hlbGxPcHRpb25zYCBjb250YWlucyBjdXN0b20gcHJvcGVydGllc1xuICAvLyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSB1bmRlcmx5aW5nIGludGVyZmFjZXMuIFdlIGNvdWxkIGVpdGhlciByZWJ1aWxkIGVhY2ggb3B0aW9ucyBtYXAsXG4gIC8vIG9yIGp1c3QgcGFzcyB0aHJvdWdoIGFuZCBsZXQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW5hdGlvbiBpZ25vcmUgd2hhdCBpdCBkb2Vzbid0IGtub3cgYWJvdXQuXG4gIC8vIFdlIGNob29zZSB0aGUgbGF6eSBvbmUuXG4gIGNvbnN0IHNwYXduT3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgZW52IH0gYXMgYW55O1xuXG4gIGNvbnN0IGNoaWxkID0gdHR5XG4gICAgPyBQcm9jZXNzLnNwYXduVFRZKGNvbW1hbmRbMF0sIGNvbW1hbmQuc2xpY2UoMSksIHNwYXduT3B0aW9ucylcbiAgICA6IFByb2Nlc3Muc3Bhd24oY29tbWFuZFswXSwgY29tbWFuZC5zbGljZSgxKSwgc3Bhd25PcHRpb25zKTtcblxuICAvLyBjb3B5IGJlY2F1c2Ugd2Ugd2lsbCBiZSBzaGlmdGluZyBpdFxuICBjb25zdCByZW1haW5pbmdJbnRlcmFjdGlvbnMgPSBbLi4uKG9wdGlvbnMuaW50ZXJhY3QgPz8gW10pXTtcblxuICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc3Rkb3V0ID0gbmV3IEFycmF5PEJ1ZmZlcj4oKTtcbiAgICBjb25zdCBzdGRlcnIgPSBuZXcgQXJyYXk8QnVmZmVyPigpO1xuXG4gICAgY29uc3QgbGFzdExpbmUgPSBuZXcgTGFzdExpbmUoKTtcblxuICAgIGNoaWxkLm9uU3Rkb3V0KGNodW5rID0+IHtcbiAgICAgIGlmIChzaG93ID09PSAnYWx3YXlzJykge1xuICAgICAgICB3cml0ZVRvT3V0cHV0cyhjaHVuay50b1N0cmluZygndXRmLTgnKSk7XG4gICAgICB9XG4gICAgICBzdGRvdXQucHVzaChjaHVuayk7XG4gICAgICBsYXN0TGluZS5hcHBlbmQoY2h1bmsudG9TdHJpbmcoJ3V0Zi04JykpO1xuXG4gICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IHJlbWFpbmluZ0ludGVyYWN0aW9uc1swXTtcbiAgICAgIGlmIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb24ucHJvbXB0LnRlc3QobGFzdExpbmUuZ2V0KCkpKSB7XG4gICAgICAgICAgLy8gc3VicHJvY2VzcyBleHBlY3RzIGEgdXNlciBpbnB1dCBub3cuXG4gICAgICAgICAgLy8gZmlyc3QsIHNoaWZ0IHRoZSBpbnRlcmFjdGlvbnMgdG8gZW5zdXJlIHRoZSBzYW1lIGludGVyYWN0aW9uIGlzIG5vdCByZXVzZWRcbiAgICAgICAgICByZW1haW5pbmdJbnRlcmFjdGlvbnMuc2hpZnQoKTtcblxuICAgICAgICAgIC8vIHRoZW4sIHJlc2V0IHRoZSBsYXN0IGxpbmUgdG8gcHJldmVudCByZXBlYXRlZCBtYXRjaGVzIGNhdXNlZCBieSB0dHkgZWNob2luZ1xuICAgICAgICAgIGxhc3RMaW5lLnJlc2V0KCk7XG5cbiAgICAgICAgICAvLyBub3cgd3JpdGUgdGhlIGlucHV0IHdpdGggYSBzbGlnaHQgZGVsYXkgdG8gZW5zdXJlXG4gICAgICAgICAgLy8gdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGFscmVhZHkgc3RhcnRlZCByZWFkaW5nLlxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2hpbGQud3JpdGVTdGRpbihpbnRlcmFjdGlvbi5pbnB1dCArIChpbnRlcmFjdGlvbi5lbmQgPz8gb3MuRU9MKSk7XG4gICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHR0eSAmJiBvcHRpb25zLmNhcHR1cmVTdGRlcnIgPT09IGZhbHNlKSB7XG4gICAgICAvLyBpbiBhIHR0eSBzdGRlcnIgZ29lcyB0byB0aGUgc2FtZSBmZCBhcyBzdGRvdXRcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRpc2FibGUgXFwnY2FwdHVyZVN0ZGVyclxcJyBpbiB0dHknKTtcbiAgICB9XG5cbiAgICBpZiAoIXR0eSkge1xuICAgICAgLy8gaW4gYSB0dHkgc3RkZXJyIGdvZXMgdG8gdGhlIHNhbWUgZmQgYXMgc3Rkb3V0LCBzbyBvblN0ZG91dFxuICAgICAgLy8gaXMgc3VmZmljaWVudC5cbiAgICAgIGNoaWxkLm9uU3RkZXJyKGNodW5rID0+IHtcbiAgICAgICAgaWYgKHNob3cgPT09ICdhbHdheXMnKSB7XG4gICAgICAgICAgd3JpdGVUb091dHB1dHMoY2h1bmsudG9TdHJpbmcoJ3V0Zi04JykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNhcHR1cmVTdGRlcnIgPz8gdHJ1ZSkge1xuICAgICAgICAgIHN0ZGVyci5wdXNoKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hpbGQub25FcnJvcihyZWplY3QpO1xuXG4gICAgY2hpbGQub25FeGl0KGNvZGUgPT4ge1xuICAgICAgY29uc3Qgc3RkZXJyT3V0cHV0ID0gQnVmZmVyLmNvbmNhdChzdGRlcnIpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3Qgc3Rkb3V0T3V0cHV0ID0gQnVmZmVyLmNvbmNhdChzdGRvdXQpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3Qgb3V0ID0gKG9wdGlvbnMub25seVN0ZGVyciA/IHN0ZGVyck91dHB1dCA6IHN0ZG91dE91dHB1dCArIHN0ZGVyck91dHB1dCkudHJpbSgpO1xuXG4gICAgICBjb25zdCBsb2dBbmRyZWplY3QgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGlmIChzaG93ID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgd3JpdGVUb091dHB1dHMoYCR7b3V0fVxcbmApO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9O1xuXG4gICAgICBpZiAocmVtYWluaW5nSW50ZXJhY3Rpb25zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHRoZSBleGl0IGNvZGUsIGlmIHdlIGRpZG4ndCBjb25zdW1lIGFsbCBleHBlY3RlZCBpbnRlcmFjdGlvbnMgd2UgcHJvYmFibHlcbiAgICAgICAgLy8gZGlkIHNvbWV0aGlpbmcgd3JvbmcuXG4gICAgICAgIGxvZ0FuZHJlamVjdChuZXcgRXJyb3IoYEV4cGVjdGVkIG1vcmUgdXNlciBpbnRlcmFjdGlvbnMgYnV0IHN1YnByb2Nlc3MgZXhpdGVkIHdpdGggJHtjb2RlfWApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29kZSA9PT0gMCB8fCBvcHRpb25zLmFsbG93RXJyRXhpdCkge1xuICAgICAgICByZXNvbHZlKG91dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dBbmRyZWplY3QobmV3IEVycm9yKGAnJHtjb21tYW5kLmpvaW4oJyAnKX0nIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHtjb2RlfS5gKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNpbmdsZSB1c2VyIGludGVyYWN0aW9uIHdpdGggdGhlIHNoZWxsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJbnRlcmFjdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgcHJvbXB0IHRvIGV4cGVjdC4gUmVnZXggbWF0Y2hlZCBhZ2FpbnN0IHRoZSBsYXN0IGxpbmUgaW5cbiAgICogdGhlIG91dHB1dCBiZWZvcmUgdGhlIHByb21wdCBpcyBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIE1vc3QgY29tbW9ubHkgdGhpcyB3b3VsZCBiZSBhIHNpbXBsZSBzdHJpbmcgdG8gbWF0Y2ggZm9yIGluY2x1c2lvbi5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqIC0gUHJvY2VzcyBPdXRwdXQ6IFwiSGV5IHRoZXJlISBBcmUgeW91IHN1cmU/XCJcbiAgICogICBQcm9tcHQ6IC9BcmUgeW91IHN1cmU/L1xuICAgKiAgIE1hdGNoIChZZXMvTm8pOiBZZXNcbiAgICogICBSZWFzb246IFwiSGV5IHRoZXJlISBBcmUgeW91IHN1cmU/XCIgfiAvQXJlIHlvdSBzdXJlPy9cbiAgICpcbiAgICogLSBQcm9jZXNzIE91dHB1dDogXCJIZXkgdGhlcmUhXFxuQXJlIHlvdSBzdXJlP1wiXG4gICAqICAgUHJvbXB0OiAvQXJlIHlvdSBzdXJlPy9cbiAgICogICBNYXRjaCAoWWVzL05vKTogWWVzXG4gICAqICAgUmVhc29uOiBcIkFyZSB5b3Ugc3VyZT9cIiB+IC9BcmUgeW91IHN1cmU/L1xuICAgKlxuICAgKiAtIFByb2Nlc3MgT3V0cHV0OiBcIkFyZSB5b3Ugc3VyZT9cXG4ocmVtZW1iZXIgdGhpcyBpcyBkZXN0cnVjdGl2ZSlcIlxuICAgKiAgIFByb21wdDogL0FyZSB5b3Ugc3VyZT8vXG4gICAqICAgTWF0Y2ggKFllcy9Obyk6IE5vXG4gICAqICAgUmVhc29uOiBcIihyZW1lbWJlciB0aGlzIGlzIGRlc3RydWN0aXZlKVwiIOKJhCAvQXJlIHlvdSBzdXJlPy9cbiAgICpcbiAgICogLSBQcm9jZXNzIE91dHB1dDogXCJBcmUgeW91IHN1cmU/XFxuKHJlbWVtYmVyIHRoaXMgaXMgZGVzdHJ1Y3RpdmUpXCJcbiAgICogICBQcm9tcHQ6IC9yZW1lbWJlciB0aGlzIGlzIGRlc3RydWN0aXZlL1xuICAgKiAgIE1hdGNoIChZZXMvTm8pOiBZZXNcbiAgICogICBSZWFzb246IFwiKHJlbWVtYmVyIHRoaXMgaXMgZGVzdHJ1Y3RpdmUpXCIgfiAvcmVtZW1iZXIgdGhpcyBpcyBkZXN0cnVjdGl2ZS9cbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IHByb21wdDogUmVnRXhwO1xuICAvKipcbiAgICogVGhlIGlucHV0IHRvIHByb3ZpZGUuXG4gICAqL1xuICByZWFkb25seSBpbnB1dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIHNpZ25hbCB0aGUgZW5kIG9mIGlucHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBvcy5FT0xcbiAgICovXG4gIHJlYWRvbmx5IGVuZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGVsbE9wdGlvbnMgZXh0ZW5kcyBjaGlsZF9wcm9jZXNzLlNwYXduT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHRvIGFkZCB0byAnZW52J1xuICAgKi9cbiAgcmVhZG9ubHkgbW9kRW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuICAvKipcbiAgICogRG9uJ3QgZmFpbCB3aGVuIGV4aXRpbmcgd2l0aCBhbiBlcnJvclxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dFcnJFeGl0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjYXB0dXJlIHN0ZGVyclxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjYXB0dXJlU3RkZXJyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGFzcyBvdXRwdXQgaGVyZVxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0cz86IE5vZGVKUy5Xcml0YWJsZVN0cmVhbVtdO1xuXG4gIC8qKlxuICAgKiBPbmx5IHJldHVybiBzdGRlcnIuIEZvciBleGFtcGxlLCB0aGlzIGlzIHVzZWQgdG8gdmFsaWRhdGVcbiAgICogdGhhdCB3aGVuIENJPXRydWUsIGFsbCBsb2dzIGFyZSBzZW50IHRvIHN0ZG91dC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG9ubHlTdGRlcnI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb24ndCBsb2cgdG8gc3Rkb3V0XG4gICAqXG4gICAqIEBkZWZhdWx0IGFsd2F5c1xuICAgKi9cbiAgcmVhZG9ubHkgc2hvdz86ICdhbHdheXMnIHwgJ25ldmVyJyB8ICdlcnJvcic7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgdXNlciBpbnRlcmFjdGlvbiB0byByZXNwb25kIHRvIHNoZWxsIHByb21wdHMuXG4gICAqXG4gICAqIE9yZGVyIGFuZCBjb3VudCBzaG91bGQgY29ycmVzcG9uZCB0byB0aGUgZXhwZWN0ZWQgcHJvbXB0cyBpc3N1ZWQgYnkgdGhlIHN1YnByb2Nlc3MuXG4gICAqL1xuICByZWFkb25seSBpbnRlcmFjdD86IFVzZXJJbnRlcmFjdGlvbltdO1xuXG4gIC8qKlxuICAgKiBGb3JjZSBhIFRUWSwgZXZlbiBpZiB0aGVyZSBhcmUgbm8gaW50ZXJhY3Rpb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB0dHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgU2hlbGxIZWxwZXIge1xuICBwdWJsaWMgc3RhdGljIGZyb21Db250ZXh0KGNvbnRleHQ6IFRlc3RDb250ZXh0ICYgVGVtcG9yYXJ5RGlyZWN0b3J5Q29udGV4dCkge1xuICAgIHJldHVybiBuZXcgU2hlbGxIZWxwZXIoY29udGV4dC5pbnRlZ1Rlc3REaXIsIGNvbnRleHQub3V0cHV0KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2N3ZDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX291dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtKSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRvY2tlckNvbmZpZ0RpcigpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMuX2N3ZCwgJy5kb2NrZXInKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaGVsbChjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogT21pdDxTaGVsbE9wdGlvbnMsICdjd2QnIHwgJ291dHB1dHMnPiA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gc2hlbGwoY29tbWFuZCwge1xuICAgICAgb3V0cHV0czogW3RoaXMuX291dHB1dF0sXG4gICAgICBjd2Q6IHRoaXMuX2N3ZCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgLy8gZ2l2ZSBldmVyeSBzaGVsbCBpdHMgb3duIGRvY2tlciBjb25maWcgZGlyZWN0b3J5XG4gICAgICAgIC8vIHNvIHRoYXQgcGFyYWxsZWwgcnVucyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLlxuICAgICAgICBET0NLRVJfQ09ORklHOiB0aGlzLmRvY2tlckNvbmZpZ0RpcixcbiAgICAgICAgLi4ub3B0aW9ucy5tb2RFbnYsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogcm0gLXJmIHJlaW1wbGVtZW50YXRpb24sIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIGFuIE5QTSBwYWNrYWdlIGZvciB0aGlzXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgZXZlcnl0aGluZyBnb3QgZGVsZXRlZCwgb3IgYGZhbHNlYCBpZiBzb21lIGZpbGVzIGNvdWxkXG4gKiBub3QgYmUgZGVsZXRlZCBkdWUgdG8gcGVybWlzc2lvbnMgaXNzdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmltcmFmKGZzUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIGNvbnN0IGlzRGlyID0gZnMubHN0YXRTeW5jKGZzUGF0aCkuaXNEaXJlY3RvcnkoKTtcblxuICAgIGlmIChpc0Rpcikge1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZzLnJlYWRkaXJTeW5jKGZzUGF0aCkpIHtcbiAgICAgICAgc3VjY2VzcyAmJj0gcmltcmFmKHBhdGguam9pbihmc1BhdGgsIGZpbGUpKTtcbiAgICAgIH1cbiAgICAgIGZzLnJtZGlyU3luYyhmc1BhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGZzUGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAvLyBDYW4gaGFwcGVuIGlmIHNvbWUgZmlsZXMgZ290IGdlbmVyYXRlZCBpbnNpZGUgYSBEb2NrZXIgY29udGFpbmVyIGFuZCBhcmUgbm93IGluYWR2ZXJ0ZW50bHkgb3duZWQgYnkgYHJvb3RgLlxuICAgIC8vIFdlIGNhbid0IGV2ZXIgY2xlYW4gdGhvc2UgdXAgYW55bW9yZSwgYnV0IHNpbmNlIGl0IG9ubHkgaGFwcGVucyBpbnNpZGUgR2l0SHViIEFjdGlvbnMgY29udGFpbmVycyB3ZSBhbHNvIGRvbid0IGNhcmUgdG9vIG11Y2guXG4gICAgaWYgKGUuY29kZSA9PT0gJ0VBQ0NFUycgfHwgZS5jb2RlID09PSAnRU5PVEVNUFRZJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFscmVhZHkgZ29uZVxuICAgIGlmIChlLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb1NoZWxsUGF0aCh4OiBzdHJpbmcpIHtcbiAgY29uc3QgcGFydHMgPSBwcm9jZXNzLmVudi5QQVRIPy5zcGxpdCgnOicpID8/IFtdO1xuXG4gIGlmICghcGFydHMuaW5jbHVkZXMoeCkpIHtcbiAgICBwYXJ0cy51bnNoaWZ0KHgpO1xuICB9XG5cbiAgcHJvY2Vzcy5lbnYuUEFUSCA9IHBhcnRzLmpvaW4oJzonKTtcbn1cblxuLyoqXG4gKiBBY2N1bXVsYXRlIHRleHQgc2luY2UgdGhlIGxhc3QgbGluZSBicmVhayAob3IgYmVnaW5uaW5nIG9mIHN0cmluZykgaXQgaGFzIHNlZW4gaW4gdGhlIGNodW5rcy5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAtIENodW5rczogWydvbmVcXG4nLCAndHdvXFxuJywgdGhyZWUnXVxuICogLSBMYXN0IExpbmU6ICd0aHJlZSdcbiAqXG4gKiAtIENodW5rczogWydvbmUnLCAndHdvJywgJ1xcbnRocmVlJ11cbiAqIC0gTGFzdCBMaW5lOiAndGhyZWUnXG4gKlxuICogLSBDaHVua3M6IFsnb25lJywgJ3R3byddXG4gKiAtIExhc3QgTGluZTogJ29uZXR3bydcbiAqXG4gKiAtIENodW5rczogWydvbmUnLCAndHdvJywgJ1xcbnRocmVlJywgJ2ZvdXInXVxuICogLSBMYXN0IExpbmU6ICd0aHJlZWZvdXInXG4gKi9cbmNsYXNzIExhc3RMaW5lIHtcbiAgcHJpdmF0ZSBsYXN0TGluZTogc3RyaW5nID0gJyc7XG5cbiAgcHVibGljIGFwcGVuZChjaHVuazogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbGluZXMgPSBjaHVuay5zcGxpdChvcy5FT0wpO1xuICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIGNodW5rIGRvZXNuJ3QgY29udGFpbiBhIG5ldyBsaW5lIHNvIGp1c3QgYXBwZW5kXG4gICAgICB0aGlzLmxhc3RMaW5lICs9IGxpbmVzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjaHVuayBjb250YWlucyBtdWx0aXBsZSBsaW5lcyBzbyBqdXN0IG92ZXJyaWRlIHdpdGggdGhlIGxhc3Qgb25lXG4gICAgICB0aGlzLmxhc3RMaW5lID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxhc3RMaW5lO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIHRoaXMubGFzdExpbmUgPSAnJztcbiAgfVxufVxuIl19
|
package/npm-shrinkwrap.json
CHANGED
package/package.json
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"organization": true
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@aws-cdk/toolkit-lib": "1.20.
|
|
42
|
+
"@aws-cdk/toolkit-lib": "1.20.1",
|
|
43
43
|
"@aws-cdk/yarn-cling": "0.0.0",
|
|
44
44
|
"@cdklabs/eslint-plugin": "^1.5.9",
|
|
45
45
|
"@stylistic/eslint-plugin": "^3",
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"publishConfig": {
|
|
117
117
|
"access": "public"
|
|
118
118
|
},
|
|
119
|
-
"version": "3.28.
|
|
119
|
+
"version": "3.28.1",
|
|
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,29 @@
|
|
|
1
|
+
var cdk = require('aws-cdk-lib');
|
|
2
|
+
var tty = require('tty');
|
|
3
|
+
|
|
4
|
+
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
5
|
+
if (!stackPrefix) {
|
|
6
|
+
throw new Error(`the STACK_NAME_PREFIX environment variable is required`);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
class MyStack extends cdk.Stack {
|
|
10
|
+
constructor(parent, id, props) {
|
|
11
|
+
super(parent, id, props);
|
|
12
|
+
new cdk.aws_sns.Topic(this, 'topic');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (!tty.isatty(1) || !tty.isatty(2)) {
|
|
17
|
+
throw new Error('stdout or stderr is not attached to a TTY');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const app = new cdk.App();
|
|
21
|
+
|
|
22
|
+
const env = {
|
|
23
|
+
account: process.env.CDK_DEFAULT_ACCOUNT,
|
|
24
|
+
region: process.env.CDK_DEFAULT_REGION
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
new MyStack(app, `${stackPrefix}-MyStack`, { env });
|
|
28
|
+
|
|
29
|
+
app.synth();
|
|
@@ -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 @@
|
|
|
1
|
+
export {};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/tests/cli-integ-tests/{ci-output → output}/cdk-ci-true-output-to-stdout.integtest.js
RENAMED
|
File without changes
|