@go-to-k/cdkd 0.248.0 → 0.249.0

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,10 +1,7 @@
1
1
  #!/usr/bin/env node
2
- 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-BzO-joNR.js";
3
- import { A as withErrorHandling, C as StackHasActiveImportsError, S as ResourceUpdateNotSupportedError, _ as MissingCdkCliError, a as normalizeAwsTagsToCfn, b as ProvisioningError, f as LocalInvokeBuildError$1, i as matchesCdkPath, k as normalizeAwsError, l as CdkdError, m as LocalStartServiceError, n as isTerminationProtectionPropagationError, o as resolveExplicitPhysicalId, p as LocalMigrateError, r as CDK_PATH_TAG, s as assertRegionMatch, t as disableInstanceApiTermination, v as NestedStackChildDirectDestroyError, w as StackTerminationProtectionError, x as ResourceTimeoutError, y as PartialFailureError } from "./ec2-termination-protection-q-WGWgxa.js";
4
- import { a as setAwsClients, i as resetAwsClients, r as getAwsClients, t as AwsClients } from "./aws-clients-B15NAPbL.js";
5
- import { $ as getDockerCmd, A as DiffCalculator, B as buildAssetRedirectMap, C as findActionableSilentDrops, Ct as resolveBucketRegion, D as refStateLookupFromResource, E as cfnRefValueFromPhysicalId, F as rebuildClientForBucketRegion, G as BOOTSTRAP_MARKER_PREFIX, H as loadPublishableAssetManifest, I as shouldRetainResource, J as parseBootstrapMarker, K as ensureAssetStorage, L as AssetPublisher, M as TemplateParser, N as LockManager, O as WAFv2WebACLProvider, P as S3StateBackend, Q as formatDockerLoginError, R as stringifyValue, S as ProviderRegistry, T as IntrinsicFunctionResolver, U as rewriteTemplateAssetReferences, V as createAssetRedirectResolver, W as AssetModeResolver, X as validateContainerRepoName, Y as validateAssetBucketName, Z as buildDockerImage, _ as green, _t as CFN_TEMPLATE_URL_LIMIT, a as withRetry, at as synthesisStatusMessage, b as IAMRoleProvider, bt as uploadCfnTemplate, c as computeImplicitDeleteEdges, ct as resolveApp, d as isStatefulRecreateTargetSync, dt as resolveSkipPrefix, et as runDockerForeground, f as renderStatefulReason, ft as resolveStateBucketWithDefault, g as gray, gt as CFN_TEMPLATE_BODY_LIMIT, h as cyan, ht as warnDeprecatedNoPrefixCliFlag, i as withResourceDeadline, it as Synthesizer, j as DagBuilder, k as applyRoleArnIfSet, l as extractDeploymentEventError, lt as resolveAutoAssetStorage, m as bold, mt as resolveUseCdkBootstrapAssets, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as AssetManifestLoader, o as isRetryableTransientError, ot as getDefaultStateBucketName, p as formatResourceLine, pt as resolveStateBucketWithDefaultAndSource, q as getBootstrapMarkerKey, r as DeployEngine, rt as getDockerImageBySourceHash, s as IMPLICIT_DELETE_DEPENDENCIES, st as getLegacyStateBucketName, t as DEFAULT_RESOURCE_TIMEOUT_MS, tt as runDockerStreaming, u as MULTI_REGION_RECREATE_BLOCKED_TYPES, ut as resolveCaptureObservedState, v as red, vt as MIGRATE_TMP_PREFIX, w as CloudControlProvider, x as collectInlinePolicyNamesManagedBySiblings, xt as AssemblyReader, y as yellow, yt as findLargeInlineResources, z as WorkGraph } from "./deploy-engine-D6U-Cm8B.js";
6
- import { t as expectedOwnerParam } from "./expected-bucket-owner-BjEfUnkA.js";
7
- import { t as ASGProvider } from "./asg-provider-Dbl1_mwT.js";
2
+ import { $ as ensureAssetStorage, A as WAFv2WebACLProvider, B as LockManager, Bt as LocalInvokeBuildError$1, C as findActionableSilentDrops, Ct as CFN_TEMPLATE_BODY_LIMIT, D as IntrinsicFunctionResolver, Dt as uploadCfnTemplate, E as isTerminationProtectionPropagationError, Et as findLargeInlineResources, F as assertRegionMatch, Ft as setAwsClients, G as stringifyValue, Gt as NestedStackChildDirectDestroyError, H as rebuildClientForBucketRegion, Ht as LocalStartServiceError, I as applyRoleArnIfSet, J as createAssetRedirectResolver, Jt as ResourceTimeoutError, K as WorkGraph, Kt as PartialFailureError, L as DiffCalculator, Lt as CdkdError, M as matchesCdkPath, Mt as AwsClients, N as normalizeAwsTagsToCfn, Nt as getAwsClients, O as cfnRefValueFromPhysicalId, Ot as expectedOwnerParam, P as resolveExplicitPhysicalId, Pt as resetAwsClients, Q as BOOTSTRAP_MARKER_PREFIX, R as DagBuilder, S as ProviderRegistry, St as warnDeprecatedNoPrefixCliFlag, T as disableInstanceApiTermination, Tt as MIGRATE_TMP_PREFIX, U as shouldRetainResource, V as S3StateBackend, Vt as LocalMigrateError, W as AssetPublisher, Wt as MissingCdkCliError, X as rewriteTemplateAssetReferences, Xt as StackHasActiveImportsError, Y as loadPublishableAssetManifest, Yt as ResourceUpdateNotSupportedError, Z as AssetModeResolver, Zt as StackTerminationProtectionError, _ as green, _t as resolveCaptureObservedState, a as withRetry, at as formatDockerLoginError, b as IAMRoleProvider, bt as resolveStateBucketWithDefaultAndSource, c as computeImplicitDeleteEdges, ct as runDockerStreaming, d as isStatefulRecreateTargetSync, dt as Synthesizer, et as getBootstrapMarkerKey, f as renderStatefulReason, ft as synthesisStatusMessage, g as gray, gt as resolveAutoAssetStorage, h as cyan, ht as resolveApp, i as withResourceDeadline, it as buildDockerImage, j as CDK_PATH_TAG, jt as resolveBucketRegion, k as refStateLookupFromResource, kt as AssemblyReader, l as extractDeploymentEventError, lt as AssetManifestLoader, m as bold, mt as getLegacyStateBucketName, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as normalizeAwsError, nt as validateAssetBucketName, o as isRetryableTransientError, ot as getDockerCmd, p as formatResourceLine, pt as getDefaultStateBucketName, q as buildAssetRedirectMap, qt as ProvisioningError, r as DeployEngine, rn as withErrorHandling, rt as validateContainerRepoName, s as IMPLICIT_DELETE_DEPENDENCIES, st as runDockerForeground, t as DEFAULT_RESOURCE_TIMEOUT_MS, tt as parseBootstrapMarker, u as MULTI_REGION_RECREATE_BLOCKED_TYPES, ut as getDockerImageBySourceHash, v as red, vt as resolveSkipPrefix, w as CloudControlProvider, wt as CFN_TEMPLATE_URL_LIMIT, x as collectInlinePolicyNamesManagedBySiblings, xt as resolveUseCdkBootstrapAssets, y as yellow, yt as resolveStateBucketWithDefault, z as TemplateParser } from "./deploy-engine-DqAyGFJu.js";
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-CMWe8LlY.js";
8
5
  import { AsyncLocalStorage } from "node:async_hooks";
9
6
  import { createHash, randomBytes, randomUUID } from "node:crypto";
