@intentius/chant-lexicon-aws 0.18.23 → 0.18.24

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.
@@ -5057,11 +5057,6 @@
5057
5057
  "kind": "property",
5058
5058
  "lexicon": "aws"
5059
5059
  },
5060
- "AppConfiguration": {
5061
- "resourceType": "AWS::EMR::InstanceGroupConfig.AppConfiguration",
5062
- "kind": "property",
5063
- "lexicon": "aws"
5064
- },
5065
5060
  "AppCookieStickinessPolicy": {
5066
5061
  "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer.AppCookieStickinessPolicy",
5067
5062
  "kind": "property",
@@ -23164,15 +23159,24 @@
23164
23159
  "kind": "resource",
23165
23160
  "lexicon": "aws",
23166
23161
  "attrs": {
23167
- "Id": "Id"
23162
+ "CertificateArn": "CertificateArn"
23163
+ },
23164
+ "propertyConstraints": {
23165
+ "CertificateArn": {
23166
+ "pattern": "arn:(aws|aws-cn|aws-us-gov):dms:[\\w-]+:[0-9]+:cert:[A-Z0-9]+"
23167
+ }
23168
23168
  },
23169
23169
  "createOnly": [
23170
23170
  "CertificateIdentifier",
23171
23171
  "CertificatePem",
23172
23172
  "CertificateWallet"
23173
23173
  ],
23174
+ "writeOnly": [
23175
+ "CertificatePem",
23176
+ "CertificateWallet"
23177
+ ],
23174
23178
  "primaryIdentifier": [
23175
- "Id"
23179
+ "CertificateArn"
23176
23180
  ]
23177
23181
  },
23178
23182
  "DMSEndpoint": {
@@ -49051,7 +49055,7 @@
49051
49055
  "kind": "resource",
49052
49056
  "lexicon": "aws",
49053
49057
  "attrs": {
49054
- "InstanceGroupId": "InstanceGroupId"
49058
+ "Id": "Id"
49055
49059
  },
49056
49060
  "createOnly": [
49057
49061
  "InstanceRole",
@@ -49064,21 +49068,17 @@
49064
49068
  "Market",
49065
49069
  "BidPrice"
49066
49070
  ],
49067
- "writeOnly": [
49068
- "EbsConfiguration/EbsBlockDeviceConfigs/*/VolumesPerInstance"
49069
- ],
49070
49071
  "primaryIdentifier": [
49071
- "InstanceGroupId",
49072
- "JobFlowId"
49072
+ "Id"
49073
49073
  ]
49074
49074
  },
