@aws-cdk/toolkit-lib 0.4.0 → 1.1.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 (72) hide show
  1. package/README.md +65 -51
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/actions/diff/private/helpers.d.ts +2 -2
  5. package/lib/actions/diff/private/helpers.js +3 -3
  6. package/lib/actions/drift/index.d.ts +4 -2
  7. package/lib/actions/drift/index.js +1 -1
  8. package/lib/actions/refactor/index.d.ts +25 -21
  9. package/lib/actions/refactor/index.js +54 -1
  10. package/lib/actions/watch/index.d.ts +26 -3
  11. package/lib/actions/watch/index.js +1 -1
  12. package/lib/actions/watch/private/helpers.d.ts +6 -4
  13. package/lib/actions/watch/private/helpers.js +37 -6
  14. package/lib/api/aws-auth/account-cache.d.ts +1 -1
  15. package/lib/api/aws-auth/account-cache.js +2 -2
  16. package/lib/api/aws-auth/awscli-compatible.d.ts +1 -1
  17. package/lib/api/aws-auth/awscli-compatible.js +2 -2
  18. package/lib/api/cloud-assembly/environment.d.ts +1 -1
  19. package/lib/api/cloud-assembly/environment.js +2 -2
  20. package/lib/api/cloud-assembly/private/prepare-source.js +2 -2
  21. package/lib/api/cloudformation/template-body-parameter.d.ts +2 -2
  22. package/lib/api/cloudformation/template-body-parameter.js +3 -3
  23. package/lib/api/deployments/cfn-api.d.ts +8 -8
  24. package/lib/api/deployments/cfn-api.js +15 -15
  25. package/lib/api/drift/drift-formatter.d.ts +4 -4
  26. package/lib/api/drift/drift-formatter.js +5 -5
  27. package/lib/api/hotswap/hotswap-deployments.js +2 -2
  28. package/lib/api/io/private/level-priority.d.ts +2 -2
  29. package/lib/api/io/private/level-priority.js +3 -3
  30. package/lib/api/io/toolkit-action.d.ts +1 -1
  31. package/lib/api/io/toolkit-action.js +1 -1
  32. package/lib/api/logs-monitor/logs-monitor.d.ts +1 -0
  33. package/lib/api/logs-monitor/logs-monitor.js +5 -3
  34. package/lib/api/notices/notices.d.ts +1 -1
  35. package/lib/api/notices/notices.js +2 -2
  36. package/lib/api/refactoring/context.d.ts +22 -0
  37. package/lib/api/refactoring/context.js +129 -0
  38. package/lib/api/refactoring/exclude.d.ts +11 -6
  39. package/lib/api/refactoring/exclude.js +14 -10
  40. package/lib/api/refactoring/execution.d.ts +1 -1
  41. package/lib/api/refactoring/execution.js +50 -25
  42. package/lib/api/refactoring/index.d.ts +7 -28
  43. package/lib/api/refactoring/index.js +23 -146
  44. package/lib/api/resource-import/importer.d.ts +5 -5
  45. package/lib/api/resource-import/importer.js +6 -6
  46. package/lib/api/resource-metadata/resource-metadata.d.ts +2 -2
  47. package/lib/api/resource-metadata/resource-metadata.js +3 -3
  48. package/lib/context-providers/cc-api-provider.js +23 -14
  49. package/lib/context-providers/ssm-parameters.d.ts +4 -4
  50. package/lib/context-providers/ssm-parameters.js +5 -5
  51. package/lib/index_bg.wasm +0 -0
  52. package/lib/toolkit/private/index.d.ts +2 -2
  53. package/lib/toolkit/private/index.js +3 -3
  54. package/lib/toolkit/toolkit-error.d.ts +16 -2
  55. package/lib/toolkit/toolkit-error.js +33 -9
  56. package/lib/toolkit/toolkit.d.ts +15 -22
  57. package/lib/toolkit/toolkit.js +94 -68
  58. package/lib/util/bool.d.ts +1 -1
  59. package/lib/util/bool.js +2 -2
  60. package/lib/util/bytes.d.ts +2 -2
  61. package/lib/util/bytes.js +3 -3
  62. package/lib/util/cloudformation.d.ts +2 -2
  63. package/lib/util/cloudformation.js +3 -3
  64. package/lib/util/format-error.d.ts +1 -1
  65. package/lib/util/format-error.js +6 -2
  66. package/lib/util/net.d.ts +1 -1
  67. package/lib/util/net.js +2 -2
  68. package/lib/util/objects.d.ts +3 -3
  69. package/lib/util/objects.js +4 -4
  70. package/lib/util/yaml-cfn.d.ts +2 -2
  71. package/lib/util/yaml-cfn.js +3 -3
  72. package/package.json +16 -16
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RefactoringContext = void 0;
4
+ const cloudformation_1 = require("./cloudformation");
5
+ const digest_1 = require("./digest");
6
+ const toolkit_error_1 = require("../../toolkit/toolkit-error");
7
+ /**
8
+ * Encapsulates the information for refactoring resources in a single environment.
9
+ */
10
+ class RefactoringContext {
11
+ _mappings = [];
12
+ ambiguousMoves = [];
13
+ environment;
14
+ constructor(props) {
15
+ this.environment = props.environment;
16
+ if (props.mappings != null) {
17
+ this._mappings = props.mappings;
18
+ }
19
+ else {
20
+ const moves = resourceMoves(props.deployedStacks, props.localStacks);
21
+ this.ambiguousMoves = ambiguousMoves(moves);
22
+ if (!this.isAmbiguous) {
23
+ this._mappings = resourceMappings(resourceMoves(props.deployedStacks, props.localStacks), props.filteredStacks);
24
+ }
25
+ }
26
+ }
27
+ get isAmbiguous() {
28
+ return this.ambiguousMoves.length > 0;
29
+ }
30
+ get ambiguousPaths() {
31
+ return this.ambiguousMoves.map(([a, b]) => [convert(a), convert(b)]);
32
+ function convert(locations) {
33
+ return locations.map((l) => l.toPath());
34
+ }
35
+ }
36
+ get mappings() {
37
+ if (this.isAmbiguous) {
38
+ throw new toolkit_error_1.ToolkitError('Cannot access mappings when there are ambiguous resource moves. Please resolve the ambiguity first.');
39
+ }
40
+ return this._mappings;
41
+ }
42
+ }
43
+ exports.RefactoringContext = RefactoringContext;
44
+ function resourceMoves(before, after) {
45
+ return Object.values(removeUnmovedResources(zip(groupByKey(resourceDigests(before)), groupByKey(resourceDigests(after)))));
46
+ }
47
+ function removeUnmovedResources(m) {
48
+ const result = {};
49
+ for (const [hash, [before, after]] of Object.entries(m)) {
50
+ const common = before.filter((b) => after.some((a) => a.equalTo(b)));
51
+ result[hash] = [
52
+ before.filter((b) => !common.some((c) => b.equalTo(c))),
53
+ after.filter((a) => !common.some((c) => a.equalTo(c))),
54
+ ];
55
+ }
56
+ return result;
57
+ }
58
+ /**
59
+ * For each hash, identifying a single resource, zip the two lists of locations,
60
+ * producing a resource move
61
+ */
62
+ function zip(m1, m2) {
63
+ const result = {};
64
+ for (const [hash, locations] of Object.entries(m1)) {
65
+ if (hash in m2) {
66
+ result[hash] = [locations, m2[hash]];
67
+ }
68
+ else {
69
+ result[hash] = [locations, []];
70
+ }
71
+ }
72
+ for (const [hash, locations] of Object.entries(m2)) {
73
+ if (!(hash in m1)) {
74
+ result[hash] = [[], locations];
75
+ }
76
+ }
77
+ return result;
78
+ }
79
+ function groupByKey(entries) {
80
+ const result = {};
81
+ for (const [hash, location] of entries) {
82
+ if (hash in result) {
83
+ result[hash].push(location);
84
+ }
85
+ else {
86
+ result[hash] = [location];
87
+ }
88
+ }
89
+ return result;
90
+ }
91
+ /**
92
+ * Computes a list of pairs [digest, location] for each resource in the stack.
93
+ */
94
+ function resourceDigests(stacks) {
95
+ // index stacks by name
96
+ const stacksByName = new Map();
97
+ for (const stack of stacks) {
98
+ stacksByName.set(stack.stackName, stack);
99
+ }
100
+ const digests = (0, digest_1.computeResourceDigests)(stacks);
101
+ return Object.entries(digests).map(([loc, digest]) => {
102
+ const [stackName, logicalId] = loc.split('.');
103
+ const location = new cloudformation_1.ResourceLocation(stacksByName.get(stackName), logicalId);
104
+ return [digest, location];
105
+ });
106
+ }
107
+ function ambiguousMoves(movements) {
108
+ // A move is considered ambiguous if two conditions are met:
109
+ // 1. Both sides have at least one element (otherwise, it's just addition or deletion)
110
+ // 2. At least one side has more than one element
111
+ return movements
112
+ .filter(([pre, post]) => pre.length > 0 && post.length > 0)
113
+ .filter(([pre, post]) => pre.length > 1 || post.length > 1);
114
+ }
115
+ function resourceMappings(movements, stacks) {
116
+ const stacksPredicate = stacks == null
117
+ ? () => true
118
+ : (m) => {
119
+ // Any movement that involves one of the selected stacks (either moving from or to)
120
+ // is considered a candidate for refactoring.
121
+ const stackNames = [m.source.stack.stackName, m.destination.stack.stackName];
122
+ return stacks.some((stack) => stackNames.includes(stack.stackName));
123
+ };
124
+ return movements
125
+ .filter(([pre, post]) => pre.length === 1 && post.length === 1 && !pre[0].equalTo(post[0]))
126
+ .map(([pre, post]) => new cloudformation_1.ResourceMapping(pre[0], post[0]))
127
+ .filter(stacksPredicate);
128
+ }
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscURBQXFFO0FBQ3JFLHFDQUFrRDtBQUNsRCwrREFBMkQ7QUFpQjNEOztHQUVHO0FBQ0gsTUFBYSxrQkFBa0I7SUFDWixTQUFTLEdBQXNCLEVBQUUsQ0FBQztJQUNsQyxjQUFjLEdBQW1CLEVBQUUsQ0FBQztJQUNyQyxXQUFXLENBQWM7SUFFekMsWUFBWSxLQUE2QjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEgsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVB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QUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksZ0NBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudmlyb25tZW50IH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25TdGFjayB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgUmVzb3VyY2VMb2NhdGlvbiwgUmVzb3VyY2VNYXBwaW5nIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBjb21wdXRlUmVzb3VyY2VEaWdlc3RzIH0gZnJvbSAnLi9kaWdlc3QnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2V0IG9mIHBvc3NpYmxlIG1vdmVzIG9mIGEgcmVzb3VyY2UgZnJvbSBvbmUgbG9jYXRpb25cbiAqIHRvIGFub3RoZXIuIEluIHRoZSBpZGVhbCBjYXNlLCB0aGVyZSBpcyBvbmx5IG9uZSBzb3VyY2UgYW5kIG9ubHkgb25lXG4gKiBkZXN0aW5hdGlvbi5cbiAqL1xudHlwZSBSZXNvdXJjZU1vdmUgPSBbUmVzb3VyY2VMb2NhdGlvbltdLCBSZXNvdXJjZUxvY2F0aW9uW11dO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZmFjdG9yTWFuYWdlck9wdGlvbnMge1xuICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQ7XG4gIGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIGRlcGxveWVkU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIG1hcHBpbmdzPzogUmVzb3VyY2VNYXBwaW5nW107XG4gIGZpbHRlcmVkU3RhY2tzPzogQ2xvdWRGb3JtYXRpb25TdGFja1tdO1xufVxuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyB0aGUgaW5mb3JtYXRpb24gZm9yIHJlZmFjdG9yaW5nIHJlc291cmNlcyBpbiBhIHNpbmdsZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlZmFjdG9yaW5nQ29udGV4dCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hcHBpbmdzOiBSZXNvdXJjZU1hcHBpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGFtYmlndW91c01vdmVzOiBSZXNvdXJjZU1vdmVbXSA9IFtdO1xuICBwdWJsaWMgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSZWZhY3Rvck1hbmFnZXJPcHRpb25zKSB7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHByb3BzLmVudmlyb25tZW50O1xuICAgIGlmIChwcm9wcy5tYXBwaW5ncyAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9tYXBwaW5ncyA9IHByb3BzLm1hcHBpbmdzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtb3ZlcyA9IHJlc291cmNlTW92ZXMocHJvcHMuZGVwbG95ZWRTdGFja3MsIHByb3BzLmxvY2FsU3RhY2tzKTtcbiAgICAgIHRoaXMuYW1iaWd1b3VzTW92ZXMgPSBhbWJpZ3VvdXNNb3Zlcyhtb3Zlcyk7XG5cbiAgICAgIGlmICghdGhpcy5pc0FtYmlndW91cykge1xuICAgICAgICB0aGlzLl9tYXBwaW5ncyA9IHJlc291cmNlTWFwcGluZ3MocmVzb3VyY2VNb3Zlcyhwcm9wcy5kZXBsb3llZFN0YWNrcywgcHJvcHMubG9jYWxTdGFja3MpLCBwcm9wcy5maWx0ZXJlZFN0YWNrcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBpc0FtYmlndW91cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbWJpZ3VvdXNNb3Zlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHVibGljIGdldCBhbWJpZ3VvdXNQYXRocygpOiBbc3RyaW5nW10sIHN0cmluZ1tdXVtdIHtcbiAgICByZXR1cm4gdGhpcy5hbWJpZ3VvdXNNb3Zlcy5tYXAoKFthLCBiXSkgPT4gW2NvbnZlcnQoYSksIGNvbnZlcnQoYildKTtcblxuICAgIGZ1bmN0aW9uIGNvbnZlcnQobG9jYXRpb25zOiBSZXNvdXJjZUxvY2F0aW9uW10pOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gbG9jYXRpb25zLm1hcCgobCkgPT4gbC50b1BhdGgoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBtYXBwaW5ncygpOiBSZXNvdXJjZU1hcHBpbmdbXSB7XG4gICAgaWYgKHRoaXMuaXNBbWJpZ3VvdXMpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICdDYW5ub3QgYWNjZXNzIG1hcHBpbmdzIHdoZW4gdGhlcmUgYXJlIGFtYmlndW91cyByZXNvdXJjZSBtb3Zlcy4gUGxlYXNlIHJlc29sdmUgdGhlIGFtYmlndWl0eSBmaXJzdC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX21hcHBpbmdzO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlTW92ZXMoYmVmb3JlOiBDbG91ZEZvcm1hdGlvblN0YWNrW10sIGFmdGVyOiBDbG91ZEZvcm1hdGlvblN0YWNrW10pOiBSZXNvdXJjZU1vdmVbXSB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKFxuICAgIHJlbW92ZVVubW92ZWRSZXNvdXJjZXMoemlwKGdyb3VwQnlLZXkocmVzb3VyY2VEaWdlc3RzKGJlZm9yZSkpLCBncm91cEJ5S2V5KHJlc291cmNlRGlnZXN0cyhhZnRlcikpKSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVVubW92ZWRSZXNvdXJjZXMobTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VNb3ZlPik6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZT4gPSB7fTtcbiAgZm9yIChjb25zdCBbaGFzaCwgW2JlZm9yZSwgYWZ0ZXJdXSBvZiBPYmplY3QuZW50cmllcyhtKSkge1xuICAgIGNvbnN0IGNvbW1vbiA9IGJlZm9yZS5maWx0ZXIoKGIpID0+IGFmdGVyLnNvbWUoKGEpID0+IGEuZXF1YWxUbyhiKSkpO1xuICAgIHJlc3VsdFtoYXNoXSA9IFtcbiAgICAgIGJlZm9yZS5maWx0ZXIoKGIpID0+ICFjb21tb24uc29tZSgoYykgPT4gYi5lcXVhbFRvKGMpKSksXG4gICAgICBhZnRlci5maWx0ZXIoKGEpID0+ICFjb21tb24uc29tZSgoYykgPT4gYS5lcXVhbFRvKGMpKSksXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRm9yIGVhY2ggaGFzaCwgaWRlbnRpZnlpbmcgYSBzaW5nbGUgcmVzb3VyY2UsIHppcCB0aGUgdHdvIGxpc3RzIG9mIGxvY2F0aW9ucyxcbiAqIHByb2R1Y2luZyBhIHJlc291cmNlIG1vdmVcbiAqL1xuZnVuY3Rpb24gemlwKFxuICBtMTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPixcbiAgbTI6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTG9jYXRpb25bXT4sXG4pOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+ID0ge307XG5cbiAgZm9yIChjb25zdCBbaGFzaCwgbG9jYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhtMSkpIHtcbiAgICBpZiAoaGFzaCBpbiBtMikge1xuICAgICAgcmVzdWx0W2hhc2hdID0gW2xvY2F0aW9ucywgbTJbaGFzaF1dO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbbG9jYXRpb25zLCBbXV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbaGFzaCwgbG9jYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhtMikpIHtcbiAgICBpZiAoIShoYXNoIGluIG0xKSkge1xuICAgICAgcmVzdWx0W2hhc2hdID0gW1tdLCBsb2NhdGlvbnNdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdyb3VwQnlLZXk8QT4oZW50cmllczogW3N0cmluZywgQV1bXSk6IFJlY29yZDxzdHJpbmcsIEFbXT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFbXT4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFtoYXNoLCBsb2NhdGlvbl0gb2YgZW50cmllcykge1xuICAgIGlmIChoYXNoIGluIHJlc3VsdCkge1xuICAgICAgcmVzdWx0W2hhc2hdLnB1c2gobG9jYXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbbG9jYXRpb25dO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgYSBsaXN0IG9mIHBhaXJzIFtkaWdlc3QsIGxvY2F0aW9uXSBmb3IgZWFjaCByZXNvdXJjZSBpbiB0aGUgc3RhY2suXG4gKi9cbmZ1bmN0aW9uIHJlc291cmNlRGlnZXN0cyhzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSk6IFtzdHJpbmcsIFJlc291cmNlTG9jYXRpb25dW10ge1xuICAvLyBpbmRleCBzdGFja3MgYnkgbmFtZVxuICBjb25zdCBzdGFja3NCeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgQ2xvdWRGb3JtYXRpb25TdGFjaz4oKTtcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3MpIHtcbiAgICBzdGFja3NCeU5hbWUuc2V0KHN0YWNrLnN0YWNrTmFtZSwgc3RhY2spO1xuICB9XG5cbiAgY29uc3QgZGlnZXN0cyA9IGNvbXB1dGVSZXNvdXJjZURpZ2VzdHMoc3RhY2tzKTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGlnZXN0cykubWFwKChbbG9jLCBkaWdlc3RdKSA9PiB7XG4gICAgY29uc3QgW3N0YWNrTmFtZSwgbG9naWNhbElkXSA9IGxvYy5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uID0gbmV3IFJlc291cmNlTG9jYXRpb24oc3RhY2tzQnlOYW1lLmdldChzdGFja05hbWUpISwgbG9naWNhbElkKTtcbiAgICByZXR1cm4gW2RpZ2VzdCwgbG9jYXRpb25dO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYW1iaWd1b3VzTW92ZXMobW92ZW1lbnRzOiBSZXNvdXJjZU1vdmVbXSkge1xuICAvLyBBIG1vdmUgaXMgY29uc2lkZXJlZCBhbWJpZ3VvdXMgaWYgdHdvIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAgLy8gIDEuIEJvdGggc2lkZXMgaGF2ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCAob3RoZXJ3aXNlLCBpdCdzIGp1c3QgYWRkaXRpb24gb3IgZGVsZXRpb24pXG4gIC8vICAyLiBBdCBsZWFzdCBvbmUgc2lkZSBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50XG4gIHJldHVybiBtb3ZlbWVudHNcbiAgICAuZmlsdGVyKChbcHJlLCBwb3N0XSkgPT4gcHJlLmxlbmd0aCA+IDAgJiYgcG9zdC5sZW5ndGggPiAwKVxuICAgIC5maWx0ZXIoKFtwcmUsIHBvc3RdKSA9PiBwcmUubGVuZ3RoID4gMSB8fCBwb3N0Lmxlbmd0aCA+IDEpO1xufVxuXG5mdW5jdGlvbiByZXNvdXJjZU1hcHBpbmdzKG1vdmVtZW50czogUmVzb3VyY2VNb3ZlW10sIHN0YWNrcz86IENsb3VkRm9ybWF0aW9uU3RhY2tbXSk6IFJlc291cmNlTWFwcGluZ1tdIHtcbiAgY29uc3Qgc3RhY2tzUHJlZGljYXRlID1cbiAgICBzdGFja3MgPT0gbnVsbFxuICAgICAgPyAoKSA9PiB0cnVlXG4gICAgICA6IChtOiBSZXNvdXJjZU1hcHBpbmcpID0+IHtcbiAgICAgICAgLy8gQW55IG1vdmVtZW50IHRoYXQgaW52b2x2ZXMgb25lIG9mIHRoZSBzZWxlY3RlZCBzdGFja3MgKGVpdGhlciBtb3ZpbmcgZnJvbSBvciB0bylcbiAgICAgICAgLy8gaXMgY29uc2lkZXJlZCBhIGNhbmRpZGF0ZSBmb3IgcmVmYWN0b3JpbmcuXG4gICAgICAgIGNvbnN0IHN0YWNrTmFtZXMgPSBbbS5zb3VyY2Uuc3RhY2suc3RhY2tOYW1lLCBtLmRlc3RpbmF0aW9uLnN0YWNrLnN0YWNrTmFtZV07XG4gICAgICAgIHJldHVybiBzdGFja3Muc29tZSgoc3RhY2spID0+IHN0YWNrTmFtZXMuaW5jbHVkZXMoc3RhY2suc3RhY2tOYW1lKSk7XG4gICAgICB9O1xuXG4gIHJldHVybiBtb3ZlbWVudHNcbiAgICAuZmlsdGVyKChbcHJlLCBwb3N0XSkgPT4gcHJlLmxlbmd0aCA9PT0gMSAmJiBwb3N0Lmxlbmd0aCA9PT0gMSAmJiAhcHJlWzBdLmVxdWFsVG8ocG9zdFswXSkpXG4gICAgLm1hcCgoW3ByZSwgcG9zdF0pID0+IG5ldyBSZXNvdXJjZU1hcHBpbmcocHJlWzBdLCBwb3N0WzBdKSlcbiAgICAuZmlsdGVyKHN0YWNrc1ByZWRpY2F0ZSk7XG59XG4iXX0=
@@ -2,28 +2,33 @@ import type { AssemblyManifest } from '@aws-cdk/cloud-assembly-schema';
2
2
  import type { ResourceLocation } from './cloudformation';
