@go-to-k/cdkd 0.267.11 → 0.267.13

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
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { $ as WorkGraph, $t as NestedStackChildDirectDestroyError, A as slowCcOperationTimeoutMs, At as CFN_TEMPLATE_BODY_LIMIT, B as applyRoleArnIfSet, Bt as AwsClients, C as yellow, Ct as resolveAutoAssetStorage, D as ProviderRegistry, Dt as resolveStateBucketWithDefaultAndSource, E as clearOnUpdateRemoval, Et as resolveStateBucketWithDefault, F as refStateLookupFromResource, Ft as expectedOwnerParam, G as DagBuilder, Gt as CdkdError, H as describeTypeWithThrottleRetry, Ht as resetAwsClients, I as WAFv2WebACLProvider, It as AssemblyReader, J as S3StateBackend, Jt as LocalInvokeBuildError$1, K as TemplateParser, L as normalizeAwsTagsToCfn, Lt as processStackMessages, M as isTerminationProtectionPropagationError, Mt as MIGRATE_TMP_PREFIX, N as IntrinsicFunctionResolver, Nt as findLargeInlineResources, O as findActionableSilentDrops, Ot as resolveUseCdkBootstrapAssets, P as cfnRefValueFromPhysicalId, Pt as uploadCfnTemplate, Q as stringifyValue, Qt as MissingCdkCliError, R as resolveExplicitPhysicalId, S as red, St as resolveApp, T as collectInlinePolicyNamesManagedBySiblings, Tt as resolveSkipPrefix, U as withRetry, Ut as setAwsClients, V as DiffCalculator, Vt as getAwsClients, W as isRetryableTransientError, X as shouldRetainResource, Xt as LocalStartServiceError, Y as rebuildClientForBucketRegion, Yt as LocalMigrateError, Z as AssetPublisher, _ as formatResourceLine, _t as getDockerImageBySourceHash, a as DeploymentEventsStore, an as StackTerminationProtectionError, at as BOOTSTRAP_MARKER_PREFIX, b as gray, bt as getDefaultStateBucketName, c as replayFailedOperations, ct as parseBootstrapMarker, d as IMPLICIT_DELETE_DEPENDENCIES, dn as withErrorHandling, dt as buildDockerImage, en as PartialFailureError, et as buildAssetRedirectMap, f as computeImplicitDeleteEdges, ft as formatDockerLoginError, g as renderStatefulReason, gt as AssetManifestLoader, h as isStatefulRecreateTargetSync, ht as runDockerStreaming, i as DeploymentEventsReader, in as StackHasActiveImportsError, it as AssetModeResolver, j as disableInstanceApiTermination, jt as CFN_TEMPLATE_URL_LIMIT, k as CloudControlProvider, kt as warnDeprecatedNoPrefixCliFlag, l as replayRollback, lt as validateAssetBucketName, m as MULTI_REGION_RECREATE_BLOCKED_TYPES, mt as runDockerForeground, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as ResourceTimeoutError, nt as loadPublishableAssetManifest, o as planFailedOps, ot as ensureAssetStorage, p as extractDeploymentEventError, pt as getDockerCmd, q as LockManager, r as DeployEngine, rn as ResourceUpdateNotSupportedError, rt as rewriteTemplateAssetReferences, s as planRollback, st as getBootstrapMarkerKey, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as ProvisioningError, tt as createAssetRedirectResolver, u as withResourceDeadline, un as normalizeAwsError, ut as validateContainerRepoName, v as bold, vt as Synthesizer, w as IAMRoleProvider, wt as resolveCaptureObservedState, x as green, xt as getLegacyStateBucketName, y as cyan, yt as synthesisStatusMessage, z as assertRegionMatch, zt as resolveBucketRegion } from "./deploy-engine-ChJTdrUr.js";
2
+ import { $ as WorkGraph, $t as NestedStackChildDirectDestroyError, A as slowCcOperationTimeoutMs, At as CFN_TEMPLATE_BODY_LIMIT, B as applyRoleArnIfSet, Bt as AwsClients, C as yellow, Ct as resolveAutoAssetStorage, D as ProviderRegistry, Dt as resolveStateBucketWithDefaultAndSource, E as clearOnUpdateRemoval, Et as resolveStateBucketWithDefault, F as refStateLookupFromResource, Ft as expectedOwnerParam, G as DagBuilder, Gt as CdkdError, H as describeTypeWithThrottleRetry, Ht as resetAwsClients, I as WAFv2WebACLProvider, It as AssemblyReader, J as S3StateBackend, Jt as LocalInvokeBuildError$1, K as TemplateParser, L as normalizeAwsTagsToCfn, Lt as processStackMessages, M as isTerminationProtectionPropagationError, Mt as MIGRATE_TMP_PREFIX, N as IntrinsicFunctionResolver, Nt as findLargeInlineResources, O as findActionableSilentDrops, Ot as resolveUseCdkBootstrapAssets, P as cfnRefValueFromPhysicalId, Pt as uploadCfnTemplate, Q as stringifyValue, Qt as MissingCdkCliError, R as resolveExplicitPhysicalId, S as red, St as resolveApp, T as collectInlinePolicyNamesManagedBySiblings, Tt as resolveSkipPrefix, U as withRetry, Ut as setAwsClients, V as DiffCalculator, Vt as getAwsClients, W as isRetryableTransientError, X as shouldRetainResource, Xt as LocalStartServiceError, Y as rebuildClientForBucketRegion, Yt as LocalMigrateError, Z as AssetPublisher, _ as formatResourceLine, _t as getDockerImageBySourceHash, a as DeploymentEventsStore, an as StackTerminationProtectionError, at as BOOTSTRAP_MARKER_PREFIX, b as gray, bt as getDefaultStateBucketName, c as replayFailedOperations, ct as parseBootstrapMarker, d as IMPLICIT_DELETE_DEPENDENCIES, dn as withErrorHandling, dt as buildDockerImage, en as PartialFailureError, et as buildAssetRedirectMap, f as computeImplicitDeleteEdges, ft as formatDockerLoginError, g as renderStatefulReason, gt as AssetManifestLoader, h as isStatefulRecreateTargetSync, ht as runDockerStreaming, i as DeploymentEventsReader, in as StackHasActiveImportsError, it as AssetModeResolver, j as disableInstanceApiTermination, jt as CFN_TEMPLATE_URL_LIMIT, k as CloudControlProvider, kt as warnDeprecatedNoPrefixCliFlag, l as replayRollback, lt as validateAssetBucketName, m as MULTI_REGION_RECREATE_BLOCKED_TYPES, mt as runDockerForeground, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as ResourceTimeoutError, nt as loadPublishableAssetManifest, o as planFailedOps, ot as ensureAssetStorage, p as extractDeploymentEventError, pt as getDockerCmd, q as LockManager, r as DeployEngine, rn as ResourceUpdateNotSupportedError, rt as rewriteTemplateAssetReferences, s as planRollback, st as getBootstrapMarkerKey, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as ProvisioningError, tt as createAssetRedirectResolver, u as withResourceDeadline, un as normalizeAwsError, ut as validateContainerRepoName, v as bold, vt as Synthesizer, w as IAMRoleProvider, wt as resolveCaptureObservedState, x as green, xt as getLegacyStateBucketName, y as cyan, yt as synthesisStatusMessage, z as assertRegionMatch, zt as resolveBucketRegion } from "./deploy-engine-D1M5yCxb.js";
3
3
  import { a as getLiveRenderer, c as PATTERN_B_RESOURCE_TYPES, d as generateResourceNameWithFallback, f as withSkipPrefix, i as runStackBuffered, n as getLogger, o as PATTERN_B_NAME_OPTIONS, p as withStackName, s as PATTERN_B_NAME_PROPERTIES, u as generateResourceName } from "./logger-BYMEE-BS.js";