49075
- "InstanceGroupConfig_AppConfiguration": {
49076
- "resourceType": "AWS::EMR::InstanceGroupConfig.AppConfiguration",
49075
+ "InstanceGroupConfig_AutoScalingPolicy": {
49076
+ "resourceType": "AWS::EMR::InstanceGroupConfig.AutoScalingPolicy",
49077
49077
  "kind": "property",
49078
49078
  "lexicon": "aws"
49079
49079
  },
49080
- "InstanceGroupConfig_AutoScalingPolicy": {
49081
- "resourceType": "AWS::EMR::InstanceGroupConfig.AutoScalingPolicy",
49080
+ "InstanceGroupConfig_Configuration": {
49081
+ "resourceType": "AWS::EMR::InstanceGroupConfig.Configuration",
49082
49082
  "kind": "property",
49083
49083
  "lexicon": "aws"
49084
49084
  },
@@ -53011,6 +53011,11 @@
53011
53011
  "kind": "property",
53012
53012
  "lexicon": "aws"
53013
53013
  },
53014
+ "KmsConfiguration": {
53015
+ "resourceType": "AWS::BedrockAgentCore::TokenVault.KmsConfiguration",
53016
+ "kind": "property",
53017
+ "lexicon": "aws"
53018
+ },
53014
53019
  "KmsEncryptionConfig": {
53015
53020
  "resourceType": "AWS::HealthLake::FHIRDatastore.KmsEncryptionConfig",
53016
53021
  "kind": "property",
@@ -53110,6 +53115,31 @@
53110
53115
  "kind": "property",
53111
53116
  "lexicon": "aws"
53112
53117
  },
53118
+ "KnowledgeBasePolicy": {
53119
+ "resourceType": "AWS::Bedrock::KnowledgeBasePolicy",
53120
+ "kind": "resource",
53121
+ "lexicon": "aws",
53122
+ "attrs": {
53123
+ "RevisionId": "RevisionId"
53124
+ },
53125
+ "propertyConstraints": {
53126
+ "KnowledgeBaseId": {
53127
+ "pattern": "^[0-9a-zA-Z]+$",
53128
+ "minLength": 1,
53129
+ "maxLength": 10
53130
+ },
53131
+ "RevisionId": {
53132
+ "minLength": 1,
53133
+ "maxLength": 255
53134
+ }
53135
+ },
53136
+ "createOnly": [
53137
+ "KnowledgeBaseId"
53138
+ ],
53139
+ "primaryIdentifier": [
53140
+ "KnowledgeBaseId"
53141
+ ]
53142
+ },
53113
53143
  "KubernetesNetworkConfig": {
53114
53144
  "resourceType": "AWS::EKS::Cluster.KubernetesNetworkConfig",
53115
53145
  "kind": "property",
@@ -96832,6 +96862,38 @@
96832
96862
  "kind": "property",
96833
96863
  "lexicon": "aws"
96834
96864
  },
96865
+ "TokenVault": {
96866
+ "resourceType": "AWS::BedrockAgentCore::TokenVault",
96867
+ "kind": "resource",
96868
+ "lexicon": "aws",
96869
+ "attrs": {
96870
+ "Arn": "Arn",
96871
+ "TokenVaultId": "TokenVaultId",
96872
+ "KmsConfiguration": "KmsConfiguration",
96873
+ "LastModifiedDate": "LastModifiedDate"
96874
+ },
96875
+ "propertyConstraints": {
96876
+ "TokenVaultId": {
96877
+ "pattern": "^[a-zA-Z0-9\\-_]+$",
96878
+ "minLength": 1,
96879
+ "maxLength": 64
96880
+ },
96881
+ "Arn": {
96882
+ "pattern": "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$"
96883
+ },
96884
+ "LastModifiedDate": {
96885
+ "format": "date-time"
96886
+ }
96887
+ },
96888
+ "primaryIdentifier": [
96889
+ "Arn"
96890
+ ]
96891
+ },
96892
+ "TokenVault_KmsConfiguration": {
96893
+ "resourceType": "AWS::BedrockAgentCore::TokenVault.KmsConfiguration",
96894
+ "kind": "property",
96895
+ "lexicon": "aws"
96896
+ },
96835
96897
  "ToolbarConfiguration": {
96836
96898
  "resourceType": "AWS::WorkSpacesWeb::UserSettings.ToolbarConfiguration",
96837
96899
  "kind": "property",
@@ -98398,6 +98460,22 @@
98398
98460
  "tagUpdatable": true
98399
98461
  }
98400
98462
  },