10
7
  import { CopyObjectCommand, CreateBucketCommand, DeleteBucketAnalyticsConfigurationCommand, DeleteBucketCommand, DeleteBucketCorsCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListBucketsCommand, ListDirectoryBucketsCommand, 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";
@@ -321,7 +318,7 @@ function validateResourceTimeouts(opts) {
321
318
  } else if (typeof globalWarn === "number" && globalWarn >= 18e5) throw new Error(`--resource-warn-after (${formatMs(globalWarn)}) must be less than --resource-timeout (default ${formatMs(DEFAULT_RESOURCE_TIMEOUT_MS)}). Pass --resource-timeout <duration> alongside it to raise the deadline.`);
322
319
  const warnPerType = opts.resourceWarnAfter?.perTypeMs ?? {};
323
320
  const timeoutPerType = timeout?.perTypeMs ?? {};
324
- const types = new Set([...Object.keys(warnPerType), ...Object.keys(timeoutPerType)]);
321
+ const types = /* @__PURE__ */ new Set([...Object.keys(warnPerType), ...Object.keys(timeoutPerType)]);
325
322
  for (const t of types) {
326
323
  const explicitPerTypeWarn = warnPerType[t];
327
324
  const explicitPerTypeTimeout = timeoutPerType[t];
@@ -1891,7 +1888,7 @@ const FLUSH_INTERVAL_MS = 2e3;
1891
1888
  const FLUSH_EVENT_THRESHOLD = 50;
1892
1889
  /** Build-time cdkd version, with a dev fallback for non-built contexts. */
1893
1890
  function getCdkdVersion() {
1894
- return "0.248.0";
1891
+ return "0.249.0";
1895
1892
  }
1896
1893
  /**
1897
1894
  * Generate a time-sortable unique run id, e.g.
@@ -2924,7 +2921,7 @@ function collectCrossStackRefs(node, onRef) {
2924
2921
  var IAMPolicyProvider = class {
2925
2922
  iamClient;
2926
2923
  logger = getLogger().child("IAMPolicyProvider");
2927
- handledProperties = new Map([["AWS::IAM::Policy", new Set([
2924
+ handledProperties = /* @__PURE__ */ new Map([["AWS::IAM::Policy", /* @__PURE__ */ new Set([
2928
2925
  "PolicyName",
2929
2926
  "PolicyDocument",
2930
2927
  "Roles",
@@ -3258,7 +3255,7 @@ var IAMPolicyProvider = class {
3258
3255
  var IAMManagedPolicyProvider = class {
3259
3256
  iamClient;
3260
3257
  logger = getLogger().child("IAMManagedPolicyProvider");
3261
- handledProperties = new Map([["AWS::IAM::ManagedPolicy", new Set([
3258
+ handledProperties = /* @__PURE__ */ new Map([["AWS::IAM::ManagedPolicy", /* @__PURE__ */ new Set([
3262
3259
  "ManagedPolicyName",
3263
3260
  "Description",
3264
3261
  "Path",
@@ -3759,7 +3756,7 @@ function derivePolicyNameFromArn(arn) {
3759
3756
  var IAMInstanceProfileProvider = class {
3760
3757
  iamClient;
3761
3758
  logger = getLogger().child("IAMInstanceProfileProvider");
3762
- handledProperties = new Map([["AWS::IAM::InstanceProfile", new Set([
3759
+ handledProperties = /* @__PURE__ */ new Map([["AWS::IAM::InstanceProfile", /* @__PURE__ */ new Set([
3763
3760
  "InstanceProfileName",
3764
3761
  "Path",
3765
3762
  "Roles"
@@ -3979,8 +3976,8 @@ var IAMInstanceProfileProvider = class {
3979
3976
  var IAMUserGroupProvider = class {
3980
3977
  iamClient;
3981
3978
  logger = getLogger().child("IAMUserGroupProvider");
3982
- handledProperties = new Map([
3983
- ["AWS::IAM::User", new Set([
3979
+ handledProperties = /* @__PURE__ */ new Map([
3980
+ ["AWS::IAM::User", /* @__PURE__ */ new Set([
3984
3981
  "UserName",
3985
3982
  "Path",
3986
3983
  "Tags",
@@ -3990,13 +3987,13 @@ var IAMUserGroupProvider = class {
3990
3987
  "Policies",
3991
3988
  "PermissionsBoundary"
3992
3989
  ])],
3993
- ["AWS::IAM::Group", new Set([
3990
+ ["AWS::IAM::Group", /* @__PURE__ */ new Set([
3994
3991
  "GroupName",
3995
3992
  "Path",
3996
3993
  "ManagedPolicyArns",
3997
3994
  "Policies"
3998
3995
  ])],
3999
- ["AWS::IAM::UserToGroupAddition", new Set(["GroupName", "Users"])]
3996
+ ["AWS::IAM::UserToGroupAddition", /* @__PURE__ */ new Set(["GroupName", "Users"])]
4000
3997
  ]);
4001
3998
  constructor() {
4002
3999
  const awsClients = getAwsClients();
@@ -4880,7 +4877,7 @@ var IAMUserGroupProvider = class {
4880
4877
  var S3BucketProvider = class {
4881
4878
  s3Client;
4882
4879
  logger = getLogger().child("S3BucketProvider");
4883
- handledProperties = new Map([["AWS::S3::Bucket", new Set([
4880
+ handledProperties = /* @__PURE__ */ new Map([["AWS::S3::Bucket", /* @__PURE__ */ new Set([
4884
4881
  "BucketName",
4885
4882
  "VersioningConfiguration",
4886
4883
  "Tags",
@@ -4901,7 +4898,7 @@ var S3BucketProvider = class {
4901
4898
  "ObjectLockConfiguration",
4902
4899
  "ObjectLockEnabled"
4903
4900
  ])]]);
4904
- unhandledByDesign = new Map([["AWS::S3::Bucket", new Map([["AccessControl", "Legacy canned ACL; AWS disables ACLs by default since 2023-04 — use BucketOwnershipControls + BucketPolicy / PublicAccessBlockConfiguration instead"]])]]);
4901
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::S3::Bucket", /* @__PURE__ */ new Map([["AccessControl", "Legacy canned ACL; AWS disables ACLs by default since 2023-04 — use BucketOwnershipControls + BucketPolicy / PublicAccessBlockConfiguration instead"]])]]);
4905
4902
  constructor() {
4906
4903
  const awsClients = getAwsClients();
4907
4904
  this.s3Client = awsClients.s3;
@@ -6460,7 +6457,7 @@ function findTemplateCanonicalUser(awsStmt, templateStmts) {
6460
6457
  var S3BucketPolicyProvider = class {
6461
6458
  s3Client;
6462
6459
  logger = getLogger().child("S3BucketPolicyProvider");
6463
- handledProperties = new Map([["AWS::S3::BucketPolicy", new Set(["Bucket", "PolicyDocument"])]]);
6460
+ handledProperties = /* @__PURE__ */ new Map([["AWS::S3::BucketPolicy", /* @__PURE__ */ new Set(["Bucket", "PolicyDocument"])]]);
6464
6461
  constructor() {
6465
6462
  const awsClients = getAwsClients();
6466
6463
  this.s3Client = awsClients.s3;
@@ -6846,7 +6843,7 @@ var SQSQueueProvider = class {
6846
6843
  sqsClient;
6847
6844
  stsClient;
6848
6845
  logger = getLogger().child("SQSQueueProvider");
6849
- handledProperties = new Map([["AWS::SQS::Queue", new Set([
6846
+ handledProperties = /* @__PURE__ */ new Map([["AWS::SQS::Queue", /* @__PURE__ */ new Set([
6850
6847
  "QueueName",
6851
6848
  "VisibilityTimeout",
6852
6849
  "MaximumMessageSize",
@@ -7189,7 +7186,7 @@ var SQSQueueProvider = class {
7189
7186
  var SQSQueuePolicyProvider = class {
7190
7187
  sqsClient;
7191
7188
  logger = getLogger().child("SQSQueuePolicyProvider");
7192
- handledProperties = new Map([["AWS::SQS::QueuePolicy", new Set(["Queues", "PolicyDocument"])]]);
7189
+ handledProperties = /* @__PURE__ */ new Map([["AWS::SQS::QueuePolicy", /* @__PURE__ */ new Set(["Queues", "PolicyDocument"])]]);
7193
7190
  constructor() {
7194
7191
  const awsClients = getAwsClients();
7195
7192
  this.sqsClient = awsClients.sqs;
@@ -7396,7 +7393,7 @@ function isSqsQueueUrl(value) {
7396
7393
  var SNSTopicProvider = class {
7397
7394
  snsClient;
7398
7395
  logger = getLogger().child("SNSTopicProvider");
7399
- handledProperties = new Map([["AWS::SNS::Topic", new Set([
7396
+ handledProperties = /* @__PURE__ */ new Map([["AWS::SNS::Topic", /* @__PURE__ */ new Set([
7400
7397
  "TopicName",
7401
7398
  "FifoTopic",
7402
7399
  "ContentBasedDeduplication",
@@ -8029,7 +8026,7 @@ function mapDeliveryStatusLogging(attrs, stateCaseMap = /* @__PURE__ */ new Map(
8029
8026
  var SNSSubscriptionProvider = class {
8030
8027
  snsClient;
8031
8028
  logger = getLogger().child("SNSSubscriptionProvider");
8032
- handledProperties = new Map([["AWS::SNS::Subscription", new Set([
8029
+ handledProperties = /* @__PURE__ */ new Map([["AWS::SNS::Subscription", /* @__PURE__ */ new Set([
8033
8030
  "TopicArn",
8034
8031
  "Protocol",
8035
8032
  "Endpoint",
@@ -8041,7 +8038,7 @@ var SNSSubscriptionProvider = class {
8041
8038
  "ReplayPolicy",
8042
8039
  "SubscriptionRoleArn"
8043
8040
  ])]]);
8044
- unhandledByDesign = new Map([["AWS::SNS::Subscription", new Map([["Region", "CFn-only cross-region subscription hint; cdkd uses the SDK client region directly and has no per-resource region override"]])]]);
8041
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::SNS::Subscription", /* @__PURE__ */ new Map([["Region", "CFn-only cross-region subscription hint; cdkd uses the SDK client region directly and has no per-resource region override"]])]]);
8045
8042
  constructor() {
8046
8043
  const awsClients = getAwsClients();
8047
8044
  this.snsClient = awsClients.sns;
@@ -8210,7 +8207,7 @@ var SNSSubscriptionProvider = class {
8210
8207
  */
8211
8208
  var SNSTopicPolicyProvider = class {
8212
8209
  logger = getLogger().child("SNSTopicPolicyProvider");
8213
- handledProperties = new Map([["AWS::SNS::TopicPolicy", new Set(["Topics", "PolicyDocument"])]]);
8210
+ handledProperties = /* @__PURE__ */ new Map([["AWS::SNS::TopicPolicy", /* @__PURE__ */ new Set(["Topics", "PolicyDocument"])]]);
8214
8211
  /**
8215
8212
  * Create an SNS topic policy
8216
8213
  *
@@ -8446,7 +8443,7 @@ var LambdaFunctionProvider = class {
8446
8443
  lambdaClient;
8447
8444
  ec2Client;
8448
8445
  logger = getLogger().child("LambdaFunctionProvider");
8449
- handledProperties = new Map([["AWS::Lambda::Function", new Set([
8446
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Lambda::Function", /* @__PURE__ */ new Set([
8450
8447
  "FunctionName",
8451
8448
  "Code",
8452
8449
  "Role",
@@ -9284,7 +9281,7 @@ var LambdaFunctionProvider = class {
9284
9281
  var LambdaPermissionProvider = class {
9285
9282
  lambdaClient;
9286
9283
  logger = getLogger().child("LambdaPermissionProvider");
9287
- handledProperties = new Map([["AWS::Lambda::Permission", new Set([
9284
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Lambda::Permission", /* @__PURE__ */ new Set([
9288
9285
  "FunctionName",
9289
9286
  "Action",
9290
9287
  "Principal",
@@ -9506,7 +9503,7 @@ var LambdaPermissionProvider = class {
9506
9503
  var LambdaUrlProvider = class {
9507
9504
  lambdaClient;
9508
9505
  logger = getLogger().child("LambdaUrlProvider");
9509
- handledProperties = new Map([["AWS::Lambda::Url", new Set([
9506
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Lambda::Url", /* @__PURE__ */ new Set([
9510
9507
  "TargetFunctionArn",
9511
9508
  "AuthType",
9512
9509
  "Qualifier",
@@ -9757,12 +9754,12 @@ function classifyEventSourceFromProperties(properties) {
9757
9754
  DocumentDBEventSourceConfig: properties["DocumentDBEventSourceConfig"]
9758
9755
  });
9759
9756
  }
9760
- const KINDS_WITH_FUNCTION_RESPONSE_TYPES = new Set([
9757
+ const KINDS_WITH_FUNCTION_RESPONSE_TYPES = /* @__PURE__ */ new Set([
9761
9758
  "sqs",
9762
9759
  "kinesis",
9763
9760
  "dynamodb"
9764
9761
  ]);
9765
- const KINDS_WITH_SOURCE_ACCESS_CONFIGURATIONS = new Set([
9762
+ const KINDS_WITH_SOURCE_ACCESS_CONFIGURATIONS = /* @__PURE__ */ new Set([
9766
9763
  "kafka",
9767
9764
  "mq",
9768
9765
  "documentdb"
@@ -9775,7 +9772,7 @@ const KINDS_WITH_SOURCE_ACCESS_CONFIGURATIONS = new Set([
9775
9772
  * so the removal-on-UPDATE path only restores `0` for these kinds — see the
9776
9773
  * comment at the `MaximumBatchingWindowInSeconds` clear in `update()`.
9777
9774
  */
9778
- const KINDS_WITH_ZERO_BATCHING_WINDOW_DEFAULT = new Set([
9775
+ const KINDS_WITH_ZERO_BATCHING_WINDOW_DEFAULT = /* @__PURE__ */ new Set([
9779
9776
  "sqs",
9780
9777
  "kinesis",
9781
9778
  "dynamodb"
@@ -9788,7 +9785,7 @@ const KINDS_WITH_ZERO_BATCHING_WINDOW_DEFAULT = new Set([
9788
9785
  * removal-on-UPDATE default-restore path is gated on this set (see the numeric
9789
9786
  * restores in `update()`).
9790
9787
  */
9791
- const KINDS_WITH_STREAM_NUMERICS = new Set(["kinesis", "dynamodb"]);
9788
+ const KINDS_WITH_STREAM_NUMERICS = /* @__PURE__ */ new Set(["kinesis", "dynamodb"]);
9792
9789
  /**
9793
9790
  * AWS Lambda Event Source Mapping Provider
9794
9791
  *
@@ -9799,7 +9796,7 @@ const KINDS_WITH_STREAM_NUMERICS = new Set(["kinesis", "dynamodb"]);
9799
9796
  var LambdaEventSourceMappingProvider = class {
9800
9797
  lambdaClient;
9801
9798
  logger = getLogger().child("LambdaEventSourceMappingProvider");
9802
- handledProperties = new Map([["AWS::Lambda::EventSourceMapping", new Set([
9799
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Lambda::EventSourceMapping", /* @__PURE__ */ new Set([
9803
9800
  "FunctionName",
9804
9801
  "EventSourceArn",
9805
9802
  "BatchSize",
@@ -10124,7 +10121,7 @@ var LambdaEventSourceMappingProvider = class {
10124
10121
  var LambdaLayerVersionProvider = class {
10125
10122
  lambdaClient;
10126
10123
  logger = getLogger().child("LambdaLayerVersionProvider");
10127
- handledProperties = new Map([["AWS::Lambda::LayerVersion", new Set([
10124
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Lambda::LayerVersion", /* @__PURE__ */ new Set([
10128
10125
  "LayerName",
10129
10126
  "Content",
10130
10127
  "CompatibleRuntimes",
@@ -10357,7 +10354,7 @@ var LambdaLayerVersionProvider = class {
10357
10354
  var LambdaEventInvokeConfigProvider = class {
10358
10355
  lambdaClient;
10359
10356
  logger = getLogger().child("LambdaEventInvokeConfigProvider");
10360
- handledProperties = new Map([["AWS::Lambda::EventInvokeConfig", new Set([
10357
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Lambda::EventInvokeConfig", /* @__PURE__ */ new Set([
10361
10358
  "FunctionName",
10362
10359
  "Qualifier",
10363
10360
  "MaximumEventAgeInSeconds",
@@ -10569,7 +10566,7 @@ function mapSSESpecification(raw) {
10569
10566
  var DynamoDBTableProvider = class {
10570
10567
  dynamoDBClient;
10571
10568
  logger = getLogger().child("DynamoDBTableProvider");
10572
- handledProperties = new Map([["AWS::DynamoDB::Table", new Set([
10569
+ handledProperties = /* @__PURE__ */ new Map([["AWS::DynamoDB::Table", /* @__PURE__ */ new Set([
10573
10570
  "TableName",
10574
10571
  "KeySchema",
10575
10572
  "AttributeDefinitions",
@@ -10590,7 +10587,7 @@ var DynamoDBTableProvider = class {
10590
10587
  "KinesisStreamSpecification",
10591
10588
  "ContributorInsightsSpecification"
10592
10589
  ])]]);
10593
- unhandledByDesign = new Map([["AWS::DynamoDB::Table", new Map([["ImportSourceSpecification", "S3 import uses the separate ImportTable API (not CreateTable) and is create-only with no readback; deferred to a dedicated import-from-S3 PR"]])]]);
10590
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::DynamoDB::Table", /* @__PURE__ */ new Map([["ImportSourceSpecification", "S3 import uses the separate ImportTable API (not CreateTable) and is create-only with no readback; deferred to a dedicated import-from-S3 PR"]])]]);
10594
10591
  constructor() {
10595
10592
  const awsClients = getAwsClients();
10596
10593
  this.dynamoDBClient = awsClients.dynamoDB;
@@ -11510,7 +11507,7 @@ var DynamoDBGlobalTableProvider = class {
11510
11507
  * UpdateTable success.
11511
11508
  */
11512
11509
  attributeCache = /* @__PURE__ */ new Map();
11513
- handledProperties = new Map([["AWS::DynamoDB::GlobalTable", new Set([
11510
+ handledProperties = /* @__PURE__ */ new Map([["AWS::DynamoDB::GlobalTable", /* @__PURE__ */ new Set([
11514
11511
  "TableName",
11515
11512
  "KeySchema",
11516
11513
  "AttributeDefinitions",
@@ -12842,7 +12839,7 @@ var LogsLogGroupProvider = class {
12842
12839
  logsClient;
12843
12840
  stsClient;
12844
12841
  logger = getLogger().child("LogsLogGroupProvider");
12845
- handledProperties = new Map([["AWS::Logs::LogGroup", new Set([
12842
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Logs::LogGroup", /* @__PURE__ */ new Set([
12846
12843
  "LogGroupName",
12847
12844
  "KmsKeyId",
12848
12845
  "RetentionInDays",
@@ -13234,7 +13231,7 @@ var LogsLogGroupProvider = class {
13234
13231
  var CloudWatchAlarmProvider = class {
13235
13232
  cloudWatchClient;
13236
13233
  logger = getLogger().child("CloudWatchAlarmProvider");
13237
- handledProperties = new Map([["AWS::CloudWatch::Alarm", new Set([
13234
+ handledProperties = /* @__PURE__ */ new Map([["AWS::CloudWatch::Alarm", /* @__PURE__ */ new Set([
13238
13235
  "AlarmName",
13239
13236
  "ComparisonOperator",
13240
13237
  "EvaluationPeriods",
@@ -13272,7 +13269,7 @@ var CloudWatchAlarmProvider = class {
13272
13269
  * SDK create input OR the CDK L1 is not backfillable), they are classified
13273
13270
  * unhandled-by-design rather than left as a "not yet implemented" TODO.
13274
13271
  */
13275
- unhandledByDesign = new Map([["AWS::CloudWatch::Alarm", new Map([["EvaluationCriteria", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."], ["EvaluationInterval", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."]])]]);
13272
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::CloudWatch::Alarm", /* @__PURE__ */ new Map([["EvaluationCriteria", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."], ["EvaluationInterval", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."]])]]);
13276
13273
  constructor() {
13277
13274
  const awsClients = getAwsClients();
13278
13275
  this.cloudWatchClient = awsClients.cloudWatch;
@@ -13576,7 +13573,7 @@ var CloudWatchAlarmProvider = class {
13576
13573
  var SecretsManagerSecretProvider = class {
13577
13574
  smClient;
13578
13575
  logger = getLogger().child("SecretsManagerSecretProvider");
13579
- handledProperties = new Map([["AWS::SecretsManager::Secret", new Set([
13576
+ handledProperties = /* @__PURE__ */ new Map([["AWS::SecretsManager::Secret", /* @__PURE__ */ new Set([
13580
13577
  "Name",
13581
13578
  "GenerateSecretString",
13582
13579
  "SecretString",
@@ -13858,7 +13855,7 @@ var SecretsManagerSecretProvider = class {
13858
13855
  var SSMParameterProvider = class {
13859
13856
  ssmClient;
13860
13857
  logger = getLogger().child("SSMParameterProvider");
13861
- handledProperties = new Map([["AWS::SSM::Parameter", new Set([
13858
+ handledProperties = /* @__PURE__ */ new Map([["AWS::SSM::Parameter", /* @__PURE__ */ new Set([
13862
13859
  "Name",
13863
13860
  "Type",
13864
13861
  "Value",
@@ -14169,7 +14166,7 @@ var SSMParameterProvider = class {
14169
14166
  var EventBridgeRuleProvider = class {
14170
14167
  eventBridgeClient;
14171
14168
  logger = getLogger().child("EventBridgeRuleProvider");
14172
- handledProperties = new Map([["AWS::Events::Rule", new Set([
14169
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Events::Rule", /* @__PURE__ */ new Set([
14173
14170
  "Name",
14174
14171
  "Description",
14175
14172
  "EventBusName",
@@ -14564,7 +14561,7 @@ function sanitizeDeadLetterConfig(value) {
14564
14561
  var EventBridgeBusProvider = class {
14565
14562
  eventBridgeClient;
14566
14563
  logger = getLogger().child("EventBridgeBusProvider");
14567
- handledProperties = new Map([["AWS::Events::EventBus", new Set([
14564
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Events::EventBus", /* @__PURE__ */ new Set([
14568
14565
  "Name",
14569
14566
  "Tags",
14570
14567
  "EventSourceName",
@@ -14817,24 +14814,24 @@ var EventBridgeBusProvider = class {
14817
14814
  var EC2Provider = class {
14818
14815
  ec2Client;
14819
14816
  logger = getLogger().child("EC2Provider");
14820
- handledProperties = new Map([
14821
- ["AWS::EC2::VPC", new Set([
14817
+ handledProperties = /* @__PURE__ */ new Map([
14818
+ ["AWS::EC2::VPC", /* @__PURE__ */ new Set([
14822
14819
  "CidrBlock",
14823
14820
  "InstanceTenancy",
14824
14821
  "EnableDnsHostnames",
14825
14822
  "EnableDnsSupport",
14826
14823
  "Tags"
14827
14824
  ])],
14828
- ["AWS::EC2::Subnet", new Set([
14825
+ ["AWS::EC2::Subnet", /* @__PURE__ */ new Set([
14829
14826
  "VpcId",
14830
14827
  "CidrBlock",
14831
14828
  "AvailabilityZone",
14832
14829
  "MapPublicIpOnLaunch",
14833
14830
  "Tags"
14834
14831
  ])],
14835
- ["AWS::EC2::InternetGateway", new Set(["Tags"])],
14836
- ["AWS::EC2::VPCGatewayAttachment", new Set(["VpcId", "InternetGatewayId"])],
14837
- ["AWS::EC2::NatGateway", new Set([
14832
+ ["AWS::EC2::InternetGateway", /* @__PURE__ */ new Set(["Tags"])],
14833
+ ["AWS::EC2::VPCGatewayAttachment", /* @__PURE__ */ new Set(["VpcId", "InternetGatewayId"])],
14834
+ ["AWS::EC2::NatGateway", /* @__PURE__ */ new Set([
14838
14835
  "AllocationId",
14839
14836
  "SubnetId",
14840
14837
  "ConnectivityType",
@@ -14845,8 +14842,8 @@ var EC2Provider = class {
14845
14842
  "MaxDrainDurationSeconds",
14846
14843
  "Tags"
14847
14844
  ])],
14848
- ["AWS::EC2::RouteTable", new Set(["VpcId", "Tags"])],
14849
- ["AWS::EC2::Route", new Set([
14845
+ ["AWS::EC2::RouteTable", /* @__PURE__ */ new Set(["VpcId", "Tags"])],
14846
+ ["AWS::EC2::Route", /* @__PURE__ */ new Set([
14850
14847
  "RouteTableId",
14851
14848
  "DestinationCidrBlock",
14852
14849
  "DestinationIpv6CidrBlock",
@@ -14857,8 +14854,8 @@ var EC2Provider = class {
14857
14854
  "NetworkInterfaceId",
14858
14855
  "VpcPeeringConnectionId"
14859
14856
  ])],
14860
- ["AWS::EC2::SubnetRouteTableAssociation", new Set(["SubnetId", "RouteTableId"])],
14861
- ["AWS::EC2::SecurityGroup", new Set([
14857
+ ["AWS::EC2::SubnetRouteTableAssociation", /* @__PURE__ */ new Set(["SubnetId", "RouteTableId"])],
14858
+ ["AWS::EC2::SecurityGroup", /* @__PURE__ */ new Set([
14862
14859
  "GroupDescription",
14863
14860
  "GroupName",
14864
14861
  "VpcId",
@@ -14866,7 +14863,7 @@ var EC2Provider = class {
14866
14863
  "SecurityGroupEgress",
14867
14864
  "Tags"
14868
14865
  ])],
14869
- ["AWS::EC2::SecurityGroupIngress", new Set([
14866
+ ["AWS::EC2::SecurityGroupIngress", /* @__PURE__ */ new Set([
14870
14867
  "GroupId",
14871
14868
  "IpProtocol",
14872
14869
  "FromPort",
@@ -14878,7 +14875,7 @@ var EC2Provider = class {
14878
14875
  "SourceSecurityGroupOwnerId",
14879
14876
  "SourcePrefixListId"
14880
14877
  ])],
14881
- ["AWS::EC2::Instance", new Set([
14878
+ ["AWS::EC2::Instance", /* @__PURE__ */ new Set([
14882
14879
  "ImageId",
14883
14880
  "InstanceType",
14884
14881
  "KeyName",
@@ -14895,8 +14892,8 @@ var EC2Provider = class {
14895
14892
  "EbsOptimized",
14896
14893
  "CreditSpecification"
14897
14894
  ])],
14898
- ["AWS::EC2::NetworkAcl", new Set(["VpcId", "Tags"])],
14899
- ["AWS::EC2::NetworkAclEntry", new Set([
14895
+ ["AWS::EC2::NetworkAcl", /* @__PURE__ */ new Set(["VpcId", "Tags"])],
14896
+ ["AWS::EC2::NetworkAclEntry", /* @__PURE__ */ new Set([
14900
14897
  "NetworkAclId",
14901
14898
  "RuleNumber",
14902
14899
  "Protocol",
@@ -14907,12 +14904,12 @@ var EC2Provider = class {
14907
14904
  "PortRange",
14908
14905
  "Icmp"
14909
14906
  ])],
14910
- ["AWS::EC2::SubnetNetworkAclAssociation", new Set(["SubnetId", "NetworkAclId"])]
14907
+ ["AWS::EC2::SubnetNetworkAclAssociation", /* @__PURE__ */ new Set(["SubnetId", "NetworkAclId"])]
14911
14908
  ]);
14912
- unhandledByDesign = new Map([
14913
- ["AWS::EC2::Instance", new Map([["ElasticGpuSpecifications", "AWS Elastic GPU end-of-life (announced 2023-11); no replacement API"], ["ElasticInferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])],
14914
- ["AWS::EC2::SecurityGroupIngress", new Map([["GroupName", "EC2-Classic-only — use GroupId for VPC security groups (EC2-Classic retired 2022-08-15)"], ["SourceSecurityGroupName", "EC2-Classic-only — use SourceSecurityGroupId for VPC peer security groups (EC2-Classic retired 2022-08-15)"]])],
14915
- ["AWS::EC2::NatGateway", new Map([["VpcId", "AWS derives the VPC from SubnetId; the ec2:CreateNatGateway API has no VpcId parameter"]])]
14909
+ unhandledByDesign = /* @__PURE__ */ new Map([
14910
+ ["AWS::EC2::Instance", /* @__PURE__ */ new Map([["ElasticGpuSpecifications", "AWS Elastic GPU end-of-life (announced 2023-11); no replacement API"], ["ElasticInferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])],
14911
+ ["AWS::EC2::SecurityGroupIngress", /* @__PURE__ */ new Map([["GroupName", "EC2-Classic-only — use GroupId for VPC security groups (EC2-Classic retired 2022-08-15)"], ["SourceSecurityGroupName", "EC2-Classic-only — use SourceSecurityGroupId for VPC peer security groups (EC2-Classic retired 2022-08-15)"]])],
14912
+ ["AWS::EC2::NatGateway", /* @__PURE__ */ new Map([["VpcId", "AWS derives the VPC from SubnetId; the ec2:CreateNatGateway API has no VpcId parameter"]])]
14916
14913
  ]);
14917
14914
  constructor() {
14918
14915
  const awsClients = getAwsClients();
@@ -17283,9 +17280,9 @@ function isDefaultEgressRule(rule) {
17283
17280
  var ApiGatewayProvider = class ApiGatewayProvider {
17284
17281
  apiGatewayClient;
17285
17282
  logger = getLogger().child("ApiGatewayProvider");
17286
- handledProperties = new Map([
17287
- ["AWS::ApiGateway::Account", new Set(["CloudWatchRoleArn"])],
17288
- ["AWS::ApiGateway::Authorizer", new Set([
17283
+ handledProperties = /* @__PURE__ */ new Map([
17284
+ ["AWS::ApiGateway::Account", /* @__PURE__ */ new Set(["CloudWatchRoleArn"])],
17285
+ ["AWS::ApiGateway::Authorizer", /* @__PURE__ */ new Set([
17289
17286
  "RestApiId",
17290
17287
  "Name",
17291
17288
  "Type",
@@ -17297,13 +17294,13 @@ var ApiGatewayProvider = class ApiGatewayProvider {
17297
17294
  "IdentityValidationExpression",
17298
17295
  "AuthorizerResultTtlInSeconds"
17299
17296
  ])],
17300
- ["AWS::ApiGateway::Resource", new Set([
17297
+ ["AWS::ApiGateway::Resource", /* @__PURE__ */ new Set([
17301
17298
  "RestApiId",
17302
17299
  "ParentId",
17303
17300
  "PathPart"
17304
17301
  ])],
17305
- ["AWS::ApiGateway::Deployment", new Set(["RestApiId", "Description"])],
17306
- ["AWS::ApiGateway::Stage", new Set([
17302
+ ["AWS::ApiGateway::Deployment", /* @__PURE__ */ new Set(["RestApiId", "Description"])],
17303
+ ["AWS::ApiGateway::Stage", /* @__PURE__ */ new Set([
17307
17304
  "RestApiId",
17308
17305
  "StageName",
17309
17306
  "DeploymentId",
@@ -17313,7 +17310,7 @@ var ApiGatewayProvider = class ApiGatewayProvider {
17313
17310
  "Variables",
17314
17311
  "MethodSettings"
17315
17312
  ])],
17316
- ["AWS::ApiGateway::Method", new Set([
17313
+ ["AWS::ApiGateway::Method", /* @__PURE__ */ new Set([
17317
17314
  "RestApiId",
17318
17315
  "ResourceId",
17319
17316
  "HttpMethod",
@@ -17329,7 +17326,7 @@ var ApiGatewayProvider = class ApiGatewayProvider {
17329
17326
  "MethodResponses"
17330
17327
  ])]
17331
17328
  ]);
17332
- unhandledByDesign = new Map([["AWS::ApiGateway::Deployment", new Map([["StageName", "CFn-only convenience for inline-creating a Stage from a Deployment; declare AWS::ApiGateway::Stage explicitly to attach to this Deployment"], ["StageDescription", "CFn-only convenience for inline-creating a Stage; declare AWS::ApiGateway::Stage with the Description property instead"]])]]);
17329
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::ApiGateway::Deployment", /* @__PURE__ */ new Map([["StageName", "CFn-only convenience for inline-creating a Stage from a Deployment; declare AWS::ApiGateway::Stage explicitly to attach to this Deployment"], ["StageDescription", "CFn-only convenience for inline-creating a Stage; declare AWS::ApiGateway::Stage with the Description property instead"]])]]);
17333
17330
  /** Maximum number of retries for IAM propagation delays */
17334
17331
  static MAX_IAM_RETRIES = 3;
17335
17332
  /** Delay between IAM propagation retries (ms) - exponential backoff */
@@ -18623,8 +18620,8 @@ var ApiGatewayV2Provider = class {
18623
18620
  client;
18624
18621
  providerRegion = process.env["AWS_REGION"];
18625
18622
  logger = getLogger().child("ApiGatewayV2Provider");
18626
- handledProperties = new Map([
18627
- ["AWS::ApiGatewayV2::Api", new Set([
18623
+ handledProperties = /* @__PURE__ */ new Map([
18624
+ ["AWS::ApiGatewayV2::Api", /* @__PURE__ */ new Set([
18628
18625
  "Name",
18629
18626
  "ProtocolType",
18630
18627
  "Description",
@@ -18636,7 +18633,7 @@ var ApiGatewayV2Provider = class {
18636
18633
  "ApiKeySelectionExpression",
18637
18634
  "IpAddressType"
18638
18635
  ])],
18639
- ["AWS::ApiGatewayV2::Stage", new Set([
18636
+ ["AWS::ApiGatewayV2::Stage", /* @__PURE__ */ new Set([
18640
18637
  "ApiId",
18641
18638
  "StageName",
18642
18639
  "AutoDeploy",
@@ -18645,7 +18642,7 @@ var ApiGatewayV2Provider = class {
18645
18642
  "StageVariables",
18646
18643
  "DefaultRouteSettings"
18647
18644
  ])],
18648
- ["AWS::ApiGatewayV2::Integration", new Set([
18645
+ ["AWS::ApiGatewayV2::Integration", /* @__PURE__ */ new Set([
18649
18646
  "ApiId",
18650
18647
  "IntegrationType",
18651
18648
  "IntegrationUri",
@@ -18655,7 +18652,7 @@ var ApiGatewayV2Provider = class {
18655
18652
  "RequestParameters",
18656
18653
  "Description"
18657
18654
  ])],
18658
- ["AWS::ApiGatewayV2::Route", new Set([
18655
+ ["AWS::ApiGatewayV2::Route", /* @__PURE__ */ new Set([
18659
18656
  "ApiId",
18660
18657
  "RouteKey",
18661
18658
  "Target",
@@ -18664,7 +18661,7 @@ var ApiGatewayV2Provider = class {
18664
18661
  "AuthorizationScopes",
18665
18662
  "OperationName"
18666
18663
  ])],
18667
- ["AWS::ApiGatewayV2::Authorizer", new Set([
18664
+ ["AWS::ApiGatewayV2::Authorizer", /* @__PURE__ */ new Set([
18668
18665
  "ApiId",
18669
18666
  "AuthorizerType",
18670
18667
  "Name",
@@ -18690,7 +18687,7 @@ var ApiGatewayV2Provider = class {
18690
18687
  * Wiring them would require parsing OpenAPI semantics + a different
18691
18688
  * mutation surface and is out of scope for the SDK-Provider safety net.
18692
18689
  */
18693
- unhandledByDesign = new Map([["AWS::ApiGatewayV2::Api", new Map([
18690
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::ApiGatewayV2::Api", /* @__PURE__ */ new Map([
18694
18691
  ["Body", "OpenAPI/Swagger inline spec; routed through ImportApi, not the field-by-field CreateApi path."],
18695
18692
  ["BodyS3Location", "OpenAPI/Swagger spec on S3; routed through ImportApi, not the field-by-field CreateApi path."],
18696
18693
  ["FailOnWarnings", "OpenAPI-import-only flag; meaningful only on the ImportApi code path."],
@@ -19536,7 +19533,7 @@ var ApiGatewayV2Provider = class {
19536
19533
  var CloudFrontOAIProvider = class {
19537
19534
  cloudFrontClient;
19538
19535
  logger = getLogger().child("CloudFrontOAIProvider");
19539
- handledProperties = new Map([["AWS::CloudFront::CloudFrontOriginAccessIdentity", new Set(["CloudFrontOriginAccessIdentityConfig"])]]);
19536
+ handledProperties = /* @__PURE__ */ new Map([["AWS::CloudFront::CloudFrontOriginAccessIdentity", /* @__PURE__ */ new Set(["CloudFrontOriginAccessIdentityConfig"])]]);
19540
19537
  constructor() {
19541
19538
  const awsClients = getAwsClients();
19542
19539
  this.cloudFrontClient = awsClients.cloudFront;
@@ -19760,7 +19757,7 @@ const CACHE_BEHAVIOR_QUANTITY_FIELDS = [
19760
19757
  var CloudFrontDistributionProvider = class {
19761
19758
  cloudFrontClient;
19762
19759
  logger = getLogger().child("CloudFrontDistributionProvider");
19763
- handledProperties = new Map([["AWS::CloudFront::Distribution", new Set(["DistributionConfig", "Tags"])]]);
19760
+ handledProperties = /* @__PURE__ */ new Map([["AWS::CloudFront::Distribution", /* @__PURE__ */ new Set(["DistributionConfig", "Tags"])]]);
19764
19761
  constructor() {
19765
19762
  const awsClients = getAwsClients();
19766
19763
  this.cloudFrontClient = awsClients.cloudFront;
@@ -20460,7 +20457,7 @@ function camelToPascalCaseKeys(value, preserveKeys) {
20460
20457
  var AgentCoreRuntimeProvider = class {
20461
20458
  client;
20462
20459
  logger = getLogger().child("AgentCoreRuntimeProvider");
20463
- handledProperties = new Map([["AWS::BedrockAgentCore::Runtime", new Set([
20460
+ handledProperties = /* @__PURE__ */ new Map([["AWS::BedrockAgentCore::Runtime", /* @__PURE__ */ new Set([
20464
20461
  "AgentRuntimeName",
20465
20462
  "RoleArn",
20466
20463
  "AgentRuntimeArtifact",
@@ -20695,7 +20692,7 @@ const DEFAULT_BROWSER_ID = "aws.browser.v1";
20695
20692
  var AgentCoreBrowserProvider = class {
20696
20693
  client;
20697
20694
  logger = getLogger().child("AgentCoreBrowserProvider");
20698
- handledProperties = new Map([["AWS::BedrockAgentCore::Browser", /* @__PURE__ */ new Set([])]]);
20695
+ handledProperties = /* @__PURE__ */ new Map([["AWS::BedrockAgentCore::Browser", /* @__PURE__ */ new Set([])]]);
20699
20696
  constructor() {
20700
20697
  const awsClients = getAwsClients();
20701
20698
  this.client = awsClients.bedrockAgentCoreControl;
@@ -20810,7 +20807,7 @@ const DEFAULT_CODE_INTERPRETER_ID = "aws.codeinterpreter.v1";
20810
20807
  var AgentCoreCodeInterpreterProvider = class {
20811
20808
  client;
20812
20809
  logger = getLogger().child("AgentCoreCodeInterpreterProvider");
20813
- handledProperties = new Map([["AWS::BedrockAgentCore::CodeInterpreter", /* @__PURE__ */ new Set([])]]);
20810
+ handledProperties = /* @__PURE__ */ new Map([["AWS::BedrockAgentCore::CodeInterpreter", /* @__PURE__ */ new Set([])]]);
20814
20811
  constructor() {
20815
20812
  const awsClients = getAwsClients();
20816
20813
  this.client = awsClients.bedrockAgentCoreControl;
@@ -20928,8 +20925,8 @@ var AgentCoreCodeInterpreterProvider = class {
20928
20925
  * The `EvaluatorConfig` subtree keys whose values are free-form JSON
20929
20926
  * documents (user/model-defined keys) that must NOT be case-converted.
20930
20927
  */
20931
- const CFN_PRESERVE_KEYS = new Set(["AdditionalModelRequestFields"]);
20932
- const SDK_PRESERVE_KEYS = new Set(["additionalModelRequestFields"]);
20928
+ const CFN_PRESERVE_KEYS = /* @__PURE__ */ new Set(["AdditionalModelRequestFields"]);
20929
+ const SDK_PRESERVE_KEYS = /* @__PURE__ */ new Set(["additionalModelRequestFields"]);
20933
20930
  /**
20934
20931
  * Extract the evaluator ID from an evaluator ARN
20935
20932
  * (`arn:...:evaluator/<id>` → `<id>`). Falls back to the input verbatim
@@ -20960,7 +20957,7 @@ function tagMapToCfnList(tags) {
20960
20957
  var AgentCoreEvaluatorProvider = class {
20961
20958
  client;
20962
20959
  logger = getLogger().child("AgentCoreEvaluatorProvider");
20963
- handledProperties = new Map([["AWS::BedrockAgentCore::Evaluator", new Set([
20960
+ handledProperties = /* @__PURE__ */ new Map([["AWS::BedrockAgentCore::Evaluator", /* @__PURE__ */ new Set([
20964
20961
  "EvaluatorName",
20965
20962
  "Description",
20966
20963
  "EvaluatorConfig",
@@ -21171,7 +21168,7 @@ var StepFunctionsProvider = class {
21171
21168
  s3Client;
21172
21169
  providerRegion = process.env["AWS_REGION"];
21173
21170
  logger = getLogger().child("StepFunctionsProvider");
21174
- handledProperties = new Map([["AWS::StepFunctions::StateMachine", new Set([
21171
+ handledProperties = /* @__PURE__ */ new Map([["AWS::StepFunctions::StateMachine", /* @__PURE__ */ new Set([
21175
21172
  "StateMachineName",
21176
21173
  "RoleArn",
21177
21174
  "StateMachineType",
@@ -21653,8 +21650,8 @@ var ECSProvider = class {
21653
21650
  ecsClient;
21654
21651
  providerRegion = process.env["AWS_REGION"];
21655
21652
  logger = getLogger().child("ECSProvider");
21656
- handledProperties = new Map([
21657
- ["AWS::ECS::Cluster", new Set([
21653
+ handledProperties = /* @__PURE__ */ new Map([
21654
+ ["AWS::ECS::Cluster", /* @__PURE__ */ new Set([
21658
21655
  "ClusterName",
21659
21656
  "CapacityProviders",
21660
21657
  "DefaultCapacityProviderStrategy",
@@ -21663,7 +21660,7 @@ var ECSProvider = class {
21663
21660
  "ServiceConnectDefaults",
21664
21661
  "Tags"
21665
21662
  ])],
21666
- ["AWS::ECS::TaskDefinition", new Set([
21663
+ ["AWS::ECS::TaskDefinition", /* @__PURE__ */ new Set([
21667
21664
  "Family",
21668
21665
  "ContainerDefinitions",
21669
21666
  "Cpu",
@@ -21682,7 +21679,7 @@ var ECSProvider = class {
21682
21679
  "EnableFaultInjection",
21683
21680
  "Tags"
21684
21681
  ])],
21685
- ["AWS::ECS::Service", new Set([
21682
+ ["AWS::ECS::Service", /* @__PURE__ */ new Set([
21686
21683
  "Cluster",
21687
21684
  "ServiceName",
21688
21685
  "TaskDefinition",
@@ -21704,7 +21701,7 @@ var ECSProvider = class {
21704
21701
  "Tags"
21705
21702
  ])]
21706
21703
  ]);
21707
- unhandledByDesign = new Map([["AWS::ECS::Service", new Map([["Role", "Legacy classic-ELB service-linked-role override; AWS uses the AWSServiceRoleForECS service-linked role automatically since 2017"]])], ["AWS::ECS::TaskDefinition", new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])]]);
21704
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::ECS::Service", /* @__PURE__ */ new Map([["Role", "Legacy classic-ELB service-linked-role override; AWS uses the AWSServiceRoleForECS service-linked role automatically since 2017"]])], ["AWS::ECS::TaskDefinition", /* @__PURE__ */ new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])]]);
21708
21705
  getClient() {
21709
21706
  if (!this.ecsClient) this.ecsClient = new ECSClient(this.providerRegion ? { region: this.providerRegion } : {});
21710
21707
  return this.ecsClient;
@@ -22704,8 +22701,8 @@ var ELBv2Provider = class {
22704
22701
  elbv2Client;
22705
22702
  providerRegion = process.env["AWS_REGION"];
22706
22703
  logger = getLogger().child("ELBv2Provider");
22707
- handledProperties = new Map([
22708
- ["AWS::ElasticLoadBalancingV2::LoadBalancer", new Set([
22704
+ handledProperties = /* @__PURE__ */ new Map([
22705
+ ["AWS::ElasticLoadBalancingV2::LoadBalancer", /* @__PURE__ */ new Set([
22709
22706
  "Name",
22710
22707
  "Subnets",
22711
22708
  "SubnetMappings",
@@ -22716,7 +22713,7 @@ var ELBv2Provider = class {
22716
22713
  "LoadBalancerAttributes",
22717
22714
  "Tags"
22718
22715
  ])],
22719
- ["AWS::ElasticLoadBalancingV2::TargetGroup", new Set([
22716
+ ["AWS::ElasticLoadBalancingV2::TargetGroup", /* @__PURE__ */ new Set([
22720
22717
  "Protocol",
22721
22718
  "Port",
22722
22719
  "VpcId",
@@ -22734,7 +22731,7 @@ var ELBv2Provider = class {
22734
22731
  "Name",
22735
22732
  "Tags"
22736
22733
  ])],
22737
- ["AWS::ElasticLoadBalancingV2::Listener", new Set([
22734
+ ["AWS::ElasticLoadBalancingV2::Listener", /* @__PURE__ */ new Set([
22738
22735
  "LoadBalancerArn",
22739
22736
  "Certificates",
22740
22737
  "DefaultActions",
@@ -22829,7 +22826,7 @@ var ELBv2Provider = class {
22829
22826
  }
22830
22827
  }
22831
22828
  async updateLoadBalancer(logicalId, physicalId, _resourceType, properties, previousProperties) {
22832
- const handledKeys = new Set([
22829
+ const handledKeys = /* @__PURE__ */ new Set([
22833
22830
  "LoadBalancerAttributes",
22834
22831
  "Subnets",
22835
22832
  "SubnetMappings",
@@ -23463,14 +23460,14 @@ var RDSProvider = class {
23463
23460
  rdsClient;
23464
23461
  providerRegion = process.env["AWS_REGION"];
23465
23462
  logger = getLogger().child("RDSProvider");
23466
- handledProperties = new Map([
23467
- ["AWS::RDS::DBSubnetGroup", new Set([
23463
+ handledProperties = /* @__PURE__ */ new Map([
23464
+ ["AWS::RDS::DBSubnetGroup", /* @__PURE__ */ new Set([
23468
23465
  "DBSubnetGroupName",
23469
23466
  "DBSubnetGroupDescription",
23470
23467
  "SubnetIds",
23471
23468
  "Tags"
23472
23469
  ])],
23473
- ["AWS::RDS::DBCluster", new Set([
23470
+ ["AWS::RDS::DBCluster", /* @__PURE__ */ new Set([
23474
23471
  "DBClusterIdentifier",
23475
23472
  "Engine",
23476
23473
  "EngineVersion",
@@ -23493,7 +23490,7 @@ var RDSProvider = class {
23493
23490
  "EnableIAMDatabaseAuthentication",
23494
23491
  "PubliclyAccessible"
23495
23492
  ])],
23496
- ["AWS::RDS::DBInstance", new Set([
23493
+ ["AWS::RDS::DBInstance", /* @__PURE__ */ new Set([
23497
23494
  "DBInstanceIdentifier",
23498
23495
  "DBInstanceClass",
23499
23496
  "Engine",
@@ -23517,7 +23514,7 @@ var RDSProvider = class {
23517
23514
  "EnableIAMDatabaseAuthentication"
23518
23515
  ])]
23519
23516
  ]);
23520
- unhandledByDesign = new Map([["AWS::RDS::DBCluster", new Map([["DeleteAutomatedBackups", "cdkd hardcodes SkipFinalSnapshot=true on destroy; this CFn lifecycle flag has no equivalent on the runtime path"]])], ["AWS::RDS::DBInstance", new Map([
23517
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::RDS::DBCluster", /* @__PURE__ */ new Map([["DeleteAutomatedBackups", "cdkd hardcodes SkipFinalSnapshot=true on destroy; this CFn lifecycle flag has no equivalent on the runtime path"]])], ["AWS::RDS::DBInstance", /* @__PURE__ */ new Map([
23521
23518
  ["DBSecurityGroups", "EC2-Classic-only feature retired by AWS (2022-08-15); new accounts cannot use this — use VPCSecurityGroups instead"],
23522
23519
  ["ApplyImmediately", "cdkd always applies modifications immediately (rds:ModifyDBInstance.ApplyImmediately=true is hardcoded); users wanting maintenance-window deferral should run aws rds modify-db-instance directly"],
23523
23520
  ["DeleteAutomatedBackups", "cdkd hardcodes SkipFinalSnapshot=true on destroy; this CFn lifecycle flag has no equivalent on the runtime path"]
@@ -24282,7 +24279,7 @@ var RDSDBProxyProvider = class {
24282
24279
  providerRegion = process.env["AWS_REGION"];
24283
24280
  logger = getLogger().child("RDSDBProxyProvider");
24284
24281
  attributeCache = /* @__PURE__ */ new Map();
24285
- handledProperties = new Map([["AWS::RDS::DBProxy", new Set([
24282
+ handledProperties = /* @__PURE__ */ new Map([["AWS::RDS::DBProxy", /* @__PURE__ */ new Set([
24286
24283
  "DBProxyName",
24287
24284
  "EngineFamily",
24288
24285
  "Auth",
@@ -24639,7 +24636,7 @@ var RDSDBProxyEndpointProvider = class {
24639
24636
  providerRegion = process.env["AWS_REGION"];
24640
24637
  logger = getLogger().child("RDSDBProxyEndpointProvider");
24641
24638
  attributeCache = /* @__PURE__ */ new Map();
24642
- handledProperties = new Map([["AWS::RDS::DBProxyEndpoint", new Set([
24639
+ handledProperties = /* @__PURE__ */ new Map([["AWS::RDS::DBProxyEndpoint", /* @__PURE__ */ new Set([
24643
24640
  "DBProxyEndpointName",
24644
24641
  "DBProxyName",
24645
24642
  "VpcSubnetIds",
@@ -24968,7 +24965,7 @@ var RDSDBProxyTargetGroupProvider = class {
24968
24965
  rdsClient;
24969
24966
  providerRegion = process.env["AWS_REGION"];
24970
24967
  logger = getLogger().child("RDSDBProxyTargetGroupProvider");
24971
- handledProperties = new Map([["AWS::RDS::DBProxyTargetGroup", new Set([
24968
+ handledProperties = /* @__PURE__ */ new Map([["AWS::RDS::DBProxyTargetGroup", /* @__PURE__ */ new Set([
24972
24969
  "DBProxyName",
24973
24970
  "TargetGroupName",
24974
24971
  "DBClusterIdentifiers",
@@ -25252,14 +25249,14 @@ var DocDBProvider = class {
25252
25249
  docdbClient;
25253
25250
  providerRegion = process.env["AWS_REGION"];
25254
25251
  logger = getLogger().child("DocDBProvider");
25255
- handledProperties = new Map([
25256
- ["AWS::DocDB::DBSubnetGroup", new Set([
25252
+ handledProperties = /* @__PURE__ */ new Map([
25253
+ ["AWS::DocDB::DBSubnetGroup", /* @__PURE__ */ new Set([
25257
25254
  "DBSubnetGroupName",
25258
25255
  "DBSubnetGroupDescription",
25259
25256
  "SubnetIds",
25260
25257
  "Tags"
25261
25258
  ])],
25262
- ["AWS::DocDB::DBCluster", new Set([
25259
+ ["AWS::DocDB::DBCluster", /* @__PURE__ */ new Set([
25263
25260
  "DBClusterIdentifier",
25264
25261
  "EngineVersion",
25265
25262
  "MasterUsername",
@@ -25276,7 +25273,7 @@ var DocDBProvider = class {
25276
25273
  "DeletionProtection",
25277
25274
  "Tags"
25278
25275
  ])],
25279
- ["AWS::DocDB::DBInstance", new Set([
25276
+ ["AWS::DocDB::DBInstance", /* @__PURE__ */ new Set([
25280
25277
  "DBInstanceIdentifier",
25281
25278
  "DBInstanceClass",
25282
25279
  "DBClusterIdentifier",
@@ -25914,14 +25911,14 @@ var NeptuneProvider = class {
25914
25911
  neptuneClient;
25915
25912
  providerRegion = process.env["AWS_REGION"];
25916
25913
  logger = getLogger().child("NeptuneProvider");
25917
- handledProperties = new Map([
25918
- ["AWS::Neptune::DBSubnetGroup", new Set([
25914
+ handledProperties = /* @__PURE__ */ new Map([
25915
+ ["AWS::Neptune::DBSubnetGroup", /* @__PURE__ */ new Set([
25919
25916
  "DBSubnetGroupName",
25920
25917
  "DBSubnetGroupDescription",
25921
25918
  "SubnetIds",
25922
25919
  "Tags"
25923
25920
  ])],
25924
- ["AWS::Neptune::DBCluster", new Set([
25921
+ ["AWS::Neptune::DBCluster", /* @__PURE__ */ new Set([
25925
25922
  "DBClusterIdentifier",
25926
25923
  "EngineVersion",
25927
25924
  "DBPort",
@@ -25938,7 +25935,7 @@ var NeptuneProvider = class {
25938
25935
  "DeletionProtection",
25939
25936
  "Tags"
25940
25937
  ])],
25941
- ["AWS::Neptune::DBInstance", new Set([
25938
+ ["AWS::Neptune::DBInstance", /* @__PURE__ */ new Set([
25942
25939
  "DBInstanceIdentifier",
25943
25940
  "DBInstanceClass",
25944
25941
  "DBClusterIdentifier",
@@ -26572,14 +26569,14 @@ var Route53Provider = class {
26572
26569
  route53Client;
26573
26570
  providerRegion = process.env["AWS_REGION"];
26574
26571
  logger = getLogger().child("Route53Provider");
26575
- handledProperties = new Map([["AWS::Route53::HostedZone", new Set([
26572
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Route53::HostedZone", /* @__PURE__ */ new Set([
26576
26573
  "Name",
26577
26574
  "HostedZoneConfig",
26578
26575
  "HostedZoneTags",
26579
26576
  "VPCs",
26580
26577
  "QueryLoggingConfig",
26581
26578
  "HostedZoneFeatures"
26582
- ])], ["AWS::Route53::RecordSet", new Set([
26579
+ ])], ["AWS::Route53::RecordSet", /* @__PURE__ */ new Set([
26583
26580
  "HostedZoneId",
26584
26581
  "HostedZoneName",
26585
26582
  "Name",
@@ -26790,7 +26787,7 @@ var Route53Provider = class {
26790
26787
  }
26791
26788
  };
26792
26789
  const deadline = Date.now() + timeoutMs;
26793
- const TERMINAL_FAILED = new Set(["ENABLE_FAILED", "DISABLE_FAILED"]);
26790
+ const TERMINAL_FAILED = /* @__PURE__ */ new Set(["ENABLE_FAILED", "DISABLE_FAILED"]);
26794
26791
  const waitFor = async (targets, label) => {
26795
26792
  while (Date.now() < deadline) {
26796
26793
  const status = await readStatus();
@@ -26811,7 +26808,7 @@ var Route53Provider = class {
26811
26808
  if (TERMINAL_FAILED.has(current)) throw new ProvisioningError(`Cannot delete hosted zone ${logicalId} (${physicalId}): AcceleratedRecoveryStatus is '${current}' — operator must resolve before destroy can proceed`, "AWS::Route53::HostedZone", logicalId, physicalId);
26812
26809
  if (current === "ENABLING" || current === "ENABLING_HOSTED_ZONE_LOCKED") {
26813
26810
  this.logger.debug(`Hosted zone ${physicalId} is ${current} (an enabling phase); waiting for it to settle before issuing disable`);
26814
- current = await waitFor(new Set(["ENABLED", "DISABLED"]), "ENABLED or DISABLED");
26811
+ current = await waitFor(/* @__PURE__ */ new Set(["ENABLED", "DISABLED"]), "ENABLED or DISABLED");
26815
26812
  if (current === void 0 || current === "DISABLED") return;
26816
26813
  }
26817
26814
  if (current === "ENABLED") {
@@ -26821,7 +26818,7 @@ var Route53Provider = class {
26821
26818
  EnableAcceleratedRecovery: false
26822
26819
  }));
26823
26820
  } else if (current === "DISABLING" || current === "DISABLING_HOSTED_ZONE_LOCKED") this.logger.debug(`Hosted zone ${physicalId} AcceleratedRecovery is already ${current} (a disabling phase); waiting for settle`);
26824
- const settled = await waitFor(new Set(["DISABLED"]), "DISABLED");
26821
+ const settled = await waitFor(/* @__PURE__ */ new Set(["DISABLED"]), "DISABLED");
26825
26822
  this.logger.debug(`Hosted zone ${physicalId} AcceleratedRecoveryStatus settled to ${settled ?? "undefined (zone gone)"}`);
26826
26823
  }
26827
26824
  async getHostedZoneAttribute(physicalId, attributeName) {
@@ -27328,7 +27325,7 @@ var Route53Provider = class {
27328
27325
  * error (surfaced as a ProvisioningError, never a silent drop), so the failure
27329
27326
  * is loud and the fix is to append the new name here.
27330
27327
  */
27331
- const STANDARD_USER_POOL_ATTRIBUTES = new Set([
27328
+ const STANDARD_USER_POOL_ATTRIBUTES = /* @__PURE__ */ new Set([
27332
27329
  "address",
27333
27330
  "birthdate",
27334
27331
  "email",
@@ -27464,7 +27461,7 @@ var CognitoUserPoolProvider = class {
27464
27461
  cognitoClient;
27465
27462
  providerRegion = process.env["AWS_REGION"];
27466
27463
  logger = getLogger().child("CognitoUserPoolProvider");
27467
- handledProperties = new Map([["AWS::Cognito::UserPool", new Set([
27464
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Cognito::UserPool", /* @__PURE__ */ new Set([
27468
27465
  "UserPoolName",
27469
27466
  "AutoVerifiedAttributes",
27470
27467
  "UsernameAttributes",
@@ -27495,7 +27492,7 @@ var CognitoUserPoolProvider = class {
27495
27492
  "WebAuthnRelyingPartyID",
27496
27493
  "WebAuthnUserVerification"
27497
27494
  ])]]);
27498
- unhandledByDesign = new Map([["AWS::Cognito::UserPool", new Map([["WebAuthnFactorConfiguration", "No SDK wire path: @aws-sdk/client-cognito-identity-provider has no field accepting SINGLE_FACTOR | MULTI_FACTOR_WITH_USER_VERIFICATION (not on CreateUserPool/UpdateUserPool, nor SetUserPoolMfaConfig.WebAuthnConfiguration which only carries RelyingPartyId/UserVerification); CC-API-registry-only property"]])]]);
27495
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::Cognito::UserPool", /* @__PURE__ */ new Map([["WebAuthnFactorConfiguration", "No SDK wire path: @aws-sdk/client-cognito-identity-provider has no field accepting SINGLE_FACTOR | MULTI_FACTOR_WITH_USER_VERIFICATION (not on CreateUserPool/UpdateUserPool, nor SetUserPoolMfaConfig.WebAuthnConfiguration which only carries RelyingPartyId/UserVerification); CC-API-registry-only property"]])]]);
27499
27496
  getClient() {
27500
27497
  if (!this.cognitoClient) this.cognitoClient = new CognitoIdentityProviderClient(this.providerRegion ? { region: this.providerRegion } : {});
27501
27498
  return this.cognitoClient;
@@ -27900,13 +27897,13 @@ var ElastiCacheProvider = class {
27900
27897
  cachedAccountId;
27901
27898
  providerRegion = process.env["AWS_REGION"];
27902
27899
  logger = getLogger().child("ElastiCacheProvider");
27903
- handledProperties = new Map([["AWS::ElastiCache::SubnetGroup", new Set([
27900
+ handledProperties = /* @__PURE__ */ new Map([["AWS::ElastiCache::SubnetGroup", /* @__PURE__ */ new Set([
27904
27901
  "CacheSubnetGroupName",
27905
27902
  "CacheSubnetGroupDescription",
27906
27903
  "Description",
27907
27904
  "SubnetIds",
27908
27905
  "Tags"
27909
- ])], ["AWS::ElastiCache::CacheCluster", new Set([
27906
+ ])], ["AWS::ElastiCache::CacheCluster", /* @__PURE__ */ new Set([
27910
27907
  "ClusterName",
27911
27908
  "Engine",
27912
27909
  "CacheNodeType",
@@ -27931,7 +27928,7 @@ var ElastiCacheProvider = class {
27931
27928
  "IpDiscovery",
27932
27929
  "TransitEncryptionEnabled"
27933
27930
  ])]]);
27934
- unhandledByDesign = new Map([["AWS::ElastiCache::CacheCluster", new Map([["CacheSecurityGroupNames", "EC2-Classic-only — use VpcSecurityGroupIds for VPC-deployed clusters (EC2-Classic retired 2022-08-15)"]])]]);
27931
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::ElastiCache::CacheCluster", /* @__PURE__ */ new Map([["CacheSecurityGroupNames", "EC2-Classic-only — use VpcSecurityGroupIds for VPC-deployed clusters (EC2-Classic retired 2022-08-15)"]])]]);
27935
27932
  getClient() {
27936
27933
  if (!this.client) this.client = new ElastiCacheClient(this.providerRegion ? { region: this.providerRegion } : {});
27937
27934
  return this.client;
@@ -28430,26 +28427,26 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
28430
28427
  stsClient;
28431
28428
  providerRegion = process.env["AWS_REGION"];
28432
28429
  logger = getLogger().child("ServiceDiscoveryProvider");
28433
- handledProperties = new Map([
28434
- ["AWS::ServiceDiscovery::PrivateDnsNamespace", new Set([
28430
+ handledProperties = /* @__PURE__ */ new Map([
28431
+ ["AWS::ServiceDiscovery::PrivateDnsNamespace", /* @__PURE__ */ new Set([
28435
28432
  "Name",
28436
28433
  "Vpc",
28437
28434
  "Description",
28438
28435
  "Tags",
28439
28436
  "Properties"
28440
28437
  ])],
28441
- ["AWS::ServiceDiscovery::HttpNamespace", new Set([
28438
+ ["AWS::ServiceDiscovery::HttpNamespace", /* @__PURE__ */ new Set([
28442
28439
  "Name",
28443
28440
  "Description",
28444
28441
  "Tags"
28445
28442
  ])],
28446
- ["AWS::ServiceDiscovery::PublicDnsNamespace", new Set([
28443
+ ["AWS::ServiceDiscovery::PublicDnsNamespace", /* @__PURE__ */ new Set([
28447
28444
  "Name",
28448
28445
  "Description",
28449
28446
  "Tags",
28450
28447
  "Properties"
28451
28448
  ])],
28452
- ["AWS::ServiceDiscovery::Service", new Set([
28449
+ ["AWS::ServiceDiscovery::Service", /* @__PURE__ */ new Set([
28453
28450
  "Name",
28454
28451
  "NamespaceId",
28455
28452
  "DnsConfig",
@@ -29264,20 +29261,20 @@ var AppSyncProvider = class {
29264
29261
  * and the old entry simply becomes unreachable.
29265
29262
  */
29266
29263
  arnCache = /* @__PURE__ */ new Map();
29267
- handledProperties = new Map([
29268
- ["AWS::AppSync::GraphQLApi", new Set([
29264
+ handledProperties = /* @__PURE__ */ new Map([
29265
+ ["AWS::AppSync::GraphQLApi", /* @__PURE__ */ new Set([
29269
29266
  "Name",
29270
29267
  "AuthenticationType",
29271
29268
  "XrayEnabled",
29272
29269
  "LogConfig",
29273
29270
  "Tags"
29274
29271
  ])],
29275
- ["AWS::AppSync::GraphQLSchema", new Set([
29272
+ ["AWS::AppSync::GraphQLSchema", /* @__PURE__ */ new Set([
29276
29273
  "ApiId",
29277
29274
  "Definition",
29278
29275
  "DefinitionS3Location"
29279
29276
  ])],
29280
- ["AWS::AppSync::DataSource", new Set([
29277
+ ["AWS::AppSync::DataSource", /* @__PURE__ */ new Set([
29281
29278
  "ApiId",
29282
29279
  "Name",
29283
29280
  "Type",
@@ -29287,7 +29284,7 @@ var AppSyncProvider = class {
29287
29284
  "LambdaConfig",
29288
29285
  "HttpConfig"
29289
29286
  ])],
29290
- ["AWS::AppSync::Resolver", new Set([
29287
+ ["AWS::AppSync::Resolver", /* @__PURE__ */ new Set([
29291
29288
  "ApiId",
29292
29289
  "TypeName",
29293
29290
  "FieldName",
@@ -29299,13 +29296,13 @@ var AppSyncProvider = class {
29299
29296
  "Runtime",
29300
29297
  "Code"
29301
29298
  ])],
29302
- ["AWS::AppSync::ApiKey", new Set([
29299
+ ["AWS::AppSync::ApiKey", /* @__PURE__ */ new Set([
29303
29300
  "ApiId",
29304
29301
  "Description",
29305
29302
  "Expires"
29306
29303
  ])]
29307
29304
  ]);
29308
- unhandledByDesign = new Map([["AWS::AppSync::DataSource", new Map([["ElasticsearchConfig", "Legacy Elasticsearch alias; use OpenSearchServiceConfig (AppSync deprecated the Elasticsearch DataSource type in favor of OpenSearch)"]])]]);
29305
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::AppSync::DataSource", /* @__PURE__ */ new Map([["ElasticsearchConfig", "Legacy Elasticsearch alias; use OpenSearchServiceConfig (AppSync deprecated the Elasticsearch DataSource type in favor of OpenSearch)"]])]]);
29309
29306
  getClient() {
29310
29307
  if (!this.client) this.client = new AppSyncClient(this.providerRegion ? { region: this.providerRegion } : {});
29311
29308
  return this.client;
@@ -30171,11 +30168,11 @@ var GlueProvider = class {
30171
30168
  cachedAccountId;
30172
30169
  providerRegion = process.env["AWS_REGION"];
30173
30170
  logger = getLogger().child("GlueProvider");
30174
- handledProperties = new Map([["AWS::Glue::Database", new Set([
30171
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Database", /* @__PURE__ */ new Set([
30175
30172
  "DatabaseInput",
30176
30173
  "DatabaseName",
30177
30174
  "CatalogId"
30178
- ])], ["AWS::Glue::Table", new Set([
30175
+ ])], ["AWS::Glue::Table", /* @__PURE__ */ new Set([
30179
30176
  "DatabaseName",
30180
30177
  "TableInput",
30181
30178
  "Name",
@@ -30665,7 +30662,7 @@ var GlueWorkflowProvider = class {
30665
30662
  cachedAccountId;
30666
30663
  providerRegion = process.env["AWS_REGION"];
30667
30664
  logger = getLogger().child("GlueWorkflowProvider");
30668
- handledProperties = new Map([["AWS::Glue::Workflow", new Set([
30665
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Workflow", /* @__PURE__ */ new Set([
30669
30666
  "Name",
30670
30667
  "Description",
30671
30668
  "DefaultRunProperties",
@@ -30843,7 +30840,7 @@ var GlueSecurityConfigurationProvider = class {
30843
30840
  client;
30844
30841
  providerRegion = process.env["AWS_REGION"];
30845
30842
  logger = getLogger().child("GlueSecurityConfigurationProvider");
30846
- handledProperties = new Map([["AWS::Glue::SecurityConfiguration", new Set(["Name", "EncryptionConfiguration"])]]);
30843
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::SecurityConfiguration", /* @__PURE__ */ new Set(["Name", "EncryptionConfiguration"])]]);
30847
30844
  getClient() {
30848
30845
  if (!this.client) this.client = new GlueClient(this.providerRegion ? { region: this.providerRegion } : {});
30849
30846
  return this.client;
@@ -31066,7 +31063,7 @@ var GlueJobProvider = class {
31066
31063
  cachedAccountId;
31067
31064
  providerRegion = process.env["AWS_REGION"];
31068
31065
  logger = getLogger().child("GlueJobProvider");
31069
- handledProperties = new Map([["AWS::Glue::Job", new Set([
31066
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Job", /* @__PURE__ */ new Set([
31070
31067
  "Name",
31071
31068
  "Role",
31072
31069
  "Command",
@@ -31372,7 +31369,7 @@ var GlueCrawlerProvider = class {
31372
31369
  cachedAccountId;
31373
31370
  providerRegion = process.env["AWS_REGION"];
31374
31371
  logger = getLogger().child("GlueCrawlerProvider");
31375
- handledProperties = new Map([["AWS::Glue::Crawler", new Set([
31372
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Crawler", /* @__PURE__ */ new Set([
31376
31373
  "Name",
31377
31374
  "Role",
31378
31375
  "Targets",
@@ -31609,7 +31606,7 @@ var GlueConnectionProvider = class {
31609
31606
  client;
31610
31607
  providerRegion = process.env["AWS_REGION"];
31611
31608
  logger = getLogger().child("GlueConnectionProvider");
31612
- handledProperties = new Map([["AWS::Glue::Connection", new Set(["ConnectionInput", "CatalogId"])]]);
31609
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Connection", /* @__PURE__ */ new Set(["ConnectionInput", "CatalogId"])]]);
31613
31610
  getClient() {
31614
31611
  if (!this.client) this.client = new GlueClient(this.providerRegion ? { region: this.providerRegion } : {});
31615
31612
  return this.client;
@@ -31759,7 +31756,7 @@ var GlueTriggerProvider = class {
31759
31756
  cachedAccountId;
31760
31757
  providerRegion = process.env["AWS_REGION"];
31761
31758
  logger = getLogger().child("GlueTriggerProvider");
31762
- handledProperties = new Map([["AWS::Glue::Trigger", new Set([
31759
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Trigger", /* @__PURE__ */ new Set([
31763
31760
  "Name",
31764
31761
  "Type",
31765
31762
  "Schedule",
@@ -31975,7 +31972,7 @@ var KMSProvider = class {
31975
31972
  client;
31976
31973
  providerRegion = process.env["AWS_REGION"];
31977
31974
  logger = getLogger().child("KMSProvider");
31978
- handledProperties = new Map([["AWS::KMS::Key", new Set([
31975
+ handledProperties = /* @__PURE__ */ new Map([["AWS::KMS::Key", /* @__PURE__ */ new Set([
31979
31976
  "Description",
31980
31977
  "KeyPolicy",
31981
31978
  "KeySpec",
@@ -31988,7 +31985,7 @@ var KMSProvider = class {
31988
31985
  "RotationPeriodInDays",
31989
31986
  "Origin",
31990
31987
  "BypassPolicyLockoutSafetyCheck"
31991
- ])], ["AWS::KMS::Alias", new Set(["AliasName", "TargetKeyId"])]]);
31988
+ ])], ["AWS::KMS::Alias", /* @__PURE__ */ new Set(["AliasName", "TargetKeyId"])]]);
31992
31989
  getClient() {
31993
31990
  if (!this.client) this.client = new KMSClient(this.providerRegion ? { region: this.providerRegion } : {});
31994
31991
  return this.client;
@@ -32442,7 +32439,7 @@ var BudgetsBudgetProvider = class {
32442
32439
  providerRegion = process.env["AWS_REGION"];
32443
32440
  logger = getLogger().child("BudgetsBudgetProvider");
32444
32441
  accountIdPromise;
32445
- handledProperties = new Map([["AWS::Budgets::Budget", new Set([
32442
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Budgets::Budget", /* @__PURE__ */ new Set([
32446
32443
  "Budget",
32447
32444
  "NotificationsWithSubscribers",
32448
32445
  "ResourceTags"
@@ -32916,7 +32913,7 @@ var KinesisStreamProvider = class {
32916
32913
  client;
32917
32914
  providerRegion = process.env["AWS_REGION"];
32918
32915
  logger = getLogger().child("KinesisProvider");
32919
- handledProperties = new Map([["AWS::Kinesis::Stream", new Set([
32916
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Kinesis::Stream", /* @__PURE__ */ new Set([
32920
32917
  "Name",
32921
32918
  "StreamModeDetails",
32922
32919
  "ShardCount",
@@ -33288,7 +33285,7 @@ var KinesisStreamConsumerProvider = class {
33288
33285
  client;
33289
33286
  providerRegion = process.env["AWS_REGION"];
33290
33287
  logger = getLogger().child("KinesisStreamConsumerProvider");
33291
- handledProperties = new Map([["AWS::Kinesis::StreamConsumer", new Set([
33288
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Kinesis::StreamConsumer", /* @__PURE__ */ new Set([
33292
33289
  "ConsumerName",
33293
33290
  "StreamARN",
33294
33291
  "Tags"
@@ -33555,7 +33552,7 @@ var SchedulerScheduleProvider = class {
33555
33552
  client;
33556
33553
  providerRegion = process.env["AWS_REGION"];
33557
33554
  logger = getLogger().child("SchedulerScheduleProvider");
33558
- handledProperties = new Map([["AWS::Scheduler::Schedule", new Set([
33555
+ handledProperties = /* @__PURE__ */ new Map([["AWS::Scheduler::Schedule", /* @__PURE__ */ new Set([
33559
33556
  "Name",
33560
33557
  "GroupName",
33561
33558
  "Description",
@@ -33750,8 +33747,8 @@ var EFSProvider = class {
33750
33747
  client;
33751
33748
  providerRegion = process.env["AWS_REGION"];
33752
33749
  logger = getLogger().child("EFSProvider");
33753
- handledProperties = new Map([
33754
- ["AWS::EFS::FileSystem", new Set([
33750
+ handledProperties = /* @__PURE__ */ new Map([
33751
+ ["AWS::EFS::FileSystem", /* @__PURE__ */ new Set([
33755
33752
  "FileSystemTags",
33756
33753
  "Encrypted",
33757
33754
  "KmsKeyId",
@@ -33765,19 +33762,19 @@ var EFSProvider = class {
33765
33762
  "BypassPolicyLockoutSafetyCheck",
33766
33763
  "FileSystemProtection"
33767
33764
  ])],
33768
- ["AWS::EFS::MountTarget", new Set([
33765
+ ["AWS::EFS::MountTarget", /* @__PURE__ */ new Set([
33769
33766
  "FileSystemId",
33770
33767
  "SubnetId",
33771
33768
  "SecurityGroups"
33772
33769
  ])],
33773
- ["AWS::EFS::AccessPoint", new Set([
33770
+ ["AWS::EFS::AccessPoint", /* @__PURE__ */ new Set([
33774
33771
  "FileSystemId",
33775
33772
  "PosixUser",
33776
33773
  "RootDirectory",
33777
33774
  "AccessPointTags"
33778
33775
  ])]
33779
33776
  ]);
33780
- unhandledByDesign = new Map([["AWS::EFS::FileSystem", new Map([["ReplicationConfiguration", "Cross-region EFS replication (CreateReplicationConfiguration) provisions a separate destination file system in another region with its own lifecycle, KMS key, and availability-zone placement; replicating + then tearing down the destination on destroy is a multi-resource, cross-region orchestration that is out of scope for the single-resource SDK provider. Tracked as a follow-up to issue #609."]])], ["AWS::EFS::AccessPoint", new Map([["ClientToken", "AWS SDK manages this idempotency token internally on CreateAccessPoint; no user-supplied value is honored"]])]]);
33777
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::EFS::FileSystem", /* @__PURE__ */ new Map([["ReplicationConfiguration", "Cross-region EFS replication (CreateReplicationConfiguration) provisions a separate destination file system in another region with its own lifecycle, KMS key, and availability-zone placement; replicating + then tearing down the destination on destroy is a multi-resource, cross-region orchestration that is out of scope for the single-resource SDK provider. Tracked as a follow-up to issue #609."]])], ["AWS::EFS::AccessPoint", /* @__PURE__ */ new Map([["ClientToken", "AWS SDK manages this idempotency token internally on CreateAccessPoint; no user-supplied value is honored"]])]]);
33781
33778
  getClient() {
33782
33779
  if (!this.client) this.client = new EFSClient(this.providerRegion ? { region: this.providerRegion } : {});
33783
33780
  return this.client;
@@ -34420,7 +34417,7 @@ const DEFAULT_POLL_INTERVAL_MS$1 = 15e3;
34420
34417
  * subset of the CFn `LustreConfiguration` block). Everything else in the
34421
34418
  * block is fixed at creation — FSx has no API to change it in place.
34422
34419
  */
34423
- const LUSTRE_MUTABLE_SUBPROPS = new Set([
34420
+ const LUSTRE_MUTABLE_SUBPROPS = /* @__PURE__ */ new Set([
34424
34421
  "WeeklyMaintenanceStartTime",
34425
34422
  "DailyAutomaticBackupStartTime",
34426
34423
  "AutomaticBackupRetentionDays",
@@ -34432,6 +34429,94 @@ const LUSTRE_MUTABLE_SUBPROPS = new Set([
34432
34429
  "DataReadCacheConfiguration"
34433
34430
  ]);
34434
34431
  /**
34432
+ * `WindowsConfiguration` sub-properties `UpdateFileSystem` accepts (the
34433
+ * mutable subset — mirrors `UpdateFileSystemWindowsConfiguration`).
34434
+ * Everything else in the CFn block (ActiveDirectoryId, DeploymentType,
34435
+ * PreferredSubnetId, Aliases, ...) is fixed at creation, so a change on one
34436
+ * is rejected by update() with a `--replace` pointer.
34437
+ */
34438
+ const WINDOWS_MUTABLE_SUBPROPS = /* @__PURE__ */ new Set([
34439
+ "WeeklyMaintenanceStartTime",
34440
+ "DailyAutomaticBackupStartTime",
34441
+ "AutomaticBackupRetentionDays",
34442
+ "ThroughputCapacity",
34443
+ "SelfManagedActiveDirectoryConfiguration",
34444
+ "AuditLogConfiguration",
34445
+ "DiskIopsConfiguration",
34446
+ "FsrmConfiguration"
34447
+ ]);
34448
+ /**
34449
+ * `OntapConfiguration` sub-properties `UpdateFileSystem` accepts (mirrors
34450
+ * `UpdateFileSystemOntapConfiguration`). `RouteTableIds` is mutable but the
34451
+ * API expresses the change as Add/Remove deltas, computed in
34452
+ * {@link FSxFileSystemProvider.applyOntapUpdateField}.
34453
+ */
34454
+ const ONTAP_MUTABLE_SUBPROPS = /* @__PURE__ */ new Set([
34455
+ "AutomaticBackupRetentionDays",
34456
+ "DailyAutomaticBackupStartTime",
34457
+ "FsxAdminPassword",
34458
+ "WeeklyMaintenanceStartTime",
34459
+ "DiskIopsConfiguration",
34460
+ "ThroughputCapacity",
34461
+ "ThroughputCapacityPerHAPair",
34462
+ "HAPairs",
34463
+ "RouteTableIds",
34464
+ "EndpointIpv6AddressRange"
34465
+ ]);
34466
+ /**
34467
+ * `OpenZFSConfiguration` sub-properties `UpdateFileSystem` accepts (mirrors
34468
+ * `UpdateFileSystemOpenZFSConfiguration`). `RouteTableIds` is mutable via
34469
+ * Add/Remove deltas (see {@link FSxFileSystemProvider.applyOpenZFSUpdateField}).
34470
+ * `RootVolumeConfiguration` is NOT here — its fields change through the root
34471
+ * volume's own `UpdateVolume` API, which `UpdateFileSystem` cannot express,
34472
+ * so a change is rejected with a `--replace` pointer.
34473
+ */
34474
+ const OPENZFS_MUTABLE_SUBPROPS = /* @__PURE__ */ new Set([
34475
+ "AutomaticBackupRetentionDays",
34476
+ "CopyTagsToBackups",
34477
+ "CopyTagsToVolumes",
34478
+ "DailyAutomaticBackupStartTime",
34479
+ "ThroughputCapacity",
34480
+ "WeeklyMaintenanceStartTime",
34481
+ "DiskIopsConfiguration",
34482
+ "RouteTableIds",
34483
+ "ReadCacheConfiguration",
34484
+ "EndpointIpv6AddressRange"
34485
+ ]);
34486
+ /**
34487
+ * The four `FileSystemType` values → their CFn variant-config property name.
34488
+ * Each `CreateFileSystem`/`UpdateFileSystem` call carries at most one of
34489
+ * these blocks (the one matching the file system's type).
34490
+ */
34491
+ const VARIANT_CONFIG_KEY = {
34492
+ LUSTRE: "LustreConfiguration",
34493
+ WINDOWS: "WindowsConfiguration",
34494
+ ONTAP: "OntapConfiguration",
34495
+ OPENZFS: "OpenZFSConfiguration"
34496
+ };
34497
+ const VARIANT_MUTABLE_SUBPROPS = {
34498
+ LustreConfiguration: LUSTRE_MUTABLE_SUBPROPS,
34499
+ WindowsConfiguration: WINDOWS_MUTABLE_SUBPROPS,
34500
+ OntapConfiguration: ONTAP_MUTABLE_SUBPROPS,
34501
+ OpenZFSConfiguration: OPENZFS_MUTABLE_SUBPROPS
34502
+ };
34503
+ /**
34504
+ * Compute the Add/Remove route-table-id deltas an ONTAP / OpenZFS
34505
+ * `UpdateFileSystem` needs from the previous vs. next `RouteTableIds` list.
34506
+ * Route table membership is an unordered set, so a pure reorder yields no
34507
+ * delta.
34508
+ */
34509
+ const routeTableDelta = (next, prev) => {
34510
+ const nextIds = new Set(next ?? []);
34511
+ const prevIds = new Set(prev ?? []);
34512
+ const add = [...nextIds].filter((id) => !prevIds.has(id));
34513
+ const remove = [...prevIds].filter((id) => !nextIds.has(id));
34514
+ return {
34515
+ ...add.length > 0 && { add },
34516
+ ...remove.length > 0 && { remove }
34517
+ };
34518
+ };
34519
+ /**
34435
34520
  * Top-level properties that are create-only per the CFn registry schema
34436
34521
  * (`createOnlyProperties`). A change on any of these is routed through
34437
34522
  * DELETE+CREATE by the replacement-detection layer; if a diff somehow
@@ -34457,12 +34542,11 @@ const toBoolean$1 = (v) => {
34457
34542
  * The type is `ProvisioningType: NON_PROVISIONABLE` in the CFn registry,
34458
34543
  * so cdkd's Cloud Control fallback cannot handle it (issue #1042).
34459
34544
  *
34460
- * v1 scope: the **Lustre** variant (the CDK L2, `aws-fsx.LustreFileSystem`).
34461
- * The `WindowsConfiguration` / `OntapConfiguration` / `OpenZFSConfiguration`
34462
- * sub-trees are declared `unhandledByDesign`, so templates using them are
34463
- * rejected by the property-coverage pre-flight instead of silently dropping
34464
- * the whole variant config (each non-Lustre `FileSystemType` REQUIRES its
34465
- * variant block, so no non-Lustre template can slip past the pre-flight).
34545
+ * Supported variants: **Lustre** (the CDK L2 `aws-fsx.LustreFileSystem`),
34546
+ * **Windows** (FSx for Windows File Server), **ONTAP** (FSx for NetApp
34547
+ * ONTAP), and **OpenZFS** (FSx for OpenZFS) each carries its own
34548
+ * `<Variant>Configuration` block, mapped per-variant on create and diffed
34549
+ * against the `UpdateFileSystem` mutable surface on update (issue #1068).
34466
34550
  *
34467
34551
  * Lifecycle handling — every mutation is async on AWS:
34468
34552
  * - `create` → `CreateFileSystem` (or `CreateFileSystemFromBackup` when
@@ -34500,24 +34584,23 @@ var FSxFileSystemProvider = class {
34500
34584
  this.pollIntervalMs = options?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS$1;
34501
34585
  this.maxWaitMs = options?.maxWaitMs ?? DEFAULT_MAX_WAIT_MS$1;
34502
34586
  }
34503
- handledProperties = new Map([["AWS::FSx::FileSystem", new Set([
34587
+ handledProperties = /* @__PURE__ */ new Map([["AWS::FSx::FileSystem", /* @__PURE__ */ new Set([
34504
34588
  "BackupId",
34505
34589
  "FileSystemType",
34506
34590
  "FileSystemTypeVersion",
34507
34591
  "KmsKeyId",
34508
34592
  "LustreConfiguration",
34509
34593
  "NetworkType",
34594
+ "OntapConfiguration",
34595
+ "OpenZFSConfiguration",
34510
34596
  "SecurityGroupIds",
34511
34597
  "StorageCapacity",
34512
34598
  "StorageType",
34513
34599
  "SubnetIds",
34514
- "Tags"
34515
- ])]]);
34516
- unhandledByDesign = new Map([["AWS::FSx::FileSystem", new Map([
34517
- ["WindowsConfiguration", "FSx for Windows File Server variant — requires Active Directory wiring and Windows-specific update/delete semantics (final backups, throughput tiers) that v1 does not implement; only the Lustre variant (the CDK L2) is supported. Follow-up to issue #1042."],
34518
- ["OntapConfiguration", "FSx for NetApp ONTAP variant — the file system is only a container for SVMs/volumes (separate AWS::FSx::StorageVirtualMachine / AWS::FSx::Volume types, both still unsupported), so shipping it alone would be misleading; only the Lustre variant is supported in v1. Follow-up to issue #1042."],
34519
- ["OpenZFSConfiguration", "FSx for OpenZFS variant — root-volume semantics (RootVolumeId, child AWS::FSx::Volume trees) are not implemented in v1; only the Lustre variant is supported. Follow-up to issue #1042."]
34600
+ "Tags",
34601
+ "WindowsConfiguration"
34520
34602
  ])]]);
34603
+ unhandledByDesign = /* @__PURE__ */ new Map();
34521
34604
  getClient() {
34522
34605
  if (!this.client) this.client = new FSxClient(this.providerRegion ? { region: this.providerRegion } : {});
34523
34606
  return this.client;
@@ -34535,7 +34618,7 @@ var FSxFileSystemProvider = class {
34535
34618
  if (resourceType !== "AWS::FSx::FileSystem") throw new ProvisioningError(`Unsupported resource type: ${resourceType}`, resourceType, logicalId);
34536
34619
  const backupId = properties["BackupId"];
34537
34620
  const fileSystemType = properties["FileSystemType"];
34538
- if (backupId === void 0 && fileSystemType !== "LUSTRE") throw new ProvisioningError(`AWS::FSx::FileSystem: FileSystemType '${fileSystemType ?? "(unset)"}' is not supported by cdkd yet only the LUSTRE variant is implemented (issue #1042). Windows / ONTAP / OpenZFS file systems can follow in a later PR.`, resourceType, logicalId);
34621
+ if (backupId === void 0 && !(fileSystemType !== void 0 && fileSystemType in VARIANT_CONFIG_KEY)) throw new ProvisioningError(`AWS::FSx::FileSystem: FileSystemType '${fileSystemType ?? "(unset)"}' is not supported by cdkd — expected one of ${Object.keys(VARIANT_CONFIG_KEY).join(" / ")}.`, resourceType, logicalId);
34539
34622
  this.logger.debug(`Creating FSx FileSystem ${logicalId}`);
34540
34623
  const tokenHash = createHash("sha256").update([
34541
34624
  properties["FileSystemType"],
@@ -34556,6 +34639,9 @@ var FSxFileSystemProvider = class {
34556
34639
  FileSystemTypeVersion: properties["FileSystemTypeVersion"],
34557
34640
  NetworkType: properties["NetworkType"],
34558
34641
  LustreConfiguration: this.toCreateLustreConfiguration(properties["LustreConfiguration"]),
34642
+ WindowsConfiguration: this.toCreateWindowsConfiguration(properties["WindowsConfiguration"]),
34643
+ OntapConfiguration: this.toCreateOntapConfiguration(properties["OntapConfiguration"]),
34644
+ OpenZFSConfiguration: this.toCreateOpenZFSConfiguration(properties["OpenZFSConfiguration"]),
34559
34645
  Tags: tags?.map((t) => ({
34560
34646
  Key: t.Key,
34561
34647
  Value: t.Value
@@ -34626,6 +34712,137 @@ var FSxFileSystemProvider = class {
34626
34712
  } : void 0
34627
34713
  };
34628
34714
  }
34715
+ /** Map the CFn `WindowsConfiguration` block to the SDK create shape. */
34716
+ toCreateWindowsConfiguration(config) {
34717
+ if (!config) return void 0;
34718
+ return {
34719
+ ActiveDirectoryId: config["ActiveDirectoryId"],
34720
+ SelfManagedActiveDirectoryConfiguration: this.toSelfManagedAdConfiguration(config["SelfManagedActiveDirectoryConfiguration"]),
34721
+ DeploymentType: config["DeploymentType"],
34722
+ PreferredSubnetId: config["PreferredSubnetId"],
34723
+ ThroughputCapacity: toNumber$1(config["ThroughputCapacity"]),
34724
+ WeeklyMaintenanceStartTime: config["WeeklyMaintenanceStartTime"],
34725
+ DailyAutomaticBackupStartTime: config["DailyAutomaticBackupStartTime"],
34726
+ AutomaticBackupRetentionDays: toNumber$1(config["AutomaticBackupRetentionDays"]),
34727
+ CopyTagsToBackups: toBoolean$1(config["CopyTagsToBackups"]),
34728
+ Aliases: config["Aliases"],
34729
+ AuditLogConfiguration: this.toWindowsAuditLogConfiguration(config["AuditLogConfiguration"]),
34730
+ DiskIopsConfiguration: this.toDiskIopsConfiguration(config["DiskIopsConfiguration"]),
34731
+ FsrmConfiguration: this.toWindowsFsrmConfiguration(config["FsrmConfiguration"])
34732
+ };
34733
+ }
34734
+ /** Map the CFn `OntapConfiguration` block to the SDK create shape. */
34735
+ toCreateOntapConfiguration(config) {
34736
+ if (!config) return void 0;
34737
+ return {
34738
+ AutomaticBackupRetentionDays: toNumber$1(config["AutomaticBackupRetentionDays"]),
34739
+ DailyAutomaticBackupStartTime: config["DailyAutomaticBackupStartTime"],
34740
+ DeploymentType: config["DeploymentType"],
34741
+ EndpointIpAddressRange: config["EndpointIpAddressRange"],
34742
+ FsxAdminPassword: config["FsxAdminPassword"],
34743
+ DiskIopsConfiguration: this.toDiskIopsConfiguration(config["DiskIopsConfiguration"]),
34744
+ PreferredSubnetId: config["PreferredSubnetId"],
34745
+ RouteTableIds: config["RouteTableIds"],
34746
+ ThroughputCapacity: toNumber$1(config["ThroughputCapacity"]),
34747
+ WeeklyMaintenanceStartTime: config["WeeklyMaintenanceStartTime"],
34748
+ HAPairs: toNumber$1(config["HAPairs"]),
34749
+ ThroughputCapacityPerHAPair: toNumber$1(config["ThroughputCapacityPerHAPair"]),
34750
+ EndpointIpv6AddressRange: config["EndpointIpv6AddressRange"]
34751
+ };
34752
+ }
34753
+ /** Map the CFn `OpenZFSConfiguration` block to the SDK create shape. */
34754
+ toCreateOpenZFSConfiguration(config) {
34755
+ if (!config) return void 0;
34756
+ return {
34757
+ AutomaticBackupRetentionDays: toNumber$1(config["AutomaticBackupRetentionDays"]),
34758
+ CopyTagsToBackups: toBoolean$1(config["CopyTagsToBackups"]),
34759
+ CopyTagsToVolumes: toBoolean$1(config["CopyTagsToVolumes"]),
34760
+ DailyAutomaticBackupStartTime: config["DailyAutomaticBackupStartTime"],
34761
+ DeploymentType: config["DeploymentType"],
34762
+ ThroughputCapacity: toNumber$1(config["ThroughputCapacity"]),
34763
+ WeeklyMaintenanceStartTime: config["WeeklyMaintenanceStartTime"],
34764
+ DiskIopsConfiguration: this.toDiskIopsConfiguration(config["DiskIopsConfiguration"]),
34765
+ RootVolumeConfiguration: this.toOpenZFSRootVolumeConfiguration(config["RootVolumeConfiguration"]),
34766
+ PreferredSubnetId: config["PreferredSubnetId"],
34767
+ EndpointIpAddressRange: config["EndpointIpAddressRange"],
34768
+ EndpointIpv6AddressRange: config["EndpointIpv6AddressRange"],
34769
+ RouteTableIds: config["RouteTableIds"],
34770
+ ReadCacheConfiguration: this.toOpenZFSReadCacheConfiguration(config["ReadCacheConfiguration"])
34771
+ };
34772
+ }
34773
+ toDiskIopsConfiguration(config) {
34774
+ if (!config) return void 0;
34775
+ return {
34776
+ Mode: config["Mode"],
34777
+ Iops: toNumber$1(config["Iops"])
34778
+ };
34779
+ }
34780
+ toSelfManagedAdConfiguration(config) {
34781
+ if (!config) return void 0;
34782
+ return {
34783
+ DomainName: config["DomainName"],
34784
+ OrganizationalUnitDistinguishedName: config["OrganizationalUnitDistinguishedName"],
34785
+ FileSystemAdministratorsGroup: config["FileSystemAdministratorsGroup"],
34786
+ UserName: config["UserName"],
34787
+ Password: config["Password"],
34788
+ DnsIps: config["DnsIps"],
34789
+ DomainJoinServiceAccountSecret: config["DomainJoinServiceAccountSecret"]
34790
+ };
34791
+ }
34792
+ toSelfManagedAdConfigurationUpdates(config) {
34793
+ if (!config) return void 0;
34794
+ return {
34795
+ UserName: config["UserName"],
34796
+ Password: config["Password"],
34797
+ DnsIps: config["DnsIps"],
34798
+ DomainName: config["DomainName"],
34799
+ OrganizationalUnitDistinguishedName: config["OrganizationalUnitDistinguishedName"],
34800
+ FileSystemAdministratorsGroup: config["FileSystemAdministratorsGroup"],
34801
+ DomainJoinServiceAccountSecret: config["DomainJoinServiceAccountSecret"]
34802
+ };
34803
+ }
34804
+ toWindowsAuditLogConfiguration(config) {
34805
+ if (!config) return void 0;
34806
+ return {
34807
+ FileAccessAuditLogLevel: config["FileAccessAuditLogLevel"],
34808
+ FileShareAccessAuditLogLevel: config["FileShareAccessAuditLogLevel"],
34809
+ AuditLogDestination: config["AuditLogDestination"]
34810
+ };
34811
+ }
34812
+ toWindowsFsrmConfiguration(config) {
34813
+ if (!config) return void 0;
34814
+ return {
34815
+ FsrmServiceEnabled: toBoolean$1(config["FsrmServiceEnabled"]),
34816
+ EventLogDestination: config["EventLogDestination"]
34817
+ };
34818
+ }
34819
+ toOpenZFSRootVolumeConfiguration(config) {
34820
+ if (!config) return void 0;
34821
+ const nfsExports = config["NfsExports"];
34822
+ const quotas = config["UserAndGroupQuotas"];
34823
+ return {
34824
+ RecordSizeKiB: toNumber$1(config["RecordSizeKiB"]),
34825
+ DataCompressionType: config["DataCompressionType"],
34826
+ NfsExports: nfsExports?.map((exp) => ({ ClientConfigurations: (exp["ClientConfigurations"] ?? []).map((cc) => ({
34827
+ Clients: cc["Clients"],
34828
+ Options: cc["Options"]
34829
+ })) })),
34830
+ UserAndGroupQuotas: quotas?.map((q) => ({
34831
+ Type: q["Type"],
34832
+ Id: toNumber$1(q["Id"]),
34833
+ StorageCapacityQuotaGiB: toNumber$1(q["StorageCapacityQuotaGiB"])
34834
+ })),
34835
+ CopyTagsToSnapshots: toBoolean$1(config["CopyTagsToSnapshots"]),
34836
+ ReadOnly: toBoolean$1(config["ReadOnly"])
34837
+ };
34838
+ }
34839
+ toOpenZFSReadCacheConfiguration(config) {
34840
+ if (!config) return void 0;
34841
+ return {
34842
+ SizingMode: config["SizingMode"],
34843
+ SizeGiB: toNumber$1(config["SizeGiB"])
34844
+ };
34845
+ }
34629
34846
  async update(logicalId, physicalId, resourceType, properties, previousProperties) {
34630
34847
  const changed = (key) => JSON.stringify(properties[key]) !== JSON.stringify(previousProperties[key]);
34631
34848
  for (const key of TOP_LEVEL_IMMUTABLE_PROPS) {
@@ -34633,55 +34850,17 @@ var FSxFileSystemProvider = class {
34633
34850
  const prev = previousProperties[key];
34634
34851
  if (JSON.stringify(next ?? null) !== JSON.stringify(prev ?? null)) throw new ResourceUpdateNotSupportedError(resourceType, logicalId, `AWS FSx FileSystem ${key} is immutable on AWS — UpdateFileSystem does not accept ${key}; the property is fixed at creation. Re-deploy with cdkd deploy --replace, or destroy + redeploy the stack.`);
34635
34852
  }
34636
- const nextLustre = properties["LustreConfiguration"] ?? {};
34637
- const prevLustre = previousProperties["LustreConfiguration"] ?? {};
34638
- const lustreKeys = new Set([...Object.keys(nextLustre), ...Object.keys(prevLustre)]);
34639
- const lustreMutableDiff = {};
34640
- let lustreHasMutableDiff = false;
34641
- for (const key of lustreKeys) {
34642
- const next = nextLustre[key];
34643
- const prev = prevLustre[key];
34644
- if (JSON.stringify(next) === JSON.stringify(prev)) continue;
34645
- if (!LUSTRE_MUTABLE_SUBPROPS.has(key)) throw new ResourceUpdateNotSupportedError(resourceType, logicalId, `AWS FSx FileSystem LustreConfiguration.${key} is immutable on AWS — UpdateFileSystem cannot change it after creation. Re-deploy with cdkd deploy --replace, or destroy + redeploy the stack.`);
34646
- lustreHasMutableDiff = true;
34647
- switch (key) {
34648
- case "WeeklyMaintenanceStartTime":
34649
- case "DailyAutomaticBackupStartTime":
34650
- lustreMutableDiff[key] = next;
34651
- break;
34652
- case "AutomaticBackupRetentionDays":
34653
- case "PerUnitStorageThroughput":
34654
- case "ThroughputCapacity":
34655
- lustreMutableDiff[key] = toNumber$1(next);
34656
- break;
34657
- case "AutoImportPolicy":
34658
- case "DataCompressionType":
34659
- lustreMutableDiff[key] = next;
34660
- break;
34661
- case "MetadataConfiguration": {
34662
- const metadata = next;
34663
- lustreMutableDiff.MetadataConfiguration = metadata ? {
34664
- Mode: metadata["Mode"],
34665
- Iops: toNumber$1(metadata["Iops"])
34666
- } : void 0;
34667
- break;
34668
- }
34669
- case "DataReadCacheConfiguration": {
34670
- const readCache = next;
34671
- lustreMutableDiff.DataReadCacheConfiguration = readCache ? {
34672
- SizingMode: readCache["SizingMode"],
34673
- SizeGiB: toNumber$1(readCache["SizeGiB"])
34674
- } : void 0;
34675
- break;
34676
- }
34677
- }
34678
- }
34853
+ const variantConfigKey = this.detectVariantConfigKey(properties, previousProperties);
34854
+ const { diff: variantDiff, hasMutableDiff: variantHasMutableDiff } = variantConfigKey ? this.computeVariantConfigDiff(resourceType, logicalId, variantConfigKey, properties[variantConfigKey] ?? {}, previousProperties[variantConfigKey] ?? {}) : {
34855
+ diff: {},
34856
+ hasMutableDiff: false
34857
+ };
34679
34858
  const storageCapacityChanged = changed("StorageCapacity");
34680
34859
  const storageTypeChanged = changed("StorageType");
34681
34860
  const typeVersionChanged = changed("FileSystemTypeVersion");
34682
34861
  const networkTypeChanged = changed("NetworkType");
34683
34862
  const tagsChanged = changed("Tags");
34684
- if (!lustreHasMutableDiff && !storageCapacityChanged && !storageTypeChanged && !typeVersionChanged && !networkTypeChanged && !tagsChanged) {
34863
+ if (!variantHasMutableDiff && !storageCapacityChanged && !storageTypeChanged && !typeVersionChanged && !networkTypeChanged && !tagsChanged) {
34685
34864
  this.logger.debug(`No mutable diff for FSx FileSystem ${logicalId}, skipping update`);
34686
34865
  return {
34687
34866
  physicalId,
@@ -34690,7 +34869,7 @@ var FSxFileSystemProvider = class {
34690
34869
  }
34691
34870
  this.logger.debug(`Updating FSx FileSystem ${logicalId}: ${physicalId}`);
34692
34871
  try {
34693
- const needsUpdateCall = lustreHasMutableDiff || storageCapacityChanged || storageTypeChanged || typeVersionChanged || networkTypeChanged;
34872
+ const needsUpdateCall = variantHasMutableDiff || storageCapacityChanged || storageTypeChanged || typeVersionChanged || networkTypeChanged;
34694
34873
  let updatedFs;
34695
34874
  if (needsUpdateCall) {
34696
34875
  const callTimeMs = Date.now();
@@ -34700,7 +34879,7 @@ var FSxFileSystemProvider = class {
34700
34879
  ...storageTypeChanged && { StorageType: properties["StorageType"] },
34701
34880
  ...typeVersionChanged && { FileSystemTypeVersion: properties["FileSystemTypeVersion"] },
34702
34881
  ...networkTypeChanged && { NetworkType: properties["NetworkType"] },
34703
- ...lustreHasMutableDiff && { LustreConfiguration: lustreMutableDiff }
34882
+ ...variantHasMutableDiff && variantConfigKey ? { [variantConfigKey]: variantDiff } : {}
34704
34883
  }))).FileSystem?.AdministrativeActions ?? []).filter((a) => a.AdministrativeActionType === "FILE_SYSTEM_UPDATE" && (a.Status === "PENDING" || a.Status === "IN_PROGRESS"));
34705
34884
  const requestTimes = respPendingActions.map((a) => a.RequestTime?.getTime()).filter((t) => t !== void 0);
34706
34885
  const actionThresholdMs = requestTimes.length > 0 ? Math.min(...requestTimes) : callTimeMs - 6e4;
@@ -34725,6 +34904,156 @@ var FSxFileSystemProvider = class {
34725
34904
  }
34726
34905
  }
34727
34906
  /**
34907
+ * Which `<Variant>Configuration` block (if any) is present on either side
34908
+ * of the update. At most one is expected — the file system's type never
34909
+ * changes (FileSystemType is registry-createOnly, guarded above).
34910
+ */
34911
+ detectVariantConfigKey(properties, previousProperties) {
34912
+ for (const key of Object.values(VARIANT_CONFIG_KEY)) if (properties[key] !== void 0 || previousProperties[key] !== void 0) return key;
34913
+ }
34914
+ /**
34915
+ * Diff a variant config block's sub-properties into the SDK
34916
+ * `UpdateFileSystem<Variant>Configuration` shape. A changed sub-field that
34917
+ * is NOT in the variant's mutable set is rejected with a `--replace`
34918
+ * pointer (UpdateFileSystem cannot express it).
34919
+ */
34920
+ computeVariantConfigDiff(resourceType, logicalId, configKey, next, prev) {
34921
+ const mutable = VARIANT_MUTABLE_SUBPROPS[configKey] ?? /* @__PURE__ */ new Set();
34922
+ const keys = /* @__PURE__ */ new Set([...Object.keys(next), ...Object.keys(prev)]);
34923
+ const diff = {};
34924
+ let hasMutableDiff = false;
34925
+ for (const key of keys) {
34926
+ const nextVal = next[key];
34927
+ const prevVal = prev[key];
34928
+ if (JSON.stringify(nextVal) === JSON.stringify(prevVal)) continue;
34929
+ if (!mutable.has(key)) throw new ResourceUpdateNotSupportedError(resourceType, logicalId, `AWS FSx FileSystem ${configKey}.${key} is immutable on AWS — UpdateFileSystem cannot change it after creation. Re-deploy with cdkd deploy --replace, or destroy + redeploy the stack.`);
34930
+ if (configKey === "LustreConfiguration" ? this.applyLustreUpdateField(key, nextVal, diff) : configKey === "WindowsConfiguration" ? this.applyWindowsUpdateField(key, nextVal, diff) : configKey === "OntapConfiguration" ? this.applyOntapUpdateField(key, nextVal, prevVal, diff) : this.applyOpenZFSUpdateField(key, nextVal, prevVal, diff)) hasMutableDiff = true;
34931
+ }
34932
+ return {
34933
+ diff,
34934
+ hasMutableDiff
34935
+ };
34936
+ }
34937
+ applyLustreUpdateField(key, next, diff) {
34938
+ const out = diff;
34939
+ switch (key) {
34940
+ case "WeeklyMaintenanceStartTime":
34941
+ case "DailyAutomaticBackupStartTime":
34942
+ diff[key] = next;
34943
+ break;
34944
+ case "AutomaticBackupRetentionDays":
34945
+ case "PerUnitStorageThroughput":
34946
+ case "ThroughputCapacity":
34947
+ diff[key] = toNumber$1(next);
34948
+ break;
34949
+ case "AutoImportPolicy":
34950
+ case "DataCompressionType":
34951
+ diff[key] = next;
34952
+ break;
34953
+ case "MetadataConfiguration": {
34954
+ const metadata = next;
34955
+ out.MetadataConfiguration = metadata ? {
34956
+ Mode: metadata["Mode"],
34957
+ Iops: toNumber$1(metadata["Iops"])
34958
+ } : void 0;
34959
+ break;
34960
+ }
34961
+ case "DataReadCacheConfiguration": {
34962
+ const readCache = next;
34963
+ out.DataReadCacheConfiguration = readCache ? {
34964
+ SizingMode: readCache["SizingMode"],
34965
+ SizeGiB: toNumber$1(readCache["SizeGiB"])
34966
+ } : void 0;
34967
+ break;
34968
+ }
34969
+ }
34970
+ return true;
34971
+ }
34972
+ applyWindowsUpdateField(key, next, diff) {
34973
+ const out = diff;
34974
+ switch (key) {
34975
+ case "WeeklyMaintenanceStartTime":
34976
+ case "DailyAutomaticBackupStartTime":
34977
+ diff[key] = next;
34978
+ break;
34979
+ case "AutomaticBackupRetentionDays":
34980
+ case "ThroughputCapacity":
34981
+ diff[key] = toNumber$1(next);
34982
+ break;
34983
+ case "SelfManagedActiveDirectoryConfiguration":
34984
+ out.SelfManagedActiveDirectoryConfiguration = this.toSelfManagedAdConfigurationUpdates(next);
34985
+ break;
34986
+ case "AuditLogConfiguration":
34987
+ out.AuditLogConfiguration = this.toWindowsAuditLogConfiguration(next);
34988
+ break;
34989
+ case "DiskIopsConfiguration":
34990
+ out.DiskIopsConfiguration = this.toDiskIopsConfiguration(next);
34991
+ break;
34992
+ case "FsrmConfiguration":
34993
+ out.FsrmConfiguration = this.toWindowsFsrmConfiguration(next);
34994
+ break;
34995
+ }
34996
+ return true;
34997
+ }
34998
+ applyOntapUpdateField(key, next, prev, diff) {
34999
+ const out = diff;
35000
+ switch (key) {
35001
+ case "DailyAutomaticBackupStartTime":
35002
+ case "WeeklyMaintenanceStartTime":
35003
+ case "FsxAdminPassword":
35004
+ case "EndpointIpv6AddressRange":
35005
+ diff[key] = next;
35006
+ break;
35007
+ case "AutomaticBackupRetentionDays":
35008
+ case "ThroughputCapacity":
35009
+ case "ThroughputCapacityPerHAPair":
35010
+ case "HAPairs":
35011
+ diff[key] = toNumber$1(next);
35012
+ break;
35013
+ case "DiskIopsConfiguration":
35014
+ out.DiskIopsConfiguration = this.toDiskIopsConfiguration(next);
35015
+ break;
35016
+ case "RouteTableIds": {
35017
+ const { add, remove } = routeTableDelta(next, prev);
35018
+ if (add) out.AddRouteTableIds = add;
35019
+ if (remove) out.RemoveRouteTableIds = remove;
35020
+ return add !== void 0 || remove !== void 0;
35021
+ }
35022
+ }
35023
+ return true;
35024
+ }
35025
+ applyOpenZFSUpdateField(key, next, prev, diff) {
35026
+ const out = diff;
35027
+ switch (key) {
35028
+ case "DailyAutomaticBackupStartTime":
35029
+ case "WeeklyMaintenanceStartTime":
35030
+ case "EndpointIpv6AddressRange":
35031
+ diff[key] = next;
35032
+ break;
35033
+ case "CopyTagsToBackups":
35034
+ case "CopyTagsToVolumes":
35035
+ diff[key] = toBoolean$1(next);
35036
+ break;
35037
+ case "AutomaticBackupRetentionDays":
35038
+ case "ThroughputCapacity":
35039
+ diff[key] = toNumber$1(next);
35040
+ break;
35041
+ case "DiskIopsConfiguration":
35042
+ out.DiskIopsConfiguration = this.toDiskIopsConfiguration(next);
35043
+ break;
35044
+ case "ReadCacheConfiguration":
35045
+ out.ReadCacheConfiguration = this.toOpenZFSReadCacheConfiguration(next);
35046
+ break;
35047
+ case "RouteTableIds": {
35048
+ const { add, remove } = routeTableDelta(next, prev);
35049
+ if (add) out.AddRouteTableIds = add;
35050
+ if (remove) out.RemoveRouteTableIds = remove;
35051
+ return add !== void 0 || remove !== void 0;
35052
+ }
35053
+ }
35054
+ return true;
35055
+ }
35056
+ /**
34728
35057
  * Apply a `Tags` diff via `TagResource` / `UntagResource` (the FSx
34729
35058
  * `UpdateFileSystem` API does not accept tags). Needs the ARN — resolve
34730
35059
  * it from `DescribeFileSystems`.
@@ -34878,6 +35207,7 @@ var FSxFileSystemProvider = class {
34878
35207
  if (fs.ResourceARN !== void 0) attributes["ResourceARN"] = fs.ResourceARN;
34879
35208
  if (fs.DNSName !== void 0) attributes["DNSName"] = fs.DNSName;
34880
35209
  if (fs.LustreConfiguration?.MountName !== void 0) attributes["LustreMountName"] = fs.LustreConfiguration.MountName;
35210
+ if (fs.OpenZFSConfiguration?.RootVolumeId !== void 0) attributes["RootVolumeId"] = fs.OpenZFSConfiguration.RootVolumeId;
34881
35211
  if (fs.FileSystemId !== void 0) attributes["FileSystemId"] = fs.FileSystemId;
34882
35212
  return attributes;
34883
35213
  }
@@ -34899,10 +35229,23 @@ var FSxFileSystemProvider = class {
34899
35229
  * interface ids, never the original security group list.
34900
35230
  * - `BackupId` — creation-source input, not surfaced on the deployed
34901
35231
  * file system.
35232
+ * - `WindowsConfiguration` / `OntapConfiguration` / `OpenZFSConfiguration`
35233
+ * — `readCurrentState` maps only the Lustre block back to CFn shape
35234
+ * today, so drift on the non-Lustre variant blocks is not yet computed;
35235
+ * marking them unknown avoids a guaranteed false positive on every run
35236
+ * (variant-config drift is a follow-up). Only the block matching the
35237
+ * file system's type is ever present in state, so listing all three is
35238
+ * harmless.
34902
35239
  */
34903
35240
  getDriftUnknownPaths(resourceType) {
34904
35241
  if (resourceType !== "AWS::FSx::FileSystem") return [];
34905
- return ["SecurityGroupIds", "BackupId"];
35242
+ return [
35243
+ "SecurityGroupIds",
35244
+ "BackupId",
35245
+ "WindowsConfiguration",
35246
+ "OntapConfiguration",
35247
+ "OpenZFSConfiguration"
35248
+ ];
34906
35249
  }
34907
35250
  /**
34908
35251
  * Read the AWS-current file system configuration in CFn-property shape
@@ -35013,13 +35356,13 @@ var FSxFileSystemProvider = class {
35013
35356
  const DEFAULT_MAX_WAIT_MS = 3600 * 1e3;
35014
35357
  const DEFAULT_POLL_INTERVAL_MS = 15e3;
35015
35358
  /** Cluster states that mean "create succeeded, the cluster is up". */
35016
- const CREATE_READY_STATES = new Set(["WAITING", "RUNNING"]);
35359
+ const CREATE_READY_STATES = /* @__PURE__ */ new Set(["WAITING", "RUNNING"]);
35017
35360
  /**
35018
35361
  * Cluster states that mean "the cluster is gone" (for delete polling and
35019
35362
  * delete idempotency). `TERMINATED_WITH_ERRORS` still counts as gone — the
35020
35363
  * cluster no longer bills — but is logged so a failed terminate is visible.
35021
35364
  */
35022
- const TERMINAL_STATES = new Set(["TERMINATED", "TERMINATED_WITH_ERRORS"]);
35365
+ const TERMINAL_STATES = /* @__PURE__ */ new Set(["TERMINATED", "TERMINATED_WITH_ERRORS"]);
35023
35366
  /**
35024
35367
  * Cluster states that mean "the cluster is alive" — the `ListClusters` filter
35025
35368
  * used by `import()` discovery so a long-gone `TERMINATED*` cluster is never
@@ -35038,7 +35381,7 @@ const NON_TERMINATED_STATES = [
35038
35381
  * replacement-detection layer) or lives inside the `Instances` block (handled
35039
35382
  * specially in `update()` — only `TerminationProtected` is mutable there).
35040
35383
  */
35041
- const MUTABLE_TOP_LEVEL_PROPS = new Set([
35384
+ const MUTABLE_TOP_LEVEL_PROPS = /* @__PURE__ */ new Set([
35042
35385
  "Tags",
35043
35386
  "VisibleToAllUsers",
35044
35387
  "StepConcurrencyLevel",
@@ -35104,7 +35447,7 @@ var EMRClusterProvider = class {
35104
35447
  this.pollIntervalMs = options?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
35105
35448
  this.maxWaitMs = options?.maxWaitMs ?? DEFAULT_MAX_WAIT_MS;
35106
35449
  }
35107
- handledProperties = new Map([["AWS::EMR::Cluster", new Set([
35450
+ handledProperties = /* @__PURE__ */ new Map([["AWS::EMR::Cluster", /* @__PURE__ */ new Set([
35108
35451
  "AdditionalInfo",
35109
35452
  "Applications",
35110
35453
  "AutoScalingRole",
@@ -35313,7 +35656,7 @@ var EMRClusterProvider = class {
35313
35656
  const prevInstances = previousProperties["Instances"] ?? {};
35314
35657
  let terminationProtectedChanged = false;
35315
35658
  if (changed("Instances")) {
35316
- const instanceKeys = new Set([...Object.keys(nextInstances), ...Object.keys(prevInstances)]);
35659
+ const instanceKeys = /* @__PURE__ */ new Set([...Object.keys(nextInstances), ...Object.keys(prevInstances)]);
35317
35660
  for (const key of instanceKeys) {
35318
35661
  if (jsonEqual(nextInstances[key], prevInstances[key])) continue;
35319
35662
  if (key === "TerminationProtected") {
@@ -35818,7 +36161,7 @@ var EMRClusterProvider = class {
35818
36161
  * Membership grows as each follow-up PR lands. Keep alphabetical
35819
36162
  * to minimize merge conflicts when multiple follow-ups race.
35820
36163
  */
35821
- const SUPPORTED_UPDATE_DESTINATIONS = new Set([
36164
+ const SUPPORTED_UPDATE_DESTINATIONS = /* @__PURE__ */ new Set([
35822
36165
  "AmazonOpenSearchServerlessDestinationConfiguration",
35823
36166
  "AmazonopensearchserviceDestinationConfiguration",
35824
36167
  "ElasticsearchDestinationConfiguration",
@@ -35842,7 +36185,7 @@ var FirehoseProvider = class {
35842
36185
  client;
35843
36186
  providerRegion = process.env["AWS_REGION"];
35844
36187
  logger = getLogger().child("FirehoseProvider");
35845
- handledProperties = new Map([["AWS::KinesisFirehose::DeliveryStream", new Set([
36188
+ handledProperties = /* @__PURE__ */ new Map([["AWS::KinesisFirehose::DeliveryStream", /* @__PURE__ */ new Set([
35846
36189
  "DeliveryStreamName",
35847
36190
  "DeliveryStreamType",
35848
36191
  "S3DestinationConfiguration",
@@ -37088,7 +37431,7 @@ var CloudTrailProvider = class {
37088
37431
  client;
37089
37432
  providerRegion = process.env["AWS_REGION"];
37090
37433
  logger = getLogger().child("CloudTrailProvider");
37091
- handledProperties = new Map([["AWS::CloudTrail::Trail", new Set([
37434
+ handledProperties = /* @__PURE__ */ new Map([["AWS::CloudTrail::Trail", /* @__PURE__ */ new Set([
37092
37435
  "S3BucketName",
37093
37436
  "TrailName",
37094
37437
  "S3KeyPrefix",
@@ -37431,7 +37774,7 @@ var CodeBuildProvider = class {
37431
37774
  client;
37432
37775
  providerRegion = process.env["AWS_REGION"];
37433
37776
  logger = getLogger().child("CodeBuildProvider");
37434
- handledProperties = new Map([["AWS::CodeBuild::Project", new Set([
37777
+ handledProperties = /* @__PURE__ */ new Map([["AWS::CodeBuild::Project", /* @__PURE__ */ new Set([
37435
37778
  "Name",
37436
37779
  "Source",
37437
37780
  "Environment",
@@ -37963,7 +38306,7 @@ var CodeCommitRepositoryProvider = class {
37963
38306
  s3Client;
37964
38307
  providerRegion = process.env["AWS_REGION"];
37965
38308
  logger = getLogger().child("CodeCommitRepositoryProvider");
37966
- handledProperties = new Map([["AWS::CodeCommit::Repository", new Set([
38309
+ handledProperties = /* @__PURE__ */ new Map([["AWS::CodeCommit::Repository", /* @__PURE__ */ new Set([
37967
38310
  "RepositoryName",
37968
38311
  "RepositoryDescription",
37969
38312
  "KmsKeyId",
@@ -38415,7 +38758,7 @@ var DLMLifecyclePolicyProvider = class {
38415
38758
  client;
38416
38759
  providerRegion = process.env["AWS_REGION"];
38417
38760
  logger = getLogger().child("DLMLifecyclePolicyProvider");
38418
- handledProperties = new Map([["AWS::DLM::LifecyclePolicy", new Set([
38761
+ handledProperties = /* @__PURE__ */ new Map([["AWS::DLM::LifecyclePolicy", /* @__PURE__ */ new Set([
38419
38762
  "Description",
38420
38763
  "ExecutionRoleArn",
38421
38764
  "State",
@@ -38665,7 +39008,7 @@ var S3VectorsProvider = class {
38665
39008
  client;
38666
39009
  providerRegion = process.env["AWS_REGION"];
38667
39010
  logger = getLogger().child("S3VectorsProvider");
38668
- handledProperties = new Map([["AWS::S3Vectors::VectorBucket", new Set([
39011
+ handledProperties = /* @__PURE__ */ new Map([["AWS::S3Vectors::VectorBucket", /* @__PURE__ */ new Set([
38669
39012
  "VectorBucketName",
38670
39013
  "EncryptionConfiguration",
38671
39014
  "Tags"
@@ -38926,7 +39269,7 @@ var S3DirectoryBucketProvider = class {
38926
39269
  s3Client;
38927
39270
  stsClient;
38928
39271
  logger = getLogger().child("S3DirectoryBucketProvider");
38929
- handledProperties = new Map([["AWS::S3Express::DirectoryBucket", new Set([
39272
+ handledProperties = /* @__PURE__ */ new Map([["AWS::S3Express::DirectoryBucket", /* @__PURE__ */ new Set([
38930
39273
  "DataRedundancy",
38931
39274
  "LocationName",
38932
39275
  "BucketName"
@@ -39173,10 +39516,10 @@ var S3TablesProvider = class {
39173
39516
  client;
39174
39517
  providerRegion = process.env["AWS_REGION"];
39175
39518
  logger = getLogger().child("S3TablesProvider");
39176
- handledProperties = new Map([
39177
- ["AWS::S3Tables::TableBucket", new Set(["TableBucketName", "Tags"])],
39178
- ["AWS::S3Tables::Namespace", new Set(["TableBucketARN", "Namespace"])],
39179
- ["AWS::S3Tables::Table", new Set([
39519
+ handledProperties = /* @__PURE__ */ new Map([
39520
+ ["AWS::S3Tables::TableBucket", /* @__PURE__ */ new Set(["TableBucketName", "Tags"])],
39521
+ ["AWS::S3Tables::Namespace", /* @__PURE__ */ new Set(["TableBucketARN", "Namespace"])],
39522
+ ["AWS::S3Tables::Table", /* @__PURE__ */ new Set([
39180
39523
  "TableBucketARN",
39181
39524
  "Namespace",
39182
39525
  "TableName",
@@ -39793,7 +40136,7 @@ var ECRProvider = class {
39793
40136
  client;
39794
40137
  providerRegion = process.env["AWS_REGION"];
39795
40138
  logger = getLogger().child("ECRProvider");
39796
- handledProperties = new Map([["AWS::ECR::Repository", new Set([
40139
+ handledProperties = /* @__PURE__ */ new Map([["AWS::ECR::Repository", /* @__PURE__ */ new Set([
39797
40140
  "RepositoryName",
39798
40141
  "ImageScanningConfiguration",
39799
40142
  "ImageTagMutability",
@@ -40140,8 +40483,8 @@ const PROTECTION_PROPERTY_BY_TYPE = {
40140
40483
  * (boolean `true`).
40141
40484
  */
40142
40485
  const PROTECTION_ACTIVE_VALUES_BY_TYPE = {
40143
- "AWS::Cognito::UserPool": new Set(["ACTIVE"]),
40144
- "AWS::AutoScaling::AutoScalingGroup": new Set(["prevent-force-deletion", "prevent-all-deletion"])
40486
+ "AWS::Cognito::UserPool": /* @__PURE__ */ new Set(["ACTIVE"]),
40487
+ "AWS::AutoScaling::AutoScalingGroup": /* @__PURE__ */ new Set(["prevent-force-deletion", "prevent-all-deletion"])
40145
40488
  };
40146
40489
  /**
40147
40490
  * Count how many resources in a stack's recorded state appear to have
@@ -40675,7 +41018,7 @@ var NestedStackProvider = class {
40675
41018
  * parameter map forwarded as `DeployEngineOptions.parameters` to the
40676
41019
  * child engine.
40677
41020
  */
40678
- handledProperties = new Map([["AWS::CloudFormation::Stack", new Set(["TemplateURL", "Parameters"])]]);
41021
+ handledProperties = /* @__PURE__ */ new Map([["AWS::CloudFormation::Stack", /* @__PURE__ */ new Set(["TemplateURL", "Parameters"])]]);
40679
41022
  /**
40680
41023
  * Every other property on `AWS::CloudFormation::Stack` is intentionally
40681
41024
  * not threaded through — cdkd does not go through CloudFormation, so
@@ -40687,7 +41030,7 @@ var NestedStackProvider = class {
40687
41030
  * `<parent>~<logicalId>` key per design §3, and `TemplateBody` is
40688
41031
  * superseded by the local `Metadata['aws:asset:path']` lookup.
40689
41032
  */
40690
- unhandledByDesign = new Map([["AWS::CloudFormation::Stack", new Map([
41033
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::CloudFormation::Stack", /* @__PURE__ */ new Map([
40691
41034
  ["TemplateBody", "CFn-only inline template — cdkd reads the child template from the synth output via Metadata['aws:asset:path'] instead of accepting it inline"],
40692
41035
  ["Capabilities", "CFn-only IAM capability declaration — cdkd does not go through CloudFormation so capabilities have no equivalent"],
40693
41036
  ["Description", "CFn-only informational — no semantic effect on the recursive deploy"],
@@ -40880,7 +41223,7 @@ var NestedStackProvider = class {
40880
41223
  */
40881
41224
  var WaitConditionHandleProvider = class {
40882
41225
  logger = getLogger().child("WaitConditionHandleProvider");
40883
- handledProperties = new Map([["AWS::CloudFormation::WaitConditionHandle", /* @__PURE__ */ new Set([])]]);
41226
+ handledProperties = /* @__PURE__ */ new Map([["AWS::CloudFormation::WaitConditionHandle", /* @__PURE__ */ new Set([])]]);
40884
41227
  /**
40885
41228
  * "Create" the handle: synthesize a unique placeholder physical id.
40886
41229
  * `Ref` on the handle resolves to this id. It is deliberately NOT
@@ -40976,7 +41319,7 @@ var ACMCertificateProvider = class {
40976
41319
  constructor() {
40977
41320
  this.acmClient = getAwsClients().acm;
40978
41321
  }
40979
- handledProperties = new Map([["AWS::CertificateManager::Certificate", new Set([
41322
+ handledProperties = /* @__PURE__ */ new Map([["AWS::CertificateManager::Certificate", /* @__PURE__ */ new Set([
40980
41323
  "DomainName",
40981
41324
  "ValidationMethod",
40982
41325
  "SubjectAlternativeNames",
@@ -41954,7 +42297,7 @@ function createDeployCommand() {
41954
42297
  * `cdkd import --migrate-from-cloudformation` retirement flow
41955
42298
  * (`src/cli/commands/retire-cfn-stack.ts`).
41956
42299
  */
41957
- const STABLE_TERMINAL_STATUSES = new Set([
42300
+ const STABLE_TERMINAL_STATUSES = /* @__PURE__ */ new Set([
41958
42301
  "CREATE_COMPLETE",
41959
42302
  "UPDATE_COMPLETE",
41960
42303
  "UPDATE_ROLLBACK_COMPLETE",
@@ -43084,7 +43427,7 @@ function diffTreeToJson(node) {
43084
43427
  children: node.children.map(diffTreeToJson)
43085
43428
  };
43086
43429
  }
43087
- const INTRINSIC_KEYS = new Set([
43430
+ const INTRINSIC_KEYS = /* @__PURE__ */ new Set([
43088
43431
  "Ref",
43089
43432
  "Fn::Sub",
43090
43433
  "Fn::GetAtt",
@@ -43494,7 +43837,7 @@ function isIgnoredPath(path, ignorePaths) {
43494
43837
  function diffAt(path, stateValue, awsValue, out, ignorePaths, unionWalkObjects) {
43495
43838
  if (deepEqual(stateValue, awsValue)) return;
43496
43839
  if (isPlainObject(stateValue) && isPlainObject(awsValue) && !Array.isArray(stateValue) && !Array.isArray(awsValue)) {
43497
- const keys = unionWalkObjects ? new Set([...Object.keys(stateValue), ...Object.keys(awsValue)]) : Object.keys(stateValue);
43840
+ const keys = unionWalkObjects ? /* @__PURE__ */ new Set([...Object.keys(stateValue), ...Object.keys(awsValue)]) : Object.keys(stateValue);
43498
43841
  for (const key of keys) {
43499
43842
  const childPath = `${path}.${key}`;
43500
43843
  if (isIgnoredPath(childPath, ignorePaths)) continue;
@@ -43624,7 +43967,7 @@ const CC_API_FALLBACK_DENY_LIST = {
43624
43967
  * managed field — the deny-list catches per-type structural divergence;
43625
43968
  * this helper catches generic noise.
43626
43969
  */
43627
- const ALWAYS_STRIPPED_FIELDS = new Set([
43970
+ const ALWAYS_STRIPPED_FIELDS = /* @__PURE__ */ new Set([
43628
43971
  "CreationDate",
43629
43972
  "CreationTime",
43630
43973
  "CreatedTime",
@@ -46736,7 +47079,7 @@ function stackTreeToJson(roots) {
46736
47079
  * support for import are surfaced as errors by the CreateChangeSet call
46737
47080
  * itself; we do not try to maintain a closed allowlist here.
46738
47081
  */
46739
- const NEVER_IMPORTABLE_TYPES = new Set(["AWS::CDK::Metadata"]);
47082
+ const NEVER_IMPORTABLE_TYPES = /* @__PURE__ */ new Set(["AWS::CDK::Metadata"]);
46740
47083
  /**
46741
47084
  * Per-non-root-child lock-acquisition retry budget for the nested-stack
46742
47085
  * export loop (`runPerStackImportLoop`). `acquireLockWithRetry` retries
@@ -46887,7 +47230,7 @@ function readStringProperty(properties, key, resourceType) {
46887
47230
  * (no `read` / `list` — inline policy attachments have no first-class
46888
47231
  * AWS resource id). See the per-entry comment for each addition.
46889
47232
  */
46890
- const IMPORT_UNSUPPORTED_RECREATABLE_TYPES = new Set(["AWS::ApiGatewayV2::Stage", "AWS::IAM::Policy"]);
47233
+ const IMPORT_UNSUPPORTED_RECREATABLE_TYPES = /* @__PURE__ */ new Set(["AWS::ApiGatewayV2::Stage", "AWS::IAM::Policy"]);
46891
47234
  const PRE_DELETE_HANDLERS = {
46892
47235
  "AWS::ApiGatewayV2::Stage": async (entry) => {
46893
47236
  const { ApiGatewayV2Client, DeleteStageCommand, NotFoundException } = await import("@aws-sdk/client-apigatewayv2");
@@ -53054,7 +53397,7 @@ async function runDetached(opts) {
53054
53397
  const ro = mount.readOnly ? ":ro" : "";
53055
53398
  args.push("-v", `${mount.hostPath}:${mount.containerPath}${ro}`);
53056
53399
  }
53057
- const sensitiveKeys = opts.sensitiveEnvKeys && opts.sensitiveEnvKeys.size > 0 ? new Set([...SENSITIVE_ENV_KEYS, ...opts.sensitiveEnvKeys]) : SENSITIVE_ENV_KEYS;
53400
+ const sensitiveKeys = opts.sensitiveEnvKeys && opts.sensitiveEnvKeys.size > 0 ? /* @__PURE__ */ new Set([...SENSITIVE_ENV_KEYS, ...opts.sensitiveEnvKeys]) : SENSITIVE_ENV_KEYS;
53058
53401
  const passthroughEnv = {};
53059
53402
  for (const [k, v] of Object.entries(opts.env)) if (sensitiveKeys.has(k)) {
53060
53403
  args.push("-e", k);
@@ -53178,7 +53521,7 @@ function pickFreePort() {
53178
53521
  * into stdout / log files. Only the matching `-e <KEY>=<value>` pair is
53179
53522
  * redacted; non-credential `-e KEY=val` entries pass through unchanged.
53180
53523
  */
53181
- const REDACTED_ENV_KEYS = new Set([
53524
+ const REDACTED_ENV_KEYS = /* @__PURE__ */ new Set([
53182
53525
  "AWS_ACCESS_KEY_ID",
53183
53526
  "AWS_SECRET_ACCESS_KEY",
53184
53527
  "AWS_SESSION_TOKEN"
@@ -53194,7 +53537,7 @@ const REDACTED_ENV_KEYS = new Set([
53194
53537
  * AgentCore local-invoke path to keep decrypted `--from-cfn-stack`
53195
53538
  * SecureString SSM values off the argv).
53196
53539
  */
53197
- const SENSITIVE_ENV_KEYS = new Set([
53540
+ const SENSITIVE_ENV_KEYS = /* @__PURE__ */ new Set([
53198
53541
  "AWS_ACCESS_KEY_ID",
53199
53542
  "AWS_SECRET_ACCESS_KEY",
53200
53543
  "AWS_SESSION_TOKEN"
@@ -56838,7 +57181,7 @@ function buildDockerRunArgs(opts) {
56838
57181
  args.push("--network", network);
56839
57182
  args.push("--network-alias", container.name);
56840
57183
  if (opts.networkAliases && opts.networkAliases.length > 0) {
56841
- const seen = new Set([container.name]);
57184
+ const seen = /* @__PURE__ */ new Set([container.name]);
56842
57185
  for (const a of opts.networkAliases) if (!seen.has(a)) {
56843
57186
  args.push("--network-alias", a);
56844
57187
  seen.add(a);
@@ -59661,7 +60004,7 @@ function compareSemver(a, b) {
59661
60004
  * - `Custom::*` — any user-defined Custom Resource type prefix.
59662
60005
  * Same rationale as `AWS::CloudFormation::CustomResource`.
59663
60006
  */
59664
- const HARD_REJECT_RESOURCE_TYPES = new Set(["AWS::CloudFormation::CustomResource", "AWS::CloudFormation::Stack"]);
60007
+ const HARD_REJECT_RESOURCE_TYPES = /* @__PURE__ */ new Set(["AWS::CloudFormation::CustomResource", "AWS::CloudFormation::Stack"]);
59665
60008
  /**
59666
60009
  * Fetch the source CFn stack's current state + resources + transform
59667
60010
  * info. Issues 3 read-only AWS API calls (`DescribeStacks`,
@@ -59862,7 +60205,8 @@ async function spawnCdkMigrate(opts) {
59862
60205
  ]
59863
60206
  });
59864
60207
  } catch (err) {
59865
- rejectPromise(new LocalMigrateError(`Failed to spawn '${cdkBin} migrate': ${err instanceof Error ? err.message : String(err)}`, err instanceof Error ? err : void 0));
60208
+ const detail = err instanceof Error ? err.message : String(err);
60209
+ rejectPromise(new LocalMigrateError(`Failed to spawn '${cdkBin} migrate': ${detail}`, err instanceof Error ? err : void 0));
59866
60210
  return;
59867
60211
  }
59868
60212
  child.stdout?.on("data", (chunk) => {
@@ -59889,7 +60233,8 @@ async function spawnCdkMigrate(opts) {
59889
60233
  });
59890
60234
  return;
59891
60235
  }
59892
- rejectPromise(new LocalMigrateError(`'${cdkBin} migrate' ${signal !== null ? `killed by signal ${signal}` : code !== null ? `exited with code ${code}` : "process closed without a code or signal"}.\n--- stdout ---\n${stdout || "(empty)"}\n--- stderr ---\n${stderr || "(empty)"}\n`));
60236
+ const exitDetail = signal !== null ? `killed by signal ${signal}` : code !== null ? `exited with code ${code}` : "process closed without a code or signal";
60237
+ rejectPromise(new LocalMigrateError(`'${cdkBin} migrate' ${exitDetail}.\n--- stdout ---\n${stdout || "(empty)"}\n--- stderr ---\n${stderr || "(empty)"}\n`));
59893
60238
  });
59894
60239
  });
59895
60240
  }
@@ -60655,7 +61000,7 @@ function installPipeCloseHandler(streams = [process.stdout, process.stderr], exi
60655
61000
 
60656
61001
  //#endregion
60657
61002
  //#region src/cli/index.ts
60658
- const SUBCOMMANDS = new Set([
61003
+ const SUBCOMMANDS = /* @__PURE__ */ new Set([
60659
61004
  "bootstrap",
60660
61005
  "synth",
60661
61006
  "list",
@@ -60697,7 +61042,7 @@ function reorderArgs(argv) {
60697
61042
  async function main() {
60698
61043
  installPipeCloseHandler();
60699
61044
  const program = new Command();
60700
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.248.0");
61045
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.249.0");
60701
61046
  program.addCommand(createBootstrapCommand());
60702
61047
  program.addCommand(createSynthCommand());
60703
61048
  program.addCommand(createListCommand());