@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-cdk-testing/cli-integ",
3
- "version": "3.28.0",
3
+ "version": "3.28.1",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -39,7 +39,7 @@
39
39
  "organization": true
40
40
  },
41
41
  "devDependencies": {
42
- "@aws-cdk/toolkit-lib": "1.20.0",
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.0",
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,4 @@
1
+ {
2
+ "app": "node app.js",
3
+ "versionReporting": false
4
+ }
@@ -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=