@go-to-k/cdkd 0.278.34 → 0.278.36

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 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-Dp2u4Ktr.js";
2
+ import { $ as describeTypeWithThrottleRetry, $t as AwsClients, A as red, At as Synthesizer, B as isTerminationProtectionPropagationError, Bt as resolveUseCdkBootstrapAssets, C as isStatefulRecreateTargetSync, Ct as buildDockerImage, D as cyan, Dt as runDockerStreaming, E as bold, Et as runDockerForeground, F as ProviderRegistry, Ft as resolveAutoAssetStorage, G as normalizeAwsTagsToCfn, Gt as MIGRATE_TMP_PREFIX, H as cfnRefValueFromPhysicalId, Ht as warnDeprecatedNoPrefixCliFlag, I as findActionableSilentDrops, It as resolveCaptureObservedState, J as readConfigString, Jt as expectedOwnerParam, K as resolveExplicitPhysicalId, Kt as findLargeInlineResources, L as CloudControlProvider, Lt as resolveSkipPrefix, M as IAMRoleProvider, Mt as getDefaultStateBucketName, N as collectInlinePolicyNamesManagedBySiblings, Nt as getLegacyStateBucketName, O as gray, Ot as AssetManifestLoader, P as clearOnUpdateRemoval, Pt as resolveApp, Q as DiffCalculator, Qt as resolveBucketRegion, R as slowCcOperationTimeoutMs, Rt as resolveStateBucketWithDefault, S as MULTI_REGION_RECREATE_BLOCKED_TYPES, St as validateContainerRepoName, T as formatResourceLine, Tn as withErrorHandling, Tt as getDockerCmd, U as refStateLookupFromResource, Ut as CFN_TEMPLATE_BODY_LIMIT, V as IntrinsicFunctionResolver, Vt as stateBucketExistenceConfirmed, W as WAFv2WebACLProvider, Wt as CFN_TEMPLATE_URL_LIMIT, X as requireConfigString, Xt as processStackMessages, Y as requireConfigArray, Yt as AssemblyReader, Z as applyRoleArnIfSet, _ as createPreDeleteFinalSnapshot, _n as ResourceUpdateNotSupportedError, _t as BOOTSTRAP_MARKER_PREFIX, a as DeploymentEventsStore, at as LockManager, b as unsupportedFinalSnapshotError, bt as parseBootstrapMarker, c as replayFailedOperations, cn as LocalInvokeBuildError$1, ct as shouldRetainResource, d as IMPLICIT_DELETE_DEPENDENCIES, dt as WorkGraph, en as getAwsClients, et as withRetry, f as computeImplicitDeleteEdges, fn as MissingCdkCliError, ft as buildAssetRedirectMap, g as ccRoutedFinalSnapshotError, gn as ResourceTimeoutError, gt as AssetModeResolver, h as buildFinalSnapshotIdentifier, hn as ProvisioningError, ht as rewriteTemplateAssetReferences, i as DeploymentEventsReader, in as CdkdError, it as TemplateParser, j as yellow, jt as synthesisStatusMessage, k as green, kt as getDockerImageBySourceHash, l as replayRollback, ln as LocalMigrateError, lt as AssetPublisher, m as PRE_DELETE_SNAPSHOT_TYPES, mn as PartialFailureError, mt as loadPublishableAssetManifest, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as setAwsClients, nt as isThrottlingError, o as planFailedOps, ot as S3StateBackend, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as NestedStackChildDirectDestroyError, pt as createAssetRedirectResolver, q as assertRegionMatch, qt as uploadCfnTemplate, r as DeployEngine, rt as DagBuilder, s as planRollback, sn as DeployCancelledError, st as rebuildClientForBucketRegion, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as resetAwsClients, tt as isRetryableTransientError, u as withResourceDeadline, un as LocalStartServiceError, ut as stringifyValue, v as isFinalSnapshotError, vn as StackHasActiveImportsError, vt as ensureAssetStorage, w as renderStatefulReason, wn as normalizeAwsError, wt as formatDockerLoginError, x as extractDeploymentEventError, xt as validateAssetBucketName, y as refusesFinalSnapshot, yn as StackTerminationProtectionError, yt as getBootstrapMarkerKey, z as disableInstanceApiTermination, zt as resolveStateBucketWithDefaultAndSource } from "./deploy-engine-iHGY-Q_U.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-Cta08VYI.js";
4
+ import { t as ASGProvider } from "./asg-provider-5hYG8VHd.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";
@@ -66,7 +66,8 @@ import { CodeCommitClient, CreateCommitCommand, CreateRepositoryCommand as Creat
66
66
  import AdmZip from "adm-zip";
67
67
  import { CreateLifecyclePolicyCommand, DLMClient, DeleteLifecyclePolicyCommand as DeleteLifecyclePolicyCommand$1, GetLifecyclePolicyCommand as GetLifecyclePolicyCommand$1, ResourceNotFoundException as ResourceNotFoundException$14, TagResourceCommand as TagResourceCommand$21, UntagResourceCommand as UntagResourceCommand$21, UpdateLifecyclePolicyCommand } from "@aws-sdk/client-dlm";
68
68
  import { CreateVectorBucketCommand, DeleteIndexCommand, DeleteVectorBucketCommand, GetVectorBucketCommand, ListIndexesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$17, S3VectorsClient, TagResourceCommand as TagResourceCommand$22, UntagResourceCommand as UntagResourceCommand$22 } from "@aws-sdk/client-s3vectors";
69
- import { CreateNamespaceCommand, CreateTableBucketCommand, CreateTableCommand as CreateTableCommand$2, DeleteNamespaceCommand as DeleteNamespaceCommand$1, DeleteTableBucketCommand, DeleteTableCommand as DeleteTableCommand$2, GetTableBucketCommand, GetTableCommand as GetTableCommand$1, ListNamespacesCommand as ListNamespacesCommand$1, ListTableBucketsCommand, ListTablesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$18, NotFoundException as NotFoundException$6, S3TablesClient, TagResourceCommand as TagResourceCommand$23, UntagResourceCommand as UntagResourceCommand$23 } from "@aws-sdk/client-s3tables";
69
+ import { ListTagsForResourceCommand as ListTagsForResourceCommand$18, S3ControlClient, TagResourceCommand as TagResourceCommand$23, UntagResourceCommand as UntagResourceCommand$23 } from "@aws-sdk/client-s3-control";
70
+ import { CreateNamespaceCommand, CreateTableBucketCommand, CreateTableCommand as CreateTableCommand$2, DeleteNamespaceCommand as DeleteNamespaceCommand$1, DeleteTableBucketCommand, DeleteTableCommand as DeleteTableCommand$2, GetTableBucketCommand, GetTableCommand as GetTableCommand$1, ListNamespacesCommand as ListNamespacesCommand$1, ListTableBucketsCommand, ListTablesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$19, NotFoundException as NotFoundException$6, S3TablesClient, TagResourceCommand as TagResourceCommand$24, UntagResourceCommand as UntagResourceCommand$24 } from "@aws-sdk/client-s3tables";
70
71
  import { Document, Pair, Scalar, YAMLMap, YAMLSeq, parse as parse$1, stringify } from "yaml";
71
72
  import { createLocalStartAgentCoreCommand, createLocalStartCloudFrontCommand, createLocalStateProvider, getEmbedConfig, isCfnFlagPresent, listTargets, rejectExplicitCfnStackWithMultipleStacks, resolveCfnFallbackRegion, setEmbedConfig, substituteAgainstState, substituteAgainstStateAsync, substituteEnvVarsFromState, substituteEnvVarsFromStateAsync } from "cdk-local";
72
73
  import { A2A_CONTAINER_PORT, A2A_PATH, AGENTCORE_A2A_PROTOCOL, AGENTCORE_AGUI_PROTOCOL, AGENTCORE_MCP_PROTOCOL, ConnectionRegistry, EcsTaskResolutionError, HOST_GATEWAY_MIN_VERSION, LocalInvokeBuildError, MCP_CONTAINER_PORT, MCP_PATH, a2aInvokeOnce, addAlbSpecificOptions, addCommonEcsServiceOptions, addStartServiceSpecificOptions, albStrategy, architectureToPlatform, attachAuthorizers, attachStageContext, availableApiIdentifiers, bufferToBody, buildAgentCoreCodeImage, buildCognitoJwksUrl, buildConnectEvent, buildContainerImage, buildCorsConfigByApiId, buildCorsConfigFromCloudFrontChain, buildDisconnectEvent, buildJwksUrlFromIssuer, buildMessageEvent, buildMgmtEndpointEnvUrl, buildStageMap, classifySourceChange, createAuthorizerCache, createFileWatcher, createFileWatcher as createFileWatcher$1, createJwksCache, createWatchPredicates, defaultCredentialsLoader, derivePseudoParametersFromRegion, discoverRoutes, discoverWebSocketApis, downloadAndExtractS3Bundle, filterRoutesByApiIdentifier, groupRoutesByServer, handleConnectionsRequest, invokeAgentCore, invokeAgentCoreWs, materializeLayerFromArn, mcpInvokeOnce, parseConnectionsPath, parseSelectionExpressionPath, pickAgentCoreCandidateStack, pickAgentCoreCandidateStack as pickAgentCoreCandidateStack$1, probeHostGatewaySupport, readMtlsMaterialsFromDisk, resolveAgentCoreTarget, resolveEnvVars, resolveHostGatewayExtraHosts, resolveRuntimeCodeMountPath, resolveRuntimeFileExtension, resolveRuntimeImage, resolveSingleTarget, resolveWatchConfig, runEcsServiceEmulator, signAgentCoreInvocation, startApiServer, substituteImagePlaceholders, tryResolveImageFnJoin, verifyJwtViaDiscovery, waitForAgentCorePing } from "cdk-local/internal";
@@ -9689,7 +9690,7 @@ var LambdaUrlProvider = class {
9689
9690
  this.logger.debug(`Creating Lambda URL ${logicalId}`);
9690
9691
  const targetFunctionArn = properties["TargetFunctionArn"];
9691
9692
  if (!targetFunctionArn) throw new ProvisioningError(`TargetFunctionArn is required for Lambda URL ${logicalId}`, resourceType, logicalId);
9692
- const authType = properties["AuthType"] || "NONE";
9693
+ const authType = requireConfigString(properties["AuthType"], "NONE", "AWS::Lambda::Url AuthType");
9693
9694
  try {
9694
9695
  const cors = properties["Cors"];
9695
9696
  const createParams = {
@@ -9733,7 +9734,7 @@ var LambdaUrlProvider = class {
9733
9734
  };
9734
9735
  const updateParams = {
9735
9736
  FunctionName: physicalId,
9736
- AuthType: properties["AuthType"] || "NONE"
9737
+ AuthType: requireConfigString(properties["AuthType"], "NONE", "AWS::Lambda::Url AuthType")
9737
9738
  };
9738
9739
  const invokeMode = clearOnUpdateRemoval(properties["InvokeMode"], previousProperties["InvokeMode"], "BUFFERED");
9739
9740
  if (invokeMode !== void 0) updateParams.InvokeMode = invokeMode;
@@ -12317,11 +12318,18 @@ var DynamoDBGlobalTableProvider = class {
12317
12318
  if (billingMode === "PROVISIONED") createParams.ProvisionedThroughput = derivePerCallProvisionedThroughput(properties, currentRegion);
12318
12319
  const streamSpecInput = properties["StreamSpecification"];
12319
12320
  const needsStream = replicas.some((r) => r["Region"] !== currentRegion) || replicas.length > 1;
12320
- if (streamSpecInput) createParams.StreamSpecification = {
12321
- StreamEnabled: true,
12322
- StreamViewType: streamSpecInput["StreamViewType"] ?? "NEW_AND_OLD_IMAGES"
12323
- };
12324
- else if (needsStream) {
12321
+ if (streamSpecInput != null) {
12322
+ let streamViewType;
12323
+ try {
12324
+ streamViewType = readConfigString(streamSpecInput, "StreamViewType", "NEW_AND_OLD_IMAGES", "AWS::DynamoDB::GlobalTable StreamSpecification");
12325
+ } catch (error) {
12326
+ throw new ProvisioningError(error instanceof Error ? error.message : String(error), resourceType, logicalId, void 0, error instanceof Error ? error : void 0);
12327
+ }
12328
+ createParams.StreamSpecification = {
12329
+ StreamEnabled: true,
12330
+ StreamViewType: streamViewType
12331
+ };
12332
+ } else if (needsStream) {
12325
12333
  this.logger.info(`Auto-enabling streams (NEW_AND_OLD_IMAGES) on ${logicalId} — required for cross-region replication`);
12326
12334
  createParams.StreamSpecification = {
12327
12335
  StreamEnabled: true,
@@ -12577,7 +12585,7 @@ var DynamoDBGlobalTableProvider = class {
12577
12585
  if (properties["StreamSpecification"] !== void 0 && !deepEqual$1(properties["StreamSpecification"], previousProperties["StreamSpecification"])) {
12578
12586
  flatUpdate.StreamSpecification = {
12579
12587
  StreamEnabled: true,
12580
- StreamViewType: properties["StreamSpecification"]["StreamViewType"]
12588
+ StreamViewType: readConfigString(properties["StreamSpecification"], "StreamViewType", "NEW_AND_OLD_IMAGES", "AWS::DynamoDB::GlobalTable StreamSpecification")
12581
12589
  };
12582
12590
  flatChanged = true;
12583
12591
  }
@@ -21934,8 +21942,9 @@ var CloudFrontOAIProvider = class {
21934
21942
  */
21935
21943
  async create(logicalId, resourceType, properties) {
21936
21944
  this.logger.debug(`Creating CloudFront OAI ${logicalId}`);
21937
- const comment = properties["CloudFrontOriginAccessIdentityConfig"]?.["Comment"] ?? "";
21945
+ const config = properties["CloudFrontOriginAccessIdentityConfig"];
21938
21946
  try {
21947
+ const comment = readConfigString(config, "Comment", "", "AWS::CloudFront::CloudFrontOriginAccessIdentity CloudFrontOriginAccessIdentityConfig");
21939
21948
  const oai = (await this.cloudFrontClient.send(new CreateCloudFrontOriginAccessIdentityCommand({ CloudFrontOriginAccessIdentityConfig: {
21940
21949
  CallerReference: logicalId,
21941
21950
  Comment: comment
@@ -21970,8 +21979,9 @@ var CloudFrontOAIProvider = class {
21970
21979
  */
21971
21980
  async update(logicalId, physicalId, resourceType, properties, _previousProperties) {
21972
21981
  this.logger.debug(`Updating CloudFront OAI ${logicalId}: ${physicalId}`);
21973
- const comment = properties["CloudFrontOriginAccessIdentityConfig"]?.["Comment"] ?? "";
21982
+ const config = properties["CloudFrontOriginAccessIdentityConfig"];
21974
21983
  try {
21984
+ const comment = readConfigString(config, "Comment", "", "AWS::CloudFront::CloudFrontOriginAccessIdentity CloudFrontOriginAccessIdentityConfig");
21975
21985
  const getResponse = await this.cloudFrontClient.send(new GetCloudFrontOriginAccessIdentityCommand({ Id: physicalId }));
21976
21986
  const etag = getResponse.ETag;
21977
21987
  if (!etag) throw new Error("GetCloudFrontOriginAccessIdentity did not return ETag");
@@ -25035,7 +25045,12 @@ var ECSProvider = class {
25035
25045
  const newServiceName = properties["ServiceName"];
25036
25046
  const oldServiceName = previousProperties["ServiceName"];
25037
25047
  if (newServiceName && oldServiceName && newServiceName !== oldServiceName) throw new ProvisioningError(`Cannot update ServiceName for ECS service ${logicalId} (immutable property, requires replacement)`, resourceType, logicalId, physicalId);
25038
- const deploymentControllerType = properties["DeploymentController"]?.["Type"] ?? "ECS";
25048
+ let deploymentControllerType;
25049
+ try {
25050
+ deploymentControllerType = readConfigString(properties["DeploymentController"], "Type", "ECS", "AWS::ECS::Service DeploymentController");
25051
+ } catch (error) {
25052
+ throw new ProvisioningError(error instanceof Error ? error.message : String(error), resourceType, logicalId, physicalId, error instanceof Error ? error : void 0);
25053
+ }
25039
25054
  const isEcsController = deploymentControllerType === "ECS";
25040
25055
  const loadBalancersChanged = JSON.stringify(previousProperties["LoadBalancers"] ?? null) !== JSON.stringify(properties["LoadBalancers"] ?? null);
25041
25056
  const serviceRegistriesChanged = JSON.stringify(previousProperties["ServiceRegistries"] ?? null) !== JSON.stringify(properties["ServiceRegistries"] ?? null);
@@ -29919,13 +29934,14 @@ var Route53Provider = class {
29919
29934
  if (!name) throw new ProvisioningError(`Name is required for hosted zone ${logicalId}`, resourceType, logicalId);
29920
29935
  try {
29921
29936
  const hostedZoneConfig = properties["HostedZoneConfig"];
29937
+ const createComment = readConfigString(hostedZoneConfig, "Comment", "", "AWS::Route53::HostedZone HostedZoneConfig");
29922
29938
  const vpcs = properties["VPCs"];
29923
29939
  const firstVpc = vpcs && vpcs.length > 0 ? vpcs[0] : void 0;
29924
29940
  const response = await this.getClient().send(new CreateHostedZoneCommand({
29925
29941
  Name: name,
29926
29942
  CallerReference: `${logicalId}-${Date.now()}`,
29927
- ...hostedZoneConfig && hostedZoneConfig["Comment"] ? { HostedZoneConfig: {
29928
- Comment: hostedZoneConfig["Comment"],
29943
+ ...createComment !== "" ? { HostedZoneConfig: {
29944
+ Comment: createComment,
29929
29945
  ...firstVpc ? { PrivateZone: true } : {}
29930
29946
  } } : firstVpc ? { HostedZoneConfig: { PrivateZone: true } } : {},
29931
29947
  ...firstVpc ? { VPC: {
@@ -29983,7 +29999,8 @@ var Route53Provider = class {
29983
29999
  async updateHostedZone(logicalId, physicalId, resourceType, properties, previousProperties) {
29984
30000
  this.logger.debug(`Updating Route 53 hosted zone ${logicalId}: ${physicalId}`);
29985
30001
  try {
29986
- const comment = properties["HostedZoneConfig"]?.["Comment"] ?? "";
30002
+ const hostedZoneConfig = properties["HostedZoneConfig"];
30003
+ const comment = readConfigString(hostedZoneConfig, "Comment", "", "AWS::Route53::HostedZone HostedZoneConfig");
29987
30004
  await this.getClient().send(new UpdateHostedZoneCommentCommand({
29988
30005
  Id: physicalId,
29989
30006
  Comment: comment
@@ -42382,8 +42399,8 @@ var CodeBuildProvider = class {
42382
42399
  * object literal returned against a declared type IS excess-property checked,
42383
42400
  * which turns each member name into a compile-time fact (issue #1386).
42384
42401
  */
42385
- mapSource(source) {
42386
- if (!source) return { type: "NO_SOURCE" };
42402
+ mapSource(source, containerPath) {
42403
+ if (source == null) return { type: "NO_SOURCE" };
42387
42404
  let buildspec;
42388
42405
  if (source["BuildSpec"] !== void 0) {
42389
42406
  const bs = source["BuildSpec"];
@@ -42393,7 +42410,7 @@ var CodeBuildProvider = class {
42393
42410
  const cfnGitSubmodules = source["GitSubmodulesConfig"];
42394
42411
  const cfnBuildStatus = source["BuildStatusConfig"];
42395
42412
  return {
42396
- type: source["Type"] ?? "NO_SOURCE",
42413
+ type: readConfigString(source, "Type", "NO_SOURCE", containerPath),
42397
42414
  buildspec,
42398
42415
  location: source["Location"],
42399
42416
  gitCloneDepth: source["GitCloneDepth"],
@@ -42411,10 +42428,10 @@ var CodeBuildProvider = class {
42411
42428
  } : void 0
42412
42429
  };
42413
42430
  }
42414
- mapArtifacts(artifacts) {
42415
- if (!artifacts) return { type: "NO_ARTIFACTS" };
42431
+ mapArtifacts(artifacts, containerPath) {
42432
+ if (artifacts == null) return { type: "NO_ARTIFACTS" };
42416
42433
  return {
42417
- type: artifacts["Type"] ?? "NO_ARTIFACTS",
42434
+ type: readConfigString(artifacts, "Type", "NO_ARTIFACTS", containerPath),
42418
42435
  location: artifacts["Location"],
42419
42436
  path: artifacts["Path"],
42420
42437
  name: artifacts["Name"],
@@ -42472,9 +42489,9 @@ var CodeBuildProvider = class {
42472
42489
  };
42473
42490
  }
42474
42491
  const cfnSecondarySources = properties["SecondarySources"];
42475
- const secondarySources = cfnSecondarySources ? cfnSecondarySources.map((s) => this.mapSource(s)) : void 0;
42492
+ const secondarySources = cfnSecondarySources == null ? void 0 : requireConfigArray(cfnSecondarySources, "AWS::CodeBuild::Project SecondarySources").map((s) => this.mapSource(s, "AWS::CodeBuild::Project SecondarySources[]"));
42476
42493
  const cfnSecondaryArtifacts = properties["SecondaryArtifacts"];
42477
- const secondaryArtifacts = cfnSecondaryArtifacts ? cfnSecondaryArtifacts.map((a) => this.mapArtifacts(a)) : void 0;
42494
+ const secondaryArtifacts = cfnSecondaryArtifacts == null ? void 0 : requireConfigArray(cfnSecondaryArtifacts, "AWS::CodeBuild::Project SecondaryArtifacts").map((a) => this.mapArtifacts(a, "AWS::CodeBuild::Project SecondaryArtifacts[]"));
42478
42495
  const cfnSecondarySourceVersions = properties["SecondarySourceVersions"];
42479
42496
  const secondarySourceVersions = cfnSecondarySourceVersions ? cfnSecondarySourceVersions.map((sv) => ({
42480
42497
  sourceIdentifier: sv["SourceIdentifier"],
@@ -42505,10 +42522,10 @@ var CodeBuildProvider = class {
42505
42522
  }
42506
42523
  return {
42507
42524
  name,
42508
- source: this.mapSource(source),
42525
+ source: this.mapSource(source, "AWS::CodeBuild::Project Source"),
42509
42526
  environment: {
42510
- type: environment?.["Type"] ?? "LINUX_CONTAINER",
42511
- computeType: environment?.["ComputeType"] ?? "BUILD_GENERAL1_SMALL",
42527
+ type: readConfigString(environment, "Type", "LINUX_CONTAINER", "AWS::CodeBuild::Project Environment"),
42528
+ computeType: readConfigString(environment, "ComputeType", "BUILD_GENERAL1_SMALL", "AWS::CodeBuild::Project Environment"),
42512
42529
  image: environment?.["Image"],
42513
42530
  environmentVariables: envVars ? envVars.map((v) => ({
42514
42531
  name: v.Name,
@@ -42529,7 +42546,7 @@ var CodeBuildProvider = class {
42529
42546
  } : void 0
42530
42547
  },
42531
42548
  serviceRole,
42532
- artifacts: this.mapArtifacts(artifacts),
42549
+ artifacts: this.mapArtifacts(artifacts, "AWS::CodeBuild::Project Artifacts"),
42533
42550
  tags: tags ? tags.map((t) => ({
42534
42551
  key: t.Key,
42535
42552
  value: t.Value
@@ -43894,9 +43911,11 @@ var S3DirectoryBucketProvider = class {
43894
43911
  handledProperties = /* @__PURE__ */ new Map([["AWS::S3Express::DirectoryBucket", /* @__PURE__ */ new Set([
43895
43912
  "DataRedundancy",
43896
43913
  "LocationName",
43897
- "BucketName"
43914
+ "BucketName",
43915
+ "Tags"
43898
43916
  ])]]);
43899
43917
  ec2Client;
43918
+ s3ControlClient;
43900
43919
  providerRegion = process.env["AWS_REGION"];
43901
43920
  constructor() {
43902
43921
  const awsClients = getAwsClients();
@@ -43908,6 +43927,17 @@ var S3DirectoryBucketProvider = class {
43908
43927
  return this.ec2Client;
43909
43928
  }
43910
43929
  /**
43930
+ * Directory-bucket tags live on the S3 control plane: `PutBucketTagging`
43931
+ * is documented "not supported for directory buckets", and the tag CRUD
43932
+ * after create is S3 Control's `TagResource` / `UntagResource` /
43933
+ * `ListTagsForResource` (requiring the `s3express:TagResource` /
43934
+ * `s3express:UntagResource` / `s3express:ListTagsForResource` permissions).
43935
+ */
43936
+ getS3ControlClient() {
43937
+ if (!this.s3ControlClient) this.s3ControlClient = new S3ControlClient(this.providerRegion ? { region: this.providerRegion } : {});
43938
+ return this.s3ControlClient;
43939
+ }
43940
+ /**
43911
43941
  * Convert AZ name (us-east-1a) to AZ ID (use1-az1) via EC2 DescribeAvailabilityZones
43912
43942
  */
43913
43943
  async getAzId(azName) {
@@ -43938,7 +43968,16 @@ var S3DirectoryBucketProvider = class {
43938
43968
  * Build attributes for a directory bucket
43939
43969
  */
43940
43970
  async buildAttributes(bucketName) {
43941
- return { Arn: `arn:aws:s3express:${await this.getRegion()}:${await this.getAccountId()}:bucket/${bucketName}` };
43971
+ return { Arn: await this.buildBucketArn(bucketName) };
43972
+ }
43973
+ /**
43974
+ * Directory bucket ARN: `arn:aws:s3express:{region}:{account}:bucket/{name}`.
43975
+ * Also the `ResourceArn` for the S3 Control tag operations. Callers that
43976
+ * already resolved the account (for the S3 Control `AccountId` parameter)
43977
+ * pass it in so the STS lookup runs once per operation.
43978
+ */
43979
+ async buildBucketArn(bucketName, accountId) {
43980
+ return `arn:aws:s3express:${await this.getRegion()}:${accountId ?? await this.getAccountId()}:bucket/${bucketName}`;
43942
43981
  }
43943
43982
  /**
43944
43983
  * Create an S3 Express Directory Bucket
@@ -43953,6 +43992,8 @@ var S3DirectoryBucketProvider = class {
43953
43992
  maxLength: 64,
43954
43993
  lowercase: true
43955
43994
  })}--${azId}--x-s3`;
43995
+ const tags = properties["Tags"];
43996
+ const includeTags = tags != null && !(Array.isArray(tags) && tags.length === 0);
43956
43997
  try {
43957
43998
  await this.s3Client.send(new CreateBucketCommand({
43958
43999
  Bucket: bucketName,
@@ -43964,7 +44005,8 @@ var S3DirectoryBucketProvider = class {
43964
44005
  Location: {
43965
44006
  Name: azId,
43966
44007
  Type: "AvailabilityZone"
43967
- }
44008
+ },
44009
+ ...includeTags ? { Tags: tags } : {}
43968
44010
  }
43969
44011
  }));
43970
44012
  this.logger.debug(`Created S3 Express Directory Bucket: ${bucketName}`);
@@ -43981,28 +44023,60 @@ var S3DirectoryBucketProvider = class {
43981
44023
  /**
43982
44024
  * Update an S3 Express Directory Bucket
43983
44025
  *
43984
- * Most properties are immutable, so this is a no-op.
44026
+ * `BucketName` / `DataRedundancy` / `LocationName` are create-only (the
44027
+ * registry-schema fallback classifies changes to them as replacement), so
44028
+ * the only in-place mutable property is `Tags` — applied via S3 Control's
44029
+ * `TagResource` / `UntagResource` (the directory-bucket tag CRUD; the
44030
+ * bucket-level `PutBucketTagging` is not supported for directory buckets).
44031
+ * `TagResource` is additive-only, so a tag dropped from the template
44032
+ * (partial removal) — or the entire `Tags` property removed (full removal,
44033
+ * `newTags === undefined`) — would survive on AWS unless the removed keys
44034
+ * are explicitly `UntagResource`d.
43985
44035
  */
43986
- update(logicalId, physicalId, _resourceType, _properties, _previousProperties) {
43987
- this.logger.debug(`Update for S3 Express Directory Bucket ${logicalId} is a no-op (immutable properties)`);
43988
- return Promise.resolve({
43989
- physicalId,
43990
- wasReplaced: false
43991
- });
44036
+ async update(logicalId, physicalId, resourceType, properties, previousProperties) {
44037
+ try {
44038
+ const newTags = properties["Tags"];
44039
+ const oldTags = previousProperties["Tags"];
44040
+ const malformedNewTags = newTags != null && !Array.isArray(newTags);
44041
+ const newKeys = new Set((Array.isArray(newTags) ? newTags : []).map((t) => t.Key).filter((k) => !!k));
44042
+ const removedKeys = malformedNewTags ? [] : (Array.isArray(oldTags) ? oldTags : []).map((t) => t.Key).filter((k) => !!k && !newKeys.has(k));
44043
+ const tagsToApply = malformedNewTags || Array.isArray(newTags) && newTags.length > 0 ? newTags : void 0;
44044
+ if (JSON.stringify(newTags) !== JSON.stringify(oldTags) && (removedKeys.length > 0 || tagsToApply !== void 0)) {
44045
+ const accountId = await this.getAccountId();
44046
+ const resourceArn = await this.buildBucketArn(physicalId, accountId);
44047
+ if (removedKeys.length > 0) await this.getS3ControlClient().send(new UntagResourceCommand$23({
44048
+ AccountId: accountId,
44049
+ ResourceArn: resourceArn,
44050
+ TagKeys: removedKeys
44051
+ }));
44052
+ if (tagsToApply) await this.getS3ControlClient().send(new TagResourceCommand$23({
44053
+ AccountId: accountId,
44054
+ ResourceArn: resourceArn,
44055
+ Tags: tagsToApply
44056
+ }));
44057
+ this.logger.debug(`Updated tags for S3 Express Directory Bucket ${physicalId}`);
44058
+ } else this.logger.debug(`Update for S3 Express Directory Bucket ${logicalId} is a no-op (no tag changes; other properties are immutable)`);
44059
+ return {
44060
+ physicalId,
44061
+ wasReplaced: false
44062
+ };
44063
+ } catch (error) {
44064
+ const cause = error instanceof Error ? error : void 0;
44065
+ throw new ProvisioningError(`Failed to update S3 Express Directory Bucket ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, physicalId, cause);
44066
+ }
43992
44067
  }
43993
44068
  /**
43994
44069
  * Delete an S3 Express Directory Bucket
43995
44070
  *
43996
44071
  * CloudFormation-parity data guard (issue #1344, sibling of #1340): a
43997
44072
  * non-empty directory bucket is only auto-emptied when the user opted in —
43998
- * the `aws-cdk:auto-delete-objects` tag on the bucket (settable only via
43999
- * `--allow-unsupported-properties` today, since `Tags` is not yet a
44000
- * handled property for this type) or the deploy engine's
44001
- * `--force-stateful-recreation` consent on a replacement delete
44002
- * (`DeleteContext.forceDataDelete`). Otherwise the not-empty error
44003
- * surfaces exactly like CloudFormation's DELETE_FAILED (live-A/B-verified
44004
- * 2026-08-03: CFn fails a non-empty DirectoryBucket delete with "The
44005
- * bucket you tried to delete is not empty", 409).
44073
+ * the `aws-cdk:auto-delete-objects` tag on the bucket (a first-class
44074
+ * template `Tags` entry now that `Tags` is a handled property, issue #609)
44075
+ * or the deploy engine's `--force-stateful-recreation` consent on a
44076
+ * replacement delete (`DeleteContext.forceDataDelete`). Otherwise the
44077
+ * not-empty error surfaces exactly like CloudFormation's DELETE_FAILED
44078
+ * (live-A/B-verified 2026-08-03: CFn fails a non-empty DirectoryBucket
44079
+ * delete with "The bucket you tried to delete is not empty", 409).
44006
44080
  *
44007
44081
  * Directory buckets do not support versioning, so the opted-in auto-empty
44008
44082
  * only needs to delete current objects.
@@ -44011,15 +44085,8 @@ var S3DirectoryBucketProvider = class {
44011
44085
  this.logger.debug(`Deleting S3 Express Directory Bucket ${logicalId}: ${physicalId}`);
44012
44086
  const allowAutoEmpty = context?.forceDataDelete === true || hasCdkAutoDeleteTag(properties, "aws-cdk:auto-delete-objects");
44013
44087
  try {
44014
- if (allowAutoEmpty) {
44015
- this.logger.info(`Emptying directory bucket ${physicalId} before deletion (auto-delete opt-in present)`);
44016
- await this.emptyBucket(physicalId);
44017
- }
44018
- await this.s3Client.send(new DeleteBucketCommand({ Bucket: physicalId }));
44019
- this.logger.debug(`Successfully deleted S3 Express Directory Bucket ${logicalId}`);
44088
+ await this.deleteBucketWithEmptyRetry(logicalId, physicalId, allowAutoEmpty);
44020
44089
  } catch (error) {
44021
- const notEmptyMsg = error instanceof Error ? error.message : String(error);
44022
- if (!allowAutoEmpty && (notEmptyMsg.includes("not empty") || notEmptyMsg.includes("BucketNotEmpty"))) throw new ProvisioningError(`Failed to delete S3 Express Directory Bucket ${logicalId}: bucket ${physicalId} is not empty. Matching CloudFormation, cdkd does not delete a non-empty directory bucket without an explicit opt-in. Delete all objects first (e.g. aws s3 rm s3://${physicalId} --recursive) and destroy again.`, resourceType, logicalId, physicalId, error instanceof Error ? error : void 0);
44023
44090
  if (error instanceof Error && (error.name === "NoSuchBucket" || error.name === "BucketNotFound")) {
44024
44091
  assertRegionMatch(await this.s3Client.config.region(), context?.expectedRegion, resourceType, logicalId, physicalId);
44025
44092
  this.logger.debug(`Bucket ${physicalId} does not exist, skipping deletion`);
@@ -44030,6 +44097,35 @@ var S3DirectoryBucketProvider = class {
44030
44097
  }
44031
44098
  }
44032
44099
  /**
44100
+ * Delete the bucket, absorbing the write race on an opted-in auto-empty:
44101
+ * an object written between the empty pass and the delete makes AWS reject
44102
+ * the delete as not-empty, so re-empty and retry (bounded) — the same
44103
+ * bounded loop as the standard-bucket sibling, ported per issue #609's
44104
+ * "Tags becomes a handled property" note (the tag opt-in is mainstream
44105
+ * now, so the ~zero-opt-in rationale for skipping the loop in PR #1347 no
44106
+ * longer holds). Without the opt-in, the first not-empty error surfaces
44107
+ * as the CloudFormation-parity guard (issue #1344).
44108
+ */
44109
+ async deleteBucketWithEmptyRetry(logicalId, bucketName, allowAutoEmpty) {
44110
+ const maxAttempts = 3;
44111
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) try {
44112
+ await this.s3Client.send(new DeleteBucketCommand({ Bucket: bucketName }));
44113
+ this.logger.debug(`Successfully deleted S3 Express Directory Bucket ${logicalId}`);
44114
+ return;
44115
+ } catch (error) {
44116
+ const msg = error instanceof Error ? error.message : String(error);
44117
+ if (msg.includes("not empty") || msg.includes("BucketNotEmpty")) {
44118
+ if (!allowAutoEmpty) throw new Error(`bucket ${bucketName} is not empty. Matching CloudFormation, cdkd does not delete a non-empty directory bucket without an explicit opt-in. Delete all objects first (e.g. aws s3 rm s3://${bucketName} --recursive) and destroy again.`);
44119
+ this.logger.info(`Directory bucket ${bucketName} not empty (attempt ${attempt}/${maxAttempts}), emptying (auto-delete opt-in present)...`);
44120
+ await this.emptyBucket(bucketName);
44121
+ continue;
44122
+ }
44123
+ throw error;
44124
+ }
44125
+ await this.s3Client.send(new DeleteBucketCommand({ Bucket: bucketName }));
44126
+ this.logger.debug(`Successfully deleted S3 Express Directory Bucket ${logicalId}`);
44127
+ }
44128
+ /**
44033
44129
  * Empty all objects from a directory bucket.
44034
44130
  * Lists and deletes objects in batches of 1000.
44035
44131
  */
@@ -44060,10 +44156,11 @@ var S3DirectoryBucketProvider = class {
44060
44156
  * CFn-property shape.
44061
44157
  *
44062
44158
  * Issues `HeadBucket` to verify existence and surfaces `BucketName`
44063
- * (the physicalId). `DataRedundancy` and `LocationName` are not exposed
44064
- * by any cheap S3 Express API — the only way to inspect them is by
44065
- * parsing the bucket name's `--<az-id>--x-s3` suffix, which is best
44066
- * effort. We surface them when they are recoverable from the bucket
44159
+ * (the physicalId) plus `Tags` (via S3 Control `ListTagsForResource`,
44160
+ * the directory-bucket tag read). `DataRedundancy` and `LocationName`
44161
+ * are not exposed by any cheap S3 Express API — the only way to inspect
44162
+ * them is by parsing the bucket name's `--<az-id>--x-s3` suffix, which is
44163
+ * best effort. We surface them when they are recoverable from the bucket
44067
44164
  * name to give the comparator a chance to detect mismatches.
44068
44165
  *
44069
44166
  * `--<az-id>--x-s3` suffix parsing: directory bucket names follow the
@@ -44089,8 +44186,17 @@ var S3DirectoryBucketProvider = class {
44089
44186
  }
44090
44187
  const result = { BucketName: physicalId };
44091
44188
  if (physicalId.endsWith("--x-s3")) result["DataRedundancy"] = "SingleAvailabilityZone";
44189
+ result["Tags"] = await this.readTags(physicalId);
44092
44190
  return result;
44093
44191
  }
44192
+ async readTags(bucketName) {
44193
+ const accountId = await this.getAccountId();
44194
+ const resourceArn = await this.buildBucketArn(bucketName, accountId);
44195
+ return normalizeAwsTagsToCfn((await this.getS3ControlClient().send(new ListTagsForResourceCommand$18({
44196
+ AccountId: accountId,
44197
+ ResourceArn: resourceArn
44198
+ }))).Tags);
44199
+ }
44094
44200
  /**
44095
44201
  * Adopt an existing S3 Express Directory Bucket into cdkd state.
44096
44202
  *
@@ -44576,7 +44682,7 @@ var S3TablesProvider = class {
44576
44682
  */
44577
44683
  async readTagsBestEffort(resourceArn) {
44578
44684
  try {
44579
- const tags = (await this.getClient().send(new ListTagsForResourceCommand$18({ resourceArn }))).tags ?? {};
44685
+ const tags = (await this.getClient().send(new ListTagsForResourceCommand$19({ resourceArn }))).tags ?? {};
44580
44686
  const out = [];
44581
44687
  for (const [Key, Value] of Object.entries(tags)) out.push({
44582
44688
  Key,
@@ -44630,7 +44736,7 @@ var S3TablesProvider = class {
44630
44736
  const resourceArn = await this.lookupTableArn(tableBucketARN, namespace, name);
44631
44737
  if (!resourceArn) throw new ProvisioningError(`applyTableTagsDiff: GetTable returned no tableARN for ${physicalId} — table is gone or state is out-of-sync. Refusing to silently drop the tag update (run 'cdkd state orphan ${logicalId}' to clean up if the table was deleted out-of-band).`, resourceType, logicalId, physicalId);
44632
44738
  if (removedKeys.length > 0) try {
44633
- await this.getClient().send(new UntagResourceCommand$23({
44739
+ await this.getClient().send(new UntagResourceCommand$24({
44634
44740
  resourceArn,
44635
44741
  tagKeys: removedKeys
44636
44742
  }));
@@ -44639,7 +44745,7 @@ var S3TablesProvider = class {
44639
44745
  throw new ProvisioningError(`applyTableTagsDiff: UntagResource failed for ${resourceArn} (keys: ${removedKeys.join(", ")}): ${err instanceof Error ? err.message : String(err)}. State has NOT been updated so the next deploy will retry the tag-diff.`, resourceType, logicalId, physicalId, cause);
44640
44746
  }
44641
44747
  if (Object.keys(upserts).length > 0) try {
44642
- await this.getClient().send(new TagResourceCommand$23({
44748
+ await this.getClient().send(new TagResourceCommand$24({
44643
44749
  resourceArn,
44644
44750
  tags: upserts
44645
44751
  }));
@@ -44671,7 +44777,7 @@ var S3TablesProvider = class {
44671
44777
  if (removedKeys.length === 0 && Object.keys(upserts).length === 0) return;
44672
44778
  const resourceArn = physicalId;
44673
44779
  if (removedKeys.length > 0) try {
44674
- await this.getClient().send(new UntagResourceCommand$23({
44780
+ await this.getClient().send(new UntagResourceCommand$24({
44675
44781
  resourceArn,
44676
44782
  tagKeys: removedKeys
44677
44783
  }));
@@ -44680,7 +44786,7 @@ var S3TablesProvider = class {
44680
44786
  throw new ProvisioningError(`applyTableBucketTagsDiff: UntagResource failed for ${resourceArn} (keys: ${removedKeys.join(", ")}): ${err instanceof Error ? err.message : String(err)}. State has NOT been updated so the next deploy will retry the tag-diff.`, resourceType, logicalId, physicalId, cause);
44681
44787
  }
44682
44788
  if (Object.keys(upserts).length > 0) try {
44683
- await this.getClient().send(new TagResourceCommand$23({
44789
+ await this.getClient().send(new TagResourceCommand$24({
44684
44790
  resourceArn,
44685
44791
  tags: upserts
44686
44792
  }));
@@ -66600,7 +66706,7 @@ function createMigrateCommand() {
66600
66706
  */
66601
66707
  function buildProgram() {
66602
66708
  const program = new Command();
66603
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.34");
66709
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.36");
66604
66710
  program.hook("preAction", (_thisCommand, actionCommand) => {
66605
66711
  const { profile } = actionCommand.optsWithGlobals();
66606
66712
  if (profile !== void 0) process.env["AWS_PROFILE"] = profile;