aws-cdk 2.178.2 → 2.179.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/THIRD_PARTY_LICENSES +256 -234
  2. package/build-info.json +2 -2
  3. package/lib/api/cxapp/cloud-assembly.d.ts +18 -1
  4. package/lib/api/cxapp/cloud-assembly.js +38 -5
  5. package/lib/api/deployments/asset-publishing.d.ts +4 -27
  6. package/lib/api/deployments/asset-publishing.js +8 -34
  7. package/lib/api/deployments/cloudformation.d.ts +1 -0
  8. package/lib/api/deployments/cloudformation.js +9 -1
  9. package/lib/api/deployments/deployments.d.ts +0 -22
  10. package/lib/api/deployments/deployments.js +1 -29
  11. package/lib/api/garbage-collection/garbage-collector.js +3 -3
  12. package/lib/api/garbage-collection/progress-printer.js +8 -1
  13. package/lib/{import.d.ts → api/resource-import/importer.d.ts} +55 -12
  14. package/lib/api/resource-import/importer.js +332 -0
  15. package/lib/api/resource-import/index.d.ts +2 -0
  16. package/lib/api/resource-import/index.js +19 -0
  17. package/lib/{migrator.d.ts → api/resource-import/migrator.d.ts} +9 -6
  18. package/lib/api/resource-import/migrator.js +74 -0
  19. package/lib/cli/cdk-toolkit.d.ts +7 -0
  20. package/lib/cli/cdk-toolkit.js +20 -9
  21. package/lib/cli/cli.js +4 -3
  22. package/lib/cli/convert-to-user-input.js +1 -1
  23. package/lib/cli/messages.d.ts +30 -0
  24. package/lib/cli/messages.js +112 -0
  25. package/lib/cli/parse-command-line-arguments.js +1 -1
  26. package/lib/cli/user-configuration.js +2 -1
  27. package/lib/cli/user-input.js +1 -1
  28. package/lib/cli/util/yargs-helpers.js +2 -2
  29. package/lib/cli/version.d.ts +1 -1
  30. package/lib/cli/version.js +6 -3
  31. package/lib/commands/doctor.js +2 -2
  32. package/lib/index.js +126 -197
  33. package/lib/init-templates/.init-version.json +1 -1
  34. package/lib/init-templates/app/javascript/package.json +1 -1
  35. package/lib/init-templates/app/typescript/package.json +1 -1
  36. package/lib/init-templates/sample-app/javascript/package.json +1 -1
  37. package/lib/init-templates/sample-app/typescript/package.json +1 -1
  38. package/lib/init.d.ts +13 -1
  39. package/lib/init.js +37 -32
  40. package/lib/list-stacks.d.ts +1 -17
  41. package/lib/list-stacks.js +2 -37
  42. package/package.json +10 -10
  43. package/test/api/deployments/cloudformation-deployments.test.js +27 -3
  44. package/test/api/garbage-collection.test.js +23 -1
  45. package/test/api/resource-import/import.test.js +373 -0
  46. package/test/init.test.js +14 -1
  47. package/test/toolkit/cli-io-host.test.js +18 -10
  48. package/lib/import.js +0 -329
  49. package/lib/migrator.js +0 -67
  50. package/test/_helpers/prompts.d.ts +0 -11
  51. package/test/_helpers/prompts.js +0 -22
  52. package/test/import.test.js +0 -364
  53. /package/test/{import.test.d.ts → api/resource-import/import.test.d.ts} +0 -0
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ProgressPrinter = void 0;
4
4
  const chalk = require("chalk");
5
5
  const logging_1 = require("../../logging");
