@guardian/cdk 64.0.0 → 64.2.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 (104) hide show
  1. package/lib/aspects/cfn-include-reporter.js.map +1 -1
  2. package/lib/aspects/cfn-parameter-reporter.js.map +1 -1
  3. package/lib/aspects/metadata.js.map +1 -1
  4. package/lib/bin/aws-credential-provider.d.ts.map +1 -1
  5. package/lib/bin/commands/account-readiness/index.d.ts.map +1 -1
  6. package/lib/bin/commands/account-readiness/index.js.map +1 -1
  7. package/lib/bin/commands/account-readiness/ssm.d.ts.map +1 -1
  8. package/lib/bin/commands/account-readiness/ssm.js.map +1 -1
  9. package/lib/bin/commands/aws-cdk-version.d.ts.map +1 -1
  10. package/lib/bin/commands/new-project/index.d.ts.map +1 -1
  11. package/lib/bin/commands/new-project/index.js.map +1 -1
  12. package/lib/bin/commands/new-project/utils/app.d.ts.map +1 -1
  13. package/lib/bin/commands/new-project/utils/app.js.map +1 -1
  14. package/lib/bin/commands/new-project/utils/imports.js.map +1 -1
  15. package/lib/bin/commands/new-project/utils/init.d.ts.map +1 -1
  16. package/lib/bin/commands/new-project/utils/init.js.map +1 -1
  17. package/lib/bin/commands/new-project/utils/snapshot.d.ts.map +1 -1
  18. package/lib/bin/commands/new-project/utils/snapshot.js.map +1 -1
  19. package/lib/bin/commands/new-project/utils/stack.d.ts.map +1 -1
  20. package/lib/bin/commands/new-project/utils/stack.js.map +1 -1
  21. package/lib/bin/commands/new-project/utils/utils.js +1 -2
  22. package/lib/bin/commands/new-project/utils/utils.js.map +1 -1
  23. package/lib/bin/index.js.map +1 -1
  24. package/lib/constants/library-info.js +3 -3
  25. package/lib/constants/library-info.js.map +1 -1
  26. package/lib/constructs/autoscaling/asg.js.map +1 -1
  27. package/lib/constructs/autoscaling/user-data.js.map +1 -1
  28. package/lib/constructs/cloudwatch/alarm.js.map +1 -1
  29. package/lib/constructs/core/identity.d.ts.map +1 -1
  30. package/lib/constructs/core/parameters/anghammarad.js.map +1 -1
  31. package/lib/constructs/core/parameters/fastly.js.map +1 -1
  32. package/lib/constructs/core/parameters/log-shipping.js.map +1 -1
  33. package/lib/constructs/core/parameters/s3.js.map +1 -1
  34. package/lib/constructs/core/parameters/vpc.js.map +1 -1
  35. package/lib/constructs/core/stack.js.map +1 -1
  36. package/lib/constructs/dns/dns-records.js.map +1 -1
  37. package/lib/constructs/ec2/security-groups/base.js.map +1 -1
  38. package/lib/constructs/ec2/vpc.d.ts.map +1 -1
  39. package/lib/constructs/ec2/vpc.js.map +1 -1
  40. package/lib/constructs/ecs/ecs-task.js +1 -1
  41. package/lib/constructs/ecs/ecs-task.js.map +1 -1
  42. package/lib/constructs/iam/policies/anghammarad.js.map +1 -1
  43. package/lib/constructs/iam/policies/describe-ec2.js.map +1 -1
  44. package/lib/constructs/iam/policies/kcl.js +1 -1
  45. package/lib/constructs/iam/policies/kcl.js.map +1 -1
  46. package/lib/constructs/iam/policies/log-shipping.js.map +1 -1
  47. package/lib/constructs/iam/policies/parameter-store-read.js.map +1 -1
  48. package/lib/constructs/iam/policies/ssm-ssh.js.map +1 -1
  49. package/lib/constructs/lambda/lambda.js.map +1 -1
  50. package/lib/constructs/loadbalancing/alb/application-load-balancer.js.map +1 -1
  51. package/lib/constructs/loadbalancing/alb/application-target-group.js +1 -1
  52. package/lib/constructs/loadbalancing/alb/application-target-group.js.map +1 -1
  53. package/lib/constructs/ses/index.js.map +1 -1
  54. package/lib/constructs/vpc/vpc.js.map +1 -1
  55. package/lib/experimental/constructs/iam/policies/developer-policy.js.map +1 -1
  56. package/lib/experimental/constructs/riff-raff-deployment-id.js.map +1 -1
  57. package/lib/experimental/patterns/ec2-app.js.map +1 -1
  58. package/lib/experimental/patterns/gu-load-balanced-app.d.ts.map +1 -1
  59. package/lib/experimental/patterns/gu-load-balanced-app.js +35 -15
  60. package/lib/experimental/patterns/gu-load-balanced-app.js.map +1 -1
  61. package/lib/patterns/api-lambda.js.map +1 -1
  62. package/lib/patterns/api-multiple-lambdas.js.map +1 -1
  63. package/lib/patterns/ec2-app/base.js +2 -2
  64. package/lib/patterns/ec2-app/base.js.map +1 -1
  65. package/lib/riff-raff-yaml-file/deployments/autoscaling.js +2 -3
  66. package/lib/riff-raff-yaml-file/deployments/autoscaling.js.map +1 -1
  67. package/lib/riff-raff-yaml-file/deployments/cloudformation.js +3 -4
  68. package/lib/riff-raff-yaml-file/deployments/cloudformation.js.map +1 -1
  69. package/lib/riff-raff-yaml-file/deployments/lambda.js +2 -3
  70. package/lib/riff-raff-yaml-file/deployments/lambda.js.map +1 -1
  71. package/lib/riff-raff-yaml-file/deployments/update-parameters.js +1 -2
  72. package/lib/riff-raff-yaml-file/deployments/update-parameters.js.map +1 -1
  73. package/lib/riff-raff-yaml-file/group-by.js +5 -6
  74. package/lib/riff-raff-yaml-file/group-by.js.map +1 -1
  75. package/lib/riff-raff-yaml-file/index.js +2 -2
  76. package/lib/riff-raff-yaml-file/index.js.map +1 -1
  77. package/lib/types/access.js.map +1 -1
  78. package/lib/utils/array.js +1 -2
  79. package/lib/utils/array.js.map +1 -1
  80. package/lib/utils/cli/vpc.d.ts.map +1 -1
  81. package/lib/utils/cli/vpc.js.map +1 -1
  82. package/lib/utils/cognito/cognito.d.ts.map +1 -1
  83. package/lib/utils/exec.js +2 -3
  84. package/lib/utils/exec.js.map +1 -1
  85. package/lib/utils/git.js +2 -3
  86. package/lib/utils/git.js.map +1 -1
  87. package/lib/utils/lambda/event-source.js +2 -2
  88. package/lib/utils/lambda/event-source.js.map +1 -1
  89. package/lib/utils/math.d.ts.map +1 -1
  90. package/lib/utils/mixin/app-aware-construct.js +1 -2
  91. package/lib/utils/mixin/app-aware-construct.js.map +1 -1
  92. package/lib/utils/security-groups/helpers.d.ts.map +1 -1
  93. package/lib/utils/singleton.d.ts +1 -1
  94. package/lib/utils/singleton.d.ts.map +1 -1
  95. package/lib/utils/string.d.ts.map +1 -1
  96. package/lib/utils/test/assertions.d.ts.map +1 -1
  97. package/lib/utils/test/assertions.js +5 -1
  98. package/lib/utils/test/assertions.js.map +1 -1
  99. package/lib/utils/test/attach-policy-to-test-role.d.ts.map +1 -1
  100. package/lib/utils/test/simple-gu-stack.js +1 -2
  101. package/lib/utils/test/simple-gu-stack.js.map +1 -1
  102. package/lib/utils/test/template.js +1 -2
  103. package/lib/utils/test/template.js.map +1 -1
  104. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../../src/utils/test/assertions.ts"],"names":[],"mappings":"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","sourcesContent":["import { Match, Template } from \"aws-cdk-lib/assertions\";\nimport type { Resource } from \"aws-cdk-lib/assertions/lib/private/template\";\nimport { MetadataKeys, TrackingTag } from \"../../constants\";\nimport type { AppIdentity, GuStack } from \"../../constructs/core\";\n\ninterface Tag {\n Key: string;\n Value: unknown;\n PropagateAtLaunch?: boolean;\n}\n\ninterface GuTagMatcherProps {\n appIdentity?: AppIdentity;\n additionalTags?: Tag[];\n propagateAtLaunch?: boolean;\n}\n\nfunction sortTagsByKey(tags: Tag[]): Tag[] {\n return [...tags].sort((first, second) => {\n if (first.Key.toLowerCase() < second.Key.toLowerCase()) {\n return -1;\n }\n if (first.Key.toLowerCase() > second.Key.toLowerCase()) {\n return 1;\n }\n return 0;\n });\n}\n\nexport class GuTemplate {\n private readonly template: Template;\n private readonly stack: GuStack;\n\n private constructor(scope: GuStack) {\n this.stack = scope;\n this.template = Template.fromStack(scope);\n }\n\n static fromStack(stack: GuStack) {\n return new GuTemplate(stack);\n }\n\n findResourceByLogicalId(type: string, logicalId: string | RegExp): Record<string, Resource> | undefined {\n const resources = this.template.findResources(type) as Record<string, Resource>;\n\n const match = Object.entries(resources).find(([id, resource]) => {\n const idMatch = logicalId instanceof RegExp ? logicalId.test(id) : id === logicalId;\n return idMatch && resource;\n });\n\n if (match) {\n const [logicalId, resource] = match;\n return { [logicalId]: resource };\n }\n\n return undefined;\n }\n\n hasResourceWithLogicalId(type: string, logicalId: string | RegExp) {\n const result = this.findResourceByLogicalId(type, logicalId);\n\n if (!result) {\n throw new Error(`No resource found matching logicalId ${logicalId.toString()} and Type ${type}`);\n }\n }\n\n hasGuTaggedResource(type: string, props?: GuTagMatcherProps) {\n const { stack, stage } = this.stack;\n const { appIdentity, additionalTags, propagateAtLaunch } = props ?? {};\n\n const coreTags = [\n {\n Key: \"Stack\",\n Value: stack,\n },\n {\n Key: \"Stage\",\n Value: stage,\n },\n TrackingTag,\n {\n Key: MetadataKeys.REPOSITORY_NAME,\n Value: \"guardian/cdk\",\n },\n ];\n\n const tagMap = new Map<string, Tag>();\n coreTags.forEach((tag) => tagMap.set(tag.Key, tag));\n\n if (appIdentity) {\n tagMap.set(\"App\", { Key: \"App\", Value: appIdentity.app });\n }\n\n if (additionalTags) {\n additionalTags.forEach((tag) => tagMap.set(tag.Key, tag));\n }\n\n // set `PropagateAtLaunch` if the prop is defined\n if (propagateAtLaunch !== undefined) {\n tagMap.forEach((tag) => {\n tagMap.set(tag.Key, { ...tag, PropagateAtLaunch: propagateAtLaunch });\n });\n }\n\n this.template.hasResourceProperties(type, { Tags: sortTagsByKey(Array.from(tagMap.values())) });\n }\n\n hasResourceWithTag(type: string, tag: Tag) {\n this.template.hasResourceProperties(type, {\n Tags: Match.arrayWith([tag]),\n });\n }\n}\n"]}