98463
+ "TransitGatewayPolicyTableAssociation": {
98464
+ "resourceType": "AWS::EC2::TransitGatewayPolicyTableAssociation",
98465
+ "kind": "resource",
98466
+ "lexicon": "aws",
98467
+ "attrs": {
98468
+ "State": "State"
98469
+ },
98470
+ "createOnly": [
98471
+ "TransitGatewayAttachmentId",
98472
+ "TransitGatewayPolicyTableId"
98473
+ ],
98474
+ "primaryIdentifier": [
98475
+ "TransitGatewayPolicyTableId",
98476
+ "TransitGatewayAttachmentId"
98477
+ ]
98478
+ },
98401
98479
  "TransitGatewayPolicyTable_Tag": {
98402
98480
  "resourceType": "AWS::EC2::TransitGatewayPolicyTable.Tag",
98403
98481
  "kind": "property",
@@ -102333,15 +102411,44 @@
102333
102411
  "DefaultNetworkAcl": "DefaultNetworkAcl",
102334
102412
  "DefaultSecurityGroup": "DefaultSecurityGroup",
102335
102413
  "Ipv6CidrBlocks": "Ipv6CidrBlocks",
102336
- "VpcId": "VpcId"
102414
+ "VpcId": "VpcId",
102415
+ "VpcEncryptionControl_VpcId": "VpcEncryptionControl.VpcId",
102416
+ "VpcEncryptionControl_VpcEncryptionControlId": "VpcEncryptionControl.VpcEncryptionControlId",
102417
+ "VpcEncryptionControl_State": "VpcEncryptionControl.State",
102418
+ "VpcEncryptionControl_StateMessage": "VpcEncryptionControl.StateMessage",
102419
+ "VpcEncryptionControl_ResourceExclusions": "VpcEncryptionControl.ResourceExclusions",
102420
+ "VpcEncryptionControl_ResourceExclusions_InternetGateway": "VpcEncryptionControl.ResourceExclusions.InternetGateway",
102421
+ "VpcEncryptionControl_ResourceExclusions_InternetGateway_State": "VpcEncryptionControl.ResourceExclusions.InternetGateway.State",
102422
+ "VpcEncryptionControl_ResourceExclusions_InternetGateway_StateMessage": "VpcEncryptionControl.ResourceExclusions.InternetGateway.StateMessage",
102423
+ "VpcEncryptionControl_ResourceExclusions_EgressOnlyInternetGateway": "VpcEncryptionControl.ResourceExclusions.EgressOnlyInternetGateway",
102424
+ "VpcEncryptionControl_ResourceExclusions_EgressOnlyInternetGateway_State": "VpcEncryptionControl.ResourceExclusions.EgressOnlyInternetGateway.State",
102425
+ "VpcEncryptionControl_ResourceExclusions_EgressOnlyInternetGateway_StateMessage": "VpcEncryptionControl.ResourceExclusions.EgressOnlyInternetGateway.StateMessage",
102426
+ "VpcEncryptionControl_ResourceExclusions_NatGateway": "VpcEncryptionControl.ResourceExclusions.NatGateway",
102427
+ "VpcEncryptionControl_ResourceExclusions_NatGateway_State": "VpcEncryptionControl.ResourceExclusions.NatGateway.State",
102428
+ "VpcEncryptionControl_ResourceExclusions_NatGateway_StateMessage": "VpcEncryptionControl.ResourceExclusions.NatGateway.StateMessage",
102429
+ "VpcEncryptionControl_ResourceExclusions_VirtualPrivateGateway": "VpcEncryptionControl.ResourceExclusions.VirtualPrivateGateway",
102430
+ "VpcEncryptionControl_ResourceExclusions_VirtualPrivateGateway_State": "VpcEncryptionControl.ResourceExclusions.VirtualPrivateGateway.State",
102431
+ "VpcEncryptionControl_ResourceExclusions_VirtualPrivateGateway_StateMessage": "VpcEncryptionControl.ResourceExclusions.VirtualPrivateGateway.StateMessage",
102432
+ "VpcEncryptionControl_ResourceExclusions_VpcPeering": "VpcEncryptionControl.ResourceExclusions.VpcPeering",
102433
+ "VpcEncryptionControl_ResourceExclusions_VpcPeering_State": "VpcEncryptionControl.ResourceExclusions.VpcPeering.State",
102434
+ "VpcEncryptionControl_ResourceExclusions_VpcPeering_StateMessage": "VpcEncryptionControl.ResourceExclusions.VpcPeering.StateMessage",
102435
+ "VpcEncryptionControl_ResourceExclusions_Lambda": "VpcEncryptionControl.ResourceExclusions.Lambda",
102436
+ "VpcEncryptionControl_ResourceExclusions_Lambda_State": "VpcEncryptionControl.ResourceExclusions.Lambda.State",
102437
+ "VpcEncryptionControl_ResourceExclusions_Lambda_StateMessage": "VpcEncryptionControl.ResourceExclusions.Lambda.StateMessage",
102438
+ "VpcEncryptionControl_ResourceExclusions_VpcLattice": "VpcEncryptionControl.ResourceExclusions.VpcLattice",
102439
+ "VpcEncryptionControl_ResourceExclusions_VpcLattice_State": "VpcEncryptionControl.ResourceExclusions.VpcLattice.State",
102440
+ "VpcEncryptionControl_ResourceExclusions_VpcLattice_StateMessage": "VpcEncryptionControl.ResourceExclusions.VpcLattice.StateMessage",
102441
+ "VpcEncryptionControl_ResourceExclusions_ElasticFileSystem": "VpcEncryptionControl.ResourceExclusions.ElasticFileSystem",
102442
+ "VpcEncryptionControl_ResourceExclusions_ElasticFileSystem_State": "VpcEncryptionControl.ResourceExclusions.ElasticFileSystem.State",
102443
+ "VpcEncryptionControl_ResourceExclusions_ElasticFileSystem_StateMessage": "VpcEncryptionControl.ResourceExclusions.ElasticFileSystem.StateMessage"
102337
102444
  },