3
3
  export interface ExcludeList {
4
4
  isExcluded(location: ResourceLocation): boolean;
5
+ union(other: ExcludeList): ExcludeList;
5
6
  }
6
- export declare class ManifestExcludeList implements ExcludeList {
7
+ declare abstract class AbstractExcludeList implements ExcludeList {
8
+ abstract isExcluded(location: ResourceLocation): boolean;
9
+ union(other: ExcludeList): ExcludeList;
10
+ }
11
+ export declare class ManifestExcludeList extends AbstractExcludeList {
7
12
  private readonly excludedLocations;
8
13
  constructor(manifest: AssemblyManifest);
9
14
  private getExcludedLocations;
10
15
  isExcluded(location: ResourceLocation): boolean;
11
16
  }
12
- export declare class InMemoryExcludeList implements ExcludeList {
17
+ export declare class InMemoryExcludeList extends AbstractExcludeList {
13
18
  private readonly excludedLocations;
14
19
  private readonly excludedPaths;
15
20
  constructor(items: string[]);
16
21
  isExcluded(location: ResourceLocation): boolean;
17
22
  }
18
- export declare class UnionExcludeList implements ExcludeList {
23
+ export declare class UnionExcludeList extends AbstractExcludeList {
19
24
  private readonly excludeLists;
20
25
  constructor(excludeLists: ExcludeList[]);
21
26
  isExcluded(location: ResourceLocation): boolean;
22
27
  }
23
- export declare class NeverExclude implements ExcludeList {
28
+ export declare class NeverExclude extends AbstractExcludeList {
24
29
  isExcluded(_location: ResourceLocation): boolean;
25
30
  }
26
- export declare class AlwaysExclude implements ExcludeList {
31
+ export declare class AlwaysExclude extends AbstractExcludeList {
27
32
  isExcluded(_location: ResourceLocation): boolean;
28
33
  }
29
- export declare function fromManifestAndExclusionList(manifest: AssemblyManifest, exclude?: string[]): ExcludeList;
34
+ export {};
@@ -1,11 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AlwaysExclude = exports.NeverExclude = exports.UnionExcludeList = exports.InMemoryExcludeList = exports.ManifestExcludeList = void 0;
4
- exports.fromManifestAndExclusionList = fromManifestAndExclusionList;
5
4
  const cloud_assembly_schema_1 = require("@aws-cdk/cloud-assembly-schema");
6
- class ManifestExcludeList {
5
+ class AbstractExcludeList {
6
+ union(other) {
7
+ return new UnionExcludeList([this, other]);
8
+ }
9
+ }
10
+ class ManifestExcludeList extends AbstractExcludeList {
7
11
  excludedLocations;
8
12
  constructor(manifest) {
13
+ super();
9
14
  this.excludedLocations = this.getExcludedLocations(manifest);
10
15
  }
11
16
  getExcludedLocations(asmManifest) {
@@ -34,10 +39,11 @@ class ManifestExcludeList {
34
39
  }
35
40
  }
36
41
  exports.ManifestExcludeList = ManifestExcludeList;
37
- class InMemoryExcludeList {
42
+ class InMemoryExcludeList extends AbstractExcludeList {
38
43
  excludedLocations;
39
44
  excludedPaths;
40
45
  constructor(items) {
46
+ super();
41
47
  this.excludedLocations = [];
42
48
  this.excludedPaths = [];
43
49
  if (items.length === 0) {
@@ -66,9 +72,10 @@ class InMemoryExcludeList {
66
72
  }
67
73
  }
68
74
  exports.InMemoryExcludeList = InMemoryExcludeList;
69
- class UnionExcludeList {
75
+ class UnionExcludeList extends AbstractExcludeList {
70
76
  excludeLists;
71
77
  constructor(excludeLists) {
78
+ super();
72
79
  this.excludeLists = excludeLists;
73
80
  }
74
81
  isExcluded(location) {
@@ -76,19 +83,16 @@ class UnionExcludeList {
76
83
  }
77
84
  }
78
85
  exports.UnionExcludeList = UnionExcludeList;
79
- class NeverExclude {
86
+ class NeverExclude extends AbstractExcludeList {
80
87
  isExcluded(_location) {
81
88
  return false;
82
89
  }
83
90
  }
84
91
  exports.NeverExclude = NeverExclude;
85
- class AlwaysExclude {
92
+ class AlwaysExclude extends AbstractExcludeList {
86
93
  isExcluded(_location) {
87
94
  return true;
88
95
  }
89
96
  }
90
97
  exports.AlwaysExclude = AlwaysExclude;
91
- function fromManifestAndExclusionList(manifest, exclude) {
92
- return new UnionExcludeList([new ManifestExcludeList(manifest), new InMemoryExcludeList(exclude ?? [])]);
93
- }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4Y2x1ZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNEdBLG9FQUVDO0FBN0dELDBFQUF5RjtBQVF6RixNQUFhLG1CQUFtQjtJQUNiLGlCQUFpQixDQUF3QjtJQUUxRCxZQUFZLFFBQTBCO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFdBQTZCO1FBQ3hELCtFQUErRTtRQUMvRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUN2RSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG9DQUFZLENBQUMsd0JBQXdCLENBQzNFLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUN0RCx5RUFBeUU7aUJBQ3hFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssaURBQXlCLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQ3pHO2dCQUNELCtDQUErQztpQkFDOUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2YsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUks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LENBQUMsU0FBMkI7UUFDcEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFKRCxvQ0FJQztBQUVELE1BQWEsYUFBYTtJQUN4QixVQUFVLENBQUMsU0FBMkI7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFKRCxzQ0FJQztBQUVELFNBQWdCLDRCQUE0QixDQUFDLFFBQTBCLEVBQUUsT0FBa0I7SUFDekYsT0FBTyxJQUFJLGdCQUFnQixDQUFDLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLG1CQUFtQixDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0csQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXNzZW1ibHlNYW5pZmVzdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgeyBBcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLCBBcnRpZmFjdFR5cGUgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUxvY2F0aW9uIGFzIENmblJlc291cmNlTG9jYXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUxvY2F0aW9uIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjbHVkZUxpc3Qge1xuICBpc0V4Y2x1ZGVkKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIE1hbmlmZXN0RXhjbHVkZUxpc3QgaW1wbGVtZW50cyBFeGNsdWRlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZWRMb2NhdGlvbnM6IENmblJlc291cmNlTG9jYXRpb25bXTtcblxuICBjb25zdHJ1Y3RvcihtYW5pZmVzdDogQXNzZW1ibHlNYW5pZmVzdCkge1xuICAgIHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMgPSB0aGlzLmdldEV4Y2x1ZGVkTG9jYXRpb25zKG1hbmlmZXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhjbHVkZWRMb2NhdGlvbnMoYXNtTWFuaWZlc3Q6IEFzc2VtYmx5TWFuaWZlc3QpOiBDZm5SZXNvdXJjZUxvY2F0aW9uW10ge1xuICAgIC8vIEZpcnN0LCB3ZSBuZWVkIHRvIGZpbHRlciB0aGUgYXJ0aWZhY3RzIHRvIG9ubHkgaW5jbHVkZSBDbG91ZEZvcm1hdGlvbiBzdGFja3NcbiAgICBjb25zdCBzdGFja01hbmlmZXN0cyA9IE9iamVjdC5lbnRyaWVzKGFzbU1hbmlmZXN0LmFydGlmYWN0cyA/PyB7fSkuZmlsdGVyKFxuICAgICAgKFtfLCBtYW5pZmVzdF0pID0+IG1hbmlmZXN0LnR5cGUgPT09IEFydGlmYWN0VHlwZS5BV1NfQ0xPVURGT1JNQVRJT05fU1RBQ0ssXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdDogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdID0gW107XG4gICAgZm9yIChsZXQgW3N0YWNrTmFtZSwgbWFuaWZlc3RdIG9mIHN0YWNrTWFuaWZlc3RzKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbnMgPSBPYmplY3QudmFsdWVzKG1hbmlmZXN0Lm1ldGFkYXRhID8/IHt9KVxuICAgICAgICAvLyBUaGVuIHBpY2sgb25seSB0aGUgcmVzb3VyY2VzIGluIGVhY2ggc3RhY2sgbWFya2VkIHdpdGggRE9fTk9UX1JFRkFDVE9SXG4gICAgICAgIC5maWx0ZXIoKGVudHJpZXMpID0+XG4gICAgICAgICAgZW50cmllcy5zb21lKChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5ET19OT1RfUkVGQUNUT1IgJiYgZW50cnkuZGF0YSA9PT0gdHJ1ZSksXG4gICAgICAgIClcbiAgICAgICAgLy8gRmluYWxseSwgZ2V0IHRoZSBsb2dpY2FsIElEIG9mIGVhY2ggcmVzb3VyY2VcbiAgICAgICAgLm1hcCgoZW50cmllcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvZ2ljYWxJZEVudHJ5ID0gZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5MT0dJQ0FMX0lEKTtcbiAgICAgICAgICBjb25zdCBsb2NhdGlvbjogQ2ZuUmVzb3VyY2VMb2NhdGlvbiA9IHtcbiAgICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6IGxvZ2ljYWxJZEVudHJ5IS5kYXRhISBhcyBzdHJpbmcsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgIH0pO1xuICAgICAgcmVzdWx0LnB1c2goLi4ubG9jYXRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leGNsdWRlZExvY2F0aW9ucy5zb21lKFxuICAgICAgKGxvYykgPT4gbG9jLlN0YWNrTmFtZSA9PT0gbG9jYXRpb24uc3RhY2suc3RhY2tOYW1lICYmIGxvYy5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9jYXRpb24ubG9naWNhbFJlc291cmNlSWQsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5NZW1vcnlFeGNsdWRlTGlzdCBpbXBsZW1lbnRzIEV4Y2x1ZGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlZExvY2F0aW9uczogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2x1ZGVkUGF0aHM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGl0ZW1zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMgPSBbXTtcbiAgICB0aGlzLmV4Y2x1ZGVkUGF0aHMgPSBbXTtcblxuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhdGlvblJlZ2V4ID0gL15bQS1aYS16MC05XStcXC5bQS1aYS16MC05XSskLztcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGxvY2F0aW9uUmVnZXgudGVzdChpdGVtKSkge1xuICAgICAgICBjb25zdCBbc3RhY2tOYW1lLCBsb2dpY2FsSWRdID0gaXRlbS5zcGxpdCgnLicpO1xuICAgICAgICB0aGlzLmV4Y2x1ZGVkTG9jYXRpb25zLnB1c2goe1xuICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBsb2dpY2FsSWQsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leGNsdWRlZFBhdGhzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpc0V4Y2x1ZGVkKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29udGFpbnNMb2NhdGlvbiA9IHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMuc29tZSgobG9jKSA9PiB7XG4gICAgICByZXR1cm4gbG9jLlN0YWNrTmFtZSA9PT0gbG9jYXRpb24uc3RhY2suc3RhY2tOYW1lICYmIGxvYy5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9jYXRpb24ubG9naWNhbFJlc291cmNlSWQ7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb250YWluc1BhdGggPSB0aGlzLmV4Y2x1ZGVkUGF0aHMuc29tZSgocGF0aCkgPT4gbG9jYXRpb24udG9QYXRoKCkgPT09IHBhdGgpO1xuICAgIHJldHVybiBjb250YWluc0xvY2F0aW9uIHx8IGNvbnRhaW5zUGF0aDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5pb25FeGNsdWRlTGlzdCBpbXBsZW1lbnRzIEV4Y2x1ZGVMaXN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBleGNsdWRlTGlzdHM6IEV4Y2x1ZGVMaXN0W10pIHtcbiAgfVxuXG4gIGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leGNsdWRlTGlzdHMuc29tZSgoZXhjbHVkZUxpc3QpID0+IGV4Y2x1ZGVMaXN0LmlzRXhjbHVkZWQobG9jYXRpb24pKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmV2ZXJFeGNsdWRlIGltcGxlbWVudHMgRXhjbHVkZUxpc3Qge1xuICBpc0V4Y2x1ZGVkKF9sb2NhdGlvbjogUmVzb3VyY2VMb2NhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWx3YXlzRXhjbHVkZSBpbXBsZW1lbnRzIEV4Y2x1ZGVMaXN0IHtcbiAgaXNFeGNsdWRlZChfbG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hbmlmZXN0QW5kRXhjbHVzaW9uTGlzdChtYW5pZmVzdDogQXNzZW1ibHlNYW5pZmVzdCwgZXhjbHVkZT86IHN0cmluZ1tdKTogRXhjbHVkZUxpc3Qge1xuICByZXR1cm4gbmV3IFVuaW9uRXhjbHVkZUxpc3QoW25ldyBNYW5pZmVzdEV4Y2x1ZGVMaXN0KG1hbmlmZXN0KSwgbmV3IEluTWVtb3J5RXhjbHVkZUxpc3QoZXhjbHVkZSA/PyBbXSldKTtcbn1cblxuIl19
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4Y2x1ZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMEVBQXlGO0FBVXpGLE1BQWUsbUJBQW1CO0lBR2hDLEtBQUssQ0FBQyxLQUFrQjtRQUN0QixPQUFPLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFFRCxNQUFhLG1CQUFvQixTQUFRLG1CQUFtQjtJQUN6QyxpQkFBaUIsQ0FBd0I7SUFFMUQsWUFBWSxRQUEwQjtRQUNwQyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFdBQTZCO1FBQ3hELCtFQUErRTtRQUMvRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUN2RSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG9DQUFZLENBQUMsd0JBQXdCLENBQzNFLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUN0RCx5RUFBeUU7aUJBQ3hFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssaURBQXlC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R0FBWixZQUFZLENBQWU7SUFFeEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUEwQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztDQUNGO0FBUkQsNENBUUM7QUFFRCxNQUFhLFlBQWEsU0FBUSxtQkFBbUI7SUFDbkQsVUFBVSxDQUFDLFNBQTJCO1FBQ3BDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBSkQsb0NBSUM7QUFFRCxNQUFhLGFBQWMsU0FBUSxtQkFBbUI7SUFDcEQsVUFBVSxDQUFDLFNBQTJCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBSkQsc0NBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFzc2VtYmx5TWFuaWZlc3QgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHsgQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZSwgQXJ0aWZhY3RUeXBlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VMb2NhdGlvbiBhcyBDZm5SZXNvdXJjZUxvY2F0aW9uIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VMb2NhdGlvbiB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2x1ZGVMaXN0IHtcbiAgaXNFeGNsdWRlZChsb2NhdGlvbjogUmVzb3VyY2VMb2NhdGlvbik6IGJvb2xlYW47XG5cbiAgdW5pb24ob3RoZXI6IEV4Y2x1ZGVMaXN0KTogRXhjbHVkZUxpc3Q7XG59XG5cbmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RXhjbHVkZUxpc3QgaW1wbGVtZW50cyBFeGNsdWRlTGlzdCB7XG4gIGFic3RyYWN0IGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuO1xuXG4gIHVuaW9uKG90aGVyOiBFeGNsdWRlTGlzdCk6IEV4Y2x1ZGVMaXN0IHtcbiAgICByZXR1cm4gbmV3IFVuaW9uRXhjbHVkZUxpc3QoW3RoaXMsIG90aGVyXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hbmlmZXN0RXhjbHVkZUxpc3QgZXh0ZW5kcyBBYnN0cmFjdEV4Y2x1ZGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlZExvY2F0aW9uczogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdO1xuXG4gIGNvbnN0cnVjdG9yKG1hbmlmZXN0OiBBc3NlbWJseU1hbmlmZXN0KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmV4Y2x1ZGVkTG9jYXRpb25zID0gdGhpcy5nZXRFeGNsdWRlZExvY2F0aW9ucyhtYW5pZmVzdCk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4Y2x1ZGVkTG9jYXRpb25zKGFzbU1hbmlmZXN0OiBBc3NlbWJseU1hbmlmZXN0KTogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdIHtcbiAgICAvLyBGaXJzdCwgd2UgbmVlZCB0byBmaWx0ZXIgdGhlIGFydGlmYWN0cyB0byBvbmx5IGluY2x1ZGUgQ2xvdWRGb3JtYXRpb24gc3RhY2tzXG4gICAgY29uc3Qgc3RhY2tNYW5pZmVzdHMgPSBPYmplY3QuZW50cmllcyhhc21NYW5pZmVzdC5hcnRpZmFjdHMgPz8ge30pLmZpbHRlcihcbiAgICAgIChbXywgbWFuaWZlc3RdKSA9PiBtYW5pZmVzdC50eXBlID09PSBBcnRpZmFjdFR5cGUuQVdTX0NMT1VERk9STUFUSU9OX1NUQUNLLFxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQ6IENmblJlc291cmNlTG9jYXRpb25bXSA9IFtdO1xuICAgIGZvciAobGV0IFtzdGFja05hbWUsIG1hbmlmZXN0XSBvZiBzdGFja01hbmlmZXN0cykge1xuICAgICAgY29uc3QgbG9jYXRpb25zID0gT2JqZWN0LnZhbHVlcyhtYW5pZmVzdC5tZXRhZGF0YSA/PyB7fSlcbiAgICAgICAgLy8gVGhlbiBwaWNrIG9ubHkgdGhlIHJlc291cmNlcyBpbiBlYWNoIHN0YWNrIG1hcmtlZCB3aXRoIERPX05PVF9SRUZBQ1RPUlxuICAgICAgICAuZmlsdGVyKChlbnRyaWVzKSA9PlxuICAgICAgICAgIGVudHJpZXMuc29tZSgoZW50cnkpID0+IGVudHJ5LnR5cGUgPT09IEFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuRE9fTk9UX1JFRkFDVE9SICYmIGVudHJ5LmRhdGEgPT09IHRydWUpLFxuICAgICAgICApXG4gICAgICAgIC8vIEZpbmFsbHksIGdldCB0aGUgbG9naWNhbCBJRCBvZiBlYWNoIHJlc291cmNlXG4gICAgICAgIC5tYXAoKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBsb2dpY2FsSWRFbnRyeSA9IGVudHJpZXMuZmluZCgoZW50cnkpID0+IGVudHJ5LnR5cGUgPT09IEFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuTE9HSUNBTF9JRCk7XG4gICAgICAgICAgY29uc3QgbG9jYXRpb246IENmblJlc291cmNlTG9jYXRpb24gPSB7XG4gICAgICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBsb2dpY2FsSWRFbnRyeSEuZGF0YSEgYXMgc3RyaW5nLFxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmxvY2F0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpc0V4Y2x1ZGVkKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMuc29tZShcbiAgICAgIChsb2MpID0+IGxvYy5TdGFja05hbWUgPT09IGxvY2F0aW9uLnN0YWNrLnN0YWNrTmFtZSAmJiBsb2MuTG9naWNhbFJlc291cmNlSWQgPT09IGxvY2F0aW9uLmxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluTWVtb3J5RXhjbHVkZUxpc3QgZXh0ZW5kcyBBYnN0cmFjdEV4Y2x1ZGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlZExvY2F0aW9uczogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2x1ZGVkUGF0aHM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGl0ZW1zOiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5leGNsdWRlZExvY2F0aW9ucyA9IFtdO1xuICAgIHRoaXMuZXhjbHVkZWRQYXRocyA9IFtdO1xuXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2F0aW9uUmVnZXggPSAvXltBLVphLXowLTldK1xcLltBLVphLXowLTldKyQvO1xuXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobG9jYXRpb25SZWdleC50ZXN0KGl0ZW0pKSB7XG4gICAgICAgIGNvbnN0IFtzdGFja05hbWUsIGxvZ2ljYWxJZF0gPSBpdGVtLnNwbGl0KCcuJyk7XG4gICAgICAgIHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMucHVzaCh7XG4gICAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6IGxvZ2ljYWxJZCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4Y2x1ZGVkUGF0aHMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjb250YWluc0xvY2F0aW9uID0gdGhpcy5leGNsdWRlZExvY2F0aW9ucy5zb21lKChsb2MpID0+IHtcbiAgICAgIHJldHVybiBsb2MuU3RhY2tOYW1lID09PSBsb2NhdGlvbi5zdGFjay5zdGFja05hbWUgJiYgbG9jLkxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2NhdGlvbi5sb2dpY2FsUmVzb3VyY2VJZDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbnRhaW5zUGF0aCA9IHRoaXMuZXhjbHVkZWRQYXRocy5zb21lKChwYXRoKSA9PiBsb2NhdGlvbi50b1BhdGgoKSA9PT0gcGF0aCk7XG4gICAgcmV0dXJuIGNvbnRhaW5zTG9jYXRpb24gfHwgY29udGFpbnNQYXRoO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmlvbkV4Y2x1ZGVMaXN0IGV4dGVuZHMgQWJzdHJhY3RFeGNsdWRlTGlzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZUxpc3RzOiBFeGNsdWRlTGlzdFtdKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leGNsdWRlTGlzdHMuc29tZSgoZXhjbHVkZUxpc3QpID0+IGV4Y2x1ZGVMaXN0LmlzRXhjbHVkZWQobG9jYXRpb24pKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmV2ZXJFeGNsdWRlIGV4dGVuZHMgQWJzdHJhY3RFeGNsdWRlTGlzdCB7XG4gIGlzRXhjbHVkZWQoX2xvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBbHdheXNFeGNsdWRlIGV4dGVuZHMgQWJzdHJhY3RFeGNsdWRlTGlzdCB7XG4gIGlzRXhjbHVkZWQoX2xvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -4,4 +4,4 @@ import type { CloudFormationStack, ResourceMapping } from './cloudformation';
4
4
  * Generates a list of stack definitions to be sent to the CloudFormation API
5
5
  * by applying each mapping to the corresponding stack template(s).
6
6
  */
7
- export declare function generateStackDefinitions(mappings: ResourceMapping[], deployedStacks: CloudFormationStack[]): StackDefinition[];
7
+ export declare function generateStackDefinitions(mappings: ResourceMapping[], deployedStacks: CloudFormationStack[], localStacks: CloudFormationStack[]): StackDefinition[];
@@ -6,38 +6,63 @@ const toolkit_error_1 = require("../../toolkit/toolkit-error");
6
6
  * Generates a list of stack definitions to be sent to the CloudFormation API
7
7
  * by applying each mapping to the corresponding stack template(s).
8
8
  */
9
- function generateStackDefinitions(mappings, deployedStacks) {
10
- const templates = Object.fromEntries(deployedStacks
11
- .filter((s) => mappings.some((m) =>
12
- // We only care about stacks that are part of the mappings
13
- m.source.stack.stackName === s.stackName || m.destination.stack.stackName === s.stackName))
14
- .map((s) => [s.stackName, JSON.parse(JSON.stringify(s.template))]));
15
- mappings.forEach((mapping) => {
16
- const sourceStackName = mapping.source.stack.stackName;
17
- const sourceLogicalId = mapping.source.logicalResourceId;
18
- const sourceTemplate = templates[sourceStackName];
19
- const destinationStackName = mapping.destination.stack.stackName;
20
- const destinationLogicalId = mapping.destination.logicalResourceId;
21
- if (templates[destinationStackName] == null) {
22
- // The API doesn't allow anything in the template other than the resources
23
- // that are part of the mappings. So we need to create an empty template
24
- // to start adding resources to.
25
- templates[destinationStackName] = { Resources: {} };
9
+ function generateStackDefinitions(mappings, deployedStacks, localStacks) {
10
+ const localTemplates = Object.fromEntries(localStacks.map((s) => [s.stackName, JSON.parse(JSON.stringify(s.template))]));
11
+ const deployedTemplates = Object.fromEntries(deployedStacks.map((s) => [s.stackName, JSON.parse(JSON.stringify(s.template))]));
12
+ // First, remove from the local templates any resources that are not in the deployed templates
13
+ iterate(localTemplates, (stackName, logicalResourceId) => {
14
+ const location = searchLocation(stackName, logicalResourceId, 'destination', 'source');
15
+ const deployedResource = deployedStacks.find((s) => s.stackName === location.stackName)?.template
16
+ .Resources?.[location.logicalResourceId];
17
+ if (deployedResource == null) {
18
+ delete localTemplates[stackName].Resources?.[logicalResourceId];
26
19
  }
27
- const destinationTemplate = templates[destinationStackName];
28
- // Do the move
29
- destinationTemplate.Resources[destinationLogicalId] = sourceTemplate.Resources[sourceLogicalId];
30
- delete sourceTemplate.Resources[sourceLogicalId];
31
20
  });
32
- // CloudFormation doesn't allow empty stacks
33
- for (const [stackName, template] of Object.entries(templates)) {
21
+ // Now do the opposite: add to the local templates any resources that are in the deployed templates
22
+ iterate(deployedTemplates, (stackName, logicalResourceId, deployedResource) => {
23
+ const location = searchLocation(stackName, logicalResourceId, 'source', 'destination');
24
+ const resources = Object
25
+ .entries(localTemplates)
26
+ .find(([name, _]) => name === location.stackName)?.[1].Resources;
27
+ const localResource = resources?.[location.logicalResourceId];
28
+ if (localResource == null) {
29
+ if (localTemplates[stackName]?.Resources) {
30
+ localTemplates[stackName].Resources[logicalResourceId] = deployedResource;
31
+ }
32
+ }
33
+ else {
34
+ // This is temporary, until CloudFormation supports CDK construct path updates in the refactor API
35
+ if (localResource.Metadata != null) {
36
+ localResource.Metadata['aws:cdk:path'] = deployedResource.Metadata?.['aws:cdk:path'];
37
+ }
38
+ }
39
+ });
40
+ function searchLocation(stackName, logicalResourceId, from, to) {
41
+ const mapping = mappings.find((m) => m[from].stack.stackName === stackName && m[from].logicalResourceId === logicalResourceId);
42
+ return mapping != null
43
+ ? { stackName: mapping[to].stack.stackName, logicalResourceId: mapping[to].logicalResourceId }
44
+ : { stackName, logicalResourceId };
45
+ }
46
+ function iterate(templates, cb) {
47
+ Object.entries(templates).forEach(([stackName, template]) => {
48
+ Object.entries(template.Resources ?? {}).forEach(([logicalResourceId, resource]) => {
49
+ cb(stackName, logicalResourceId, resource);
50
+ });
51
+ });
52
+ }
53
+ for (const [stackName, template] of Object.entries(localTemplates)) {
34
54
  if (Object.keys(template.Resources ?? {}).length === 0) {
35
55
  throw new toolkit_error_1.ToolkitError(`Stack ${stackName} has no resources after refactor. You must add a resource to this stack. This resource can be a simple one, like a waitCondition resource type.`);
36
56
  }
37
57
  }
38
- return Object.entries(templates).map(([stackName, template]) => ({
58
+ return Object.entries(localTemplates)
59
+ .filter(([stackName, _]) => mappings.some((m) => {
60
+ // Only send templates for stacks that are part of the mappings
61
+ return m.source.stack.stackName === stackName || m.destination.stack.stackName === stackName;
62
+ }))
63
+ .map(([stackName, template]) => ({
39
64
  StackName: stackName,
40
65
  TemplateBody: JSON.stringify(template),
41
66
  }));
42
67
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsNERBNENDO0FBbERELCtEQUEyRDtBQUUzRDs7O0dBR0c7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxRQUEyQixFQUFFLGNBQXFDO0lBQ3pHLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLGNBQWM7U0FDWCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNaLFFBQVEsQ0FBQyxJQUFJLENBQ1gsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNKLDBEQUEwRDtJQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FDNUYsQ0FDRjtTQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3JFLENBQUM7SUFFRixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDM0IsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3ZELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDekQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWxELE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pFLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztRQUNuRSxJQUFJLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzVDLDBFQUEwRTtZQUMxRSx3RUFBd0U7WUFDeEUsZ0NBQWdDO1lBQ2hDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3RELENBQUM7UUFDRCxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRTVELGNBQWM7UUFDZCxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hHLE9BQU8sY0FBYyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILDRDQUE0QztJQUM1QyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzlELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksNEJBQVksQ0FBQyxTQUFTLFNBQVMsaUpBQWlKLENBQUMsQ0FBQztRQUM5TCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvRCxTQUFTLEVBQUUsU0FBUztRQUNwQixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7S0FDdkMsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdGFja0RlZmluaXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvblN0YWNrLCBSZXNvdXJjZU1hcHBpbmcgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbGlzdCBvZiBzdGFjayBkZWZpbml0aW9ucyB0byBiZSBzZW50IHRvIHRoZSBDbG91ZEZvcm1hdGlvbiBBUElcbiAqIGJ5IGFwcGx5aW5nIGVhY2ggbWFwcGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBzdGFjayB0ZW1wbGF0ZShzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU3RhY2tEZWZpbml0aW9ucyhtYXBwaW5nczogUmVzb3VyY2VNYXBwaW5nW10sIGRlcGxveWVkU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10pOiBTdGFja0RlZmluaXRpb25bXSB7XG4gIGNvbnN0IHRlbXBsYXRlcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBkZXBsb3llZFN0YWNrc1xuICAgICAgLmZpbHRlcigocykgPT5cbiAgICAgICAgbWFwcGluZ3Muc29tZShcbiAgICAgICAgICAobSkgPT5cbiAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBzdGFja3MgdGhhdCBhcmUgcGFydCBvZiB0aGUgbWFwcGluZ3NcbiAgICAgICAgICAgIG0uc291cmNlLnN0YWNrLnN0YWNrTmFtZSA9PT0gcy5zdGFja05hbWUgfHwgbS5kZXN0aW5hdGlvbi5zdGFjay5zdGFja05hbWUgPT09IHMuc3RhY2tOYW1lLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLm1hcCgocykgPT4gW3Muc3RhY2tOYW1lLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHMudGVtcGxhdGUpKV0pLFxuICApO1xuXG4gIG1hcHBpbmdzLmZvckVhY2goKG1hcHBpbmcpID0+IHtcbiAgICBjb25zdCBzb3VyY2VTdGFja05hbWUgPSBtYXBwaW5nLnNvdXJjZS5zdGFjay5zdGFja05hbWU7XG4gICAgY29uc3Qgc291cmNlTG9naWNhbElkID0gbWFwcGluZy5zb3VyY2UubG9naWNhbFJlc291cmNlSWQ7XG4gICAgY29uc3Qgc291cmNlVGVtcGxhdGUgPSB0ZW1wbGF0ZXNbc291cmNlU3RhY2tOYW1lXTtcblxuICAgIGNvbnN0IGRlc3RpbmF0aW9uU3RhY2tOYW1lID0gbWFwcGluZy5kZXN0aW5hdGlvbi5zdGFjay5zdGFja05hbWU7XG4gICAgY29uc3QgZGVzdGluYXRpb25Mb2dpY2FsSWQgPSBtYXBwaW5nLmRlc3RpbmF0aW9uLmxvZ2ljYWxSZXNvdXJjZUlkO1xuICAgIGlmICh0ZW1wbGF0ZXNbZGVzdGluYXRpb25TdGFja05hbWVdID09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBBUEkgZG9lc24ndCBhbGxvdyBhbnl0aGluZyBpbiB0aGUgdGVtcGxhdGUgb3RoZXIgdGhhbiB0aGUgcmVzb3VyY2VzXG4gICAgICAvLyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBtYXBwaW5ncy4gU28gd2UgbmVlZCB0byBjcmVhdGUgYW4gZW1wdHkgdGVtcGxhdGVcbiAgICAgIC8vIHRvIHN0YXJ0IGFkZGluZyByZXNvdXJjZXMgdG8uXG4gICAgICB0ZW1wbGF0ZXNbZGVzdGluYXRpb25TdGFja05hbWVdID0geyBSZXNvdXJjZXM6IHt9IH07XG4gICAgfVxuICAgIGNvbnN0IGRlc3RpbmF0aW9uVGVtcGxhdGUgPSB0ZW1wbGF0ZXNbZGVzdGluYXRpb25TdGFja05hbWVdO1xuXG4gICAgLy8gRG8gdGhlIG1vdmVcbiAgICBkZXN0aW5hdGlvblRlbXBsYXRlLlJlc291cmNlc1tkZXN0aW5hdGlvbkxvZ2ljYWxJZF0gPSBzb3VyY2VUZW1wbGF0ZS5SZXNvdXJjZXNbc291cmNlTG9naWNhbElkXTtcbiAgICBkZWxldGUgc291cmNlVGVtcGxhdGUuUmVzb3VyY2VzW3NvdXJjZUxvZ2ljYWxJZF07XG4gIH0pO1xuXG4gIC8vIENsb3VkRm9ybWF0aW9uIGRvZXNuJ3QgYWxsb3cgZW1wdHkgc3RhY2tzXG4gIGZvciAoY29uc3QgW3N0YWNrTmFtZSwgdGVtcGxhdGVdIG9mIE9iamVjdC5lbnRyaWVzKHRlbXBsYXRlcykpIHtcbiAgICBpZiAoT2JqZWN0LmtleXModGVtcGxhdGUuUmVzb3VyY2VzID8/IHt9KS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFN0YWNrICR7c3RhY2tOYW1lfSBoYXMgbm8gcmVzb3VyY2VzIGFmdGVyIHJlZmFjdG9yLiBZb3UgbXVzdCBhZGQgYSByZXNvdXJjZSB0byB0aGlzIHN0YWNrLiBUaGlzIHJlc291cmNlIGNhbiBiZSBhIHNpbXBsZSBvbmUsIGxpa2UgYSB3YWl0Q29uZGl0aW9uIHJlc291cmNlIHR5cGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRlbXBsYXRlcykubWFwKChbc3RhY2tOYW1lLCB0ZW1wbGF0ZV0pID0+ICh7XG4gICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgVGVtcGxhdGVCb2R5OiBKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZSksXG4gIH0pKTtcbn1cbiJdfQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsNERBb0ZDO0FBMUZELCtEQUEyRDtBQUUzRDs7O0dBR0c7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsUUFBMkIsRUFDM0IsY0FBcUMsRUFDckMsV0FBa0M7SUFFbEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDdkMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQTJCLENBQUMsQ0FBQyxDQUN4RyxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUMxQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBMkIsQ0FBQyxDQUFDLENBQzNHLENBQUM7SUFFRiw4RkFBOEY7SUFDOUYsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxFQUFFO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXZGLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUTthQUM5RixTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENB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Q25FLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksNEJBQVksQ0FDcEIsU0FBUyxTQUFTLGlKQUFpSixDQUNwSyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ2xCLCtEQUErRDtRQUMvRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQztJQUMvRixDQUFDLENBQUMsQ0FDSDtTQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztLQUN2QyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0YWNrRGVmaW5pdGlvbiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7XG4gIENsb3VkRm9ybWF0aW9uUmVzb3VyY2UsXG4gIENsb3VkRm9ybWF0aW9uU3RhY2ssXG4gIENsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4gIFJlc291cmNlTWFwcGluZyxcbn0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGxpc3Qgb2Ygc3RhY2sgZGVmaW5pdGlvbnMgdG8gYmUgc2VudCB0byB0aGUgQ2xvdWRGb3JtYXRpb24gQVBJXG4gKiBieSBhcHBseWluZyBlYWNoIG1hcHBpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3RhY2sgdGVtcGxhdGUocykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0YWNrRGVmaW5pdGlvbnMoXG4gIG1hcHBpbmdzOiBSZXNvdXJjZU1hcHBpbmdbXSxcbiAgZGVwbG95ZWRTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSxcbiAgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSxcbik6IFN0YWNrRGVmaW5pdGlvbltdIHtcbiAgY29uc3QgbG9jYWxUZW1wbGF0ZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgbG9jYWxTdGFja3MubWFwKChzKSA9PiBbcy5zdGFja05hbWUsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocy50ZW1wbGF0ZSkpIGFzIENsb3VkRm9ybWF0aW9uVGVtcGxhdGVdKSxcbiAgKTtcbiAgY29uc3QgZGVwbG95ZWRUZW1wbGF0ZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgZGVwbG95ZWRTdGFja3MubWFwKChzKSA9PiBbcy5zdGFja05hbWUsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocy50ZW1wbGF0ZSkpIGFzIENsb3VkRm9ybWF0aW9uVGVtcGxhdGVdKSxcbiAgKTtcblxuICAvLyBGaXJzdCwgcmVtb3ZlIGZyb20gdGhlIGxvY2FsIHRlbXBsYXRlcyBhbnkgcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUgZGVwbG95ZWQgdGVtcGxhdGVzXG4gIGl0ZXJhdGUobG9jYWxUZW1wbGF0ZXMsIChzdGFja05hbWUsIGxvZ2ljYWxSZXNvdXJjZUlkKSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBzZWFyY2hMb2NhdGlvbihzdGFja05hbWUsIGxvZ2ljYWxSZXNvdXJjZUlkLCAnZGVzdGluYXRpb24nLCAnc291cmNlJyk7XG5cbiAgICBjb25zdCBkZXBsb3llZFJlc291cmNlID0gZGVwbG95ZWRTdGFja3MuZmluZCgocykgPT4gcy5zdGFja05hbWUgPT09IGxvY2F0aW9uLnN0YWNrTmFtZSk/LnRlbXBsYXRlXG4gICAgICAuUmVzb3VyY2VzPy5bbG9jYXRpb24ubG9naWNhbFJlc291cmNlSWRdO1xuXG4gICAgaWYgKGRlcGxveWVkUmVzb3VyY2UgPT0gbnVsbCkge1xuICAgICAgZGVsZXRlIGxvY2FsVGVtcGxhdGVzW3N0YWNrTmFtZV0uUmVzb3VyY2VzPy5bbG9naWNhbFJlc291cmNlSWRdO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTm93IGRvIHRoZSBvcHBvc2l0ZTogYWRkIHRvIHRoZSBsb2NhbCB0ZW1wbGF0ZXMgYW55IHJlc291cmNlcyB0aGF0IGFyZSBpbiB0aGUgZGVwbG95ZWQgdGVtcGxhdGVzXG4gIGl0ZXJhdGUoZGVwbG95ZWRUZW1wbGF0ZXMsIChzdGFja05hbWUsIGxvZ2ljYWxSZXNvdXJjZUlkLCBkZXBsb3llZFJlc291cmNlKSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBzZWFyY2hMb2NhdGlvbihzdGFja05hbWUsIGxvZ2ljYWxSZXNvdXJjZUlkLCAnc291cmNlJywgJ2Rlc3RpbmF0aW9uJyk7XG5cbiAgICBjb25zdCByZXNvdXJjZXMgPSBPYmplY3RcbiAgICAgIC5lbnRyaWVzKGxvY2FsVGVtcGxhdGVzKVxuICAgICAgLmZpbmQoKFtuYW1lLCBfXSkgPT4gbmFtZSA9PT0gbG9jYXRpb24uc3RhY2tOYW1lKT8uWzFdLlJlc291cmNlcztcbiAgICBjb25zdCBsb2NhbFJlc291cmNlID0gcmVzb3VyY2VzPy5bbG9jYXRpb24ubG9naWNhbFJlc291cmNlSWRdO1xuXG4gICAgaWYgKGxvY2FsUmVzb3VyY2UgPT0gbnVsbCkge1xuICAgICAgaWYgKGxvY2FsVGVtcGxhdGVzW3N0YWNrTmFtZV0/LlJlc291cmNlcykge1xuICAgICAgICBsb2NhbFRlbXBsYXRlc1tzdGFja05hbWVdLlJlc291cmNlc1tsb2dpY2FsUmVzb3VyY2VJZF0gPSBkZXBsb3llZFJlc291cmNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyeSwgdW50aWwgQ2xvdWRGb3JtYXRpb24gc3VwcG9ydHMgQ0RLIGNvbnN0cnVjdCBwYXRoIHVwZGF0ZXMgaW4gdGhlIHJlZmFjdG9yIEFQSVxuICAgICAgaWYgKGxvY2FsUmVzb3VyY2UuTWV0YWRhdGEgIT0gbnVsbCkge1xuICAgICAgICBsb2NhbFJlc291cmNlLk1ldGFkYXRhWydhd3M6Y2RrOnBhdGgnXSA9IGRlcGxveWVkUmVzb3VyY2UuTWV0YWRhdGE/LlsnYXdzOmNkazpwYXRoJ107XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBzZWFyY2hMb2NhdGlvbihzdGFja05hbWU6IHN0cmluZywgbG9naWNhbFJlc291cmNlSWQ6IHN0cmluZywgZnJvbTogJ3NvdXJjZScgfCAnZGVzdGluYXRpb24nLCB0bzogJ3NvdXJjZScgfCAnZGVzdGluYXRpb24nKSB7XG4gICAgY29uc3QgbWFwcGluZyA9IG1hcHBpbmdzLmZpbmQoXG4gICAgICAobSkgPT4gbVtmcm9tXS5zdGFjay5zdGFja05hbWUgPT09IHN0YWNrTmFtZSAmJiBtW2Zyb21dLmxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2dpY2FsUmVzb3VyY2VJZCxcbiAgICApO1xuICAgIHJldHVybiBtYXBwaW5nICE9IG51bGxcbiAgICAgID8geyBzdGFja05hbWU6IG1hcHBpbmdbdG9dLnN0YWNrLnN0YWNrTmFtZSwgbG9naWNhbFJlc291cmNlSWQ6IG1hcHBpbmdbdG9dLmxvZ2ljYWxSZXNvdXJjZUlkIH1cbiAgICAgIDogeyBzdGFja05hbWUsIGxvZ2ljYWxSZXNvdXJjZUlkIH07XG4gIH1cblxuICBmdW5jdGlvbiBpdGVyYXRlKFxuICAgIHRlbXBsYXRlczogUmVjb3JkPHN0cmluZywgQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZT4sXG4gICAgY2I6IChzdGFja05hbWU6IHN0cmluZywgbG9naWNhbFJlc291cmNlSWQ6IHN0cmluZywgcmVzb3VyY2U6IENsb3VkRm9ybWF0aW9uUmVzb3VyY2UpID0+IHZvaWQsXG4gICkge1xuICAgIE9iamVjdC5lbnRyaWVzKHRlbXBsYXRlcykuZm9yRWFjaCgoW3N0YWNrTmFtZSwgdGVtcGxhdGVdKSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyh0ZW1wbGF0ZS5SZXNvdXJjZXMgPz8ge30pLmZvckVhY2goKFtsb2dpY2FsUmVzb3VyY2VJZCwgcmVzb3VyY2VdKSA9PiB7XG4gICAgICAgIGNiKHN0YWNrTmFtZSwgbG9naWNhbFJlc291cmNlSWQsIHJlc291cmNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yIChjb25zdCBbc3RhY2tOYW1lLCB0ZW1wbGF0ZV0gb2YgT2JqZWN0LmVudHJpZXMobG9jYWxUZW1wbGF0ZXMpKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRlbXBsYXRlLlJlc291cmNlcyA/PyB7fSkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICBgU3RhY2sgJHtzdGFja05hbWV9IGhhcyBubyByZXNvdXJjZXMgYWZ0ZXIgcmVmYWN0b3IuIFlvdSBtdXN0IGFkZCBhIHJlc291cmNlIHRvIHRoaXMgc3RhY2suIFRoaXMgcmVzb3VyY2UgY2FuIGJlIGEgc2ltcGxlIG9uZSwgbGlrZSBhIHdhaXRDb25kaXRpb24gcmVzb3VyY2UgdHlwZS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMobG9jYWxUZW1wbGF0ZXMpXG4gICAgLmZpbHRlcigoW3N0YWNrTmFtZSwgX10pID0+XG4gICAgICBtYXBwaW5ncy5zb21lKChtKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgc2VuZCB0ZW1wbGF0ZXMgZm9yIHN0YWNrcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBtYXBwaW5nc1xuICAgICAgICByZXR1cm4gbS5zb3VyY2Uuc3RhY2suc3RhY2tOYW1lID09PSBzdGFja05hbWUgfHwgbS5kZXN0aW5hdGlvbi5zdGFjay5zdGFja05hbWUgPT09IHN0YWNrTmFtZTtcbiAgICAgIH0pLFxuICAgIClcbiAgICAubWFwKChbc3RhY2tOYW1lLCB0ZW1wbGF0ZV0pID0+ICh7XG4gICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgIFRlbXBsYXRlQm9keTogSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUpLFxuICAgIH0pKTtcbn1cbiJdfQ==
@@ -1,34 +1,13 @@
1
1
  import type { TypedMapping } from '@aws-cdk/cloudformation-diff';
2
+ import type * as cxapi from '@aws-cdk/cx-api';
2
3
  import type { SdkProvider } from '../aws-auth/private';
3
4
  import type { CloudFormationStack } from './cloudformation';
4
- import { ResourceLocation, ResourceMapping } from './cloudformation';
5
- import { type ExcludeList } from './exclude';
5
+ import { ResourceMapping } from './cloudformation';
6
6
  import type { MappingGroup } from '../../actions';
7
7
  export * from './exclude';
8
- /**
9
- * Represents a set of possible movements of a resource from one location
10
- * to another. In the ideal case, there is only one source and only one
11
- * destination.
12
- */
13
- export type ResourceMovement = [ResourceLocation[], ResourceLocation[]];
14
- export declare class AmbiguityError extends Error {
15
- readonly movements: ResourceMovement[];
16
- constructor(movements: ResourceMovement[]);
17
- paths(): [string[], string[]][];
18
- }
19
8
  export declare function usePrescribedMappings(mappingGroups: MappingGroup[], sdkProvider: SdkProvider): Promise<ResourceMapping[]>;
20
- export declare function resourceMovements(before: CloudFormationStack[], after: CloudFormationStack[]): ResourceMovement[];
21
- export declare function ambiguousMovements(movements: ResourceMovement[]): ResourceMovement[];
22
- /**
23
- * Converts a list of unambiguous resource movements into a list of resource mappings.
24
- *
25
- */
26
- export declare function resourceMappings(movements: ResourceMovement[], stacks?: CloudFormationStack[]): ResourceMapping[];
27
- /**
28
- * Compares the deployed state to the cloud assembly state, and finds all resources
29
- * that were moved from one location (stack + logical ID) to another. The comparison
30
- * is done per environment.
31
- */
32
- export declare function findResourceMovements(stacks: CloudFormationStack[], sdkProvider: SdkProvider, exclude?: ExcludeList): Promise<ResourceMovement[]>;
33
- export declare function formatTypedMappings(mappings: TypedMapping[]): string;
34
- export declare function formatAmbiguousMappings(paths: [string[], string[]][]): string;
9
+ export declare function getDeployedStacks(sdkProvider: SdkProvider, environment: cxapi.Environment): Promise<CloudFormationStack[]>;
10
+ export declare function formatMappingsHeader(): string;
11
+ export declare function formatTypedMappings(environment: cxapi.Environment, mappings: TypedMapping[]): string;
12
+ export declare function formatAmbiguitySectionHeader(): string;
13
+ export declare function formatAmbiguousMappings(environment: cxapi.Environment, paths: [string[], string[]][]): string;