@go-to-k/cdkd 0.50.7 → 0.50.9

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/cli.js CHANGED
@@ -15477,18 +15477,36 @@ var LambdaUrlProvider = class {
15477
15477
  /**
15478
15478
  * Update a Lambda Function URL
15479
15479
  */
15480
- async update(logicalId, physicalId, _resourceType, properties, _previousProperties) {
15480
+ async update(logicalId, physicalId, _resourceType, properties, previousProperties) {
15481
15481
  this.logger.debug(`Updating Lambda URL ${logicalId}: ${physicalId}`);
15482
+ const handled = this.handledProperties.get("AWS::Lambda::Url") ?? /* @__PURE__ */ new Set();
15483
+ let changed = false;
15484
+ for (const key of handled) {
15485
+ if (JSON.stringify(properties[key] ?? null) !== JSON.stringify(previousProperties[key] ?? null)) {
15486
+ changed = true;
15487
+ break;
15488
+ }
15489
+ }
15490
+ if (!changed) {
15491
+ return {
15492
+ physicalId,
15493
+ wasReplaced: false,
15494
+ attributes: {}
15495
+ };
15496
+ }
15482
15497
  const authType = properties["AuthType"] || "NONE";
15483
15498
  const cors = properties["Cors"];
15484
15499
  const updateParams = {
15485
15500
  FunctionName: physicalId,
15486
15501
  AuthType: authType
15487
15502
  };
15488
- if (properties["InvokeMode"])
15503
+ if (properties["InvokeMode"] !== void 0)
15489
15504
  updateParams.InvokeMode = properties["InvokeMode"];
15490
15505
  if (cors) {
15491
- updateParams.Cors = this.buildCorsConfig(cors);
15506
+ const builtCors = this.buildCorsConfig(cors);
15507
+ if (Object.keys(builtCors).length > 0) {
15508
+ updateParams.Cors = builtCors;
15509
+ }
15492
15510
  }
15493
15511
  const response = await this.lambdaClient.send(new UpdateFunctionUrlConfigCommand(updateParams));
15494
15512
  return {
@@ -15638,19 +15656,36 @@ var LambdaUrlProvider = class {
15638
15656
  return null;
15639
15657
  }
15640
15658
  /**
15641
- * Build CORS configuration from CDK properties
15659
+ * Build CORS configuration from CDK properties.
15660
+ *
15661
+ * Empty arrays from `readCurrentState`'s always-emit placeholder
15662
+ * (`AllowOrigins: []`, `AllowMethods: []`, `AllowHeaders: []`,
15663
+ * `ExposeHeaders: []`) are intentionally dropped here — emitting them
15664
+ * to AWS would configure CORS with empty allowlists instead of
15665
+ * leaving CORS unset. The caller (`update()` / `create()`) treats an
15666
+ * empty `Cors` object as "no CORS configured" and omits it from the
15667
+ * SDK input. `MaxAge` uses `!== undefined` so the valid AWS input
15668
+ * `MaxAge: 0` (= "do not cache preflight responses") is preserved.
15642
15669
  */
15643
15670
  buildCorsConfig(cors) {
15644
15671
  const config = {};
15645
- if (cors["AllowOrigins"])
15646
- config.AllowOrigins = cors["AllowOrigins"];
15647
- if (cors["AllowMethods"])
15648
- config.AllowMethods = cors["AllowMethods"];
15649
- if (cors["AllowHeaders"])
15650
- config.AllowHeaders = cors["AllowHeaders"];
15651
- if (cors["ExposeHeaders"])
15652
- config.ExposeHeaders = cors["ExposeHeaders"];
15653
- if (cors["MaxAge"])
15672
+ const allowOrigins = cors["AllowOrigins"];
15673
+ if (Array.isArray(allowOrigins) && allowOrigins.length > 0) {
15674
+ config.AllowOrigins = allowOrigins;
15675
+ }
15676
+ const allowMethods = cors["AllowMethods"];
15677
+ if (Array.isArray(allowMethods) && allowMethods.length > 0) {
15678
+ config.AllowMethods = allowMethods;
15679
+ }
15680
+ const allowHeaders = cors["AllowHeaders"];
15681
+ if (Array.isArray(allowHeaders) && allowHeaders.length > 0) {
15682
+ config.AllowHeaders = allowHeaders;
15683
+ }
15684
+ const exposeHeaders = cors["ExposeHeaders"];
15685
+ if (Array.isArray(exposeHeaders) && exposeHeaders.length > 0) {
15686
+ config.ExposeHeaders = exposeHeaders;
15687
+ }
15688
+ if (cors["MaxAge"] !== void 0)
15654
15689
  config.MaxAge = cors["MaxAge"];
15655
15690
  if (cors["AllowCredentials"] !== void 0)
15656
15691
  config.AllowCredentials = cors["AllowCredentials"];
@@ -15669,6 +15704,43 @@ import {
15669
15704
  ResourceNotFoundException as ResourceNotFoundException4
15670
15705
  } from "@aws-sdk/client-lambda";
15671
15706
  init_aws_clients();
15707
+ function classifyEventSource(resp) {
15708
+ if (resp.SelfManagedEventSource !== void 0)
15709
+ return "kafka";
15710
+ if (resp.SelfManagedKafkaEventSourceConfig !== void 0)
15711
+ return "kafka";
15712
+ if (resp.AmazonManagedKafkaEventSourceConfig !== void 0)
15713
+ return "kafka";
15714
+ if (resp.DocumentDBEventSourceConfig !== void 0)
15715
+ return "documentdb";
15716
+ const arn = resp.EventSourceArn;
15717
+ if (!arn)
15718
+ return "unknown";
15719
+ if (arn.startsWith("arn:aws:sqs:") || arn.startsWith("arn:aws-cn:sqs:"))
15720
+ return "sqs";
15721
+ if (arn.startsWith("arn:aws:kinesis:") || arn.startsWith("arn:aws-cn:kinesis:"))
15722
+ return "kinesis";
15723
+ if (arn.startsWith("arn:aws:dynamodb:") || arn.startsWith("arn:aws-cn:dynamodb:"))
15724
+ return "dynamodb";
15725
+ if (arn.startsWith("arn:aws:kafka:") || arn.startsWith("arn:aws-cn:kafka:"))
15726
+ return "kafka";
15727
+ if (arn.startsWith("arn:aws:mq:") || arn.startsWith("arn:aws-cn:mq:"))
15728
+ return "mq";
15729
+ if (arn.startsWith("arn:aws:rds:") || arn.startsWith("arn:aws-cn:rds:")) {
15730
+ return "documentdb";
15731
+ }
15732
+ return "unknown";
15733
+ }
15734
+ var KINDS_WITH_FUNCTION_RESPONSE_TYPES = /* @__PURE__ */ new Set([
15735
+ "sqs",
15736
+ "kinesis",
15737
+ "dynamodb"
15738
+ ]);
15739
+ var KINDS_WITH_SOURCE_ACCESS_CONFIGURATIONS = /* @__PURE__ */ new Set([
15740
+ "kafka",
15741
+ "mq",
15742
+ "documentdb"
15743
+ ]);
15672
15744
  var LambdaEventSourceMappingProvider = class {
15673
15745
  lambdaClient;
15674
15746
  logger = getLogger().child("LambdaEventSourceMappingProvider");
@@ -15795,33 +15867,33 @@ var LambdaEventSourceMappingProvider = class {
15795
15867
  UUID: physicalId,
15796
15868
  FunctionName: properties["FunctionName"]
15797
15869
  };
15798
- if (properties["BatchSize"])
15870
+ if (properties["BatchSize"] !== void 0)
15799
15871
  updateParams.BatchSize = properties["BatchSize"];
15800
15872
  if (properties["Enabled"] !== void 0)
15801
15873
  updateParams.Enabled = properties["Enabled"];
15802
- if (properties["MaximumBatchingWindowInSeconds"])
15874
+ if (properties["MaximumBatchingWindowInSeconds"] !== void 0)
15803
15875
  updateParams.MaximumBatchingWindowInSeconds = properties["MaximumBatchingWindowInSeconds"];
15804
15876
  if (properties["MaximumRetryAttempts"] !== void 0)
15805
15877
  updateParams.MaximumRetryAttempts = properties["MaximumRetryAttempts"];
15806
15878
  if (properties["BisectBatchOnFunctionError"] !== void 0)
15807
15879
  updateParams.BisectBatchOnFunctionError = properties["BisectBatchOnFunctionError"];
15808
- if (properties["MaximumRecordAgeInSeconds"])
15880
+ if (properties["MaximumRecordAgeInSeconds"] !== void 0)
15809
15881
  updateParams.MaximumRecordAgeInSeconds = properties["MaximumRecordAgeInSeconds"];
15810
- if (properties["ParallelizationFactor"])
15882
+ if (properties["ParallelizationFactor"] !== void 0)
15811
15883
  updateParams.ParallelizationFactor = properties["ParallelizationFactor"];
15812
- if (properties["FilterCriteria"])
15884
+ if (properties["FilterCriteria"] !== void 0)
15813
15885
  updateParams.FilterCriteria = properties["FilterCriteria"];
15814
- if (properties["DestinationConfig"])
15886
+ if (properties["DestinationConfig"] !== void 0)
15815
15887
  updateParams.DestinationConfig = properties["DestinationConfig"];
15816
- if (properties["TumblingWindowInSeconds"])
15888
+ if (properties["TumblingWindowInSeconds"] !== void 0)
15817
15889
  updateParams.TumblingWindowInSeconds = properties["TumblingWindowInSeconds"];
15818
- if (properties["FunctionResponseTypes"])
15890
+ if (properties["FunctionResponseTypes"] !== void 0)
15819
15891
  updateParams.FunctionResponseTypes = properties["FunctionResponseTypes"];
15820
- if (properties["SourceAccessConfigurations"])
15892
+ if (properties["SourceAccessConfigurations"] !== void 0)
15821
15893
  updateParams.SourceAccessConfigurations = properties["SourceAccessConfigurations"];
15822
- if (properties["ScalingConfig"])
15894
+ if (properties["ScalingConfig"] !== void 0)
15823
15895
  updateParams.ScalingConfig = properties["ScalingConfig"];
15824
- if (properties["DocumentDBEventSourceConfig"])
15896
+ if (properties["DocumentDBEventSourceConfig"] !== void 0)
15825
15897
  updateParams.DocumentDBEventSourceConfig = properties["DocumentDBEventSourceConfig"];
15826
15898
  const updateResp = await this.lambdaClient.send(
15827
15899
  new UpdateEventSourceMappingCommand(updateParams)
@@ -15995,8 +16067,17 @@ var LambdaEventSourceMappingProvider = class {
15995
16067
  if (resp.TumblingWindowInSeconds !== void 0) {
15996
16068
  result["TumblingWindowInSeconds"] = resp.TumblingWindowInSeconds;
15997
16069
  }
15998
- result["FunctionResponseTypes"] = resp.FunctionResponseTypes ? [...resp.FunctionResponseTypes] : [];
15999
- result["SourceAccessConfigurations"] = resp.SourceAccessConfigurations ?? [];
16070
+ const kind = classifyEventSource(resp);
16071
+ if (KINDS_WITH_FUNCTION_RESPONSE_TYPES.has(kind)) {
16072
+ result["FunctionResponseTypes"] = resp.FunctionResponseTypes ? [...resp.FunctionResponseTypes] : [];
16073
+ } else if (resp.FunctionResponseTypes !== void 0) {
16074
+ result["FunctionResponseTypes"] = [...resp.FunctionResponseTypes];
16075
+ }
16076
+ if (KINDS_WITH_SOURCE_ACCESS_CONFIGURATIONS.has(kind)) {
16077
+ result["SourceAccessConfigurations"] = resp.SourceAccessConfigurations ?? [];
16078
+ } else if (resp.SourceAccessConfigurations !== void 0) {
16079
+ result["SourceAccessConfigurations"] = resp.SourceAccessConfigurations;
16080
+ }
16000
16081
  if (resp.SelfManagedEventSource !== void 0) {
16001
16082
  result["SelfManagedEventSource"] = resp.SelfManagedEventSource;
16002
16083
  }
@@ -16124,19 +16205,35 @@ var LambdaLayerVersionProvider = class {
16124
16205
  }
16125
16206
  }
16126
16207
  /**
16127
- * Update a Lambda layer version
16208
+ * Update a Lambda layer version.
16209
+ *
16210
+ * Lambda layer versions are immutable on AWS — there is no API to mutate
16211
+ * `Content` / `CompatibleRuntimes` / `CompatibleArchitectures` /
16212
+ * `Description` / `LicenseInfo` of an existing version. The only path to
16213
+ * a "new value" is publishing a new version (new LayerVersionArn).
16214
+ *
16215
+ * Why this rejects with `ResourceUpdateNotSupportedError` instead of
16216
+ * silently publishing a new version:
16128
16217
  *
16129
- * Lambda layer versions are immutable. An update publishes a new version.
16130
- * The new LayerVersionArn becomes the physical ID.
16218
+ * - `cdkd drift --revert` calls `update(observed, observed)` to push
16219
+ * state values back into AWS. For an immutable resource that cannot
16220
+ * have its in-place value changed, the only AWS-side effect of an
16221
+ * "update" is leaking a duplicate version of the same content,
16222
+ * which is never what `--revert` should do.
16223
+ * - On the deploy path, content / runtime / arch changes flow
16224
+ * through CDK's hash-based logical naming, which produces a fresh
16225
+ * logical ID and a CREATE+DELETE in cdkd's diff — `update()` is
16226
+ * not the path taken in practice. Users who hit this on a non-CDK
16227
+ * template should re-deploy with `--replace`.
16131
16228
  */
16132
- async update(logicalId, physicalId, resourceType, properties, _previousProperties) {
16133
- this.logger.debug(`Updating Lambda layer version ${logicalId}: ${physicalId}`);
16134
- const createResult = await this.create(logicalId, resourceType, properties);
16135
- return {
16136
- physicalId: createResult.physicalId,
16137
- wasReplaced: true,
16138
- attributes: createResult.attributes ?? {}
16139
- };
16229
+ async update(logicalId, _physicalId, resourceType, _properties, _previousProperties) {
16230
+ return Promise.reject(
16231
+ new ResourceUpdateNotSupportedError(
16232
+ resourceType,
16233
+ logicalId,
16234
+ "Lambda layer versions are immutable on AWS; re-deploy with cdkd deploy --replace, or change the resource definition to publish a new version"
16235
+ )
16236
+ );
16140
16237
  }
16141
16238
  /**
16142
16239
  * Delete a Lambda layer version
@@ -16658,23 +16755,28 @@ var DynamoDBTableProvider = class {
16658
16755
  WriteCapacityUnits: table.ProvisionedThroughput.WriteCapacityUnits
16659
16756
  };
16660
16757
  }
16661
- if (table.StreamSpecification) {
16758
+ if (table.StreamSpecification?.StreamEnabled && table.StreamSpecification.StreamViewType) {
16662
16759
  result["StreamSpecification"] = {
16663
- StreamEnabled: table.StreamSpecification.StreamEnabled,
16760
+ StreamEnabled: true,
16664
16761
  StreamViewType: table.StreamSpecification.StreamViewType
16665
16762
  };
16666
16763
  }
16667
- result["GlobalSecondaryIndexes"] = table.GlobalSecondaryIndexes ?? [];
16668
- result["LocalSecondaryIndexes"] = table.LocalSecondaryIndexes ?? [];
16669
- const sse = {
16670
- SSEEnabled: table.SSEDescription?.Status === "ENABLED"
16671
- };
16672
- if (table.SSEDescription?.KMSMasterKeyArn !== void 0) {
16673
- sse["KMSMasterKeyId"] = table.SSEDescription.KMSMasterKeyArn;
16764
+ if (table.GlobalSecondaryIndexes && table.GlobalSecondaryIndexes.length > 0) {
16765
+ result["GlobalSecondaryIndexes"] = table.GlobalSecondaryIndexes;
16766
+ }
16767
+ if (table.LocalSecondaryIndexes && table.LocalSecondaryIndexes.length > 0) {
16768
+ result["LocalSecondaryIndexes"] = table.LocalSecondaryIndexes;
16769
+ }
16770
+ if (table.SSEDescription?.Status === "ENABLED") {
16771
+ const sse = { SSEEnabled: true };
16772
+ if (table.SSEDescription.KMSMasterKeyArn !== void 0) {
16773
+ sse["KMSMasterKeyId"] = table.SSEDescription.KMSMasterKeyArn;
16774
+ }
16775
+ if (table.SSEDescription.SSEType !== void 0) {
16776
+ sse["SSEType"] = table.SSEDescription.SSEType;
16777
+ }
16778
+ result["SSESpecification"] = sse;
16674
16779
  }
16675
- if (table.SSEDescription?.SSEType !== void 0)
16676
- sse["SSEType"] = table.SSEDescription.SSEType;
16677
- result["SSESpecification"] = sse;
16678
16780
  if (table.DeletionProtectionEnabled !== void 0) {
16679
16781
  result["DeletionProtectionEnabled"] = table.DeletionProtectionEnabled;
16680
16782
  }
@@ -17627,9 +17729,9 @@ var SecretsManagerSecretProvider = class {
17627
17729
  };
17628
17730
  if (secretString)
17629
17731
  updateParams.SecretString = secretString;
17630
- if (properties["Description"])
17732
+ if (properties["Description"] !== void 0)
17631
17733
  updateParams.Description = properties["Description"];
17632
- if (properties["KmsKeyId"])
17734
+ if (properties["KmsKeyId"] !== void 0 && properties["KmsKeyId"] !== "")
17633
17735
  updateParams.KmsKeyId = properties["KmsKeyId"];
17634
17736
  await this.smClient.send(new UpdateSecretCommand(updateParams));
17635
17737
  const newTags = properties["Tags"];
@@ -27153,13 +27255,14 @@ var RDSProvider = class {
27153
27255
  async updateDBSubnetGroup(logicalId, physicalId, resourceType, properties, previousProperties) {
27154
27256
  this.logger.debug(`Updating DBSubnetGroup ${logicalId}: ${physicalId}`);
27155
27257
  try {
27156
- await this.getClient().send(
27157
- new ModifyDBSubnetGroupCommand({
27158
- DBSubnetGroupName: physicalId,
27159
- DBSubnetGroupDescription: properties["DBSubnetGroupDescription"],
27160
- SubnetIds: properties["SubnetIds"]
27161
- })
27162
- );
27258
+ const subnetIds = properties["SubnetIds"];
27259
+ const sendSubnetIds = subnetIds !== void 0 && subnetIds.length > 0;
27260
+ const modifyInput = {
27261
+ DBSubnetGroupName: physicalId,
27262
+ DBSubnetGroupDescription: properties["DBSubnetGroupDescription"],
27263
+ ...sendSubnetIds && { SubnetIds: subnetIds }
27264
+ };
27265
+ await this.getClient().send(new ModifyDBSubnetGroupCommand(modifyInput));
27163
27266
  const desc = await this.getClient().send(
27164
27267
  new DescribeDBSubnetGroupsCommand({ DBSubnetGroupName: physicalId })
27165
27268
  );
@@ -27289,16 +27392,19 @@ var RDSProvider = class {
27289
27392
  this.logger.debug(`Updating DBCluster ${logicalId}: ${physicalId}`);
27290
27393
  try {
27291
27394
  const serverlessV2Config = properties["ServerlessV2ScalingConfiguration"];
27395
+ const hasServerlessV2 = serverlessV2Config !== void 0 && (serverlessV2Config.MinCapacity !== void 0 || serverlessV2Config.MaxCapacity !== void 0);
27396
+ const vpcSgIds = properties["VpcSecurityGroupIds"];
27397
+ const sendVpcSgIds = vpcSgIds !== void 0 && vpcSgIds.length > 0;
27292
27398
  await this.getClient().send(
27293
27399
  new ModifyDBClusterCommand({
27294
27400
  DBClusterIdentifier: physicalId,
27295
27401
  EngineVersion: properties["EngineVersion"],
27296
27402
  DeletionProtection: properties["DeletionProtection"],
27297
27403
  BackupRetentionPeriod: properties["BackupRetentionPeriod"] != null ? Number(properties["BackupRetentionPeriod"]) : void 0,
27298
- VpcSecurityGroupIds: properties["VpcSecurityGroupIds"],
27404
+ ...sendVpcSgIds && { VpcSecurityGroupIds: vpcSgIds },
27299
27405
  MasterUserPassword: properties["MasterUserPassword"],
27300
27406
  Port: properties["Port"] != null ? Number(properties["Port"]) : void 0,
27301
- ...serverlessV2Config && {
27407
+ ...hasServerlessV2 && {
27302
27408
  ServerlessV2ScalingConfiguration: {
27303
27409
  MinCapacity: serverlessV2Config.MinCapacity,
27304
27410
  MaxCapacity: serverlessV2Config.MaxCapacity
@@ -27797,7 +27903,7 @@ var RDSProvider = class {
27797
27903
  if (cluster.DeletionProtection !== void 0) {
27798
27904
  result["DeletionProtection"] = cluster.DeletionProtection;
27799
27905
  }
27800
- {
27906
+ if (cluster.ServerlessV2ScalingConfiguration?.MinCapacity !== void 0 || cluster.ServerlessV2ScalingConfiguration?.MaxCapacity !== void 0) {
27801
27907
  const sc = {};
27802
27908
  if (cluster.ServerlessV2ScalingConfiguration?.MinCapacity !== void 0) {
27803
27909
  sc["MinCapacity"] = cluster.ServerlessV2ScalingConfiguration.MinCapacity;
@@ -29987,11 +30093,13 @@ var ElastiCacheProvider = class {
29987
30093
  async updateCacheCluster(logicalId, physicalId, resourceType, properties, previousProperties) {
29988
30094
  this.logger.debug(`Updating CacheCluster ${logicalId}: ${physicalId}`);
29989
30095
  try {
30096
+ const rawSgIds = properties["VpcSecurityGroupIds"];
30097
+ const sgIds = rawSgIds && rawSgIds.length > 0 ? rawSgIds : void 0;
29990
30098
  await this.getClient().send(
29991
30099
  new ModifyCacheClusterCommand({
29992
30100
  CacheClusterId: physicalId,
29993
30101
  NumCacheNodes: properties["NumCacheNodes"] != null ? Number(properties["NumCacheNodes"]) : void 0,
29994
- SecurityGroupIds: properties["VpcSecurityGroupIds"],
30102
+ SecurityGroupIds: sgIds,
29995
30103
  CacheParameterGroupName: properties["CacheParameterGroupName"],
29996
30104
  EngineVersion: properties["EngineVersion"],
29997
30105
  PreferredMaintenanceWindow: properties["PreferredMaintenanceWindow"],
@@ -30269,7 +30377,7 @@ var ElastiCacheProvider = class {
30269
30377
  result["IpDiscovery"] = cluster.IpDiscovery;
30270
30378
  if (cluster.NetworkType !== void 0)
30271
30379
  result["NetworkType"] = cluster.NetworkType;
30272
- if (cluster.TransitEncryptionEnabled !== void 0) {
30380
+ if (cluster.Engine === "redis" && cluster.TransitEncryptionEnabled !== void 0) {
30273
30381
  result["TransitEncryptionEnabled"] = cluster.TransitEncryptionEnabled;
30274
30382
  }
30275
30383
  if (cluster.CacheNodes?.[0]?.Endpoint?.Port !== void 0) {
@@ -32911,6 +33019,36 @@ var KMSProvider = class {
32911
33019
  }
32912
33020
  return result;
32913
33021
  }
33022
+ /**
33023
+ * Declare state property paths cdkd cannot round-trip from AWS, so the
33024
+ * drift comparator skips them instead of firing guaranteed false-
33025
+ * positive drift on every clean run.
33026
+ *
33027
+ * - `KeyPolicy`: cdkd does NOT call `GetKeyPolicy` in `readCurrentState`.
33028
+ * The policy body needs JSON parsing for comparison and a separate
33029
+ * SDK call; deferred to a follow-up. Until then, any user who
33030
+ * templates `KeyPolicy` would see guaranteed drift.
33031
+ * - `EnableKeyRotation` / `RotationPeriodInDays`: cdkd does NOT call
33032
+ * `GetKeyRotationStatus`. Same reason — deferred to a follow-up.
33033
+ * `EnableKeyRotation` is also a Class 1 candidate (only valid for
33034
+ * `KeySpec=SYMMETRIC_DEFAULT`); when we lift this gap the read side
33035
+ * must gate the emit on the discriminator.
33036
+ * - `BypassPolicyLockoutSafetyCheck` / `PendingWindowInDays`: not part
33037
+ * of the persisted AWS state visible via `DescribeKey` — both are
33038
+ * create / delete-time-only inputs.
33039
+ */
33040
+ getDriftUnknownPaths(resourceType) {
33041
+ if (resourceType === "AWS::KMS::Key") {
33042
+ return [
33043
+ "KeyPolicy",
33044
+ "EnableKeyRotation",
33045
+ "RotationPeriodInDays",
33046
+ "BypassPolicyLockoutSafetyCheck",
33047
+ "PendingWindowInDays"
33048
+ ];
33049
+ }
33050
+ return [];
33051
+ }
32914
33052
  async readCurrentStateAlias(physicalId) {
32915
33053
  let marker;
32916
33054
  do {
@@ -43531,7 +43669,7 @@ function reorderArgs(argv) {
43531
43669
  }
43532
43670
  async function main() {
43533
43671
  const program = new Command14();
43534
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.50.7");
43672
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.50.9");
43535
43673
  program.addCommand(createBootstrapCommand());
43536
43674
  program.addCommand(createSynthCommand());
43537
43675
  program.addCommand(createListCommand());