6
+ const error_1 = require("../../toolkit/error");
6
7
  class ProgressPrinter {
7
8
  constructor(totalAssets, interval) {
8
9
  this.totalAssets = totalAssets;
@@ -28,6 +29,12 @@ class ProgressPrinter {
28
29
  this.deletedAssetsSizeMb += sizeInBytes / 1048576;
29
30
  }
30
31
  start() {
32
+ // If there is already a running setInterval, throw an error.
33
+ // This is because if this.setInterval is reassigned to another setInterval,
34
+ // the original setInterval remains and can no longer be cleared.
35
+ if (this.setInterval) {
36
+ throw new error_1.ToolkitError('ProgressPrinter is already running. Stop it first using the stop() method before starting it again.');
37
+ }
31
38
  this.setInterval = setInterval(() => {
32
39
  if (!this.isPaused) {
33
40
  this.print();
@@ -59,4 +66,4 @@ class ProgressPrinter {
59
66
  }
60
67
  }
61
68
  exports.ProgressPrinter = ProgressPrinter;
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtcHJpbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb2dyZXNzLXByaW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBRS9CLDJDQUFxQztBQUVyQyxNQUFhLGVBQWU7SUFXMUIsWUFBWSxXQUFtQixFQUFFLFFBQWlCO1FBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxLQUFNLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEdBQVc7UUFDbkMsSUFBSSxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLE1BQWlCO1FBQ3hDLElBQUksQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGtCQUFrQixJQUFJLFdBQVcsR0FBRyxPQUFTLENBQUM7SUFDckQsQ0FBQztJQUVNLGtCQUFrQixDQUFDLE1BQWlCO1FBQ3pDLElBQUksQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLG1CQUFtQixJQUFJLFdBQVcsR0FBRyxPQUFTLENBQUM7SUFDdEQsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxJQUFJO1FBQ1QsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoQyxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUs7UUFDWCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLGtFQUFrRTtRQUNsRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hFLElBQUEsY0FBSSxFQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLE1BQU0sSUFBSSxDQUFDLGFBQWEsbUJBQW1CLElBQUksQ0FBQyxXQUFXLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLGFBQWEsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNqUSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUEsY0FBSSxFQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLE1BQU0sSUFBSSxDQUFDLGFBQWEsbUJBQW1CLElBQUksQ0FBQyxXQUFXLFlBQVksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLElBQUksQ0FBQyxhQUFhLFlBQVksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQy9PLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF2RUQsMENBdUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgR2NBc3NldCBhcyBHQ0Fzc2V0IH0gZnJvbSAnLi9nYXJiYWdlLWNvbGxlY3Rvcic7XG5pbXBvcnQgeyBpbmZvIH0gZnJvbSAnLi4vLi4vbG9nZ2luZyc7XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmVzc1ByaW50ZXIge1xuICBwcml2YXRlIHRvdGFsQXNzZXRzOiBudW1iZXI7XG4gIHByaXZhdGUgYXNzZXRzU2Nhbm5lZDogbnVtYmVyO1xuICBwcml2YXRlIHRhZ2dlZEFzc2V0OiBudW1iZXI7XG4gIHByaXZhdGUgdGFnZ2VkQXNzZXRzU2l6ZU1iOiBudW1iZXI7XG4gIHByaXZhdGUgZGVsZXRlZEFzc2V0czogbnVtYmVyO1xuICBwcml2YXRlIGRlbGV0ZWRBc3NldHNTaXplTWI6IG51bWJlcjtcbiAgcHJpdmF0ZSBpbnRlcnZhbDogbnVtYmVyO1xuICBwcml2YXRlIHNldEludGVydmFsPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgaXNQYXVzZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IodG90YWxBc3NldHM6IG51bWJlciwgaW50ZXJ2YWw/OiBudW1iZXIpIHtcbiAgICB0aGlzLnRvdGFsQXNzZXRzID0gdG90YWxBc3NldHM7XG4gICAgdGhpcy5hc3NldHNTY2FubmVkID0gMDtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0ID0gMDtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0c1NpemVNYiA9IDA7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzID0gMDtcbiAgICB0aGlzLmRlbGV0ZWRBc3NldHNTaXplTWIgPSAwO1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBpbnRlcnZhbCA/PyAxMF8wMDA7XG4gICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlcG9ydFNjYW5uZWRBc3NldChhbXQ6IG51bWJlcikge1xuICAgIHRoaXMuYXNzZXRzU2Nhbm5lZCArPSBhbXQ7XG4gIH1cblxuICBwdWJsaWMgcmVwb3J0VGFnZ2VkQXNzZXQoYXNzZXRzOiBHQ0Fzc2V0W10pIHtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0ICs9IGFzc2V0cy5sZW5ndGg7XG4gICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBhc3NldHMucmVkdWNlKCh0b3RhbCwgYXNzZXQpID0+IHRvdGFsICsgYXNzZXQuc2l6ZSwgMCk7XG4gICAgdGhpcy50YWdnZWRBc3NldHNTaXplTWIgKz0gc2l6ZUluQnl0ZXMgLyAxXzA0OF81NzY7XG4gIH1cblxuICBwdWJsaWMgcmVwb3J0RGVsZXRlZEFzc2V0KGFzc2V0czogR0NBc3NldFtdKSB7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzICs9IGFzc2V0cy5sZW5ndGg7XG4gICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBhc3NldHMucmVkdWNlKCh0b3RhbCwgYXNzZXQpID0+IHRvdGFsICsgYXNzZXQuc2l6ZSwgMCk7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzU2l6ZU1iICs9IHNpemVJbkJ5dGVzIC8gMV8wNDhfNTc2O1xuICB9XG5cbiAgcHVibGljIHN0YXJ0KCkge1xuICAgIHRoaXMuc2V0SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNQYXVzZWQpIHtcbiAgICAgICAgdGhpcy5wcmludCgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuaW50ZXJ2YWwpO1xuICB9XG5cbiAgcHVibGljIHBhdXNlKCkge1xuICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHJlc3VtZSgpIHtcbiAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuc2V0SW50ZXJ2YWwpO1xuICAgIC8vIHByaW50IG9uZSBsYXN0IHRpbWUgaWYgbm90IHBhdXNlZFxuICAgIGlmICghdGhpcy5pc1BhdXNlZCkge1xuICAgICAgdGhpcy5wcmludCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJpbnQoKSB7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9ICgodGhpcy5hc3NldHNTY2FubmVkIC8gdGhpcy50b3RhbEFzc2V0cykgKiAxMDApLnRvRml4ZWQoMik7XG4gICAgLy8gcHJpbnQgaW4gTWlCIHVudGlsIHdlIGhpdCBhdCBsZWFzdCAxIEdpQiBvZiBkYXRhIHRhZ2dlZC9kZWxldGVkXG4gICAgaWYgKE1hdGgubWF4KHRoaXMudGFnZ2VkQXNzZXRzU2l6ZU1iLCB0aGlzLmRlbGV0ZWRBc3NldHNTaXplTWIpID49IDEwMDApIHtcbiAgICAgIGluZm8oY2hhbGsuZ3JlZW4oYFske3BlcmNlbnRhZ2V9JV0gJHt0aGlzLmFzc2V0c1NjYW5uZWR9IGZpbGVzIHNjYW5uZWQ6ICR7dGhpcy50YWdnZWRBc3NldH0gYXNzZXRzICgkeyh0aGlzLnRhZ2dlZEFzc2V0c1NpemVNYiAvIDEwMDApLnRvRml4ZWQoMil9IEdpQikgdGFnZ2VkLCAke3RoaXMuZGVsZXRlZEFzc2V0c30gYXNzZXRzICgkeyh0aGlzLmRlbGV0ZWRBc3NldHNTaXplTWIgLyAxMDAwKS50b0ZpeGVkKDIpfSBHaUIpIGRlbGV0ZWQuYCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvKGNoYWxrLmdyZWVuKGBbJHtwZXJjZW50YWdlfSVdICR7dGhpcy5hc3NldHNTY2FubmVkfSBmaWxlcyBzY2FubmVkOiAke3RoaXMudGFnZ2VkQXNzZXR9IGFzc2V0cyAoJHt0aGlzLnRhZ2dlZEFzc2V0c1NpemVNYi50b0ZpeGVkKDIpfSBNaUIpIHRhZ2dlZCwgJHt0aGlzLmRlbGV0ZWRBc3NldHN9IGFzc2V0cyAoJHt0aGlzLmRlbGV0ZWRBc3NldHNTaXplTWIudG9GaXhlZCgyKX0gTWlCKSBkZWxldGVkLmApKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtcHJpbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb2dyZXNzLXByaW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBRS9CLDJDQUFxQztBQUNyQywrQ0FBbUQ7QUFFbkQsTUFBYSxlQUFlO0lBVzFCLFlBQVksV0FBbUIsRUFBRSxRQUFpQjtRQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksS0FBTSxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxHQUFXO1FBQ25DLElBQUksQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxNQUFpQjtRQUN4QyxJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxXQUFXLEdBQUcsT0FBUyxDQUFDO0lBQ3JELENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxNQUFpQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxXQUFXLEdBQUcsT0FBUyxDQUFDO0lBQ3RELENBQUM7SUFFTSxLQUFLO1FBQ1YsNkRBQTZEO1FBQzdELDRFQUE0RTtRQUM1RSxpRUFBaUU7UUFDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLG9CQUFZLENBQUMscUdBQXFHLENBQUMsQ0FBQztRQUNoSSxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRU0sSUFBSTtRQUNULGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEMsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLO1FBQ1gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxrRUFBa0U7UUFDbEUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4RSxJQUFBLGNBQUksRUFBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxNQUFNLElBQUksQ0FBQyxhQUFhLG1CQUFtQixJQUFJLENBQUMsV0FBVyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLElBQUksQ0FBQyxhQUFhLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDalEsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFBLGNBQUksRUFBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxNQUFNLElBQUksQ0FBQyxhQUFhLG1CQUFtQixJQUFJLENBQUMsV0FBVyxZQUFZLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLENBQUMsYUFBYSxZQUFZLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUMvTyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBOUVELDBDQThFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IEdjQXNzZXQgYXMgR0NBc3NldCB9IGZyb20gJy4vZ2FyYmFnZS1jb2xsZWN0b3InO1xuaW1wb3J0IHsgaW5mbyB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC9lcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmVzc1ByaW50ZXIge1xuICBwcml2YXRlIHRvdGFsQXNzZXRzOiBudW1iZXI7XG4gIHByaXZhdGUgYXNzZXRzU2Nhbm5lZDogbnVtYmVyO1xuICBwcml2YXRlIHRhZ2dlZEFzc2V0OiBudW1iZXI7XG4gIHByaXZhdGUgdGFnZ2VkQXNzZXRzU2l6ZU1iOiBudW1iZXI7XG4gIHByaXZhdGUgZGVsZXRlZEFzc2V0czogbnVtYmVyO1xuICBwcml2YXRlIGRlbGV0ZWRBc3NldHNTaXplTWI6IG51bWJlcjtcbiAgcHJpdmF0ZSBpbnRlcnZhbDogbnVtYmVyO1xuICBwcml2YXRlIHNldEludGVydmFsPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgaXNQYXVzZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IodG90YWxBc3NldHM6IG51bWJlciwgaW50ZXJ2YWw/OiBudW1iZXIpIHtcbiAgICB0aGlzLnRvdGFsQXNzZXRzID0gdG90YWxBc3NldHM7XG4gICAgdGhpcy5hc3NldHNTY2FubmVkID0gMDtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0ID0gMDtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0c1NpemVNYiA9IDA7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzID0gMDtcbiAgICB0aGlzLmRlbGV0ZWRBc3NldHNTaXplTWIgPSAwO1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBpbnRlcnZhbCA/PyAxMF8wMDA7XG4gICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlcG9ydFNjYW5uZWRBc3NldChhbXQ6IG51bWJlcikge1xuICAgIHRoaXMuYXNzZXRzU2Nhbm5lZCArPSBhbXQ7XG4gIH1cblxuICBwdWJsaWMgcmVwb3J0VGFnZ2VkQXNzZXQoYXNzZXRzOiBHQ0Fzc2V0W10pIHtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0ICs9IGFzc2V0cy5sZW5ndGg7XG4gICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBhc3NldHMucmVkdWNlKCh0b3RhbCwgYXNzZXQpID0+IHRvdGFsICsgYXNzZXQuc2l6ZSwgMCk7XG4gICAgdGhpcy50YWdnZWRBc3NldHNTaXplTWIgKz0gc2l6ZUluQnl0ZXMgLyAxXzA0OF81NzY7XG4gIH1cblxuICBwdWJsaWMgcmVwb3J0RGVsZXRlZEFzc2V0KGFzc2V0czogR0NBc3NldFtdKSB7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzICs9IGFzc2V0cy5sZW5ndGg7XG4gICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBhc3NldHMucmVkdWNlKCh0b3RhbCwgYXNzZXQpID0+IHRvdGFsICsgYXNzZXQuc2l6ZSwgMCk7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzU2l6ZU1iICs9IHNpemVJbkJ5dGVzIC8gMV8wNDhfNTc2O1xuICB9XG5cbiAgcHVibGljIHN0YXJ0KCkge1xuICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBydW5uaW5nIHNldEludGVydmFsLCB0aHJvdyBhbiBlcnJvci5cbiAgICAvLyBUaGlzIGlzIGJlY2F1c2UgaWYgdGhpcy5zZXRJbnRlcnZhbCBpcyByZWFzc2lnbmVkIHRvIGFub3RoZXIgc2V0SW50ZXJ2YWwsXG4gICAgLy8gdGhlIG9yaWdpbmFsIHNldEludGVydmFsIHJlbWFpbnMgYW5kIGNhbiBubyBsb25nZXIgYmUgY2xlYXJlZC5cbiAgICBpZiAodGhpcy5zZXRJbnRlcnZhbCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignUHJvZ3Jlc3NQcmludGVyIGlzIGFscmVhZHkgcnVubmluZy4gU3RvcCBpdCBmaXJzdCB1c2luZyB0aGUgc3RvcCgpIG1ldGhvZCBiZWZvcmUgc3RhcnRpbmcgaXQgYWdhaW4uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc1BhdXNlZCkge1xuICAgICAgICB0aGlzLnByaW50KCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5pbnRlcnZhbCk7XG4gIH1cblxuICBwdWJsaWMgcGF1c2UoKSB7XG4gICAgdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgcmVzdW1lKCkge1xuICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5zZXRJbnRlcnZhbCk7XG4gICAgLy8gcHJpbnQgb25lIGxhc3QgdGltZSBpZiBub3QgcGF1c2VkXG4gICAgaWYgKCF0aGlzLmlzUGF1c2VkKSB7XG4gICAgICB0aGlzLnByaW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcmludCgpIHtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gKCh0aGlzLmFzc2V0c1NjYW5uZWQgLyB0aGlzLnRvdGFsQXNzZXRzKSAqIDEwMCkudG9GaXhlZCgyKTtcbiAgICAvLyBwcmludCBpbiBNaUIgdW50aWwgd2UgaGl0IGF0IGxlYXN0IDEgR2lCIG9mIGRhdGEgdGFnZ2VkL2RlbGV0ZWRcbiAgICBpZiAoTWF0aC5tYXgodGhpcy50YWdnZWRBc3NldHNTaXplTWIsIHRoaXMuZGVsZXRlZEFzc2V0c1NpemVNYikgPj0gMTAwMCkge1xuICAgICAgaW5mbyhjaGFsay5ncmVlbihgWyR7cGVyY2VudGFnZX0lXSAke3RoaXMuYXNzZXRzU2Nhbm5lZH0gZmlsZXMgc2Nhbm5lZDogJHt0aGlzLnRhZ2dlZEFzc2V0fSBhc3NldHMgKCR7KHRoaXMudGFnZ2VkQXNzZXRzU2l6ZU1iIC8gMTAwMCkudG9GaXhlZCgyKX0gR2lCKSB0YWdnZWQsICR7dGhpcy5kZWxldGVkQXNzZXRzfSBhc3NldHMgKCR7KHRoaXMuZGVsZXRlZEFzc2V0c1NpemVNYiAvIDEwMDApLnRvRml4ZWQoMil9IEdpQikgZGVsZXRlZC5gKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm8oY2hhbGsuZ3JlZW4oYFske3BlcmNlbnRhZ2V9JV0gJHt0aGlzLmFzc2V0c1NjYW5uZWR9IGZpbGVzIHNjYW5uZWQ6ICR7dGhpcy50YWdnZWRBc3NldH0gYXNzZXRzICgke3RoaXMudGFnZ2VkQXNzZXRzU2l6ZU1iLnRvRml4ZWQoMil9IE1pQikgdGFnZ2VkLCAke3RoaXMuZGVsZXRlZEFzc2V0c30gYXNzZXRzICgke3RoaXMuZGVsZXRlZEFzc2V0c1NpemVNYi50b0ZpeGVkKDIpfSBNaUIpIGRlbGV0ZWQuYCkpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,13 +1,54 @@
1
- import { DeployOptions } from '@aws-cdk/cloud-assembly-schema';
2
1
  import { ResourceDifference } from '@aws-cdk/cloudformation-diff';
3
2
  import * as cxapi from '@aws-cdk/cx-api';
4
- import { Deployments, DeploymentMethod, ResourceIdentifierProperties, ResourcesToImport } from './api/deployments';
5
- import { Tag } from './api/tags';
6
- import { StackActivityProgress } from './api/util/cloudformation/stack-activity-monitor';
7
- export interface ImportDeploymentOptions extends DeployOptions {
8
- deploymentMethod?: DeploymentMethod;
9
- progress?: StackActivityProgress;
10
- tags?: Tag[];
3
+ import { IIoHost, ToolkitAction } from '../../toolkit/cli-io-host';
4
+ import { Deployments, DeploymentMethod, ResourceIdentifierProperties, ResourcesToImport } from '../deployments';
5
+ import { Tag } from '../tags';
6
+ import { StackActivityProgress } from '../util/cloudformation/stack-activity-monitor';
7
+ export interface ResourceImporterProps {
8
+ deployments: Deployments;
9
+ ioHost: IIoHost;
10
+ action: ToolkitAction;
11
+ }
12
+ export interface ImportDeploymentOptions {
13
+ /**
14
+ * Role to pass to CloudFormation for deployment
15
+ *
16
+ * @default - Default stack role
17
+ */
18
+ readonly roleArn?: string;
19
+ /**
20
+ * Deployment method
21
+ *
22
+ * @default - Change set with default options
23
+ */
24
+ readonly deploymentMethod?: DeploymentMethod;
25
+ /**
26
+ * Stack tags (pass through to CloudFormation)
27
+ *
28
+ * @default - No tags
29
+ */
30
+ readonly tags?: Tag[];
31
+ /**
32
+ * Use previous values for unspecified parameters
33
+ *
34
+ * If not set, all parameters must be specified for every deployment.
35
+ *
36
+ * @default true
37
+ */
38
+ readonly usePreviousParameters?: boolean;
39
+ /**
40
+ * Display mode for stack deployment progress.
41
+ *
42
+ * @default - StackActivityProgress.Bar - stack events will be displayed for
43
+ * the resource currently being deployed.
44
+ */
45
+ readonly progress?: StackActivityProgress;
46
+ /**
47
+ * Rollback failed deployments
48
+ *
49
+ * @default true
50
+ */
51
+ readonly rollback?: boolean;
11
52
  }
12
53
  /**
13
54
  * Set of parameters that uniquely identify a physical resource of a given type
@@ -53,10 +94,12 @@ export type ResourceMap = {
53
94
  * importable resources, then run an IMPORT changeset.
54
95
  */
55
96
  export declare class ResourceImporter {
97
+ private _currentTemplate;
56
98
  private readonly stack;
57
99
  private readonly cfn;
58
- private _currentTemplate;
59
- constructor(stack: cxapi.CloudFormationStackArtifact, cfn: Deployments);
100
+ private readonly ioHost;
101
+ private readonly action;
102
+ constructor(stack: cxapi.CloudFormationStackArtifact, props: ResourceImporterProps);
60
103
  /**
61
104
  * Ask the user for resources to import
62
105
  */
@@ -72,7 +115,7 @@ export declare class ResourceImporter {
72
115
  * @param importMap Mapping from CDK construct tree path to physical resource import identifiers
73
116
  * @param options Options to pass to CloudFormation deploy operation
74
117
  */
75
- importResourcesFromMap(importMap: ImportMap, options: ImportDeploymentOptions): Promise<void>;
118
+ importResourcesFromMap(importMap: ImportMap, options?: ImportDeploymentOptions): Promise<void>;
76
119
  /**
77
120
  * Based on the app and resources file generated by cdk migrate. Removes all items from the template that
78
121
  * cannot be included in an import change-set for new stacks and performs the import operation,
@@ -81,7 +124,7 @@ export declare class ResourceImporter {
81
124
  * @param resourcesToImport The mapping created by cdk migrate
82
125
  * @param options Options to pass to CloudFormation deploy operation
83
126
  */
84
- importResourcesFromMigrate(resourcesToImport: ResourcesToImport, options: ImportDeploymentOptions): Promise<void>;
127
+ importResourcesFromMigrate(resourcesToImport: ResourcesToImport, options?: ImportDeploymentOptions): Promise<void>;
85
128
  private importResources;
86
129
  /**
87
130
  * Perform a diff between the currently running and the new template, ensure that it is valid
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourceImporter = void 0;
4
+ exports.removeNonImportResources = removeNonImportResources;
5
+ const util_1 = require("util");
6
+ const cfnDiff = require("@aws-cdk/cloudformation-diff");
7
+ const chalk = require("chalk");
8
+ const fs = require("fs-extra");
9
+ const promptly = require("promptly");
10
+ const messages_1 = require("../../cli/messages");
11
+ const error_1 = require("../../toolkit/error");
12
+ const deployments_1 = require("../deployments");
13
+ /**
14
+ * Resource importing utility class
15
+ *
16
+ * - Determines the resources added to a template (compared to the deployed version)
17
+ * - Look up the identification information
18
+ * - Load them from a file, or
19
+ * - Ask the user, based on information supplied to us by CloudFormation's GetTemplateSummary
20
+ * - Translate the input to a structure expected by CloudFormation, update the template to add the
21
+ * importable resources, then run an IMPORT changeset.
22
+ */
23
+ class ResourceImporter {
24
+ constructor(stack, props) {
25
+ this.stack = stack;
26
+ this.cfn = props.deployments;
27
+ this.ioHost = props.ioHost;
28
+ this.action = props.action;
29
+ }
30
+ /**
31
+ * Ask the user for resources to import
32
+ */
33
+ async askForResourceIdentifiers(available) {
34
+ const ret = { importResources: [], resourceMap: {} };
35
+ const resourceIdentifiers = await this.resourceIdentifiers();
36
+ for (const resource of available) {
37
+ const identifier = await this.askForResourceIdentifier(resourceIdentifiers, resource);
38
+ if (!identifier) {
39
+ continue;
40
+ }
41
+ ret.importResources.push(resource);
42
+ ret.resourceMap[resource.logicalId] = identifier;
43
+ }
44
+ return ret;
45
+ }
46
+ /**
47
+ * Load the resources to import from a file
48
+ */
49
+ async loadResourceIdentifiers(available, filename) {
50
+ const contents = await fs.readJson(filename);
51
+ const ret = { importResources: [], resourceMap: {} };
52
+ for (const resource of available) {
53
+ const descr = this.describeResource(resource.logicalId);
54
+ const idProps = contents[resource.logicalId];
55
+ if (idProps) {
56
+ await this.ioHost.notify((0, messages_1.info)(this.action, (0, util_1.format)('%s: importing using %s', chalk.blue(descr), chalk.blue(fmtdict(idProps)))));
57
+ ret.importResources.push(resource);
58
+ ret.resourceMap[resource.logicalId] = idProps;
59
+ delete contents[resource.logicalId];
60
+ }
61
+ else {
62
+ await this.ioHost.notify((0, messages_1.info)(this.action, (0, util_1.format)('%s: skipping', chalk.blue(descr))));
63
+ }
64
+ }
65
+ const unknown = Object.keys(contents);
66
+ if (unknown.length > 0) {
67
+ await this.ioHost.notify((0, messages_1.warn)(this.action, `Unrecognized resource identifiers in mapping file: ${unknown.join(', ')}`));
68
+ }
69
+ return ret;
70
+ }
71
+ /**
72
+ * Based on the provided resource mapping, prepare CFN structures for import (template,
73
+ * ResourcesToImport structure) and perform the import operation (CloudFormation deployment)
74
+ *
75
+ * @param importMap Mapping from CDK construct tree path to physical resource import identifiers
76
+ * @param options Options to pass to CloudFormation deploy operation
77
+ */
78
+ async importResourcesFromMap(importMap, options = {}) {
79
+ const resourcesToImport = await this.makeResourcesToImport(importMap);
80
+ const updatedTemplate = await this.currentTemplateWithAdditions(importMap.importResources);
81
+ await this.importResources(updatedTemplate, resourcesToImport, options);
82
+ }
83
+ /**
84
+ * Based on the app and resources file generated by cdk migrate. Removes all items from the template that
85
+ * cannot be included in an import change-set for new stacks and performs the import operation,
86
+ * creating the new stack.
87
+ *
88
+ * @param resourcesToImport The mapping created by cdk migrate
89
+ * @param options Options to pass to CloudFormation deploy operation
90
+ */
91
+ async importResourcesFromMigrate(resourcesToImport, options = {}) {
92
+ const updatedTemplate = this.removeNonImportResources();
93
+ await this.importResources(updatedTemplate, resourcesToImport, options);
94
+ }
95
+ async importResources(overrideTemplate, resourcesToImport, options) {
96
+ try {
97
+ const result = await this.cfn.deployStack({
98
+ stack: this.stack,
99
+ deployName: this.stack.stackName,
100
+ ...options,
101
+ overrideTemplate,
102
+ resourcesToImport,
103
+ });
104
+ (0, deployments_1.assertIsSuccessfulDeployStackResult)(result);
105
+ const message = result.noOp
106
+ ? ' ✅ %s (no changes)'
107
+ : ' ✅ %s';
108
+ await this.ioHost.notify((0, messages_1.info)(this.action, '\n' + chalk.green((0, util_1.format)(message, this.stack.displayName))));
109
+ }
110
+ catch (e) {
111
+ await this.ioHost.notify((0, messages_1.error)(this.action, (0, util_1.format)('\n ❌ %s failed: %s', chalk.bold(this.stack.displayName), e), 'CDK_TOOLKIT_E3900'));
112
+ throw e;
113
+ }
114
+ }
115
+ /**
116
+ * Perform a diff between the currently running and the new template, ensure that it is valid
117
+ * for importing and return a list of resources that are being added in the new version
118
+ *
119
+ * @return mapping logicalResourceId -> resourceDifference
120
+ */
121
+ async discoverImportableResources(allowNonAdditions = false) {
122
+ const currentTemplate = await this.currentTemplate();
123
+ const diff = cfnDiff.fullDiff(currentTemplate, this.stack.template);
124
+ // Ignore changes to CDKMetadata
125
+ const resourceChanges = Object.entries(diff.resources.changes)
126
+ .filter(([logicalId, _]) => logicalId !== 'CDKMetadata');
127
+ // Split the changes into additions and non-additions. Imports only make sense
128
+ // for newly-added resources.
129
+ const nonAdditions = resourceChanges.filter(([_, dif]) => !dif.isAddition);
130
+ const additions = resourceChanges.filter(([_, dif]) => dif.isAddition);
131
+ if (nonAdditions.length) {
132
+ const offendingResources = nonAdditions.map(([logId, _]) => this.describeResource(logId));
133
+ if (allowNonAdditions) {
134
+ await this.ioHost.notify((0, messages_1.warn)(this.action, `Ignoring updated/deleted resources (--force): ${offendingResources.join(', ')}`));
135
+ }
136
+ else {
137
+ throw new error_1.ToolkitError('No resource updates or deletes are allowed on import operation. Make sure to resolve pending changes ' +
138
+ `to existing resources, before attempting an import. Updated/deleted resources: ${offendingResources.join(', ')} (--force to override)`);
139
+ }
140
+ }
141
+ // Resources in the new template, that are not present in the current template, are a potential import candidates
142
+ return {
143
+ additions: additions.map(([logicalId, resourceDiff]) => ({
144
+ logicalId,
145
+ resourceDiff,
146
+ resourceDefinition: addDefaultDeletionPolicy(this.stack.template?.Resources?.[logicalId] ?? {}),
147
+ })),
148
+ hasNonAdditions: nonAdditions.length > 0,
149
+ };
150
+ }
151
+ /**
152
+ * Resolves the environment of a stack.
153
+ */
154
+ async resolveEnvironment() {
155
+ return this.cfn.resolveEnvironment(this.stack);
156
+ }
157
+ /**
158
+ * Get currently deployed template of the given stack (SINGLETON)
159
+ *
160
+ * @returns Currently deployed CloudFormation template
161
+ */
162
+ async currentTemplate() {
163
+ if (!this._currentTemplate) {
164
+ this._currentTemplate = await this.cfn.readCurrentTemplate(this.stack);
165
+ }
166
+ return this._currentTemplate;
167
+ }
168
+ /**
169
+ * Return the current template, with the given resources added to it
170
+ */
171
+ async currentTemplateWithAdditions(additions) {
172
+ const template = await this.currentTemplate();
173
+ if (!template.Resources) {
174
+ template.Resources = {};
175
+ }
176
+ for (const add of additions) {
177
+ template.Resources[add.logicalId] = add.resourceDefinition;
178
+ }
179
+ return template;
180
+ }
181
+ /**
182
+ * Get a list of import identifiers for all resource types used in the given
183
+ * template that do support the import operation (SINGLETON)
184
+ *
185
+ * @returns a mapping from a resource type to a list of property names that together identify the resource for import
186
+ */
187
+ async resourceIdentifiers() {
188
+ const ret = {};
189
+ const resourceIdentifierSummaries = await this.cfn.resourceIdentifierSummaries(this.stack);
190
+ for (const summary of resourceIdentifierSummaries) {
191
+ if ('ResourceType' in summary && summary.ResourceType && 'ResourceIdentifiers' in summary && summary.ResourceIdentifiers) {
192
+ ret[summary.ResourceType] = (summary.ResourceIdentifiers ?? [])?.map(x => x.split(','));
193
+ }
194
+ }
195
+ return ret;
196
+ }
197
+ /**
198
+ * Ask for the importable identifier for the given resource
199
+ *
200
+ * There may be more than one identifier under which a resource can be imported. The `import`
201
+ * operation needs exactly one of them.
202
+ *
203
+ * - If we can get one from the template, we will use one.
204
+ * - Otherwise, we will ask the user for one of them.
205
+ */
206
+ async askForResourceIdentifier(resourceIdentifiers, chg) {
207
+ const resourceName = this.describeResource(chg.logicalId);
208
+ // Skip resources that do not support importing
209
+ const resourceType = chg.resourceDiff.newResourceType;
210
+ if (resourceType === undefined || !(resourceType in resourceIdentifiers)) {
211
+ await this.ioHost.notify((0, messages_1.warn)(this.action, `${resourceName}: unsupported resource type ${resourceType}, skipping import.`));
212
+ return undefined;
213
+ }
214
+ const idPropSets = resourceIdentifiers[resourceType];
215
+ // Retain only literal strings: strip potential CFN intrinsics
216
+ const resourceProps = Object.fromEntries(Object.entries(chg.resourceDefinition.Properties ?? {})
217
+ .filter(([_, v]) => typeof v === 'string'));
218
+ // Find property sets that are fully satisfied in the template, ask the user to confirm them
219
+ const satisfiedPropSets = idPropSets.filter(ps => ps.every(p => resourceProps[p]));
220
+ for (const satisfiedPropSet of satisfiedPropSets) {
221
+ const candidateProps = Object.fromEntries(satisfiedPropSet.map(p => [p, resourceProps[p]]));
222
+ const displayCandidateProps = fmtdict(candidateProps);
223
+ if (await promptly.confirm(`${chalk.blue(resourceName)} (${resourceType}): import with ${chalk.yellow(displayCandidateProps)} (yes/no) [default: yes]? `, { default: 'yes' })) {
224
+ return candidateProps;
225
+ }
226
+ }
227
+ // If we got here and the user rejected any available identifiers, then apparently they don't want the resource at all
228
+ if (satisfiedPropSets.length > 0) {
229
+ await this.ioHost.notify((0, messages_1.info)(this.action, chalk.grey(`Skipping import of ${resourceName}`)));
230
+ return undefined;
231
+ }
232
+ // We cannot auto-import this, ask the user for one of the props
233
+ // The only difference between these cases is what we print: for multiple properties, we print a preamble
234
+ const prefix = `${chalk.blue(resourceName)} (${resourceType})`;
235
+ let preamble;
236
+ let promptPattern;
237
+ if (idPropSets.length > 1) {
238
+ preamble = `${prefix}: enter one of ${idPropSets.map(x => chalk.blue(x.join('+'))).join(', ')} to import (all empty to skip)`;
239
+ promptPattern = `${prefix}: enter %`;
240
+ }
241
+ else {
242
+ promptPattern = `${prefix}: enter %`;
243
+ }
244
+ // Do the input loop here
245
+ if (preamble) {
246
+ await this.ioHost.notify((0, messages_1.info)(this.action, preamble));
247
+ }
248
+ for (const idProps of idPropSets) {
249
+ const input = {};
250
+ for (const idProp of idProps) {
251
+ // If we have a value from the template, use it as default. This will only be a partial
252
+ // identifier if present, otherwise we would have done the import already above.
253
+ const defaultValue = resourceProps[idProp] ?? '';
254
+ const prompt = [
255
+ promptPattern.replace(/%/g, chalk.blue(idProp)),
256
+ defaultValue
257
+ ? `[${defaultValue}]`
258
+ : '(empty to skip)',
259
+ ].join(' ') + ':';
260
+ const response = await promptly.prompt(prompt, { default: defaultValue, trim: true });
261
+ if (!response) {
262
+ break;
263
+ }
264
+ input[idProp] = response;
265
+ // Also stick this property into 'resourceProps', so that it may be reused by a subsequent question
266
+ // (for a different compound identifier that involves the same property). Just a small UX enhancement.
267
+ resourceProps[idProp] = response;
268
+ }
269
+ // If the user gave inputs for all values, we are complete
270
+ if (Object.keys(input).length === idProps.length) {
271
+ return input;
272
+ }
273
+ }
274
+ await this.ioHost.notify((0, messages_1.info)(this.action, chalk.grey(`Skipping import of ${resourceName}`)));
275
+ return undefined;
276
+ }
277
+ /**
278
+ * Convert the internal "resource mapping" structure to CloudFormation accepted "ResourcesToImport" structure
279
+ */
280
+ async makeResourcesToImport(resourceMap) {
281
+ return resourceMap.importResources.map(res => ({
282
+ LogicalResourceId: res.logicalId,
283
+ ResourceType: res.resourceDiff.newResourceType,
284
+ ResourceIdentifier: resourceMap.resourceMap[res.logicalId],
285
+ }));
286
+ }
287
+ /**
288
+ * Convert CloudFormation logical resource ID to CDK construct tree path
289
+ *
290
+ * @param logicalId CloudFormation logical ID of the resource (the key in the template's Resources section)
291
+ * @returns Forward-slash separated path of the resource in CDK construct tree, e.g. MyStack/MyBucket/Resource
292
+ */
293
+ describeResource(logicalId) {
294
+ return this.stack.template?.Resources?.[logicalId]?.Metadata?.['aws:cdk:path'] ?? logicalId;
295
+ }
296
+ /**
297
+ * Removes CDKMetadata and Outputs in the template so that only resources for importing are left.
298
+ * @returns template with import resources only
299
+ */
300
+ removeNonImportResources() {
301
+ return removeNonImportResources(this.stack);
302
+ }
303
+ }
304
+ exports.ResourceImporter = ResourceImporter;
305
+ /**
306
+ * Removes CDKMetadata and Outputs in the template so that only resources for importing are left.
307
+ * @returns template with import resources only
308
+ */
309
+ function removeNonImportResources(stack) {
310
+ const template = stack.template;
311
+ delete template.Resources.CDKMetadata;
312
+ delete template.Outputs;
313
+ return template;
314
+ }
315
+ function fmtdict(xs) {
316
+ return Object.entries(xs).map(([k, v]) => `${k}=${v}`).join(', ');
317
+ }
318
+ /**
319
+ * Add a default `DeletionPolicy` policy.
320
+ * The default value is set to 'Retain', to lower risk of unintentionally
321
+ * deleting stateful resources in the process of importing to CDK.
322
+ */
323
+ function addDefaultDeletionPolicy(resource) {
324
+ if (resource.DeletionPolicy) {
325
+ return resource;
326
+ }
327
+ return {
328
+ ...resource,
329
+ DeletionPolicy: 'Retain',
330
+ };
331
+ }
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1Y0EsNERBS0M7QUE1Y0QsK0JBQThCO0FBQzlCLHdEQUF3RDtBQUd4RCwrQkFBK0I7QUFDL0IsK0JBQStCO0FBQy9CLHFDQUFxQztBQUNyQyxpREFBdUQ7QUFFdkQsK0NBQW1EO0FBQ25ELGdEQUFxSjtBQXdGcko7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFRM0IsWUFDRSxLQUF3QyxFQUN4QyxLQUE0QjtRQUU1QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMseUJBQXlCLENBQUMsU0FBK0I7UUFDcEUsTUFBTSxHQUFHLEdBQWMsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNoRSxNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFN0QsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2hCLFNBQVM7WUFDWCxDQUFDO1lBRUQsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxD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QUN2QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxRQUFhO0lBQzdDLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQUMsT0FBTyxRQUFRLENBQUM7SUFBQyxDQUFDO0lBRWpELE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxjQUFjLEVBQUUsUUFBUTtLQUN6QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0ICogYXMgY2ZuRGlmZiBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7IFJlc291cmNlRGlmZmVyZW5jZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHByb21wdGx5IGZyb20gJ3Byb21wdGx5JztcbmltcG9ydCB7IGVycm9yLCBpbmZvLCB3YXJuIH0gZnJvbSAnLi4vLi4vY2xpL21lc3NhZ2VzJztcbmltcG9ydCB7IElJb0hvc3QsIFRvb2xraXRBY3Rpb24gfSBmcm9tICcuLi8uLi90b29sa2l0L2NsaS1pby1ob3N0JztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvZXJyb3InO1xuaW1wb3J0IHsgYXNzZXJ0SXNTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQsIERlcGxveW1lbnRzLCBEZXBsb3ltZW50TWV0aG9kLCBSZXNvdXJjZUlkZW50aWZpZXJQcm9wZXJ0aWVzLCBSZXNvdXJjZXNUb0ltcG9ydCB9IGZyb20gJy4uL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IFRhZyB9IGZyb20gJy4uL3RhZ3MnO1xuaW1wb3J0IHsgU3RhY2tBY3Rpdml0eVByb2dyZXNzIH0gZnJvbSAnLi4vdXRpbC9jbG91ZGZvcm1hdGlvbi9zdGFjay1hY3Rpdml0eS1tb25pdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUltcG9ydGVyUHJvcHMge1xuICBkZXBsb3ltZW50czogRGVwbG95bWVudHM7XG4gIGlvSG9zdDogSUlvSG9zdDtcbiAgYWN0aW9uOiBUb29sa2l0QWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydERlcGxveW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFJvbGUgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiBmb3IgZGVwbG95bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgc3RhY2sgcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVwbG95bWVudCBtZXRob2RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDaGFuZ2Ugc2V0IHdpdGggZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBsb3ltZW50TWV0aG9kPzogRGVwbG95bWVudE1ldGhvZDtcblxuICAvKipcbiAgICogU3RhY2sgdGFncyAocGFzcyB0aHJvdWdoIHRvIENsb3VkRm9ybWF0aW9uKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBUYWdbXTtcblxuICAvKipcbiAgICogVXNlIHByZXZpb3VzIHZhbHVlcyBmb3IgdW5zcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBJZiBub3Qgc2V0LCBhbGwgcGFyYW1ldGVycyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZXZlcnkgZGVwbG95bWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlUHJldmlvdXNQYXJhbWV0ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzcGxheSBtb2RlIGZvciBzdGFjayBkZXBsb3ltZW50IHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFN0YWNrQWN0aXZpdHlQcm9ncmVzcy5CYXIgLSBzdGFjayBldmVudHMgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yXG4gICAqICAgdGhlIHJlc291cmNlIGN1cnJlbnRseSBiZWluZyBkZXBsb3llZC5cbiAgICovXG4gIHJlYWRvbmx5IHByb2dyZXNzPzogU3RhY2tBY3Rpdml0eVByb2dyZXNzO1xuXG4gIC8qKlxuICAgKiBSb2xsYmFjayBmYWlsZWQgZGVwbG95bWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGJhY2s/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNldCBvZiBwYXJhbWV0ZXJzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYSBwaHlzaWNhbCByZXNvdXJjZSBvZiBhIGdpdmVuIHR5cGVcbiAqIGZvciB0aGUgaW1wb3J0IG9wZXJhdGlvbiwgZXhhbXBsZTpcbiAqXG4gKiBgYGBcbiAqIHtcbiAqICAgXCJBV1M6OlMzOjpCdWNrZXRcIjogW1tcIkJ1Y2tldE5hbWVcIl1dLFxuICogICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCI6IFtbXCJUYWJsZU5hbWVcIl0sIFtcIlRhYmxlQXJuXCJdLCBbXCJUYWJsZVN0cmVhbUFyblwiXV0sXG4gKiAgIFwiQVdTOjpSb3V0ZTUzOjpLZXlTaWduaW5nS2V5XCI6IFtbXCJIb3N0ZWRab25lSWRcIiwgXCJOYW1lXCJdXSxcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZUlkZW50aWZpZXJzID0geyBbcmVzb3VyY2VUeXBlOiBzdHJpbmddOiBzdHJpbmdbXVtdIH07XG5cbi8qKlxuICogTWFwcGluZyBvZiBDREsgcmVzb3VyY2VzIChMMSBjb25zdHJ1Y3RzKSB0byBwaHlzaWNhbCByZXNvdXJjZXMgdG8gYmUgaW1wb3J0ZWRcbiAqIGluIHRoZWlyIHBsYWNlLCBleGFtcGxlOlxuICpcbiAqIGBgYFxuICoge1xuICogICBcIk15U3RhY2svTXlTM0J1Y2tldC9SZXNvdXJjZVwiOiB7XG4gKiAgICAgXCJCdWNrZXROYW1lXCI6IFwibXktbWFudWFsbHktY3JlYXRlZC1zMy1idWNrZXRcIlxuICogICB9LFxuICogICBcIk15U3RhY2svTXlWcGMvUmVzb3VyY2VcIjoge1xuICogICAgIFwiVnBjSWRcIjogXCJ2cGMtMTIzNDU2Nzg5XCJcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIFJlc291cmNlTWFwID0geyBbbG9naWNhbFJlc291cmNlOiBzdHJpbmddOiBSZXNvdXJjZUlkZW50aWZpZXJQcm9wZXJ0aWVzIH07XG5cbi8qKlxuICogUmVzb3VyY2UgaW1wb3J0aW5nIHV0aWxpdHkgY2xhc3NcbiAqXG4gKiAtIERldGVybWluZXMgdGhlIHJlc291cmNlcyBhZGRlZCB0byBhIHRlbXBsYXRlIChjb21wYXJlZCB0byB0aGUgZGVwbG95ZWQgdmVyc2lvbilcbiAqIC0gTG9vayB1cCB0aGUgaWRlbnRpZmljYXRpb24gaW5mb3JtYXRpb25cbiAqICAgLSBMb2FkIHRoZW0gZnJvbSBhIGZpbGUsIG9yXG4gKiAgIC0gQXNrIHRoZSB1c2VyLCBiYXNlZCBvbiBpbmZvcm1hdGlvbiBzdXBwbGllZCB0byB1cyBieSBDbG91ZEZvcm1hdGlvbidzIEdldFRlbXBsYXRlU3VtbWFyeVxuICogLSBUcmFuc2xhdGUgdGhlIGlucHV0IHRvIGEgc3RydWN0dXJlIGV4cGVjdGVkIGJ5IENsb3VkRm9ybWF0aW9uLCB1cGRhdGUgdGhlIHRlbXBsYXRlIHRvIGFkZCB0aGVcbiAqICAgaW1wb3J0YWJsZSByZXNvdXJjZXMsIHRoZW4gcnVuIGFuIElNUE9SVCBjaGFuZ2VzZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUltcG9ydGVyIHtcbiAgcHJpdmF0ZSBfY3VycmVudFRlbXBsYXRlOiBhbnk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IGNmbjogRGVwbG95bWVudHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9Ib3N0OiBJSW9Ib3N0O1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbjogVG9vbGtpdEFjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuICAgIHByb3BzOiBSZXNvdXJjZUltcG9ydGVyUHJvcHMsXG4gICkge1xuICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICB0aGlzLmNmbiA9IHByb3BzLmRlcGxveW1lbnRzO1xuICAgIHRoaXMuaW9Ib3N0ID0gcHJvcHMuaW9Ib3N0O1xuICAgIHRoaXMuYWN0aW9uID0gcHJvcHMuYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzayB0aGUgdXNlciBmb3IgcmVzb3VyY2VzIHRvIGltcG9ydFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFza0ZvclJlc291cmNlSWRlbnRpZmllcnMoYXZhaWxhYmxlOiBJbXBvcnRhYmxlUmVzb3VyY2VbXSk6IFByb21pc2U8SW1wb3J0TWFwPiB7XG4gICAgY29uc3QgcmV0OiBJbXBvcnRNYXAgPSB7IGltcG9ydFJlc291cmNlczogW10sIHJlc291cmNlTWFwOiB7fSB9O1xuICAgIGNvbnN0IHJlc291cmNlSWRlbnRpZmllcnMgPSBhd2FpdCB0aGlzLnJlc291cmNlSWRlbnRpZmllcnMoKTtcblxuICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgYXZhaWxhYmxlKSB7XG4gICAgICBjb25zdCBpZGVudGlmaWVyID0gYXdhaXQgdGhpcy5hc2tGb3JSZXNvdXJjZUlkZW50aWZpZXIocmVzb3VyY2VJZGVudGlmaWVycywgcmVzb3VyY2UpO1xuICAgICAgaWYgKCFpZGVudGlmaWVyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByZXQuaW1wb3J0UmVzb3VyY2VzLnB1c2gocmVzb3VyY2UpO1xuICAgICAgcmV0LnJlc291cmNlTWFwW3Jlc291cmNlLmxvZ2ljYWxJZF0gPSBpZGVudGlmaWVyO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgcmVzb3VyY2VzIHRvIGltcG9ydCBmcm9tIGEgZmlsZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRSZXNvdXJjZUlkZW50aWZpZXJzKGF2YWlsYWJsZTogSW1wb3J0YWJsZVJlc291cmNlW10sIGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEltcG9ydE1hcD4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEpzb24oZmlsZW5hbWUpO1xuXG4gICAgY29uc3QgcmV0OiBJbXBvcnRNYXAgPSB7IGltcG9ydFJlc291cmNlczogW10sIHJlc291cmNlTWFwOiB7fSB9O1xuICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgYXZhaWxhYmxlKSB7XG4gICAgICBjb25zdCBkZXNjciA9IHRoaXMuZGVzY3JpYmVSZXNvdXJjZShyZXNvdXJjZS5sb2dpY2FsSWQpO1xuICAgICAgY29uc3QgaWRQcm9wcyA9IGNvbnRlbnRzW3Jlc291cmNlLmxvZ2ljYWxJZF07XG4gICAgICBpZiAoaWRQcm9wcykge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSG9zdC5ub3RpZnkoaW5mbyh0aGlzLmFjdGlvbiwgZm9ybWF0KCclczogaW1wb3J0aW5nIHVzaW5nICVzJywgY2hhbGsuYmx1ZShkZXNjciksIGNoYWxrLmJsdWUoZm10ZGljdChpZFByb3BzKSkpKSk7XG5cbiAgICAgICAgcmV0LmltcG9ydFJlc291cmNlcy5wdXNoKHJlc291cmNlKTtcbiAgICAgICAgcmV0LnJlc291cmNlTWFwW3Jlc291cmNlLmxvZ2ljYWxJZF0gPSBpZFByb3BzO1xuICAgICAgICBkZWxldGUgY29udGVudHNbcmVzb3VyY2UubG9naWNhbElkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9Ib3N0Lm5vdGlmeShpbmZvKHRoaXMuYWN0aW9uLCBmb3JtYXQoJyVzOiBza2lwcGluZycsIGNoYWxrLmJsdWUoZGVzY3IpKSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVua25vd24gPSBPYmplY3Qua2V5cyhjb250ZW50cyk7XG4gICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hvc3Qubm90aWZ5KHdhcm4odGhpcy5hY3Rpb24sIGBVbnJlY29nbml6ZWQgcmVzb3VyY2UgaWRlbnRpZmllcnMgaW4gbWFwcGluZyBmaWxlOiAke3Vua25vd24uam9pbignLCAnKX1gKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCYXNlZCBvbiB0aGUgcHJvdmlkZWQgcmVzb3VyY2UgbWFwcGluZywgcHJlcGFyZSBDRk4gc3RydWN0dXJlcyBmb3IgaW1wb3J0ICh0ZW1wbGF0ZSxcbiAgICogUmVzb3VyY2VzVG9JbXBvcnQgc3RydWN0dXJlKSBhbmQgcGVyZm9ybSB0aGUgaW1wb3J0IG9wZXJhdGlvbiAoQ2xvdWRGb3JtYXRpb24gZGVwbG95bWVudClcbiAgICpcbiAgICogQHBhcmFtIGltcG9ydE1hcCBNYXBwaW5nIGZyb20gQ0RLIGNvbnN0cnVjdCB0cmVlIHBhdGggdG8gcGh5c2ljYWwgcmVzb3VyY2UgaW1wb3J0IGlkZW50aWZpZXJzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiBkZXBsb3kgb3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW1wb3J0UmVzb3VyY2VzRnJvbU1hcChpbXBvcnRNYXA6IEltcG9ydE1hcCwgb3B0aW9uczogSW1wb3J0RGVwbG95bWVudE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHJlc291cmNlc1RvSW1wb3J0OiBSZXNvdXJjZXNUb0ltcG9ydCA9IGF3YWl0IHRoaXMubWFrZVJlc291cmNlc1RvSW1wb3J0KGltcG9ydE1hcCk7XG4gICAgY29uc3QgdXBkYXRlZFRlbXBsYXRlID0gYXdhaXQgdGhpcy5jdXJyZW50VGVtcGxhdGVXaXRoQWRkaXRpb25zKGltcG9ydE1hcC5pbXBvcnRSZXNvdXJjZXMpO1xuXG4gICAgYXdhaXQgdGhpcy5pbXBvcnRSZXNvdXJjZXModXBkYXRlZFRlbXBsYXRlLCByZXNvdXJjZXNUb0ltcG9ydCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQmFzZWQgb24gdGhlIGFwcCBhbmQgcmVzb3VyY2VzIGZpbGUgZ2VuZXJhdGVkIGJ5IGNkayBtaWdyYXRlLiBSZW1vdmVzIGFsbCBpdGVtcyBmcm9tIHRoZSB0ZW1wbGF0ZSB0aGF0XG4gICAqIGNhbm5vdCBiZSBpbmNsdWRlZCBpbiBhbiBpbXBvcnQgY2hhbmdlLXNldCBmb3IgbmV3IHN0YWNrcyBhbmQgcGVyZm9ybXMgdGhlIGltcG9ydCBvcGVyYXRpb24sXG4gICAqIGNyZWF0aW5nIHRoZSBuZXcgc3RhY2suXG4gICAqXG4gICAqIEBwYXJhbSByZXNvdXJjZXNUb0ltcG9ydCBUaGUgbWFwcGluZyBjcmVhdGVkIGJ5IGNkayBtaWdyYXRlXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiBkZXBsb3kgb3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW1wb3J0UmVzb3VyY2VzRnJvbU1pZ3JhdGUocmVzb3VyY2VzVG9JbXBvcnQ6IFJlc291cmNlc1RvSW1wb3J0LCBvcHRpb25zOiBJbXBvcnREZXBsb3ltZW50T3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdXBkYXRlZFRlbXBsYXRlID0gdGhpcy5yZW1vdmVOb25JbXBvcnRSZXNvdXJjZXMoKTtcblxuICAgIGF3YWl0IHRoaXMuaW1wb3J0UmVzb3VyY2VzKHVwZGF0ZWRUZW1wbGF0ZSwgcmVzb3VyY2VzVG9JbXBvcnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbXBvcnRSZXNvdXJjZXMob3ZlcnJpZGVUZW1wbGF0ZTogYW55LCByZXNvdXJjZXNUb0ltcG9ydDogUmVzb3VyY2VzVG9JbXBvcnQsIG9wdGlvbnM6IEltcG9ydERlcGxveW1lbnRPcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2ZuLmRlcGxveVN0YWNrKHtcbiAgICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAgIGRlcGxveU5hbWU6IHRoaXMuc3RhY2suc3RhY2tOYW1lLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBvdmVycmlkZVRlbXBsYXRlLFxuICAgICAgICByZXNvdXJjZXNUb0ltcG9ydCxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnRJc1N1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdChyZXN1bHQpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gcmVzdWx0Lm5vT3BcbiAgICAgICAgPyAnIOKchSAgJXMgKG5vIGNoYW5nZXMpJ1xuICAgICAgICA6ICcg4pyFICAlcyc7XG5cbiAgICAgIGF3YWl0IHRoaXMuaW9Ib3N0Lm5vdGlmeShpbmZvKHRoaXMuYWN0aW9uLCAnXFxuJyArIGNoYWxrLmdyZWVuKGZvcm1hdChtZXNzYWdlLCB0aGlzLnN0YWNrLmRpc3BsYXlOYW1lKSkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSG9zdC5ub3RpZnkoZXJyb3IodGhpcy5hY3Rpb24sIGZvcm1hdCgnXFxuIOKdjCAgJXMgZmFpbGVkOiAlcycsIGNoYWxrLmJvbGQodGhpcy5zdGFjay5kaXNwbGF5TmFtZSksIGUpLCAnQ0RLX1RPT0xLSVRfRTM5MDAnKSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGEgZGlmZiBiZXR3ZWVuIHRoZSBjdXJyZW50bHkgcnVubmluZyBhbmQgdGhlIG5ldyB0ZW1wbGF0ZSwgZW5zdXJlIHRoYXQgaXQgaXMgdmFsaWRcbiAgICogZm9yIGltcG9ydGluZyBhbmQgcmV0dXJuIGEgbGlzdCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgYmVpbmcgYWRkZWQgaW4gdGhlIG5ldyB2ZXJzaW9uXG4gICAqXG4gICAqIEByZXR1cm4gbWFwcGluZyBsb2dpY2FsUmVzb3VyY2VJZCAtPiByZXNvdXJjZURpZmZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaXNjb3ZlckltcG9ydGFibGVSZXNvdXJjZXMoYWxsb3dOb25BZGRpdGlvbnMgPSBmYWxzZSk6IFByb21pc2U8RGlzY292ZXJJbXBvcnRhYmxlUmVzb3VyY2VzUmVzdWx0PiB7XG4gICAgY29uc3QgY3VycmVudFRlbXBsYXRlID0gYXdhaXQgdGhpcy5jdXJyZW50VGVtcGxhdGUoKTtcblxuICAgIGNvbnN0IGRpZmYgPSBjZm5EaWZmLmZ1bGxEaWZmKGN1cnJlbnRUZW1wbGF0ZSwgdGhpcy5zdGFjay50ZW1wbGF0ZSk7XG5cbiAgICAvLyBJZ25vcmUgY2hhbmdlcyB0byBDREtNZXRhZGF0YVxuICAgIGNvbnN0IHJlc291cmNlQ2hhbmdlcyA9IE9iamVjdC5lbnRyaWVzKGRpZmYucmVzb3VyY2VzLmNoYW5nZXMpXG4gICAgICAuZmlsdGVyKChbbG9naWNhbElkLCBfXSkgPT4gbG9naWNhbElkICE9PSAnQ0RLTWV0YWRhdGEnKTtcblxuICAgIC8vIFNwbGl0IHRoZSBjaGFuZ2VzIGludG8gYWRkaXRpb25zIGFuZCBub24tYWRkaXRpb25zLiBJbXBvcnRzIG9ubHkgbWFrZSBzZW5zZVxuICAgIC8vIGZvciBuZXdseS1hZGRlZCByZXNvdXJjZXMuXG4gICAgY29uc3Qgbm9uQWRkaXRpb25zID0gcmVzb3VyY2VDaGFuZ2VzLmZpbHRlcigoW18sIGRpZl0pID0+ICFkaWYuaXNBZGRpdGlvbik7XG4gICAgY29uc3QgYWRkaXRpb25zID0gcmVzb3VyY2VDaGFuZ2VzLmZpbHRlcigoW18sIGRpZl0pID0+IGRpZi5pc0FkZGl0aW9uKTtcblxuICAgIGlmIChub25BZGRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvZmZlbmRpbmdSZXNvdXJjZXMgPSBub25BZGRpdGlvbnMubWFwKChbbG9nSWQsIF9dKSA9PiB0aGlzLmRlc2NyaWJlUmVzb3VyY2UobG9nSWQpKTtcblxuICAgICAgaWYgKGFsbG93Tm9uQWRkaXRpb25zKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9Ib3N0Lm5vdGlmeSh3YXJuKHRoaXMuYWN0aW9uLCBgSWdub3JpbmcgdXBkYXRlZC9kZWxldGVkIHJlc291cmNlcyAoLS1mb3JjZSk6ICR7b2ZmZW5kaW5nUmVzb3VyY2VzLmpvaW4oJywgJyl9YCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignTm8gcmVzb3VyY2UgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBhbGxvd2VkIG9uIGltcG9ydCBvcGVyYXRpb24uIE1ha2Ugc3VyZSB0byByZXNvbHZlIHBlbmRpbmcgY2hhbmdlcyAnICtcbiAgICAgICAgICBgdG8gZXhpc3RpbmcgcmVzb3VyY2VzLCBiZWZvcmUgYXR0ZW1wdGluZyBhbiBpbXBvcnQuIFVwZGF0ZWQvZGVsZXRlZCByZXNvdXJjZXM6ICR7b2ZmZW5kaW5nUmVzb3VyY2VzLmpvaW4oJywgJyl9ICgtLWZvcmNlIHRvIG92ZXJyaWRlKWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc291cmNlcyBpbiB0aGUgbmV3IHRlbXBsYXRlLCB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYXJlIGEgcG90ZW50aWFsIGltcG9ydCBjYW5kaWRhdGVzXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZGl0aW9uczogYWRkaXRpb25zLm1hcCgoW2xvZ2ljYWxJZCwgcmVzb3VyY2VEaWZmXSkgPT4gKHtcbiAgICAgICAgbG9naWNhbElkLFxuICAgICAgICByZXNvdXJjZURpZmYsXG4gICAgICAgIHJlc291cmNlRGVmaW5pdGlvbjogYWRkRGVmYXVsdERlbGV0aW9uUG9saWN5KHRoaXMuc3RhY2sudGVtcGxhdGU/LlJlc291cmNlcz8uW2xvZ2ljYWxJZF0gPz8ge30pLFxuICAgICAgfSkpLFxuICAgICAgaGFzTm9uQWRkaXRpb25zOiBub25BZGRpdGlvbnMubGVuZ3RoID4gMCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBlbnZpcm9ubWVudCBvZiBhIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlc29sdmVFbnZpcm9ubWVudCgpOiBQcm9taXNlPGN4YXBpLkVudmlyb25tZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuY2ZuLnJlc29sdmVFbnZpcm9ubWVudCh0aGlzLnN0YWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudGx5IGRlcGxveWVkIHRlbXBsYXRlIG9mIHRoZSBnaXZlbiBzdGFjayAoU0lOR0xFVE9OKVxuICAgKlxuICAgKiBAcmV0dXJucyBDdXJyZW50bHkgZGVwbG95ZWQgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3VycmVudFRlbXBsYXRlKCk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50VGVtcGxhdGUpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRUZW1wbGF0ZSA9IGF3YWl0IHRoaXMuY2ZuLnJlYWRDdXJyZW50VGVtcGxhdGUodGhpcy5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHRlbXBsYXRlLCB3aXRoIHRoZSBnaXZlbiByZXNvdXJjZXMgYWRkZWQgdG8gaXRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3VycmVudFRlbXBsYXRlV2l0aEFkZGl0aW9ucyhhZGRpdGlvbnM6IEltcG9ydGFibGVSZXNvdXJjZVtdKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMuY3VycmVudFRlbXBsYXRlKCk7XG4gICAgaWYgKCF0ZW1wbGF0ZS5SZXNvdXJjZXMpIHtcbiAgICAgIHRlbXBsYXRlLlJlc291cmNlcyA9IHt9O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgYWRkIG9mIGFkZGl0aW9ucykge1xuICAgICAgdGVtcGxhdGUuUmVzb3VyY2VzW2FkZC5sb2dpY2FsSWRdID0gYWRkLnJlc291cmNlRGVmaW5pdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiBpbXBvcnQgaWRlbnRpZmllcnMgZm9yIGFsbCByZXNvdXJjZSB0eXBlcyB1c2VkIGluIHRoZSBnaXZlblxuICAgKiB0ZW1wbGF0ZSB0aGF0IGRvIHN1cHBvcnQgdGhlIGltcG9ydCBvcGVyYXRpb24gKFNJTkdMRVRPTilcbiAgICpcbiAgICogQHJldHVybnMgYSBtYXBwaW5nIGZyb20gYSByZXNvdXJjZSB0eXBlIHRvIGEgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IHRvZ2V0aGVyIGlkZW50aWZ5IHRoZSByZXNvdXJjZSBmb3IgaW1wb3J0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc291cmNlSWRlbnRpZmllcnMoKTogUHJvbWlzZTxSZXNvdXJjZUlkZW50aWZpZXJzPiB7XG4gICAgY29uc3QgcmV0OiBSZXNvdXJjZUlkZW50aWZpZXJzID0ge307XG4gICAgY29uc3QgcmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzID0gYXdhaXQgdGhpcy5jZm4ucmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzKHRoaXMuc3RhY2spO1xuICAgIGZvciAoY29uc3Qgc3VtbWFyeSBvZiByZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXMpIHtcbiAgICAgIGlmICgnUmVzb3VyY2VUeXBlJyBpbiBzdW1tYXJ5ICYmIHN1bW1hcnkuUmVzb3VyY2VUeXBlICYmICdSZXNvdXJjZUlkZW50aWZpZXJzJyBpbiBzdW1tYXJ5ICYmIHN1bW1hcnkuUmVzb3VyY2VJZGVudGlmaWVycykge1xuICAgICAgICByZXRbc3VtbWFyeS5SZXNvdXJjZVR5cGVdID0gKHN1bW1hcnkuUmVzb3VyY2VJZGVudGlmaWVycyA/PyBbXSk/Lm1hcCh4ID0+IHguc3BsaXQoJywnKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogQXNrIGZvciB0aGUgaW1wb3J0YWJsZSBpZGVudGlmaWVyIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2VcbiAgICpcbiAgICogVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgaWRlbnRpZmllciB1bmRlciB3aGljaCBhIHJlc291cmNlIGNhbiBiZSBpbXBvcnRlZC4gVGhlIGBpbXBvcnRgXG4gICAqIG9wZXJhdGlvbiBuZWVkcyBleGFjdGx5IG9uZSBvZiB0aGVtLlxuICAgKlxuICAgKiAtIElmIHdlIGNhbiBnZXQgb25lIGZyb20gdGhlIHRlbXBsYXRlLCB3ZSB3aWxsIHVzZSBvbmUuXG4gICAqIC0gT3RoZXJ3aXNlLCB3ZSB3aWxsIGFzayB0aGUgdXNlciBmb3Igb25lIG9mIHRoZW0uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFza0ZvclJlc291cmNlSWRlbnRpZmllcihcbiAgICByZXNvdXJjZUlkZW50aWZpZXJzOiBSZXNvdXJjZUlkZW50aWZpZXJzLFxuICAgIGNoZzogSW1wb3J0YWJsZVJlc291cmNlLFxuICApOiBQcm9taXNlPFJlc291cmNlSWRlbnRpZmllclByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSB0aGlzLmRlc2NyaWJlUmVzb3VyY2UoY2hnLmxvZ2ljYWxJZCk7XG5cbiAgICAvLyBTa2lwIHJlc291cmNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGltcG9ydGluZ1xuICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IGNoZy5yZXNvdXJjZURpZmYubmV3UmVzb3VyY2VUeXBlO1xuICAgIGlmIChyZXNvdXJjZVR5cGUgPT09IHVuZGVmaW5lZCB8fCAhKHJlc291cmNlVHlwZSBpbiByZXNvdXJjZUlkZW50aWZpZXJzKSkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hvc3Qubm90aWZ5KHdhcm4odGhpcy5hY3Rpb24sIGAke3Jlc291cmNlTmFtZX06IHVuc3VwcG9ydGVkIHJlc291cmNlIHR5cGUgJHtyZXNvdXJjZVR5cGV9LCBza2lwcGluZyBpbXBvcnQuYCkpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBpZFByb3BTZXRzID0gcmVzb3VyY2VJZGVudGlmaWVyc1tyZXNvdXJjZVR5cGVdO1xuXG4gICAgLy8gUmV0YWluIG9ubHkgbGl0ZXJhbCBzdHJpbmdzOiBzdHJpcCBwb3RlbnRpYWwgQ0ZOIGludHJpbnNpY3NcbiAgICBjb25zdCByZXNvdXJjZVByb3BzID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGNoZy5yZXNvdXJjZURlZmluaXRpb24uUHJvcGVydGllcyA/PyB7fSlcbiAgICAgIC5maWx0ZXIoKFtfLCB2XSkgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnKSkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAgIC8vIEZpbmQgcHJvcGVydHkgc2V0cyB0aGF0IGFyZSBmdWxseSBzYXRpc2ZpZWQgaW4gdGhlIHRlbXBsYXRlLCBhc2sgdGhlIHVzZXIgdG8gY29uZmlybSB0aGVtXG4gICAgY29uc3Qgc2F0aXNmaWVkUHJvcFNldHMgPSBpZFByb3BTZXRzLmZpbHRlcihwcyA9PiBwcy5ldmVyeShwID0+IHJlc291cmNlUHJvcHNbcF0pKTtcbiAgICBmb3IgKGNvbnN0IHNhdGlzZmllZFByb3BTZXQgb2Ygc2F0aXNmaWVkUHJvcFNldHMpIHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZVByb3BzID0gT2JqZWN0LmZyb21FbnRyaWVzKHNhdGlzZmllZFByb3BTZXQubWFwKHAgPT4gW3AsIHJlc291cmNlUHJvcHNbcF1dKSk7XG4gICAgICBjb25zdCBkaXNwbGF5Q2FuZGlkYXRlUHJvcHMgPSBmbXRkaWN0KGNhbmRpZGF0ZVByb3BzKTtcblxuICAgICAgaWYgKGF3YWl0IHByb21wdGx5LmNvbmZpcm0oXG4gICAgICAgIGAke2NoYWxrLmJsdWUocmVzb3VyY2VOYW1lKX0gKCR7cmVzb3VyY2VUeXBlfSk6IGltcG9ydCB3aXRoICR7Y2hhbGsueWVsbG93KGRpc3BsYXlDYW5kaWRhdGVQcm9wcyl9ICh5ZXMvbm8pIFtkZWZhdWx0OiB5ZXNdPyBgLFxuICAgICAgICB7IGRlZmF1bHQ6ICd5ZXMnIH0sXG4gICAgICApKSB7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGVQcm9wcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBnb3QgaGVyZSBhbmQgdGhlIHVzZXIgcmVqZWN0ZWQgYW55IGF2YWlsYWJsZSBpZGVudGlmaWVycywgdGhlbiBhcHBhcmVudGx5IHRoZXkgZG9uJ3Qgd2FudCB0aGUgcmVzb3VyY2UgYXQgYWxsXG4gICAgaWYgKHNhdGlzZmllZFByb3BTZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9Ib3N0Lm5vdGlmeShpbmZvKHRoaXMuYWN0aW9uLCBjaGFsay5ncmV5KGBTa2lwcGluZyBpbXBvcnQgb2YgJHtyZXNvdXJjZU5hbWV9YCkpKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gV2UgY2Fubm90IGF1dG8taW1wb3J0IHRoaXMsIGFzayB0aGUgdXNlciBmb3Igb25lIG9mIHRoZSBwcm9wc1xuICAgIC8vIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSBjYXNlcyBpcyB3aGF0IHdlIHByaW50OiBmb3IgbXVsdGlwbGUgcHJvcGVydGllcywgd2UgcHJpbnQgYSBwcmVhbWJsZVxuICAgIGNvbnN0IHByZWZpeCA9IGAke2NoYWxrLmJsdWUocmVzb3VyY2VOYW1lKX0gKCR7cmVzb3VyY2VUeXBlfSlgO1xuICAgIGxldCBwcmVhbWJsZTtcbiAgICBsZXQgcHJvbXB0UGF0dGVybjtcbiAgICBpZiAoaWRQcm9wU2V0cy5sZW5ndGggPiAxKSB7XG4gICAgICBwcmVhbWJsZSA9IGAke3ByZWZpeH06IGVudGVyIG9uZSBvZiAke2lkUHJvcFNldHMubWFwKHggPT4gY2hhbGsuYmx1ZSh4LmpvaW4oJysnKSkpLmpvaW4oJywgJyl9IHRvIGltcG9ydCAoYWxsIGVtcHR5IHRvIHNraXApYDtcbiAgICAgIHByb21wdFBhdHRlcm4gPSBgJHtwcmVmaXh9OiBlbnRlciAlYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbXB0UGF0dGVybiA9IGAke3ByZWZpeH06IGVudGVyICVgO1xuICAgIH1cblxuICAgIC8vIERvIHRoZSBpbnB1dCBsb29wIGhlcmVcbiAgICBpZiAocHJlYW1ibGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9Ib3N0Lm5vdGlmeShpbmZvKHRoaXMuYWN0aW9uLCBwcmVhbWJsZSkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGlkUHJvcHMgb2YgaWRQcm9wU2V0cykge1xuICAgICAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgaWRQcm9wIG9mIGlkUHJvcHMpIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHZhbHVlIGZyb20gdGhlIHRlbXBsYXRlLCB1c2UgaXQgYXMgZGVmYXVsdC4gVGhpcyB3aWxsIG9ubHkgYmUgYSBwYXJ0aWFsXG4gICAgICAgIC8vIGlkZW50aWZpZXIgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgZG9uZSB0aGUgaW1wb3J0IGFscmVhZHkgYWJvdmUuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHJlc291cmNlUHJvcHNbaWRQcm9wXSA/PyAnJztcblxuICAgICAgICBjb25zdCBwcm9tcHQgPSBbXG4gICAgICAgICAgcHJvbXB0UGF0dGVybi5yZXBsYWNlKC8lL2csIGNoYWxrLmJsdWUoaWRQcm9wKSksXG4gICAgICAgICAgZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICA/IGBbJHtkZWZhdWx0VmFsdWV9XWBcbiAgICAgICAgICAgIDogJyhlbXB0eSB0byBza2lwKScsXG4gICAgICAgIF0uam9pbignICcpICsgJzonO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHByb21wdGx5LnByb21wdChwcm9tcHQsXG4gICAgICAgICAgeyBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsIHRyaW06IHRydWUgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dFtpZFByb3BdID0gcmVzcG9uc2U7XG4gICAgICAgIC8vIEFsc28gc3RpY2sgdGhpcyBwcm9wZXJ0eSBpbnRvICdyZXNvdXJjZVByb3BzJywgc28gdGhhdCBpdCBtYXkgYmUgcmV1c2VkIGJ5IGEgc3Vic2VxdWVudCBxdWVzdGlvblxuICAgICAgICAvLyAoZm9yIGEgZGlmZmVyZW50IGNvbXBvdW5kIGlkZW50aWZpZXIgdGhhdCBpbnZvbHZlcyB0aGUgc2FtZSBwcm9wZXJ0eSkuIEp1c3QgYSBzbWFsbCBVWCBlbmhhbmNlbWVudC5cbiAgICAgICAgcmVzb3VyY2VQcm9wc1tpZFByb3BdID0gcmVzcG9uc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSB1c2VyIGdhdmUgaW5wdXRzIGZvciBhbGwgdmFsdWVzLCB3ZSBhcmUgY29tcGxldGVcbiAgICAgIGlmIChPYmplY3Qua2V5cyhpbnB1dCkubGVuZ3RoID09PSBpZFByb3BzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pb0hvc3Qubm90aWZ5KGluZm8odGhpcy5hY3Rpb24sIGNoYWxrLmdyZXkoYFNraXBwaW5nIGltcG9ydCBvZiAke3Jlc291cmNlTmFtZX1gKSkpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgaW50ZXJuYWwgXCJyZXNvdXJjZSBtYXBwaW5nXCIgc3RydWN0dXJlIHRvIENsb3VkRm9ybWF0aW9uIGFjY2VwdGVkIFwiUmVzb3VyY2VzVG9JbXBvcnRcIiBzdHJ1Y3R1cmVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbWFrZVJlc291cmNlc1RvSW1wb3J0KHJlc291cmNlTWFwOiBJbXBvcnRNYXApOiBQcm9taXNlPFJlc291cmNlc1RvSW1wb3J0PiB7XG4gICAgcmV0dXJuIHJlc291cmNlTWFwLmltcG9ydFJlc291cmNlcy5tYXAocmVzID0+ICh7XG4gICAgICBMb2dpY2FsUmVzb3VyY2VJZDogcmVzLmxvZ2ljYWxJZCxcbiAgICAgIFJlc291cmNlVHlwZTogcmVzLnJlc291cmNlRGlmZi5uZXdSZXNvdXJjZVR5cGUhLFxuICAgICAgUmVzb3VyY2VJZGVudGlmaWVyOiByZXNvdXJjZU1hcC5yZXNvdXJjZU1hcFtyZXMubG9naWNhbElkXSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBDbG91ZEZvcm1hdGlvbiBsb2dpY2FsIHJlc291cmNlIElEIHRvIENESyBjb25zdHJ1Y3QgdHJlZSBwYXRoXG4gICAqXG4gICAqIEBwYXJhbSBsb2dpY2FsSWQgQ2xvdWRGb3JtYXRpb24gbG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2UgKHRoZSBrZXkgaW4gdGhlIHRlbXBsYXRlJ3MgUmVzb3VyY2VzIHNlY3Rpb24pXG4gICAqIEByZXR1cm5zIEZvcndhcmQtc2xhc2ggc2VwYXJhdGVkIHBhdGggb2YgdGhlIHJlc291cmNlIGluIENESyBjb25zdHJ1Y3QgdHJlZSwgZS5nLiBNeVN0YWNrL015QnVja2V0L1Jlc291cmNlXG4gICAqL1xuICBwcml2YXRlIGRlc2NyaWJlUmVzb3VyY2UobG9naWNhbElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnRlbXBsYXRlPy5SZXNvdXJjZXM/Lltsb2dpY2FsSWRdPy5NZXRhZGF0YT8uWydhd3M6Y2RrOnBhdGgnXSA/PyBsb2dpY2FsSWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBDREtNZXRhZGF0YSBhbmQgT3V0cHV0cyBpbiB0aGUgdGVtcGxhdGUgc28gdGhhdCBvbmx5IHJlc291cmNlcyBmb3IgaW1wb3J0aW5nIGFyZSBsZWZ0LlxuICAgKiBAcmV0dXJucyB0ZW1wbGF0ZSB3aXRoIGltcG9ydCByZXNvdXJjZXMgb25seVxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVOb25JbXBvcnRSZXNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHJlbW92ZU5vbkltcG9ydFJlc291cmNlcyh0aGlzLnN0YWNrKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgQ0RLTWV0YWRhdGEgYW5kIE91dHB1dHMgaW4gdGhlIHRlbXBsYXRlIHNvIHRoYXQgb25seSByZXNvdXJjZXMgZm9yIGltcG9ydGluZyBhcmUgbGVmdC5cbiAqIEByZXR1cm5zIHRlbXBsYXRlIHdpdGggaW1wb3J0IHJlc291cmNlcyBvbmx5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVOb25JbXBvcnRSZXNvdXJjZXMoc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCkge1xuICBjb25zdCB0ZW1wbGF0ZSA9IHN0YWNrLnRlbXBsYXRlO1xuICBkZWxldGUgdGVtcGxhdGUuUmVzb3VyY2VzLkNES01ldGFkYXRhO1xuICBkZWxldGUgdGVtcGxhdGUuT3V0cHV0cztcbiAgcmV0dXJuIHRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IGEgcmVzb3VyY2UgaW4gdGhlIHRlbXBsYXRlIHRoYXQgaXMgaW1wb3J0YWJsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydGFibGVSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgbG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgZGVmaW5pdGlvbiBpbiB0aGUgbmV3IHRlbXBsYXRlXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZURlZmluaXRpb246IGFueTtcblxuICAvKipcbiAgICogVGhlIGRpZmYgYXMgcmVwb3J0ZWQgYnkgYGNsb3VkZm9ybWF0aW9uLWRpZmZgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VEaWZmOiBSZXNvdXJjZURpZmZlcmVuY2U7XG59XG5cbi8qKlxuICogVGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBleGVjdXRlIGFuIGltcG9ydCBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRNYXAge1xuICAvKipcbiAgICogTWFwcGluZyBsb2dpY2FsIElEcyB0byBwaHlzaWNhbCBuYW1lc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VNYXA6IFJlc291cmNlTWFwO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZWN0aW9uIG9mIHJlc291cmNlcyB3ZSBhcmUgYWN0dWFsbHkgaW1wb3J0aW5nXG4gICAqXG4gICAqIEZvciBlYWNoIG9mIHRoZSByZXNvdXJjZXMgaW4gdGhpcyBsaXN0LCB0aGVyZSBpcyBhIGNvcnJlc3BvbmRpbmcgZW50cnkgaW5cbiAgICogdGhlIGByZXNvdXJjZU1hcGAgbWFwLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1wb3J0UmVzb3VyY2VzOiBJbXBvcnRhYmxlUmVzb3VyY2VbXTtcbn1cblxuZnVuY3Rpb24gZm10ZGljdDxBPih4czogUmVjb3JkPHN0cmluZywgQT4pIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHhzKS5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogQWRkIGEgZGVmYXVsdCBgRGVsZXRpb25Qb2xpY3lgIHBvbGljeS5cbiAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCB0byAnUmV0YWluJywgdG8gbG93ZXIgcmlzayBvZiB1bmludGVudGlvbmFsbHlcbiAqIGRlbGV0aW5nIHN0YXRlZnVsIHJlc291cmNlcyBpbiB0aGUgcHJvY2VzcyBvZiBpbXBvcnRpbmcgdG8gQ0RLLlxuICovXG5mdW5jdGlvbiBhZGREZWZhdWx0RGVsZXRpb25Qb2xpY3kocmVzb3VyY2U6IGFueSk6IGFueSB7XG4gIGlmIChyZXNvdXJjZS5EZWxldGlvblBvbGljeSkgeyByZXR1cm4gcmVzb3VyY2U7IH1cblxuICByZXR1cm4ge1xuICAgIC4uLnJlc291cmNlLFxuICAgIERlbGV0aW9uUG9saWN5OiAnUmV0YWluJyxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNjb3ZlckltcG9ydGFibGVSZXNvdXJjZXNSZXN1bHQge1xuICByZWFkb25seSBhZGRpdGlvbnM6IEltcG9ydGFibGVSZXNvdXJjZVtdO1xuICByZWFkb25seSBoYXNOb25BZGRpdGlvbnM6IGJvb2xlYW47XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './importer';
2
+ export * from './migrator';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./importer"), exports);
18
+ __exportStar(require("./migrator"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQTJCO0FBQzNCLDZDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW1wb3J0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9taWdyYXRvcic7XG4iXX0=
@@ -1,13 +1,17 @@
1
1
  import type * as cxapi from '@aws-cdk/cx-api';
2
- import { StackCollection } from './api/cxapp/cloud-assembly';
3
- import { Deployments, ResourcesToImport } from './api/deployments';
4
- import { DeployOptions } from './cli/cdk-toolkit';
2
+ import { ImportDeploymentOptions } from './importer';
3
+ import type { IIoHost, ToolkitAction } from '../../toolkit/cli-io-host';
4
+ import { StackCollection } from '../cxapp/cloud-assembly';
5
+ import { Deployments, ResourcesToImport } from '../deployments';
5
6
  export interface ResourceMigratorProps {
6
7
  deployments: Deployments;
8
+ ioHost: IIoHost;
9
+ action: ToolkitAction;
7
10
  }
8
- type ResourceMigratorOptions = Pick<DeployOptions, 'roleArn' | 'toolkitStackName' | 'deploymentMethod' | 'progress' | 'rollback'>;
9
11
  export declare class ResourceMigrator {
10
12
  private readonly props;
13
+ private readonly ioHost;
14
+ private readonly action;
11
15
  constructor(props: ResourceMigratorProps);
12
16
  /**
13
17
  * Checks to see if a migrate.json file exists. If it does and the source is either `filepath` or
@@ -15,11 +19,10 @@ export declare class ResourceMigrator {
15
19
  * migrated to the stack using an IMPORT changeset. The normal deployment will resume after this is complete
16
20
  * to add back in any outputs and the CDKMetadata.
17
21
  */
18
- tryMigrateResources(stacks: StackCollection, options: ResourceMigratorOptions): Promise<void>;
22
+ tryMigrateResources(stacks: StackCollection, options: ImportDeploymentOptions): Promise<void>;
19
23
  /**
20
24
  * Creates a new stack with just the resources to be migrated
21
25
  */
22
26
  private performResourceMigration;
23
27
  tryGetResources(environment: cxapi.Environment): Promise<ResourcesToImport | undefined>;
24
28
  }
25
- export {};