@go-to-k/cdkd 0.278.27 → 0.278.29

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 isThrottlingError, $t as setAwsClients, A as red, At as getLegacyStateBucketName, B as isTerminationProtectionPropagationError, Bt as CFN_TEMPLATE_BODY_LIMIT, C as isStatefulRecreateTargetSync, Ct as runDockerForeground, D as cyan, Dt as Synthesizer, E as bold, Et as getDockerImageBySourceHash, F as ProviderRegistry, Ft as resolveStateBucketWithDefault, G as normalizeAwsTagsToCfn, Gt as expectedOwnerParam, H as cfnRefValueFromPhysicalId, Ht as MIGRATE_TMP_PREFIX, I as findActionableSilentDrops, It as resolveStateBucketWithDefaultAndSource, J as applyRoleArnIfSet, K as resolveExplicitPhysicalId, Kt as AssemblyReader, L as CloudControlProvider, Lt as resolveUseCdkBootstrapAssets, M as IAMRoleProvider, Mt as resolveAutoAssetStorage, N as collectInlinePolicyNamesManagedBySiblings, Nt as resolveCaptureObservedState, O as gray, Ot as synthesisStatusMessage, P as clearOnUpdateRemoval, Pt as resolveSkipPrefix, Q as isRetryableTransientError, Qt as resetAwsClients, R as slowCcOperationTimeoutMs, Rt as stateBucketExistenceConfirmed, S as MULTI_REGION_RECREATE_BLOCKED_TYPES, Sn as withErrorHandling, St as getDockerCmd, T as formatResourceLine, Tt as AssetManifestLoader, U as refStateLookupFromResource, Ut as findLargeInlineResources, V as IntrinsicFunctionResolver, Vt as CFN_TEMPLATE_URL_LIMIT, W as WAFv2WebACLProvider, Wt as uploadCfnTemplate, X as describeTypeWithThrottleRetry, Xt as AwsClients, Y as DiffCalculator, Yt as resolveBucketRegion, Z as withRetry, Zt as getAwsClients, _ as createPreDeleteFinalSnapshot, _t as parseBootstrapMarker, a as DeploymentEventsStore, an as LocalInvokeBuildError$1, at as shouldRetainResource, b as unsupportedFinalSnapshotError, bt as buildDockerImage, c as replayFailedOperations, ct as WorkGraph, d as IMPLICIT_DELETE_DEPENDENCIES, dn as PartialFailureError, dt as loadPublishableAssetManifest, et as DagBuilder, f as computeImplicitDeleteEdges, fn as ProvisioningError, ft as rewriteTemplateAssetReferences, g as ccRoutedFinalSnapshotError, gn as StackTerminationProtectionError, gt as getBootstrapMarkerKey, h as buildFinalSnapshotIdentifier, hn as StackHasActiveImportsError, ht as ensureAssetStorage, i as DeploymentEventsReader, in as DeployCancelledError, it as rebuildClientForBucketRegion, j as yellow, jt as resolveApp, k as green, kt as getDefaultStateBucketName, l as replayRollback, ln as MissingCdkCliError, lt as buildAssetRedirectMap, m as PRE_DELETE_SNAPSHOT_TYPES, mn as ResourceUpdateNotSupportedError, mt as BOOTSTRAP_MARKER_PREFIX, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as LockManager, o as planFailedOps, on as LocalMigrateError, ot as AssetPublisher, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as ResourceTimeoutError, pt as AssetModeResolver, q as assertRegionMatch, qt as processStackMessages, r as DeployEngine, rt as S3StateBackend, s as planRollback, sn as LocalStartServiceError, st as stringifyValue, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as CdkdError, tt as TemplateParser, u as withResourceDeadline, un as NestedStackChildDirectDestroyError, ut as createAssetRedirectResolver, v as isFinalSnapshotError, vt as validateAssetBucketName, w as renderStatefulReason, wt as runDockerStreaming, x as extractDeploymentEventError, xn as normalizeAwsError, xt as formatDockerLoginError, y as refusesFinalSnapshot, yt as validateContainerRepoName, z as disableInstanceApiTermination, zt as warnDeprecatedNoPrefixCliFlag } from "./deploy-engine-0SZS30V4.js";
2
+ import { $ as withRetry, $t as getAwsClients, A as red, At as synthesisStatusMessage, B as isTerminationProtectionPropagationError, Bt as stateBucketExistenceConfirmed, C as isStatefulRecreateTargetSync, Cn as normalizeAwsError, Ct as formatDockerLoginError, D as cyan, Dt as AssetManifestLoader, E as bold, Et as runDockerStreaming, F as ProviderRegistry, Ft as resolveCaptureObservedState, G as normalizeAwsTagsToCfn, Gt as findLargeInlineResources, H as cfnRefValueFromPhysicalId, Ht as CFN_TEMPLATE_BODY_LIMIT, I as findActionableSilentDrops, It as resolveSkipPrefix, J as readConfigString, Jt as AssemblyReader, K as resolveExplicitPhysicalId, Kt as uploadCfnTemplate, L as CloudControlProvider, Lt as resolveStateBucketWithDefault, M as IAMRoleProvider, Mt as getLegacyStateBucketName, N as collectInlinePolicyNamesManagedBySiblings, Nt as resolveApp, O as gray, Ot as getDockerImageBySourceHash, P as clearOnUpdateRemoval, Pt as resolveAutoAssetStorage, Q as describeTypeWithThrottleRetry, Qt as AwsClients, R as slowCcOperationTimeoutMs, Rt as resolveStateBucketWithDefaultAndSource, S as MULTI_REGION_RECREATE_BLOCKED_TYPES, St as buildDockerImage, T as formatResourceLine, Tt as runDockerForeground, U as refStateLookupFromResource, Ut as CFN_TEMPLATE_URL_LIMIT, V as IntrinsicFunctionResolver, Vt as warnDeprecatedNoPrefixCliFlag, W as WAFv2WebACLProvider, Wt as MIGRATE_TMP_PREFIX, X as applyRoleArnIfSet, Y as requireConfigString, Yt as processStackMessages, Z as DiffCalculator, Zt as resolveBucketRegion, _ as createPreDeleteFinalSnapshot, _n as StackHasActiveImportsError, _t as ensureAssetStorage, a as DeploymentEventsStore, at as S3StateBackend, b as unsupportedFinalSnapshotError, bt as validateAssetBucketName, c as replayFailedOperations, cn as LocalMigrateError, ct as AssetPublisher, d as IMPLICIT_DELETE_DEPENDENCIES, dn as MissingCdkCliError, dt as buildAssetRedirectMap, en as resetAwsClients, et as isRetryableTransientError, f as computeImplicitDeleteEdges, fn as NestedStackChildDirectDestroyError, ft as createAssetRedirectResolver, g as ccRoutedFinalSnapshotError, gn as ResourceUpdateNotSupportedError, gt as BOOTSTRAP_MARKER_PREFIX, h as buildFinalSnapshotIdentifier, hn as ResourceTimeoutError, ht as AssetModeResolver, i as DeploymentEventsReader, it as LockManager, j as yellow, jt as getDefaultStateBucketName, k as green, kt as Synthesizer, l as replayRollback, ln as LocalStartServiceError, lt as stringifyValue, m as PRE_DELETE_SNAPSHOT_TYPES, mn as ProvisioningError, mt as rewriteTemplateAssetReferences, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as DagBuilder, o as planFailedOps, on as DeployCancelledError, ot as rebuildClientForBucketRegion, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as PartialFailureError, pt as loadPublishableAssetManifest, q as assertRegionMatch, qt as expectedOwnerParam, r as DeployEngine, rn as CdkdError, rt as TemplateParser, s as planRollback, sn as LocalInvokeBuildError$1, st as shouldRetainResource, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as setAwsClients, tt as isThrottlingError, u as withResourceDeadline, ut as WorkGraph, v as isFinalSnapshotError, vn as StackTerminationProtectionError, vt as getBootstrapMarkerKey, w as renderStatefulReason, wn as withErrorHandling, wt as getDockerCmd, x as extractDeploymentEventError, xt as validateContainerRepoName, y as refusesFinalSnapshot, yt as parseBootstrapMarker, z as disableInstanceApiTermination, zt as resolveUseCdkBootstrapAssets } from "./deploy-engine-B3AUwwq_.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-C2V8DwC0.js";
4
+ import { t as ASGProvider } from "./asg-provider-g1CP9a99.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, DeleteBucketEncryptionCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketOwnershipControlsCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketOwnershipControlsCommand, 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";
@@ -4936,7 +4936,7 @@ var S3BucketProvider = class S3BucketProvider {
4936
4936
  * Apply versioning configuration if specified
4937
4937
  */
4938
4938
  async applyVersioning(bucketName, versioningConfig) {
4939
- const status = versioningConfig["Status"] || "Suspended";
4939
+ const status = readConfigString(versioningConfig, "Status", "Suspended", "AWS::S3::Bucket VersioningConfiguration");
4940
4940
  await this.s3Client.send(new PutBucketVersioningCommand({
4941
4941
  Bucket: bucketName,
4942
4942
  VersioningConfiguration: { Status: status }
@@ -5045,7 +5045,7 @@ var S3BucketProvider = class S3BucketProvider {
5045
5045
  const rules = lifecycleConfig.Rules.map((rule) => {
5046
5046
  const sdkRule = {
5047
5047
  ID: rule["Id"],
5048
- Status: rule["Status"] || "Enabled",
5048
+ Status: readConfigString(rule, "Status", "Enabled", "AWS::S3::Bucket LifecycleConfiguration.Rules[]"),
5049
5049
  Prefix: useFilterForm ? void 0 : rule["Prefix"]
5050
5050
  };
5051
5051
  const expiration = rule["ExpirationInDays"] || rule["ExpirationDate"] || rule["Expiration"];
@@ -5168,7 +5168,8 @@ var S3BucketProvider = class S3BucketProvider {
5168
5168
  * SDK: PutBucketLogging with BucketLoggingStatus.LoggingEnabled
5169
5169
  */
5170
5170
  async applyLoggingConfiguration(bucketName, loggingConfig) {
5171
- if (!loggingConfig || !loggingConfig["DestinationBucketName"]) {
5171
+ const destinationBucket = readConfigString(loggingConfig, "DestinationBucketName", "", "AWS::S3::Bucket LoggingConfiguration");
5172
+ if (!loggingConfig || destinationBucket === "") {
5172
5173
  await this.s3Client.send(new PutBucketLoggingCommand({
5173
5174
  Bucket: bucketName,
5174
5175
  BucketLoggingStatus: {}
@@ -5179,8 +5180,8 @@ var S3BucketProvider = class S3BucketProvider {
5179
5180
  await this.s3Client.send(new PutBucketLoggingCommand({
5180
5181
  Bucket: bucketName,
5181
5182
  BucketLoggingStatus: { LoggingEnabled: {
5182
- TargetBucket: loggingConfig["DestinationBucketName"],
5183
- TargetPrefix: loggingConfig["LogFilePrefix"] || ""
5183
+ TargetBucket: destinationBucket,
5184
+ TargetPrefix: readConfigString(loggingConfig, "LogFilePrefix", "", "AWS::S3::Bucket LoggingConfiguration")
5184
5185
  } }
5185
5186
  }));
5186
5187
  this.logger.debug(`Applied logging configuration to bucket ${bucketName}`);
@@ -5358,11 +5359,11 @@ var S3BucketProvider = class S3BucketProvider {
5358
5359
  const dest = dataExport["Destination"];
5359
5360
  const s3Dest = dest?.["BucketAccountId"] || dest?.["BucketArn"] || dest?.["Format"] ? dest : dest?.["S3BucketDestination"];
5360
5361
  analyticsConfig.StorageClassAnalysis = { DataExport: {
5361
- OutputSchemaVersion: dataExport["OutputSchemaVersion"] || "V_1",
5362
+ OutputSchemaVersion: readConfigString(dataExport, "OutputSchemaVersion", "V_1", "AWS::S3::Bucket AnalyticsConfigurations[].StorageClassAnalysis.DataExport"),
5362
5363
  Destination: s3Dest ? { S3BucketDestination: {
5363
5364
  Bucket: s3Dest["BucketArn"] ?? s3Dest["Bucket"],
5364
5365
  BucketAccountId: s3Dest["BucketAccountId"],
5365
- Format: s3Dest["Format"] || "CSV",
5366
+ Format: readConfigString(s3Dest, "Format", "CSV", "AWS::S3::Bucket AnalyticsConfigurations[].StorageClassAnalysis.DataExport.Destination.S3BucketDestination"),
5366
5367
  Prefix: s3Dest["Prefix"]
5367
5368
  } } : void 0
5368
5369
  } };
@@ -5387,7 +5388,7 @@ var S3BucketProvider = class S3BucketProvider {
5387
5388
  const tierings = config["Tierings"];
5388
5389
  const itConfig = {
5389
5390
  Id: id,
5390
- Status: config["Status"] || "Enabled",
5391
+ Status: readConfigString(config, "Status", "Enabled", "AWS::S3::Bucket IntelligentTieringConfigurations[]"),
5391
5392
  Tierings: (tierings || []).map((t) => ({
5392
5393
  AccessTier: t["AccessTier"],
5393
5394
  Days: t["Days"]
@@ -5425,12 +5426,12 @@ var S3BucketProvider = class S3BucketProvider {
5425
5426
  const inventoryConfig = {
5426
5427
  Id: id,
5427
5428
  IsEnabled: config["Enabled"] ?? true,
5428
- IncludedObjectVersions: config["IncludedObjectVersions"] || "All",
5429
- Schedule: { Frequency: config["ScheduleFrequency"] ?? config["Schedule"]?.["Frequency"] ?? "Weekly" },
5429
+ IncludedObjectVersions: readConfigString(config, "IncludedObjectVersions", "All", "AWS::S3::Bucket InventoryConfigurations[]"),
5430
+ Schedule: { Frequency: config["ScheduleFrequency"] !== void 0 ? requireConfigString(config["ScheduleFrequency"], "Weekly", "AWS::S3::Bucket InventoryConfigurations[].ScheduleFrequency") : readConfigString(config["Schedule"], "Frequency", "Weekly", "AWS::S3::Bucket InventoryConfigurations[].Schedule") },
5430
5431
  Destination: { S3BucketDestination: s3Dest ? {
5431
5432
  Bucket: s3Dest["BucketArn"] ?? s3Dest["Bucket"],
5432
5433
  AccountId: s3Dest["BucketAccountId"],
5433
- Format: s3Dest["Format"] || "CSV",
5434
+ Format: readConfigString(s3Dest, "Format", "CSV", "AWS::S3::Bucket InventoryConfigurations[].Destination.S3BucketDestination"),
5434
5435
  Prefix: s3Dest["Prefix"]
5435
5436
  } : void 0 },
5436
5437
  OptionalFields: config["OptionalFields"],
@@ -5462,7 +5463,7 @@ var S3BucketProvider = class S3BucketProvider {
5462
5463
  const dest = rule["Destination"];
5463
5464
  const sdkRule = {
5464
5465
  ID: rule["Id"],
5465
- Status: rule["Status"] || "Enabled",
5466
+ Status: readConfigString(rule, "Status", "Enabled", "AWS::S3::Bucket ReplicationConfiguration.Rules[]"),
5466
5467
  Priority: rule["Priority"],
5467
5468
  Destination: {
5468
5469
  Bucket: dest["Bucket"],
@@ -5539,7 +5540,7 @@ var S3BucketProvider = class S3BucketProvider {
5539
5540
  async applyConfiguration(bucketName, properties, options = {}) {
5540
5541
  const { skipTags = false, skipDiffManaged = false } = options;
5541
5542
  const versioningConfig = properties["VersioningConfiguration"];
5542
- if (!skipDiffManaged && versioningConfig) await this.applyVersioning(bucketName, versioningConfig);
5543
+ if (!skipDiffManaged && versioningConfig != null) await this.applyVersioning(bucketName, versioningConfig);
5543
5544
  const tags = properties["Tags"];
5544
5545
  if (!skipTags && tags && Array.isArray(tags) && tags.length > 0) await this.applyTags(bucketName, tags);
5545
5546
  const ownershipControls = properties["OwnershipControls"];
@@ -5594,10 +5595,10 @@ var S3BucketProvider = class S3BucketProvider {
5594
5595
  * declares the config.
5595
5596
  *
5596
5597
  * NOTE this helper does NOT cover `VersioningConfiguration` (it has no list
5597
- * key), and that property is NOT malformed-shape-refused anywhere: a
5598
- * malformed value there still resolves to 'Suspended', matching `main`.
5599
- * That pre-existing gap is tracked in issue #1471 — see the note in
5600
- * `applySubConfigDiffs` for why guarding it is not as simple as it looks.
5598
+ * key). That property is malformed-shape-refused separately, by
5599
+ * `readConfigString` in `applyVersioning` + `applySubConfigDiffs`
5600
+ * (issue #1471) — same outcome, different mechanism, because a versioning
5601
+ * block has an inner FIELD to validate rather than a list to measure.
5601
5602
  */
5602
5603
  static emptyListConfigToUndefined(config, listKey) {
5603
5604
  if (config === void 0 || config === null) return void 0;
@@ -5672,7 +5673,7 @@ var S3BucketProvider = class S3BucketProvider {
5672
5673
  const previousVersioning = previousProperties["VersioningConfiguration"];
5673
5674
  const nextVersioning = properties["VersioningConfiguration"];
5674
5675
  const versioningChanged = JSON.stringify(previousVersioning ?? null) !== JSON.stringify(nextVersioning ?? null);
5675
- const desiredVersioningStatus = nextVersioning == null ? "Suspended" : nextVersioning["Status"] || "Suspended";
5676
+ const desiredVersioningStatus = readConfigString(nextVersioning, "Status", "Suspended", "AWS::S3::Bucket VersioningConfiguration");
5676
5677
  if (versioningChanged && nextVersioning != null && desiredVersioningStatus !== "Suspended") await this.applyVersioning(bucketName, nextVersioning);
5677
5678
  await this.diffSubConfig(bucketName, S3BucketProvider.emptyListConfigToUndefined(previousProperties["OwnershipControls"], "Rules"), S3BucketProvider.emptyListConfigToUndefined(properties["OwnershipControls"], "Rules"), async (cfg) => this.applyOwnershipControls(bucketName, cfg), async () => {
5678
5679
  await this.s3Client.send(new DeleteBucketOwnershipControlsCommand({ Bucket: bucketName }));
@@ -5763,7 +5764,7 @@ var S3BucketProvider = class S3BucketProvider {
5763
5764
  const lifecycleConfig = properties["LifecycleConfiguration"];
5764
5765
  if (lifecycleConfig?.Rules && Array.isArray(lifecycleConfig.Rules) && lifecycleConfig.Rules.length > 0) await this.applyLifecycleConfiguration(bucketName, lifecycleConfig);
5765
5766
  const loggingConfig = properties["LoggingConfiguration"];
5766
- if (loggingConfig?.["DestinationBucketName"]) await this.applyLoggingConfiguration(bucketName, loggingConfig);
5767
+ if (readConfigString(loggingConfig, "DestinationBucketName", "", "AWS::S3::Bucket LoggingConfiguration") !== "") await this.applyLoggingConfiguration(bucketName, loggingConfig);
5767
5768
  const websiteConfig = properties["WebsiteConfiguration"];
5768
5769
  if (websiteConfig) await this.applyWebsiteConfiguration(bucketName, websiteConfig);
5769
5770
  const accelerateConfig = properties["AccelerateConfiguration"];
@@ -15276,7 +15277,7 @@ var SecretsManagerSecretProvider = class {
15276
15277
  const excludeLowercase = config["ExcludeLowercase"];
15277
15278
  const excludeNumbers = config["ExcludeNumbers"];
15278
15279
  const excludePunctuation = config["ExcludePunctuation"];
15279
- const excludeCharacters = config["ExcludeCharacters"] || "";
15280
+ const excludeCharacters = readConfigString(config, "ExcludeCharacters", "", "AWS::SecretsManager::Secret GenerateSecretString");
15280
15281
  let chars = "";
15281
15282
  if (!excludeUppercase) chars += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
15282
15283
  if (!excludeLowercase) chars += "abcdefghijklmnopqrstuvwxyz";
@@ -36120,7 +36121,8 @@ var KinesisStreamProvider = class {
36120
36121
  this.logger.debug(`Creating Kinesis stream ${logicalId}`);
36121
36122
  const streamName = properties["Name"] || generateResourceName(logicalId, { maxLength: 128 });
36122
36123
  try {
36123
- const streamMode = properties["StreamModeDetails"]?.["StreamMode"] || "PROVISIONED";
36124
+ const streamModeDetails = properties["StreamModeDetails"];
36125
+ const streamMode = readConfigString(streamModeDetails, "StreamMode", "PROVISIONED", "AWS::Kinesis::Stream StreamModeDetails");
36124
36126
  const shardCount = streamMode === "PROVISIONED" ? Number(properties["ShardCount"] ?? 1) : void 0;
36125
36127
  await this.getClient().send(new CreateStreamCommand({
36126
36128
  StreamName: streamName,
@@ -36184,7 +36186,8 @@ var KinesisStreamProvider = class {
36184
36186
  async update(logicalId, physicalId, resourceType, properties, previousProperties) {
36185
36187
  this.logger.debug(`Updating Kinesis stream ${logicalId}: ${physicalId}`);
36186
36188
  try {
36187
- const streamMode = properties["StreamModeDetails"]?.["StreamMode"] || "PROVISIONED";
36189
+ const streamModeDetails = properties["StreamModeDetails"];
36190
+ const streamMode = readConfigString(streamModeDetails, "StreamMode", "PROVISIONED", "AWS::Kinesis::Stream StreamModeDetails");
36188
36191
  const oldStreamMode = previousProperties["StreamModeDetails"]?.["StreamMode"] || "PROVISIONED";
36189
36192
  const modeChanged = oldStreamMode !== streamMode;
36190
36193
  if (modeChanged) {
@@ -43487,7 +43490,7 @@ var S3DirectoryBucketProvider = class {
43487
43490
  */
43488
43491
  async create(logicalId, resourceType, properties) {
43489
43492
  this.logger.debug(`Creating S3 Express Directory Bucket ${logicalId}`);
43490
- const dataRedundancy = properties["DataRedundancy"] || "SingleAvailabilityZone";
43493
+ const dataRedundancy = requireConfigString(properties["DataRedundancy"], "SingleAvailabilityZone", "AWS::S3Express::DirectoryBucket DataRedundancy");
43491
43494
  const azName = properties["LocationName"]?.replace(/--x-s3$/, "") || "us-east-1a";
43492
43495
  const azId = await this.getAzId(azName);
43493
43496
  let bucketName = properties["BucketName"];
@@ -65963,7 +65966,7 @@ function createMigrateCommand() {
65963
65966
  */
65964
65967
  function buildProgram() {
65965
65968
  const program = new Command();
65966
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.27");
65969
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.29");
65967
65970
  program.hook("preAction", (_thisCommand, actionCommand) => {
65968
65971
  const { profile } = actionCommand.optsWithGlobals();
65969
65972
  if (profile !== void 0) process.env["AWS_PROFILE"] = profile;