@fjall/components-infrastructure 0.41.1 → 0.43.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 (64) hide show
  1. package/dist/lib/app.d.ts +25 -2
  2. package/dist/lib/app.js +53 -6
  3. package/dist/lib/config/aws/cloudTrail.js +2 -7
  4. package/dist/lib/config/aws/ecrDefaultImage.js +2 -7
  5. package/dist/lib/patterns/aws/buildkite.js +2 -10
  6. package/dist/lib/patterns/aws/compute.d.ts +0 -2
  7. package/dist/lib/patterns/aws/compute.js +3 -5
  8. package/dist/lib/patterns/aws/database.js +4 -7
  9. package/dist/lib/patterns/aws/freeTierApp.d.ts +0 -2
  10. package/dist/lib/patterns/aws/freeTierApp.js +5 -15
  11. package/dist/lib/patterns/aws/hostedZone.js +2 -7
  12. package/dist/lib/patterns/aws/spotInstanceApp.d.ts +0 -2
  13. package/dist/lib/patterns/aws/spotInstanceApp.js +5 -15
  14. package/dist/lib/patterns/aws/storage.d.ts +0 -3
  15. package/dist/lib/patterns/aws/storage.js +4 -7
  16. package/dist/lib/resources/aws/compute/ec2.d.ts +0 -2
  17. package/dist/lib/resources/aws/compute/ec2.js +1 -4
  18. package/dist/lib/resources/aws/compute/ecs.d.ts +0 -1
  19. package/dist/lib/resources/aws/compute/ecs.js +1 -8
  20. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +0 -1
  21. package/dist/lib/resources/aws/compute/ecsFreeTier.js +1 -10
  22. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +0 -1
  23. package/dist/lib/resources/aws/compute/ecsSpot.js +1 -10
  24. package/dist/lib/resources/aws/compute/lambda.d.ts +1 -0
  25. package/dist/lib/resources/aws/compute/lambda.js +3 -7
  26. package/dist/lib/resources/aws/database/database.d.ts +0 -2
  27. package/dist/lib/resources/aws/database/database.js +3 -5
  28. package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +0 -2
  29. package/dist/lib/resources/aws/database/databaseFreeTier.js +3 -5
  30. package/dist/lib/resources/aws/database/databaseInstance.d.ts +0 -2
  31. package/dist/lib/resources/aws/database/databaseInstance.js +3 -5
  32. package/dist/lib/resources/aws/database/rdsAurora.d.ts +0 -2
  33. package/dist/lib/resources/aws/database/rdsAurora.js +7 -13
  34. package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +0 -2
  35. package/dist/lib/resources/aws/database/rdsFreeTier.js +4 -10
  36. package/dist/lib/resources/aws/database/rdsInstance.d.ts +0 -2
  37. package/dist/lib/resources/aws/database/rdsInstance.js +8 -18
  38. package/dist/lib/resources/aws/logging/cloudTrail.d.ts +0 -2
  39. package/dist/lib/resources/aws/logging/cloudTrail.js +2 -6
  40. package/dist/lib/resources/aws/networking/vpc.d.ts +0 -2
  41. package/dist/lib/resources/aws/networking/vpc.js +6 -3
  42. package/dist/lib/resources/aws/secrets/kms.d.ts +0 -2
  43. package/dist/lib/resources/aws/secrets/kms.js +1 -4
  44. package/dist/lib/resources/aws/secrets/parameter.js +2 -3
  45. package/dist/lib/resources/aws/secrets/secret.d.ts +0 -2
  46. package/dist/lib/resources/aws/secrets/secret.js +2 -5
  47. package/dist/lib/resources/aws/utilities/codeBuild.d.ts +0 -2
  48. package/dist/lib/resources/aws/utilities/codeBuild.js +1 -3
  49. package/dist/lib/utils/directTagging.d.ts +31 -0
  50. package/dist/lib/utils/directTagging.js +86 -0
  51. package/dist/lib/utils/fjallConstruct.d.ts +8 -0
  52. package/dist/lib/utils/fjallConstruct.js +18 -0
  53. package/dist/lib/utils/fjallStackSynthesizer.d.ts +9 -0
  54. package/dist/lib/utils/fjallStackSynthesizer.js +22 -0
  55. package/dist/lib/utils/getConfig.js +10 -1
  56. package/dist/lib/utils/standardTagsAspect.d.ts +6 -29
  57. package/dist/lib/utils/standardTagsAspect.js +72 -33
  58. package/dist/lib/utils/tagContext.d.ts +28 -0
  59. package/dist/lib/utils/tagContext.js +53 -0
  60. package/dist/lib/utils/tagResource.d.ts +5 -0
  61. package/dist/lib/utils/tagResource.js +8 -5
  62. package/dist/lib/utils/tagSynthesizer.d.ts +13 -0
  63. package/dist/lib/utils/tagSynthesizer.js +55 -0
  64. package/package.json +3 -3
@@ -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.41.1",
3
+ "version": "0.43.0",
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.41.1",
38
+ "@fjall/util": "^0.43.0",
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": "d33ff1e34a66e5cf7b941ed2ce0b83ef1c369ec2",
49
+ "gitHead": "5047b77a5628b74cf48634f2a803ab77c1af3536",
50
50
  "peerDependencies": {
51
51
  "aws-cdk": "^2.206.0",
52
52
  "aws-cdk-lib": "^2.206.0",