@aws-cdk-testing/cli-integ 3.1.0 → 3.1.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.
Files changed (48) hide show
  1. package/NOTICE +1 -1
  2. package/lib/aws.d.ts +8 -2
  3. package/lib/aws.js +22 -8
  4. package/lib/aws.ts +28 -10
  5. package/lib/cli/run-suite.js +2 -1
  6. package/lib/cli/run-suite.ts +1 -1
  7. package/lib/cli/stage-distribution.js +1 -1
  8. package/lib/cli/stage-distribution.ts +0 -5
  9. package/lib/github.js +1 -2
  10. package/lib/github.ts +1 -1
  11. package/lib/integ-test.d.ts +1 -0
  12. package/lib/integ-test.js +3 -2
  13. package/lib/integ-test.ts +4 -1
  14. package/lib/package-sources/release-source.js +1 -1
  15. package/lib/package-sources/release-source.ts +2 -1
  16. package/lib/package-sources/repo-source.d.ts +4 -4
  17. package/lib/package-sources/repo-source.js +5 -5
  18. package/lib/package-sources/repo-source.ts +6 -5
  19. package/lib/proxy.d.ts +13 -0
  20. package/lib/proxy.js +49 -0
  21. package/lib/proxy.ts +64 -0
  22. package/lib/with-aws.d.ts +3 -0
  23. package/lib/with-aws.js +54 -6
  24. package/lib/with-aws.ts +52 -5
  25. package/lib/with-cdk-app.d.ts +21 -2
  26. package/lib/with-cdk-app.js +73 -73
  27. package/lib/with-cdk-app.ts +96 -95
  28. package/lib/with-cli-lib.d.ts +2 -2
  29. package/lib/with-cli-lib.js +12 -2
  30. package/lib/with-cli-lib.ts +18 -4
  31. package/lib/with-sam.js +2 -1
  32. package/lib/with-sam.ts +1 -0
  33. package/package.json +6 -5
  34. package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/Dockerfile +2 -0
  35. package/resources/integ.jest.config.js +4 -1
  36. package/tests/cli-integ-tests/bootstrapping.integtest.js +20 -1
  37. package/tests/cli-integ-tests/bootstrapping.integtest.ts +25 -1
  38. package/tests/cli-integ-tests/cli.integtest.js +70 -38
  39. package/tests/cli-integ-tests/cli.integtest.ts +79 -51
  40. package/tests/cli-integ-tests/proxy.integtest.d.ts +1 -0
  41. package/tests/cli-integ-tests/proxy.integtest.js +147 -0
  42. package/tests/cli-integ-tests/proxy.integtest.ts +167 -0
  43. package/tests/init-javascript/init-javascript.integtest.js +1 -1
  44. package/tests/init-javascript/init-javascript.integtest.ts +0 -1
  45. package/tests/init-typescript-app/init-typescript-app.integtest.js +2 -2
  46. package/tests/init-typescript-app/init-typescript-app.integtest.ts +1 -1
  47. package/tests/uberpackage/uberpackage.integtest.js +2 -2
  48. package/tests/uberpackage/uberpackage.integtest.ts +2 -2
package/lib/integ-test.ts CHANGED
@@ -19,9 +19,10 @@ let failed = false;
19
19
 
20
20
  export interface TestContext {
21
21
  readonly randomString: string;
22
+ readonly name: string;
22
23
  readonly output: NodeJS.WritableStream;
23
24
  log(s: string): void;
24
- };
25
+ }
25
26
 
