@fjall/components-infrastructure 0.42.1 → 0.43.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lib/app.d.ts CHANGED
@@ -16,6 +16,8 @@ export declare class App extends CdkApp {
16
16
  private defaultVpc;
17
17
  private defaultEcr;
18
18
  private existingVpcId?;
19
+ private globalTags;
20
+ private aspectApplied;
19
21
  private constructor();
20
22
  /**
21
23
  * Get/Create a basic Fjall Application with standard tags applied
@@ -81,10 +83,13 @@ export declare class App extends CdkApp {
81
83
  */
82
84
  addStorageResource(resource: Construct): void;
83
85
  /**
84
- * Apply standard tags to all resources in the app
85
- * Standard tags include environment and service name
86
+ * Initialize standard tags
86
87
  */
87
- private applyStandardTags;
88
+ private initializeStandardTags;
89
+ /**
90
+ * Apply all tags as a single aspect
91
+ */
92
+ private applyTagsAspect;
88
93
  /**
89
94
  * Add custom tags to all resources in the app
90
95
  * @param tags Custom tags to apply to all resources
package/dist/lib/app.js CHANGED
@@ -16,6 +16,8 @@ class App extends aws_cdk_lib_1.App {
16
16
  constructor(name) {
17
17
  super();
18
18
  this.stacks = {};
19
+ this.globalTags = {};
20
+ this.aspectApplied = false;
19
21
  if (name)
20
22
  this.name = name;
21
23
  else
@@ -28,7 +30,7 @@ class App extends aws_cdk_lib_1.App {
28
30
  */
29
31
  static getApp(name) {
30
32
  const app = App.getInstance(name);
31
- app.applyStandardTags();
33
+ app.initializeStandardTags();
32
34
  return app;
33
35
  }
34
36
  /**
@@ -53,6 +55,10 @@ class App extends aws_cdk_lib_1.App {
53
55
  * @returns {AwsStack}
54
56
  */
55
57
  getStack(key, dependencies) {
58
+ // Apply the aspect once before creating the first stack
59
+ if (!this.aspectApplied && Object.keys(this.stacks).length === 0 && Object.keys(this.globalTags).length > 0) {
60
+ this.applyTagsAspect();
61
+ }
56
62
  if (!this.stacks[key]) {
57
63
  this.stacks[key] = new resources_1.AwsStack(key, dependencies);
58
64
  }
@@ -165,16 +171,24 @@ class App extends aws_cdk_lib_1.App {
165
171
  storageStack.addConstruct(resource);
166
172
  }
167
173
  /**
168
- * Apply standard tags to all resources in the app
169
- * Standard tags include environment and service name
174
+ * Initialize standard tags
170
175
  */
171
- applyStandardTags() {
176
+ initializeStandardTags() {
172
177
  const config = (0, getConfig_1.getConfig)();
173
- const standardTags = {
178
+ this.globalTags = {
174
179
  "fjall:costAllocation:environment": config.environment,
175
180
  "fjall:costAllocation:service": this.name
176
181
  };
177
- aws_cdk_lib_1.Aspects.of(this).add(new standardTagsAspect_1.StandardTagsAspect(standardTags));
182
+ }
183
+ /**
184
+ * Apply all tags as a single aspect
185
+ */
186
+ applyTagsAspect() {
187
+ if (!this.aspectApplied && Object.keys(this.globalTags).length > 0) {
188
+ // Apply ONE aspect with all tags using the CDK v2.206.0+ compatible StandardTagsAspect
189
+ aws_cdk_lib_1.Aspects.of(this).add(new standardTagsAspect_1.StandardTagsAspect(this.globalTags));
190
+ this.aspectApplied = true;
191
+ }
178
192
  }
179
193
  /**
180
194
  * Add custom tags to all resources in the app
@@ -187,11 +201,15 @@ class App extends aws_cdk_lib_1.App {
187
201
  * });
188
202
  */
189
203
  addTags(tags) {
190
- aws_cdk_lib_1.Aspects.of(this).add(new standardTagsAspect_1.StandardTagsAspect(tags));
204
+ // Merge tags but don't apply aspect yet
205
+ this.globalTags = {
206
+ ...this.globalTags,
207
+ ...tags
208
+ };
191
209
  return this;
192
210
  }
193
211
  }
194
212
  exports.App = App;
195
213
  App.instance = null;
196
214
  exports.default = App;
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBeUQ7QUFFekQsd0RBQWlFO0FBR2pFLDJDQUF1QztBQUN2QyxxREFBOEQ7QUFHOUQsbUVBQWdFO0FBQ2hFLGlEQUE4QztBQUU5Qzs7OztHQUlHO0FBQ0gsTUFBYSxHQUFJLFNBQVEsaUJBQU07SUFVN0IsWUFBb0IsSUFBYTtRQUMvQixLQUFLLEVBQUUsQ0FBQztRQVBGLFdBQU0sR0FBZ0MsRUFBRSxDQUFDO1FBUy9DLElBQUksSUFBSTtZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDOztZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBYTtRQUNoQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQWE7UUFDckMsNkRBQTZEO1FBQzdELCtDQUErQztRQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFFBQVEsQ0FBQyxHQUFXLEVBQUUsWUFBb0M7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FB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TSxDQUFDLFdBQVc7WUFDdEQsOEJBQThCLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDMUMsQ0FBQztRQUVGLHFCQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLHVDQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE9BQU8sQ0FBQyxJQUErQjtRQUM1QyxxQkFBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSx1Q0FBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7QUE1Tkgsa0JBNk5DO0FBNU5nQixZQUFRLEdBQWUsSUFBSSxBQUFuQixDQUFvQjtBQThON0Msa0JBQWUsR0FBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwIGFzIENka0FwcCwgRm4sIEFzcGVjdHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBWcGMsIFZwY0ZhY3RvcnkgfSBmcm9tIFwiLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvdnBjXCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcblxuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEVjciwgRWNyRmFjdG9yeSB9IGZyb20gXCIuL3Jlc291cmNlcy9hd3Mvc3RvcmFnZS9lY3JcIjtcblxuaW1wb3J0IHsgU3RvcmFnZSB9IGZyb20gXCIuL3BhdHRlcm5zL2F3cy9zdG9yYWdlXCI7XG5pbXBvcnQgeyBTdGFuZGFyZFRhZ3NBc3BlY3QgfSBmcm9tIFwiLi91dGlscy9zdGFuZGFyZFRhZ3NBc3BlY3RcIjtcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gXCIuL3V0aWxzL2dldENvbmZpZ1wiO1xuXG4vKipcbiAqIFRoZSBiYXNpYyBjb3JuZXItc3RvbmUgb2YgYWxsIEZqYWxsLWhvc3RlZCBhcHBsaWNhdGlvbnMuXG4gKiAgVGhpcyBjbGFzcyBpcyBhIHNpbmdsZXRvbiBhbmQgc2hvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIGFuZCBtYW5hZ2VcbiAqICAgYWxsIHJlc291cmNlcyBpbiBhIEZqYWxsIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQXBwIGV4dGVuZHMgQ2RrQXBwIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IEFwcCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHN0YWNrczogeyBba2V5OiBzdHJpbmddOiBBd3NTdGFjayB9ID0ge307XG5cbiAgcHJpdmF0ZSBkZWZhdWx0VnBjOiBJVnBjO1xuICBwcml2YXRlIGRlZmF1bHRFY3I6IEVjcjtcbiAgcHJpdmF0ZSBleGlzdGluZ1ZwY0lkPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IobmFtZT86IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAobmFtZSkgdGhpcy5uYW1lID0gbmFtZTtcbiAgICBlbHNlIHRoaXMubmFtZSA9IFwiRmphbGxBcHBcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQvQ3JlYXRlIGEgYmFzaWMgRmphbGwgQXBwbGljYXRpb24gd2l0aCBzdGFuZGFyZCB0YWdzIGFwcGxpZWRcbiAgICogQHBhcmFtIG5hbWUgQXBwbGljYXRpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7QXBwfVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRBcHAobmFtZT86IHN0cmluZyk6IEFwcCB7XG4gICAgY29uc3QgYXBwID0gQXBwLmdldEluc3RhbmNlKG5hbWUpO1xuICAgIGFwcC5hcHBseVN0YW5kYXJkVGFncygpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBBcHBcbiAgICogQHBhcmFtIG5hbWVcbiAgICogQHJldHVybnMge0FwcH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UobmFtZT86IHN0cmluZyk6IEFwcCB7XG4gICAgLy8gRGVzcGl0ZSBzdXBwb3J0aW5nIG11bHRpcGxlIHN0YWNrcyB5b3UgY2FuIHN0aWxsIG9ubHkgZXZlclxuICAgIC8vIGhhdmUgYSBzaW5nbGUgQXBwbGljYXRpb24gcGVyIENESyBkZXBsb3ltZW50XG4gICAgaWYgKCFBcHAuaW5zdGFuY2UpIHtcbiAgICAgIEFwcC5pbnN0YW5jZSA9IG5ldyBBcHAobmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwcC5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHN0YWNrIGJ5IGtleS4gSWYgdGhlIHN0YWNrIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqICBEZXBlbmRlbmNpZXMgYXJlIG9ubHkgYXBwbGllZCB0aGUgZmlyc3QgdGltZSBhIHN0YWNrIGlzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBzdGFja1xuICAgKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIHN0YWNrKHMpIHRoYXQgdGhpcyBzdGFjayBkZXBlbmRzIG9uXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXRTdGFjayhrZXk6IHN0cmluZywgZGVwZW5kZW5jaWVzPzogQXdzU3RhY2sgfCBBd3NTdGFja1tdKTogQXdzU3RhY2sge1xuICAgIGlmICghdGhpcy5zdGFja3Nba2V5XSkge1xuICAgICAgdGhpcy5zdGFja3Nba2V5XSA9IG5ldyBBd3NTdGFjayhrZXksIGRlcGVuZGVuY2llcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBjb21wdXRlIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfUNvbXB1dGVgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9Q29tcHV0ZWAsIFtcbiAgICAgIHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpLFxuICAgICAgdGhpcy5nZXREZWZhdWx0U3RvcmFnZVN0YWNrKClcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IG5ldHdvcmsgc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9TmV0d29ya2BcbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHROZXR3b3JrU3RhY2soKTogQXdzU3RhY2sge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrKGAke3RoaXMubmFtZX1OZXR3b3JrYCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfVN0b3JhZ2VgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCB2cGMuIElmIHRoZSBWUEMgZG9lcyBub3QgZXhpc3QgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJucyB7VnBjfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRWcGMoKTogSVZwYyB7XG4gICAgdmFyIG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgaWYgKCF0aGlzLmRlZmF1bHRWcGMpIHtcbiAgICAgIC8vIFVzZSBhbiBleGlzdGluZyBpbXBvcnRlZCBWUEMgaWYgb25lIHdhcyBzdXBwbGllZFxuICAgICAgaWYgKHRoaXMuZXhpc3RpbmdWcGNJZCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRWcGMgPSBWcGMuZnJvbUxvb2t1cChcbiAgICAgICAgICBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKSxcbiAgICAgICAgICBgJHt0aGlzLm5hbWV9SW1wb3J0ZWRWcGNgLFxuICAgICAgICAgIHsgdnBjSWQ6IHRoaXMuZXhpc3RpbmdWcGNJZCB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGF1dG9tYXRpY2FsbHkgZGVyaXZlIHRoZSBhY2NvdW50IGFuZCByZWdpb24gZnJvbSB0aGVcbiAgICAgICAgLy8gZW52aXJvbm1lbnQgdGhlIENESyBpcyBydW5uaW5nIGluLiBXaGVuIGFuIGFjY291bnQgSUQgaXMgYXZhaWxhYmxlLFxuICAgICAgICAvLyB1c2UgaXQgdG8gaW1wb3J0IHRoZSBjb3JyZXNwb25kaW5nIElQQU0gcG9vbCBzbyBDSURScyBhcmUgYWxsb2NhdGVkXG4gICAgICAgIC8vIGZyb20gYSBjZW50cmFsIHBvb2wgaW5zdGVhZCBvZiB1c2luZyB0aGUgZGVmYXVsdCAxMC4wLjAuMC8xNiBibG9jay5cblxuICAgICAgICBjb25zdCBhY2NvdW50SWQgPSBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9BQ0NPVU5UO1xuICAgICAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT047XG4gICAgICAgIGNvbnN0IGlzTWFuYWdlZEFjY291bnQgPVxuICAgICAgICAgIHByb2Nlc3MuZW52LkZKQUxMX01BTkFHRURfQUNDT1VOVCAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBpcHY0SXBhbVBvb2xJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaXNNYW5hZ2VkQWNjb3VudCkge1xuICAgICAgICAgIGlwdjRJcGFtUG9vbElkID0gRm4uaW1wb3J0VmFsdWUoYElwYW1Qb29sSWQke2FjY291bnRJZH1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpcHY0SXBhbVBvb2xJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGVmYXVsdFZwYyA9IFZwY0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5uYW1lfURlZmF1bHRWcGNgLCB7XG4gICAgICAgICAgYWNjb3VudElkLFxuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICBpcHY0SXBhbVBvb2xJZFxuICAgICAgICB9KSh0aGlzLCBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZwYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXVzZSBhbiBleGlzdGluZyBWUEMuXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgVnBjIG9iamVjdCBvciBhIHBsYWluIFZQQyBJRCBzdHJpbmcgZm9yIGNvbnZlbmllbmNlLlxuICAgKi9cbiAgcHVibGljIHVzZUV4aXN0aW5nVnBjKHZwY0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0VnBjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwidXNlRXhpc3RpbmdWcGMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBkZWZhdWx0IFZQQyBoYXMgYmVlbiBjcmVhdGVkXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5leGlzdGluZ1ZwY0lkID0gdnBjSWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmVpdmUgdGhlIGRlZmF1bHQgYXBwbGljYXRpb24gY29udGFpbmVyIHJlZ2lzdHJ5LiBJZiB0aGUgcmVnaXN0cnkgZG9lcyBub3QgZXhpc3RcbiAgICogIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKTogRWNyIHtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdEVjcikge1xuICAgICAgdmFyIG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgICB0aGlzLmRlZmF1bHRFY3IgPSBFY3JGYWN0b3J5LmJ1aWxkKGAke3RoaXMubmFtZX1FY3JgKShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgbmV0d29ya1N0YWNrLmdldFN0YWNrKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEVjcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBjb21wdXRlIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IGNvbXB1dGUgc3RhY2sgdXNpbmcgdGhlIGZhY3RvcnkgcGF0dGVybi5cbiAgICovXG4gIHB1YmxpYyBhZGRDb21wdXRlKGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXB1dGVTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdENvbXB1dGVTdGFjaygpO1xuICAgIGNvbXB1dGVTdGFjay5hZGRDb25zdHJ1Y3QoZm4odGhpcywgY29tcHV0ZVN0YWNrLmdldFN0YWNrKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhZGQgYSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBjb21wdXRlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFkZENvbXB1dGVSZXNvdXJjZShyZXNvdXJjZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgY29tcHV0ZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk7XG4gICAgY29tcHV0ZVN0YWNrLmFkZENvbnN0cnVjdChyZXNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogIEFkZCBhIHN0b3JhZ2UgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgc3RvcmFnZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKi9cbiAgcHVibGljIGFkZFN0b3JhZ2UoZm46IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQ29uc3RydWN0KTogU3RvcmFnZSB7XG4gICAgY29uc3Qgc3RvcmFnZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0U3RvcmFnZVN0YWNrKCk7XG4gICAgY29uc3Qgc3RvcmFnZUNvbnN0cnVjdCA9IGZuKHRoaXMsIHN0b3JhZ2VTdGFjay5nZXRTdGFjaygpKTtcbiAgICBzdG9yYWdlU3RhY2suYWRkQ29uc3RydWN0KHN0b3JhZ2VDb25zdHJ1Y3QpO1xuXG4gICAgcmV0dXJuIHN0b3JhZ2VDb25zdHJ1Y3QgYXMgdW5rbm93biBhcyBTdG9yYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFkZCBhIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IHN0b3JhZ2Ugc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYWRkU3RvcmFnZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRTdG9yYWdlU3RhY2soKTtcbiAgICBzdG9yYWdlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBzdGFuZGFyZCB0YWdzIHRvIGFsbCByZXNvdXJjZXMgaW4gdGhlIGFwcFxuICAgKiBTdGFuZGFyZCB0YWdzIGluY2x1ZGUgZW52aXJvbm1lbnQgYW5kIHNlcnZpY2UgbmFtZVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVN0YW5kYXJkVGFncygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBcbiAgICBjb25zdCBzdGFuZGFyZFRhZ3MgPSB7XG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IGNvbmZpZy5lbnZpcm9ubWVudCxcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiB0aGlzLm5hbWVcbiAgICB9O1xuICAgIFxuICAgIEFzcGVjdHMub2YodGhpcykuYWRkKG5ldyBTdGFuZGFyZFRhZ3NBc3BlY3Qoc3RhbmRhcmRUYWdzKSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGN1c3RvbSB0YWdzIHRvIGFsbCByZXNvdXJjZXMgaW4gdGhlIGFwcFxuICAgKiBAcGFyYW0gdGFncyBDdXN0b20gdGFncyB0byBhcHBseSB0byBhbGwgcmVzb3VyY2VzXG4gICAqIEBleGFtcGxlXG4gICAqIGFwcC5hZGRUYWdzKHtcbiAgICogICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IFwicGxhdGZvcm0tdGVhbVwiLFxuICAgKiAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246Y29zdC1jZW50ZXJcIjogXCJDQy0xMjNcIixcbiAgICogICBcInRlYW06c2xhY2stY2hhbm5lbFwiOiBcIiNwbGF0Zm9ybS1hbGVydHNcIlxuICAgKiB9KTtcbiAgICovXG4gIHB1YmxpYyBhZGRUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBBcHAge1xuICAgIEFzcGVjdHMub2YodGhpcykuYWRkKG5ldyBTdGFuZGFyZFRhZ3NBc3BlY3QodGFncykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcDtcbiJdfQ==
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBeUQ7QUFFekQsd0RBQWlFO0FBR2pFLDJDQUF1QztBQUN2QyxxREFBOEQ7QUFHOUQsbUVBQWdFO0FBQ2hFLGlEQUE4QztBQUU5Qzs7OztHQUlHO0FBQ0gsTUFBYSxHQUFJLFNBQVEsaUJBQU07SUFZN0IsWUFBb0IsSUFBYTtRQUMvQixLQUFLLEVBQUUsQ0FBQztRQVRGLFdBQU0sR0FBZ0MsRUFBRSxDQUFDO1FBS3pDLGVBQVUsR0FBOEIsRUFBRSxDQUFDO1FBQzNDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBS3JDLElBQUksSUFBSTtZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDOztZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBYTtRQUNoQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzdCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQWE7UUFDckMsNkRBQTZEO1FBQzdELCtDQUErQztRQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFFBQVEsQ0FBQyxHQUFXLEVBQUUsWUFBb0M7UUFDL0Qsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxJQUFJLENB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cnQgeyBBcHAgYXMgQ2RrQXBwLCBGbiwgQXNwZWN0cyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZwYywgVnBjRmFjdG9yeSB9IGZyb20gXCIuL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IElWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuXG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuL3Jlc291cmNlc1wiO1xuaW1wb3J0IHsgRWNyLCBFY3JGYWN0b3J5IH0gZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlL2VjclwiO1xuXG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSBcIi4vcGF0dGVybnMvYXdzL3N0b3JhZ2VcIjtcbmltcG9ydCB7IFN0YW5kYXJkVGFnc0FzcGVjdCB9IGZyb20gXCIuL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdFwiO1xuaW1wb3J0IHsgZ2V0Q29uZmlnIH0gZnJvbSBcIi4vdXRpbHMvZ2V0Q29uZmlnXCI7XG5cbi8qKlxuICogVGhlIGJhc2ljIGNvcm5lci1zdG9uZSBvZiBhbGwgRmphbGwtaG9zdGVkIGFwcGxpY2F0aW9ucy5cbiAqICBUaGlzIGNsYXNzIGlzIGEgc2luZ2xldG9uIGFuZCBzaG91bGQgYmUgdXNlZCB0byBjcmVhdGUgYW5kIG1hbmFnZVxuICogICBhbGwgcmVzb3VyY2VzIGluIGEgRmphbGwgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHAgZXh0ZW5kcyBDZGtBcHAge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQXBwIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhY2tzOiB7IFtrZXk6IHN0cmluZ106IEF3c1N0YWNrIH0gPSB7fTtcblxuICBwcml2YXRlIGRlZmF1bHRWcGM6IElWcGM7XG4gIHByaXZhdGUgZGVmYXVsdEVjcjogRWNyO1xuICBwcml2YXRlIGV4aXN0aW5nVnBjSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgZ2xvYmFsVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIGFzcGVjdEFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKG5hbWUpIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgZWxzZSB0aGlzLm5hbWUgPSBcIkZqYWxsQXBwXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSBhIGJhc2ljIEZqYWxsIEFwcGxpY2F0aW9uIHdpdGggc3RhbmRhcmQgdGFncyBhcHBsaWVkXG4gICAqIEBwYXJhbSBuYW1lIEFwcGxpY2F0aW9uIG5hbWVcbiAgICogQHJldHVybnMge0FwcH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0QXBwKG5hbWU/OiBzdHJpbmcpOiBBcHAge1xuICAgIGNvbnN0IGFwcCA9IEFwcC5nZXRJbnN0YW5jZShuYW1lKTtcbiAgICBhcHAuaW5pdGlhbGl6ZVN0YW5kYXJkVGFncygpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBBcHBcbiAgICogQHBhcmFtIG5hbWVcbiAgICogQHJldHVybnMge0FwcH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UobmFtZT86IHN0cmluZyk6IEFwcCB7XG4gICAgLy8gRGVzcGl0ZSBzdXBwb3J0aW5nIG11bHRpcGxlIHN0YWNrcyB5b3UgY2FuIHN0aWxsIG9ubHkgZXZlclxuICAgIC8vIGhhdmUgYSBzaW5nbGUgQXBwbGljYXRpb24gcGVyIENESyBkZXBsb3ltZW50XG4gICAgaWYgKCFBcHAuaW5zdGFuY2UpIHtcbiAgICAgIEFwcC5pbnN0YW5jZSA9IG5ldyBBcHAobmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwcC5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHN0YWNrIGJ5IGtleS4gSWYgdGhlIHN0YWNrIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqICBEZXBlbmRlbmNpZXMgYXJlIG9ubHkgYXBwbGllZCB0aGUgZmlyc3QgdGltZSBhIHN0YWNrIGlzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBzdGFja1xuICAgKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIHN0YWNrKHMpIHRoYXQgdGhpcyBzdGFjayBkZXBlbmRzIG9uXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXRTdGFjayhrZXk6IHN0cmluZywgZGVwZW5kZW5jaWVzPzogQXdzU3RhY2sgfCBBd3NTdGFja1tdKTogQXdzU3RhY2sge1xuICAgIC8vIEFwcGx5IHRoZSBhc3BlY3Qgb25jZSBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpcnN0IHN0YWNrXG4gICAgaWYgKCF0aGlzLmFzcGVjdEFwcGxpZWQgJiYgT2JqZWN0LmtleXModGhpcy5zdGFja3MpLmxlbmd0aCA9PT0gMCAmJiBPYmplY3Qua2V5cyh0aGlzLmdsb2JhbFRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXBwbHlUYWdzQXNwZWN0KCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghdGhpcy5zdGFja3Nba2V5XSkge1xuICAgICAgdGhpcy5zdGFja3Nba2V5XSA9IG5ldyBBd3NTdGFjayhrZXksIGRlcGVuZGVuY2llcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBjb21wdXRlIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfUNvbXB1dGVgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9Q29tcHV0ZWAsIFtcbiAgICAgIHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpLFxuICAgICAgdGhpcy5nZXREZWZhdWx0U3RvcmFnZVN0YWNrKClcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IG5ldHdvcmsgc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9TmV0d29ya2BcbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHROZXR3b3JrU3RhY2soKTogQXdzU3RhY2sge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrKGAke3RoaXMubmFtZX1OZXR3b3JrYCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfVN0b3JhZ2VgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCB2cGMuIElmIHRoZSBWUEMgZG9lcyBub3QgZXhpc3QgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJucyB7VnBjfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRWcGMoKTogSVZwYyB7XG4gICAgdmFyIG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgaWYgKCF0aGlzLmRlZmF1bHRWcGMpIHtcbiAgICAgIC8vIFVzZSBhbiBleGlzdGluZyBpbXBvcnRlZCBWUEMgaWYgb25lIHdhcyBzdXBwbGllZFxuICAgICAgaWYgKHRoaXMuZXhpc3RpbmdWcGNJZCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRWcGMgPSBWcGMuZnJvbUxvb2t1cChcbiAgICAgICAgICBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKSxcbiAgICAgICAgICBgJHt0aGlzLm5hbWV9SW1wb3J0ZWRWcGNgLFxuICAgICAgICAgIHsgdnBjSWQ6IHRoaXMuZXhpc3RpbmdWcGNJZCB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGF1dG9tYXRpY2FsbHkgZGVyaXZlIHRoZSBhY2NvdW50IGFuZCByZWdpb24gZnJvbSB0aGVcbiAgICAgICAgLy8gZW52aXJvbm1lbnQgdGhlIENESyBpcyBydW5uaW5nIGluLiBXaGVuIGFuIGFjY291bnQgSUQgaXMgYXZhaWxhYmxlLFxuICAgICAgICAvLyB1c2UgaXQgdG8gaW1wb3J0IHRoZSBjb3JyZXNwb25kaW5nIElQQU0gcG9vbCBzbyBDSURScyBhcmUgYWxsb2NhdGVkXG4gICAgICAgIC8vIGZyb20gYSBjZW50cmFsIHBvb2wgaW5zdGVhZCBvZiB1c2luZyB0aGUgZGVmYXVsdCAxMC4wLjAuMC8xNiBibG9jay5cblxuICAgICAgICBjb25zdCBhY2NvdW50SWQgPSBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9BQ0NPVU5UO1xuICAgICAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT047XG4gICAgICAgIGNvbnN0IGlzTWFuYWdlZEFjY291bnQgPVxuICAgICAgICAgIHByb2Nlc3MuZW52LkZKQUxMX01BTkFHRURfQUNDT1VOVCAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBpcHY0SXBhbVBvb2xJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaXNNYW5hZ2VkQWNjb3VudCkge1xuICAgICAgICAgIGlwdjRJcGFtUG9vbElkID0gRm4uaW1wb3J0VmFsdWUoYElwYW1Qb29sSWQke2FjY291bnRJZH1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpcHY0SXBhbVBvb2xJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGVmYXVsdFZwYyA9IFZwY0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5uYW1lfURlZmF1bHRWcGNgLCB7XG4gICAgICAgICAgYWNjb3VudElkLFxuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICBpcHY0SXBhbVBvb2xJZFxuICAgICAgICB9KSh0aGlzLCBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZwYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXVzZSBhbiBleGlzdGluZyBWUEMuXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgVnBjIG9iamVjdCBvciBhIHBsYWluIFZQQyBJRCBzdHJpbmcgZm9yIGNvbnZlbmllbmNlLlxuICAgKi9cbiAgcHVibGljIHVzZUV4aXN0aW5nVnBjKHZwY0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0VnBjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwidXNlRXhpc3RpbmdWcGMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBkZWZhdWx0IFZQQyBoYXMgYmVlbiBjcmVhdGVkXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5leGlzdGluZ1ZwY0lkID0gdnBjSWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmVpdmUgdGhlIGRlZmF1bHQgYXBwbGljYXRpb24gY29udGFpbmVyIHJlZ2lzdHJ5LiBJZiB0aGUgcmVnaXN0cnkgZG9lcyBub3QgZXhpc3RcbiAgICogIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKTogRWNyIHtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdEVjcikge1xuICAgICAgdmFyIG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgICB0aGlzLmRlZmF1bHRFY3IgPSBFY3JGYWN0b3J5LmJ1aWxkKGAke3RoaXMubmFtZX1FY3JgKShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgbmV0d29ya1N0YWNrLmdldFN0YWNrKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEVjcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBjb21wdXRlIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IGNvbXB1dGUgc3RhY2sgdXNpbmcgdGhlIGZhY3RvcnkgcGF0dGVybi5cbiAgICovXG4gIHB1YmxpYyBhZGRDb21wdXRlKGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXB1dGVTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdENvbXB1dGVTdGFjaygpO1xuICAgIGNvbXB1dGVTdGFjay5hZGRDb25zdHJ1Y3QoZm4odGhpcywgY29tcHV0ZVN0YWNrLmdldFN0YWNrKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhZGQgYSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBjb21wdXRlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFkZENvbXB1dGVSZXNvdXJjZShyZXNvdXJjZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgY29tcHV0ZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk7XG4gICAgY29tcHV0ZVN0YWNrLmFkZENvbnN0cnVjdChyZXNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogIEFkZCBhIHN0b3JhZ2UgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgc3RvcmFnZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKi9cbiAgcHVibGljIGFkZFN0b3JhZ2UoZm46IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQ29uc3RydWN0KTogU3RvcmFnZSB7XG4gICAgY29uc3Qgc3RvcmFnZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0U3RvcmFnZVN0YWNrKCk7XG4gICAgY29uc3Qgc3RvcmFnZUNvbnN0cnVjdCA9IGZuKHRoaXMsIHN0b3JhZ2VTdGFjay5nZXRTdGFjaygpKTtcbiAgICBzdG9yYWdlU3RhY2suYWRkQ29uc3RydWN0KHN0b3JhZ2VDb25zdHJ1Y3QpO1xuXG4gICAgcmV0dXJuIHN0b3JhZ2VDb25zdHJ1Y3QgYXMgdW5rbm93biBhcyBTdG9yYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFkZCBhIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IHN0b3JhZ2Ugc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYWRkU3RvcmFnZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRTdG9yYWdlU3RhY2soKTtcbiAgICBzdG9yYWdlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHN0YW5kYXJkIHRhZ3NcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0YW5kYXJkVGFncygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICB0aGlzLmdsb2JhbFRhZ3MgPSB7XG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IGNvbmZpZy5lbnZpcm9ubWVudCxcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9XG5cblxuICAvKipcbiAgICogQXBwbHkgYWxsIHRhZ3MgYXMgYSBzaW5nbGUgYXNwZWN0XG4gICAqL1xuICBwcml2YXRlIGFwcGx5VGFnc0FzcGVjdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXNwZWN0QXBwbGllZCAmJiBPYmplY3Qua2V5cyh0aGlzLmdsb2JhbFRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEFwcGx5IE9ORSBhc3BlY3Qgd2l0aCBhbGwgdGFncyB1c2luZyB0aGUgQ0RLIHYyLjIwNi4wKyBjb21wYXRpYmxlIFN0YW5kYXJkVGFnc0FzcGVjdFxuICAgICAgQXNwZWN0cy5vZih0aGlzKS5hZGQobmV3IFN0YW5kYXJkVGFnc0FzcGVjdCh0aGlzLmdsb2JhbFRhZ3MpKTtcbiAgICAgIHRoaXMuYXNwZWN0QXBwbGllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBjdXN0b20gdGFncyB0byBhbGwgcmVzb3VyY2VzIGluIHRoZSBhcHBcbiAgICogQHBhcmFtIHRhZ3MgQ3VzdG9tIHRhZ3MgdG8gYXBwbHkgdG8gYWxsIHJlc291cmNlc1xuICAgKiBAZXhhbXBsZVxuICAgKiBhcHAuYWRkVGFncyh7XG4gICAqICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiBcInBsYXRmb3JtLXRlYW1cIixcbiAgICogICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmNvc3QtY2VudGVyXCI6IFwiQ0MtMTIzXCIsXG4gICAqICAgXCJ0ZWFtOnNsYWNrLWNoYW5uZWxcIjogXCIjcGxhdGZvcm0tYWxlcnRzXCJcbiAgICogfSk7XG4gICAqL1xuICBwdWJsaWMgYWRkVGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogQXBwIHtcbiAgICAvLyBNZXJnZSB0YWdzIGJ1dCBkb24ndCBhcHBseSBhc3BlY3QgeWV0XG4gICAgdGhpcy5nbG9iYWxUYWdzID0ge1xuICAgICAgLi4udGhpcy5nbG9iYWxUYWdzLFxuICAgICAgLi4udGFnc1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwO1xuIl19
@@ -4,6 +4,7 @@ exports.Vpc = exports.VpcFactory = void 0;
4
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
5
  const ec2 = require("aws-cdk-lib/aws-ec2");
6
6
  const logGroup_1 = require("../logging/logGroup");
7
+ const tagResource_1 = require("../../../utils/tagResource");
7
8
  class VpcFactory {
8
9
  static build(id, props) {
9
10
  return (app, scope) => {
@@ -28,8 +29,10 @@ class Vpc extends ec2.Vpc {
28
29
  ipAddresses: Vpc.ipAddresses(scope, id, props)
29
30
  });
30
31
  if (!!props?.accountId) {
31
- // Required for the VPC to use the IPAM Pool to provsion IP addresses
32
- aws_cdk_lib_1.Tags.of(this).add("fjall:operations:pool", props?.accountId || "noPool");
32
+ // Required for the VPC to use the IPAM Pool to provision IP addresses
33
+ (0, tagResource_1.default)(this, {
34
+ "fjall:operations:pool": props?.accountId || "noPool"
35
+ });
33
36
  }
34
37
  }
35
38
  static availabilityZones(scope) {
@@ -81,4 +84,4 @@ class Vpc extends ec2.Vpc {
81
84
  }
82
85
  }
83
86
  exports.Vpc = Vpc;
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQXlEO0FBQ3pELDJDQUEyQztBQUkzQyxrREFBK0M7QUFVL0MsTUFBYSxVQUFVO0lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBVSxFQUFFLEtBQWU7UUFDdEMsT0FBTyxDQUFDLEdBQVEsRUFBRSxLQUFnQixFQUFFLEVBQUU7WUFDcEMsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsR0FBRyxLQUFLO2dCQUNSLEdBQUc7b0JBQ0QsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDLHNCQUFzQixFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFO2lCQUNoRTthQUNGLENBQUM7WUFDRixPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBWkQsZ0NBWUM7QUFFRCxNQUFhLEdBQUksU0FBUSxHQUFHLENBQUMsR0FBRztJQUM5QixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQ3hELEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtZQUN4QixHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDcEIsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztZQUMvQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztZQUN4QyxXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDdkIscUVBQXFFO1lBQ3JFLGtCQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsU0FBUyxJQUFJLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWdCO1FBQ3ZDLE9BQU8sbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQjtRQUM1RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUVqRCxPQUFPO1lBQ0wsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLEVBQUU7Z0JBQ3BCLFdBQVcsRUFBRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQ2xELElBQUksbUJBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRTtvQkFDdkMsWUFBWSxFQUFFLHFCQUFxQixFQUFFLEdBQUc7b0JBQ3hDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87aUJBQ3JDLENBQUMsQ0FDSDthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7WUFDdkMsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLGlCQUFpQixFQUFFLEVBQUU7WUFDckIsOEJBQThCLEVBQUUsRUFBRTtTQUNuQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBZ0I7UUFDdkMsT0FBTyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtZQUMxQixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQ1gsRUFBVSxFQUNWLFlBQW9CO1FBRXBCLE9BQU8sQ0FBQyxFQUFnQixFQUFFLEVBQUU7WUFDMUIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUMzQyxPQUFPLEVBQUUsR0FBRyxZQUFZLElBQUksRUFBRSxFQUFFO2FBQ2pDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXhFRCxrQkF3RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVGFncywgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuXG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi8uLi9hcHBcIjtcbmltcG9ydCB7IFN0YWNrQnVpbGRlciB9IGZyb20gXCIuLi9iYXNlL2F3c1N0YWNrXCI7XG5pbXBvcnQgeyBMb2dHcm91cCB9IGZyb20gXCIuLi9sb2dnaW5nL2xvZ0dyb3VwXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5pbnRlcmZhY2UgVnBjUHJvcHMgZXh0ZW5kcyBlYzIuVnBjUHJvcHMge1xuICByZWdpb24/OiBzdHJpbmc7XG4gIGFjY291bnRJZD86IHN0cmluZztcbiAgYXZhaWxhYmlsaXR5Wm9uZXM/OiBzdHJpbmdbXTtcbiAgaXB2NElwYW1Qb29sSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBWcGNGYWN0b3J5IHtcbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBWcGNQcm9wcykge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IHZwY1Byb3BzID0ge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwY05hbWU6IGAke2FwcC5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCkuZ2V0U3RhY2tOYW1lKCl9LyR7aWR9YFxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG5ldyBWcGMoc2NvcGUsIGlkLCB2cGNQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVnBjIGV4dGVuZHMgZWMyLlZwYyB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogVnBjUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgYHZwYy0ke2lkfWAsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdnBjTmFtZTogYHZwYy0ke2lkfWAsXG4gICAgICBhdmFpbGFiaWxpdHlab25lczogVnBjLmF2YWlsYWJpbGl0eVpvbmVzKHNjb3BlKSxcbiAgICAgIGZsb3dMb2dzOiBWcGMuZmxvd0xvZ3Moc2NvcGUsIGlkLCBwcm9wcyksXG4gICAgICBpcEFkZHJlc3NlczogVnBjLmlwQWRkcmVzc2VzKHNjb3BlLCBpZCwgcHJvcHMpXG4gICAgfSk7XG5cbiAgICBpZiAoISFwcm9wcz8uYWNjb3VudElkKSB7XG4gICAgICAvLyBSZXF1aXJlZCBmb3IgdGhlIFZQQyB0byB1c2UgdGhlIElQQU0gUG9vbCB0byBwcm92c2lvbiBJUCBhZGRyZXNzZXNcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKFwiZmphbGw6b3BlcmF0aW9uczpwb29sXCIsIHByb3BzPy5hY2NvdW50SWQgfHwgXCJub1Bvb2xcIik7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGF2YWlsYWJpbGl0eVpvbmVzKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICByZXR1cm4gU3RhY2sub2Yoc2NvcGUpLmF2YWlsYWJpbGl0eVpvbmVzLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgc3RhdGljIGZsb3dMb2dzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogVnBjUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzIHx8ICFwcm9wcy5hY2NvdW50SWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgW2Ake2lkfVZwY0Zsb3dMb2dzYF06IHtcbiAgICAgICAgZGVzdGluYXRpb246IGVjMi5GbG93TG9nRGVzdGluYXRpb24udG9DbG91ZFdhdGNoTG9ncyhcbiAgICAgICAgICBuZXcgTG9nR3JvdXAoc2NvcGUsIGAke2lkfUZsb3dMb2dHcm91cGAsIHtcbiAgICAgICAgICAgIGxvZ0dyb3VwTmFtZTogYC92cGMvZmxvd2xvZ3MvdnBjLSR7aWR9L2AsXG4gICAgICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1lcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBpcEFkZHJlc3NlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFZwY1Byb3BzKSB7XG4gICAgaWYgKCFwcm9wcz8uYWNjb3VudElkIHx8ICFwcm9wcz8uaXB2NElwYW1Qb29sSWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVjMi5JcEFkZHJlc3Nlcy5hd3NJcGFtQWxsb2NhdGlvbih7XG4gICAgICBpcHY0SXBhbVBvb2xJZDogcHJvcHMuaXB2NElwYW1Qb29sSWQsXG4gICAgICBpcHY0TmV0bWFza0xlbmd0aDogMjAsXG4gICAgICBkZWZhdWx0U3VibmV0SXB2NE5ldG1hc2tMZW5ndGg6IDIzXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQoaWQ6IHN0cmluZywgcHJvcHM/OiBWcGNQcm9wcyk6IChzYjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3Qge1xuICAgIHJldHVybiAoc2I6IFN0YWNrQnVpbGRlcikgPT4ge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHNiLmdldFN0YWNrKCksIGlkLCBwcm9wcyk7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogSW1wb3J0cyBhIHByZS1leGlzdGluZyBWUEMgUmVzb3VyY2UgaW50byB5b3VyIFN0YWNrXG4gICAqXG4gICAqIEJlZm9yZSB1c2luZyBhbiBpbXBvcnQgbWV0aG9kIGVuc3VyZSB5b3UgaGF2ZSBzZXQgdGhlIGFjY291bnQgYW5kIHJlZ2lvbiBwcm9wc1xuICAgKiAgd2hlbiBjcmVhdGluZyB5b3VyIEF3c1N0YWNrLlxuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIHZwY1N0YWNrTmFtZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGltcG9ydChcbiAgICBpZDogc3RyaW5nLFxuICAgIHZwY1N0YWNrTmFtZTogc3RyaW5nXG4gICk6IChzYjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3Qge1xuICAgIHJldHVybiAoc2I6IFN0YWNrQnVpbGRlcikgPT4ge1xuICAgICAgcmV0dXJuIGVjMi5WcGMuZnJvbUxvb2t1cChzYi5nZXRTdGFjaygpLCBpZCwge1xuICAgICAgICB2cGNOYW1lOiBgJHt2cGNTdGFja05hbWV9LyR7aWR9YFxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuIl19
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQW1EO0FBQ25ELDJDQUEyQztBQUkzQyxrREFBK0M7QUFFL0MsNERBQXFEO0FBU3JELE1BQWEsVUFBVTtJQUNyQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQVUsRUFBRSxLQUFlO1FBQ3RDLE9BQU8sQ0FBQyxHQUFRLEVBQUUsS0FBZ0IsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLEdBQUcsS0FBSztnQkFDUixHQUFHO29CQUNELE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRTtpQkFDaEU7YUFDRixDQUFDO1lBQ0YsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQVpELGdDQVlDO0FBRUQsTUFBYSxHQUFJLFNBQVEsR0FBRyxDQUFDLEdBQUc7SUFDOUIsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQjtRQUN4RCxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDeEIsR0FBRyxLQUFLO1lBQ1IsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3BCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7WUFDL0MsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUM7WUFDeEMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLHNFQUFzRTtZQUN0RSxJQUFBLHFCQUFXLEVBQUMsSUFBSSxFQUFFO2dCQUNoQix1QkFBdUIsRUFBRSxLQUFLLEVBQUUsU0FBUyxJQUFJLFFBQVE7YUFDdEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBZ0I7UUFDdkMsT0FBTyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQzVELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRWpELE9BQU87WUFDTCxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsRUFBRTtnQkFDcEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FDbEQsSUFBSSxtQkFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFO29CQUN2QyxZQUFZLEVBQUUscUJBQXFCLEVBQUUsR0FBRztvQkFDeEMsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztpQkFDckMsQ0FBQyxDQUNIO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0I7UUFDL0QsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDaEQsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztZQUN2QyxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDcEMsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQiw4QkFBOEIsRUFBRSxFQUFFO1NBQ25DLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQVUsRUFBRSxLQUFnQjtRQUN2QyxPQUFPLENBQUMsRUFBZ0IsRUFBRSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7Ozs7OztPQVNHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FDWCxFQUFVLEVBQ1YsWUFBb0I7UUFFcEIsT0FBTyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtZQUMxQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQzNDLE9BQU8sRUFBRSxHQUFHLFlBQVksSUFBSSxFQUFFLEVBQUU7YUFDakMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBMUVELGtCQTBFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5LCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5cbmltcG9ydCBBcHAgZnJvbSBcIi4uLy4uLy4uL2FwcFwiO1xuaW1wb3J0IHsgU3RhY2tCdWlsZGVyIH0gZnJvbSBcIi4uL2Jhc2UvYXdzU3RhY2tcIjtcbmltcG9ydCB7IExvZ0dyb3VwIH0gZnJvbSBcIi4uL2xvZ2dpbmcvbG9nR3JvdXBcIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgdGFnUmVzb3VyY2UgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3RhZ1Jlc291cmNlXCI7XG5cbmludGVyZmFjZSBWcGNQcm9wcyBleHRlbmRzIGVjMi5WcGNQcm9wcyB7XG4gIHJlZ2lvbj86IHN0cmluZztcbiAgYWNjb3VudElkPzogc3RyaW5nO1xuICBhdmFpbGFiaWxpdHlab25lcz86IHN0cmluZ1tdO1xuICBpcHY0SXBhbVBvb2xJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFZwY0ZhY3Rvcnkge1xuICBzdGF0aWMgYnVpbGQoaWQ6IHN0cmluZywgcHJvcHM6IFZwY1Byb3BzKSB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgY29uc3QgdnBjUHJvcHMgPSB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjTmFtZTogYCR7YXBwLmdldERlZmF1bHROZXR3b3JrU3RhY2soKS5nZXRTdGFja05hbWUoKX0vJHtpZH1gXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IFZwYyhzY29wZSwgaWQsIHZwY1Byb3BzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWcGMgZXh0ZW5kcyBlYzIuVnBjIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBWcGNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBgdnBjLSR7aWR9YCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB2cGNOYW1lOiBgdnBjLSR7aWR9YCxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBWcGMuYXZhaWxhYmlsaXR5Wm9uZXMoc2NvcGUpLFxuICAgICAgZmxvd0xvZ3M6IFZwYy5mbG93TG9ncyhzY29wZSwgaWQsIHByb3BzKSxcbiAgICAgIGlwQWRkcmVzc2VzOiBWcGMuaXBBZGRyZXNzZXMoc2NvcGUsIGlkLCBwcm9wcylcbiAgICB9KTtcblxuICAgIGlmICghIXByb3BzPy5hY2NvdW50SWQpIHtcbiAgICAgIC8vIFJlcXVpcmVkIGZvciB0aGUgVlBDIHRvIHVzZSB0aGUgSVBBTSBQb29sIHRvIHByb3Zpc2lvbiBJUCBhZGRyZXNzZXNcbiAgICAgIHRhZ1Jlc291cmNlKHRoaXMsIHtcbiAgICAgICAgXCJmamFsbDpvcGVyYXRpb25zOnBvb2xcIjogcHJvcHM/LmFjY291bnRJZCB8fCBcIm5vUG9vbFwiXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXZhaWxhYmlsaXR5Wm9uZXMoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgIHJldHVybiBTdGFjay5vZihzY29wZSkuYXZhaWxhYmlsaXR5Wm9uZXMuc2xpY2UoMCwgMyk7XG4gIH1cblxuICBzdGF0aWMgZmxvd0xvZ3Moc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBWcGNQcm9wcykge1xuICAgIGlmICghcHJvcHMgfHwgIXByb3BzLmFjY291bnRJZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBbYCR7aWR9VnBjRmxvd0xvZ3NgXToge1xuICAgICAgICBkZXN0aW5hdGlvbjogZWMyLkZsb3dMb2dEZXN0aW5hdGlvbi50b0Nsb3VkV2F0Y2hMb2dzKFxuICAgICAgICAgIG5ldyBMb2dHcm91cChzY29wZSwgYCR7aWR9Rmxvd0xvZ0dyb3VwYCwge1xuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL3ZwYy9mbG93bG9ncy92cGMtJHtpZH0vYCxcbiAgICAgICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGlwQWRkcmVzc2VzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogVnBjUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzPy5hY2NvdW50SWQgfHwgIXByb3BzPy5pcHY0SXBhbVBvb2xJZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZWMyLklwQWRkcmVzc2VzLmF3c0lwYW1BbGxvY2F0aW9uKHtcbiAgICAgIGlwdjRJcGFtUG9vbElkOiBwcm9wcy5pcHY0SXBhbVBvb2xJZCxcbiAgICAgIGlwdjROZXRtYXNrTGVuZ3RoOiAyMCxcbiAgICAgIGRlZmF1bHRTdWJuZXRJcHY0TmV0bWFza0xlbmd0aDogMjNcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wcz86IFZwY1Byb3BzKTogKHNiOiBTdGFja0J1aWxkZXIpID0+IENvbnN0cnVjdCB7XG4gICAgcmV0dXJuIChzYjogU3RhY2tCdWlsZGVyKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoc2IuZ2V0U3RhY2soKSwgaWQsIHByb3BzKTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBJbXBvcnRzIGEgcHJlLWV4aXN0aW5nIFZQQyBSZXNvdXJjZSBpbnRvIHlvdXIgU3RhY2tcbiAgICpcbiAgICogQmVmb3JlIHVzaW5nIGFuIGltcG9ydCBtZXRob2QgZW5zdXJlIHlvdSBoYXZlIHNldCB0aGUgYWNjb3VudCBhbmQgcmVnaW9uIHByb3BzXG4gICAqICB3aGVuIGNyZWF0aW5nIHlvdXIgQXdzU3RhY2suXG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gdnBjU3RhY2tOYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgaW1wb3J0KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgdnBjU3RhY2tOYW1lOiBzdHJpbmdcbiAgKTogKHNiOiBTdGFja0J1aWxkZXIpID0+IENvbnN0cnVjdCB7XG4gICAgcmV0dXJuIChzYjogU3RhY2tCdWlsZGVyKSA9PiB7XG4gICAgICByZXR1cm4gZWMyLlZwYy5mcm9tTG9va3VwKHNiLmdldFN0YWNrKCksIGlkLCB7XG4gICAgICAgIHZwY05hbWU6IGAke3ZwY1N0YWNrTmFtZX0vJHtpZH1gXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import { Stack, CfnResource } from "aws-cdk-lib";
2
+ import { IConstruct } from "constructs";
3
+ /**
4
+ * DirectTagging provides a way to apply tags to resources without using aspects.
5
+ * This approach works by directly manipulating CloudFormation resources during
6
+ * stack initialization, avoiding the infinite loop issue in CDK v2.206.0+
7
+ */
8
+ export declare class DirectTagging {
9
+ private static globalTags;
10
+ private static stackTags;
11
+ /**
12
+ * Set global tags that will be applied to all resources
13
+ */
14
+ static setGlobalTags(tags: {
15
+ [key: string]: string;
16
+ }): void;
17
+ /**
18
+ * Set tags for a specific stack
19
+ */
20
+ static setStackTags(stack: Stack, tags: {
21
+ [key: string]: string;
22
+ }): void;
23
+ /**
24
+ * Apply tags to a CloudFormation resource directly
25
+ */
26
+ static tagCfnResource(resource: CfnResource): void;
27
+ /**
28
+ * Process a construct tree and tag all CloudFormation resources
29
+ */
30
+ static processConstructTree(root: IConstruct): void;
31
+ }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DirectTagging = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ /**
6
+ * DirectTagging provides a way to apply tags to resources without using aspects.
7
+ * This approach works by directly manipulating CloudFormation resources during
8
+ * stack initialization, avoiding the infinite loop issue in CDK v2.206.0+
9
+ */
10
+ class DirectTagging {
11
+ /**
12
+ * Set global tags that will be applied to all resources
13
+ */
14
+ static setGlobalTags(tags) {
15
+ DirectTagging.globalTags = {
16
+ ...DirectTagging.globalTags,
17
+ ...tags
18
+ };
19
+ }
20
+ /**
21
+ * Set tags for a specific stack
22
+ */
23
+ static setStackTags(stack, tags) {
24
+ const existingTags = DirectTagging.stackTags.get(stack) || {};
25
+ DirectTagging.stackTags.set(stack, {
26
+ ...existingTags,
27
+ ...tags
28
+ });
29
+ }
30
+ /**
31
+ * Apply tags to a CloudFormation resource directly
32
+ */
33
+ static tagCfnResource(resource) {
34
+ const stack = aws_cdk_lib_1.Stack.of(resource);
35
+ const stackTags = DirectTagging.stackTags.get(stack) || {};
36
+ const allTags = {
37
+ ...DirectTagging.globalTags,
38
+ ...stackTags
39
+ };
40
+ if (Object.keys(allTags).length === 0) {
41
+ return;
42
+ }
43
+ // Check if resource supports tags
44
+ if (!('tags' in resource) || typeof resource.tags !== 'object') {
45
+ return;
46
+ }
47
+ // Get existing tags
48
+ const existingTags = resource.tags || [];
49
+ const tagMap = new Map();
50
+ // Add existing tags to map
51
+ if (Array.isArray(existingTags)) {
52
+ existingTags.forEach((tag) => {
53
+ if (tag.key && tag.value) {
54
+ tagMap.set(tag.key, tag.value);
55
+ }
56
+ });
57
+ }
58
+ // Add new tags (overwriting if they exist)
59
+ Object.entries(allTags).forEach(([key, value]) => {
60
+ tagMap.set(key, value);
61
+ });
62
+ // Convert back to array format
63
+ resource.tags = Array.from(tagMap.entries()).map(([key, value]) => ({
64
+ key,
65
+ value
66
+ }));
67
+ }
68
+ /**
69
+ * Process a construct tree and tag all CloudFormation resources
70
+ */
71
+ static processConstructTree(root) {
72
+ const processNode = (node) => {
73
+ // Check if this is a CloudFormation resource
74
+ if (aws_cdk_lib_1.CfnResource.isCfnResource(node)) {
75
+ DirectTagging.tagCfnResource(node);
76
+ }
77
+ // Process children
78
+ node.node.children.forEach(child => processNode(child));
79
+ };
80
+ processNode(root);
81
+ }
82
+ }
83
+ exports.DirectTagging = DirectTagging;
84
+ DirectTagging.globalTags = {};
85
+ DirectTagging.stackTags = new Map();
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0VGFnZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi91dGlscy9kaXJlY3RUYWdnaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFpRDtBQUdqRDs7OztHQUlHO0FBQ0gsTUFBYSxhQUFhO0lBSXhCOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUErQjtRQUN6RCxhQUFhLENBQUMsVUFBVSxHQUFHO1lBQ3pCLEdBQUcsYUFBYSxDQUFDLFVBQVU7WUFDM0IsR0FBRyxJQUFJO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBWSxFQUFFLElBQStCO1FBQ3RFLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5RCxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDakMsR0FBRyxZQUFZO1lBQ2YsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFxQjtRQUNoRCxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLGFBQWEsQ0FBQyxVQUFVO1lBQzNCLEdBQUcsU0FBUztTQUNiLENBQUM7UUFFRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0QsT0FBTztRQUNULENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFFekMsMkJBQTJCO1FBQzNCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2hDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCwrQkFBK0I7UUFDL0IsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLEdBQUc7WUFDSCxLQUFLO1NBQ04sQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBZ0I7UUFDakQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFnQixFQUFFLEVBQUU7WUFDdkMsNkNBQTZDO1lBQzdDLElBQUkseUJBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBRUQsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQztRQUVGLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDOztBQXJGSCxzQ0FzRkM7QUFyRmdCLHdCQUFVLEdBQThCLEVBQUUsQ0FBQztBQUMzQyx1QkFBUyxHQUEwQyxJQUFJLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIENmblJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJQ29uc3RydWN0LCBOb2RlIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBEaXJlY3RUYWdnaW5nIHByb3ZpZGVzIGEgd2F5IHRvIGFwcGx5IHRhZ3MgdG8gcmVzb3VyY2VzIHdpdGhvdXQgdXNpbmcgYXNwZWN0cy5cbiAqIFRoaXMgYXBwcm9hY2ggd29ya3MgYnkgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIENsb3VkRm9ybWF0aW9uIHJlc291cmNlcyBkdXJpbmdcbiAqIHN0YWNrIGluaXRpYWxpemF0aW9uLCBhdm9pZGluZyB0aGUgaW5maW5pdGUgbG9vcCBpc3N1ZSBpbiBDREsgdjIuMjA2LjArXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXJlY3RUYWdnaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2xvYmFsVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBzdGFja1RhZ3M6IE1hcDxTdGFjaywgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4gPSBuZXcgTWFwKCk7XG4gIFxuICAvKipcbiAgICogU2V0IGdsb2JhbCB0YWdzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCByZXNvdXJjZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2V0R2xvYmFsVGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgRGlyZWN0VGFnZ2luZy5nbG9iYWxUYWdzID0ge1xuICAgICAgLi4uRGlyZWN0VGFnZ2luZy5nbG9iYWxUYWdzLFxuICAgICAgLi4udGFnc1xuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXQgdGFncyBmb3IgYSBzcGVjaWZpYyBzdGFja1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzZXRTdGFja1RhZ3Moc3RhY2s6IFN0YWNrLCB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gRGlyZWN0VGFnZ2luZy5zdGFja1RhZ3MuZ2V0KHN0YWNrKSB8fCB7fTtcbiAgICBEaXJlY3RUYWdnaW5nLnN0YWNrVGFncy5zZXQoc3RhY2ssIHtcbiAgICAgIC4uLmV4aXN0aW5nVGFncyxcbiAgICAgIC4uLnRhZ3NcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEFwcGx5IHRhZ3MgdG8gYSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSBkaXJlY3RseVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0YWdDZm5SZXNvdXJjZShyZXNvdXJjZTogQ2ZuUmVzb3VyY2UpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICBjb25zdCBzdGFja1RhZ3MgPSBEaXJlY3RUYWdnaW5nLnN0YWNrVGFncy5nZXQoc3RhY2spIHx8IHt9O1xuICAgIGNvbnN0IGFsbFRhZ3MgPSB7XG4gICAgICAuLi5EaXJlY3RUYWdnaW5nLmdsb2JhbFRhZ3MsXG4gICAgICAuLi5zdGFja1RhZ3NcbiAgICB9O1xuICAgIFxuICAgIGlmIChPYmplY3Qua2V5cyhhbGxUYWdzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgcmVzb3VyY2Ugc3VwcG9ydHMgdGFnc1xuICAgIGlmICghKCd0YWdzJyBpbiByZXNvdXJjZSkgfHwgdHlwZW9mIHJlc291cmNlLnRhZ3MgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEdldCBleGlzdGluZyB0YWdzXG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gcmVzb3VyY2UudGFncyB8fCBbXTtcbiAgICBjb25zdCB0YWdNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIFxuICAgIC8vIEFkZCBleGlzdGluZyB0YWdzIHRvIG1hcFxuICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nVGFncykpIHtcbiAgICAgIGV4aXN0aW5nVGFncy5mb3JFYWNoKCh0YWc6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGFnLmtleSAmJiB0YWcudmFsdWUpIHtcbiAgICAgICAgICB0YWdNYXAuc2V0KHRhZy5rZXksIHRhZy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgbmV3IHRhZ3MgKG92ZXJ3cml0aW5nIGlmIHRoZXkgZXhpc3QpXG4gICAgT2JqZWN0LmVudHJpZXMoYWxsVGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICB0YWdNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIENvbnZlcnQgYmFjayB0byBhcnJheSBmb3JtYXRcbiAgICByZXNvdXJjZS50YWdzID0gQXJyYXkuZnJvbSh0YWdNYXAuZW50cmllcygpKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlXG4gICAgfSkpO1xuICB9XG4gIFxuICAvKipcbiAgICogUHJvY2VzcyBhIGNvbnN0cnVjdCB0cmVlIGFuZCB0YWcgYWxsIENsb3VkRm9ybWF0aW9uIHJlc291cmNlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBwcm9jZXNzQ29uc3RydWN0VHJlZShyb290OiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgcHJvY2Vzc05vZGUgPSAobm9kZTogSUNvbnN0cnVjdCkgPT4ge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIENsb3VkRm9ybWF0aW9uIHJlc291cmNlXG4gICAgICBpZiAoQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShub2RlKSkge1xuICAgICAgICBEaXJlY3RUYWdnaW5nLnRhZ0NmblJlc291cmNlKG5vZGUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm9jZXNzIGNoaWxkcmVuXG4gICAgICBub2RlLm5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBwcm9jZXNzTm9kZShjaGlsZCkpO1xuICAgIH07XG4gICAgXG4gICAgcHJvY2Vzc05vZGUocm9vdCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,8 @@
1
+ import { Construct } from "constructs";
2
+ /**
3
+ * Base construct for Fjall resources that automatically
4
+ * applies tags from context during construction.
5
+ */
6
+ export declare class FjallConstruct extends Construct {
7
+ constructor(scope: Construct, id: string);
8
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FjallConstruct = void 0;
4
+ const constructs_1 = require("constructs");
5
+ const tagContext_1 = require("./tagContext");
6
+ /**
7
+ * Base construct for Fjall resources that automatically
8
+ * applies tags from context during construction.
9
+ */
10
+ class FjallConstruct extends constructs_1.Construct {
11
+ constructor(scope, id) {
12
+ super(scope, id);
13
+ // Apply tags from context during construction
14
+ tagContext_1.TagContext.applyTagsFromContext(this.node);
15
+ }
16
+ }
17
+ exports.FjallConstruct = FjallConstruct;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmphbGxDb25zdHJ1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvZmphbGxDb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUEwQztBQUUxQzs7O0dBR0c7QUFDSCxNQUFhLGNBQWUsU0FBUSxzQkFBUztJQUMzQyxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDhDQUE4QztRQUM5Qyx1QkFBVSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFQRCx3Q0FPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBUYWdDb250ZXh0IH0gZnJvbSBcIi4vdGFnQ29udGV4dFwiO1xuXG4vKipcbiAqIEJhc2UgY29uc3RydWN0IGZvciBGamFsbCByZXNvdXJjZXMgdGhhdCBhdXRvbWF0aWNhbGx5XG4gKiBhcHBsaWVzIHRhZ3MgZnJvbSBjb250ZXh0IGR1cmluZyBjb25zdHJ1Y3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBGamFsbENvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIFxuICAgIC8vIEFwcGx5IHRhZ3MgZnJvbSBjb250ZXh0IGR1cmluZyBjb25zdHJ1Y3Rpb25cbiAgICBUYWdDb250ZXh0LmFwcGx5VGFnc0Zyb21Db250ZXh0KHRoaXMubm9kZSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ import { DefaultStackSynthesizer } from "aws-cdk-lib";
2
+ import { ISynthesisSession } from "aws-cdk-lib/core";
3
+ /**
4
+ * Custom stack synthesizer that applies tags during synthesis.
5
+ * This avoids the infinite loop issue with aspects in CDK v2.206.0+
6
+ */
7
+ export declare class FjallStackSynthesizer extends DefaultStackSynthesizer {
8
+ synthesize(session: ISynthesisSession): void;
9
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FjallStackSynthesizer = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const directTagging_1 = require("./directTagging");
6
+ /**
7
+ * Custom stack synthesizer that applies tags during synthesis.
8
+ * This avoids the infinite loop issue with aspects in CDK v2.206.0+
9
+ */
10
+ class FjallStackSynthesizer extends aws_cdk_lib_1.DefaultStackSynthesizer {
11
+ synthesize(session) {
12
+ const stack = this.boundStack;
13
+ // Process the entire construct tree to apply tags
14
+ if (stack) {
15
+ directTagging_1.DirectTagging.processConstructTree(stack);
16
+ }
17
+ // Continue with normal synthesis
18
+ super.synthesize(session);
19
+ }
20
+ }
21
+ exports.FjallStackSynthesizer = FjallStackSynthesizer;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmphbGxTdGFja1N5bnRoZXNpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL2ZqYWxsU3RhY2tTeW50aGVzaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBc0Q7QUFFdEQsbURBQWdEO0FBRWhEOzs7R0FHRztBQUNILE1BQWEscUJBQXNCLFNBQVEscUNBQXVCO0lBQ3pELFVBQVUsQ0FBQyxPQUEwQjtRQUMxQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRTlCLGtEQUFrRDtRQUNsRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsNkJBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBWkQsc0RBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0U3RhY2tTeW50aGVzaXplciB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSVN5bnRoZXNpc1Nlc3Npb24gfSBmcm9tIFwiYXdzLWNkay1saWIvY29yZVwiO1xuaW1wb3J0IHsgRGlyZWN0VGFnZ2luZyB9IGZyb20gXCIuL2RpcmVjdFRhZ2dpbmdcIjtcblxuLyoqXG4gKiBDdXN0b20gc3RhY2sgc3ludGhlc2l6ZXIgdGhhdCBhcHBsaWVzIHRhZ3MgZHVyaW5nIHN5bnRoZXNpcy5cbiAqIFRoaXMgYXZvaWRzIHRoZSBpbmZpbml0ZSBsb29wIGlzc3VlIHdpdGggYXNwZWN0cyBpbiBDREsgdjIuMjA2LjArXG4gKi9cbmV4cG9ydCBjbGFzcyBGamFsbFN0YWNrU3ludGhlc2l6ZXIgZXh0ZW5kcyBEZWZhdWx0U3RhY2tTeW50aGVzaXplciB7XG4gIHB1YmxpYyBzeW50aGVzaXplKHNlc3Npb246IElTeW50aGVzaXNTZXNzaW9uKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmJvdW5kU3RhY2s7XG4gICAgXG4gICAgLy8gUHJvY2VzcyB0aGUgZW50aXJlIGNvbnN0cnVjdCB0cmVlIHRvIGFwcGx5IHRhZ3NcbiAgICBpZiAoc3RhY2spIHtcbiAgICAgIERpcmVjdFRhZ2dpbmcucHJvY2Vzc0NvbnN0cnVjdFRyZWUoc3RhY2spO1xuICAgIH1cbiAgICBcbiAgICAvLyBDb250aW51ZSB3aXRoIG5vcm1hbCBzeW50aGVzaXNcbiAgICBzdXBlci5zeW50aGVzaXplKHNlc3Npb24pO1xuICB9XG59XG4iXX0=
@@ -3,40 +3,18 @@ import { IConstruct } from "constructs";
3
3
  /**
4
4
  * Aspect to enforce a standard set of tags on every tag-capable resource in a construct tree.
5
5
  *
6
- * Usage attach once near the root of your CDK app (or to an individual stack):
7
- * ```ts
8
- * import { App, Aspects } from "aws-cdk-lib";
9
- * import { StandardTagsAspect } from "./utils";
10
- *
11
- * const app = new App();
12
- *
13
- * // Define the required tags
14
- * const tags = {
15
- * "fjall:costAllocation:environment": "production",
16
- * "fjall:costAllocation:owner": "engineering"
17
- * };
18
- *
19
- * // Add the aspect – CDK will invoke it for every construct during synthesis
20
- * Aspects.of(app).add(new StandardTagsAspect(tags));
21
- *
22
- * // define stacks/constructs after the aspect is attached
23
- * new MyStack(app, "MyStack");
24
- *
25
- * app.synth();
26
- * ```
27
- *
28
- * How it works:
29
- * 1. CDK traverses every construct and calls `visit(node)`.
30
- * 2. For each required tag the aspect adds it to the construct via `Tags.of(node).add()`.
31
- * 3. Constructs that don't support tagging are silently ignored.
32
- * 4. The resulting CloudFormation template contains the enforced tags on all resources.
33
- *
34
- * If a tag already exists on a construct, CDK de-duplicates by key so no duplication occurs.
6
+ * Updated for CDK v2.206.0+ compatibility:
7
+ * - Avoids using any tagging APIs during aspect visitation to prevent infinite loops
8
+ * - Uses a synthesis-time approach to modify CloudFormation templates
9
+ * - Maintains the same clean API and automatic tagging benefits
35
10
  */
36
11
  export declare class StandardTagsAspect implements IAspect {
37
12
  private readonly requiredTags;
13
+ private readonly taggedResources;
38
14
  constructor(requiredTags: {
39
15
  [key: string]: string;
40
16
  });
41
17
  visit(node: IConstruct): void;
18
+ private processCfnResource;
19
+ private buildTagsArray;
42
20
  }
@@ -5,46 +5,93 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
5
  /**
6
6
  * Aspect to enforce a standard set of tags on every tag-capable resource in a construct tree.
7
7
  *
8
- * Usage attach once near the root of your CDK app (or to an individual stack):
9
- * ```ts
10
- * import { App, Aspects } from "aws-cdk-lib";
11
- * import { StandardTagsAspect } from "./utils";
12
- *
13
- * const app = new App();
14
- *
15
- * // Define the required tags
16
- * const tags = {
17
- * "fjall:costAllocation:environment": "production",
18
- * "fjall:costAllocation:owner": "engineering"
19
- * };
20
- *
21
- * // Add the aspect – CDK will invoke it for every construct during synthesis
22
- * Aspects.of(app).add(new StandardTagsAspect(tags));
23
- *
24
- * // define stacks/constructs after the aspect is attached
25
- * new MyStack(app, "MyStack");
26
- *
27
- * app.synth();
28
- * ```
29
- *
30
- * How it works:
31
- * 1. CDK traverses every construct and calls `visit(node)`.
32
- * 2. For each required tag the aspect adds it to the construct via `Tags.of(node).add()`.
33
- * 3. Constructs that don't support tagging are silently ignored.
34
- * 4. The resulting CloudFormation template contains the enforced tags on all resources.
35
- *
36
- * If a tag already exists on a construct, CDK de-duplicates by key so no duplication occurs.
8
+ * Updated for CDK v2.206.0+ compatibility:
9
+ * - Avoids using any tagging APIs during aspect visitation to prevent infinite loops
10
+ * - Uses a synthesis-time approach to modify CloudFormation templates
11
+ * - Maintains the same clean API and automatic tagging benefits
37
12
  */
38
13
  class StandardTagsAspect {
39
14
  constructor(requiredTags) {
15
+ this.taggedResources = new WeakSet();
40
16
  this.requiredTags = requiredTags;
41
17
  }
42
18
  visit(node) {
43
- // Only attempt to tag constructs that support tagging
44
- for (const [key, value] of Object.entries(this.requiredTags)) {
45
- aws_cdk_lib_1.Tags.of(node).add(key, value);
19
+ // Skip if already processed
20
+ if (this.taggedResources.has(node)) {
21
+ return;
22
+ }
23
+ // Process L1 (CFN) resources only
24
+ if (aws_cdk_lib_1.CfnResource.isCfnResource(node)) {
25
+ this.processCfnResource(node);
26
+ this.taggedResources.add(node);
27
+ }
28
+ }
29
+ processCfnResource(resource) {
30
+ // List of CloudFormation resource types that don't support tags
31
+ const unsupportedTypes = [
32
+ 'AWS::CloudFormation::WaitConditionHandle',
33
+ 'AWS::CloudFormation::WaitCondition',
34
+ 'AWS::Lambda::Permission',
35
+ 'AWS::IAM::Policy',
36
+ 'AWS::IAM::Role',
37
+ 'AWS::IAM::User',
38
+ 'AWS::IAM::Group',
39
+ 'AWS::IAM::ManagedPolicy',
40
+ 'AWS::IAM::InstanceProfile',
41
+ 'AWS::Logs::LogGroup',
42
+ 'AWS::Logs::LogStream',
43
+ 'AWS::Events::Rule',
44
+ 'AWS::Route53::RecordSet',
45
+ 'AWS::Route53::RecordSetGroup',
46
+ 'AWS::CloudWatch::Alarm',
47
+ 'AWS::CloudWatch::Dashboard'
48
+ ];
49
+ if (unsupportedTypes.includes(resource.cfnResourceType)) {
50
+ return;
51
+ }
52
+ // Add a synthesis hook to modify the CloudFormation template
53
+ const stack = aws_cdk_lib_1.Stack.of(resource);
54
+ const logicalId = stack.getLogicalId(resource);
55
+ // Use addTransform to add tags during synthesis
56
+ resource.addPropertyOverride('Tags', this.buildTagsArray(resource));
57
+ }
58
+ buildTagsArray(resource) {
59
+ const tagMap = new Map();
60
+ // Get any existing tags if they exist
61
+ const existingTags = resource.tags || [];
62
+ // Process existing tags if they're in array format
63
+ if (Array.isArray(existingTags)) {
64
+ existingTags.forEach((tag) => {
65
+ if (tag && typeof tag === 'object' && 'Key' in tag && 'Value' in tag) {
66
+ tagMap.set(tag.Key, tag.Value);
67
+ }
68
+ else if (tag && typeof tag === 'object' && 'key' in tag && 'value' in tag) {
69
+ tagMap.set(tag.key, tag.value);
70
+ }
71
+ });
46
72
  }
73
+ // Check for direct tags in metadata
74
+ const metadata = resource.node.metadata;
75
+ const directTagsMetadata = metadata.filter(m => m.type === 'fjall:direct-tags');
76
+ directTagsMetadata.forEach(m => {
77
+ if (m.data && typeof m.data === 'object') {
78
+ Object.entries(m.data).forEach(([key, value]) => {
79
+ if (typeof value === 'string') {
80
+ tagMap.set(key, value);
81
+ }
82
+ });
83
+ }
84
+ });
85
+ // Add required tags (overwriting if they exist)
86
+ Object.entries(this.requiredTags).forEach(([key, value]) => {
87
+ tagMap.set(key, value);
88
+ });
89
+ // Convert to CloudFormation format
90
+ return Array.from(tagMap.entries()).map(([key, value]) => ({
91
+ Key: key,
92
+ Value: value
93
+ }));
47
94
  }
48
95
  }
49
96
  exports.StandardTagsAspect = StandardTagsAspect;
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBNEM7QUFHNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBQ0gsTUFBYSxrQkFBa0I7SUFHN0IsWUFBWSxZQUF1QztRQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQWdCO1FBQ3BCLHNEQUFzRDtRQUN0RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM3RCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFiRCxnREFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElBc3BlY3QsIFRhZ3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFzcGVjdCB0byBlbmZvcmNlIGEgc3RhbmRhcmQgc2V0IG9mIHRhZ3Mgb24gZXZlcnkgdGFnLWNhcGFibGUgcmVzb3VyY2UgaW4gYSBjb25zdHJ1Y3QgdHJlZS5cbiAqXG4gKiBVc2FnZSDigJMgYXR0YWNoIG9uY2UgbmVhciB0aGUgcm9vdCBvZiB5b3VyIENESyBhcHAgKG9yIHRvIGFuIGluZGl2aWR1YWwgc3RhY2spOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IEFwcCwgQXNwZWN0cyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuICogaW1wb3J0IHsgU3RhbmRhcmRUYWdzQXNwZWN0IH0gZnJvbSBcIi4vdXRpbHNcIjtcbiAqXG4gKiBjb25zdCBhcHAgPSBuZXcgQXBwKCk7XG4gKlxuICogLy8gRGVmaW5lIHRoZSByZXF1aXJlZCB0YWdzXG4gKiBjb25zdCB0YWdzID0ge1xuICogICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IFwicHJvZHVjdGlvblwiLFxuICogICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IFwiZW5naW5lZXJpbmdcIlxuICogfTtcbiAqXG4gKiAvLyBBZGQgdGhlIGFzcGVjdCDigJMgQ0RLIHdpbGwgaW52b2tlIGl0IGZvciBldmVyeSBjb25zdHJ1Y3QgZHVyaW5nIHN5bnRoZXNpc1xuICogQXNwZWN0cy5vZihhcHApLmFkZChuZXcgU3RhbmRhcmRUYWdzQXNwZWN0KHRhZ3MpKTtcbiAqXG4gKiAvLyBkZWZpbmUgc3RhY2tzL2NvbnN0cnVjdHMgYWZ0ZXIgdGhlIGFzcGVjdCBpcyBhdHRhY2hlZFxuICogbmV3IE15U3RhY2soYXBwLCBcIk15U3RhY2tcIik7XG4gKlxuICogYXBwLnN5bnRoKCk7XG4gKiBgYGBcbiAqXG4gKiBIb3cgaXQgd29ya3M6XG4gKiAgIDEuIENESyB0cmF2ZXJzZXMgZXZlcnkgY29uc3RydWN0IGFuZCBjYWxscyBgdmlzaXQobm9kZSlgLlxuICogICAyLiBGb3IgZWFjaCByZXF1aXJlZCB0YWcgdGhlIGFzcGVjdCBhZGRzIGl0IHRvIHRoZSBjb25zdHJ1Y3QgdmlhIGBUYWdzLm9mKG5vZGUpLmFkZCgpYC5cbiAqICAgMy4gQ29uc3RydWN0cyB0aGF0IGRvbid0IHN1cHBvcnQgdGFnZ2luZyBhcmUgc2lsZW50bHkgaWdub3JlZC5cbiAqICAgNC4gVGhlIHJlc3VsdGluZyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSBjb250YWlucyB0aGUgZW5mb3JjZWQgdGFncyBvbiBhbGwgcmVzb3VyY2VzLlxuICpcbiAqIElmIGEgdGFnIGFscmVhZHkgZXhpc3RzIG9uIGEgY29uc3RydWN0LCBDREsgZGUtZHVwbGljYXRlcyBieSBrZXkgc28gbm8gZHVwbGljYXRpb24gb2NjdXJzLlxuICovXG5leHBvcnQgY2xhc3MgU3RhbmRhcmRUYWdzQXNwZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWlyZWRUYWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVpcmVkVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMucmVxdWlyZWRUYWdzID0gcmVxdWlyZWRUYWdzO1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIE9ubHkgYXR0ZW1wdCB0byB0YWcgY29uc3RydWN0cyB0aGF0IHN1cHBvcnQgdGFnZ2luZ1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVxdWlyZWRUYWdzKSkge1xuICAgICAgVGFncy5vZihub2RlKS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFHMUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQVksWUFBdUM7UUFGbEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRzNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLHlCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQXFCO1FBQzlDLGdFQUFnRTtRQUNoRSxNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCLDBDQUEwQztZQUMxQyxvQ0FBb0M7WUFDcEMseUJBQXlCO1lBQ3pCLGtCQUFrQjtZQUNsQixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQix5QkFBeUI7WUFDekIsMkJBQTJCO1lBQzNCLHFCQUFxQjtZQUNyQixzQkFBc0I7WUFDdEIsbUJBQW1CO1lBQ25CLHlCQUF5QjtZQUN6Qiw4QkFBOEI7WUFDOUIsd0JBQXdCO1lBQ3hCLDRCQUE0QjtTQUM3QixDQUFDO1FBRUYsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxD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LENBQUM7SUFDTixDQUFDO0NBQ0Y7QUEvRkQsZ0RBK0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUFzcGVjdCwgQ2ZuUmVzb3VyY2UsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBBc3BlY3QgdG8gZW5mb3JjZSBhIHN0YW5kYXJkIHNldCBvZiB0YWdzIG9uIGV2ZXJ5IHRhZy1jYXBhYmxlIHJlc291cmNlIGluIGEgY29uc3RydWN0IHRyZWUuXG4gKiBcbiAqIFVwZGF0ZWQgZm9yIENESyB2Mi4yMDYuMCsgY29tcGF0aWJpbGl0eTpcbiAqIC0gQXZvaWRzIHVzaW5nIGFueSB0YWdnaW5nIEFQSXMgZHVyaW5nIGFzcGVjdCB2aXNpdGF0aW9uIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHNcbiAqIC0gVXNlcyBhIHN5bnRoZXNpcy10aW1lIGFwcHJvYWNoIHRvIG1vZGlmeSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXNcbiAqIC0gTWFpbnRhaW5zIHRoZSBzYW1lIGNsZWFuIEFQSSBhbmQgYXV0b21hdGljIHRhZ2dpbmcgYmVuZWZpdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YW5kYXJkVGFnc0FzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVpcmVkVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWdnZWRSZXNvdXJjZXMgPSBuZXcgV2Vha1NldDxJQ29uc3RydWN0PigpO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVpcmVkVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMucmVxdWlyZWRUYWdzID0gcmVxdWlyZWRUYWdzO1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIFNraXAgaWYgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICBpZiAodGhpcy50YWdnZWRSZXNvdXJjZXMuaGFzKG5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFByb2Nlc3MgTDEgKENGTikgcmVzb3VyY2VzIG9ubHlcbiAgICBpZiAoQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShub2RlKSkge1xuICAgICAgdGhpcy5wcm9jZXNzQ2ZuUmVzb3VyY2Uobm9kZSBhcyBDZm5SZXNvdXJjZSk7XG4gICAgICB0aGlzLnRhZ2dlZFJlc291cmNlcy5hZGQobm9kZSk7XG4gICAgfVxuICB9XG4gIFxuICBwcml2YXRlIHByb2Nlc3NDZm5SZXNvdXJjZShyZXNvdXJjZTogQ2ZuUmVzb3VyY2UpOiB2b2lkIHtcbiAgICAvLyBMaXN0IG9mIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0YWdzXG4gICAgY29uc3QgdW5zdXBwb3J0ZWRUeXBlcyA9IFtcbiAgICAgICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpXYWl0Q29uZGl0aW9uSGFuZGxlJyxcbiAgICAgICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpXYWl0Q29uZGl0aW9uJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6UGVybWlzc2lvbicsXG4gICAgICAnQVdTOjpJQU06OlBvbGljeScsXG4gICAgICAnQVdTOjpJQU06OlJvbGUnLFxuICAgICAgJ0FXUzo6SUFNOjpVc2VyJyxcbiAgICAgICdBV1M6OklBTTo6R3JvdXAnLFxuICAgICAgJ0FXUzo6SUFNOjpNYW5hZ2VkUG9saWN5JyxcbiAgICAgICdBV1M6OklBTTo6SW5zdGFuY2VQcm9maWxlJyxcbiAgICAgICdBV1M6OkxvZ3M6OkxvZ0dyb3VwJyxcbiAgICAgICdBV1M6OkxvZ3M6OkxvZ1N0cmVhbScsXG4gICAgICAnQVdTOjpFdmVudHM6OlJ1bGUnLFxuICAgICAgJ0FXUzo6Um91dGU1Mzo6UmVjb3JkU2V0JyxcbiAgICAgICdBV1M6OlJvdXRlNTM6OlJlY29yZFNldEdyb3VwJyxcbiAgICAgICdBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtJyxcbiAgICAgICdBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZCdcbiAgICBdO1xuICAgIFxuICAgIGlmICh1bnN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKHJlc291cmNlLmNmblJlc291cmNlVHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQWRkIGEgc3ludGhlc2lzIGhvb2sgdG8gbW9kaWZ5IHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZVxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YocmVzb3VyY2UpO1xuICAgIGNvbnN0IGxvZ2ljYWxJZCA9IHN0YWNrLmdldExvZ2ljYWxJZChyZXNvdXJjZSk7XG4gICAgXG4gICAgLy8gVXNlIGFkZFRyYW5zZm9ybSB0byBhZGQgdGFncyBkdXJpbmcgc3ludGhlc2lzXG4gICAgcmVzb3VyY2UuYWRkUHJvcGVydHlPdmVycmlkZSgnVGFncycsIHRoaXMuYnVpbGRUYWdzQXJyYXkocmVzb3VyY2UpKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBidWlsZFRhZ3NBcnJheShyZXNvdXJjZTogQ2ZuUmVzb3VyY2UpOiBhbnlbXSB7XG4gICAgY29uc3QgdGFnTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBcbiAgICAvLyBHZXQgYW55IGV4aXN0aW5nIHRhZ3MgaWYgdGhleSBleGlzdFxuICAgIGNvbnN0IGV4aXN0aW5nVGFncyA9IChyZXNvdXJjZSBhcyBhbnkpLnRhZ3MgfHwgW107XG4gICAgXG4gICAgLy8gUHJvY2VzcyBleGlzdGluZyB0YWdzIGlmIHRoZXkncmUgaW4gYXJyYXkgZm9ybWF0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdUYWdzKSkge1xuICAgICAgZXhpc3RpbmdUYWdzLmZvckVhY2goKHRhZzogYW55KSA9PiB7XG4gICAgICAgIGlmICh0YWcgJiYgdHlwZW9mIHRhZyA9PT0gJ29iamVjdCcgJiYgJ0tleScgaW4gdGFnICYmICdWYWx1ZScgaW4gdGFnKSB7XG4gICAgICAgICAgdGFnTWFwLnNldCh0YWcuS2V5LCB0YWcuVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZyAmJiB0eXBlb2YgdGFnID09PSAnb2JqZWN0JyAmJiAna2V5JyBpbiB0YWcgJiYgJ3ZhbHVlJyBpbiB0YWcpIHtcbiAgICAgICAgICB0YWdNYXAuc2V0KHRhZy5rZXksIHRhZy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgZGlyZWN0IHRhZ3MgaW4gbWV0YWRhdGFcbiAgICBjb25zdCBtZXRhZGF0YSA9IHJlc291cmNlLm5vZGUubWV0YWRhdGE7XG4gICAgY29uc3QgZGlyZWN0VGFnc01ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKG0gPT4gbS50eXBlID09PSAnZmphbGw6ZGlyZWN0LXRhZ3MnKTtcbiAgICBkaXJlY3RUYWdzTWV0YWRhdGEuZm9yRWFjaChtID0+IHtcbiAgICAgIGlmIChtLmRhdGEgJiYgdHlwZW9mIG0uZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMobS5kYXRhKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGFnTWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8vIEFkZCByZXF1aXJlZCB0YWdzIChvdmVyd3JpdGluZyBpZiB0aGV5IGV4aXN0KVxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMucmVxdWlyZWRUYWdzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHRhZ01hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gQ29udmVydCB0byBDbG91ZEZvcm1hdGlvbiBmb3JtYXRcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0YWdNYXAuZW50cmllcygpKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIEtleToga2V5LFxuICAgICAgVmFsdWU6IHZhbHVlXG4gICAgfSkpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,28 @@
1
+ import { Node } from "constructs";
2
+ /**
3
+ * TagContext provides a CDK context-based approach for passing tags
4
+ * down the construct tree without using aspects.
5
+ *
6
+ * This avoids the infinite loop issue with Tags.of() creating aspects
7
+ * during the aspect visitation phase in CDK v2.206.0+
8
+ */
9
+ export declare class TagContext {
10
+ private static readonly TAG_CONTEXT_KEY;
11
+ /**
12
+ * Set tags in the context for a construct
13
+ */
14
+ static setTags(node: Node, tags: {
15
+ [key: string]: string;
16
+ }): void;
17
+ /**
18
+ * Get tags from the context, including inherited tags from parent constructs
19
+ */
20
+ static getTags(node: Node): {
21
+ [key: string]: string;
22
+ };
23
+ /**
24
+ * Apply tags from context to a construct using a safe approach
25
+ * This should be called during construction, not during synthesis
26
+ */
27
+ static applyTagsFromContext(node: Node): void;
28
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TagContext = void 0;
4
+ const constructs_1 = require("constructs");
5
+ /**
6
+ * TagContext provides a CDK context-based approach for passing tags
7
+ * down the construct tree without using aspects.
8
+ *
9
+ * This avoids the infinite loop issue with Tags.of() creating aspects
10
+ * during the aspect visitation phase in CDK v2.206.0+
11
+ */
12
+ class TagContext {
13
+ /**
14
+ * Set tags in the context for a construct
15
+ */
16
+ static setTags(node, tags) {
17
+ const existingTags = this.getTags(node);
18
+ node.setContext(this.TAG_CONTEXT_KEY, {
19
+ ...existingTags,
20
+ ...tags
21
+ });
22
+ }
23
+ /**
24
+ * Get tags from the context, including inherited tags from parent constructs
25
+ */
26
+ static getTags(node) {
27
+ // Get tags from this node
28
+ const nodeTags = node.tryGetContext(this.TAG_CONTEXT_KEY) || {};
29
+ // Get inherited tags from parent
30
+ const parentTags = node.scope ? this.getTags(constructs_1.Node.of(node.scope)) : {};
31
+ // Node tags override parent tags
32
+ return {
33
+ ...parentTags,
34
+ ...nodeTags
35
+ };
36
+ }
37
+ /**
38
+ * Apply tags from context to a construct using a safe approach
39
+ * This should be called during construction, not during synthesis
40
+ */
41
+ static applyTagsFromContext(node) {
42
+ const tags = this.getTags(node);
43
+ if (Object.keys(tags).length === 0) {
44
+ return;
45
+ }
46
+ // Instead of using Tags.of() which creates aspects,
47
+ // we'll store tags as metadata that can be processed later
48
+ node.addMetadata('fjall:applied-tags', tags);
49
+ }
50
+ }
51
+ exports.TagContext = TagContext;
52
+ TagContext.TAG_CONTEXT_KEY = "fjall:tags";
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi91dGlscy90YWdDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUFrQztBQUVsQzs7Ozs7O0dBTUc7QUFDSCxNQUFhLFVBQVU7SUFHckI7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVUsRUFBRSxJQUErQjtRQUMvRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNwQyxHQUFHLFlBQVk7WUFDZixHQUFHLElBQUk7U0FDUixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVU7UUFDOUIsMEJBQTBCO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVoRSxpQ0FBaUM7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXZFLGlDQUFpQztRQUNqQyxPQUFPO1lBQ0wsR0FBRyxVQUFVO1lBQ2IsR0FBRyxRQUFRO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBVTtRQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTztRQUNULENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQzs7QUE3Q0gsZ0NBOENDO0FBN0N5QiwwQkFBZSxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIFRhZ0NvbnRleHQgcHJvdmlkZXMgYSBDREsgY29udGV4dC1iYXNlZCBhcHByb2FjaCBmb3IgcGFzc2luZyB0YWdzXG4gKiBkb3duIHRoZSBjb25zdHJ1Y3QgdHJlZSB3aXRob3V0IHVzaW5nIGFzcGVjdHMuXG4gKiBcbiAqIFRoaXMgYXZvaWRzIHRoZSBpbmZpbml0ZSBsb29wIGlzc3VlIHdpdGggVGFncy5vZigpIGNyZWF0aW5nIGFzcGVjdHNcbiAqIGR1cmluZyB0aGUgYXNwZWN0IHZpc2l0YXRpb24gcGhhc2UgaW4gQ0RLIHYyLjIwNi4wK1xuICovXG5leHBvcnQgY2xhc3MgVGFnQ29udGV4dCB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19DT05URVhUX0tFWSA9IFwiZmphbGw6dGFnc1wiO1xuXG4gIC8qKlxuICAgKiBTZXQgdGFncyBpbiB0aGUgY29udGV4dCBmb3IgYSBjb25zdHJ1Y3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2V0VGFncyhub2RlOiBOb2RlLCB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gdGhpcy5nZXRUYWdzKG5vZGUpO1xuICAgIG5vZGUuc2V0Q29udGV4dCh0aGlzLlRBR19DT05URVhUX0tFWSwge1xuICAgICAgLi4uZXhpc3RpbmdUYWdzLFxuICAgICAgLi4udGFnc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0YWdzIGZyb20gdGhlIGNvbnRleHQsIGluY2x1ZGluZyBpbmhlcml0ZWQgdGFncyBmcm9tIHBhcmVudCBjb25zdHJ1Y3RzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFRhZ3Mobm9kZTogTm9kZSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIC8vIEdldCB0YWdzIGZyb20gdGhpcyBub2RlXG4gICAgY29uc3Qgbm9kZVRhZ3MgPSBub2RlLnRyeUdldENvbnRleHQodGhpcy5UQUdfQ09OVEVYVF9LRVkpIHx8IHt9O1xuICAgIFxuICAgIC8vIEdldCBpbmhlcml0ZWQgdGFncyBmcm9tIHBhcmVudFxuICAgIGNvbnN0IHBhcmVudFRhZ3MgPSBub2RlLnNjb3BlID8gdGhpcy5nZXRUYWdzKE5vZGUub2Yobm9kZS5zY29wZSkpIDoge307XG4gICAgXG4gICAgLy8gTm9kZSB0YWdzIG92ZXJyaWRlIHBhcmVudCB0YWdzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhcmVudFRhZ3MsXG4gICAgICAuLi5ub2RlVGFnc1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGFncyBmcm9tIGNvbnRleHQgdG8gYSBjb25zdHJ1Y3QgdXNpbmcgYSBzYWZlIGFwcHJvYWNoXG4gICAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgY29uc3RydWN0aW9uLCBub3QgZHVyaW5nIHN5bnRoZXNpc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhcHBseVRhZ3NGcm9tQ29udGV4dChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0VGFncyhub2RlKTtcbiAgICBcbiAgICBpZiAoT2JqZWN0LmtleXModGFncykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW5zdGVhZCBvZiB1c2luZyBUYWdzLm9mKCkgd2hpY2ggY3JlYXRlcyBhc3BlY3RzLFxuICAgIC8vIHdlJ2xsIHN0b3JlIHRhZ3MgYXMgbWV0YWRhdGEgdGhhdCBjYW4gYmUgcHJvY2Vzc2VkIGxhdGVyXG4gICAgbm9kZS5hZGRNZXRhZGF0YSgnZmphbGw6YXBwbGllZC10YWdzJywgdGFncyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,9 @@
1
1
  import { IConstruct } from "constructs";
2
+ /**
3
+ * Tag a resource directly on the CloudFormation resource.
4
+ * This is used for resources that need tags at construction time,
5
+ * like VPC IPAM pool tags.
6
+ */
2
7
  export default function tagResource(resource: IConstruct, tags: {
3
8
  [key: string]: string;
4
9
  }): void;
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = tagResource;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
4
+ /**
5
+ * Tag a resource directly on the CloudFormation resource.
6
+ * This is used for resources that need tags at construction time,
7
+ * like VPC IPAM pool tags.
8
+ */
5
9
  function tagResource(resource, tags) {
6
- for (const tag in tags) {
7
- aws_cdk_lib_1.Tags.of(resource).add(tag, tags[tag]);
8
- }
10
+ // Add a metadata marker that will be processed by StandardTagsAspect
11
+ resource.node.addMetadata('fjall:direct-tags', tags);
9
12
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvdGFnUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSw4QkFPQztBQVZELDZDQUFtQztBQUduQyxTQUF3QixXQUFXLENBQ2pDLFFBQW9CLEVBQ3BCLElBQStCO0lBRS9CLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsa0JBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhZ3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0YWdSZXNvdXJjZShcbiAgcmVzb3VyY2U6IElDb25zdHJ1Y3QsXG4gIHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbikge1xuICBmb3IgKGNvbnN0IHRhZyBpbiB0YWdzKSB7XG4gICAgVGFncy5vZihyZXNvdXJjZSkuYWRkKHRhZywgdGFnc1t0YWddKTtcbiAgfVxufVxuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvdGFnUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSw4QkFNQztBQVhEOzs7O0dBSUc7QUFDSCxTQUF3QixXQUFXLENBQ2pDLFFBQW9CLEVBQ3BCLElBQStCO0lBRS9CLHFFQUFxRTtJQUNyRSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDZm5SZXNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG4vKipcbiAqIFRhZyBhIHJlc291cmNlIGRpcmVjdGx5IG9uIHRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZS5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgcmVzb3VyY2VzIHRoYXQgbmVlZCB0YWdzIGF0IGNvbnN0cnVjdGlvbiB0aW1lLFxuICogbGlrZSBWUEMgSVBBTSBwb29sIHRhZ3MuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRhZ1Jlc291cmNlKFxuICByZXNvdXJjZTogSUNvbnN0cnVjdCxcbiAgdGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuKSB7XG4gIC8vIEFkZCBhIG1ldGFkYXRhIG1hcmtlciB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IFN0YW5kYXJkVGFnc0FzcGVjdFxuICByZXNvdXJjZS5ub2RlLmFkZE1ldGFkYXRhKCdmamFsbDpkaXJlY3QtdGFncycsIHRhZ3MpO1xufVxuIl19
@@ -0,0 +1,13 @@
1
+ import { IConstruct } from "constructs";
2
+ import { IAspect } from "aws-cdk-lib";
3
+ /**
4
+ * TagSynthesizer is a specialized aspect that runs during synthesis
5
+ * to apply tags stored in metadata to CloudFormation resources.
6
+ *
7
+ * This approach avoids creating new aspects during aspect visitation,
8
+ * which causes the infinite loop in CDK v2.206.0+
9
+ */
10
+ export declare class TagSynthesizer implements IAspect {
11
+ visit(node: IConstruct): void;
12
+ private collectTagsFromTree;
13
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TagSynthesizer = void 0;
4
+ const constructs_1 = require("constructs");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ /**
7
+ * TagSynthesizer is a specialized aspect that runs during synthesis
8
+ * to apply tags stored in metadata to CloudFormation resources.
9
+ *
10
+ * This approach avoids creating new aspects during aspect visitation,
11
+ * which causes the infinite loop in CDK v2.206.0+
12
+ */
13
+ class TagSynthesizer {
14
+ visit(node) {
15
+ // Only process CfnResource nodes
16
+ if (!aws_cdk_lib_1.CfnResource.isCfnResource(node)) {
17
+ return;
18
+ }
19
+ // Walk up the tree to collect all tag metadata
20
+ const collectedTags = {};
21
+ this.collectTagsFromTree(node, collectedTags);
22
+ if (Object.keys(collectedTags).length === 0) {
23
+ return;
24
+ }
25
+ // Apply tags directly to the CloudFormation resource
26
+ // This doesn't create new aspects, avoiding the infinite loop
27
+ const cfnResource = node;
28
+ // Apply tags using the TagManager directly
29
+ const tagManager = aws_cdk_lib_1.TagManager.of(cfnResource);
30
+ if (tagManager) {
31
+ Object.entries(collectedTags).forEach(([key, value]) => {
32
+ tagManager.setTag(key, value);
33
+ });
34
+ }
35
+ }
36
+ collectTagsFromTree(node, collectedTags) {
37
+ // Walk up the tree
38
+ let current = node;
39
+ const tagSets = [];
40
+ while (current) {
41
+ const metadata = constructs_1.Node.of(current).metadata;
42
+ const tagMetadata = metadata.find(m => m.type === 'fjall:applied-tags');
43
+ if (tagMetadata && tagMetadata.data) {
44
+ tagSets.unshift(tagMetadata.data);
45
+ }
46
+ current = current.node.scope;
47
+ }
48
+ // Apply tags in order (parent to child) so child tags override parent tags
49
+ tagSets.forEach(tags => {
50
+ Object.assign(collectedTags, tags);
51
+ });
52
+ }
53
+ }
54
+ exports.TagSynthesizer = TagSynthesizer;
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnU3ludGhlc2l6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvdGFnU3ludGhlc2l6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQThDO0FBQzlDLDZDQUErRDtBQUUvRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLGNBQWM7SUFDbEIsS0FBSyxDQUFDLElBQWdCO1FBQzNCLGlDQUFpQztRQUNqQyxJQUFJLENBQUMseUJBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUVELCtDQUErQztRQUMvQyxNQUFNLGFBQWEsR0FBOEIsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFOUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPO1FBQ1QsQ0FBQztRQUVELHFEQUFxRDtRQUNyRCw4REFBOEQ7UUFDOUQsTUFBTSxXQUFXLEdBQUcsSUFBbUIsQ0FBQztRQUV4QywyQ0FBMkM7UUFDM0MsTUFBTSxVQUFVLEdBQUcsd0JBQVUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDckQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLElBQWdCLEVBQUUsYUFBd0M7UUFDcEYsbUJBQW1CO1FBQ25CLElBQUksT0FBTyxHQUEyQixJQUFJLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQXFDLEVBQUUsQ0FBQztRQUVyRCxPQUFPLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxRQUFRLEdBQUcsaUJBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzNDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDLENBQUM7WUFFeEUsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFpQyxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUVELE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQStCLENBQUM7UUFDekQsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBakRELHdDQWlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElDb25zdHJ1Y3QsIE5vZGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuUmVzb3VyY2UsIElBc3BlY3QsIFRhZ01hbmFnZXIgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBUYWdTeW50aGVzaXplciBpcyBhIHNwZWNpYWxpemVkIGFzcGVjdCB0aGF0IHJ1bnMgZHVyaW5nIHN5bnRoZXNpc1xuICogdG8gYXBwbHkgdGFncyBzdG9yZWQgaW4gbWV0YWRhdGEgdG8gQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2VzLlxuICogXG4gKiBUaGlzIGFwcHJvYWNoIGF2b2lkcyBjcmVhdGluZyBuZXcgYXNwZWN0cyBkdXJpbmcgYXNwZWN0IHZpc2l0YXRpb24sXG4gKiB3aGljaCBjYXVzZXMgdGhlIGluZmluaXRlIGxvb3AgaW4gQ0RLIHYyLjIwNi4wK1xuICovXG5leHBvcnQgY2xhc3MgVGFnU3ludGhlc2l6ZXIgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHVibGljIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBPbmx5IHByb2Nlc3MgQ2ZuUmVzb3VyY2Ugbm9kZXNcbiAgICBpZiAoIUNmblJlc291cmNlLmlzQ2ZuUmVzb3VyY2Uobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXYWxrIHVwIHRoZSB0cmVlIHRvIGNvbGxlY3QgYWxsIHRhZyBtZXRhZGF0YVxuICAgIGNvbnN0IGNvbGxlY3RlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICB0aGlzLmNvbGxlY3RUYWdzRnJvbVRyZWUobm9kZSwgY29sbGVjdGVkVGFncyk7XG4gICAgXG4gICAgaWYgKE9iamVjdC5rZXlzKGNvbGxlY3RlZFRhZ3MpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHRhZ3MgZGlyZWN0bHkgdG8gdGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlXG4gICAgLy8gVGhpcyBkb2Vzbid0IGNyZWF0ZSBuZXcgYXNwZWN0cywgYXZvaWRpbmcgdGhlIGluZmluaXRlIGxvb3BcbiAgICBjb25zdCBjZm5SZXNvdXJjZSA9IG5vZGUgYXMgQ2ZuUmVzb3VyY2U7XG4gICAgXG4gICAgLy8gQXBwbHkgdGFncyB1c2luZyB0aGUgVGFnTWFuYWdlciBkaXJlY3RseVxuICAgIGNvbnN0IHRhZ01hbmFnZXIgPSBUYWdNYW5hZ2VyLm9mKGNmblJlc291cmNlKTtcbiAgICBpZiAodGFnTWFuYWdlcikge1xuICAgICAgT2JqZWN0LmVudHJpZXMoY29sbGVjdGVkVGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIHRhZ01hbmFnZXIuc2V0VGFnKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBwcml2YXRlIGNvbGxlY3RUYWdzRnJvbVRyZWUobm9kZTogSUNvbnN0cnVjdCwgY29sbGVjdGVkVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIFdhbGsgdXAgdGhlIHRyZWVcbiAgICBsZXQgY3VycmVudDogSUNvbnN0cnVjdCB8IHVuZGVmaW5lZCA9IG5vZGU7XG4gICAgY29uc3QgdGFnU2V0czogQXJyYXk8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4gPSBbXTtcbiAgICBcbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBOb2RlLm9mKGN1cnJlbnQpLm1ldGFkYXRhO1xuICAgICAgY29uc3QgdGFnTWV0YWRhdGEgPSBtZXRhZGF0YS5maW5kKG0gPT4gbS50eXBlID09PSAnZmphbGw6YXBwbGllZC10YWdzJyk7XG4gICAgICBcbiAgICAgIGlmICh0YWdNZXRhZGF0YSAmJiB0YWdNZXRhZGF0YS5kYXRhKSB7XG4gICAgICAgIHRhZ1NldHMudW5zaGlmdCh0YWdNZXRhZGF0YS5kYXRhIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5ub2RlLnNjb3BlIGFzIElDb25zdHJ1Y3QgfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIFxuICAgIC8vIEFwcGx5IHRhZ3MgaW4gb3JkZXIgKHBhcmVudCB0byBjaGlsZCkgc28gY2hpbGQgdGFncyBvdmVycmlkZSBwYXJlbnQgdGFnc1xuICAgIHRhZ1NldHMuZm9yRWFjaCh0YWdzID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29sbGVjdGVkVGFncywgdGFncyk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjall/components-infrastructure",
3
- "version": "0.42.1",
3
+ "version": "0.43.1",
4
4
  "bin": {
5
5
  "infrastructure": "bin/infrastructure.js"
6
6
  },
@@ -35,7 +35,7 @@
35
35
  "dependencies": {
36
36
  "@aws-sdk/client-cost-explorer": "^3.717.0",
37
37
  "@aws-sdk/client-organizations": "^3.716.0",
38
- "@fjall/util": "^0.42.1",
38
+ "@fjall/util": "^0.43.1",
39
39
  "@pepperize/cdk-organizations": "^0.7.135",
40
40
  "aws-lambda": "^1.0.7",
41
41
  "cdk-time-sleep": "^1.0.0",
@@ -46,7 +46,7 @@
46
46
  "overrides": {
47
47
  "@smithy/core": "2.5.5"
48
48
  },
49
- "gitHead": "5b6d88dd20738fca3dc3ca9b6bdcf5f92411e0cd",
49
+ "gitHead": "948c10f7e2fd66f4a2854c953622334555b733b9",
50
50
  "peerDependencies": {
51
51
  "aws-cdk": "^2.206.0",
52
52
  "aws-cdk-lib": "^2.206.0",