@fjall/components-infrastructure 0.75.3 → 0.76.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 (174) hide show
  1. package/dist/lib/app.d.ts +32 -8
  2. package/dist/lib/app.js +58 -11
  3. package/dist/lib/config/aws/backupGlobalSettings.d.ts +1 -1
  4. package/dist/lib/config/aws/backupGlobalSettings.js +1 -1
  5. package/dist/lib/config/aws/cloudTrail.d.ts +1 -1
  6. package/dist/lib/config/aws/cloudTrail.js +2 -2
  7. package/dist/lib/config/aws/disasterRecovery.js +1 -1
  8. package/dist/lib/config/aws/ecrDefaultImage.d.ts +1 -1
  9. package/dist/lib/config/aws/ecrDefaultImage.js +2 -2
  10. package/dist/lib/config/aws/identityCenter.d.ts +3 -3
  11. package/dist/lib/config/aws/identityCenter.js +1 -1
  12. package/dist/lib/config/aws/identityCenterGroupMembership.d.ts +2 -2
  13. package/dist/lib/config/aws/identityCenterGroupMembership.js +1 -1
  14. package/dist/lib/config/aws/ipam.js +2 -4
  15. package/dist/lib/config/aws/organisation.d.ts +3 -3
  16. package/dist/lib/config/aws/organisation.js +1 -1
  17. package/dist/lib/config/aws/organisationsAccess.d.ts +1 -1
  18. package/dist/lib/config/aws/organisationsAccess.js +1 -1
  19. package/dist/lib/config/monitoring.d.ts +18 -0
  20. package/dist/lib/config/monitoring.js +22 -0
  21. package/dist/lib/patterns/aws/buildkite.d.ts +3 -3
  22. package/dist/lib/patterns/aws/buildkite.js +1 -1
  23. package/dist/lib/patterns/aws/compute.d.ts +8 -8
  24. package/dist/lib/patterns/aws/compute.js +5 -5
  25. package/dist/lib/patterns/aws/database.d.ts +191 -24
  26. package/dist/lib/patterns/aws/database.js +201 -42
  27. package/dist/lib/patterns/aws/fivetranProxy.d.ts +5 -5
  28. package/dist/lib/patterns/aws/fivetranProxy.js +1 -1
  29. package/dist/lib/patterns/aws/hostedZone.d.ts +2 -2
  30. package/dist/lib/patterns/aws/hostedZone.js +1 -1
  31. package/dist/lib/patterns/aws/managedAccount.d.ts +2 -2
  32. package/dist/lib/patterns/aws/managedAccount.js +1 -1
  33. package/dist/lib/patterns/aws/managedIdentityCenter.js +1 -1
  34. package/dist/lib/patterns/aws/managedOrganisation.d.ts +3 -3
  35. package/dist/lib/patterns/aws/managedOrganisation.js +1 -1
  36. package/dist/lib/patterns/aws/managedPlatform.d.ts +2 -2
  37. package/dist/lib/patterns/aws/managedPlatform.js +2 -4
  38. package/dist/lib/patterns/aws/storage.d.ts +4 -55
  39. package/dist/lib/patterns/aws/storage.js +3 -103
  40. package/dist/lib/resources/aws/backup/backupPlan.d.ts +2 -2
  41. package/dist/lib/resources/aws/backup/backupPlan.js +1 -1
  42. package/dist/lib/resources/aws/backup/backupVault.d.ts +2 -2
  43. package/dist/lib/resources/aws/backup/backupVault.js +1 -1
  44. package/dist/lib/resources/aws/base/awsStack.js +1 -1
  45. package/dist/lib/resources/aws/compute/ec2.d.ts +3 -3
  46. package/dist/lib/resources/aws/compute/ec2.js +1 -1
  47. package/dist/lib/resources/aws/compute/ecs.d.ts +9 -9
  48. package/dist/lib/resources/aws/compute/ecs.js +63 -19
  49. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +6 -7
  50. package/dist/lib/resources/aws/compute/ecsFreeTier.js +3 -7
  51. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +6 -7
  52. package/dist/lib/resources/aws/compute/ecsSpot.js +3 -11
  53. package/dist/lib/resources/aws/compute/lambda.d.ts +4 -4
  54. package/dist/lib/resources/aws/compute/lambda.js +1 -1
  55. package/dist/lib/resources/aws/database/database.d.ts +2 -2
  56. package/dist/lib/resources/aws/database/database.js +1 -1
  57. package/dist/lib/resources/aws/database/databaseInstance.d.ts +2 -2
  58. package/dist/lib/resources/aws/database/databaseInstance.js +2 -2
  59. package/dist/lib/resources/aws/database/index.d.ts +0 -1
  60. package/dist/lib/resources/aws/database/index.js +1 -2
  61. package/dist/lib/resources/aws/database/rdsAurora.d.ts +22 -6
  62. package/dist/lib/resources/aws/database/rdsAurora.js +212 -84
  63. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +39 -6
  64. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +34 -5
  65. package/dist/lib/resources/aws/database/rdsInstance.d.ts +16 -10
  66. package/dist/lib/resources/aws/database/rdsInstance.js +126 -63
  67. package/dist/lib/resources/aws/iam/identityCenter/assignment.d.ts +1 -1
  68. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +1 -1
  69. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.d.ts +1 -1
  70. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -1
  71. package/dist/lib/resources/aws/iam/identityCenter/group.d.ts +1 -1
  72. package/dist/lib/resources/aws/iam/identityCenter/group.js +1 -1
  73. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +2 -2
  74. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +1 -1
  75. package/dist/lib/resources/aws/iam/instanceProfile.d.ts +1 -1
  76. package/dist/lib/resources/aws/iam/instanceProfile.js +1 -1
  77. package/dist/lib/resources/aws/iam/managedPolicy.d.ts +1 -1
  78. package/dist/lib/resources/aws/iam/managedPolicy.js +1 -1
  79. package/dist/lib/resources/aws/iam/policy.d.ts +1 -1
  80. package/dist/lib/resources/aws/iam/policy.js +1 -1
  81. package/dist/lib/resources/aws/iam/role.d.ts +1 -1
  82. package/dist/lib/resources/aws/iam/role.js +1 -1
  83. package/dist/lib/resources/aws/iam/securityGroup.d.ts +1 -1
  84. package/dist/lib/resources/aws/iam/securityGroup.js +1 -1
  85. package/dist/lib/resources/aws/index.d.ts +1 -0
  86. package/dist/lib/resources/aws/index.js +2 -1
  87. package/dist/lib/resources/aws/logging/logGroup.d.ts +2 -2
  88. package/dist/lib/resources/aws/logging/logGroup.js +1 -1
  89. package/dist/lib/resources/aws/monitoring/index.d.ts +1 -0
  90. package/dist/lib/resources/aws/monitoring/index.js +18 -0
  91. package/dist/lib/resources/aws/monitoring/monitoringRole.d.ts +28 -0
  92. package/dist/lib/resources/aws/monitoring/monitoringRole.js +69 -0
  93. package/dist/lib/resources/aws/networking/ipam.d.ts +1 -1
  94. package/dist/lib/resources/aws/networking/ipam.js +1 -1
  95. package/dist/lib/resources/aws/networking/ipamPool.d.ts +1 -1
  96. package/dist/lib/resources/aws/networking/ipamPool.js +1 -2
  97. package/dist/lib/resources/aws/networking/vpc.d.ts +3 -3
  98. package/dist/lib/resources/aws/networking/vpc.js +1 -1
  99. package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +2 -2
  100. package/dist/lib/resources/aws/networking/vpcEndpoint.js +1 -1
  101. package/dist/lib/resources/aws/secrets/alias.d.ts +1 -1
  102. package/dist/lib/resources/aws/secrets/alias.js +1 -1
  103. package/dist/lib/resources/aws/secrets/parameter.d.ts +1 -1
  104. package/dist/lib/resources/aws/secrets/parameter.js +1 -1
  105. package/dist/lib/resources/aws/secrets/secret.d.ts +8 -4
  106. package/dist/lib/resources/aws/secrets/secret.js +19 -2
  107. package/dist/lib/resources/aws/storage/ecr.d.ts +4 -4
  108. package/dist/lib/resources/aws/storage/ecr.js +1 -1
  109. package/dist/lib/resources/aws/storage/s3.d.ts +2 -2
  110. package/dist/lib/resources/aws/storage/s3.js +1 -1
  111. package/dist/lib/resources/aws/utilities/awsCustomResource.d.ts +1 -1
  112. package/dist/lib/resources/aws/utilities/awsCustomResource.js +1 -1
  113. package/dist/lib/resources/aws/utilities/cfnOutput.d.ts +1 -1
  114. package/dist/lib/resources/aws/utilities/cfnOutput.js +1 -1
  115. package/dist/lib/resources/aws/utilities/codeBuild.d.ts +1 -1
  116. package/dist/lib/resources/aws/utilities/codeBuild.js +1 -1
  117. package/dist/lib/resources/aws/utilities/customResource.d.ts +3 -3
  118. package/dist/lib/resources/aws/utilities/customResource.js +1 -1
  119. package/dist/lib/resources/aws/utilities/customResourceProvider.d.ts +2 -2
  120. package/dist/lib/resources/aws/utilities/customResourceProvider.js +1 -1
  121. package/dist/lib/resources/aws/utilities/resourceShare.d.ts +2 -2
  122. package/dist/lib/resources/aws/utilities/resourceShare.js +1 -1
  123. package/dist/lib/utils/getAsync.d.ts +1 -1
  124. package/dist/lib/utils/getAsync.js +1 -1
  125. package/dist/lib/utils/getConfig.d.ts +2 -2
  126. package/dist/lib/utils/getConfig.js +3 -3
  127. package/dist/lib/utils/standardTagsAspect.d.ts +2 -2
  128. package/dist/lib/utils/standardTagsAspect.js +6 -5
  129. package/dist/lib/utils/tagResource.d.ts +1 -1
  130. package/dist/lib/utils/tagResource.js +1 -1
  131. package/package.json +3 -3
  132. package/dist/lib/__tests__/patterns/__snapshots__/compute.test.js.snap +0 -433
  133. package/dist/lib/__tests__/patterns/compute.test.d.ts +0 -1
  134. package/dist/lib/__tests__/patterns/compute.test.js +0 -137
  135. package/dist/lib/__tests__/simple.test.d.ts +0 -0
  136. package/dist/lib/__tests__/simple.test.js +0 -12
  137. package/dist/lib/patterns/aws/basicApp.d.ts +0 -0
  138. package/dist/lib/patterns/aws/basicApp.js +0 -150
  139. package/dist/lib/patterns/aws/freeTierApp.d.ts +0 -44
  140. package/dist/lib/patterns/aws/freeTierApp.js +0 -83
  141. package/dist/lib/patterns/aws/spotInstanceApp.d.ts +0 -45
  142. package/dist/lib/patterns/aws/spotInstanceApp.js +0 -85
  143. package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +0 -15
  144. package/dist/lib/resources/aws/database/databaseFreeTier.js +0 -29
  145. package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +0 -37
  146. package/dist/lib/resources/aws/database/rdsFreeTier.js +0 -84
  147. package/dist/lib/resources/aws/organisations/account.d.ts +0 -37
  148. package/dist/lib/resources/aws/organisations/account.js +0 -220
  149. package/dist/lib/resources/aws/organisations/delegatedAdministrator.d.ts +0 -14
  150. package/dist/lib/resources/aws/organisations/delegatedAdministrator.js +0 -61
  151. package/dist/lib/resources/aws/organisations/index.d.ts +0 -8
  152. package/dist/lib/resources/aws/organisations/index.js +0 -22
  153. package/dist/lib/resources/aws/organisations/interfaces.d.ts +0 -105
  154. package/dist/lib/resources/aws/organisations/interfaces.js +0 -3
  155. package/dist/lib/resources/aws/organisations/organisation.d.ts +0 -47
  156. package/dist/lib/resources/aws/organisations/organisation.js +0 -263
  157. package/dist/lib/resources/aws/organisations/organisationalUnit.d.ts +0 -28
  158. package/dist/lib/resources/aws/organisations/organisationalUnit.js +0 -170
  159. package/dist/lib/resources/aws/organisations/policy.d.ts +0 -17
  160. package/dist/lib/resources/aws/organisations/policy.js +0 -93
  161. package/dist/lib/resources/aws/organisations/trustedServiceAccess.d.ts +0 -13
  162. package/dist/lib/resources/aws/organisations/trustedServiceAccess.js +0 -58
  163. package/dist/lib/resources/aws/organisations/types.d.ts +0 -165
  164. package/dist/lib/resources/aws/organisations/types.js +0 -36
  165. package/dist/lib/utils/directTagging.d.ts +0 -31
  166. package/dist/lib/utils/directTagging.js +0 -86
  167. package/dist/lib/utils/fjallConstruct.d.ts +0 -8
  168. package/dist/lib/utils/fjallConstruct.js +0 -18
  169. package/dist/lib/utils/fjallStackSynthesizer.d.ts +0 -9
  170. package/dist/lib/utils/fjallStackSynthesizer.js +0 -22
  171. package/dist/lib/utils/tagContext.d.ts +0 -28
  172. package/dist/lib/utils/tagContext.js +0 -53
  173. package/dist/lib/utils/tagSynthesizer.d.ts +0 -13
  174. package/dist/lib/utils/tagSynthesizer.js +0 -55
@@ -1,53 +0,0 @@
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,13 +0,0 @@
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
- }
@@ -1,55 +0,0 @@
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==