1
+ {"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../../src/utils/test/assertions.ts"],"names":[],"mappings":"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","sourcesContent":["import { Match, Template } from \"aws-cdk-lib/assertions\";\nimport type { Resource } from \"aws-cdk-lib/assertions/lib/private/template\";\nimport { MetadataKeys, TrackingTag } from \"../../constants\";\nimport type { AppIdentity, GuStack } from \"../../constructs/core\";\n\ninterface Tag {\n Key: string;\n Value: unknown;\n PropagateAtLaunch?: boolean;\n}\n\ninterface GuTagMatcherProps {\n appIdentity?: AppIdentity;\n additionalTags?: Tag[];\n propagateAtLaunch?: boolean;\n}\n\nfunction sortTagsByKey(tags: Tag[]): Tag[] {\n return [...tags].sort((first, second) => {\n if (first.Key.toLowerCase() < second.Key.toLowerCase()) {\n return -1;\n }\n if (first.Key.toLowerCase() > second.Key.toLowerCase()) {\n return 1;\n }\n return 0;\n });\n}\n\nexport class GuTemplate {\n private readonly template: Template;\n private readonly stack: GuStack;\n\n private constructor(scope: GuStack) {\n this.stack = scope;\n this.template = Template.fromStack(scope);\n }\n\n static fromStack(stack: GuStack) {\n return new GuTemplate(stack);\n }\n\n findResourceByLogicalId(type: string, logicalId: string | RegExp): Record<string, Resource> | undefined {\n const resources = this.template.findResources(type) as Record<string, Resource>;\n\n const match = Object.entries(resources).find(([id, resource]) => {\n const idMatch = logicalId instanceof RegExp ? logicalId.test(id) : id === logicalId;\n return idMatch && resource;\n });\n\n if (match) {\n const [logicalId, resource] = match;\n return { [logicalId]: resource };\n }\n\n return undefined;\n }\n\n hasResourceWithLogicalId(type: string, logicalId: string | RegExp) {\n const result = this.findResourceByLogicalId(type, logicalId);\n\n if (!result) {\n throw new Error(`No resource found matching logicalId ${logicalId.toString()} and Type ${type}`);\n }\n }\n\n hasGuTaggedResource(type: string, props?: GuTagMatcherProps) {\n const { stack, stage } = this.stack;\n const { appIdentity, additionalTags, propagateAtLaunch } = props ?? {};\n\n const coreTags = [\n {\n Key: \"Stack\",\n Value: stack,\n },\n {\n Key: \"Stage\",\n Value: stage,\n },\n TrackingTag,\n {\n Key: MetadataKeys.REPOSITORY_NAME,\n Value: \"guardian/cdk\",\n },\n ];\n\n const tagMap = new Map<string, Tag>();\n coreTags.forEach((tag) => tagMap.set(tag.Key, tag));\n\n if (appIdentity) {\n tagMap.set(\"App\", { Key: \"App\", Value: appIdentity.app });\n }\n\n if (additionalTags) {\n additionalTags.forEach((tag) => tagMap.set(tag.Key, tag));\n }\n\n // set `PropagateAtLaunch` if the prop is defined\n if (propagateAtLaunch !== undefined) {\n tagMap.forEach((tag) => {\n tagMap.set(tag.Key, { ...tag, PropagateAtLaunch: propagateAtLaunch });\n });\n }\n\n // Default behaviour (`Match.object`) seems to be \"is exact\".\n // Use `Match.arrayWith` for \"includes\" matching, as AWS CDK also tags some resources which we're not checking for.\n this.template.hasResourceProperties(type, {\n Tags: Match.arrayWith(sortTagsByKey(Array.from(tagMap.values()))),\n });\n }\n\n hasResourceWithTag(type: string, tag: Tag) {\n this.template.hasResourceProperties(type, {\n Tags: Match.arrayWith([tag]),\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"attach-policy-to-test-role.d.ts","sourceRoot":"","sources":["../../../src/utils/test/attach-policy-to-test-role.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,eAAO,MAAM,sBAAsB,UAAW,KAAK,UAAU,MAAM,OAAM,MAAM,KAAgB,IAM9F,CAAC"}
1
+ {"version":3,"file":"attach-policy-to-test-role.d.ts","sourceRoot":"","sources":["../../../src/utils/test/attach-policy-to-test-role.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,eAAO,MAAM,sBAAsB,GAAI,OAAO,KAAK,EAAE,QAAQ,MAAM,EAAE,KAAI,MAAmB,KAAG,IAM9F,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.simpleGuStackForTesting = void 0;
3
+ exports.simpleGuStackForTesting = simpleGuStackForTesting;
4
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
5
  const core_1 = require("../../constructs/core");
6
6
  function simpleGuStackForTesting(props) {
@@ -10,5 +10,4 @@ function simpleGuStackForTesting(props) {
10
10
  ...props,
11
11
  });
12
12
  }
13
- exports.simpleGuStackForTesting = simpleGuStackForTesting;
14
13
  //# sourceMappingURL=simple-gu-stack.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"simple-gu-stack.js","sourceRoot":"","sources":["../../../src/utils/test/simple-gu-stack.ts"],"names":[],"mappings":";;;AAAA,6CAAkC;AAClC,gDAAgD;AAGhD,SAAgB,uBAAuB,CAAC,KAA6B;IACnE,OAAO,IAAI,cAAO,CAAC,IAAI,iBAAG,EAAE,EAAE,MAAM,EAAE;QACpC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,YAAY;QACnC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,MAAM;QAC7B,GAAG,KAAK;KACT,CAAC,CAAC;AACL,CAAC;AAND,0DAMC","sourcesContent":["import { App } from \"aws-cdk-lib\";\nimport { GuStack } from \"../../constructs/core\";\nimport type { GuStackProps } from \"../../constructs/core\";\n\nexport function simpleGuStackForTesting(props?: Partial<GuStackProps>) {\n return new GuStack(new App(), \"Test\", {\n stack: props?.stack ?? \"test-stack\",\n stage: props?.stage ?? \"TEST\",\n ...props,\n });\n}\n"]}
1
+ {"version":3,"file":"simple-gu-stack.js","sourceRoot":"","sources":["../../../src/utils/test/simple-gu-stack.ts"],"names":[],"mappings":";;AAIA,0DAMC;AAVD,6CAAkC;AAClC,gDAAgD;AAGhD,SAAgB,uBAAuB,CAAC,KAA6B;IACnE,OAAO,IAAI,cAAO,CAAC,IAAI,iBAAG,EAAE,EAAE,MAAM,EAAE;QACpC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,YAAY;QACnC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,MAAM;QAC7B,GAAG,KAAK;KACT,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { App } from \"aws-cdk-lib\";\nimport { GuStack } from \"../../constructs/core\";\nimport type { GuStackProps } from \"../../constructs/core\";\n\nexport function simpleGuStackForTesting(props?: Partial<GuStackProps>) {\n return new GuStack(new App(), \"Test\", {\n stack: props?.stack ?? \"test-stack\",\n stage: props?.stage ?? \"TEST\",\n ...props,\n });\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTemplateAfterAspectInvocation = void 0;
3
+ exports.getTemplateAfterAspectInvocation = getTemplateAfterAspectInvocation;
4
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
5
  const assertions_1 = require("aws-cdk-lib/assertions");
6
6
  const cx_api_1 = require("aws-cdk-lib/cx-api");
@@ -25,5 +25,4 @@ function getTemplateAfterAspectInvocation(stack) {
25
25
  }
26
26
  return assertions_1.Template.fromJSON(cfnStack.template);
27
27
  }
28
- exports.getTemplateAfterAspectInvocation = getTemplateAfterAspectInvocation;
29
28
  //# sourceMappingURL=template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/utils/test/template.ts"],"names":[],"mappings":";;;AAAA,6CAAkC;AAClC,uDAAkD;AAClD,+CAAiE;AAGjE;;;;;;;GAOG;AACH,SAAgB,gCAAgC,CAAC,KAAc;IAC7D,MAAM,GAAG,GAAG,iBAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAE1B,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,mDAAmD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;KACrF;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoC,EAAE,CAAC,CAAC,YAAY,oCAA2B,CAAC,CAAC;IACtH,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;KACnE;IAED,OAAO,qBAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAmC,CAAC,CAAC;AACzE,CAAC;AAhBD,4EAgBC","sourcesContent":["import { App } from \"aws-cdk-lib\";\nimport { Template } from \"aws-cdk-lib/assertions\";\nimport { CloudFormationStackArtifact } from \"aws-cdk-lib/cx-api\";\nimport type { GuStack } from \"../../constructs/core\";\n\n/**\n * `Aspects` appear to run only at synth time.\n * This means we must synth the stack to see the results of the `Aspect`.\n *\n * @see https://github.com/aws/aws-cdk/issues/29047\n *\n * @param stack the stack to synthesise\n */\nexport function getTemplateAfterAspectInvocation(stack: GuStack): Template {\n const app = App.of(stack);\n\n if (!app) {\n throw new Error(`Unable to locate the enclosing App from GuStack ${stack.node.id}`);\n }\n\n const { artifacts } = app.synth();\n const cfnStacks = artifacts.filter((_): _ is CloudFormationStackArtifact => _ instanceof CloudFormationStackArtifact);\n const cfnStack = cfnStacks.find((artifact) => artifact.id === stack.node.id);\n\n if (!cfnStack) {\n throw new Error(\"Unable to locate a CloudFormationStackArtifact\");\n }\n\n return Template.fromJSON(cfnStack.template as Record<string, unknown>);\n}\n"]}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/utils/test/template.ts"],"names":[],"mappings":";;AAaA,4EAgBC;AA7BD,6CAAkC;AAClC,uDAAkD;AAClD,+CAAiE;AAGjE;;;;;;;GAOG;AACH,SAAgB,gCAAgC,CAAC,KAAc;IAC7D,MAAM,GAAG,GAAG,iBAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAE1B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,mDAAmD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoC,EAAE,CAAC,CAAC,YAAY,oCAA2B,CAAC,CAAC;IACtH,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,qBAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAmC,CAAC,CAAC;AACzE,CAAC","sourcesContent":["import { App } from \"aws-cdk-lib\";\nimport { Template } from \"aws-cdk-lib/assertions\";\nimport { CloudFormationStackArtifact } from \"aws-cdk-lib/cx-api\";\nimport type { GuStack } from \"../../constructs/core\";\n\n/**\n * `Aspects` appear to run only at synth time.\n * This means we must synth the stack to see the results of the `Aspect`.\n *\n * @see https://github.com/aws/aws-cdk/issues/29047\n *\n * @param stack the stack to synthesise\n */\nexport function getTemplateAfterAspectInvocation(stack: GuStack): Template {\n const app = App.of(stack);\n\n if (!app) {\n throw new Error(`Unable to locate the enclosing App from GuStack ${stack.node.id}`);\n }\n\n const { artifacts } = app.synth();\n const cfnStacks = artifacts.filter((_): _ is CloudFormationStackArtifact => _ instanceof CloudFormationStackArtifact);\n const cfnStack = cfnStacks.find((artifact) => artifact.id === stack.node.id);\n\n if (!cfnStack) {\n throw new Error(\"Unable to locate a CloudFormationStackArtifact\");\n }\n\n return Template.fromJSON(cfnStack.template as Record<string, unknown>);\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@guardian/cdk",
3
3
  "description": "Generic Guardian flavoured AWS CDK components",
4
- "version": "64.0.0",
4
+ "version": "64.2.0",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
7
7
  "files": [
@@ -36,9 +36,9 @@
36
36
  "@guardian/eslint-plugin-tsdoc-required": "^0.1.3",
37
37
  "@guardian/tsconfig": "^2.0.0",
38
38
  "@types/git-url-parse": "^9.0.3",
39
- "@types/jest": "^29.5.14",
39
+ "@types/jest": "^30.0.0",
40
40
  "@types/js-yaml": "^4.0.9",
41
- "@types/node": "22.15.30",
41
+ "@types/node": "26.1.1",
42
42
  "@types/yargs": "^17.0.33",
43
43
  "aws-cdk": "2.1110.0",
44
44
  "aws-cdk-lib": "2.241.0",
@@ -46,21 +46,21 @@
46
46
  "eslint": "^9.39.2",
47
47
  "eslint-plugin-custom-rules": "file:tools/eslint",
48
48
  "gh-pages": "^6.3.0",
49
- "jest": "30.3.0",
49
+ "jest": "30.4.2",
50
50
  "prettier": "^3.8.3",
51
- "ts-jest": "^29.4.9",
51
+ "ts-jest": "^29.4.11",
52
52
  "ts-node": "^10.9.2",
53
- "typedoc": "^0.28.19",
54
- "typescript": "5.1.6"
53
+ "typedoc": "^0.28.20",
54
+ "typescript": "5.9.3"
55
55
  },
56
56
  "dependencies": {
57
- "@aws-sdk/client-ec2": "^3.1034.0",
58
- "@aws-sdk/client-ssm": "^3.1034.0",
59
- "@aws-sdk/credential-providers": "^3.1034.0",
57
+ "@aws-sdk/client-ec2": "^3.1087.0",
58
+ "@aws-sdk/client-ssm": "^3.1087.0",
59
+ "@aws-sdk/credential-providers": "^3.1087.0",
60
60
  "chalk": "^4.1.2",
61
- "codemaker": "^1.128.0",
61
+ "codemaker": "^1.138.0",
62
62
  "git-url-parse": "^16.0.1",
63
- "js-yaml": "^4.1.1",
63
+ "js-yaml": "^4.3.0",
64
64
  "read-pkg-up": "7.0.1",
65
65
  "yargs": "^17.7.2"
66
66
  },