@go-to-k/cdkd 0.278.41 → 0.278.42

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 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-CiMIsVFt.js";
2
+ import { $ as DiffCalculator, $t as resolveBucketRegion, A as red, At as getDockerImageBySourceHash, B as isTerminationProtectionPropagationError, Bt as resolveStateBucketWithDefaultAndSource, C as isStatefulRecreateTargetSync, Ct as validateContainerRepoName, D as cyan, Dt as runDockerForeground, E as bold, En as withErrorHandling, Et as getDockerCmd, F as ProviderRegistry, Ft as resolveApp, G as normalizeAwsTagsToCfn, Gt as CFN_TEMPLATE_URL_LIMIT, H as cfnRefValueFromPhysicalId, Ht as stateBucketExistenceConfirmed, I as findActionableSilentDrops, It as resolveAutoAssetStorage, J as readConfigString, Jt as uploadCfnTemplate, K as resolveExplicitPhysicalId, Kt as MIGRATE_TMP_PREFIX, L as CloudControlProvider, Lt as resolveCaptureObservedState, M as IAMRoleProvider, Mt as synthesisStatusMessage, N as collectInlinePolicyNamesManagedBySiblings, Nt as getDefaultStateBucketName, O as gray, Ot as runDockerStreaming, P as clearOnUpdateRemoval, Pt as getLegacyStateBucketName, Q as applyRoleArnIfSet, R as slowCcOperationTimeoutMs, Rt as resolveSkipPrefix, S as MULTI_REGION_RECREATE_BLOCKED_TYPES, St as validateAssetBucketName, T as formatResourceLine, Tn as normalizeAwsError, Tt as formatDockerLoginError, U as refStateLookupFromResource, Ut as warnDeprecatedNoPrefixCliFlag, V as IntrinsicFunctionResolver, Vt as resolveUseCdkBootstrapAssets, W as WAFv2WebACLProvider, Wt as CFN_TEMPLATE_BODY_LIMIT, X as requireConfigArray, Xt as AssemblyReader, Y as replayWarn, Yt as expectedOwnerParam, Z as requireConfigString, Zt as processStackMessages, _ as createPreDeleteFinalSnapshot, _n as ResourceTimeoutError, _t as AssetModeResolver, a as DeploymentEventsStore, an as CdkdError, at as TemplateParser, b as unsupportedFinalSnapshotError, bn as StackTerminationProtectionError, bt as getBootstrapMarkerKey, c as replayFailedOperations, cn as DeployCancelledError, ct as rebuildClientForBucketRegion, d as IMPLICIT_DELETE_DEPENDENCIES, dn as LocalStartServiceError, dt as stringifyValue, en as AwsClients, et as describeTypeWithThrottleRetry, f as computeImplicitDeleteEdges, ft as WorkGraph, g as ccRoutedFinalSnapshotError, gn as ProvisioningError, gt as rewriteTemplateAssetReferences, h as buildFinalSnapshotIdentifier, hn as PartialFailureError, ht as loadPublishableAssetManifest, i as DeploymentEventsReader, it as DagBuilder, j as yellow, jt as Synthesizer, k as green, kt as AssetManifestLoader, l as replayRollback, ln as LocalInvokeBuildError$1, lt as shouldRetainResource, m as PRE_DELETE_SNAPSHOT_TYPES, mn as NestedStackChildDirectDestroyError, mt as createAssetRedirectResolver, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as resetAwsClients, nt as isRetryableTransientError, o as planFailedOps, ot as LockManager, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as MissingCdkCliError, pt as buildAssetRedirectMap, q as assertRegionMatch, qt as findLargeInlineResources, r as DeployEngine, rn as setAwsClients, rt as isThrottlingError, s as planRollback, st as S3StateBackend, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as getAwsClients, tt as withRetry, u as withResourceDeadline, un as LocalMigrateError, ut as AssetPublisher, v as isFinalSnapshotError, vn as ResourceUpdateNotSupportedError, vt as BOOTSTRAP_MARKER_PREFIX, w as renderStatefulReason, wt as buildDockerImage, x as extractDeploymentEventError, xt as parseBootstrapMarker, y as refusesFinalSnapshot, yn as StackHasActiveImportsError, yt as ensureAssetStorage, z as disableInstanceApiTermination, zt as resolveStateBucketWithDefault } from "./deploy-engine-DxexHYwK.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-CoBHZKJt.js";
4
+ import { t as ASGProvider } from "./asg-provider-mwqciloR.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";
@@ -3688,11 +3688,11 @@ var IAMAccessKeyProvider = class {
3688
3688
  * exist on AWS without a cdkd state record, and the next deploy's re-CREATE
3689
3689
  * would burn the user's 2-keys-per-user quota.
3690
3690
  */
3691
- async create(logicalId, resourceType, properties) {
3691
+ async create(logicalId, resourceType, properties, context) {
3692
3692
  this.logger.debug(`Creating IAM access key ${logicalId}`);
3693
3693
  const userName = properties["UserName"];
3694
3694
  if (!userName) throw new ProvisioningError(`AccessKey ${logicalId} requires UserName`, resourceType, logicalId);
3695
- const status = properties["Status"] ?? "Active";
3695
+ const status = requireConfigString(properties["Status"], "Active", "AWS::IAM::AccessKey Status", replayWarn(this.logger, context));
3696
3696
  try {
3697
3697
  const response = await this.iamClient.send(new CreateAccessKeyCommand({ UserName: userName }));
3698
3698
  const accessKeyId = response.AccessKey?.AccessKeyId;
@@ -3747,10 +3747,11 @@ var IAMAccessKeyProvider = class {
3747
3747
  * that REMOVES `Status` resets to the CFn default `Active` (absent-field
3748
3748
  * removal semantics), so the desired status is always sent explicitly.
3749
3749
  */
3750
- async update(logicalId, physicalId, resourceType, properties, _previousProperties) {
3750
+ async update(logicalId, physicalId, resourceType, properties, previousProperties) {
3751
3751
  this.logger.debug(`Updating IAM access key ${logicalId}: ${physicalId}`);
3752
3752
  const userName = properties["UserName"];
3753
- const status = properties["Status"] ?? "Active";
3753
+ const previousStatus = previousProperties["Status"] === "Inactive" ? "Inactive" : "Active";
3754
+ const status = properties["Status"] === void 0 ? "Active" : requireConfigString(properties["Status"], previousStatus, "AWS::IAM::AccessKey Status", { onUnusable: (message) => this.logger.warn(message) });
3754
3755
  try {
3755
3756
  await this.iamClient.send(new UpdateAccessKeyCommand({
3756
3757
  UserName: userName,
@@ -10792,7 +10793,10 @@ var LambdaEventInvokeConfigProvider = class {
10792
10793
  }
10793
10794
  buildPutInput(properties) {
10794
10795
  const functionName = properties["FunctionName"];
10795
- const qualifier = properties["Qualifier"] ?? "$LATEST";
10796
+ const qualifier = requireConfigString(properties["Qualifier"], "$LATEST", "AWS::Lambda::EventInvokeConfig Qualifier", {
10797
+ coerceNumber: true,
10798
+ onUnusable: (message) => this.logger.warn(message)
10799
+ });
10796
10800
  const input = { FunctionName: functionName };
10797
10801
  if (qualifier !== "$LATEST") input.Qualifier = qualifier;
10798
10802
  if (properties["MaximumEventAgeInSeconds"] !== void 0) input.MaximumEventAgeInSeconds = Number(properties["MaximumEventAgeInSeconds"]);
@@ -10801,11 +10805,14 @@ var LambdaEventInvokeConfigProvider = class {
10801
10805
  if (dest) input.DestinationConfig = dest;
10802
10806
  return input;
10803
10807
  }
10804
- async create(logicalId, resourceType, properties) {
10808
+ async create(logicalId, resourceType, properties, context) {
10805
10809
  this.logger.debug(`Creating Lambda EventInvokeConfig ${logicalId}`);
10806
10810
  const functionName = properties["FunctionName"];
10807
10811
  if (!functionName) throw new ProvisioningError(`FunctionName is required for Lambda EventInvokeConfig ${logicalId}`, resourceType, logicalId);
10808
- const qualifier = properties["Qualifier"] ?? "$LATEST";
10812
+ const qualifier = requireConfigString(properties["Qualifier"], "$LATEST", "AWS::Lambda::EventInvokeConfig Qualifier", {
10813
+ coerceNumber: true,
10814
+ ...replayWarn(this.logger, context)
10815
+ });
10809
10816
  try {
10810
10817
  await this.lambdaClient.send(new PutFunctionEventInvokeConfigCommand(this.buildPutInput(properties)));
10811
10818
  const physicalId = this.buildPhysicalId(functionName, qualifier);
@@ -17241,20 +17248,20 @@ var EC2Provider = class {
17241
17248
  const awsClients = getAwsClients();
17242
17249
  this.ec2Client = awsClients.ec2;
17243
17250
  }
17244
- async create(logicalId, resourceType, properties) {
17251
+ async create(logicalId, resourceType, properties, context) {
17245
17252
  switch (resourceType) {
17246
17253
  case "AWS::EC2::VPC": return this.createVpc(logicalId, resourceType, properties);
17247
17254
  case "AWS::EC2::Subnet": return this.createSubnet(logicalId, resourceType, properties);
17248
17255
  case "AWS::EC2::InternetGateway": return this.createInternetGateway(logicalId, resourceType, properties);
17249
- case "AWS::EC2::EIP": return this.createEip(logicalId, resourceType, properties);
17256
+ case "AWS::EC2::EIP": return this.createEip(logicalId, resourceType, properties, context);
17250
17257
  case "AWS::EC2::VPCGatewayAttachment": return this.createVpcGatewayAttachment(logicalId, resourceType, properties);
17251
17258
  case "AWS::EC2::NatGateway": return this.createNatGateway(logicalId, resourceType, properties);
17252
17259
  case "AWS::EC2::RouteTable": return this.createRouteTable(logicalId, resourceType, properties);
17253
17260
  case "AWS::EC2::Route": return this.createRoute(logicalId, resourceType, properties);
17254
17261
  case "AWS::EC2::SubnetRouteTableAssociation": return this.createSubnetRouteTableAssociation(logicalId, resourceType, properties);
17255
17262
  case "AWS::EC2::SecurityGroup": return this.createSecurityGroup(logicalId, resourceType, properties);
17256
- case "AWS::EC2::SecurityGroupIngress": return this.createSecurityGroupIngress(logicalId, resourceType, properties);
17257
- case "AWS::EC2::Instance": return this.createInstance(logicalId, resourceType, properties);
17263
+ case "AWS::EC2::SecurityGroupIngress": return this.createSecurityGroupIngress(logicalId, resourceType, properties, context?.replayingState === true ? (message) => this.logger.warn(message) : void 0);
17264
+ case "AWS::EC2::Instance": return this.createInstance(logicalId, resourceType, properties, context);
17258
17265
  case "AWS::EC2::NetworkAcl": return this.createNetworkAcl(logicalId, resourceType, properties);
17259
17266
  case "AWS::EC2::NetworkAclEntry": return this.createNetworkAclEntry(logicalId, resourceType, properties);
17260
17267
  case "AWS::EC2::SubnetNetworkAclAssociation": return this.createSubnetNetworkAclAssociation(logicalId, resourceType, properties);
@@ -17702,11 +17709,11 @@ var EC2Provider = class {
17702
17709
  if (physicalId.startsWith("eipalloc-")) return { allocationId: physicalId };
17703
17710
  return { publicIp: physicalId };
17704
17711
  }
17705
- async createEip(logicalId, resourceType, properties) {
17712
+ async createEip(logicalId, resourceType, properties, context) {
17706
17713
  this.logger.debug(`Creating EIP ${logicalId}`);
17707
17714
  try {
17708
17715
  const response = await this.ec2Client.send(new AllocateAddressCommand({
17709
- Domain: properties["Domain"] ?? "vpc",
17716
+ Domain: requireConfigString(properties["Domain"], "vpc", "AWS::EC2::EIP Domain", replayWarn(this.logger, context)),
17710
17717
  NetworkBorderGroup: properties["NetworkBorderGroup"],
17711
17718
  PublicIpv4Pool: properties["PublicIpv4Pool"]
17712
17719
  }));
@@ -18254,17 +18261,32 @@ var EC2Provider = class {
18254
18261
  return;
18255
18262
  }
18256
18263
  }
18257
- async createSecurityGroupIngress(logicalId, resourceType, properties) {
18264
+ /**
18265
+ * @param onUnusableProtocol When supplied, a malformed `IpProtocol` WARNS and
18266
+ * defaults instead of throwing. Passed by `updateSecurityGroupIngress`,
18267
+ * which reaches this method as the re-create half of a delete-then-create
18268
+ * replacement: by then `RevokeSecurityGroupIngress` has already committed,
18269
+ * so a refusal would leave the rule deleted from AWS with the op failed —
18270
+ * and on a rollback replay the value comes from a STATE record, which no
18271
+ * template edit can fix. Absent (the plain CREATE dispatch) it throws.
18272
+ */
18273
+ async createSecurityGroupIngress(logicalId, resourceType, properties, onUnusableProtocol) {
18258
18274
  this.logger.debug(`Creating SecurityGroupIngress ${logicalId}`);
18259
18275
  const groupId = properties["GroupId"];
18260
18276
  if (!groupId) throw new ProvisioningError(`GroupId is required for SecurityGroupIngress ${logicalId}`, resourceType, logicalId);
18261
- const ipProtocol = properties["IpProtocol"] ?? "-1";
18277
+ const ipProtocol = requireConfigString(properties["IpProtocol"], "-1", "AWS::EC2::SecurityGroupIngress IpProtocol", {
18278
+ coerceNumber: true,
18279
+ ...onUnusableProtocol && { onUnusable: onUnusableProtocol }
18280
+ });
18262
18281
  const fromPort = properties["FromPort"];
18263
18282
  const toPort = properties["ToPort"];
18264
18283
  try {
18265
18284
  await this.ec2Client.send(new AuthorizeSecurityGroupIngressCommand({
18266
18285
  GroupId: groupId,
18267
- IpPermissions: [this.buildIpPermission(properties)]
18286
+ IpPermissions: [{
18287
+ ...this.buildIpPermission(properties),
18288
+ IpProtocol: ipProtocol
18289
+ }]
18268
18290
  }));
18269
18291
  const physicalId = `${groupId}|${ipProtocol}|${fromPort ?? "-1"}|${toPort ?? "-1"}`;
18270
18292
  this.logger.debug(`Successfully created SecurityGroupIngress ${logicalId}: ${physicalId}`);
@@ -18293,7 +18315,7 @@ var EC2Provider = class {
18293
18315
  };
18294
18316
  try {
18295
18317
  await this.deleteSecurityGroupIngress(logicalId, physicalId, resourceType, previousProperties);
18296
- const createResult = await this.createSecurityGroupIngress(logicalId, resourceType, properties);
18318
+ const createResult = await this.createSecurityGroupIngress(logicalId, resourceType, properties, (message) => this.logger.warn(message));
18297
18319
  return {
18298
18320
  physicalId: createResult.physicalId,
18299
18321
  wasReplaced: true,
@@ -18331,11 +18353,11 @@ var EC2Provider = class {
18331
18353
  throw new ProvisioningError(`Failed to delete SecurityGroupIngress ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, physicalId, cause);
18332
18354
  }
18333
18355
  }
18334
- async createInstance(logicalId, resourceType, properties) {
18356
+ async createInstance(logicalId, resourceType, properties, context) {
18335
18357
  this.logger.debug(`Creating EC2 Instance ${logicalId}`);
18336
18358
  const imageId = properties["ImageId"];
18337
18359
  if (!imageId) throw new ProvisioningError(`ImageId is required for EC2 Instance ${logicalId}`, resourceType, logicalId);
18338
- const instanceType = properties["InstanceType"] ?? "t3.micro";
18360
+ const instanceType = requireConfigString(properties["InstanceType"], "t3.micro", "AWS::EC2::Instance InstanceType", replayWarn(this.logger, context));
18339
18361
  try {
18340
18362
  const securityGroupIds = properties["SecurityGroupIds"];
18341
18363
  const securityGroups = properties["SecurityGroups"];
@@ -19988,14 +20010,14 @@ var ApiGatewayProvider = class ApiGatewayProvider {
19988
20010
  /**
19989
20011
  * Create a resource
19990
20012
  */
19991
- async create(logicalId, resourceType, properties) {
20013
+ async create(logicalId, resourceType, properties, context) {
19992
20014
  switch (resourceType) {
19993
20015
  case "AWS::ApiGateway::Account": return this.createAccount(logicalId, resourceType, properties);
19994
20016
  case "AWS::ApiGateway::Authorizer": return this.createAuthorizer(logicalId, resourceType, properties);
19995
20017
  case "AWS::ApiGateway::Resource": return this.createResource(logicalId, resourceType, properties);
19996
20018
  case "AWS::ApiGateway::Deployment": return this.createDeployment(logicalId, resourceType, properties);
19997
20019
  case "AWS::ApiGateway::Stage": return this.createStage(logicalId, resourceType, properties);
19998
- case "AWS::ApiGateway::Method": return this.createMethod(logicalId, resourceType, properties);
20020
+ case "AWS::ApiGateway::Method": return this.createMethod(logicalId, resourceType, properties, context);
19999
20021
  default: throw new ProvisioningError(`Unsupported resource type: ${resourceType}`, resourceType, logicalId);
20000
20022
  }
20001
20023
  }
@@ -20623,12 +20645,12 @@ var ApiGatewayProvider = class ApiGatewayProvider {
20623
20645
  * fixed in PR #373; this cleanup makes any future shape of
20624
20646
  * post-`PutMethod` failure self-healing on the next redeploy.
20625
20647
  */
20626
- async createMethod(logicalId, resourceType, properties) {
20648
+ async createMethod(logicalId, resourceType, properties, context) {
20627
20649
  this.logger.debug(`Creating API Gateway Method ${logicalId}`);
20628
20650
  const restApiId = properties["RestApiId"];
20629
20651
  const resourceId = properties["ResourceId"];
20630
20652
  const httpMethod = properties["HttpMethod"];
20631
- const authorizationType = properties["AuthorizationType"] ?? "NONE";
20653
+ const authorizationType = requireConfigString(properties["AuthorizationType"], "NONE", "AWS::ApiGateway::Method AuthorizationType", replayWarn(this.logger, context));
20632
20654
  const authorizerId = properties["AuthorizerId"];
20633
20655
  const apiKeyRequired = properties["ApiKeyRequired"];
20634
20656
  const operationName = properties["OperationName"];
@@ -28690,10 +28712,10 @@ var RDSDBProxyTargetGroupProvider = class {
28690
28712
  if (!this.rdsClient) this.rdsClient = new RDSClient(this.providerRegion ? { region: this.providerRegion } : {});
28691
28713
  return this.rdsClient;
28692
28714
  }
28693
- async create(logicalId, resourceType, properties) {
28715
+ async create(logicalId, resourceType, properties, context) {
28694
28716
  const dbProxyName = properties["DBProxyName"];
28695
28717
  if (!dbProxyName) throw new ProvisioningError(`DBProxyName is required for AWS::RDS::DBProxyTargetGroup ${logicalId}`, resourceType, logicalId);
28696
- const targetGroupName = properties["TargetGroupName"] ?? "default";
28718
+ const targetGroupName = requireConfigString(properties["TargetGroupName"], "default", "AWS::RDS::DBProxyTargetGroup TargetGroupName", replayWarn(this.logger, context));
28697
28719
  const dbClusterIdentifiers = properties["DBClusterIdentifiers"];
28698
28720
  const dbInstanceIdentifiers = properties["DBInstanceIdentifiers"];
28699
28721
  const connectionPoolConfig = properties["ConnectionPoolConfigurationInfo"];
@@ -28752,10 +28774,10 @@ var RDSDBProxyTargetGroupProvider = class {
28752
28774
  async update(logicalId, physicalId, resourceType, properties, previousProperties) {
28753
28775
  const dbProxyName = properties["DBProxyName"];
28754
28776
  if (!dbProxyName) throw new ProvisioningError(`DBProxyName is required for AWS::RDS::DBProxyTargetGroup ${logicalId} update`, resourceType, logicalId, physicalId);
28755
- const targetGroupName = properties["TargetGroupName"] ?? "default";
28777
+ const targetGroupName = requireConfigString(properties["TargetGroupName"], "default", "AWS::RDS::DBProxyTargetGroup TargetGroupName", { onUnusable: (message) => this.logger.warn(message) });
28756
28778
  for (const field of ["DBProxyName", "TargetGroupName"]) {
28757
28779
  const oldVal = previousProperties[field];
28758
- const newVal = properties[field];
28780
+ const newVal = field === "TargetGroupName" ? targetGroupName : properties[field];
28759
28781
  const normalize = (v) => field === "TargetGroupName" && (v === void 0 || v === "default") ? "default" : v;
28760
28782
  if (JSON.stringify(normalize(oldVal)) !== JSON.stringify(normalize(newVal))) throw new ResourceUpdateNotSupportedError(resourceType, logicalId, `${field} is immutable on AWS::RDS::DBProxyTargetGroup — destroy + redeploy to change it`);
28761
28783
  }
@@ -67329,7 +67351,7 @@ function createMigrateCommand() {
67329
67351
  */
67330
67352
  function buildProgram() {
67331
67353
  const program = new Command();
67332
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.41");
67354
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.42");
67333
67355
  program.hook("preAction", (_thisCommand, actionCommand) => {
67334
67356
  const { profile } = actionCommand.optsWithGlobals();
67335
67357
  if (profile !== void 0) process.env["AWS_PROFILE"] = profile;