102338
102445
  "propertyConstraints": {
102339
- "VpcId": {
102340
- "format": "AWS::EC2::VPC.Id"
102341
- },
102342
102446
  "CidrBlock": {
102343
102447
  "format": "ipv4-network"
102344
102448
  },
102449
+ "VpcId": {
102450
+ "format": "AWS::EC2::VPC.Id"
102451
+ },
102345
102452
  "DefaultSecurityGroup": {
102346
102453
  "format": "AWS::EC2::SecurityGroup.Id"
102347
102454
  }
@@ -102349,11 +102456,20 @@
102349
102456
  "createOnly": [
102350
102457
  "CidrBlock",
102351
102458
  "Ipv4IpamPoolId",
102352
- "Ipv4NetmaskLength"
102459
+ "Ipv4NetmaskLength",
102460
+ "VpcEncryptionControl"
102353
102461
  ],
102354
102462
  "writeOnly": [
102355
102463
  "Ipv4IpamPoolId",
102356
- "Ipv4NetmaskLength"
102464
+ "Ipv4NetmaskLength",
102465
+ "VpcEncryptionControl/InternetGatewayExclusion",
102466
+ "VpcEncryptionControl/EgressOnlyInternetGatewayExclusion",
102467
+ "VpcEncryptionControl/NatGatewayExclusion",
102468
+ "VpcEncryptionControl/VirtualPrivateGatewayExclusion",
102469
+ "VpcEncryptionControl/VpcPeeringExclusion",
102470
+ "VpcEncryptionControl/LambdaExclusion",
102471
+ "VpcEncryptionControl/VpcLatticeExclusion",
102472
+ "VpcEncryptionControl/ElasticFileSystemExclusion"
102357
102473
  ],
102358
102474
  "primaryIdentifier": [
102359
102475
  "VpcId"
@@ -102520,8 +102636,13 @@
102520
102636
  "kind": "property",
102521
102637
  "lexicon": "aws"
102522
102638
  },
102523
- "VpcEncryptionControlExclusion": {
102524
- "resourceType": "AWS::EC2::VPCEncryptionControl.VpcEncryptionControlExclusion",
102639
+ "VpcEncryptionControl": {
102640
+ "resourceType": "AWS::EC2::VPC.VpcEncryptionControl",
102641
+ "kind": "property",
102642
+ "lexicon": "aws"
102643
+ },
102644
+ "VpcEncryptionControlExclusions": {
102645
+ "resourceType": "AWS::EC2::VPC.VpcEncryptionControlExclusions",
102525
102646
  "kind": "property",
102526
102647
  "lexicon": "aws"
102527
102648
  },
@@ -103126,6 +103247,21 @@
103126
103247
  "kind": "property",
103127
103248
  "lexicon": "aws"
103128
103249
  },
103250
+ "Vpc_VpcEncryptionControl": {
103251
+ "resourceType": "AWS::EC2::VPC.VpcEncryptionControl",
103252
+ "kind": "property",
103253
+ "lexicon": "aws"
103254
+ },
103255
+ "Vpc_VpcEncryptionControlExclusion": {
103256
+ "resourceType": "AWS::EC2::VPC.VpcEncryptionControlExclusion",
103257
+ "kind": "property",
103258
+ "lexicon": "aws"
103259
+ },
103260
+ "Vpc_VpcEncryptionControlExclusions": {
103261
+ "resourceType": "AWS::EC2::VPC.VpcEncryptionControlExclusions",
103262
+ "kind": "property",
103263
+ "lexicon": "aws"
103264
+ },
103129
103265
  "VpnTunnelLogOptionsSpecification": {
103130
103266
  "resourceType": "AWS::EC2::VPNConnection.VpnTunnelLogOptionsSpecification",
103131
103267
  "kind": "property",
package/src/index.ts CHANGED
@@ -4,6 +4,8 @@ export { Parameter } from "./parameter";
4
4
  // Default Tags
5
5
  export { defaultTags, isDefaultTags, DEFAULT_TAGS_MARKER } from "./default-tags";
6
6
  export type { DefaultTags, TagEntry } from "./default-tags";
7
+ export { templateTransform, isTemplateTransform, TEMPLATE_TRANSFORM_MARKER } from "./template-transform";
8
+ export type { TemplateTransform } from "./template-transform";
7
9
 
8
10
  // Serializer
9
11
  export { awsSerializer } from "./serializer";
@@ -12,6 +12,7 @@ import type { SerializerResult } from "@intentius/chant/serializer";
12
12
  import type { BuildResult } from "@intentius/chant/build";
13
13
  import { Parameter } from "./parameter";
14
14
  import { defaultTags } from "./default-tags";
15
+ import { templateTransform } from "./template-transform";
15
16
 
16
17
  // Mock S3 Bucket for testing
17
18
  class MockBucket implements Declarable {
@@ -68,6 +69,38 @@ describe("awsSerializer.serialize", () => {
68
69
  expect(template.Resources.MyBucket.Properties.BucketName).toBe("my-bucket");
69
70
  });
70
71
 
72
+ test("lifts a templateTransform to the top-level Transform, not a resource", () => {
73
+ const entities = new Map<string, Declarable>();
74
+ entities.set("MyBucket", new MockBucket({ BucketName: "my-bucket" }));
75
+ entities.set("rotationTransform", templateTransform("AWS::SecretsManager-2020-07-23"));
76
+
77
+ const template = JSON.parse(awsSerializer.serialize(entities));
78
+
79
+ expect(template.Transform).toBe("AWS::SecretsManager-2020-07-23");
80
+ expect(template.Resources.rotationTransform).toBeUndefined();
81
+ expect(template.Resources.MyBucket).toBeDefined();
82
+ });
83
+
84
+ test("merges + de-duplicates multiple transforms into a list", () => {
85
+ const entities = new Map<string, Declarable>();
86
+ entities.set("t1", templateTransform("AWS::SecretsManager-2020-07-23"));
87
+ entities.set("t2", templateTransform("AWS::LanguageExtensions"));
88
+ entities.set("t3", templateTransform("AWS::SecretsManager-2020-07-23")); // dup
89
+
90
+ const template = JSON.parse(awsSerializer.serialize(entities));
91
+
92
+ expect(template.Transform).toEqual(["AWS::SecretsManager-2020-07-23", "AWS::LanguageExtensions"]);
93
+ });
94
+
95
+ test("no Transform when none is declared", () => {
96
+ const entities = new Map<string, Declarable>();
97
+ entities.set("MyBucket", new MockBucket({ BucketName: "my-bucket" }));
98
+
99
+ const template = JSON.parse(awsSerializer.serialize(entities));
100
+
101
+ expect(template.Transform).toBeUndefined();
102
+ });
103
+
71
104
  test("serializes parameters", () => {
72
105
  const entities = new Map<string, Declarable>();
73
106
  entities.set("Environment", new Parameter("String", {
package/src/serializer.ts CHANGED
@@ -10,6 +10,7 @@ import { isStackOutput, type StackOutput } from "@intentius/chant/stack-output";
10
10
  import { isAttrRefLike } from "@intentius/chant/utils";
11
11
  import { resolveDependsOn } from "@intentius/chant/resource-attributes";
12
12
  import { isDefaultTags, type TagEntry } from "./default-tags";
13
+ import { isTemplateTransform } from "./template-transform";
13
14
  import { loadTaggableResources } from "./taggable";
14
15
 
15
16
  /**
@@ -25,6 +26,7 @@ function isCoreParameter(entity: Declarable): entity is CoreParameter {
25
26
  interface CFTemplate {
26
27
  AWSTemplateFormatVersion: "2010-09-09";
27
28
  Description?: string;
29
+ Transform?: string | string[];
28
30
  Parameters?: Record<string, CFParameter>;
29
31
  Resources: Record<string, CFResource>;
30
32
  Outputs?: Record<string, CFOutput>;
@@ -192,6 +194,21 @@ function serializeToTemplate(
192
194
  }
193
195
  }
194
196
 
197
+ // Collect top-level Transform macros (e.g. AWS::SecretsManager-2020-07-23),
198
+ // de-duplicated in declaration order. One → a string, several → a list,
199
+ // matching CloudFormation's own `Transform` shape.
200
+ const transforms: string[] = [];
201
+ for (const [, entity] of entities) {
202
+ if (isTemplateTransform(entity) && !transforms.includes(entity.transform)) {
203
+ transforms.push(entity.transform);
204
+ }
205
+ }
206
+ if (transforms.length === 1) {
207
+ template.Transform = transforms[0];
208
+ } else if (transforms.length > 1) {
209
+ template.Transform = transforms;
210
+ }
211
+
195
212
  // Process entities
196
213
  for (const [name, entity] of entities) {
197
214
  // Skip StackOutput entities — they go in the Outputs section
@@ -204,6 +221,11 @@ function serializeToTemplate(
204
221
  continue;
205
222
  }
206
223
 
224
+ // Skip TemplateTransform entities — lifted to the top-level Transform above
225
+ if (isTemplateTransform(entity)) {
226
+ continue;
227
+ }
228
+
207
229
  if (isCoreParameter(entity)) {
208
230
  if (!template.Parameters) {
209
231
  template.Parameters = {};
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Template Transform — declares a top-level CloudFormation `Transform` macro
3
+ * for the synthesized template (e.g. `AWS::SecretsManager-2020-07-23` for a
4
+ * Secrets Manager `HostedRotationLambda`, or `AWS::LanguageExtensions`).
5
+ *
6
+ * CloudFormation's `Transform` is a template-level directive, not a resource
7
+ * property, so it can't be expressed as a normal Declarable's attributes. A
8
+ * project (or composite) exports a `templateTransform(...)` declaration and the
9
+ * serializer lifts it to the template's top-level `Transform` at synthesis time.
10
+ * Multiple declarations are merged and de-duplicated into a `Transform` list.
11
+ *
12
+ * Modeled exactly like `./default-tags.ts` — a marker-tagged Declarable the
13
+ * serializer detects and consumes rather than emitting as a resource.
14
+ */
15
+
16
+ import { DECLARABLE_MARKER, type Declarable } from "@intentius/chant/declarable";
17
+
18
+ /** Marker symbol for template-transform identification. */
19
+ export const TEMPLATE_TRANSFORM_MARKER = Symbol.for("chant.aws.templateTransform");
20
+
21
+ /**
22
+ * A template-transform declaration — wraps a macro name into a Declarable the
23
+ * serializer lifts to the template's top-level `Transform`.
24
+ */
25
+ export interface TemplateTransform extends Declarable {
26
+ readonly [TEMPLATE_TRANSFORM_MARKER]: true;
27
+ readonly [DECLARABLE_MARKER]: true;
28
+ readonly lexicon: "aws";
29
+ readonly entityType: "chant:aws:templateTransform";
30
+ readonly transform: string;
31
+ }
32
+
33
+ /** Type guard for TemplateTransform. */
34
+ export function isTemplateTransform(value: unknown): value is TemplateTransform {
35
+ return (
36
+ typeof value === "object" &&
37
+ value !== null &&
38
+ TEMPLATE_TRANSFORM_MARKER in value &&
39
+ (value as Record<symbol, unknown>)[TEMPLATE_TRANSFORM_MARKER] === true
40
+ );
41
+ }
42
+
43
+ /**
44
+ * Declare a top-level CloudFormation `Transform` macro for the synthesized
45
+ * template. The serializer collects every `templateTransform(...)` in the
46
+ * project and emits their de-duplicated union as the template's `Transform`
47
+ * (a single string when there is one, a list when there are several).
48
+ *
49
+ * @param transform - The macro name, e.g. `"AWS::SecretsManager-2020-07-23"`.
50
+ * @returns A TemplateTransform Declarable.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * import { templateTransform } from "@intentius/chant-lexicon-aws";
55
+ *
56
+ * // Required whenever a resource uses SecretsManager HostedRotationLambda.
57
+ * export const rotationTransform = templateTransform("AWS::SecretsManager-2020-07-23");
58
+ * ```
59
+ */
60
+ export function templateTransform(transform: string): TemplateTransform {
61
+ return {
62
+ [TEMPLATE_TRANSFORM_MARKER]: true,
63
+ [DECLARABLE_MARKER]: true,
64
+ lexicon: "aws",
65
+ entityType: "chant:aws:templateTransform",
66
+ transform,
67
+ };
68
+ }