4
- import { t as ASGProvider } from "./asg-provider-CKDQjSTS.js";
4
+ import { t as ASGProvider } from "./asg-provider-CYG6Bl7y.js";
5
5
  import { AsyncLocalStorage } from "node:async_hooks";
6
6
  import { createHash, randomBytes, randomUUID } from "node:crypto";
7
7
  import { CopyObjectCommand, CreateBucketCommand, DeleteBucketAnalyticsConfigurationCommand, DeleteBucketCommand, DeleteBucketCorsCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
@@ -28060,7 +28060,7 @@ var ElastiCacheProvider = class {
28060
28060
  }
28061
28061
  async update(logicalId, physicalId, resourceType, properties, previousProperties) {
28062
28062
  switch (resourceType) {
28063
- case "AWS::ElastiCache::SubnetGroup": return this.updateSubnetGroup(logicalId, physicalId, resourceType, properties);
28063
+ case "AWS::ElastiCache::SubnetGroup": return this.updateSubnetGroup(logicalId, physicalId, resourceType, properties, previousProperties);
28064
28064
  case "AWS::ElastiCache::CacheCluster": return this.updateCacheCluster(logicalId, physicalId, resourceType, properties, previousProperties);
28065
28065
  default: throw new ProvisioningError(`Unsupported resource type: ${resourceType}`, resourceType, logicalId, physicalId);
28066
28066
  }
@@ -28094,12 +28094,12 @@ var ElastiCacheProvider = class {
28094
28094
  throw new ProvisioningError(`Failed to create CacheSubnetGroup ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, cacheSubnetGroupName, cause);
28095
28095
  }
28096
28096
  }
28097
- async updateSubnetGroup(logicalId, physicalId, resourceType, properties) {
28097
+ async updateSubnetGroup(logicalId, physicalId, resourceType, properties, previousProperties) {
28098
28098
  this.logger.debug(`Updating CacheSubnetGroup ${logicalId}: ${physicalId}`);
28099
28099
  try {
28100
28100
  await this.getClient().send(new ModifyCacheSubnetGroupCommand({
28101
28101
  CacheSubnetGroupName: physicalId,
28102
- CacheSubnetGroupDescription: properties["Description"] ?? properties["CacheSubnetGroupDescription"],
28102
+ CacheSubnetGroupDescription: clearOnUpdateRemoval(properties["Description"] ?? properties["CacheSubnetGroupDescription"], previousProperties["Description"] ?? previousProperties["CacheSubnetGroupDescription"], `Subnet group for ${logicalId}`),
28103
28103
  SubnetIds: properties["SubnetIds"]
28104
28104
  }));
28105
28105
  this.logger.debug(`Successfully updated CacheSubnetGroup ${logicalId}`);
@@ -28189,6 +28189,8 @@ var ElastiCacheProvider = class {
28189
28189
  try {
28190
28190
  const rawSgIds = properties["VpcSecurityGroupIds"];
28191
28191
  const sgIds = rawSgIds && rawSgIds.length > 0 ? rawSgIds : void 0;
28192
+ const notificationTopicArn = properties["NotificationTopicArn"];
28193
+ const notificationRemoved = notificationTopicArn === void 0 && previousProperties["NotificationTopicArn"] != null;
28192
28194
  await this.getClient().send(new ModifyCacheClusterCommand({
28193
28195
  CacheClusterId: physicalId,
28194
28196
  NumCacheNodes: properties["NumCacheNodes"] != null ? Number(properties["NumCacheNodes"]) : void 0,
@@ -28196,11 +28198,13 @@ var ElastiCacheProvider = class {
28196
28198
  CacheParameterGroupName: properties["CacheParameterGroupName"],
28197
28199
  EngineVersion: properties["EngineVersion"],
28198
28200
  PreferredMaintenanceWindow: properties["PreferredMaintenanceWindow"],
28199
- SnapshotRetentionLimit: properties["SnapshotRetentionLimit"] != null ? Number(properties["SnapshotRetentionLimit"]) : void 0,
28201
+ SnapshotRetentionLimit: clearOnUpdateRemoval(properties["SnapshotRetentionLimit"] != null ? Number(properties["SnapshotRetentionLimit"]) : void 0, previousProperties["SnapshotRetentionLimit"] != null ? Number(previousProperties["SnapshotRetentionLimit"]) : void 0, 0),
28200
28202
  SnapshotWindow: properties["SnapshotWindow"],
28201
- AutoMinorVersionUpgrade: properties["AutoMinorVersionUpgrade"],
28202
- NotificationTopicArn: properties["NotificationTopicArn"],
28203
- LogDeliveryConfigurations: properties["LogDeliveryConfigurations"],
28203
+ AutoMinorVersionUpgrade: clearOnUpdateRemoval(properties["AutoMinorVersionUpgrade"], previousProperties["AutoMinorVersionUpgrade"], true),
28204
+ NotificationTopicArn: notificationTopicArn,
28205
+ ...notificationRemoved && { NotificationTopicStatus: "inactive" },
28206
+ ...notificationTopicArn !== void 0 && { NotificationTopicStatus: "active" },
28207
+ LogDeliveryConfigurations: this.buildLogDeliveryConfigurationsForUpdate(properties["LogDeliveryConfigurations"], previousProperties["LogDeliveryConfigurations"]),
28204
28208
  IpDiscovery: properties["IpDiscovery"],
28205
28209
  ApplyImmediately: true
28206
28210
  }));
@@ -28246,6 +28250,30 @@ var ElastiCacheProvider = class {
28246
28250
  }
28247
28251
  }
28248
28252
  /**
28253
+ * Build the `LogDeliveryConfigurations` input for ModifyCacheCluster so a
28254
+ * log type REMOVED from the template is explicitly disabled (issue #1160).
28255
+ *
28256
+ * ModifyCacheCluster applies each request entry to ONLY its own LogType
28257
+ * (per-entry merge semantics), so both a whole-property removal and a
28258
+ * per-entry removal would silently keep the live delivery config. The
28259
+ * documented disable sentinel is `{ LogType, Enabled: false }`
28260
+ * (LogDeliveryConfigurationRequest doc: "Specify if log delivery is
28261
+ * enabled. Default true."). Kept / added entries pass through unchanged;
28262
+ * previously-configured log types missing from the new template get a
28263
+ * disable entry appended. Returns `undefined` when there is nothing to
28264
+ * send (no change).
28265
+ */
28266
+ buildLogDeliveryConfigurationsForUpdate(newConfigs, previousConfigs) {
28267
+ const kept = newConfigs ?? [];
28268
+ const keptLogTypes = new Set(kept.map((c) => c.LogType).filter((t) => t !== void 0));
28269
+ const disables = (previousConfigs ?? []).filter((c) => c.LogType !== void 0 && !keptLogTypes.has(c.LogType)).map((c) => ({
28270
+ LogType: c.LogType,
28271
+ Enabled: false
28272
+ }));
28273
+ const merged = [...kept, ...disables];
28274
+ return merged.length > 0 ? merged : void 0;
28275
+ }
28276
+ /**
28249
28277
  * Apply a diff between old and new CFn-shape Tags arrays via ElastiCache's
28250
28278
  * `AddTagsToResource` / `RemoveTagsFromResource` APIs (keyed by
28251
28279
  * `ResourceName=arn`).
@@ -28389,7 +28417,7 @@ var ElastiCacheProvider = class {
28389
28417
  if (cluster.SnapshotRetentionLimit !== void 0) result["SnapshotRetentionLimit"] = cluster.SnapshotRetentionLimit;
28390
28418
  if (cluster.SnapshotWindow !== void 0) result["SnapshotWindow"] = cluster.SnapshotWindow;
28391
28419
  if (cluster.AutoMinorVersionUpgrade !== void 0) result["AutoMinorVersionUpgrade"] = cluster.AutoMinorVersionUpgrade;
28392
- if (cluster.NotificationConfiguration?.TopicArn !== void 0) result["NotificationTopicArn"] = cluster.NotificationConfiguration.TopicArn;
28420
+ if (cluster.NotificationConfiguration?.TopicArn !== void 0 && cluster.NotificationConfiguration.TopicStatus !== "inactive") result["NotificationTopicArn"] = cluster.NotificationConfiguration.TopicArn;
28393
28421
  if (cluster.IpDiscovery !== void 0) result["IpDiscovery"] = cluster.IpDiscovery;
28394
28422
  if (cluster.NetworkType !== void 0) result["NetworkType"] = cluster.NetworkType;
28395
28423
  if (cluster.Engine === "redis" && cluster.TransitEncryptionEnabled !== void 0) result["TransitEncryptionEnabled"] = cluster.TransitEncryptionEnabled;
@@ -39363,21 +39391,83 @@ var DLMLifecyclePolicyProvider = class {
39363
39391
  * Map the CFn property shape to the SDK input shape (shared by create and
39364
39392
  * update — every field name is PascalCase-identical). `Tags` and
39365
39393
  * `DefaultPolicy` are intentionally NOT included: create wires them
39366
- * separately (update has neither parameter).
39394
+ * separately (update has neither parameter). `!= null` (not
39395
+ * `!== undefined`) so an explicit-null template value is treated as
39396
+ * absent instead of being passed to the SDK as `null` — matches
39397
+ * `buildRemovalResets`' null normalization.
39367
39398
  */
39368
39399
  toSdkFields(properties) {
39369
39400
  return {
39370
- ...properties["ExecutionRoleArn"] !== void 0 && { ExecutionRoleArn: properties["ExecutionRoleArn"] },
39371
- ...properties["Description"] !== void 0 && { Description: properties["Description"] },
39372
- ...properties["State"] !== void 0 && { State: properties["State"] },
39373
- ...properties["PolicyDetails"] !== void 0 && { PolicyDetails: properties["PolicyDetails"] },
39374
- ...properties["CreateInterval"] !== void 0 && { CreateInterval: properties["CreateInterval"] },
39375
- ...properties["RetainInterval"] !== void 0 && { RetainInterval: properties["RetainInterval"] },
39376
- ...properties["CopyTags"] !== void 0 && { CopyTags: properties["CopyTags"] },
39377
- ...properties["ExtendDeletion"] !== void 0 && { ExtendDeletion: properties["ExtendDeletion"] },
39378
- ...properties["CrossRegionCopyTargets"] !== void 0 && { CrossRegionCopyTargets: properties["CrossRegionCopyTargets"] },
39379
- ...properties["Exclusions"] !== void 0 && { Exclusions: properties["Exclusions"] }
39380
- };
39401
+ ...properties["ExecutionRoleArn"] != null && { ExecutionRoleArn: properties["ExecutionRoleArn"] },
39402
+ ...properties["Description"] != null && { Description: properties["Description"] },
39403
+ ...properties["State"] != null && { State: properties["State"] },
39404
+ ...properties["PolicyDetails"] != null && { PolicyDetails: properties["PolicyDetails"] },
39405
+ ...properties["CreateInterval"] != null && { CreateInterval: properties["CreateInterval"] },
39406
+ ...properties["RetainInterval"] != null && { RetainInterval: properties["RetainInterval"] },
39407
+ ...properties["CopyTags"] != null && { CopyTags: properties["CopyTags"] },
39408
+ ...properties["ExtendDeletion"] != null && { ExtendDeletion: properties["ExtendDeletion"] },
39409
+ ...properties["CrossRegionCopyTargets"] != null && { CrossRegionCopyTargets: properties["CrossRegionCopyTargets"] },
39410
+ ...properties["Exclusions"] != null && { Exclusions: properties["Exclusions"] }
39411
+ };
39412
+ }
39413
+ /**
39414
+ * Removal resets for the default-policy shorthand fields (issue #1160).
39415
+ *
39416
+ * UpdateLifecyclePolicy uses merge semantics (live-probed 2026-07-27: an
39417
+ * update carrying only PolicyId retains every live value), while CFn
39418
+ * resets a property removed from the template to its default. Each
39419
+ * shorthand field is routed through `clearOnUpdateRemoval` with its
39420
+ * documented default — all live-probed as accepted AND applied (the
39421
+ * service create-defaults match: a create omitting them reads back
39422
+ * 1 / 7 / false / false):
39423
+ * CreateInterval -> 1, RetainInterval -> 7, CopyTags -> false,
39424
+ * ExtendDeletion -> false, CrossRegionCopyTargets -> [].
39425
+ * Exclusions -> the per-DefaultPolicy explicit-empty shape:
39426
+ * VOLUME -> { ExcludeBootVolumes: false, ExcludeVolumeTypes: [],
39427
+ * ExcludeTags: [] }
39428
+ * INSTANCE -> { ExcludeTags: [] } (the volume-only sub-fields are
39429
+ * rejected on IMAGE_MANAGEMENT policies — live-probed
39430
+ * "ExcludeBootVolumes cannot be enabled for the
39431
+ * following policy type {IMAGE_MANAGEMENT}")
39432
+ * (A KEPT-but-partial Exclusions object needs no handling: the API
39433
+ * replaces the whole object — live-probed, a kept object with
39434
+ * ExcludeTags dropped reads back ExcludeTags: [] — so pass-through is
39435
+ * already CFn parity at the sub-field level.)
39436
+ * These fields only exist on default policies, so the resets can only
39437
+ * fire there (a standard policy never had them in previousProperties).
39438
+ * Deferred with rationale:
39439
+ * Description — UpdateLifecyclePolicy rejects '' (live-probed
39440
+ * InvalidRequestException: "The following parameter(s) are invalid:
39441
+ * Description") and documents no clear sentinel, so there is no
39442
+ * wire shape that resets it; pass-through (keep live value) is the
39443
+ * only expressible behavior.
39444
+ * State / ExecutionRoleArn / PolicyDetails — required-on-create
39445
+ * fields with no CFn default; removal is not a meaningful template
39446
+ * operation for them.
39447
+ */
39448
+ buildRemovalResets(properties, previousProperties) {
39449
+ const resets = {};
39450
+ const createInterval = clearOnUpdateRemoval(properties["CreateInterval"] != null ? Number(properties["CreateInterval"]) : void 0, previousProperties["CreateInterval"] != null ? Number(previousProperties["CreateInterval"]) : void 0, 1);
39451
+ if (createInterval !== void 0) resets.CreateInterval = createInterval;
39452
+ const retainInterval = clearOnUpdateRemoval(properties["RetainInterval"] != null ? Number(properties["RetainInterval"]) : void 0, previousProperties["RetainInterval"] != null ? Number(previousProperties["RetainInterval"]) : void 0, 7);
39453
+ if (retainInterval !== void 0) resets.RetainInterval = retainInterval;
39454
+ const copyTags = clearOnUpdateRemoval(properties["CopyTags"] ?? void 0, previousProperties["CopyTags"] ?? void 0, false);
39455
+ if (copyTags !== void 0) resets.CopyTags = copyTags;
39456
+ const extendDeletion = clearOnUpdateRemoval(properties["ExtendDeletion"] ?? void 0, previousProperties["ExtendDeletion"] ?? void 0, false);
39457
+ if (extendDeletion !== void 0) resets.ExtendDeletion = extendDeletion;
39458
+ const crossRegionCopyTargets = clearOnUpdateRemoval(properties["CrossRegionCopyTargets"] ?? void 0, previousProperties["CrossRegionCopyTargets"] ?? void 0, []);
39459
+ if (crossRegionCopyTargets !== void 0) resets.CrossRegionCopyTargets = crossRegionCopyTargets;
39460
+ const defaultPolicy = properties["DefaultPolicy"] ?? previousProperties["DefaultPolicy"];
39461
+ const exclusionsClear = defaultPolicy === "VOLUME" ? {
39462
+ ExcludeBootVolumes: false,
39463
+ ExcludeVolumeTypes: [],
39464
+ ExcludeTags: []
39465
+ } : defaultPolicy === "INSTANCE" ? { ExcludeTags: [] } : void 0;
39466
+ if (exclusionsClear !== void 0) {
39467
+ const exclusions = clearOnUpdateRemoval(properties["Exclusions"] ?? void 0, previousProperties["Exclusions"] ?? void 0, exclusionsClear);
39468
+ if (exclusions !== void 0) resets.Exclusions = exclusions;
39469
+ }
39470
+ return resets;
39381
39471
  }
39382
39472
  /** Fetch the policy ARN (`Fn::GetAtt Arn`) for a policy id. */
39383
39473
  async fetchPolicyArn(policyId) {
@@ -39416,7 +39506,8 @@ var DLMLifecyclePolicyProvider = class {
39416
39506
  try {
39417
39507
  await this.getClient().send(new UpdateLifecyclePolicyCommand({
39418
39508
  PolicyId: physicalId,
39419
- ...this.toSdkFields(properties)
39509
+ ...this.toSdkFields(properties),
39510
+ ...this.buildRemovalResets(properties, previousProperties)
39420
39511
  }));
39421
39512
  const newTags = this.cfnTagsToMap(properties["Tags"]) ?? {};
39422
39513
  const oldTags = this.cfnTagsToMap(previousProperties["Tags"]) ?? {};
@@ -61986,7 +62077,7 @@ function createMigrateCommand() {
61986
62077
  */
61987
62078
  function buildProgram() {
61988
62079
  const program = new Command();
61989
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.267.11");
62080
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.267.13");
61990
62081
  program.hook("preAction", (_thisCommand, actionCommand) => {
61991
62082
  const { profile } = actionCommand.optsWithGlobals();
61992
62083
  if (profile !== void 0) process.env["AWS_PROFILE"] = profile;