26
27
  if (process.env.JEST_TEST_CONCURRENT === 'true') {
27
28
  process.stderr.write('ℹ️ JEST_TEST_CONCURRENT is true: tests will run concurrently and filters have no effect!\n0');
@@ -61,6 +62,7 @@ export function integTest(
61
62
  return await callback({
62
63
  output,
63
64
  randomString: randomString(),
65
+ name,
64
66
  log(s: string) {
65
67
  output.write(`${s}\n`);
66
68
  },
@@ -98,6 +100,7 @@ export function integTest(
98
100
  } else {
99
101
  // Use 'console.log' so the output is buffered by
100
102
  // jest and prints without a stack trace (if verbose: false).
103
+ // eslint-disable-next-line no-console
101
104
  console.log(output.buffer().toString());
102
105
  }
103
106
  throw e;
@@ -68,4 +68,4 @@ class ReleasePackageSource {
68
68
  }
69
69
  }
70
70
  exports.ReleasePackageSource = ReleasePackageSource;
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWxlYXNlLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUUvQixvQ0FBaUQ7QUFDakQsb0NBQXlEO0FBRXpELE1BQWEseUJBQXlCO0lBTXBDLFlBQTZCLE9BQWUsRUFBbUIsZ0JBQXlCO1FBQTNELFlBQU8sR0FBUCxPQUFPLENBQVE7UUFBbUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFTO1FBTC9FLFNBQUksR0FBRyxTQUFTLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxhQUFhLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUtuRCxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU87O1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWhELE1BQU0sSUFBQSxhQUFLLEVBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtZQUNsRixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDbEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLG1DQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUEsY0FBTSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBM0JELDhEQTJCQztBQUVELE1BQWEsb0JBQW9CO0lBSS9CO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBUSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLElBQUEsc0JBQWMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVNLDJCQUEyQjtJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLHdCQUF3QixDQUFDLFVBQWtCO1FBQ3RELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUEsNkJBQXFCLEVBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFXLENBQUM7SUFDOUMsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWtCLENBQUM7SUFDeEMsQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQzFELElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdEMseUJBQXlCO1lBQ3pCLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM3RCxDQUFDO2FBQU0sQ0FBQztZQUNOLHVCQUF1QjtZQUN2QixPQUFPLEdBQUcsZ0JBQWdCLFVBQVUsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBNUNELG9EQTRDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBJUGFja2FnZVNvdXJjZVNldHVwLCBJUGFja2FnZVNvdXJjZSB9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB7IGNvcHlEaXJlY3RvcnlDb250ZW50cyB9IGZyb20gJy4uL2ZpbGVzJztcbmltcG9ydCB7IHNoZWxsLCByaW1yYWYsIGFkZFRvU2hlbGxQYXRoIH0gZnJvbSAnLi4vc2hlbGwnO1xuXG5leHBvcnQgY2xhc3MgUmVsZWFzZVBhY2thZ2VTb3VyY2VTZXR1cCBpbXBsZW1lbnRzIElQYWNrYWdlU291cmNlU2V0dXAge1xuICByZWFkb25seSBuYW1lID0gJ3JlbGVhc2UnO1xuICByZWFkb25seSBkZXNjcmlwdGlvbiA9IGByZWxlYXNlIEAgJHt0aGlzLnZlcnNpb259YDtcblxuICBwcml2YXRlIHRlbXBEaXI/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgZnJhbWV3b3JrVmVyc2lvbj86IHN0cmluZykge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByZXBhcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy50ZW1wRGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAndG1wY2RrJykpO1xuICAgIGZzLm1rZGlyU3luYyh0aGlzLnRlbXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgYXdhaXQgc2hlbGwoWydub2RlJywgcmVxdWlyZS5yZXNvbHZlKCducG0nKSwgJ2luc3RhbGwnLCBgYXdzLWNka0Ake3RoaXMudmVyc2lvbn1gXSwge1xuICAgICAgY3dkOiB0aGlzLnRlbXBEaXIsXG4gICAgfSk7XG5cbiAgICBwcm9jZXNzLmVudi5DREtfQ0xJX1BBVEggPSB0aGlzLnRlbXBEaXI7XG4gICAgcHJvY2Vzcy5lbnYuVkVSU0lPTiA9IHRoaXMudmVyc2lvbjtcbiAgICBwcm9jZXNzLmVudi5GUkFNRVdPUktfVkVSU0lPTiA9IHRoaXMuZnJhbWV3b3JrVmVyc2lvbiA/PyB0aGlzLnZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy50ZW1wRGlyKSB7XG4gICAgICByaW1yYWYodGhpcy50ZW1wRGlyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbGVhc2VQYWNrYWdlU291cmNlIGltcGxlbWVudHMgSVBhY2thZ2VTb3VyY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaVBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jbGlQYXRoID0gcHJvY2Vzcy5lbnYuQ0RLX0NMSV9QQVRIITtcbiAgICB0aGlzLnZlcnNpb24gPSBwcm9jZXNzLmVudi5WRVJTSU9OITtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtYWtlQ2xpQXZhaWxhYmxlKCkge1xuICAgIGFkZFRvU2hlbGxQYXRoKHBhdGguam9pbih0aGlzLmNsaVBhdGgsICdub2RlX21vZHVsZXMnLCAnLmJpbicpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3NlcnRKc2lpUGFja2FnZXNBdmFpbGFibGUoKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZURvdG5ldFBhY2thZ2VzKGN1cnJlbnREaXI6IHN0cmluZykge1xuICAgIGlmIChwcm9jZXNzLmVudi5DV0RfRklMRVNfRElSKSB7XG4gICAgICBhd2FpdCBjb3B5RGlyZWN0b3J5Q29udGVudHMocHJvY2Vzcy5lbnYuQ1dEX0ZJTEVTX0RJUiwgY3VycmVudERpcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1ham9yVmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uLnNwbGl0KCcuJylbMF0gYXMgc3RyaW5nO1xuICB9XG5cbiAgcHVibGljIHJlcXVlc3RlZENsaVZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0ZWRGcmFtZXdvcmtWZXJzaW9uKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5GUkFNRVdPUktfVkVSU0lPTiE7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkQWxwaGFWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZnJhbWV3b3JrVmVyc2lvbiA9IHRoaXMucmVxdWVzdGVkRnJhbWV3b3JrVmVyc2lvbigpO1xuICAgIGlmIChmcmFtZXdvcmtWZXJzaW9uLmluY2x1ZGVzKCctcmMuJykpIHtcbiAgICAgIC8vIEZvciBhIHBpcGVsaW5lIHJlbGVhc2VcbiAgICAgIHJldHVybiBmcmFtZXdvcmtWZXJzaW9uLnJlcGxhY2UoLy1yY1xcLlxcZCskLywgJy1hbHBoYS45OTknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGEgc3RhYmxlIHJlbGVhc2VcbiAgICAgIHJldHVybiBgJHtmcmFtZXdvcmtWZXJzaW9ufS1hbHBoYS4wYDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWxlYXNlLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUUvQixvQ0FBaUQ7QUFDakQsb0NBQXlEO0FBRXpELE1BQWEseUJBQXlCO0lBTXBDLFlBQTZCLE9BQWUsRUFBbUIsZ0JBQXlCO1FBQTNELFlBQU8sR0FBUCxPQUFPLENBQVE7UUFBbUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFTO1FBTC9FLFNBQUksR0FBRyxTQUFTLENBQUM7UUFNeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU87O1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWhELE1BQU0sSUFBQSxhQUFLLEVBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtZQUNsRixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDbEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLG1DQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUEsY0FBTSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBNUJELDhEQTRCQztBQUVELE1BQWEsb0JBQW9CO0lBSS9CO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBUSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLElBQUEsc0JBQWMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVNLDJCQUEyQjtJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLHdCQUF3QixDQUFDLFVBQWtCO1FBQ3RELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUEsNkJBQXFCLEVBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFXLENBQUM7SUFDOUMsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWtCLENBQUM7SUFDeEMsQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQzFELElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdEMseUJBQXlCO1lBQ3pCLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM3RCxDQUFDO2FBQU0sQ0FBQztZQUNOLHVCQUF1QjtZQUN2QixPQUFPLEdBQUcsZ0JBQWdCLFVBQVUsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBNUNELG9EQTRDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBJUGFja2FnZVNvdXJjZVNldHVwLCBJUGFja2FnZVNvdXJjZSB9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB7IGNvcHlEaXJlY3RvcnlDb250ZW50cyB9IGZyb20gJy4uL2ZpbGVzJztcbmltcG9ydCB7IHNoZWxsLCByaW1yYWYsIGFkZFRvU2hlbGxQYXRoIH0gZnJvbSAnLi4vc2hlbGwnO1xuXG5leHBvcnQgY2xhc3MgUmVsZWFzZVBhY2thZ2VTb3VyY2VTZXR1cCBpbXBsZW1lbnRzIElQYWNrYWdlU291cmNlU2V0dXAge1xuICByZWFkb25seSBuYW1lID0gJ3JlbGVhc2UnO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIHByaXZhdGUgdGVtcERpcj86IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBmcmFtZXdvcmtWZXJzaW9uPzogc3RyaW5nKSB7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGByZWxlYXNlIEAgJHt0aGlzLnZlcnNpb259YDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmVwYXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudGVtcERpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ3RtcGNkaycpKTtcbiAgICBmcy5ta2RpclN5bmModGhpcy50ZW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGF3YWl0IHNoZWxsKFsnbm9kZScsIHJlcXVpcmUucmVzb2x2ZSgnbnBtJyksICdpbnN0YWxsJywgYGF3cy1jZGtAJHt0aGlzLnZlcnNpb259YF0sIHtcbiAgICAgIGN3ZDogdGhpcy50ZW1wRGlyLFxuICAgIH0pO1xuXG4gICAgcHJvY2Vzcy5lbnYuQ0RLX0NMSV9QQVRIID0gdGhpcy50ZW1wRGlyO1xuICAgIHByb2Nlc3MuZW52LlZFUlNJT04gPSB0aGlzLnZlcnNpb247XG4gICAgcHJvY2Vzcy5lbnYuRlJBTUVXT1JLX1ZFUlNJT04gPSB0aGlzLmZyYW1ld29ya1ZlcnNpb24gPz8gdGhpcy52ZXJzaW9uO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMudGVtcERpcikge1xuICAgICAgcmltcmFmKHRoaXMudGVtcERpcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWxlYXNlUGFja2FnZVNvdXJjZSBpbXBsZW1lbnRzIElQYWNrYWdlU291cmNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGlQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xpUGF0aCA9IHByb2Nlc3MuZW52LkNES19DTElfUEFUSCE7XG4gICAgdGhpcy52ZXJzaW9uID0gcHJvY2Vzcy5lbnYuVkVSU0lPTiE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbWFrZUNsaUF2YWlsYWJsZSgpIHtcbiAgICBhZGRUb1NoZWxsUGF0aChwYXRoLmpvaW4odGhpcy5jbGlQYXRoLCAnbm9kZV9tb2R1bGVzJywgJy5iaW4nKSk7XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0SnNpaVBhY2thZ2VzQXZhaWxhYmxlKCkge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemVEb3RuZXRQYWNrYWdlcyhjdXJyZW50RGlyOiBzdHJpbmcpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQ1dEX0ZJTEVTX0RJUikge1xuICAgICAgYXdhaXQgY29weURpcmVjdG9yeUNvbnRlbnRzKHByb2Nlc3MuZW52LkNXRF9GSUxFU19ESVIsIGN1cnJlbnREaXIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBtYWpvclZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvbi5zcGxpdCgnLicpWzBdIGFzIHN0cmluZztcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0ZWRDbGlWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkRnJhbWV3b3JrVmVyc2lvbigpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuRlJBTUVXT1JLX1ZFUlNJT04hO1xuICB9XG5cbiAgcHVibGljIHJlcXVlc3RlZEFscGhhVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZyYW1ld29ya1ZlcnNpb24gPSB0aGlzLnJlcXVlc3RlZEZyYW1ld29ya1ZlcnNpb24oKTtcbiAgICBpZiAoZnJhbWV3b3JrVmVyc2lvbi5pbmNsdWRlcygnLXJjLicpKSB7XG4gICAgICAvLyBGb3IgYSBwaXBlbGluZSByZWxlYXNlXG4gICAgICByZXR1cm4gZnJhbWV3b3JrVmVyc2lvbi5yZXBsYWNlKC8tcmNcXC5cXGQrJC8sICctYWxwaGEuOTk5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhIHN0YWJsZSByZWxlYXNlXG4gICAgICByZXR1cm4gYCR7ZnJhbWV3b3JrVmVyc2lvbn0tYWxwaGEuMGA7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -7,11 +7,12 @@ import { shell, rimraf, addToShellPath } from '../shell';
7
7
 
8
8
  export class ReleasePackageSourceSetup implements IPackageSourceSetup {
9
9
  readonly name = 'release';
10
- readonly description = `release @ ${this.version}`;
10
+ readonly description: string;
11
11
 
12
12
  private tempDir?: string;
13
13
 
14
14
  constructor(private readonly version: string, private readonly frameworkVersion?: string) {
15
+ this.description = `release @ ${this.version}`;
15
16
  }
16
17
 
17
18
  public async prepare(): Promise<void> {
@@ -19,10 +19,10 @@ export declare class RepoPackageSource implements IPackageSource {
19
19
  requestedAlphaVersion(): string;
20
20
  }
21
21
  /**
22
- * Return a { name -> directory } packages found in a Yarn monorepo
23
- *
24
- * Cached in YARN_MONOREPO_CACHE.
25
- */
22
+ * Return a { name -> directory } packages found in a Yarn monorepo
23
+ *
24
+ * Cached in YARN_MONOREPO_CACHE.
25
+ */
26
26
  export declare function findYarnPackages(root: string): Promise<Record<string, string>>;
27
27
  /**
28
28
  * Find the root directory of the repo from the current directory
@@ -64,10 +64,10 @@ async function writePackageMap(repoRoot) {
64
64
  */
65
65
  const YARN_MONOREPO_CACHE = {};
66
66
  /**
67
- * Return a { name -> directory } packages found in a Yarn monorepo
68
- *
69
- * Cached in YARN_MONOREPO_CACHE.
70
- */
67
+ * Return a { name -> directory } packages found in a Yarn monorepo
68
+ *
69
+ * Cached in YARN_MONOREPO_CACHE.
70
+ */
71
71
  async function findYarnPackages(root) {
72
72
  if (!(root in YARN_MONOREPO_CACHE)) {
73
73
  const outputDataString = JSON.parse(await (0, shell_1.shell)(['yarn', 'workspaces', '--json', 'info'], {
@@ -94,4 +94,4 @@ async function autoFindRoot() {
94
94
  }
95
95
  return path.dirname(found);
96
96
  }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwby1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXBvLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpRkEsNENBZ0JDO0FBS0Qsb0NBTUM7QUE1R0QseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFFL0Isb0NBQWtDO0FBQ2xDLG9DQUFpRDtBQUVqRCxNQUFhLHNCQUFzQjtJQUlqQyxZQUE2QixRQUFnQjtRQUFoQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBSHBDLFNBQUksR0FBRyxNQUFNLENBQUM7UUFDZCxnQkFBVyxHQUFHLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDO0lBR2hELENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEksTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLDBDQUEwQyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEUsSUFBQSxzQkFBYyxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO0lBQ3BCLENBQUM7Q0FDRjtBQW5CRCx3REFtQkM7QUFFRCxNQUFhLGlCQUFpQjtJQUc1QjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFtQixDQUFDO0lBQ2xELENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLElBQUEsc0JBQWMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTSwyQkFBMkI7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFTSxLQUFLLENBQUMsd0JBQXdCO0lBQ3JDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDakYsT0FBTyxXQUFXLENBQUMsWUFBWSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0seUJBQXlCO1FBQzlCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRjtBQWxDRCw4Q0FrQ0M7QUFFRCxLQUFLLFVBQVUsZUFBZSxDQUFDLFFBQWdCO0lBQzdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM1RCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sbUJBQW1CLEdBQXdCLEVBQUUsQ0FBQztBQUVwRDs7OztJQUlJO0FBQ0csS0FBSyxVQUFVLGdCQUFnQixDQUFDLElBQVk7SUFDakQsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLGdCQUFnQixHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFBLGFBQUssRUFBQyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ2hHLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLEdBQUcsRUFBRSxJQUFJO1lBQ1QsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxNQUFNLE1BQU0sR0FBeUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sR0FBRyxHQUEyQixFQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDbEMsQ0FBQztJQUNELE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFlBQVk7SUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBQSxjQUFNLEVBQUMsY0FBYyxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxzRUFBc0UsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgSVBhY2thZ2VTb3VyY2VTZXR1cCwgSVBhY2thZ2VTb3VyY2UgfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgeyBmaW5kVXAgfSBmcm9tICcuLi9maWxlcyc7XG5pbXBvcnQgeyBzaGVsbCwgYWRkVG9TaGVsbFBhdGggfSBmcm9tICcuLi9zaGVsbCc7XG5cbmV4cG9ydCBjbGFzcyBSZXBvUGFja2FnZVNvdXJjZVNldHVwIGltcGxlbWVudHMgSVBhY2thZ2VTb3VyY2VTZXR1cCB7XG4gIHJlYWRvbmx5IG5hbWUgPSAncmVwbyc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gYHJlcG8oJHt0aGlzLnJlcG9Sb290fSlgO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVwb1Jvb3Q6IHN0cmluZykge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByZXBhcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih0aGlzLnJlcG9Sb290LCAncGFja2FnZS5qc29uJykpIHx8ICFhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih0aGlzLnJlcG9Sb290LCAneWFybi5sb2NrJykpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5yZXBvUm9vdH06IGRvZXMgbm90IGxvb2sgbGlrZSB0aGUgcmVwb3NpdG9yeSByb290YCk7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuUkVQT19ST09UID0gdGhpcy5yZXBvUm9vdDtcbiAgICBwcm9jZXNzLmVudi5SRVBPX1BBQ0tBR0VfTUFQID0gYXdhaXQgd3JpdGVQYWNrYWdlTWFwKHRoaXMucmVwb1Jvb3QpO1xuICAgIGFkZFRvU2hlbGxQYXRoKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdyZXBvLXRvb2xzJykpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcG9QYWNrYWdlU291cmNlIGltcGxlbWVudHMgSVBhY2thZ2VTb3VyY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9Sb290OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZXBvUm9vdCA9IHByb2Nlc3MuZW52LlJFUE9fUk9PVCBhcyBzdHJpbmc7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbWFrZUNsaUF2YWlsYWJsZSgpIHtcbiAgICBhZGRUb1NoZWxsUGF0aChwYXRoLmpvaW4odGhpcy5yZXBvUm9vdCwgJ3BhY2thZ2VzJywgJ2F3cy1jZGsnLCAnYmluJykpO1xuICB9XG5cbiAgcHVibGljIGFzc2VydEpzaWlQYWNrYWdlc0F2YWlsYWJsZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2pzaWkgY2xpZW50IHBhY2thZ2VzIGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gdXNpbmcgUkVQTyBzb3VyY2UnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplRG90bmV0UGFja2FnZXMoKSB7XG4gIH1cblxuICBwdWJsaWMgbWFqb3JWZXJzaW9uKCkge1xuICAgIGNvbnN0IHJlbGVhc2VKc29uID0gZnMucmVhZEpzb25TeW5jKHBhdGgucmVzb2x2ZSh0aGlzLnJlcG9Sb290LCAncmVsZWFzZS5qc29uJykpO1xuICAgIHJldHVybiByZWxlYXNlSnNvbi5tYWpvclZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkQ2xpVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnKic7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkRnJhbWV3b3JrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnKic7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkQWxwaGFWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcqJztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVBhY2thZ2VNYXAocmVwb1Jvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHBhY2thZ2VzID0gYXdhaXQgZmluZFlhcm5QYWNrYWdlcyhyZXBvUm9vdCk7XG4gIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCAncGFja2FnZS1tYXAuanNvbicpO1xuICBhd2FpdCBmcy53cml0ZUpzb24oZmlsZU5hbWUsIHBhY2thZ2VzKTtcbiAgcmV0dXJuIGZpbGVOYW1lO1xufVxuXG4vKipcbiAqIENhY2hlIG1vbm9yZXBvIGRpc2NvdmVyeSByZXN1bHRzLCB3ZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbmNlIHBlciBydW5cbiAqL1xuY29uc3QgWUFSTl9NT05PUkVQT19DQUNIRTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4vKipcbiAgKiBSZXR1cm4gYSB7IG5hbWUgLT4gZGlyZWN0b3J5IH0gcGFja2FnZXMgZm91bmQgaW4gYSBZYXJuIG1vbm9yZXBvXG4gICpcbiAgKiBDYWNoZWQgaW4gWUFSTl9NT05PUkVQT19DQUNIRS5cbiAgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kWWFyblBhY2thZ2VzKHJvb3Q6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBpZiAoIShyb290IGluIFlBUk5fTU9OT1JFUE9fQ0FDSEUpKSB7XG4gICAgY29uc3Qgb3V0cHV0RGF0YVN0cmluZzogc3RyaW5nID0gSlNPTi5wYXJzZShhd2FpdCBzaGVsbChbJ3lhcm4nLCAnd29ya3NwYWNlcycsICctLWpzb24nLCAnaW5mbyddLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIGN3ZDogcm9vdCxcbiAgICAgIHNob3c6ICdlcnJvcicsXG4gICAgfSkpLmRhdGE7XG4gICAgY29uc3Qgb3V0cHV0OiBZYXJuV29ya3NwYWNlc091dHB1dCA9IEpTT04ucGFyc2Uob3V0cHV0RGF0YVN0cmluZyk7XG5cbiAgICBjb25zdCByZXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvdXRwdXQpKSB7XG4gICAgICByZXRba10gPSBwYXRoLmpvaW4ocm9vdCwgdi5sb2NhdGlvbik7XG4gICAgfVxuICAgIFlBUk5fTU9OT1JFUE9fQ0FDSEVbcm9vdF0gPSByZXQ7XG4gIH1cbiAgcmV0dXJuIFlBUk5fTU9OT1JFUE9fQ0FDSEVbcm9vdF07XG59XG5cbi8qKlxuICogRmluZCB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHJlcG8gZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1dG9GaW5kUm9vdCgpIHtcbiAgY29uc3QgZm91bmQgPSBmaW5kVXAoJ3JlbGVhc2UuanNvbicpO1xuICBpZiAoIWZvdW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHJlcG9zaXRvcnkgcm9vdDogJ3JlbGVhc2UuanNvbicgbm90IGZvdW5kIGZyb20gJHtwcm9jZXNzLmN3ZCgpfWApO1xuICB9XG4gIHJldHVybiBwYXRoLmRpcm5hbWUoZm91bmQpO1xufVxuXG50eXBlIFlhcm5Xb3Jrc3BhY2VzT3V0cHV0ID0gUmVjb3JkPHN0cmluZywgeyBsb2NhdGlvbjogc3RyaW5nIH0+O1xuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwby1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXBvLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrRkEsNENBZ0JDO0FBS0Qsb0NBTUM7QUE3R0QseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFFL0Isb0NBQWtDO0FBQ2xDLG9DQUFpRDtBQUVqRCxNQUFhLHNCQUFzQjtJQUlqQyxZQUE2QixRQUFnQjtRQUFoQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBSHBDLFNBQUksR0FBRyxNQUFNLENBQUM7UUFJckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQztJQUM5QyxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU87UUFDbEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xJLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSwwQ0FBMEMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLElBQUEsc0JBQWMsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztJQUNwQixDQUFDO0NBQ0Y7QUFwQkQsd0RBb0JDO0FBRUQsTUFBYSxpQkFBaUI7SUFHNUI7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBbUIsQ0FBQztJQUNsRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQjtRQUMzQixJQUFBLHNCQUFjLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU0sMkJBQTJCO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU0sS0FBSyxDQUFDLHdCQUF3QjtJQUNyQyxDQUFDO0lBRU0sWUFBWTtRQUNqQixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLE9BQU8sV0FBVyxDQUFDLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTSxxQkFBcUI7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUFsQ0QsOENBa0NDO0FBRUQsS0FBSyxVQUFVLGVBQWUsQ0FBQyxRQUFnQjtJQUM3QyxNQUFNLFFBQVEsR0FBRyxNQUFNLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDNUQsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2QyxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUF3QixFQUFFLENBQUM7QUFFcEQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxJQUFZO0lBQ2pELElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxnQkFBZ0IsR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBQSxhQUFLLEVBQUMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNoRyxhQUFhLEVBQUUsS0FBSztZQUNwQixHQUFHLEVBQUUsSUFBSTtZQUNULElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1QsTUFBTSxNQUFNLEdBQXlCLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVsRSxNQUFNLEdBQUcsR0FBMkIsRUFBRSxDQUFDO1FBQ3ZDLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxZQUFZO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUEsY0FBTSxFQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IElQYWNrYWdlU291cmNlU2V0dXAsIElQYWNrYWdlU291cmNlIH0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHsgZmluZFVwIH0gZnJvbSAnLi4vZmlsZXMnO1xuaW1wb3J0IHsgc2hlbGwsIGFkZFRvU2hlbGxQYXRoIH0gZnJvbSAnLi4vc2hlbGwnO1xuXG5leHBvcnQgY2xhc3MgUmVwb1BhY2thZ2VTb3VyY2VTZXR1cCBpbXBsZW1lbnRzIElQYWNrYWdlU291cmNlU2V0dXAge1xuICByZWFkb25seSBuYW1lID0gJ3JlcG8nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVwb1Jvb3Q6IHN0cmluZykge1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBgcmVwbygke3RoaXMucmVwb1Jvb3R9KWA7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHRoaXMucmVwb1Jvb3QsICdwYWNrYWdlLmpzb24nKSkgfHwgIWF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHRoaXMucmVwb1Jvb3QsICd5YXJuLmxvY2snKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLnJlcG9Sb290fTogZG9lcyBub3QgbG9vayBsaWtlIHRoZSByZXBvc2l0b3J5IHJvb3RgKTtcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVudi5SRVBPX1JPT1QgPSB0aGlzLnJlcG9Sb290O1xuICAgIHByb2Nlc3MuZW52LlJFUE9fUEFDS0FHRV9NQVAgPSBhd2FpdCB3cml0ZVBhY2thZ2VNYXAodGhpcy5yZXBvUm9vdCk7XG4gICAgYWRkVG9TaGVsbFBhdGgocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3JlcG8tdG9vbHMnKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVwb1BhY2thZ2VTb3VyY2UgaW1wbGVtZW50cyBJUGFja2FnZVNvdXJjZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwb1Jvb3Q6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJlcG9Sb290ID0gcHJvY2Vzcy5lbnYuUkVQT19ST09UIGFzIHN0cmluZztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtYWtlQ2xpQXZhaWxhYmxlKCkge1xuICAgIGFkZFRvU2hlbGxQYXRoKHBhdGguam9pbih0aGlzLnJlcG9Sb290LCAncGFja2FnZXMnLCAnYXdzLWNkaycsICdiaW4nKSk7XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0SnNpaVBhY2thZ2VzQXZhaWxhYmxlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignanNpaSBjbGllbnQgcGFja2FnZXMgYXJlIG5vdCBhdmFpbGFibGUgd2hlbiB1c2luZyBSRVBPIHNvdXJjZScpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemVEb3RuZXRQYWNrYWdlcygpIHtcbiAgfVxuXG4gIHB1YmxpYyBtYWpvclZlcnNpb24oKSB7XG4gICAgY29uc3QgcmVsZWFzZUpzb24gPSBmcy5yZWFkSnNvblN5bmMocGF0aC5yZXNvbHZlKHRoaXMucmVwb1Jvb3QsICdyZWxlYXNlLmpzb24nKSk7XG4gICAgcmV0dXJuIHJlbGVhc2VKc29uLm1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0ZWRDbGlWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcqJztcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0ZWRGcmFtZXdvcmtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcqJztcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0ZWRBbHBoYVZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJyonO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlUGFja2FnZU1hcChyZXBvUm9vdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcGFja2FnZXMgPSBhd2FpdCBmaW5kWWFyblBhY2thZ2VzKHJlcG9Sb290KTtcbiAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksICdwYWNrYWdlLW1hcC5qc29uJyk7XG4gIGF3YWl0IGZzLndyaXRlSnNvbihmaWxlTmFtZSwgcGFja2FnZXMpO1xuICByZXR1cm4gZmlsZU5hbWU7XG59XG5cbi8qKlxuICogQ2FjaGUgbW9ub3JlcG8gZGlzY292ZXJ5IHJlc3VsdHMsIHdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uY2UgcGVyIHJ1blxuICovXG5jb25zdCBZQVJOX01PTk9SRVBPX0NBQ0hFOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbi8qKlxuICogUmV0dXJuIGEgeyBuYW1lIC0+IGRpcmVjdG9yeSB9IHBhY2thZ2VzIGZvdW5kIGluIGEgWWFybiBtb25vcmVwb1xuICpcbiAqIENhY2hlZCBpbiBZQVJOX01PTk9SRVBPX0NBQ0hFLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFlhcm5QYWNrYWdlcyhyb290OiBzdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgaWYgKCEocm9vdCBpbiBZQVJOX01PTk9SRVBPX0NBQ0hFKSkge1xuICAgIGNvbnN0IG91dHB1dERhdGFTdHJpbmc6IHN0cmluZyA9IEpTT04ucGFyc2UoYXdhaXQgc2hlbGwoWyd5YXJuJywgJ3dvcmtzcGFjZXMnLCAnLS1qc29uJywgJ2luZm8nXSwge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBjd2Q6IHJvb3QsXG4gICAgICBzaG93OiAnZXJyb3InLFxuICAgIH0pKS5kYXRhO1xuICAgIGNvbnN0IG91dHB1dDogWWFybldvcmtzcGFjZXNPdXRwdXQgPSBKU09OLnBhcnNlKG91dHB1dERhdGFTdHJpbmcpO1xuXG4gICAgY29uc3QgcmV0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3V0cHV0KSkge1xuICAgICAgcmV0W2tdID0gcGF0aC5qb2luKHJvb3QsIHYubG9jYXRpb24pO1xuICAgIH1cbiAgICBZQVJOX01PTk9SRVBPX0NBQ0hFW3Jvb3RdID0gcmV0O1xuICB9XG4gIHJldHVybiBZQVJOX01PTk9SRVBPX0NBQ0hFW3Jvb3RdO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSByZXBvIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhdXRvRmluZFJvb3QoKSB7XG4gIGNvbnN0IGZvdW5kID0gZmluZFVwKCdyZWxlYXNlLmpzb24nKTtcbiAgaWYgKCFmb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSByZXBvc2l0b3J5IHJvb3Q6ICdyZWxlYXNlLmpzb24nIG5vdCBmb3VuZCBmcm9tICR7cHJvY2Vzcy5jd2QoKX1gKTtcbiAgfVxuICByZXR1cm4gcGF0aC5kaXJuYW1lKGZvdW5kKTtcbn1cblxudHlwZSBZYXJuV29ya3NwYWNlc091dHB1dCA9IFJlY29yZDxzdHJpbmcsIHsgbG9jYXRpb246IHN0cmluZyB9PjtcbiJdfQ==
@@ -7,9 +7,10 @@ import { shell, addToShellPath } from '../shell';
7
7
 
8
8
  export class RepoPackageSourceSetup implements IPackageSourceSetup {
9
9
  readonly name = 'repo';
10
- readonly description = `repo(${this.repoRoot})`;
10
+ readonly description: string;
11
11
 
12
12
  constructor(private readonly repoRoot: string) {
13
+ this.description = `repo(${this.repoRoot})`;
13
14
  }
14
15
 
15
16
  public async prepare(): Promise<void> {
@@ -75,10 +76,10 @@ async function writePackageMap(repoRoot: string): Promise<string> {
75
76
  const YARN_MONOREPO_CACHE: Record<string, any> = {};
76
77
 
77
78
  /**
78
- * Return a { name -> directory } packages found in a Yarn monorepo
79
- *
80
- * Cached in YARN_MONOREPO_CACHE.
81
- */
79
+ * Return a { name -> directory } packages found in a Yarn monorepo
80
+ *
81
+ * Cached in YARN_MONOREPO_CACHE.
82
+ */
82
83
  export async function findYarnPackages(root: string): Promise<Record<string, string>> {
83
84
  if (!(root in YARN_MONOREPO_CACHE)) {
84
85
  const outputDataString: string = JSON.parse(await shell(['yarn', 'workspaces', '--json', 'info'], {
package/lib/proxy.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import * as mockttp from 'mockttp';
2
+ import { CompletedRequest } from 'mockttp';
3
+ export declare function startProxyServer(certDirRoot?: string): Promise<ProxyServer>;
4
+ export interface ProxyServer {
5
+ readonly certPath: string;
6
+ readonly keyPath: string;
7
+ readonly server: mockttp.Mockttp;
8
+ readonly url: string;
9
+ readonly port: number;
10
+ getSeenRequests(): Promise<CompletedRequest[]>;
11
+ stop(): Promise<void>;
12
+ }
13
+ export declare function awsActionsFromRequests(requests: CompletedRequest[]): string[];
package/lib/proxy.js ADDED
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startProxyServer = startProxyServer;
4
+ exports.awsActionsFromRequests = awsActionsFromRequests;
5
+ const fs_1 = require("fs");
6
+ const querystring = require("node:querystring");
7
+ const os = require("os");
8
+ const path = require("path");
9
+ const mockttp = require("mockttp");
10
+ async function startProxyServer(certDirRoot) {
11
+ const certDir = await fs_1.promises.mkdtemp(path.join(certDirRoot !== null && certDirRoot !== void 0 ? certDirRoot : os.tmpdir(), 'cdk-'));
12
+ const certPath = path.join(certDir, 'cert.pem');
13
+ const keyPath = path.join(certDir, 'key.pem');
14
+ // Set up key and certificate
15
+ const { key, cert } = await mockttp.generateCACertificate();
16
+ await fs_1.promises.writeFile(keyPath, key);
17
+ await fs_1.promises.writeFile(certPath, cert);
18
+ const server = mockttp.getLocal({
19
+ https: { keyPath: keyPath, certPath: certPath },
20
+ });
21
+ // We don't need to modify any request, so the proxy
22
+ // passes through all requests to the target host.
23
+ const endpoint = await server
24
+ .forAnyRequest()
25
+ .thenPassThrough();
26
+ const port = 9000 + Math.floor(Math.random() * 10000);
27
+ // server.enableDebug();
28
+ await server.start(port);
29
+ return {
30
+ certPath,
31
+ keyPath,
32
+ server,
33
+ url: server.url,
34
+ port: server.port,
35
+ getSeenRequests: () => endpoint.getSeenRequests(),
36
+ async stop() {
37
+ await server.stop();
38
+ await fs_1.promises.rm(certDir, { recursive: true, force: true });
39
+ },
40
+ };
41
+ }
42
+ function awsActionsFromRequests(requests) {
43
+ return [...new Set(requests
44
+ .map(req => req.body.buffer.toString('utf-8'))
45
+ .map(body => querystring.decode(body))
46
+ .map(x => x.Action)
47
+ .filter(action => action != null))];
48
+ }
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcm94eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLDRDQXFDQztBQWFELHdEQU1DO0FBL0RELDJCQUFvQztBQUNwQyxnREFBZ0Q7QUFDaEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixtQ0FBbUM7QUFHNUIsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFdBQW9CO0lBQ3pELE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsYUFBWCxXQUFXLGNBQVgsV0FBVyxHQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTlDLDZCQUE2QjtJQUM3QixNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDNUQsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqQyxNQUFNLGFBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDOUIsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0tBQ2hELENBQUMsQ0FBQztJQUVILG9EQUFvRDtJQUNwRCxrREFBa0Q7SUFDbEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNO1NBQzFCLGFBQWEsRUFBRTtTQUNmLGVBQWUsRUFBRSxDQUFDO0lBRXJCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUV0RCx3QkFBd0I7SUFDeEIsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpCLE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztRQUNQLE1BQU07UUFDTixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7UUFDZixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7UUFDakIsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUU7UUFDakQsS0FBSyxDQUFDLElBQUk7WUFDUixNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixNQUFNLGFBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFhRCxTQUFnQixzQkFBc0IsQ0FBQyxRQUE0QjtJQUNqRSxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRO2FBQ3hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM3QyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFnQixDQUFDO2FBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAnbm9kZTpxdWVyeXN0cmluZyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgbW9ja3R0cCBmcm9tICdtb2NrdHRwJztcbmltcG9ydCB7IENvbXBsZXRlZFJlcXVlc3QgfSBmcm9tICdtb2NrdHRwJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0UHJveHlTZXJ2ZXIoY2VydERpclJvb3Q/OiBzdHJpbmcpOiBQcm9taXNlPFByb3h5U2VydmVyPiB7XG4gIGNvbnN0IGNlcnREaXIgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihjZXJ0RGlyUm9vdCA/PyBvcy50bXBkaXIoKSwgJ2Nkay0nKSk7XG4gIGNvbnN0IGNlcnRQYXRoID0gcGF0aC5qb2luKGNlcnREaXIsICdjZXJ0LnBlbScpO1xuICBjb25zdCBrZXlQYXRoID0gcGF0aC5qb2luKGNlcnREaXIsICdrZXkucGVtJyk7XG5cbiAgLy8gU2V0IHVwIGtleSBhbmQgY2VydGlmaWNhdGVcbiAgY29uc3QgeyBrZXksIGNlcnQgfSA9IGF3YWl0IG1vY2t0dHAuZ2VuZXJhdGVDQUNlcnRpZmljYXRlKCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShrZXlQYXRoLCBrZXkpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoY2VydFBhdGgsIGNlcnQpO1xuXG4gIGNvbnN0IHNlcnZlciA9IG1vY2t0dHAuZ2V0TG9jYWwoe1xuICAgIGh0dHBzOiB7IGtleVBhdGg6IGtleVBhdGgsIGNlcnRQYXRoOiBjZXJ0UGF0aCB9LFxuICB9KTtcblxuICAvLyBXZSBkb24ndCBuZWVkIHRvIG1vZGlmeSBhbnkgcmVxdWVzdCwgc28gdGhlIHByb3h5XG4gIC8vIHBhc3NlcyB0aHJvdWdoIGFsbCByZXF1ZXN0cyB0byB0aGUgdGFyZ2V0IGhvc3QuXG4gIGNvbnN0IGVuZHBvaW50ID0gYXdhaXQgc2VydmVyXG4gICAgLmZvckFueVJlcXVlc3QoKVxuICAgIC50aGVuUGFzc1Rocm91Z2goKTtcblxuICBjb25zdCBwb3J0ID0gOTAwMCArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwKTtcblxuICAvLyBzZXJ2ZXIuZW5hYmxlRGVidWcoKTtcbiAgYXdhaXQgc2VydmVyLnN0YXJ0KHBvcnQpO1xuXG4gIHJldHVybiB7XG4gICAgY2VydFBhdGgsXG4gICAga2V5UGF0aCxcbiAgICBzZXJ2ZXIsXG4gICAgdXJsOiBzZXJ2ZXIudXJsLFxuICAgIHBvcnQ6IHNlcnZlci5wb3J0LFxuICAgIGdldFNlZW5SZXF1ZXN0czogKCkgPT4gZW5kcG9pbnQuZ2V0U2VlblJlcXVlc3RzKCksXG4gICAgYXN5bmMgc3RvcCgpIHtcbiAgICAgIGF3YWl0IHNlcnZlci5zdG9wKCk7XG4gICAgICBhd2FpdCBmcy5ybShjZXJ0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eVNlcnZlciB7XG4gIHJlYWRvbmx5IGNlcnRQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtleVBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmVyOiBtb2NrdHRwLk1vY2t0dHA7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG5cbiAgZ2V0U2VlblJlcXVlc3RzKCk6IFByb21pc2U8Q29tcGxldGVkUmVxdWVzdFtdPjtcbiAgc3RvcCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXdzQWN0aW9uc0Zyb21SZXF1ZXN0cyhyZXF1ZXN0czogQ29tcGxldGVkUmVxdWVzdFtdKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLm5ldyBTZXQocmVxdWVzdHNcbiAgICAubWFwKHJlcSA9PiByZXEuYm9keS5idWZmZXIudG9TdHJpbmcoJ3V0Zi04JykpXG4gICAgLm1hcChib2R5ID0+IHF1ZXJ5c3RyaW5nLmRlY29kZShib2R5KSlcbiAgICAubWFwKHggPT4geC5BY3Rpb24gYXMgc3RyaW5nKVxuICAgIC5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbiAhPSBudWxsKSldO1xufVxuIl19
package/lib/proxy.ts ADDED
@@ -0,0 +1,64 @@
1
+ import { promises as fs } from 'fs';
2
+ import * as querystring from 'node:querystring';
3
+ import * as os from 'os';
4
+ import * as path from 'path';
5
+ import * as mockttp from 'mockttp';
6
+ import { CompletedRequest } from 'mockttp';
7
+
8
+ export async function startProxyServer(certDirRoot?: string): Promise<ProxyServer> {
9
+ const certDir = await fs.mkdtemp(path.join(certDirRoot ?? os.tmpdir(), 'cdk-'));
10
+ const certPath = path.join(certDir, 'cert.pem');
11
+ const keyPath = path.join(certDir, 'key.pem');
12
+
13
+ // Set up key and certificate
14
+ const { key, cert } = await mockttp.generateCACertificate();
15
+ await fs.writeFile(keyPath, key);
16
+ await fs.writeFile(certPath, cert);
17
+
18
+ const server = mockttp.getLocal({
19
+ https: { keyPath: keyPath, certPath: certPath },
20
+ });
21
+
22
+ // We don't need to modify any request, so the proxy
23
+ // passes through all requests to the target host.
24
+ const endpoint = await server
25
+ .forAnyRequest()
26
+ .thenPassThrough();
27
+
28
+ const port = 9000 + Math.floor(Math.random() * 10000);
29
+
30
+ // server.enableDebug();
31
+ await server.start(port);
32
+
33
+ return {
34
+ certPath,
35
+ keyPath,
36
+ server,
37
+ url: server.url,
38
+ port: server.port,
39
+ getSeenRequests: () => endpoint.getSeenRequests(),
40
+ async stop() {
41
+ await server.stop();
42
+ await fs.rm(certDir, { recursive: true, force: true });
43
+ },
44
+ };
45
+ }
46
+
47
+ export interface ProxyServer {
48
+ readonly certPath: string;
49
+ readonly keyPath: string;
50
+ readonly server: mockttp.Mockttp;
51
+ readonly url: string;
52
+ readonly port: number;
53
+
54
+ getSeenRequests(): Promise<CompletedRequest[]>;
55
+ stop(): Promise<void>;
56
+ }
57
+
58
+ export function awsActionsFromRequests(requests: CompletedRequest[]): string[] {
59
+ return [...new Set(requests
60
+ .map(req => req.body.buffer.toString('utf-8'))
61
+ .map(body => querystring.decode(body))
62
+ .map(x => x.Action as string)
63
+ .filter(action => action != null))];
64
+ }
package/lib/with-aws.d.ts CHANGED
@@ -2,6 +2,9 @@ import { AwsClients } from './aws';
2
2
  import { TestContext } from './integ-test';
3
3
  import { ResourcePool } from './resource-pool';
4
4
  import { DisableBootstrapContext } from './with-cdk-app';
5
+ export declare function atmosphereEnabled(): boolean;
6
+ export declare function atmosphereEndpoint(): string;
7
+ export declare function atmospherePool(): string;
5
8
  export type AwsContext = {
6
9
  readonly aws: AwsClients;
7
10
  };
package/lib/with-aws.js CHANGED
@@ -1,20 +1,68 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.atmosphereEnabled = atmosphereEnabled;
4
+ exports.atmosphereEndpoint = atmosphereEndpoint;
5
+ exports.atmospherePool = atmospherePool;
3
6
  exports.withAws = withAws;
4
7
  exports.regionPool = regionPool;
8
+ const cdk_atmosphere_client_1 = require("@cdklabs/cdk-atmosphere-client");
5
9
  const aws_1 = require("./aws");
6
10
  const resource_pool_1 = require("./resource-pool");
11
+ function atmosphereEnabled() {
12
+ const enabled = process.env.CDK_INTEG_ATMOSPHERE_ENABLED;
13
+ return enabled === 'true' || enabled === '1';
14
+ }
15
+ function atmosphereEndpoint() {
16
+ const value = process.env.CDK_INTEG_ATMOSPHERE_ENDPOINT;
17
+ if (!value) {
18
+ throw new Error('CDK_INTEG_ATMOSPHERE_ENDPOINT is not defined');
19
+ }
20
+ return value;
21
+ }
22
+ function atmospherePool() {
23
+ const value = process.env.CDK_INTEG_ATMOSPHERE_POOL;
24
+ if (!value) {
25
+ throw new Error('CDK_INTEG_ATMOSPHERE_POOL is not defined');
26
+ }
27
+ return value;
28
+ }
7
29
  /**
8
30
  * Higher order function to execute a block with an AWS client setup
9
31
  *
10
32
  * Allocate the next region from the REGION pool and dispose it afterwards.
11
33
  */
12
34
  function withAws(block, disableBootstrap = false) {
13
- return (context) => regionPool().using(async (region) => {
14
- const aws = await aws_1.AwsClients.forRegion(region, context.output);
15
- await sanityCheck(aws);
16
- return block({ ...context, disableBootstrap, aws });
17
- });
35
+ return async (context) => {
36
+ if (atmosphereEnabled()) {
37
+ const atmosphere = new cdk_atmosphere_client_1.AtmosphereClient(atmosphereEndpoint());
38
+ const allocation = await atmosphere.acquire({ pool: atmospherePool(), requester: context.name });
39
+ const aws = await aws_1.AwsClients.forIdentity(allocation.environment.region, {
40
+ accessKeyId: allocation.credentials.accessKeyId,
41
+ secretAccessKey: allocation.credentials.secretAccessKey,
42
+ sessionToken: allocation.credentials.sessionToken,
43
+ accountId: allocation.environment.account,
44
+ }, context.output);
45
+ await sanityCheck(aws);
46
+ let outcome = 'success';
47
+ try {
48
+ return await block({ ...context, disableBootstrap, aws });
49
+ }
50
+ catch (e) {
51
+ outcome = 'failure';
52
+ throw e;
53
+ }
54
+ finally {
55
+ await atmosphere.release(allocation.id, outcome);
56
+ }
57
+ }
58
+ else {
59
+ return regionPool().using(async (region) => {
60
+ const aws = await aws_1.AwsClients.forRegion(region, context.output);
61
+ await sanityCheck(aws);
62
+ return block({ ...context, disableBootstrap, aws });
63
+ });
64
+ }
65
+ };
18
66
  }
19
67
  let _regionPool;
20
68
  function regionPool() {
@@ -57,4 +105,4 @@ async function sanityCheck(aws) {
57
105
  }
58
106
  }
59
107
  let sanityChecked;
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3aXRoLWF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLDBCQVVDO0FBR0QsZ0NBY0M7QUF2Q0QsK0JBQW1DO0FBRW5DLG1EQUErQztBQUsvQzs7OztHQUlHO0FBQ0gsU0FBZ0IsT0FBTyxDQUNyQixLQUEyRSxFQUMzRSxtQkFBNEIsS0FBSztJQUVqQyxPQUFPLENBQUMsT0FBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3pELE1BQU0sR0FBRyxHQUFHLE1BQU0sZ0JBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRCxNQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV2QixPQUFPLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBSSxXQUFxQyxDQUFDO0FBQzFDLFNBQWdCLFVBQVU7O0lBQ3hCLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVc7UUFDckMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUMsTUFBQSxNQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxtQ0FBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixtQ0FBSSxXQUFXLENBQUMsQ0FBQztJQUU5RSxzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUUzQyxXQUFXLEdBQUcsNEJBQVksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsS0FBSyxVQUFVLFdBQVcsQ0FBQyxHQUFlO0lBQ3hDLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDakYsQ0FBQztBQUNILENBQUM7QUFDRCxJQUFJLGFBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3NDbGllbnRzIH0gZnJvbSAnLi9hd3MnO1xuaW1wb3J0IHsgVGVzdENvbnRleHQgfSBmcm9tICcuL2ludGVnLXRlc3QnO1xuaW1wb3J0IHsgUmVzb3VyY2VQb29sIH0gZnJvbSAnLi9yZXNvdXJjZS1wb29sJztcbmltcG9ydCB7IERpc2FibGVCb290c3RyYXBDb250ZXh0IH0gZnJvbSAnLi93aXRoLWNkay1hcHAnO1xuXG5leHBvcnQgdHlwZSBBd3NDb250ZXh0ID0geyByZWFkb25seSBhd3M6IEF3c0NsaWVudHMgfTtcblxuLyoqXG4gKiBIaWdoZXIgb3JkZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhIGJsb2NrIHdpdGggYW4gQVdTIGNsaWVudCBzZXR1cFxuICpcbiAqIEFsbG9jYXRlIHRoZSBuZXh0IHJlZ2lvbiBmcm9tIHRoZSBSRUdJT04gcG9vbCBhbmQgZGlzcG9zZSBpdCBhZnRlcndhcmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEF3czxBIGV4dGVuZHMgVGVzdENvbnRleHQ+KFxuICBibG9jazogKGNvbnRleHQ6IEEgJiBBd3NDb250ZXh0ICYgRGlzYWJsZUJvb3RzdHJhcENvbnRleHQpID0+IFByb21pc2U8dm9pZD4sXG4gIGRpc2FibGVCb290c3RyYXA6IGJvb2xlYW4gPSBmYWxzZSxcbik6IChjb250ZXh0OiBBKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIChjb250ZXh0OiBBKSA9PiByZWdpb25Qb29sKCkudXNpbmcoYXN5bmMgKHJlZ2lvbikgPT4ge1xuICAgIGNvbnN0IGF3cyA9IGF3YWl0IEF3c0NsaWVudHMuZm9yUmVnaW9uKHJlZ2lvbiwgY29udGV4dC5vdXRwdXQpO1xuICAgIGF3YWl0IHNhbml0eUNoZWNrKGF3cyk7XG5cbiAgICByZXR1cm4gYmxvY2soeyAuLi5jb250ZXh0LCBkaXNhYmxlQm9vdHN0cmFwLCBhd3MgfSk7XG4gIH0pO1xufVxuXG5sZXQgX3JlZ2lvblBvb2w6IHVuZGVmaW5lZCB8IFJlc291cmNlUG9vbDtcbmV4cG9ydCBmdW5jdGlvbiByZWdpb25Qb29sKCk6IFJlc291cmNlUG9vbCB7XG4gIGlmIChfcmVnaW9uUG9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIF9yZWdpb25Qb29sO1xuICB9XG5cbiAgY29uc3QgUkVHSU9OUyA9IHByb2Nlc3MuZW52LkFXU19SRUdJT05TXG4gICAgPyBwcm9jZXNzLmVudi5BV1NfUkVHSU9OUy5zcGxpdCgnLCcpXG4gICAgOiBbcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiA/PyBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT04gPz8gJ3VzLWVhc3QtMSddO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUubG9nKGBVc2luZyByZWdpb25zOiAke1JFR0lPTlN9XFxuYCk7XG5cbiAgX3JlZ2lvblBvb2wgPSBSZXNvdXJjZVBvb2wud2l0aFJlc291cmNlcygnYXdzX3JlZ2lvbnMnLCBSRUdJT05TKTtcbiAgcmV0dXJuIF9yZWdpb25Qb29sO1xufVxuXG4vKipcbiAqIFBlcmZvcm0gYSBvbmUtdGltZSBxdWljayBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgQVdTIGNsaWVudHMgaGF2ZSBwcm9wZXJseSBjb25maWd1cmVkIGNyZWRlbnRpYWxzXG4gKlxuICogSWYgd2UgZG9uJ3QgZG8gdGhpcywgY2FsbHMgYXJlIGdvaW5nIHRvIGZhaWwgYW5kIHRoZXknbGwgYmUgcmV0cmllZCBhbmQgZXZlcnl0aGluZyB3aWxsIHRha2VcbiAqIGZvcmV2ZXIgYmVmb3JlIHRoZSB1c2VyIG5vdGljZXMgYSBzaW1wbGUgbWlzY29uZmlndXJhdGlvbi5cbiAqXG4gKiBXZSBjYW4ndCBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBzaW5jZSBjcmVkZW50aWFscyBjb3VsZCBjb21lIGZyb21cbiAqIGFueXdoZXJlLCBzbyBkbyBzaW1wbGUgYWNjb3VudCByZXRyaWV2YWwuXG4gKlxuICogT25seSBkbyBpdCBvbmNlIHBlciBwcm9jZXNzLlxuICovXG5hc3luYyBmdW5jdGlvbiBzYW5pdHlDaGVjayhhd3M6IEF3c0NsaWVudHMpIHtcbiAgaWYgKHNhbml0eUNoZWNrZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhd3MuYWNjb3VudCgpO1xuICAgICAgc2FuaXR5Q2hlY2tlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBzYW5pdHlDaGVja2VkID0gZmFsc2U7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFXUyBjcmVkZW50aWFscyBwcm9iYWJseSBub3QgY29uZmlndXJlZCwgZ290IGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFzYW5pdHlDaGVja2VkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBV1MgY3JlZGVudGlhbHMgcHJvYmFibHkgbm90IGNvbmZpZ3VyZWQsIHNlZSBwcmV2aW91cyBlcnJvcicpO1xuICB9XG59XG5sZXQgc2FuaXR5Q2hlY2tlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3aXRoLWF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDhDQUdDO0FBRUQsZ0RBTUM7QUFFRCx3Q0FNQztBQVNELDBCQW1DQztBQUdELGdDQWNDO0FBdEZELDBFQUFrRTtBQUNsRSwrQkFBbUM7QUFFbkMsbURBQStDO0FBRy9DLFNBQWdCLGlCQUFpQjtJQUMvQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDO0lBQ3pELE9BQU8sT0FBTyxLQUFLLE1BQU0sSUFBSSxPQUFPLEtBQUssR0FBRyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFnQixrQkFBa0I7SUFDaEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQztJQUN4RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQWdCLGNBQWM7SUFDNUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQztJQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUlEOzs7O0dBSUc7QUFDSCxTQUFnQixPQUFPLENBQ3JCLEtBQTJFLEVBQzNFLG1CQUE0QixLQUFLO0lBRWpDLE9BQU8sS0FBSyxFQUFFLE9BQVUsRUFBRSxFQUFFO1FBQzFCLElBQUksaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksd0NBQWdCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQzlELE1BQU0sVUFB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RCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDakYsQ0FBQztBQUNILENBQUM7QUFDRCxJQUFJLGFBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdG1vc3BoZXJlQ2xpZW50IH0gZnJvbSAnQGNka2xhYnMvY2RrLWF0bW9zcGhlcmUtY2xpZW50JztcbmltcG9ydCB7IEF3c0NsaWVudHMgfSBmcm9tICcuL2F3cyc7XG5pbXBvcnQgeyBUZXN0Q29udGV4dCB9IGZyb20gJy4vaW50ZWctdGVzdCc7XG5pbXBvcnQgeyBSZXNvdXJjZVBvb2wgfSBmcm9tICcuL3Jlc291cmNlLXBvb2wnO1xuaW1wb3J0IHsgRGlzYWJsZUJvb3RzdHJhcENvbnRleHQgfSBmcm9tICcuL3dpdGgtY2RrLWFwcCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdG1vc3BoZXJlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgZW5hYmxlZCA9IHByb2Nlc3MuZW52LkNES19JTlRFR19BVE1PU1BIRVJFX0VOQUJMRUQ7XG4gIHJldHVybiBlbmFibGVkID09PSAndHJ1ZScgfHwgZW5hYmxlZCA9PT0gJzEnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXRtb3NwaGVyZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuQ0RLX0lOVEVHX0FUTU9TUEhFUkVfRU5EUE9JTlQ7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NES19JTlRFR19BVE1PU1BIRVJFX0VORFBPSU5UIGlzIG5vdCBkZWZpbmVkJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXRtb3NwaGVyZVBvb2woKSB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuQ0RLX0lOVEVHX0FUTU9TUEhFUkVfUE9PTDtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ0RLX0lOVEVHX0FUTU9TUEhFUkVfUE9PTCBpcyBub3QgZGVmaW5lZCcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IHR5cGUgQXdzQ29udGV4dCA9IHsgcmVhZG9ubHkgYXdzOiBBd3NDbGllbnRzIH07XG5cbi8qKlxuICogSGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYSBibG9jayB3aXRoIGFuIEFXUyBjbGllbnQgc2V0dXBcbiAqXG4gKiBBbGxvY2F0ZSB0aGUgbmV4dCByZWdpb24gZnJvbSB0aGUgUkVHSU9OIHBvb2wgYW5kIGRpc3Bvc2UgaXQgYWZ0ZXJ3YXJkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhBd3M8QSBleHRlbmRzIFRlc3RDb250ZXh0PihcbiAgYmxvY2s6IChjb250ZXh0OiBBICYgQXdzQ29udGV4dCAmIERpc2FibGVCb290c3RyYXBDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+LFxuICBkaXNhYmxlQm9vdHN0cmFwOiBib29sZWFuID0gZmFsc2UsXG4pOiAoY29udGV4dDogQSkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogQSkgPT4ge1xuICAgIGlmIChhdG1vc3BoZXJlRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBhdG1vc3BoZXJlID0gbmV3IEF0bW9zcGhlcmVDbGllbnQoYXRtb3NwaGVyZUVuZHBvaW50KCkpO1xuICAgICAgY29uc3QgYWxsb2NhdGlvbiA9IGF3YWl0IGF0bW9zcGhlcmUuYWNxdWlyZSh7IHBvb2w6IGF0bW9zcGhlcmVQb29sKCksIHJlcXVlc3RlcjogY29udGV4dC5uYW1lIH0pO1xuICAgICAgY29uc3QgYXdzID0gYXdhaXQgQXdzQ2xpZW50cy5mb3JJZGVudGl0eShhbGxvY2F0aW9uLmVudmlyb25tZW50LnJlZ2lvbiwge1xuICAgICAgICBhY2Nlc3NLZXlJZDogYWxsb2NhdGlvbi5jcmVkZW50aWFscy5hY2Nlc3NLZXlJZCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBhbGxvY2F0aW9uLmNyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleSxcbiAgICAgICAgc2Vzc2lvblRva2VuOiBhbGxvY2F0aW9uLmNyZWRlbnRpYWxzLnNlc3Npb25Ub2tlbixcbiAgICAgICAgYWNjb3VudElkOiBhbGxvY2F0aW9uLmVudmlyb25tZW50LmFjY291bnQsXG4gICAgICB9LCBjb250ZXh0Lm91dHB1dCk7XG5cbiAgICAgIGF3YWl0IHNhbml0eUNoZWNrKGF3cyk7XG5cbiAgICAgIGxldCBvdXRjb21lID0gJ3N1Y2Nlc3MnO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJsb2NrKHsgLi4uY29udGV4dCwgZGlzYWJsZUJvb3RzdHJhcCwgYXdzIH0pO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIG91dGNvbWUgPSAnZmFpbHVyZSc7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBhdG1vc3BoZXJlLnJlbGVhc2UoYWxsb2NhdGlvbi5pZCwgb3V0Y29tZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZWdpb25Qb29sKCkudXNpbmcoYXN5bmMgKHJlZ2lvbikgPT4ge1xuICAgICAgICBjb25zdCBhd3MgPSBhd2FpdCBBd3NDbGllbnRzLmZvclJlZ2lvbihyZWdpb24sIGNvbnRleHQub3V0cHV0KTtcbiAgICAgICAgYXdhaXQgc2FuaXR5Q2hlY2soYXdzKTtcblxuICAgICAgICByZXR1cm4gYmxvY2soeyAuLi5jb250ZXh0LCBkaXNhYmxlQm9vdHN0cmFwLCBhd3MgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmxldCBfcmVnaW9uUG9vbDogdW5kZWZpbmVkIHwgUmVzb3VyY2VQb29sO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lvblBvb2woKTogUmVzb3VyY2VQb29sIHtcbiAgaWYgKF9yZWdpb25Qb29sICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gX3JlZ2lvblBvb2w7XG4gIH1cblxuICBjb25zdCBSRUdJT05TID0gcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTlNcbiAgICA/IHByb2Nlc3MuZW52LkFXU19SRUdJT05TLnNwbGl0KCcsJylcbiAgICA6IFtwcm9jZXNzLmVudi5BV1NfUkVHSU9OID8/IHByb2Nlc3MuZW52LkFXU19ERUZBVUxUX1JFR0lPTiA/PyAndXMtZWFzdC0xJ107XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5sb2coYFVzaW5nIHJlZ2lvbnM6ICR7UkVHSU9OU31cXG5gKTtcblxuICBfcmVnaW9uUG9vbCA9IFJlc291cmNlUG9vbC53aXRoUmVzb3VyY2VzKCdhd3NfcmVnaW9ucycsIFJFR0lPTlMpO1xuICByZXR1cm4gX3JlZ2lvblBvb2w7XG59XG5cbi8qKlxuICogUGVyZm9ybSBhIG9uZS10aW1lIHF1aWNrIHNhbml0eSBjaGVjayB0aGF0IHRoZSBBV1MgY2xpZW50cyBoYXZlIHByb3Blcmx5IGNvbmZpZ3VyZWQgY3JlZGVudGlhbHNcbiAqXG4gKiBJZiB3ZSBkb24ndCBkbyB0aGlzLCBjYWxscyBhcmUgZ29pbmcgdG8gZmFpbCBhbmQgdGhleSdsbCBiZSByZXRyaWVkIGFuZCBldmVyeXRoaW5nIHdpbGwgdGFrZVxuICogZm9yZXZlciBiZWZvcmUgdGhlIHVzZXIgbm90aWNlcyBhIHNpbXBsZSBtaXNjb25maWd1cmF0aW9uLlxuICpcbiAqIFdlIGNhbid0IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNpbmNlIGNyZWRlbnRpYWxzIGNvdWxkIGNvbWUgZnJvbVxuICogYW55d2hlcmUsIHNvIGRvIHNpbXBsZSBhY2NvdW50IHJldHJpZXZhbC5cbiAqXG4gKiBPbmx5IGRvIGl0IG9uY2UgcGVyIHByb2Nlc3MuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhbml0eUNoZWNrKGF3czogQXdzQ2xpZW50cykge1xuICBpZiAoc2FuaXR5Q2hlY2tlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGF3cy5hY2NvdW50KCk7XG4gICAgICBzYW5pdHlDaGVja2VkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHNhbml0eUNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQVdTIGNyZWRlbnRpYWxzIHByb2JhYmx5IG5vdCBjb25maWd1cmVkLCBnb3QgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICBpZiAoIXNhbml0eUNoZWNrZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FXUyBjcmVkZW50aWFscyBwcm9iYWJseSBub3QgY29uZmlndXJlZCwgc2VlIHByZXZpb3VzIGVycm9yJyk7XG4gIH1cbn1cbmxldCBzYW5pdHlDaGVja2VkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuIl19
package/lib/with-aws.ts CHANGED
@@ -1,8 +1,30 @@
1
+ import { AtmosphereClient } from '@cdklabs/cdk-atmosphere-client';
1
2
  import { AwsClients } from './aws';
2
3
  import { TestContext } from './integ-test';
3
4
  import { ResourcePool } from './resource-pool';
4
5
  import { DisableBootstrapContext } from './with-cdk-app';
5
6
 
7
+ export function atmosphereEnabled(): boolean {
8
+ const enabled = process.env.CDK_INTEG_ATMOSPHERE_ENABLED;
9
+ return enabled === 'true' || enabled === '1';
10
+ }
11
+
12
+ export function atmosphereEndpoint(): string {
13
+ const value = process.env.CDK_INTEG_ATMOSPHERE_ENDPOINT;
14
+ if (!value) {
15
+ throw new Error('CDK_INTEG_ATMOSPHERE_ENDPOINT is not defined');
16
+ }
17
+ return value;
18
+ }
19
+
20
+ export function atmospherePool() {
21
+ const value = process.env.CDK_INTEG_ATMOSPHERE_POOL;
22
+ if (!value) {
23
+ throw new Error('CDK_INTEG_ATMOSPHERE_POOL is not defined');
24
+ }
25
+ return value;
26
+ }
27
+
6
28
  export type AwsContext = { readonly aws: AwsClients };
7
29
 
8
30
  /**
@@ -14,12 +36,37 @@ export function withAws<A extends TestContext>(
14
36
  block: (context: A & AwsContext & DisableBootstrapContext) => Promise<void>,
15
37
  disableBootstrap: boolean = false,
16
38
  ): (context: A) => Promise<void> {
17
- return (context: A) => regionPool().using(async (region) => {
18
- const aws = await AwsClients.forRegion(region, context.output);
19
- await sanityCheck(aws);
39
+ return async (context: A) => {
40
+ if (atmosphereEnabled()) {
41
+ const atmosphere = new AtmosphereClient(atmosphereEndpoint());
42
+ const allocation = await atmosphere.acquire({ pool: atmospherePool(), requester: context.name });
43
+ const aws = await AwsClients.forIdentity(allocation.environment.region, {
44
+ accessKeyId: allocation.credentials.accessKeyId,
45
+ secretAccessKey: allocation.credentials.secretAccessKey,
46
+ sessionToken: allocation.credentials.sessionToken,
47
+ accountId: allocation.environment.account,
48
+ }, context.output);
49
+
50
+ await sanityCheck(aws);
20
51
 
21
- return block({ ...context, disableBootstrap, aws });
22
- });
52
+ let outcome = 'success';
53
+ try {
54
+ return await block({ ...context, disableBootstrap, aws });
55
+ } catch (e: any) {
56
+ outcome = 'failure';
57
+ throw e;
58
+ } finally {
59
+ await atmosphere.release(allocation.id, outcome);
60
+ }
61
+ } else {
62
+ return regionPool().using(async (region) => {
63
+ const aws = await AwsClients.forRegion(region, context.output);
64
+ await sanityCheck(aws);
65
+
66
+ return block({ ...context, disableBootstrap, aws });
67
+ });
68
+ }
69
+ };
23
70
  }
24
71
 
25
72
  let _regionPool: undefined | ResourcePool;
@@ -18,8 +18,7 @@ export declare function withSpecificCdkApp(appName: string, block: (context: Tes
18
18
  * Like `withSpecificCdkApp`, but uses the default integration testing app with a million stacks in it
19
19
  */
20
20
  export declare function withCdkApp(block: (context: TestFixture) => Promise<void>): (context: TestContext & AwsContext & DisableBootstrapContext) => Promise<void>;
21
- export declare function withCdkMigrateApp<A extends TestContext>(language: string, block: (context: TestFixture) => Promise<void>): (context: A) => Promise<void>;
22
- export declare function withMonolithicCfnIncludeCdkApp<A extends TestContext>(block: (context: TestFixture) => Promise<void>): (context: A) => Promise<void>;
21
+ export declare function withCdkMigrateApp(language: string, block: (context: TestFixture) => Promise<void>): (context: TestContext & AwsContext & DisableBootstrapContext) => Promise<void>;
23
22
  /**
24
23
  * Default test fixture for most (all?) integ tests
25
24
  *
@@ -125,6 +124,8 @@ export interface CdkModernBootstrapCommandOptions extends CommonCdkBootstrapComm
125
124
  * @default undefined
126
125
  */
127
126
  readonly usePreviousParameters?: boolean;
127
+ readonly trust?: string[];
128
+ readonly untrust?: string[];
128
129
  }
129
130
  export interface CdkGarbageCollectionCommandOptions {
130
131
  /**
@@ -159,6 +160,7 @@ export declare class TestFixture extends ShellHelper {
159
160
  constructor(integTestDir: string, stackNamePrefix: string, output: NodeJS.WritableStream, aws: AwsClients, randomString: string);
160
161
  log(s: string): void;
161
162
  cdkDeploy(stackNames: string | string[], options?: CdkCliOptions, skipStackRename?: boolean): Promise<string>;
163
+ cdkDeployCommandLine(stackNames: string | string[], options?: CdkCliOptions, skipStackRename?: boolean): string[];
162
164
  cdkSynth(options?: CdkCliOptions): Promise<string>;
163
165
  cdkDestroy(stackNames: string | string[], options?: CdkCliOptions): Promise<string>;
164
166
  cdkBootstrapLegacy(options: CdkLegacyBootstrapCommandOptions): Promise<string>;
@@ -166,6 +168,16 @@ export declare class TestFixture extends ShellHelper {
166
168
  cdkGarbageCollect(options: CdkGarbageCollectionCommandOptions): Promise<string>;
167
169
  cdkMigrate(language: string, stackName: string, inputPath?: string, options?: CdkCliOptions): Promise<string>;
168
170
  cdk(args: string[], options?: CdkCliOptions): Promise<string>;
171
+ /**
172
+ * Return the environment variables with which to execute CDK
173
+ */
174
+ cdkShellEnv(): {
175
+ AWS_REGION: string;
176
+ AWS_DEFAULT_REGION: string;
177
+ STACK_NAME_PREFIX: string;
178
+ PACKAGE_LAYOUT_VERSION: string;
179
+ CI: string;
180
+ };
169
181
  template(stackName: string): any;
170
182
  bootstrapRepoName(): Promise<string>;
171
183
  get bootstrapStackName(): string;
@@ -188,6 +200,13 @@ export declare class TestFixture extends ShellHelper {
188
200
  private deleteableStacks;
189
201
  private sortBootstrapStacksToTheEnd;
190
202
  }
203
+ /**
204
+ * Make sure that the given environment is bootstrapped
205
+ *
206
+ * Since we go striping across regions, it's going to suck doing this
207
+ * by hand so let's just mass-automate it.
208
+ */
209
+ export declare function ensureBootstrapped(fixture: TestFixture): Promise<void>;
191
210
  /**
192
211
  * Install the given NPM packages, identified by their names and versions
193
212
  *