@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.
@@ -1,22 +1,24 @@
1
- import { a as getLiveRenderer, d as generateResourceNameWithFallback, l as applyDefaultNameForFallback, n as getLogger, p as withStackName, u as generateResourceName } from "./logger-BzO-joNR.js";
2
- import { E as SynthesisError, S as ResourceUpdateNotSupportedError, T as StateError, a as normalizeAwsTagsToCfn, b as ProvisioningError, c as AssetError, d as DependencyError, g as MacroExpansionError, h as LockError, i as matchesCdkPath, k as normalizeAwsError, l as CdkdError, n as isTerminationProtectionPropagationError, o as resolveExplicitPhysicalId, s as assertRegionMatch, t as disableInstanceApiTermination, x as ResourceTimeoutError } from "./ec2-termination-protection-q-WGWgxa.js";
3
- import { r as getAwsClients } from "./aws-clients-B15NAPbL.js";
4
- import { t as expectedOwnerParam } from "./expected-bucket-owner-BjEfUnkA.js";
1
+ import { a as getLiveRenderer, d as generateResourceNameWithFallback, l as applyDefaultNameForFallback, n as getLogger, p as withStackName, u as generateResourceName } from "./logger-BYMEE-BS.js";
5
2
  import { randomUUID } from "node:crypto";
6
3
  import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
7
4
  import { CloudControlClient, CreateResourceCommand, DeleteResourceCommand, GetResourceCommand, GetResourceRequestStatusCommand, ListResourcesCommand, UpdateResourceCommand } from "@aws-sdk/client-cloudcontrol";
8
5
  import { AttachRolePolicyCommand, CreateRoleCommand, DeleteRoleCommand, DeleteRolePermissionsBoundaryCommand, DeleteRolePolicyCommand, DetachRolePolicyCommand, GetRoleCommand, GetRolePolicyCommand, IAMClient, ListAttachedRolePoliciesCommand, ListInstanceProfilesForRoleCommand, ListRolePoliciesCommand, ListRoleTagsCommand, ListRolesCommand, NoSuchEntityException, PutRolePermissionsBoundaryCommand, PutRolePolicyCommand, RemoveRoleFromInstanceProfileCommand, TagRoleCommand, UntagRoleCommand, UpdateAssumeRolePolicyCommand, UpdateRoleCommand } from "@aws-sdk/client-iam";
6
+ import { SQSClient } from "@aws-sdk/client-sqs";
9
7
  import { PublishCommand, SNSClient } from "@aws-sdk/client-sns";
10
8
  import { GetFunctionCommand, GetFunctionUrlConfigCommand, InvokeCommand, LambdaClient, UpdateFunctionConfigurationCommand, waitUntilFunctionActiveV2, waitUntilFunctionUpdatedV2 } from "@aws-sdk/client-lambda";
11
9
  import { AssumeRoleCommand, GetCallerIdentityCommand, STSClient } from "@aws-sdk/client-sts";
12
- import { DescribeAvailabilityZonesCommand, DescribeImagesCommand, DescribeInstancesCommand, DescribeLaunchTemplatesCommand, DescribeRouteTablesCommand, DescribeSecurityGroupsCommand, DescribeSubnetsCommand, DescribeVpcsCommand, DescribeVpnGatewaysCommand, EC2Client } from "@aws-sdk/client-ec2";
13
- import { DescribeTableCommand } from "@aws-sdk/client-dynamodb";
10
+ import { DescribeAvailabilityZonesCommand, DescribeImagesCommand, DescribeInstancesCommand, DescribeLaunchTemplatesCommand, DescribeRouteTablesCommand, DescribeSecurityGroupsCommand, DescribeSubnetsCommand, DescribeVpcsCommand, DescribeVpnGatewaysCommand, EC2Client, ModifyInstanceAttributeCommand } from "@aws-sdk/client-ec2";
11
+ import { DescribeTableCommand, DynamoDBClient } from "@aws-sdk/client-dynamodb";
14
12
  import { CloudFormationClient, CreateChangeSetCommand, DeleteStackCommand, DescribeChangeSetCommand, DescribeTypeCommand, GetTemplateCommand, waitUntilChangeSetCreateComplete } from "@aws-sdk/client-cloudformation";
15
- import { GetRestApiCommand } from "@aws-sdk/client-api-gateway";
16
- import { DescribeApiDestinationCommand, DescribeConnectionCommand } from "@aws-sdk/client-eventbridge";
17
- import { GetSecretValueCommand } from "@aws-sdk/client-secrets-manager";
13
+ import { APIGatewayClient, GetRestApiCommand } from "@aws-sdk/client-api-gateway";
14
+ import { DescribeApiDestinationCommand, DescribeConnectionCommand, EventBridgeClient } from "@aws-sdk/client-eventbridge";
15
+ import { GetSecretValueCommand, SecretsManagerClient } from "@aws-sdk/client-secrets-manager";
18
16
  import { GetParameterCommand, SSMClient } from "@aws-sdk/client-ssm";
19
- import { GetCloudFrontOriginAccessIdentityCommand } from "@aws-sdk/client-cloudfront";
17
+ import { CloudFrontClient, GetCloudFrontOriginAccessIdentityCommand } from "@aws-sdk/client-cloudfront";
18
+ import { CloudWatchClient } from "@aws-sdk/client-cloudwatch";
19
+ import { CloudWatchLogsClient } from "@aws-sdk/client-cloudwatch-logs";
20
+ import { BedrockAgentCoreControlClient } from "@aws-sdk/client-bedrock-agentcore-control";
21
+ import { ACMClient } from "@aws-sdk/client-acm";
20
22
  import { createReadStream, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
21
23
  import { basename, isAbsolute, join, resolve } from "node:path";
22
24
  import { spawn } from "node:child_process";
@@ -33,9 +35,962 @@ import { DescribeDBClustersCommand, DescribeDBInstancesCommand, RDSClient } from
33
35
  import { DescribeReplicationGroupsCommand, ElastiCacheClient } from "@aws-sdk/client-elasticache";
34
36
  import { DescribeClustersCommand, RedshiftClient } from "@aws-sdk/client-redshift";
35
37
  import { DescribeDomainCommand, OpenSearchClient } from "@aws-sdk/client-opensearch";
36
- import { CreateWebACLCommand, DeleteWebACLCommand, GetWebACLCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$8, ListWebACLsCommand, TagResourceCommand as TagResourceCommand$9, UntagResourceCommand as UntagResourceCommand$9, UpdateWebACLCommand, WAFNonexistentItemException, WAFV2Client } from "@aws-sdk/client-wafv2";
38
+ import { CreateWebACLCommand, DeleteWebACLCommand, GetWebACLCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$11, ListWebACLsCommand, TagResourceCommand as TagResourceCommand$12, UntagResourceCommand as UntagResourceCommand$12, UpdateWebACLCommand, WAFNonexistentItemException, WAFV2Client } from "@aws-sdk/client-wafv2";
37
39
  import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
38
40
 
41
+ //#region \0rolldown/runtime.js
42
+ var __defProp = Object.defineProperty;
43
+ var __exportAll = (all, no_symbols) => {
44
+ let target = {};
45
+ for (var name in all) {
46
+ __defProp(target, name, {
47
+ get: all[name],
48
+ enumerable: true
49
+ });
50
+ }
51
+ if (!no_symbols) {
52
+ __defProp(target, Symbol.toStringTag, { value: "Module" });
53
+ }
54
+ return target;
55
+ };
56
+
57
+ //#endregion
58
+ //#region src/utils/error-handler.ts
59
+ /**
60
+ * Base error class for cdkd
61
+ */
62
+ var CdkdError = class CdkdError extends Error {
63
+ code;
64
+ cause;
65
+ constructor(message, code, cause) {
66
+ super(message);
67
+ this.code = code;
68
+ this.cause = cause;
69
+ this.name = "CdkdError";
70
+ Object.setPrototypeOf(this, CdkdError.prototype);
71
+ }
72
+ };
73
+ /**
74
+ * State management errors
75
+ */
76
+ var StateError = class StateError extends CdkdError {
77
+ constructor(message, cause) {
78
+ super(message, "STATE_ERROR", cause);
79
+ this.name = "StateError";
80
+ Object.setPrototypeOf(this, StateError.prototype);
81
+ }
82
+ };
83
+ /**
84
+ * Lock acquisition errors
85
+ */
86
+ var LockError = class LockError extends CdkdError {
87
+ constructor(message, cause) {
88
+ super(message, "LOCK_ERROR", cause);
89
+ this.name = "LockError";
90
+ Object.setPrototypeOf(this, LockError.prototype);
91
+ }
92
+ };
93
+ /**
94
+ * Synthesis errors
95
+ */
96
+ var SynthesisError = class SynthesisError extends CdkdError {
97
+ constructor(message, cause) {
98
+ super(message, "SYNTHESIS_ERROR", cause);
99
+ this.name = "SynthesisError";
100
+ Object.setPrototypeOf(this, SynthesisError.prototype);
101
+ }
102
+ };
103
+ /**
104
+ * Asset errors
105
+ */
106
+ var AssetError = class AssetError extends CdkdError {
107
+ constructor(message, cause) {
108
+ super(message, "ASSET_ERROR", cause);
109
+ this.name = "AssetError";
110
+ Object.setPrototypeOf(this, AssetError.prototype);
111
+ }
112
+ };
113
+ /**
114
+ * Local-invoke `docker build` failures.
115
+ *
116
+ * Surfaces the stderr captured from `docker build` so the user can
117
+ * re-run the same command directly to debug Dockerfile syntax errors
118
+ * or missing build context. Used by `src/local/docker-image-builder.ts`
119
+ * (PR 5) for container Lambdas; the parallel `AssetError` covers the
120
+ * `cdkd publish-assets` / `cdkd deploy` build path. Kept distinct from
121
+ * `AssetError` so `cdkd local invoke` failures don't show up under the
122
+ * "asset" error class.
123
+ */
124
+ var LocalInvokeBuildError = class LocalInvokeBuildError extends CdkdError {
125
+ constructor(message, cause) {
126
+ super(message, "LOCAL_INVOKE_BUILD_ERROR", cause);
127
+ this.name = "LocalInvokeBuildError";
128
+ Object.setPrototypeOf(this, LocalInvokeBuildError.prototype);
129
+ }
130
+ };
131
+ /**
132
+ * Resource provisioning errors
133
+ */
134
+ var ProvisioningError = class ProvisioningError extends CdkdError {
135
+ resourceType;
136
+ logicalId;
137
+ physicalId;
138
+ constructor(message, resourceType, logicalId, physicalId, cause) {
139
+ super(message, "PROVISIONING_ERROR", cause);
140
+ this.resourceType = resourceType;
141
+ this.logicalId = logicalId;
142
+ this.physicalId = physicalId;
143
+ this.name = "ProvisioningError";
144
+ Object.setPrototypeOf(this, ProvisioningError.prototype);
145
+ }
146
+ };
147
+ /**
148
+ * Resource provisioning timeout errors (per-resource wall-clock deadline).
149
+ *
150
+ * Thrown by `withResourceDeadline` when a single CREATE / UPDATE / DELETE
151
+ * operation exceeds the user-configured `--resource-timeout`. The deploy
152
+ * engine catches this, wraps it in {@link ProvisioningError}, and lets the
153
+ * existing failure path (interrupt siblings → pre-rollback save → rollback
154
+ * unless `--no-rollback`) take over.
155
+ *
156
+ * The message intentionally names the resource, type, region, elapsed time
157
+ * and operation, plus how to override the default. Long-running providers
158
+ * (e.g. Custom Resource: 1h polling cap) self-report their needed budget
159
+ * via `getMinResourceTimeoutMs()`, so the user only needs a per-type
160
+ * override (`--resource-timeout TYPE=DURATION`) when they want to bump a
161
+ * specific non-self-reporting type or shorten a self-reported one.
162
+ */
163
+ var ResourceTimeoutError = class ResourceTimeoutError extends CdkdError {
164
+ logicalId;
165
+ resourceType;
166
+ region;
167
+ elapsedMs;
168
+ operation;
169
+ timeoutMs;
170
+ constructor(logicalId, resourceType, region, elapsedMs, operation, timeoutMs) {
171
+ const elapsedLabel = formatDuration(elapsedMs);
172
+ const timeoutLabel = formatDuration(timeoutMs);
173
+ super(`Resource ${logicalId} (${resourceType}) in ${region} timed out after ${timeoutLabel} during ${operation} (elapsed ${elapsedLabel}).\nThis may indicate a stuck Cloud Control polling loop, hung Custom Resource, or
174
+ slow ENI provisioning. Re-run with --resource-timeout ${resourceType}=<DURATION>\nto bump the budget for this resource type only, or --verbose to see the
175
+ underlying provider activity.`, "RESOURCE_TIMEOUT");
176
+ this.logicalId = logicalId;
177
+ this.resourceType = resourceType;
178
+ this.region = region;
179
+ this.elapsedMs = elapsedMs;
180
+ this.operation = operation;
181
+ this.timeoutMs = timeoutMs;
182
+ this.name = "ResourceTimeoutError";
183
+ Object.setPrototypeOf(this, ResourceTimeoutError.prototype);
184
+ }
185
+ };
186
+ /**
187
+ * Format a duration in milliseconds as a short human-readable label
188
+ * (`30m`, `1h30m`, `45s`). Used by {@link ResourceTimeoutError} so the
189
+ * error message stays compact.
190
+ */
191
+ function formatDuration(ms) {
192
+ if (ms < 6e4) return `${Math.round(ms / 1e3)}s`;
193
+ const totalMinutes = Math.round(ms / 6e4);
194
+ if (totalMinutes < 60) return `${totalMinutes}m`;
195
+ const hours = Math.floor(totalMinutes / 60);
196
+ const minutes = totalMinutes % 60;
197
+ return minutes === 0 ? `${hours}h` : `${hours}h${minutes}m`;
198
+ }
199
+ /**
200
+ * Dependency resolution errors
201
+ */
202
+ var DependencyError = class DependencyError extends CdkdError {
203
+ constructor(message, cause) {
204
+ super(message, "DEPENDENCY_ERROR", cause);
205
+ this.name = "DependencyError";
206
+ Object.setPrototypeOf(this, DependencyError.prototype);
207
+ }
208
+ };
209
+ /**
210
+ * Configuration errors
211
+ */
212
+ var ConfigError = class ConfigError extends CdkdError {
213
+ constructor(message, cause) {
214
+ super(message, "CONFIG_ERROR", cause);
215
+ this.name = "ConfigError";
216
+ Object.setPrototypeOf(this, ConfigError.prototype);
217
+ }
218
+ };
219
+ /**
220
+ * Signals a partial-failure outcome that should map to exit code 2 (not 1).
221
+ *
222
+ * Used by `cdkd destroy` and `cdkd state destroy` when one or more
223
+ * per-resource deletes failed but the overall command finished its work
224
+ * (state.json is preserved, the rest of the stack was deleted, and the
225
+ * user can re-run to clean up the remaining resources).
226
+ *
227
+ * Exit code conventions:
228
+ * - 0: command completed successfully, no resources left in error state.
229
+ * - 1: command-level failure (auth error, bad arguments, synth crash,
230
+ * unhandled exception). Default for any thrown error.
231
+ * - 2: partial failure — work completed but some resources are still in
232
+ * an error state. Re-running typically resolves it. Documented in
233
+ * README's "Exit codes" section.
234
+ *
235
+ * `handleError` recognizes this class via `instanceof` and uses its
236
+ * `exitCode` instead of the default 1.
237
+ */
238
+ var PartialFailureError = class PartialFailureError extends CdkdError {
239
+ exitCode = 2;
240
+ constructor(message, cause) {
241
+ super(message, "PARTIAL_FAILURE", cause);
242
+ this.name = "PartialFailureError";
243
+ Object.setPrototypeOf(this, PartialFailureError.prototype);
244
+ }
245
+ };
246
+ /**
247
+ * Signals that a provider cannot perform an in-place `update` for a
248
+ * resource type — most commonly because the AWS resource is structurally
249
+ * immutable (`AWS::Lambda::LayerVersion`, `AWS::S3Tables::TableBucket` once
250
+ * created, certain `AWS::EC2::*` sub-resources) or because the provider
251
+ * surfaces a sub-resource attachment whose only mutation pattern is
252
+ * delete + add (Lambda permission statements, IAM policy attachments).
253
+ *
254
+ * Surfaced through `cdkd drift --revert`, which calls
255
+ * `provider.update(logicalId, physicalId, type, stateProps, awsProps)` to
256
+ * push cdkd state values back into AWS for every drifted resource. When a
257
+ * provider throws this error, the drift command collects it as a
258
+ * per-resource outcome distinct from a generic AWS update failure: the
259
+ * fix is to re-deploy with `--replace` (or recreate the resource), not to
260
+ * retry the update.
261
+ *
262
+ * Carries the same `exitCode = 2` as {@link PartialFailureError} so a
263
+ * drift run that hits one immutable resource is reported as partial-
264
+ * success rather than fatal — the rest of the drifted resources still
265
+ * had their `update` invoked, and the user has a clear next step printed
266
+ * for the unsupported one.
267
+ */
268
+ var ResourceUpdateNotSupportedError = class ResourceUpdateNotSupportedError extends CdkdError {
269
+ exitCode = 2;
270
+ resourceType;
271
+ logicalId;
272
+ /**
273
+ * Human-readable hint printed alongside the error. The default is
274
+ * "use cdkd deploy with --replace, or change the resource definition
275
+ * to create a new version" — providers are encouraged to override
276
+ * with a more specific suggestion when one is available (e.g.
277
+ * Lambda::Permission's "delete + add a new statement").
278
+ */
279
+ suggestion;
280
+ constructor(resourceType, logicalId, suggestion, cause) {
281
+ super(`${resourceType} (${logicalId}) cannot be updated in place: ${suggestion ? suggestion : "use cdkd deploy with --replace, or change the resource definition to create a new version"}.`, "RESOURCE_UPDATE_NOT_SUPPORTED", cause);
282
+ this.resourceType = resourceType;
283
+ this.logicalId = logicalId;
284
+ this.suggestion = suggestion;
285
+ this.name = "ResourceUpdateNotSupportedError";
286
+ Object.setPrototypeOf(this, ResourceUpdateNotSupportedError.prototype);
287
+ }
288
+ };
289
+ /**
290
+ * Signals a refusal to destroy a stack whose CDK manifest has
291
+ * `terminationProtection: true`.
292
+ *
293
+ * Surfaced from `cdkd destroy <stack>` / `cdkd destroy --all` BEFORE
294
+ * any lock acquisition or per-resource delete. In multi-stack runs
295
+ * (e.g. `--all`) this counts as a per-stack failure and the rest of
296
+ * the targets continue — the aggregated count is wrapped in
297
+ * {@link PartialFailureError} so the command exits with code 2.
298
+ *
299
+ * The bypass workflow is documented in the message: edit the CDK code
300
+ * (`new Stack(app, '...', { terminationProtection: false })`),
301
+ * redeploy, then retry the destroy. A future `--remove-protection`
302
+ * flag (separate scope) will provide an explicit one-shot bypass.
303
+ *
304
+ * Note: `cdkd state destroy` (state-only, no synth) does NOT honor
305
+ * `terminationProtection` — the flag is a CDK property not persisted
306
+ * in cdkd's state.json. Use `cdkd destroy` when synth is available.
307
+ */
308
+ var StackTerminationProtectionError = class StackTerminationProtectionError extends CdkdError {
309
+ stackName;
310
+ constructor(stackName, cause) {
311
+ super(`Stack '${stackName}' has terminationProtection: true and cannot be destroyed. Set terminationProtection: false in the CDK code, redeploy, then retry 'cdkd destroy ${stackName}'.`, "STACK_TERMINATION_PROTECTION", cause);
312
+ this.stackName = stackName;
313
+ this.name = "StackTerminationProtectionError";
314
+ Object.setPrototypeOf(this, StackTerminationProtectionError.prototype);
315
+ }
316
+ };
317
+ /**
318
+ * `cdkd destroy <child>` refused because the named stack is a nested
319
+ * child of another stack. Mirrors CloudFormation's `you can't directly
320
+ * destroy a nested stack` semantic — destroying the child without
321
+ * touching the parent would leave the parent's `AWS::CloudFormation::Stack`
322
+ * record pointing at non-existent resources, and the parent's next
323
+ * deploy would silently try to re-create them.
324
+ *
325
+ * Detected by reading the loaded state's v6 `parentStack` field — only
326
+ * state files written by `NestedStackProvider.create` (or by the
327
+ * recursive `cdkd import --migrate-from-cloudformation` walk) carry
328
+ * this field; top-level stacks have `parentStack: undefined` and pass
329
+ * the guard unchanged.
330
+ *
331
+ * Fires from `cdkd destroy` AFTER state load but BEFORE lock
332
+ * acquisition or any per-resource delete, so the refusal is cheap.
333
+ * Surfaced as a per-stack failure (wrapped in {@link PartialFailureError},
334
+ * exit code 2) in multi-stack runs — siblings continue.
335
+ *
336
+ * Bypass paths (both intentional escape hatches):
337
+ *
338
+ * 1. `cdkd destroy <parent>` — the normal cascading-destroy path; the
339
+ * parent's reverse-DAG walks into the child via
340
+ * `NestedStackProvider.delete` and removes both layers atomically.
341
+ * 2. `cdkd state destroy <child>` — state-only destroy with no parent
342
+ * coupling check. The state-driven entry point intentionally
343
+ * bypasses this guard for the same reason `cdkd state destroy`
344
+ * bypasses `terminationProtection`: it's the "I know what I'm
345
+ * doing" path for cleaning up state when synth is unavailable or
346
+ * the user accepts leaving the parent's reference dangling.
347
+ */
348
+ var NestedStackChildDirectDestroyError = class NestedStackChildDirectDestroyError extends CdkdError {
349
+ stackName;
350
+ parentStack;
351
+ parentLogicalId;
352
+ constructor(stackName, parentStack, parentLogicalId, cause) {
353
+ const logicalIdSuffix = parentLogicalId ? ` (parent's logical id: ${parentLogicalId})` : "";
354
+ super(`Stack '${stackName}' is a nested child of '${parentStack}'${logicalIdSuffix}; directly destroying a nested stack is not supported. Either run 'cdkd destroy ${parentStack}' to cascade-delete this child along with its parent, or run 'cdkd state destroy ${stackName}' if you intentionally want to leave the parent's reference dangling (the state-only escape hatch).`, "NESTED_STACK_CHILD_DIRECT_DESTROY", cause);
355
+ this.stackName = stackName;
356
+ this.parentStack = parentStack;
357
+ if (parentLogicalId !== void 0) this.parentLogicalId = parentLogicalId;
358
+ this.name = "NestedStackChildDirectDestroyError";
359
+ Object.setPrototypeOf(this, NestedStackChildDirectDestroyError.prototype);
360
+ }
361
+ };
362
+ /**
363
+ * `cdkd destroy <producer>` refused because at least one consumer stack
364
+ * still records an `Fn::ImportValue` reference to one of the producer's
365
+ * outputs. This matches CloudFormation's strong-reference semantics —
366
+ * CFn rejects `DeleteStack` for an exporter while an importer exists.
367
+ *
368
+ * cdkd has no `--force` escape hatch for this (intentionally, mirroring
369
+ * CFn). The error message lists every offending consumer and points the
370
+ * user at the two valid resolution paths:
371
+ *
372
+ * 1. Destroy the consumer first: `cdkd destroy <consumer>`
373
+ * 2. Remove the `Fn::ImportValue` from the consumer's template and
374
+ * redeploy, then retry the producer destroy.
375
+ *
376
+ * Weak-reference consumers (`Fn::GetStackOutput`, cdkd-specific) never
377
+ * trigger this error by design — the producer stays deletable
378
+ * independently of consumers when the user intentionally chose a weak
379
+ * reference at template-authoring time.
380
+ *
381
+ * Exit code 2 (same as `PartialFailureError`) so multi-stack `cdkd
382
+ * destroy --all` runs that partially succeed still surface as
383
+ * non-zero without being indistinguishable from a fatal cdkd error.
384
+ */
385
+ var StackHasActiveImportsError = class StackHasActiveImportsError extends CdkdError {
386
+ exitCode = 2;
387
+ producerStack;
388
+ producerRegion;
389
+ consumers;
390
+ constructor(producerStack, producerRegion, consumers, cause) {
391
+ const lines = consumers.map((c) => ` - ${c.consumerStack} (${c.consumerRegion}): imports export '${c.exportName}'`);
392
+ super(`Cannot destroy stack '${producerStack}' (${producerRegion}): the following stacks still import its outputs via Fn::ImportValue:\n${lines.join("\n")}\n\nThis matches CloudFormation's strong-reference semantics — exports are\nprotected as long as a consumer references them.\n\nTo proceed:\n 1. Destroy the consumer first: cdkd destroy <consumer-stack>\n 2. Or remove the Fn::ImportValue from the consumer's template\n (e.g. inline the value, or refactor) and re-deploy the consumer,\n then retry this destroy.\n\nNote: cdkd's Fn::GetStackOutput intrinsic is a weak alternative that\ndoes NOT protect the producer — use it when you intentionally want\nthe producer to be deletable independently of consumers.`, "STACK_HAS_ACTIVE_IMPORTS", cause);
393
+ this.producerStack = producerStack;
394
+ this.producerRegion = producerRegion;
395
+ this.consumers = consumers;
396
+ this.name = "StackHasActiveImportsError";
397
+ Object.setPrototypeOf(this, StackHasActiveImportsError.prototype);
398
+ }
399
+ };
400
+ /**
401
+ * Signals a `cdkd local start-service` orchestration failure (Phase 2
402
+ * of #262 — `AWS::ECS::Service` emulator). Distinct from
403
+ * `LocalRunTaskError` because the service runner has its own lifecycle
404
+ * (long-running replica pool, restart-on-exit), so a failure inside it
405
+ * carries different operator semantics than a one-shot task failure.
406
+ */
407
+ var LocalStartServiceError = class LocalStartServiceError extends CdkdError {
408
+ constructor(message, cause) {
409
+ super(message, "LOCAL_START_SERVICE_ERROR", cause);
410
+ this.name = "LocalStartServiceError";
411
+ Object.setPrototypeOf(this, LocalStartServiceError.prototype);
412
+ }
413
+ };
414
+ /**
415
+ * Signals that the upstream `cdk` CLI is not available on PATH (or at
416
+ * the override path passed via `--cdk-bin`). Surfaced from `cdkd migrate`
417
+ * (#465 PR A) before any other work runs.
418
+ *
419
+ * The message includes the install hint `npm install -g aws-cdk@latest`
420
+ * so users on a fresh machine see exactly how to recover.
421
+ */
422
+ var MissingCdkCliError = class MissingCdkCliError extends CdkdError {
423
+ constructor(detail, cause) {
424
+ super(`${detail ?? "upstream 'cdk' CLI not found on PATH"}. 'cdkd migrate' shells out to the upstream aws-cdk CLI for L1 codegen — install it with 'npm install -g aws-cdk@latest' (or pass --cdk-bin <path>).`, "MISSING_CDK_CLI", cause);
425
+ this.name = "MissingCdkCliError";
426
+ Object.setPrototypeOf(this, MissingCdkCliError.prototype);
427
+ }
428
+ };
429
+ /**
430
+ * Generic local-migrate orchestration failure (#465 PR A). Used by
431
+ * `cdkd migrate` for pre-flight rejections (Custom Resource / nested
432
+ * stack / non-terminal CFn stack state), output-dir collisions, and
433
+ * `cdk migrate` subprocess failures whose underlying stderr is folded
434
+ * into the error message. Exit code 2 (partial-failure family) because
435
+ * some pre-flight failures leave the user with a partially-populated
436
+ * output directory that's still useful for debugging.
437
+ */
438
+ var LocalMigrateError = class LocalMigrateError extends CdkdError {
439
+ exitCode = 2;
440
+ constructor(message, cause) {
441
+ super(message, "LOCAL_MIGRATE_ERROR", cause);
442
+ this.name = "LocalMigrateError";
443
+ Object.setPrototypeOf(this, LocalMigrateError.prototype);
444
+ }
445
+ };
446
+ /**
447
+ * CloudFormation macro / `Fn::Transform` expansion failure (#463).
448
+ *
449
+ * cdkd hands templates that declare `Transform: [...]` (or carry
450
+ * `Fn::Transform: {...}` snippets) to CloudFormation server-side via a
451
+ * transient `CreateChangeSet --change-set-type CREATE` against a
452
+ * `cdkd-macro-expand-<id>` stack name. This error wraps every failure
453
+ * mode of that round-trip:
454
+ *
455
+ * - `CreateChangeSet` rejection (bad template, missing macro IAM
456
+ * permission, custom macro not found in the account).
457
+ * - Changeset settles in `FAILED` (`StatusReason` from CFn is
458
+ * surfaced verbatim — typically a custom macro Lambda error).
459
+ * - Waiter timeout (the macro Lambda is stuck or oversized).
460
+ * - `GetTemplate --template-stage Processed` returns no body (would
461
+ * indicate a CFn-side regression — fail loud rather than silently
462
+ * proceed with the un-expanded template).
463
+ * - Multi-stage detection: the expanded template still contains
464
+ * macros, which cdkd v1 does not support (the design intentionally
465
+ * rejects this so a second round-trip is not silently triggered).
466
+ *
467
+ * The error surfaces at exit code 2 (partial-failure family) — the
468
+ * cleanup `finally` in the expander always runs `DeleteChangeSet` +
469
+ * `DeleteStack` regardless of this error firing, so a failed
470
+ * expansion never leaves a transient CFn stack behind in a routine
471
+ * case. The user can re-run `cdkd deploy` once the upstream cause is
472
+ * fixed.
473
+ */
474
+ var MacroExpansionError = class MacroExpansionError extends CdkdError {
475
+ exitCode = 2;
476
+ constructor(message, cause) {
477
+ super(message, "MACRO_EXPANSION_ERROR", cause);
478
+ this.name = "MacroExpansionError";
479
+ Object.setPrototypeOf(this, MacroExpansionError.prototype);
480
+ }
481
+ };
482
+ /**
483
+ * Check if error is a cdkd error
484
+ */
485
+ function isCdkdError(error) {
486
+ return error instanceof CdkdError;
487
+ }
488
+ /**
489
+ * Format error for display
490
+ */
491
+ function formatError(error) {
492
+ if (isCdkdError(error)) {
493
+ let message = `${error.name}: ${error.message}`;
494
+ if (error.cause) message += `\nCaused by: ${error.cause.message}`;
495
+ return message;
496
+ }
497
+ if (error instanceof Error) return `${error.name}: ${error.message}`;
498
+ return String(error);
499
+ }
500
+ /**
501
+ * Global error handler
502
+ *
503
+ * Default exit code is 1 (general error). `PartialFailureError`
504
+ * overrides it to 2 so callers can distinguish "command crashed /
505
+ * unauthorized / bad arguments" from "command completed but some
506
+ * resources are still in an error state, re-run to clean up".
507
+ *
508
+ * A {@link CdkdError} subclass may set `silent = true` to suppress the
509
+ * default `logger.error` line — used by `cdkd drift` where the command
510
+ * has already printed a richer report and only needs the exit code.
511
+ */
512
+ function handleError(error) {
513
+ const logger = getLogger();
514
+ if (!(error instanceof CdkdError && error.silent)) logger.error(formatError(error));
515
+ if (error instanceof Error && error.stack) logger.debug("Stack trace:", error.stack);
516
+ const customExitCode = error instanceof CdkdError ? error.exitCode : void 0;
517
+ const exitCode = typeof customExitCode === "number" ? customExitCode : 1;
518
+ process.exit(exitCode);
519
+ }
520
+ /**
521
+ * Wrap async function with error handling
522
+ *
523
+ * Note: Uses `any[]` for args to support Commander.js action handlers
524
+ * which can have various parameter types
525
+ */
526
+ function withErrorHandling(fn) {
527
+ return async (...args) => {
528
+ try {
529
+ await fn(...args);
530
+ } catch (error) {
531
+ handleError(error);
532
+ }
533
+ };
534
+ }
535
+ /**
536
+ * Convert AWS SDK v3's synthetic `Unknown` / `UnknownError` exception into
537
+ * an actionable `Error` keyed off `$metadata.httpStatusCode`.
538
+ *
539
+ * Background — why this helper exists:
540
+ * AWS SDK v3 produces a synthetic `name: 'Unknown'`, `message:
541
+ * 'UnknownError'` exception when the protocol parser hits a HEAD response
542
+ * with an empty body. The most common trigger is `HeadBucket` against a
543
+ * bucket in a different region than the client (S3 returns 301
544
+ * PermanentRedirect with `x-amz-bucket-region` set, but the redirect
545
+ * middleware doesn't recover from the empty body). Surfacing the literal
546
+ * string `UnknownError` to users is uninformative.
547
+ *
548
+ * Behavior:
549
+ * - Non-AWS-SDK errors (anything where `name` is not `Unknown` and
550
+ * `message` is not `UnknownError`) pass through unchanged.
551
+ * - AWS SDK Unknown errors are mapped by HTTP status:
552
+ * - 301 → `Bucket '<name>' is in a different region…` (auto-resolved
553
+ * elsewhere; if this surfaces, it's a bug worth reporting).
554
+ * - 403 → `Access denied to bucket '<name>'.`
555
+ * - 404 → `Bucket '<name>' does not exist.`
556
+ * - other / unknown → `S3 error during <operation> on '<bucket>' (HTTP
557
+ * <status>).`
558
+ */
559
+ function normalizeAwsError(err, context = {}) {
560
+ if (!(err instanceof Error)) return new Error(String(err));
561
+ if (!(err.name === "Unknown" || err.message === "UnknownError")) return err;
562
+ const status = err.$metadata?.httpStatusCode;
563
+ const bucket = context.bucket ?? "<unknown bucket>";
564
+ const operation = context.operation ?? "operation";
565
+ switch (status) {
566
+ case 301: {
567
+ const responseHeaders = err.$response?.headers;
568
+ const region = responseHeaders?.["x-amz-bucket-region"] ?? responseHeaders?.["X-Amz-Bucket-Region"];
569
+ const where = region ? ` (in ${region})` : "";
570
+ return /* @__PURE__ */ new Error(`Bucket '${bucket}'${where} is in a different region than the client. cdkd resolves this automatically; if you see this message, please report it.`);
571
+ }
572
+ case 403: return /* @__PURE__ */ new Error(`Access denied to bucket '${bucket}'. Verify credentials and bucket policy.`);
573
+ case 404: return /* @__PURE__ */ new Error(`Bucket '${bucket}' does not exist.`);
574
+ default: {
575
+ const statusStr = status !== void 0 ? `HTTP ${status}` : "unknown HTTP status";
576
+ return /* @__PURE__ */ new Error(`S3 error during ${operation} on '${bucket}' (${statusStr}). See CloudTrail for details.`);
577
+ }
578
+ }
579
+ }
580
+
581
+ //#endregion
582
+ //#region src/utils/aws-clients.ts
583
+ var aws_clients_exports = /* @__PURE__ */ __exportAll({
584
+ AwsClients: () => AwsClients,
585
+ getAwsClients: () => getAwsClients,
586
+ resetAwsClients: () => resetAwsClients,
587
+ setAwsClients: () => setAwsClients
588
+ });
589
+ /**
590
+ * AWS clients manager
591
+ */
592
+ var AwsClients = class {
593
+ s3Client;
594
+ cloudControlClient;
595
+ iamClient;
596
+ sqsClient;
597
+ snsClient;
598
+ lambdaClient;
599
+ stsClient;
600
+ ec2Client;
601
+ dynamoDBClient;
602
+ cloudFormationClient;
603
+ apiGatewayClient;
604
+ eventBridgeClient;
605
+ secretsManagerClient;
606
+ ssmClient;
607
+ cloudFrontClient;
608
+ cloudWatchClient;
609
+ cloudWatchLogsClient;
610
+ bedrockAgentCoreControlClient;
611
+ acmClient;
612
+ config;
613
+ constructor(config = {}) {
614
+ this.config = config;
615
+ }
616
+ /**
617
+ * Get S3 client
618
+ *
619
+ * Note: If region and credentials are not provided, AWS SDK will use:
620
+ * 1. Environment variables (AWS_REGION, AWS_ACCESS_KEY_ID, etc.)
621
+ * 2. AWS credentials file (~/.aws/credentials)
622
+ * 3. IAM role (if running on EC2/ECS/Lambda)
623
+ */
624
+ getS3Client() {
625
+ if (!this.s3Client) this.s3Client = new S3Client({
626
+ ...this.config.region && { region: this.config.region },
627
+ ...this.config.credentials && { credentials: this.config.credentials },
628
+ logger: {
629
+ debug: () => {},
630
+ info: () => {},
631
+ warn: () => {},
632
+ error: () => {}
633
+ }
634
+ });
635
+ return this.s3Client;
636
+ }
637
+ /**
638
+ * Get Cloud Control API client
639
+ *
640
+ * Note: If region and credentials are not provided, AWS SDK will use:
641
+ * 1. Environment variables (AWS_REGION, AWS_ACCESS_KEY_ID, etc.)
642
+ * 2. AWS credentials file (~/.aws/credentials)
643
+ * 3. IAM role (if running on EC2/ECS/Lambda)
644
+ */
645
+ getCloudControlClient() {
646
+ if (!this.cloudControlClient) this.cloudControlClient = new CloudControlClient({
647
+ ...this.config.region && { region: this.config.region },
648
+ ...this.config.credentials && { credentials: this.config.credentials }
649
+ });
650
+ return this.cloudControlClient;
651
+ }
652
+ /**
653
+ * Get IAM client
654
+ *
655
+ * Note: IAM is a global service, but we accept region for consistency.
656
+ * If not specified, defaults to us-east-1.
657
+ */
658
+ getIAMClient() {
659
+ if (!this.iamClient) this.iamClient = new IAMClient({
660
+ region: this.config.region || "us-east-1",
661
+ ...this.config.credentials && { credentials: this.config.credentials }
662
+ });
663
+ return this.iamClient;
664
+ }
665
+ /**
666
+ * Convenience getter for S3 client
667
+ */
668
+ get s3() {
669
+ return this.getS3Client();
670
+ }
671
+ /**
672
+ * Convenience getter for Cloud Control client
673
+ */
674
+ get cloudControl() {
675
+ return this.getCloudControlClient();
676
+ }
677
+ /**
678
+ * Convenience getter for IAM client
679
+ */
680
+ get iam() {
681
+ return this.getIAMClient();
682
+ }
683
+ /**
684
+ * Get SQS client
685
+ */
686
+ getSQSClient() {
687
+ if (!this.sqsClient) this.sqsClient = new SQSClient({
688
+ ...this.config.region && { region: this.config.region },
689
+ ...this.config.credentials && { credentials: this.config.credentials }
690
+ });
691
+ return this.sqsClient;
692
+ }
693
+ /**
694
+ * Convenience getter for SQS client
695
+ */
696
+ get sqs() {
697
+ return this.getSQSClient();
698
+ }
699
+ /**
700
+ * Get SNS client
701
+ */
702
+ getSNSClient() {
703
+ if (!this.snsClient) this.snsClient = new SNSClient({
704
+ ...this.config.region && { region: this.config.region },
705
+ ...this.config.credentials && { credentials: this.config.credentials }
706
+ });
707
+ return this.snsClient;
708
+ }
709
+ /**
710
+ * Convenience getter for SNS client
711
+ */
712
+ get sns() {
713
+ return this.getSNSClient();
714
+ }
715
+ /**
716
+ * Get Lambda client
717
+ */
718
+ getLambdaClient() {
719
+ if (!this.lambdaClient) this.lambdaClient = new LambdaClient({
720
+ ...this.config.region && { region: this.config.region },
721
+ ...this.config.credentials && { credentials: this.config.credentials }
722
+ });
723
+ return this.lambdaClient;
724
+ }
725
+ /**
726
+ * Convenience getter for Lambda client
727
+ */
728
+ get lambda() {
729
+ return this.getLambdaClient();
730
+ }
731
+ /**
732
+ * Get EC2 client
733
+ */
734
+ getEC2Client() {
735
+ if (!this.ec2Client) this.ec2Client = new EC2Client({
736
+ ...this.config.region && { region: this.config.region },
737
+ ...this.config.credentials && { credentials: this.config.credentials }
738
+ });
739
+ return this.ec2Client;
740
+ }
741
+ /**
742
+ * Convenience getter for EC2 client
743
+ */
744
+ get ec2() {
745
+ return this.getEC2Client();
746
+ }
747
+ /**
748
+ * Get STS client
749
+ */
750
+ getSTSClient() {
751
+ if (!this.stsClient) this.stsClient = new STSClient({
752
+ ...this.config.region && { region: this.config.region },
753
+ ...this.config.credentials && { credentials: this.config.credentials }
754
+ });
755
+ return this.stsClient;
756
+ }
757
+ /**
758
+ * Convenience getter for STS client
759
+ */
760
+ get sts() {
761
+ return this.getSTSClient();
762
+ }
763
+ /**
764
+ * Get DynamoDB client
765
+ */
766
+ getDynamoDBClient() {
767
+ if (!this.dynamoDBClient) this.dynamoDBClient = new DynamoDBClient({
768
+ ...this.config.region && { region: this.config.region },
769
+ ...this.config.credentials && { credentials: this.config.credentials }
770
+ });
771
+ return this.dynamoDBClient;
772
+ }
773
+ /**
774
+ * Convenience getter for DynamoDB client
775
+ */
776
+ get dynamoDB() {
777
+ return this.getDynamoDBClient();
778
+ }
779
+ /**
780
+ * Get CloudFormation client
781
+ */
782
+ getCloudFormationClient() {
783
+ if (!this.cloudFormationClient) this.cloudFormationClient = new CloudFormationClient({
784
+ ...this.config.region && { region: this.config.region },
785
+ ...this.config.credentials && { credentials: this.config.credentials }
786
+ });
787
+ return this.cloudFormationClient;
788
+ }
789
+ /**
790
+ * Convenience getter for CloudFormation client
791
+ */
792
+ get cloudFormation() {
793
+ return this.getCloudFormationClient();
794
+ }
795
+ /**
796
+ * Get API Gateway client
797
+ */
798
+ getAPIGatewayClient() {
799
+ if (!this.apiGatewayClient) this.apiGatewayClient = new APIGatewayClient({
800
+ ...this.config.region && { region: this.config.region },
801
+ ...this.config.credentials && { credentials: this.config.credentials }
802
+ });
803
+ return this.apiGatewayClient;
804
+ }
805
+ /**
806
+ * Convenience getter for API Gateway client
807
+ */
808
+ get apiGateway() {
809
+ return this.getAPIGatewayClient();
810
+ }
811
+ /**
812
+ * Get EventBridge client
813
+ */
814
+ getEventBridgeClient() {
815
+ if (!this.eventBridgeClient) this.eventBridgeClient = new EventBridgeClient({
816
+ ...this.config.region && { region: this.config.region },
817
+ ...this.config.credentials && { credentials: this.config.credentials }
818
+ });
819
+ return this.eventBridgeClient;
820
+ }
821
+ /**
822
+ * Convenience getter for EventBridge client
823
+ */
824
+ get eventBridge() {
825
+ return this.getEventBridgeClient();
826
+ }
827
+ /**
828
+ * Get Secrets Manager client
829
+ */
830
+ getSecretsManagerClient() {
831
+ if (!this.secretsManagerClient) this.secretsManagerClient = new SecretsManagerClient({
832
+ ...this.config.region && { region: this.config.region },
833
+ ...this.config.credentials && { credentials: this.config.credentials }
834
+ });
835
+ return this.secretsManagerClient;
836
+ }
837
+ /**
838
+ * Convenience getter for Secrets Manager client
839
+ */
840
+ get secretsManager() {
841
+ return this.getSecretsManagerClient();
842
+ }
843
+ /**
844
+ * Get SSM client
845
+ */
846
+ getSSMClient() {
847
+ if (!this.ssmClient) this.ssmClient = new SSMClient({
848
+ ...this.config.region && { region: this.config.region },
849
+ ...this.config.credentials && { credentials: this.config.credentials }
850
+ });
851
+ return this.ssmClient;
852
+ }
853
+ /**
854
+ * Convenience getter for SSM client
855
+ */
856
+ get ssm() {
857
+ return this.getSSMClient();
858
+ }
859
+ /**
860
+ * Get CloudFront client
861
+ */
862
+ getCloudFrontClient() {
863
+ if (!this.cloudFrontClient) this.cloudFrontClient = new CloudFrontClient({
864
+ ...this.config.region && { region: this.config.region },
865
+ ...this.config.credentials && { credentials: this.config.credentials }
866
+ });
867
+ return this.cloudFrontClient;
868
+ }
869
+ /**
870
+ * Convenience getter for CloudFront client
871
+ */
872
+ get cloudFront() {
873
+ return this.getCloudFrontClient();
874
+ }
875
+ /**
876
+ * Get ACM client
877
+ *
878
+ * ACM is region-scoped. The client uses the configured AWS region so the
879
+ * deploy engine's per-stack region resolution carries through. CloudFront
880
+ * users must place their certificate stack in `us-east-1`.
881
+ */
882
+ getACMClient() {
883
+ if (!this.acmClient) this.acmClient = new ACMClient({
884
+ ...this.config.region && { region: this.config.region },
885
+ ...this.config.credentials && { credentials: this.config.credentials }
886
+ });
887
+ return this.acmClient;
888
+ }
889
+ /**
890
+ * Convenience getter for ACM client
891
+ */
892
+ get acm() {
893
+ return this.getACMClient();
894
+ }
895
+ /**
896
+ * Get CloudWatch client
897
+ */
898
+ getCloudWatchClient() {
899
+ if (!this.cloudWatchClient) this.cloudWatchClient = new CloudWatchClient({
900
+ ...this.config.region && { region: this.config.region },
901
+ ...this.config.credentials && { credentials: this.config.credentials }
902
+ });
903
+ return this.cloudWatchClient;
904
+ }
905
+ /**
906
+ * Convenience getter for CloudWatch client
907
+ */
908
+ get cloudWatch() {
909
+ return this.getCloudWatchClient();
910
+ }
911
+ /**
912
+ * Get CloudWatch Logs client
913
+ */
914
+ getCloudWatchLogsClient() {
915
+ if (!this.cloudWatchLogsClient) this.cloudWatchLogsClient = new CloudWatchLogsClient({
916
+ ...this.config.region && { region: this.config.region },
917
+ ...this.config.credentials && { credentials: this.config.credentials }
918
+ });
919
+ return this.cloudWatchLogsClient;
920
+ }
921
+ /**
922
+ * Convenience getter for CloudWatch Logs client
923
+ */
924
+ get cloudWatchLogs() {
925
+ return this.getCloudWatchLogsClient();
926
+ }
927
+ /**
928
+ * Get BedrockAgentCoreControl client
929
+ */
930
+ getBedrockAgentCoreControlClient() {
931
+ if (!this.bedrockAgentCoreControlClient) this.bedrockAgentCoreControlClient = new BedrockAgentCoreControlClient({
932
+ ...this.config.region && { region: this.config.region },
933
+ ...this.config.credentials && { credentials: this.config.credentials }
934
+ });
935
+ return this.bedrockAgentCoreControlClient;
936
+ }
937
+ /**
938
+ * Convenience getter for BedrockAgentCoreControl client
939
+ */
940
+ get bedrockAgentCoreControl() {
941
+ return this.getBedrockAgentCoreControlClient();
942
+ }
943
+ /**
944
+ * Destroy all clients
945
+ */
946
+ destroy() {
947
+ this.s3Client?.destroy();
948
+ this.cloudControlClient?.destroy();
949
+ this.iamClient?.destroy();
950
+ this.sqsClient?.destroy();
951
+ this.snsClient?.destroy();
952
+ this.lambdaClient?.destroy();
953
+ this.stsClient?.destroy();
954
+ this.ec2Client?.destroy();
955
+ this.dynamoDBClient?.destroy();
956
+ this.cloudFormationClient?.destroy();
957
+ this.apiGatewayClient?.destroy();
958
+ this.eventBridgeClient?.destroy();
959
+ this.secretsManagerClient?.destroy();
960
+ this.ssmClient?.destroy();
961
+ this.cloudFrontClient?.destroy();
962
+ this.cloudWatchClient?.destroy();
963
+ this.cloudWatchLogsClient?.destroy();
964
+ this.bedrockAgentCoreControlClient?.destroy();
965
+ this.acmClient?.destroy();
966
+ }
967
+ };
968
+ /**
969
+ * Global AWS clients instance
970
+ */
971
+ let globalClients = null;
972
+ /**
973
+ * Get or create global AWS clients
974
+ */
975
+ function getAwsClients(config) {
976
+ if (!globalClients) globalClients = new AwsClients(config);
977
+ return globalClients;
978
+ }
979
+ /**
980
+ * Set global AWS clients instance
981
+ */
982
+ function setAwsClients(clients) {
983
+ globalClients = clients;
984
+ }
985
+ /**
986
+ * Reset global AWS clients (useful for testing)
987
+ */
988
+ function resetAwsClients() {
989
+ globalClients?.destroy();
990
+ globalClients = null;
991
+ }
992
+
993
+ //#endregion
39
994
  //#region src/utils/aws-region-resolver.ts
40
995
  /**
41
996
  * Per-bucket region cache.
@@ -45,7 +1000,7 @@ import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
45
1000
  * request — the second caller awaits the same promise instead of issuing a
46
1001
  * duplicate API call.
47
1002
  */
48
- const cache = /* @__PURE__ */ new Map();
1003
+ const cache$1 = /* @__PURE__ */ new Map();
49
1004
  /**
50
1005
  * Resolve the AWS region of an S3 bucket via `GetBucketLocation`.
51
1006
  *
@@ -70,7 +1025,7 @@ const cache = /* @__PURE__ */ new Map();
70
1025
  * `opts.fallbackRegion` if provided, else `us-east-1`.
71
1026
  */
72
1027
  async function resolveBucketRegion(bucketName, opts = {}) {
73
- const cached = cache.get(bucketName);
1028
+ const cached = cache$1.get(bucketName);
74
1029
  if (cached) return cached;
75
1030
  const promise = (async () => {
76
1031
  const client = new S3Client({
@@ -79,7 +1034,7 @@ async function resolveBucketRegion(bucketName, opts = {}) {
79
1034
  ...opts.credentials && { credentials: opts.credentials }
80
1035
  });
81
1036
  try {
82
- const { expectedOwnerParam } = await import("./expected-bucket-owner-BjEfUnkA.js").then((n) => n.n);
1037
+ const { expectedOwnerParam } = await Promise.resolve().then(() => expected_bucket_owner_exports);
83
1038
  return (await client.send(new GetBucketLocationCommand({
84
1039
  Bucket: bucketName,
85
1040
  ...await expectedOwnerParam(client)
@@ -90,7 +1045,7 @@ async function resolveBucketRegion(bucketName, opts = {}) {
90
1045
  client.destroy();
91
1046
  }
92
1047
  })();
93
- cache.set(bucketName, promise);
1048
+ cache$1.set(bucketName, promise);
94
1049
  return promise;
95
1050
  }
96
1051
  /**
@@ -98,7 +1053,7 @@ async function resolveBucketRegion(bucketName, opts = {}) {
98
1053
  * cases — production code never needs to call this.
99
1054
  */
100
1055
  function clearBucketRegionCache() {
101
- cache.clear();
1056
+ cache$1.clear();
102
1057
  }
103
1058
  /**
104
1059
  * Resolve the cdkd state bucket name + region for a sibling AWS account.
@@ -1307,6 +2262,87 @@ function collectFnTransformNames(value, seen, out) {
1307
2262
  }
1308
2263
  }
1309
2264
 
2265
+ //#endregion
2266
+ //#region src/utils/expected-bucket-owner.ts
2267
+ /**
2268
+ * `ExpectedBucketOwner` resolution for cdkd-owned buckets (the state-bucket
2269
+ * family: state / lock / exports-index / deployment-events / transient
2270
+ * template uploads).
2271
+ *
2272
+ * S3 bucket names are global and cdkd's default names are predictable
2273
+ * (`cdkd-state-{accountId}`). Without this header, a bucket pre-created in
2274
+ * ANOTHER account under that name — with a bucket policy that deliberately
2275
+ * ALLOWS this account — would silently accept cdkd's state reads/writes
2276
+ * (name-squatting: the attacker could then read resource properties and
2277
+ * tamper with physical ids). With the header, S3 itself rejects any call
2278
+ * whose bucket owner differs (403), regardless of what the bucket's policy
2279
+ * allows. The asset-storage family has carried the same defense since issue
2280
+ * #1002 PR 1; this module extends it to the state-bucket family.
2281
+ *
2282
+ * Best-effort by design: a test double without a standard `config`, or an
2283
+ * STS failure, resolves to `undefined` (header omitted — pre-hardening
2284
+ * behavior) rather than failing the operation. The S3 calls themselves run
2285
+ * with the same credentials, so a working S3 path implies a working STS
2286
+ * path in practice; the degradation exists for exotic credential setups and
2287
+ * unit-test doubles, not as an expected runtime branch.
2288
+ */
2289
+ var expected_bucket_owner_exports = /* @__PURE__ */ __exportAll({
2290
+ expectedOwnerParam: () => expectedOwnerParam,
2291
+ resolveExpectedBucketOwner: () => resolveExpectedBucketOwner
2292
+ });
2293
+ const cache = /* @__PURE__ */ new WeakMap();
2294
+ /**
2295
+ * Resolve the AWS account id of the caller behind an S3 client's
2296
+ * credentials. Cached per client instance for the process lifetime (a
2297
+ * region-rebuilt replacement client re-resolves once — same credentials,
2298
+ * one extra STS call).
2299
+ *
2300
+ * Works for the cross-account state-read path too (`Fn::GetStackOutput`
2301
+ * `RoleArn`): the ephemeral backend's client carries the ASSUMED
2302
+ * credentials, so the resolved owner is the producer account — exactly the
2303
+ * owner its `cdkd-state-{producerAccountId}` bucket must have.
2304
+ */
2305
+ function resolveExpectedBucketOwner(client) {
2306
+ const cached = cache.get(client);
2307
+ if (cached) return cached;
2308
+ const promise = (async () => {
2309
+ try {
2310
+ const config = client.config;
2311
+ if (!config || typeof config.region !== "function" || typeof config.credentials !== "function") return;
2312
+ const region = await config.region();
2313
+ const credentials = await config.credentials();
2314
+ if (!credentials?.accessKeyId || !credentials.secretAccessKey) return;
2315
+ const sts = new STSClient({
2316
+ ...typeof region === "string" && region ? { region } : {},
2317
+ credentials: {
2318
+ accessKeyId: credentials.accessKeyId,
2319
+ secretAccessKey: credentials.secretAccessKey,
2320
+ ...credentials.sessionToken && { sessionToken: credentials.sessionToken }
2321
+ }
2322
+ });
2323
+ try {
2324
+ return (await sts.send(new GetCallerIdentityCommand({}))).Account;
2325
+ } finally {
2326
+ sts.destroy();
2327
+ }
2328
+ } catch (error) {
2329
+ getLogger().debug(`ExpectedBucketOwner resolution skipped (header omitted): ${String(error)}`);
2330
+ cache.delete(client);
2331
+ return;
2332
+ }
2333
+ })();
2334
+ cache.set(client, promise);
2335
+ return promise;
2336
+ }
2337
+ /**
2338
+ * Spread helper: `{...(await expectedOwnerParam(client))}` adds
2339
+ * `ExpectedBucketOwner` when the owner resolved, nothing otherwise.
2340
+ */
2341
+ async function expectedOwnerParam(client) {
2342
+ const owner = await resolveExpectedBucketOwner(client);
2343
+ return owner ? { ExpectedBucketOwner: owner } : {};
2344
+ }
2345
+
1310
2346
  //#endregion
1311
2347
  //#region src/cli/upload-cfn-template.ts
1312
2348
  /**
@@ -1936,7 +2972,7 @@ async function resolveStateBucketWithDefaultAndSource(cliBucket, region) {
1936
2972
  logger.debug("No state bucket specified, resolving default from account...");
1937
2973
  const { GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
1938
2974
  const { S3Client } = await import("@aws-sdk/client-s3");
1939
- const { getAwsClients } = await import("./aws-clients-B15NAPbL.js").then((n) => n.n);
2975
+ const { getAwsClients } = await Promise.resolve().then(() => aws_clients_exports);
1940
2976
  const accountId = (await getAwsClients().sts.send(new GetCallerIdentityCommand({}))).Account;
1941
2977
  const newName = getDefaultStateBucketName(accountId);
1942
2978
  const legacyName = getLegacyStateBucketName(accountId, region);
@@ -1994,7 +3030,7 @@ async function resolveStateBucketWithDefaultAndSource(cliBucket, region) {
1994
3030
  */
1995
3031
  async function bucketHasAnyState(client, bucketName) {
1996
3032
  const { ListObjectsV2Command } = await import("@aws-sdk/client-s3");
1997
- const { expectedOwnerParam } = await import("./expected-bucket-owner-BjEfUnkA.js").then((n) => n.n);
3033
+ const { expectedOwnerParam } = await Promise.resolve().then(() => expected_bucket_owner_exports);
1998
3034
  try {
1999
3035
  return ((await client.send(new ListObjectsV2Command({
2000
3036
  Bucket: bucketName,
@@ -2021,7 +3057,7 @@ async function bucketHasAnyState(client, bucketName) {
2021
3057
  */
2022
3058
  async function bucketExists(client, bucketName) {
2023
3059
  const { HeadBucketCommand } = await import("@aws-sdk/client-s3");
2024
- const { expectedOwnerParam } = await import("./expected-bucket-owner-BjEfUnkA.js").then((n) => n.n);
3060
+ const { expectedOwnerParam } = await Promise.resolve().then(() => expected_bucket_owner_exports);
2025
3061
  try {
2026
3062
  await client.send(new HeadBucketCommand({
2027
3063
  Bucket: bucketName,
@@ -3501,7 +4537,7 @@ function containsAnySource(value, map) {
3501
4537
  }
3502
4538
  return false;
3503
4539
  }
3504
- const FOLDABLE_PSEUDO_PARAMS = new Set([
4540
+ const FOLDABLE_PSEUDO_PARAMS = /* @__PURE__ */ new Set([
3505
4541
  "AWS::AccountId",
3506
4542
  "AWS::Region",
3507
4543
  "AWS::Partition",
@@ -3949,7 +4985,7 @@ var AssetPublisher = class {
3949
4985
  graph.addNode({
3950
4986
  id: publishNodeId,
3951
4987
  type: "asset-publish",
3952
- dependencies: new Set([buildNodeId]),
4988
+ dependencies: /* @__PURE__ */ new Set([buildNodeId]),
3953
4989
  state: "pending",
3954
4990
  data: {
3955
4991
  kind: "docker-publish",
@@ -5420,7 +6456,7 @@ function defensiveDependsOnToSkip(resource, template) {
5420
6456
  //#endregion
5421
6457
  //#region src/analyzer/dag-builder.ts
5422
6458
  const { Graph, alg } = graphlib;
5423
- const IAM_ROLE_POLICY_TYPES = new Set([
6459
+ const IAM_ROLE_POLICY_TYPES = /* @__PURE__ */ new Set([
5424
6460
  "AWS::IAM::Policy",
5425
6461
  "AWS::IAM::RolePolicy",
5426
6462
  "AWS::IAM::ManagedPolicy"
@@ -5843,8 +6879,8 @@ var ReplacementRulesRegistry = class {
5843
6879
  */
5844
6880
  initializeRules() {
5845
6881
  this.rules.set("AWS::S3::Bucket", {
5846
- replacementProperties: new Set(["BucketName"]),
5847
- updateableProperties: new Set([
6882
+ replacementProperties: /* @__PURE__ */ new Set(["BucketName"]),
6883
+ updateableProperties: /* @__PURE__ */ new Set([
5848
6884
  "Tags",
5849
6885
  "VersioningConfiguration",
5850
6886
  "LifecycleConfiguration",
@@ -5857,8 +6893,8 @@ var ReplacementRulesRegistry = class {
5857
6893
  ])
5858
6894
  });
5859
6895
  this.rules.set("AWS::Lambda::Function", {
5860
- replacementProperties: new Set(["FunctionName"]),
5861
- updateableProperties: new Set([
6896
+ replacementProperties: /* @__PURE__ */ new Set(["FunctionName"]),
6897
+ updateableProperties: /* @__PURE__ */ new Set([
5862
6898
  "Code",
5863
6899
  "Handler",
5864
6900
  "Runtime",
@@ -5876,7 +6912,7 @@ var ReplacementRulesRegistry = class {
5876
6912
  "Architectures"
5877
6913
  ])
5878
6914
  });
5879
- this.rules.set("AWS::Lambda::LayerVersion", { replacementProperties: new Set([
6915
+ this.rules.set("AWS::Lambda::LayerVersion", { replacementProperties: /* @__PURE__ */ new Set([
5880
6916
  "Content",
5881
6917
  "LayerName",
5882
6918
  "Description",
@@ -5884,7 +6920,7 @@ var ReplacementRulesRegistry = class {
5884
6920
  "CompatibleArchitectures",
5885
6921
  "LicenseInfo"
5886
6922
  ]) });
5887
- this.rules.set("AWS::Lambda::Version", { replacementProperties: new Set([
6923
+ this.rules.set("AWS::Lambda::Version", { replacementProperties: /* @__PURE__ */ new Set([
5888
6924
  "CodeSha256",
5889
6925
  "Description",
5890
6926
  "FunctionName",
@@ -5892,16 +6928,16 @@ var ReplacementRulesRegistry = class {
5892
6928
  "RuntimePolicy"
5893
6929
  ]) });
5894
6930
  this.rules.set("AWS::Lambda::EventInvokeConfig", {
5895
- replacementProperties: new Set(["FunctionName", "Qualifier"]),
5896
- updateableProperties: new Set([
6931
+ replacementProperties: /* @__PURE__ */ new Set(["FunctionName", "Qualifier"]),
6932
+ updateableProperties: /* @__PURE__ */ new Set([
5897
6933
  "MaximumEventAgeInSeconds",
5898
6934
  "MaximumRetryAttempts",
5899
6935
  "DestinationConfig"
5900
6936
  ])
5901
6937
  });
5902
6938
  this.rules.set("AWS::DynamoDB::Table", {
5903
- replacementProperties: new Set(["TableName", "KeySchema"]),
5904
- updateableProperties: new Set([
6939
+ replacementProperties: /* @__PURE__ */ new Set(["TableName", "KeySchema"]),
6940
+ updateableProperties: /* @__PURE__ */ new Set([
5905
6941
  "BillingMode",
5906
6942
  "ProvisionedThroughput",
5907
6943
  "GlobalSecondaryIndexes",
@@ -5912,15 +6948,15 @@ var ReplacementRulesRegistry = class {
5912
6948
  "TimeToLiveSpecification",
5913
6949
  "PointInTimeRecoverySpecification"
5914
6950
  ]),
5915
- conditionalReplacements: new Map([["AttributeDefinitions", attributeTypeChangedForSharedAttribute]])
6951
+ conditionalReplacements: /* @__PURE__ */ new Map([["AttributeDefinitions", attributeTypeChangedForSharedAttribute]])
5916
6952
  });
5917
6953
  this.rules.set("AWS::SQS::Queue", {
5918
- replacementProperties: new Set([
6954
+ replacementProperties: /* @__PURE__ */ new Set([
5919
6955
  "QueueName",
5920
6956
  "FifoQueue",
5921
6957
  "ContentBasedDeduplication"
5922
6958
  ]),
5923
- updateableProperties: new Set([
6959
+ updateableProperties: /* @__PURE__ */ new Set([
5924
6960
  "DelaySeconds",
5925
6961
  "MaximumMessageSize",
5926
6962
  "MessageRetentionPeriod",
@@ -5931,8 +6967,8 @@ var ReplacementRulesRegistry = class {
5931
6967
  ])
5932
6968
  });
5933
6969
  this.rules.set("AWS::IAM::Role", {
5934
- replacementProperties: new Set(["RoleName"]),
5935
- updateableProperties: new Set([
6970
+ replacementProperties: /* @__PURE__ */ new Set(["RoleName"]),
6971
+ updateableProperties: /* @__PURE__ */ new Set([
5936
6972
  "AssumeRolePolicyDocument",
5937
6973
  "Description",
5938
6974
  "ManagedPolicyArns",
@@ -5944,8 +6980,8 @@ var ReplacementRulesRegistry = class {
5944
6980
  ])
5945
6981
  });
5946
6982
  this.rules.set("AWS::SNS::Topic", {
5947
- replacementProperties: new Set(["TopicName"]),
5948
- updateableProperties: new Set([
6983
+ replacementProperties: /* @__PURE__ */ new Set(["TopicName"]),
6984
+ updateableProperties: /* @__PURE__ */ new Set([
5949
6985
  "DisplayName",
5950
6986
  "Subscription",
5951
6987
  "KmsMasterKeyId",
@@ -5954,7 +6990,7 @@ var ReplacementRulesRegistry = class {
5954
6990
  });
5955
6991
  this.rules.set("AWS::CodeCommit::Repository", {
5956
6992
  replacementProperties: /* @__PURE__ */ new Set([]),
5957
- updateableProperties: new Set([
6993
+ updateableProperties: /* @__PURE__ */ new Set([
5958
6994
  "RepositoryName",
5959
6995
  "RepositoryDescription",
5960
6996
  "KmsKeyId",
@@ -5962,8 +6998,8 @@ var ReplacementRulesRegistry = class {
5962
6998
  ])
5963
6999
  });
5964
7000
  this.rules.set("AWS::ECR::Repository", {
5965
- replacementProperties: new Set(["RepositoryName"]),
5966
- updateableProperties: new Set([
7001
+ replacementProperties: /* @__PURE__ */ new Set(["RepositoryName"]),
7002
+ updateableProperties: /* @__PURE__ */ new Set([
5967
7003
  "ImageScanningConfiguration",
5968
7004
  "ImageTagMutability",
5969
7005
  "LifecyclePolicy",
@@ -5972,12 +7008,12 @@ var ReplacementRulesRegistry = class {
5972
7008
  ])
5973
7009
  });
5974
7010
  this.rules.set("AWS::Logs::LogGroup", {
5975
- replacementProperties: new Set(["LogGroupName"]),
5976
- updateableProperties: new Set(["RetentionInDays", "KmsKeyId"])
7011
+ replacementProperties: /* @__PURE__ */ new Set(["LogGroupName"]),
7012
+ updateableProperties: /* @__PURE__ */ new Set(["RetentionInDays", "KmsKeyId"])
5977
7013
  });
5978
7014
  this.rules.set("AWS::Kinesis::Stream", {
5979
- replacementProperties: new Set(["Name"]),
5980
- updateableProperties: new Set([
7015
+ replacementProperties: /* @__PURE__ */ new Set(["Name"]),
7016
+ updateableProperties: /* @__PURE__ */ new Set([
5981
7017
  "RetentionPeriodHours",
5982
7018
  "ShardCount",
5983
7019
  "StreamModeDetails",
@@ -5986,8 +7022,8 @@ var ReplacementRulesRegistry = class {
5986
7022
  ])
5987
7023
  });
5988
7024
  this.rules.set("AWS::SecretsManager::Secret", {
5989
- replacementProperties: new Set(["Name"]),
5990
- updateableProperties: new Set([
7025
+ replacementProperties: /* @__PURE__ */ new Set(["Name"]),
7026
+ updateableProperties: /* @__PURE__ */ new Set([
5991
7027
  "Description",
5992
7028
  "KmsKeyId",
5993
7029
  "SecretString",
@@ -5997,8 +7033,8 @@ var ReplacementRulesRegistry = class {
5997
7033
  ])
5998
7034
  });
5999
7035
  this.rules.set("AWS::StepFunctions::StateMachine", {
6000
- replacementProperties: new Set(["StateMachineName", "StateMachineType"]),
6001
- updateableProperties: new Set([
7036
+ replacementProperties: /* @__PURE__ */ new Set(["StateMachineName", "StateMachineType"]),
7037
+ updateableProperties: /* @__PURE__ */ new Set([
6002
7038
  "DefinitionString",
6003
7039
  "DefinitionS3Location",
6004
7040
  "Definition",
@@ -6011,8 +7047,8 @@ var ReplacementRulesRegistry = class {
6011
7047
  ])
6012
7048
  });
6013
7049
  this.rules.set("AWS::Events::Rule", {
6014
- replacementProperties: new Set(["Name", "EventBusName"]),
6015
- updateableProperties: new Set([
7050
+ replacementProperties: /* @__PURE__ */ new Set(["Name", "EventBusName"]),
7051
+ updateableProperties: /* @__PURE__ */ new Set([
6016
7052
  "ScheduleExpression",
6017
7053
  "EventPattern",
6018
7054
  "State",
@@ -6022,8 +7058,8 @@ var ReplacementRulesRegistry = class {
6022
7058
  ])
6023
7059
  });
6024
7060
  this.rules.set("AWS::SSM::Parameter", {
6025
- replacementProperties: new Set(["Name"]),
6026
- updateableProperties: new Set([
7061
+ replacementProperties: /* @__PURE__ */ new Set(["Name"]),
7062
+ updateableProperties: /* @__PURE__ */ new Set([
6027
7063
  "Value",
6028
7064
  "Description",
6029
7065
  "Type",
@@ -6036,12 +7072,12 @@ var ReplacementRulesRegistry = class {
6036
7072
  });
6037
7073
  this.rules.set("AWS::Budgets::Budget", {
6038
7074
  replacementProperties: /* @__PURE__ */ new Set(),
6039
- updateableProperties: new Set(["NotificationsWithSubscribers", "ResourceTags"]),
6040
- conditionalReplacements: new Map([["Budget", budgetNameChanged]])
7075
+ updateableProperties: /* @__PURE__ */ new Set(["NotificationsWithSubscribers", "ResourceTags"]),
7076
+ conditionalReplacements: /* @__PURE__ */ new Map([["Budget", budgetNameChanged]])
6041
7077
  });
6042
7078
  this.rules.set("AWS::CloudWatch::Alarm", {
6043
- replacementProperties: new Set(["AlarmName"]),
6044
- updateableProperties: new Set([
7079
+ replacementProperties: /* @__PURE__ */ new Set(["AlarmName"]),
7080
+ updateableProperties: /* @__PURE__ */ new Set([
6045
7081
  "ComparisonOperator",
6046
7082
  "EvaluationPeriods",
6047
7083
  "DatapointsToAlarm",
@@ -6066,8 +7102,8 @@ var ReplacementRulesRegistry = class {
6066
7102
  ])
6067
7103
  });
6068
7104
  this.rules.set("AWS::ApiGateway::RestApi", {
6069
- replacementProperties: new Set(["Name"]),
6070
- updateableProperties: new Set([
7105
+ replacementProperties: /* @__PURE__ */ new Set(["Name"]),
7106
+ updateableProperties: /* @__PURE__ */ new Set([
6071
7107
  "Description",
6072
7108
  "Policy",
6073
7109
  "EndpointConfiguration",
@@ -6076,20 +7112,20 @@ var ReplacementRulesRegistry = class {
6076
7112
  "Tags"
6077
7113
  ])
6078
7114
  });
6079
- this.rules.set("AWS::RDS::DBProxy", { replacementProperties: new Set([
7115
+ this.rules.set("AWS::RDS::DBProxy", { replacementProperties: /* @__PURE__ */ new Set([
6080
7116
  "DBProxyName",
6081
7117
  "EngineFamily",
6082
7118
  "VpcSubnetIds"
6083
7119
  ]) });
6084
- this.rules.set("AWS::RDS::DBProxyEndpoint", { replacementProperties: new Set([
7120
+ this.rules.set("AWS::RDS::DBProxyEndpoint", { replacementProperties: /* @__PURE__ */ new Set([
6085
7121
  "DBProxyName",
6086
7122
  "DBProxyEndpointName",
6087
7123
  "VpcSubnetIds",
6088
7124
  "TargetRole"
6089
7125
  ]) });
6090
- this.rules.set("AWS::RDS::DBProxyTargetGroup", { replacementProperties: new Set(["DBProxyName", "TargetGroupName"]) });
6091
- this.rules.set("AWS::EC2::Instance", { replacementProperties: new Set(["EbsOptimized"]) });
6092
- this.rules.set("AWS::ECS::TaskDefinition", { replacementProperties: new Set([
7126
+ this.rules.set("AWS::RDS::DBProxyTargetGroup", { replacementProperties: /* @__PURE__ */ new Set(["DBProxyName", "TargetGroupName"]) });
7127
+ this.rules.set("AWS::EC2::Instance", { replacementProperties: /* @__PURE__ */ new Set(["EbsOptimized"]) });
7128
+ this.rules.set("AWS::ECS::TaskDefinition", { replacementProperties: /* @__PURE__ */ new Set([
6093
7129
  "Family",
6094
7130
  "ContainerDefinitions",
6095
7131
  "Cpu",
@@ -6310,7 +7346,7 @@ function unescapeJsonPointerSegment$1(segment) {
6310
7346
  * NOT track in-place edits (e.g. a Lambda `Arn`) never trigger spurious
6311
7347
  * dependent promotion.
6312
7348
  */
6313
- const IN_PLACE_UPDATE_DERIVED_ATTRS = Object.freeze({ "AWS::EC2::LaunchTemplate": new Set(["LatestVersionNumber", "DefaultVersionNumber"]) });
7349
+ const IN_PLACE_UPDATE_DERIVED_ATTRS = Object.freeze({ "AWS::EC2::LaunchTemplate": /* @__PURE__ */ new Set(["LatestVersionNumber", "DefaultVersionNumber"]) });
6314
7350
  /**
6315
7351
  * Diff calculator for comparing desired state (template) with current state
6316
7352
  */
@@ -6708,7 +7744,7 @@ var DiffCalculator = class DiffCalculator {
6708
7744
  */
6709
7745
  async compareProperties(resourceType, currentProperties, desiredProperties) {
6710
7746
  const changes = [];
6711
- const allKeys = new Set([...Object.keys(currentProperties), ...Object.keys(desiredProperties)]);
7747
+ const allKeys = /* @__PURE__ */ new Set([...Object.keys(currentProperties), ...Object.keys(desiredProperties)]);
6712
7748
  const ignoredProperties = /* @__PURE__ */ new Set();
6713
7749
  if (resourceType === "AWS::CloudFormation::CustomResource" || resourceType.startsWith("Custom::")) ignoredProperties.add("Timestamp");
6714
7750
  let createOnlyPaths;
@@ -6736,7 +7772,7 @@ var DiffCalculator = class DiffCalculator {
6736
7772
  }
6737
7773
  return changes;
6738
7774
  }
6739
- static INTRINSIC_KEYS = new Set([
7775
+ static INTRINSIC_KEYS = /* @__PURE__ */ new Set([
6740
7776
  "Ref",
6741
7777
  "Fn::Sub",
6742
7778
  "Fn::GetAtt",
@@ -7055,6 +8091,130 @@ async function applyRoleArnIfSet(opts) {
7055
8091
  }
7056
8092
  }
7057
8093
 
8094
+ //#endregion
8095
+ //#region src/provisioning/region-check.ts
8096
+ /**
8097
+ * Verify that the AWS client's region matches the region the resource is
8098
+ * expected to live in before treating a `NotFound` error as idempotent
8099
+ * delete success.
8100
+ *
8101
+ * Why: a destroy run with the wrong region would otherwise receive
8102
+ * `*NotFound` for every resource and silently strip them all from state,
8103
+ * leaving the actual AWS resources orphaned in the real region. The
8104
+ * silent-failure incident that motivated this check was a Lambda in
8105
+ * `us-west-2` removed from state by a destroy that ran with a `us-east-1`
8106
+ * client.
8107
+ *
8108
+ * Behavior:
8109
+ * - If `expectedRegion` is unset, this is a no-op (back-compat: existing
8110
+ * idempotent semantics preserved for callers that have not been
8111
+ * threaded with state region).
8112
+ * - If `clientRegion` matches `expectedRegion`, returns silently.
8113
+ * - Otherwise throws `ProvisioningError` so the caller surfaces the
8114
+ * mismatch instead of swallowing the NotFound.
8115
+ *
8116
+ * @param clientRegion Region resolved from the AWS SDK client config
8117
+ * (typically `await client.config.region()`).
8118
+ * @param expectedRegion Region recorded in stack state, or undefined if
8119
+ * the caller has no expected region.
8120
+ * @param resourceType CloudFormation resource type, used in the error
8121
+ * message and on the thrown ProvisioningError.
8122
+ * @param logicalId Logical ID of the resource, used in the error message
8123
+ * and on the thrown ProvisioningError.
8124
+ * @param physicalId Optional physical ID, used in the error message and
8125
+ * on the thrown ProvisioningError.
8126
+ */
8127
+ function assertRegionMatch(clientRegion, expectedRegion, resourceType, logicalId, physicalId) {
8128
+ if (!expectedRegion) return;
8129
+ if (!clientRegion) throw new ProvisioningError(`Refusing to treat NotFound as idempotent delete success for ${logicalId} (${resourceType}): AWS client region is unknown but stack state expects ${expectedRegion}. The resource may exist in ${expectedRegion} and would be silently removed from state if this NotFound were trusted.`, resourceType, logicalId, physicalId);
8130
+ if (clientRegion !== expectedRegion) throw new ProvisioningError(`Refusing to treat NotFound as idempotent delete success for ${logicalId} (${resourceType}): AWS client region ${clientRegion} does not match stack state region ${expectedRegion}. The resource likely still exists in ${expectedRegion}; rerun the destroy with the correct region (e.g. --region ${expectedRegion}).`, resourceType, logicalId, physicalId);
8131
+ }
8132
+
8133
+ //#endregion
8134
+ //#region src/provisioning/import-helpers.ts
8135
+ /**
8136
+ * Read an explicit name field from template properties. Returns `undefined`
8137
+ * when the property is missing or not a string — callers fall back to
8138
+ * tag-based lookup in that case.
8139
+ */
8140
+ function readNameProperty(input, propertyName) {
8141
+ const value = input.properties?.[propertyName];
8142
+ return typeof value === "string" && value.length > 0 ? value : void 0;
8143
+ }
8144
+ /**
8145
+ * Resolve the physical id when the template provides an explicit name OR the
8146
+ * caller passed `--resource`/`--resource-mapping`. Returns `undefined` when
8147
+ * neither shortcut applies — caller must then fall back to tag-based lookup.
8148
+ *
8149
+ * Does NOT verify the resource exists: callers should follow up with a
8150
+ * service-specific `Head*`/`Get*`/`Describe*` to fail fast if the named
8151
+ * resource is missing.
8152
+ */
8153
+ function resolveExplicitPhysicalId(input, nameProperty) {
8154
+ if (input.knownPhysicalId) return input.knownPhysicalId;
8155
+ if (nameProperty) {
8156
+ const name = readNameProperty(input, nameProperty);
8157
+ if (name) return name;
8158
+ }
8159
+ }
8160
+ /**
8161
+ * The standard tag CDK puts on every deployed resource — its construct path
8162
+ * within the app, e.g. `MyStack/MyConstruct/MyBucket`. Used as the lookup key
8163
+ * when no explicit name is in the template.
8164
+ */
8165
+ const CDK_PATH_TAG = "aws:cdk:path";
8166
+ /**
8167
+ * Match an AWS resource's tag set against the CDK path the template carries.
8168
+ * Returns true if the resource was deployed by the same CDK construct.
8169
+ */
8170
+ function matchesCdkPath(tags, cdkPath) {
8171
+ if (!tags || !cdkPath) return false;
8172
+ for (const t of tags) if (t.Key === "aws:cdk:path" && t.Value === cdkPath) return true;
8173
+ return false;
8174
+ }
8175
+ /**
8176
+ * Re-shape an AWS tag list (any of the common shapes — array of `{Key, Value}`,
8177
+ * map keyed by tag name, or v2-style array of `{TagKey, TagValue}`) into the
8178
+ * canonical CFn shape (`Array<{Key, Value}>`) that cdkd state holds, with
8179
+ * `aws:`-prefixed entries filtered out.
8180
+ *
8181
+ * AWS reserves the `aws:` tag prefix; CDK injects `aws:cdk:path` (and
8182
+ * sometimes `aws:cdk:metadata`) on every resource it deploys. Those tags are
8183
+ * NOT in cdkd state's `Tags` (they come from CDK template `Metadata`, not
8184
+ * `Properties.Tags`), so leaving them in the AWS-current snapshot would fire
8185
+ * false-positive drift on every CDK-deployed resource.
8186
+ *
8187
+ * Returns an empty array `[]` when AWS reports no user tags. Callers decide
8188
+ * whether to surface `Tags: []` (most providers — matches the typical
8189
+ * CFn behavior of always emitting Tags in templates) or omit the key
8190
+ * entirely (when the corresponding `create()` only sets Tags when the user
8191
+ * explicitly passes them — see each provider's docstring).
8192
+ */
8193
+ function normalizeAwsTagsToCfn(tags) {
8194
+ if (!tags) return [];
8195
+ const out = [];
8196
+ if (Array.isArray(tags)) for (const t of tags) {
8197
+ const obj = t;
8198
+ const k = (typeof obj["Key"] === "string" ? obj["Key"] : void 0) ?? (typeof obj["TagKey"] === "string" ? obj["TagKey"] : void 0) ?? (typeof obj["key"] === "string" ? obj["key"] : void 0);
8199
+ const v = (typeof obj["Value"] === "string" ? obj["Value"] : void 0) ?? (typeof obj["TagValue"] === "string" ? obj["TagValue"] : void 0) ?? (typeof obj["value"] === "string" ? obj["value"] : void 0);
8200
+ if (typeof k !== "string" || k.length === 0) continue;
8201
+ if (k.startsWith("aws:")) continue;
8202
+ out.push({
8203
+ Key: k,
8204
+ Value: typeof v === "string" ? v : ""
8205
+ });
8206
+ }
8207
+ else for (const [k, v] of Object.entries(tags)) {
8208
+ if (!k || k.startsWith("aws:")) continue;
8209
+ out.push({
8210
+ Key: k,
8211
+ Value: typeof v === "string" ? v : ""
8212
+ });
8213
+ }
8214
+ out.sort((a, b) => a.Key < b.Key ? -1 : a.Key > b.Key ? 1 : 0);
8215
+ return out;
8216
+ }
8217
+
7058
8218
  //#endregion
7059
8219
  //#region src/provisioning/providers/wafv2-provider.ts
7060
8220
  /**
@@ -7110,7 +8270,7 @@ var WAFv2WebACLProvider = class {
7110
8270
  wafv2Client;
7111
8271
  providerRegion = process.env["AWS_REGION"];
7112
8272
  logger = getLogger().child("WAFv2WebACLProvider");
7113
- handledProperties = new Map([["AWS::WAFv2::WebACL", new Set([
8273
+ handledProperties = /* @__PURE__ */ new Map([["AWS::WAFv2::WebACL", /* @__PURE__ */ new Set([
7114
8274
  "Name",
7115
8275
  "Scope",
7116
8276
  "Tags",
@@ -7276,14 +8436,14 @@ var WAFv2WebACLProvider = class {
7276
8436
  const tagsToRemove = [];
7277
8437
  for (const k of oldMap.keys()) if (!newMap.has(k)) tagsToRemove.push(k);
7278
8438
  if (tagsToRemove.length > 0) {
7279
- await this.getClient().send(new UntagResourceCommand$9({
8439
+ await this.getClient().send(new UntagResourceCommand$12({
7280
8440
  ResourceARN: arn,
7281
8441
  TagKeys: tagsToRemove
7282
8442
  }));
7283
8443
  this.logger.debug(`Removed ${tagsToRemove.length} tag(s) from WAFv2 WebACL ${arn}`);
7284
8444
  }
7285
8445
  if (tagsToAdd.length > 0) {
7286
- await this.getClient().send(new TagResourceCommand$9({
8446
+ await this.getClient().send(new TagResourceCommand$12({
7287
8447
  ResourceARN: arn,
7288
8448
  Tags: tagsToAdd
7289
8449
  }));
@@ -7334,7 +8494,7 @@ var WAFv2WebACLProvider = class {
7334
8494
  result["TokenDomains"] = webACL.TokenDomains ? [...webACL.TokenDomains] : [];
7335
8495
  if (webACL.AssociationConfig) result["AssociationConfig"] = webACL.AssociationConfig;
7336
8496
  try {
7337
- result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$8({ ResourceARN: physicalId }))).TagInfoForResource?.TagList);
8497
+ result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$11({ ResourceARN: physicalId }))).TagInfoForResource?.TagList);
7338
8498
  } catch (err) {
7339
8499
  this.logger.debug(`WAFv2 ListTagsForResource(${physicalId}) failed: ${err instanceof Error ? err.message : String(err)}`);
7340
8500
  }
@@ -7379,7 +8539,7 @@ var WAFv2WebACLProvider = class {
7379
8539
  }));
7380
8540
  for (const item of list.WebACLs ?? []) {
7381
8541
  if (!item.ARN) continue;
7382
- const tagList = (await this.getClient().send(new ListTagsForResourceCommand$8({ ResourceARN: item.ARN }))).TagInfoForResource?.TagList;
8542
+ const tagList = (await this.getClient().send(new ListTagsForResourceCommand$11({ ResourceARN: item.ARN }))).TagInfoForResource?.TagList;
7383
8543
  if (matchesCdkPath(tagList, input.cdkPath)) return {
7384
8544
  physicalId: item.ARN,
7385
8545
  attributes: {}
@@ -7473,7 +8633,7 @@ const AWS_NO_VALUE = Symbol("AWS::NoValue");
7473
8633
  * after-last-pipe extraction would return the PARENT id for them.
7474
8634
  * 5. Pin each addition with a unit test in intrinsic-functions.test.ts.
7475
8635
  */
7476
- const REF_RETURNS_SEGMENT_AFTER_PIPE = new Set([
8636
+ const REF_RETURNS_SEGMENT_AFTER_PIPE = /* @__PURE__ */ new Set([
7477
8637
  "AWS::ApiGateway::Model",
7478
8638
  "AWS::ApiGateway::RequestValidator",
7479
8639
  "AWS::ApiGateway::Stage",
@@ -7526,7 +8686,7 @@ const REF_RETURNS_SEGMENT_AFTER_PIPE = new Set([
7526
8686
  * Deployment is `[ApiId, DeploymentId]` (after-pipe). Always re-check the
7527
8687
  * type's own `describe-type` primaryIdentifier.
7528
8688
  */
7529
- const REF_RETURNS_SEGMENT_BEFORE_FIRST_PIPE = new Set([
8689
+ const REF_RETURNS_SEGMENT_BEFORE_FIRST_PIPE = /* @__PURE__ */ new Set([
7530
8690
  "AWS::ApiGateway::Deployment",
7531
8691
  "AWS::ApiGateway::DocumentationPart",
7532
8692
  "AWS::ApiGatewayV2::Authorizer",
@@ -7544,7 +8704,7 @@ const REF_RETURNS_SEGMENT_BEFORE_FIRST_PIPE = new Set([
7544
8704
  * - `AWS::CloudTrail::Trail` → the trail name (`arn:…:trail/<name>`).
7545
8705
  * Value: the ARN resource-type marker after which the CFn `Ref` value starts.
7546
8706
  */
7547
- const REF_RETURNS_NAME_FROM_ARN = new Map([["AWS::Events::Rule", ":rule/"], ["AWS::CloudTrail::Trail", ":trail/"]]);
8707
+ const REF_RETURNS_NAME_FROM_ARN = /* @__PURE__ */ new Map([["AWS::Events::Rule", ":rule/"], ["AWS::CloudTrail::Trail", ":trail/"]]);
7548
8708
  /**
7549
8709
  * Build a {@link RefStateLookup} from a resource's stored state maps, checking
7550
8710
  * `properties` first (the template value CFn `Ref` mirrors) then `attributes`.
@@ -7628,7 +8788,7 @@ function cfnRefValueFromPhysicalId(resourceType, physicalId, stateLookup) {
7628
8788
  * resolver ever runs, so by resolution time it should already be gone. Listing
7629
8789
  * it here keeps a stray (already-expanded) occurrence from hard-erroring.
7630
8790
  */
7631
- const HANDLED_INTRINSIC_KEYS = new Set([
8791
+ const HANDLED_INTRINSIC_KEYS = /* @__PURE__ */ new Set([
7632
8792
  "Ref",
7633
8793
  "Fn::GetAtt",
7634
8794
  "Fn::Join",
@@ -9082,6 +10242,36 @@ var IntrinsicFunctionResolver = class {
9082
10242
  }
9083
10243
  };
9084
10244
 
10245
+ //#endregion
10246
+ //#region src/provisioning/ec2-termination-protection.ts
10247
+ /**
10248
+ * Flip `DisableApiTermination` off on an instance. Idempotent — EC2 accepts the
10249
+ * call when the attribute is already false. Non-fatal: a NotFound (already
10250
+ * gone) or any other error is swallowed at debug so the actual delete still
10251
+ * proceeds (it will surface the real failure if the instance truly cannot be
10252
+ * deleted).
10253
+ */
10254
+ async function disableInstanceApiTermination(client, instanceId, logger) {
10255
+ try {
10256
+ await client.send(new ModifyInstanceAttributeCommand({
10257
+ InstanceId: instanceId,
10258
+ DisableApiTermination: { Value: false }
10259
+ }));
10260
+ logger.debug(`Disabled DisableApiTermination on EC2 Instance ${instanceId} before deletion`);
10261
+ } catch (flipError) {
10262
+ logger.debug(`Could not disable DisableApiTermination on ${instanceId}: ${flipError instanceof Error ? flipError.message : String(flipError)}`);
10263
+ }
10264
+ }
10265
+ /**
10266
+ * Does this error message indicate the terminate / delete raced the
10267
+ * `DisableApiTermination` flip-off propagation (so re-flipping + retrying is
10268
+ * the right move)? Matches both the SDK `TerminateInstances` 400 and the Cloud
10269
+ * Control `DeleteResource` wrapper of the same underlying EC2 error.
10270
+ */
10271
+ function isTerminationProtectionPropagationError(message) {
10272
+ return /may not be terminated|disableApiTermination/i.test(message);
10273
+ }
10274
+
9085
10275
  //#endregion
9086
10276
  //#region src/provisioning/json-patch-generator.ts
9087
10277
  /**
@@ -9287,7 +10477,7 @@ function unescapeJsonPointerSegment(segment) {
9287
10477
  * pre-flight rejects these fast with an actionable message instead of letting
9288
10478
  * the optimistic Cloud Control fallthrough fail mid-deploy.
9289
10479
  */
9290
- const NON_PROVISIONABLE_TYPES = new Set([
10480
+ const NON_PROVISIONABLE_TYPES = /* @__PURE__ */ new Set([
9291
10481
  "Alexa::ASK::Skill",
9292
10482
  "AWS::AmazonMQ::ConfigurationAssociation",
9293
10483
  "AWS::ApiGatewayV2::ApiGatewayManagedOverrides",
@@ -9496,7 +10686,7 @@ function unsupportedTypeIssueUrl(resourceType) {
9496
10686
  * CC API schema declares these as type: ["string", "object"] but
9497
10687
  * the implementation only accepts strings.
9498
10688
  */
9499
- const JSON_STRING_PROPERTIES = { "AWS::Events::Rule": new Set(["EventPattern"]) };
10689
+ const JSON_STRING_PROPERTIES = { "AWS::Events::Rule": /* @__PURE__ */ new Set(["EventPattern"]) };
9500
10690
  /**
9501
10691
  * Stringify object properties that CC API expects as JSON strings.
9502
10692
  */
@@ -9685,7 +10875,7 @@ var CloudControlProvider = class {
9685
10875
  this.logger.debug(`Deleting resource ${logicalId} (${resourceType}), physical ID: ${physicalId}`);
9686
10876
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
9687
10877
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
9688
- const { ASGProvider } = await import("./asg-provider-Dbl1_mwT.js").then((n) => n.n);
10878
+ const { ASGProvider } = await import("./asg-provider-CMWe8LlY.js").then((n) => n.n);
9689
10879
  await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
9690
10880
  return;
9691
10881
  }
@@ -10086,7 +11276,7 @@ var CloudControlProvider = class {
10086
11276
  * even if they appear to be supported.
10087
11277
  */
10088
11278
  static isSupportedResourceType(resourceType) {
10089
- if (new Set([
11279
+ if ((/* @__PURE__ */ new Set([
10090
11280
  "AWS::IAM::Role",
10091
11281
  "AWS::IAM::Policy",
10092
11282
  "AWS::IAM::User",
@@ -10102,7 +11292,7 @@ var CloudControlProvider = class {
10102
11292
  "Custom::CDKBucketDeployment",
10103
11293
  "Custom::S3AutoDeleteObjects",
10104
11294
  "AWS::Route53::HostedZone"
10105
- ]).has(resourceType)) return false;
11295
+ ])).has(resourceType)) return false;
10106
11296
  if (resourceType.startsWith("Custom::") || resourceType.startsWith("AWS::CloudFormation::CustomResource")) return false;
10107
11297
  if (isNonProvisionable(resourceType)) return false;
10108
11298
  return resourceType.startsWith("AWS::");
@@ -10862,13 +12052,13 @@ var CustomResourceProvider = class CustomResourceProvider {
10862
12052
 
10863
12053
  //#endregion
10864
12054
  //#region src/provisioning/property-coverage.generated.ts
10865
- const PROPERTY_COVERAGE_BY_TYPE = new Map([
12055
+ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
10866
12056
  ["AWS::ApiGateway::Account", {
10867
- handled: new Set(["CloudWatchRoleArn"]),
12057
+ handled: /* @__PURE__ */ new Set(["CloudWatchRoleArn"]),
10868
12058
  silentDrop: /* @__PURE__ */ new Map()
10869
12059
  }],
10870
12060
  ["AWS::ApiGateway::Authorizer", {
10871
- handled: new Set([
12061
+ handled: /* @__PURE__ */ new Set([
10872
12062
  "AuthorizerCredentials",
10873
12063
  "AuthorizerResultTtlInSeconds",
10874
12064
  "AuthorizerUri",
@@ -10883,15 +12073,15 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10883
12073
  silentDrop: /* @__PURE__ */ new Map()
10884
12074
  }],
10885
12075
  ["AWS::ApiGateway::Deployment", {
10886
- handled: new Set(["Description", "RestApiId"]),
10887
- silentDrop: new Map([
12076
+ handled: /* @__PURE__ */ new Set(["Description", "RestApiId"]),
12077
+ silentDrop: /* @__PURE__ */ new Map([
10888
12078
  ["DeploymentCanarySettings", "not yet implemented by cdkd"],
10889
12079
  ["StageDescription", "CFn-only convenience for inline-creating a Stage; declare AWS::ApiGateway::Stage with the Description property instead"],
10890
12080
  ["StageName", "CFn-only convenience for inline-creating a Stage from a Deployment; declare AWS::ApiGateway::Stage explicitly to attach to this Deployment"]
10891
12081
  ])
10892
12082
  }],
10893
12083
  ["AWS::ApiGateway::Method", {
10894
- handled: new Set([
12084
+ handled: /* @__PURE__ */ new Set([
10895
12085
  "ApiKeyRequired",
10896
12086
  "AuthorizationScopes",
10897
12087
  "AuthorizationType",
@@ -10909,7 +12099,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10909
12099
  silentDrop: /* @__PURE__ */ new Map()
10910
12100
  }],
10911
12101
  ["AWS::ApiGateway::Resource", {
10912
- handled: new Set([
12102
+ handled: /* @__PURE__ */ new Set([
10913
12103
  "ParentId",
10914
12104
  "PathPart",
10915
12105
  "RestApiId"
@@ -10917,7 +12107,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10917
12107
  silentDrop: /* @__PURE__ */ new Map()
10918
12108
  }],
10919
12109
  ["AWS::ApiGateway::Stage", {
10920
- handled: new Set([
12110
+ handled: /* @__PURE__ */ new Set([
10921
12111
  "DeploymentId",
10922
12112
  "Description",
10923
12113
  "MethodSettings",
@@ -10927,7 +12117,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10927
12117
  "TracingEnabled",
10928
12118
  "Variables"
10929
12119
  ]),
10930
- silentDrop: new Map([
12120
+ silentDrop: /* @__PURE__ */ new Map([
10931
12121
  ["AccessLogSetting", "not yet implemented by cdkd"],
10932
12122
  ["CacheClusterEnabled", "not yet implemented by cdkd"],
10933
12123
  ["CacheClusterSize", "not yet implemented by cdkd"],
@@ -10937,7 +12127,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10937
12127
  ])
10938
12128
  }],
10939
12129
  ["AWS::ApiGatewayV2::Api", {
10940
- handled: new Set([
12130
+ handled: /* @__PURE__ */ new Set([
10941
12131
  "ApiKeySelectionExpression",
10942
12132
  "CorsConfiguration",
10943
12133
  "Description",
@@ -10949,7 +12139,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10949
12139
  "Tags",
10950
12140
  "Version"
10951
12141
  ]),
10952
- silentDrop: new Map([
12142
+ silentDrop: /* @__PURE__ */ new Map([
10953
12143
  ["BasePath", "OpenAPI-import-only basePath override; meaningful only on the ImportApi code path."],
10954
12144
  ["Body", "OpenAPI/Swagger inline spec; routed through ImportApi, not the field-by-field CreateApi path."],
10955
12145
  ["BodyS3Location", "OpenAPI/Swagger spec on S3; routed through ImportApi, not the field-by-field CreateApi path."],
@@ -10961,7 +12151,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10961
12151
  ])
10962
12152
  }],
10963
12153
  ["AWS::ApiGatewayV2::Authorizer", {
10964
- handled: new Set([
12154
+ handled: /* @__PURE__ */ new Set([
10965
12155
  "ApiId",
10966
12156
  "AuthorizerCredentialsArn",
10967
12157
  "AuthorizerPayloadFormatVersion",
@@ -10977,7 +12167,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10977
12167
  silentDrop: /* @__PURE__ */ new Map()
10978
12168
  }],
10979
12169
  ["AWS::ApiGatewayV2::Integration", {
10980
- handled: new Set([
12170
+ handled: /* @__PURE__ */ new Set([
10981
12171
  "ApiId",
10982
12172
  "Description",
10983
12173
  "IntegrationMethod",
@@ -10987,7 +12177,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10987
12177
  "RequestParameters",
10988
12178
  "TimeoutInMillis"
10989
12179
  ]),
10990
- silentDrop: new Map([
12180
+ silentDrop: /* @__PURE__ */ new Map([
10991
12181
  ["ConnectionId", "not yet implemented by cdkd"],
10992
12182
  ["ConnectionType", "not yet implemented by cdkd"],
10993
12183
  ["ContentHandlingStrategy", "not yet implemented by cdkd"],
@@ -11001,7 +12191,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11001
12191
  ])
11002
12192
  }],
11003
12193
  ["AWS::ApiGatewayV2::Route", {
11004
- handled: new Set([
12194
+ handled: /* @__PURE__ */ new Set([
11005
12195
  "ApiId",
11006
12196
  "AuthorizationScopes",
11007
12197
  "AuthorizationType",
@@ -11010,7 +12200,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11010
12200
  "RouteKey",
11011
12201
  "Target"
11012
12202
  ]),
11013
- silentDrop: new Map([
12203
+ silentDrop: /* @__PURE__ */ new Map([
11014
12204
  ["ApiKeyRequired", "not yet implemented by cdkd"],
11015
12205
  ["ModelSelectionExpression", "not yet implemented by cdkd"],
11016
12206
  ["RequestModels", "not yet implemented by cdkd"],
@@ -11019,7 +12209,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11019
12209
  ])
11020
12210
  }],
11021
12211
  ["AWS::ApiGatewayV2::Stage", {
11022
- handled: new Set([
12212
+ handled: /* @__PURE__ */ new Set([
11023
12213
  "ApiId",
11024
12214
  "AutoDeploy",
11025
12215
  "DefaultRouteSettings",
@@ -11028,7 +12218,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11028
12218
  "StageVariables",
11029
12219
  "Tags"
11030
12220
  ]),
11031
- silentDrop: new Map([
12221
+ silentDrop: /* @__PURE__ */ new Map([
11032
12222
  ["AccessLogSettings", "not yet implemented by cdkd"],
11033
12223
  ["ClientCertificateId", "not yet implemented by cdkd"],
11034
12224
  ["DeploymentId", "not yet implemented by cdkd"],
@@ -11036,7 +12226,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11036
12226
  ])
11037
12227
  }],
11038
12228
  ["AWS::AppSync::ApiKey", {
11039
- handled: new Set([
12229
+ handled: /* @__PURE__ */ new Set([
11040
12230
  "ApiId",
11041
12231
  "Description",
11042
12232
  "Expires"
@@ -11044,7 +12234,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11044
12234
  silentDrop: /* @__PURE__ */ new Map()
11045
12235
  }],
11046
12236
  ["AWS::AppSync::DataSource", {
11047
- handled: new Set([
12237
+ handled: /* @__PURE__ */ new Set([
11048
12238
  "ApiId",
11049
12239
  "Description",
11050
12240
  "DynamoDBConfig",
@@ -11054,7 +12244,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11054
12244
  "ServiceRoleArn",
11055
12245
  "Type"
11056
12246
  ]),
11057
- silentDrop: new Map([
12247
+ silentDrop: /* @__PURE__ */ new Map([
11058
12248
  ["ElasticsearchConfig", "Legacy Elasticsearch alias; use OpenSearchServiceConfig (AppSync deprecated the Elasticsearch DataSource type in favor of OpenSearch)"],
11059
12249
  ["EventBridgeConfig", "not yet implemented by cdkd"],
11060
12250
  ["MetricsConfig", "not yet implemented by cdkd"],
@@ -11063,14 +12253,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11063
12253
  ])
11064
12254
  }],
11065
12255
  ["AWS::AppSync::GraphQLApi", {
11066
- handled: new Set([
12256
+ handled: /* @__PURE__ */ new Set([
11067
12257
  "AuthenticationType",
11068
12258
  "LogConfig",
11069
12259
  "Name",
11070
12260
  "Tags",
11071
12261
  "XrayEnabled"
11072
12262
  ]),
11073
- silentDrop: new Map([
12263
+ silentDrop: /* @__PURE__ */ new Map([
11074
12264
  ["AdditionalAuthenticationProviders", "not yet implemented by cdkd"],
11075
12265
  ["ApiType", "not yet implemented by cdkd"],
11076
12266
  ["EnhancedMetricsConfig", "not yet implemented by cdkd"],
@@ -11087,7 +12277,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11087
12277
  ])
11088
12278
  }],
11089
12279
  ["AWS::AppSync::GraphQLSchema", {
11090
- handled: new Set([
12280
+ handled: /* @__PURE__ */ new Set([
11091
12281
  "ApiId",
11092
12282
  "Definition",
11093
12283
  "DefinitionS3Location"
@@ -11095,7 +12285,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11095
12285
  silentDrop: /* @__PURE__ */ new Map()
11096
12286
  }],
11097
12287
  ["AWS::AppSync::Resolver", {
11098
- handled: new Set([
12288
+ handled: /* @__PURE__ */ new Set([
11099
12289
  "ApiId",
11100
12290
  "Code",
11101
12291
  "DataSourceName",
@@ -11107,7 +12297,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11107
12297
  "Runtime",
11108
12298
  "TypeName"
11109
12299
  ]),
11110
- silentDrop: new Map([
12300
+ silentDrop: /* @__PURE__ */ new Map([
11111
12301
  ["CachingConfig", "not yet implemented by cdkd"],
11112
12302
  ["CodeS3Location", "not yet implemented by cdkd"],
11113
12303
  ["MaxBatchSize", "not yet implemented by cdkd"],
@@ -11118,7 +12308,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11118
12308
  ])
11119
12309
  }],
11120
12310
  ["AWS::AutoScaling::AutoScalingGroup", {
11121
- handled: new Set([
12311
+ handled: /* @__PURE__ */ new Set([
11122
12312
  "AutoScalingGroupName",
11123
12313
  "AvailabilityZoneDistribution",
11124
12314
  "AvailabilityZoneImpairmentPolicy",
@@ -11153,7 +12343,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11153
12343
  "TrafficSources",
11154
12344
  "VPCZoneIdentifier"
11155
12345
  ]),
11156
- silentDrop: new Map([
12346
+ silentDrop: /* @__PURE__ */ new Map([
11157
12347
  ["AvailabilityZoneIds", "not yet implemented by cdkd"],
11158
12348
  ["InstanceId", "not yet implemented by cdkd"],
11159
12349
  ["InstanceLifecyclePolicy", "not yet implemented by cdkd"],
@@ -11171,7 +12361,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11171
12361
  silentDrop: /* @__PURE__ */ new Map()
11172
12362
  }],
11173
12363
  ["AWS::BedrockAgentCore::Evaluator", {
11174
- handled: new Set([
12364
+ handled: /* @__PURE__ */ new Set([
11175
12365
  "Description",
11176
12366
  "EvaluatorConfig",
11177
12367
  "EvaluatorName",
@@ -11182,7 +12372,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11182
12372
  silentDrop: /* @__PURE__ */ new Map()
11183
12373
  }],
11184
12374
  ["AWS::BedrockAgentCore::Runtime", {
11185
- handled: new Set([
12375
+ handled: /* @__PURE__ */ new Set([
11186
12376
  "AgentRuntimeArtifact",
11187
12377
  "AgentRuntimeName",
11188
12378
  "AuthorizerConfiguration",
@@ -11194,14 +12384,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11194
12384
  "ProtocolConfiguration",
11195
12385
  "RoleArn"
11196
12386
  ]),
11197
- silentDrop: new Map([
12387
+ silentDrop: /* @__PURE__ */ new Map([
11198
12388
  ["FilesystemConfigurations", "not yet implemented by cdkd"],
11199
12389
  ["RequestHeaderConfiguration", "not yet implemented by cdkd"],
11200
12390
  ["Tags", "not yet implemented by cdkd"]
11201
12391
  ])
11202
12392
  }],
11203
12393
  ["AWS::Budgets::Budget", {
11204
- handled: new Set([
12394
+ handled: /* @__PURE__ */ new Set([
11205
12395
  "Budget",
11206
12396
  "NotificationsWithSubscribers",
11207
12397
  "ResourceTags"
@@ -11209,7 +12399,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11209
12399
  silentDrop: /* @__PURE__ */ new Map()
11210
12400
  }],
11211
12401
  ["AWS::CertificateManager::Certificate", {
11212
- handled: new Set([
12402
+ handled: /* @__PURE__ */ new Set([
11213
12403
  "CertificateAuthorityArn",
11214
12404
  "CertificateExport",
11215
12405
  "CertificateTransparencyLoggingPreference",
@@ -11223,8 +12413,8 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11223
12413
  silentDrop: /* @__PURE__ */ new Map()
11224
12414
  }],
11225
12415
  ["AWS::CloudFormation::Stack", {
11226
- handled: new Set(["Parameters", "TemplateURL"]),
11227
- silentDrop: new Map([
12416
+ handled: /* @__PURE__ */ new Set(["Parameters", "TemplateURL"]),
12417
+ silentDrop: /* @__PURE__ */ new Map([
11228
12418
  ["Capabilities", "CFn-only IAM capability declaration — cdkd does not go through CloudFormation so capabilities have no equivalent"],
11229
12419
  ["Description", "CFn-only informational — no semantic effect on the recursive deploy"],
11230
12420
  ["DisableRollback", "CFn-only — cdkd controls rollback via the top-level deploy-engine --no-rollback flag, not per nested stack"],
@@ -11245,15 +12435,15 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11245
12435
  silentDrop: /* @__PURE__ */ new Map()
11246
12436
  }],
11247
12437
  ["AWS::CloudFront::CloudFrontOriginAccessIdentity", {
11248
- handled: new Set(["CloudFrontOriginAccessIdentityConfig"]),
12438
+ handled: /* @__PURE__ */ new Set(["CloudFrontOriginAccessIdentityConfig"]),
11249
12439
  silentDrop: /* @__PURE__ */ new Map()
11250
12440
  }],
11251
12441
  ["AWS::CloudFront::Distribution", {
11252
- handled: new Set(["DistributionConfig", "Tags"]),
12442
+ handled: /* @__PURE__ */ new Set(["DistributionConfig", "Tags"]),
11253
12443
  silentDrop: /* @__PURE__ */ new Map()
11254
12444
  }],
11255
12445
  ["AWS::CloudTrail::Trail", {
11256
- handled: new Set([
12446
+ handled: /* @__PURE__ */ new Set([
11257
12447
  "CloudWatchLogsLogGroupArn",
11258
12448
  "CloudWatchLogsRoleArn",
11259
12449
  "EnableLogFileValidation",
@@ -11270,10 +12460,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11270
12460
  "Tags",
11271
12461
  "TrailName"
11272
12462
  ]),
11273
- silentDrop: new Map([["AdvancedEventSelectors", "not yet implemented by cdkd"], ["AggregationConfigurations", "not yet implemented by cdkd"]])
12463
+ silentDrop: /* @__PURE__ */ new Map([["AdvancedEventSelectors", "not yet implemented by cdkd"], ["AggregationConfigurations", "not yet implemented by cdkd"]])
11274
12464
  }],
11275
12465
  ["AWS::CloudWatch::Alarm", {
11276
- handled: new Set([
12466
+ handled: /* @__PURE__ */ new Set([
11277
12467
  "ActionsEnabled",
11278
12468
  "AlarmActions",
11279
12469
  "AlarmDescription",
@@ -11297,10 +12487,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11297
12487
  "TreatMissingData",
11298
12488
  "Unit"
11299
12489
  ]),
11300
- silentDrop: 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."]])
12490
+ silentDrop: /* @__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."]])
11301
12491
  }],
11302
12492
  ["AWS::CodeBuild::Project", {
11303
- handled: new Set([
12493
+ handled: /* @__PURE__ */ new Set([
11304
12494
  "Artifacts",
11305
12495
  "AutoRetryLimit",
11306
12496
  "BadgeEnabled",
@@ -11324,14 +12514,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11324
12514
  "TimeoutInMinutes",
11325
12515
  "VpcConfig"
11326
12516
  ]),
11327
- silentDrop: new Map([
12517
+ silentDrop: /* @__PURE__ */ new Map([
11328
12518
  ["ResourceAccessRole", "not yet implemented by cdkd"],
11329
12519
  ["Triggers", "not yet implemented by cdkd"],
11330
12520
  ["Visibility", "not yet implemented by cdkd"]
11331
12521
  ])
11332
12522
  }],
11333
12523
  ["AWS::CodeCommit::Repository", {
11334
- handled: new Set([
12524
+ handled: /* @__PURE__ */ new Set([
11335
12525
  "Code",
11336
12526
  "KmsKeyId",
11337
12527
  "RepositoryDescription",
@@ -11342,7 +12532,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11342
12532
  silentDrop: /* @__PURE__ */ new Map()
11343
12533
  }],
11344
12534
  ["AWS::Cognito::UserPool", {
11345
- handled: new Set([
12535
+ handled: /* @__PURE__ */ new Set([
11346
12536
  "AccountRecoverySetting",
11347
12537
  "AdminCreateUserConfig",
11348
12538
  "AliasAttributes",
@@ -11373,10 +12563,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11373
12563
  "WebAuthnRelyingPartyID",
11374
12564
  "WebAuthnUserVerification"
11375
12565
  ]),
11376
- silentDrop: 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"]])
12566
+ silentDrop: /* @__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"]])
11377
12567
  }],
11378
12568
  ["AWS::DLM::LifecyclePolicy", {
11379
- handled: new Set([
12569
+ handled: /* @__PURE__ */ new Set([
11380
12570
  "CopyTags",
11381
12571
  "CreateInterval",
11382
12572
  "CrossRegionCopyTargets",
@@ -11393,7 +12583,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11393
12583
  silentDrop: /* @__PURE__ */ new Map()
11394
12584
  }],
11395
12585
  ["AWS::DocDB::DBCluster", {
11396
- handled: new Set([
12586
+ handled: /* @__PURE__ */ new Set([
11397
12587
  "BackupRetentionPeriod",
11398
12588
  "DBClusterIdentifier",
11399
12589
  "DBClusterParameterGroupName",
@@ -11410,7 +12600,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11410
12600
  "Tags",
11411
12601
  "VpcSecurityGroupIds"
11412
12602
  ]),
11413
- silentDrop: new Map([
12603
+ silentDrop: /* @__PURE__ */ new Map([
11414
12604
  ["AvailabilityZones", "not yet implemented by cdkd"],
11415
12605
  ["CopyTagsToSnapshot", "not yet implemented by cdkd"],
11416
12606
  ["EnableCloudwatchLogsExports", "not yet implemented by cdkd"],
@@ -11429,7 +12619,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11429
12619
  ])
11430
12620
  }],
11431
12621
  ["AWS::DocDB::DBInstance", {
11432
- handled: new Set([
12622
+ handled: /* @__PURE__ */ new Set([
11433
12623
  "AutoMinorVersionUpgrade",
11434
12624
  "AvailabilityZone",
11435
12625
  "DBClusterIdentifier",
@@ -11438,14 +12628,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11438
12628
  "PreferredMaintenanceWindow",
11439
12629
  "Tags"
11440
12630
  ]),
11441
- silentDrop: new Map([
12631
+ silentDrop: /* @__PURE__ */ new Map([
11442
12632
  ["CACertificateIdentifier", "not yet implemented by cdkd"],
11443
12633
  ["CertificateRotationRestart", "not yet implemented by cdkd"],
11444
12634
  ["EnablePerformanceInsights", "not yet implemented by cdkd"]
11445
12635
  ])
11446
12636
  }],
11447
12637
  ["AWS::DocDB::DBSubnetGroup", {
11448
- handled: new Set([
12638
+ handled: /* @__PURE__ */ new Set([
11449
12639
  "DBSubnetGroupDescription",
11450
12640
  "DBSubnetGroupName",
11451
12641
  "SubnetIds",
@@ -11454,7 +12644,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11454
12644
  silentDrop: /* @__PURE__ */ new Map()
11455
12645
  }],
11456
12646
  ["AWS::DynamoDB::GlobalTable", {
11457
- handled: new Set([
12647
+ handled: /* @__PURE__ */ new Set([
11458
12648
  "AttributeDefinitions",
11459
12649
  "BillingMode",
11460
12650
  "DeletionProtectionEnabled",
@@ -11470,7 +12660,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11470
12660
  "WriteOnDemandThroughputSettings",
11471
12661
  "WriteProvisionedThroughputSettings"
11472
12662
  ]),
11473
- silentDrop: new Map([
12663
+ silentDrop: /* @__PURE__ */ new Map([
11474
12664
  ["GlobalTableSourceArn", "not yet implemented by cdkd"],
11475
12665
  ["GlobalTableWitnesses", "not yet implemented by cdkd"],
11476
12666
  ["MultiRegionConsistency", "not yet implemented by cdkd"],
@@ -11480,7 +12670,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11480
12670
  ])
11481
12671
  }],
11482
12672
  ["AWS::DynamoDB::Table", {
11483
- handled: new Set([
12673
+ handled: /* @__PURE__ */ new Set([
11484
12674
  "AttributeDefinitions",
11485
12675
  "BillingMode",
11486
12676
  "ContributorInsightsSpecification",
@@ -11501,10 +12691,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11501
12691
  "TimeToLiveSpecification",
11502
12692
  "WarmThroughput"
11503
12693
  ]),
11504
- silentDrop: 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"]])
12694
+ silentDrop: /* @__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"]])
11505
12695
  }],
11506
12696
  ["AWS::EC2::Instance", {
11507
- handled: new Set([
12697
+ handled: /* @__PURE__ */ new Set([
11508
12698
  "BlockDeviceMappings",
11509
12699
  "CreditSpecification",
11510
12700
  "DisableApiTermination",
@@ -11521,7 +12711,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11521
12711
  "Tags",
11522
12712
  "UserData"
11523
12713
  ]),
11524
- silentDrop: new Map([
12714
+ silentDrop: /* @__PURE__ */ new Map([
11525
12715
  ["AdditionalInfo", "not yet implemented by cdkd"],
11526
12716
  ["Affinity", "not yet implemented by cdkd"],
11527
12717
  ["AvailabilityZone", "not yet implemented by cdkd"],
@@ -11551,11 +12741,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11551
12741
  ])
11552
12742
  }],
11553
12743
  ["AWS::EC2::InternetGateway", {
11554
- handled: new Set(["Tags"]),
12744
+ handled: /* @__PURE__ */ new Set(["Tags"]),
11555
12745
  silentDrop: /* @__PURE__ */ new Map()
11556
12746
  }],
11557
12747
  ["AWS::EC2::NatGateway", {
11558
- handled: new Set([
12748
+ handled: /* @__PURE__ */ new Set([
11559
12749
  "AllocationId",
11560
12750
  "ConnectivityType",
11561
12751
  "MaxDrainDurationSeconds",
@@ -11566,18 +12756,18 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11566
12756
  "SubnetId",
11567
12757
  "Tags"
11568
12758
  ]),
11569
- silentDrop: new Map([
12759
+ silentDrop: /* @__PURE__ */ new Map([
11570
12760
  ["AvailabilityMode", "not yet implemented by cdkd"],
11571
12761
  ["AvailabilityZoneAddresses", "not yet implemented by cdkd"],
11572
12762
  ["VpcId", "AWS derives the VPC from SubnetId; the ec2:CreateNatGateway API has no VpcId parameter"]
11573
12763
  ])
11574
12764
  }],
11575
12765
  ["AWS::EC2::NetworkAcl", {
11576
- handled: new Set(["Tags", "VpcId"]),
12766
+ handled: /* @__PURE__ */ new Set(["Tags", "VpcId"]),
11577
12767
  silentDrop: /* @__PURE__ */ new Map()
11578
12768
  }],
11579
12769
  ["AWS::EC2::NetworkAclEntry", {
11580
- handled: new Set([
12770
+ handled: /* @__PURE__ */ new Set([
11581
12771
  "CidrBlock",
11582
12772
  "Egress",
11583
12773
  "Icmp",
@@ -11591,7 +12781,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11591
12781
  silentDrop: /* @__PURE__ */ new Map()
11592
12782
  }],
11593
12783
  ["AWS::EC2::Route", {
11594
- handled: new Set([
12784
+ handled: /* @__PURE__ */ new Set([
11595
12785
  "DestinationCidrBlock",
11596
12786
  "DestinationIpv6CidrBlock",
11597
12787
  "EgressOnlyInternetGatewayId",
@@ -11602,7 +12792,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11602
12792
  "RouteTableId",
11603
12793
  "VpcPeeringConnectionId"
11604
12794
  ]),
11605
- silentDrop: new Map([
12795
+ silentDrop: /* @__PURE__ */ new Map([
11606
12796
  ["CarrierGatewayId", "not yet implemented by cdkd"],
11607
12797
  ["CoreNetworkArn", "not yet implemented by cdkd"],
11608
12798
  ["DestinationPrefixListId", "not yet implemented by cdkd"],
@@ -11612,11 +12802,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11612
12802
  ])
11613
12803
  }],
11614
12804
  ["AWS::EC2::RouteTable", {
11615
- handled: new Set(["Tags", "VpcId"]),
12805
+ handled: /* @__PURE__ */ new Set(["Tags", "VpcId"]),
11616
12806
  silentDrop: /* @__PURE__ */ new Map()
11617
12807
  }],
11618
12808
  ["AWS::EC2::SecurityGroup", {
11619
- handled: new Set([
12809
+ handled: /* @__PURE__ */ new Set([
11620
12810
  "GroupDescription",
11621
12811
  "GroupName",
11622
12812
  "SecurityGroupEgress",
@@ -11627,7 +12817,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11627
12817
  silentDrop: /* @__PURE__ */ new Map()
11628
12818
  }],
11629
12819
  ["AWS::EC2::SecurityGroupIngress", {
11630
- handled: new Set([
12820
+ handled: /* @__PURE__ */ new Set([
11631
12821
  "CidrIp",
11632
12822
  "CidrIpv6",
11633
12823
  "Description",
@@ -11639,17 +12829,17 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11639
12829
  "SourceSecurityGroupOwnerId",
11640
12830
  "ToPort"
11641
12831
  ]),
11642
- silentDrop: 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)"]])
12832
+ silentDrop: /* @__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)"]])
11643
12833
  }],
11644
12834
  ["AWS::EC2::Subnet", {
11645
- handled: new Set([
12835
+ handled: /* @__PURE__ */ new Set([
11646
12836
  "AvailabilityZone",
11647
12837
  "CidrBlock",
11648
12838
  "MapPublicIpOnLaunch",
11649
12839
  "Tags",
11650
12840
  "VpcId"
11651
12841
  ]),
11652
- silentDrop: new Map([
12842
+ silentDrop: /* @__PURE__ */ new Map([
11653
12843
  ["AssignIpv6AddressOnCreation", "not yet implemented by cdkd"],
11654
12844
  ["AvailabilityZoneId", "not yet implemented by cdkd"],
11655
12845
  ["EnableDns64", "not yet implemented by cdkd"],
@@ -11665,29 +12855,29 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11665
12855
  ])
11666
12856
  }],
11667
12857
  ["AWS::EC2::SubnetNetworkAclAssociation", {
11668
- handled: new Set(["NetworkAclId", "SubnetId"]),
12858
+ handled: /* @__PURE__ */ new Set(["NetworkAclId", "SubnetId"]),
11669
12859
  silentDrop: /* @__PURE__ */ new Map()
11670
12860
  }],
11671
12861
  ["AWS::EC2::SubnetRouteTableAssociation", {
11672
- handled: new Set(["RouteTableId", "SubnetId"]),
12862
+ handled: /* @__PURE__ */ new Set(["RouteTableId", "SubnetId"]),
11673
12863
  silentDrop: /* @__PURE__ */ new Map()
11674
12864
  }],
11675
12865
  ["AWS::EC2::VPC", {
11676
- handled: new Set([
12866
+ handled: /* @__PURE__ */ new Set([
11677
12867
  "CidrBlock",
11678
12868
  "EnableDnsHostnames",
11679
12869
  "EnableDnsSupport",
11680
12870
  "InstanceTenancy",
11681
12871
  "Tags"
11682
12872
  ]),
11683
- silentDrop: new Map([["Ipv4IpamPoolId", "not yet implemented by cdkd"], ["Ipv4NetmaskLength", "not yet implemented by cdkd"]])
12873
+ silentDrop: /* @__PURE__ */ new Map([["Ipv4IpamPoolId", "not yet implemented by cdkd"], ["Ipv4NetmaskLength", "not yet implemented by cdkd"]])
11684
12874
  }],
11685
12875
  ["AWS::EC2::VPCGatewayAttachment", {
11686
- handled: new Set(["InternetGatewayId", "VpcId"]),
11687
- silentDrop: new Map([["VpnGatewayId", "not yet implemented by cdkd"]])
12876
+ handled: /* @__PURE__ */ new Set(["InternetGatewayId", "VpcId"]),
12877
+ silentDrop: /* @__PURE__ */ new Map([["VpnGatewayId", "not yet implemented by cdkd"]])
11688
12878
  }],
11689
12879
  ["AWS::ECR::Repository", {
11690
- handled: new Set([
12880
+ handled: /* @__PURE__ */ new Set([
11691
12881
  "EmptyOnDelete",
11692
12882
  "EncryptionConfiguration",
11693
12883
  "ImageScanningConfiguration",
@@ -11701,7 +12891,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11701
12891
  silentDrop: /* @__PURE__ */ new Map()
11702
12892
  }],
11703
12893
  ["AWS::ECS::Cluster", {
11704
- handled: new Set([
12894
+ handled: /* @__PURE__ */ new Set([
11705
12895
  "CapacityProviders",
11706
12896
  "ClusterName",
11707
12897
  "ClusterSettings",
@@ -11713,7 +12903,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11713
12903
  silentDrop: /* @__PURE__ */ new Map()
11714
12904
  }],
11715
12905
  ["AWS::ECS::Service", {
11716
- handled: new Set([
12906
+ handled: /* @__PURE__ */ new Set([
11717
12907
  "CapacityProviderStrategy",
11718
12908
  "Cluster",
11719
12909
  "DeploymentConfiguration",
@@ -11734,7 +12924,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11734
12924
  "Tags",
11735
12925
  "TaskDefinition"
11736
12926
  ]),
11737
- silentDrop: new Map([
12927
+ silentDrop: /* @__PURE__ */ new Map([
11738
12928
  ["AvailabilityZoneRebalancing", "not yet implemented by cdkd"],
11739
12929
  ["DeploymentController", "not yet implemented by cdkd"],
11740
12930
  ["ForceNewDeployment", "not yet implemented by cdkd"],
@@ -11745,7 +12935,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11745
12935
  ])
11746
12936
  }],
11747
12937
  ["AWS::ECS::TaskDefinition", {
11748
- handled: new Set([
12938
+ handled: /* @__PURE__ */ new Set([
11749
12939
  "ContainerDefinitions",
11750
12940
  "Cpu",
11751
12941
  "EnableFaultInjection",
@@ -11764,19 +12954,19 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11764
12954
  "TaskRoleArn",
11765
12955
  "Volumes"
11766
12956
  ]),
11767
- silentDrop: new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])
12957
+ silentDrop: /* @__PURE__ */ new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])
11768
12958
  }],
11769
12959
  ["AWS::EFS::AccessPoint", {
11770
- handled: new Set([
12960
+ handled: /* @__PURE__ */ new Set([
11771
12961
  "AccessPointTags",
11772
12962
  "FileSystemId",
11773
12963
  "PosixUser",
11774
12964
  "RootDirectory"
11775
12965
  ]),
11776
- silentDrop: new Map([["ClientToken", "AWS SDK manages this idempotency token internally on CreateAccessPoint; no user-supplied value is honored"]])
12966
+ silentDrop: /* @__PURE__ */ new Map([["ClientToken", "AWS SDK manages this idempotency token internally on CreateAccessPoint; no user-supplied value is honored"]])
11777
12967
  }],
11778
12968
  ["AWS::EFS::FileSystem", {
11779
- handled: new Set([
12969
+ handled: /* @__PURE__ */ new Set([
11780
12970
  "AvailabilityZoneName",
11781
12971
  "BackupPolicy",
11782
12972
  "BypassPolicyLockoutSafetyCheck",
@@ -11790,22 +12980,22 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11790
12980
  "ProvisionedThroughputInMibps",
11791
12981
  "ThroughputMode"
11792
12982
  ]),
11793
- silentDrop: 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."]])
12983
+ silentDrop: /* @__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."]])
11794
12984
  }],
11795
12985
  ["AWS::EFS::MountTarget", {
11796
- handled: new Set([
12986
+ handled: /* @__PURE__ */ new Set([
11797
12987
  "FileSystemId",
11798
12988
  "SecurityGroups",
11799
12989
  "SubnetId"
11800
12990
  ]),
11801
- silentDrop: new Map([
12991
+ silentDrop: /* @__PURE__ */ new Map([
11802
12992
  ["IpAddress", "not yet implemented by cdkd"],
11803
12993
  ["IpAddressType", "not yet implemented by cdkd"],
11804
12994
  ["Ipv6Address", "not yet implemented by cdkd"]
11805
12995
  ])
11806
12996
  }],
11807
12997
  ["AWS::ElastiCache::CacheCluster", {
11808
- handled: new Set([
12998
+ handled: /* @__PURE__ */ new Set([
11809
12999
  "AutoMinorVersionUpgrade",
11810
13000
  "AZMode",
11811
13001
  "CacheNodeType",
@@ -11830,10 +13020,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11830
13020
  "TransitEncryptionEnabled",
11831
13021
  "VpcSecurityGroupIds"
11832
13022
  ]),
11833
- silentDrop: new Map([["CacheSecurityGroupNames", "EC2-Classic-only — use VpcSecurityGroupIds for VPC-deployed clusters (EC2-Classic retired 2022-08-15)"], ["SnapshotArns", "not yet implemented by cdkd"]])
13023
+ silentDrop: /* @__PURE__ */ new Map([["CacheSecurityGroupNames", "EC2-Classic-only — use VpcSecurityGroupIds for VPC-deployed clusters (EC2-Classic retired 2022-08-15)"], ["SnapshotArns", "not yet implemented by cdkd"]])
11834
13024
  }],
11835
13025
  ["AWS::ElastiCache::SubnetGroup", {
11836
- handled: new Set([
13026
+ handled: /* @__PURE__ */ new Set([
11837
13027
  "CacheSubnetGroupDescription",
11838
13028
  "CacheSubnetGroupName",
11839
13029
  "Description",
@@ -11843,7 +13033,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11843
13033
  silentDrop: /* @__PURE__ */ new Map()
11844
13034
  }],
11845
13035
  ["AWS::ElasticLoadBalancingV2::Listener", {
11846
- handled: new Set([
13036
+ handled: /* @__PURE__ */ new Set([
11847
13037
  "AlpnPolicy",
11848
13038
  "Certificates",
11849
13039
  "DefaultActions",
@@ -11857,7 +13047,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11857
13047
  silentDrop: /* @__PURE__ */ new Map()
11858
13048
  }],
11859
13049
  ["AWS::ElasticLoadBalancingV2::LoadBalancer", {
11860
- handled: new Set([
13050
+ handled: /* @__PURE__ */ new Set([
11861
13051
  "IpAddressType",
11862
13052
  "LoadBalancerAttributes",
11863
13053
  "Name",
@@ -11868,7 +13058,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11868
13058
  "Tags",
11869
13059
  "Type"
11870
13060
  ]),
11871
- silentDrop: new Map([
13061
+ silentDrop: /* @__PURE__ */ new Map([
11872
13062
  ["EnableCapacityReservationProvisionStabilize", "not yet implemented by cdkd"],
11873
13063
  ["EnablePrefixForIpv6SourceNat", "not yet implemented by cdkd"],
11874
13064
  ["EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic", "not yet implemented by cdkd"],
@@ -11877,7 +13067,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11877
13067
  ])
11878
13068
  }],
11879
13069
  ["AWS::ElasticLoadBalancingV2::TargetGroup", {
11880
- handled: new Set([
13070
+ handled: /* @__PURE__ */ new Set([
11881
13071
  "HealthCheckEnabled",
11882
13072
  "HealthCheckIntervalSeconds",
11883
13073
  "HealthCheckPath",
@@ -11895,7 +13085,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11895
13085
  "UnhealthyThresholdCount",
11896
13086
  "VpcId"
11897
13087
  ]),
11898
- silentDrop: new Map([
13088
+ silentDrop: /* @__PURE__ */ new Map([
11899
13089
  ["IpAddressType", "not yet implemented by cdkd"],
11900
13090
  ["TargetControlPort", "not yet implemented by cdkd"],
11901
13091
  ["TargetGroupAttributes", "not yet implemented by cdkd"],
@@ -11903,7 +13093,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11903
13093
  ])
11904
13094
  }],
11905
13095
  ["AWS::EMR::Cluster", {
11906
- handled: new Set([
13096
+ handled: /* @__PURE__ */ new Set([
11907
13097
  "AdditionalInfo",
11908
13098
  "Applications",
11909
13099
  "AutoScalingRole",
@@ -11935,7 +13125,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11935
13125
  silentDrop: /* @__PURE__ */ new Map()
11936
13126
  }],
11937
13127
  ["AWS::Events::EventBus", {
11938
- handled: new Set([
13128
+ handled: /* @__PURE__ */ new Set([
11939
13129
  "DeadLetterConfig",
11940
13130
  "Description",
11941
13131
  "EventSourceName",
@@ -11948,7 +13138,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11948
13138
  silentDrop: /* @__PURE__ */ new Map()
11949
13139
  }],
11950
13140
  ["AWS::Events::Rule", {
11951
- handled: new Set([
13141
+ handled: /* @__PURE__ */ new Set([
11952
13142
  "Description",
11953
13143
  "EventBusName",
11954
13144
  "EventPattern",
@@ -11962,31 +13152,30 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11962
13152
  silentDrop: /* @__PURE__ */ new Map()
11963
13153
  }],
11964
13154
  ["AWS::FSx::FileSystem", {
11965
- handled: new Set([
13155
+ handled: /* @__PURE__ */ new Set([
11966
13156
  "BackupId",
11967
13157
  "FileSystemType",
11968
13158
  "FileSystemTypeVersion",
11969
13159
  "KmsKeyId",
11970
13160
  "LustreConfiguration",
11971
13161
  "NetworkType",
13162
+ "OntapConfiguration",
13163
+ "OpenZFSConfiguration",
11972
13164
  "SecurityGroupIds",
11973
13165
  "StorageCapacity",
11974
13166
  "StorageType",
11975
13167
  "SubnetIds",
11976
- "Tags"
13168
+ "Tags",
13169
+ "WindowsConfiguration"
11977
13170
  ]),
11978
- silentDrop: new Map([
11979
- ["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."],
11980
- ["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."],
11981
- ["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."]
11982
- ])
13171
+ silentDrop: /* @__PURE__ */ new Map()
11983
13172
  }],
11984
13173
  ["AWS::Glue::Connection", {
11985
- handled: new Set(["CatalogId", "ConnectionInput"]),
13174
+ handled: /* @__PURE__ */ new Set(["CatalogId", "ConnectionInput"]),
11986
13175
  silentDrop: /* @__PURE__ */ new Map()
11987
13176
  }],
11988
13177
  ["AWS::Glue::Crawler", {
11989
- handled: new Set([
13178
+ handled: /* @__PURE__ */ new Set([
11990
13179
  "Classifiers",
11991
13180
  "Configuration",
11992
13181
  "CrawlerSecurityConfiguration",
@@ -12006,7 +13195,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12006
13195
  silentDrop: /* @__PURE__ */ new Map()
12007
13196
  }],
12008
13197
  ["AWS::Glue::Database", {
12009
- handled: new Set([
13198
+ handled: /* @__PURE__ */ new Set([
12010
13199
  "CatalogId",
12011
13200
  "DatabaseInput",
12012
13201
  "DatabaseName"
@@ -12014,7 +13203,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12014
13203
  silentDrop: /* @__PURE__ */ new Map()
12015
13204
  }],
12016
13205
  ["AWS::Glue::Job", {
12017
- handled: new Set([
13206
+ handled: /* @__PURE__ */ new Set([
12018
13207
  "AllocatedCapacity",
12019
13208
  "Command",
12020
13209
  "Connections",
@@ -12043,11 +13232,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12043
13232
  silentDrop: /* @__PURE__ */ new Map()
12044
13233
  }],
12045
13234
  ["AWS::Glue::SecurityConfiguration", {
12046
- handled: new Set(["EncryptionConfiguration", "Name"]),
13235
+ handled: /* @__PURE__ */ new Set(["EncryptionConfiguration", "Name"]),
12047
13236
  silentDrop: /* @__PURE__ */ new Map()
12048
13237
  }],
12049
13238
  ["AWS::Glue::Table", {
12050
- handled: new Set([
13239
+ handled: /* @__PURE__ */ new Set([
12051
13240
  "CatalogId",
12052
13241
  "DatabaseName",
12053
13242
  "Name",
@@ -12057,7 +13246,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12057
13246
  silentDrop: /* @__PURE__ */ new Map()
12058
13247
  }],
12059
13248
  ["AWS::Glue::Trigger", {
12060
- handled: new Set([
13249
+ handled: /* @__PURE__ */ new Set([
12061
13250
  "Actions",
12062
13251
  "Description",
12063
13252
  "EventBatchingCondition",
@@ -12072,7 +13261,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12072
13261
  silentDrop: /* @__PURE__ */ new Map()
12073
13262
  }],
12074
13263
  ["AWS::Glue::Workflow", {
12075
- handled: new Set([
13264
+ handled: /* @__PURE__ */ new Set([
12076
13265
  "DefaultRunProperties",
12077
13266
  "Description",
12078
13267
  "MaxConcurrentRuns",
@@ -12082,7 +13271,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12082
13271
  silentDrop: /* @__PURE__ */ new Map()
12083
13272
  }],
12084
13273
  ["AWS::IAM::Group", {
12085
- handled: new Set([
13274
+ handled: /* @__PURE__ */ new Set([
12086
13275
  "GroupName",
12087
13276
  "ManagedPolicyArns",
12088
13277
  "Path",
@@ -12091,7 +13280,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12091
13280
  silentDrop: /* @__PURE__ */ new Map()
12092
13281
  }],
12093
13282
  ["AWS::IAM::InstanceProfile", {
12094
- handled: new Set([
13283
+ handled: /* @__PURE__ */ new Set([
12095
13284
  "InstanceProfileName",
12096
13285
  "Path",
12097
13286
  "Roles"
@@ -12099,7 +13288,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12099
13288
  silentDrop: /* @__PURE__ */ new Map()
12100
13289
  }],
12101
13290
  ["AWS::IAM::ManagedPolicy", {
12102
- handled: new Set([
13291
+ handled: /* @__PURE__ */ new Set([
12103
13292
  "Description",
12104
13293
  "Groups",
12105
13294
  "ManagedPolicyName",
@@ -12112,7 +13301,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12112
13301
  silentDrop: /* @__PURE__ */ new Map()
12113
13302
  }],
12114
13303
  ["AWS::IAM::Policy", {
12115
- handled: new Set([
13304
+ handled: /* @__PURE__ */ new Set([
12116
13305
  "Groups",
12117
13306
  "PolicyDocument",
12118
13307
  "PolicyName",
@@ -12122,7 +13311,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12122
13311
  silentDrop: /* @__PURE__ */ new Map()
12123
13312
  }],
12124
13313
  ["AWS::IAM::Role", {
12125
- handled: new Set([
13314
+ handled: /* @__PURE__ */ new Set([
12126
13315
  "AssumeRolePolicyDocument",
12127
13316
  "Description",
12128
13317
  "ManagedPolicyArns",
@@ -12136,7 +13325,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12136
13325
  silentDrop: /* @__PURE__ */ new Map()
12137
13326
  }],
12138
13327
  ["AWS::IAM::User", {
12139
- handled: new Set([
13328
+ handled: /* @__PURE__ */ new Set([
12140
13329
  "Groups",
12141
13330
  "LoginProfile",
12142
13331
  "ManagedPolicyArns",
@@ -12149,11 +13338,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12149
13338
  silentDrop: /* @__PURE__ */ new Map()
12150
13339
  }],
12151
13340
  ["AWS::IAM::UserToGroupAddition", {
12152
- handled: new Set(["GroupName", "Users"]),
13341
+ handled: /* @__PURE__ */ new Set(["GroupName", "Users"]),
12153
13342
  silentDrop: /* @__PURE__ */ new Map()
12154
13343
  }],
12155
13344
  ["AWS::Kinesis::Stream", {
12156
- handled: new Set([
13345
+ handled: /* @__PURE__ */ new Set([
12157
13346
  "Name",
12158
13347
  "RetentionPeriodHours",
12159
13348
  "ShardCount",
@@ -12161,14 +13350,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12161
13350
  "StreamModeDetails",
12162
13351
  "Tags"
12163
13352
  ]),
12164
- silentDrop: new Map([
13353
+ silentDrop: /* @__PURE__ */ new Map([
12165
13354
  ["DesiredShardLevelMetrics", "not yet implemented by cdkd"],
12166
13355
  ["MaxRecordSizeInKiB", "not yet implemented by cdkd"],
12167
13356
  ["WarmThroughputMiBps", "not yet implemented by cdkd"]
12168
13357
  ])
12169
13358
  }],
12170
13359
  ["AWS::Kinesis::StreamConsumer", {
12171
- handled: new Set([
13360
+ handled: /* @__PURE__ */ new Set([
12172
13361
  "ConsumerName",
12173
13362
  "StreamARN",
12174
13363
  "Tags"
@@ -12176,7 +13365,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12176
13365
  silentDrop: /* @__PURE__ */ new Map()
12177
13366
  }],
12178
13367
  ["AWS::KinesisFirehose::DeliveryStream", {
12179
- handled: new Set([
13368
+ handled: /* @__PURE__ */ new Set([
12180
13369
  "AmazonOpenSearchServerlessDestinationConfiguration",
12181
13370
  "AmazonopensearchserviceDestinationConfiguration",
12182
13371
  "DeliveryStreamEncryptionConfigurationInput",
@@ -12191,7 +13380,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12191
13380
  "SplunkDestinationConfiguration",
12192
13381
  "Tags"
12193
13382
  ]),
12194
- silentDrop: new Map([
13383
+ silentDrop: /* @__PURE__ */ new Map([
12195
13384
  ["DatabaseSourceConfiguration", "not yet implemented by cdkd"],
12196
13385
  ["DirectPutSourceConfiguration", "not yet implemented by cdkd"],
12197
13386
  ["IcebergDestinationConfiguration", "not yet implemented by cdkd"],
@@ -12200,11 +13389,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12200
13389
  ])
12201
13390
  }],
12202
13391
  ["AWS::KMS::Alias", {
12203
- handled: new Set(["AliasName", "TargetKeyId"]),
13392
+ handled: /* @__PURE__ */ new Set(["AliasName", "TargetKeyId"]),
12204
13393
  silentDrop: /* @__PURE__ */ new Map()
12205
13394
  }],
12206
13395
  ["AWS::KMS::Key", {
12207
- handled: new Set([
13396
+ handled: /* @__PURE__ */ new Set([
12208
13397
  "BypassPolicyLockoutSafetyCheck",
12209
13398
  "Description",
12210
13399
  "Enabled",
@@ -12221,7 +13410,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12221
13410
  silentDrop: /* @__PURE__ */ new Map()
12222
13411
  }],
12223
13412
  ["AWS::Lambda::EventInvokeConfig", {
12224
- handled: new Set([
13413
+ handled: /* @__PURE__ */ new Set([
12225
13414
  "DestinationConfig",
12226
13415
  "FunctionName",
12227
13416
  "MaximumEventAgeInSeconds",
@@ -12231,7 +13420,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12231
13420
  silentDrop: /* @__PURE__ */ new Map()
12232
13421
  }],
12233
13422
  ["AWS::Lambda::EventSourceMapping", {
12234
- handled: new Set([
13423
+ handled: /* @__PURE__ */ new Set([
12235
13424
  "AmazonManagedKafkaEventSourceConfig",
12236
13425
  "BatchSize",
12237
13426
  "BisectBatchOnFunctionError",
@@ -12264,7 +13453,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12264
13453
  silentDrop: /* @__PURE__ */ new Map()
12265
13454
  }],
12266
13455
  ["AWS::Lambda::Function", {
12267
- handled: new Set([
13456
+ handled: /* @__PURE__ */ new Set([
12268
13457
  "Architectures",
12269
13458
  "Code",
12270
13459
  "DeadLetterConfig",
@@ -12290,7 +13479,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12290
13479
  "TracingConfig",
12291
13480
  "VpcConfig"
12292
13481
  ]),
12293
- silentDrop: new Map([
13482
+ silentDrop: /* @__PURE__ */ new Map([
12294
13483
  ["CapacityProviderConfig", "not yet implemented by cdkd"],
12295
13484
  ["CodeSigningConfigArn", "not yet implemented by cdkd"],
12296
13485
  ["DurableConfig", "not yet implemented by cdkd"],
@@ -12301,7 +13490,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12301
13490
  ])
12302
13491
  }],
12303
13492
  ["AWS::Lambda::LayerVersion", {
12304
- handled: new Set([
13493
+ handled: /* @__PURE__ */ new Set([
12305
13494
  "CompatibleArchitectures",
12306
13495
  "CompatibleRuntimes",
12307
13496
  "Content",
@@ -12312,7 +13501,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12312
13501
  silentDrop: /* @__PURE__ */ new Map()
12313
13502
  }],
12314
13503
  ["AWS::Lambda::Permission", {
12315
- handled: new Set([
13504
+ handled: /* @__PURE__ */ new Set([
12316
13505
  "Action",
12317
13506
  "EventSourceToken",
12318
13507
  "FunctionName",
@@ -12326,7 +13515,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12326
13515
  silentDrop: /* @__PURE__ */ new Map()
12327
13516
  }],
12328
13517
  ["AWS::Lambda::Url", {
12329
- handled: new Set([
13518
+ handled: /* @__PURE__ */ new Set([
12330
13519
  "AuthType",
12331
13520
  "Cors",
12332
13521
  "InvokeMode",
@@ -12336,7 +13525,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12336
13525
  silentDrop: /* @__PURE__ */ new Map()
12337
13526
  }],
12338
13527
  ["AWS::Logs::LogGroup", {
12339
- handled: new Set([
13528
+ handled: /* @__PURE__ */ new Set([
12340
13529
  "BearerTokenAuthenticationEnabled",
12341
13530
  "DataProtectionPolicy",
12342
13531
  "DeletionProtectionEnabled",
@@ -12351,7 +13540,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12351
13540
  silentDrop: /* @__PURE__ */ new Map()
12352
13541
  }],
12353
13542
  ["AWS::Neptune::DBCluster", {
12354
- handled: new Set([
13543
+ handled: /* @__PURE__ */ new Set([
12355
13544
  "BackupRetentionPeriod",
12356
13545
  "DBClusterIdentifier",
12357
13546
  "DBClusterParameterGroupName",
@@ -12368,7 +13557,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12368
13557
  "Tags",
12369
13558
  "VpcSecurityGroupIds"
12370
13559
  ]),
12371
- silentDrop: new Map([
13560
+ silentDrop: /* @__PURE__ */ new Map([
12372
13561
  ["AssociatedRoles", "not yet implemented by cdkd"],
12373
13562
  ["AvailabilityZones", "not yet implemented by cdkd"],
12374
13563
  ["CopyTagsToSnapshot", "not yet implemented by cdkd"],
@@ -12383,7 +13572,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12383
13572
  ])
12384
13573
  }],
12385
13574
  ["AWS::Neptune::DBInstance", {
12386
- handled: new Set([
13575
+ handled: /* @__PURE__ */ new Set([
12387
13576
  "AutoMinorVersionUpgrade",
12388
13577
  "AvailabilityZone",
12389
13578
  "DBClusterIdentifier",
@@ -12395,14 +13584,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12395
13584
  "PreferredMaintenanceWindow",
12396
13585
  "Tags"
12397
13586
  ]),
12398
- silentDrop: new Map([
13587
+ silentDrop: /* @__PURE__ */ new Map([
12399
13588
  ["AllowMajorVersionUpgrade", "not yet implemented by cdkd"],
12400
13589
  ["DBSnapshotIdentifier", "not yet implemented by cdkd"],
12401
13590
  ["PubliclyAccessible", "not yet implemented by cdkd"]
12402
13591
  ])
12403
13592
  }],
12404
13593
  ["AWS::Neptune::DBSubnetGroup", {
12405
- handled: new Set([
13594
+ handled: /* @__PURE__ */ new Set([
12406
13595
  "DBSubnetGroupDescription",
12407
13596
  "DBSubnetGroupName",
12408
13597
  "SubnetIds",
@@ -12411,7 +13600,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12411
13600
  silentDrop: /* @__PURE__ */ new Map()
12412
13601
  }],
12413
13602
  ["AWS::RDS::DBCluster", {
12414
- handled: new Set([
13603
+ handled: /* @__PURE__ */ new Set([
12415
13604
  "BackupRetentionPeriod",
12416
13605
  "DatabaseName",
12417
13606
  "DBClusterIdentifier",
@@ -12434,7 +13623,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12434
13623
  "Tags",
12435
13624
  "VpcSecurityGroupIds"
12436
13625
  ]),
12437
- silentDrop: new Map([
13626
+ silentDrop: /* @__PURE__ */ new Map([
12438
13627
  ["AllocatedStorage", "not yet implemented by cdkd"],
12439
13628
  ["AssociatedRoles", "not yet implemented by cdkd"],
12440
13629
  ["AutoMinorVersionUpgrade", "not yet implemented by cdkd"],
@@ -12478,7 +13667,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12478
13667
  ])
12479
13668
  }],
12480
13669
  ["AWS::RDS::DBInstance", {
12481
- handled: new Set([
13670
+ handled: /* @__PURE__ */ new Set([
12482
13671
  "AllocatedStorage",
12483
13672
  "DBClusterIdentifier",
12484
13673
  "DBInstanceClass",
@@ -12501,7 +13690,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12501
13690
  "Tags",
12502
13691
  "VPCSecurityGroups"
12503
13692
  ]),
12504
- silentDrop: new Map([
13693
+ silentDrop: /* @__PURE__ */ new Map([
12505
13694
  ["AdditionalStorageVolumes", "not yet implemented by cdkd"],
12506
13695
  ["AllowMajorVersionUpgrade", "not yet implemented by cdkd"],
12507
13696
  ["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"],
@@ -12567,7 +13756,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12567
13756
  ])
12568
13757
  }],
12569
13758
  ["AWS::RDS::DBProxy", {
12570
- handled: new Set([
13759
+ handled: /* @__PURE__ */ new Set([
12571
13760
  "Auth",
12572
13761
  "DBProxyName",
12573
13762
  "DebugLogging",
@@ -12579,14 +13768,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12579
13768
  "VpcSecurityGroupIds",
12580
13769
  "VpcSubnetIds"
12581
13770
  ]),
12582
- silentDrop: new Map([
13771
+ silentDrop: /* @__PURE__ */ new Map([
12583
13772
  ["DefaultAuthScheme", "not yet implemented by cdkd"],
12584
13773
  ["EndpointNetworkType", "not yet implemented by cdkd"],
12585
13774
  ["TargetConnectionNetworkType", "not yet implemented by cdkd"]
12586
13775
  ])
12587
13776
  }],
12588
13777
  ["AWS::RDS::DBProxyEndpoint", {
12589
- handled: new Set([
13778
+ handled: /* @__PURE__ */ new Set([
12590
13779
  "DBProxyEndpointName",
12591
13780
  "DBProxyName",
12592
13781
  "Tags",
@@ -12594,10 +13783,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12594
13783
  "VpcSecurityGroupIds",
12595
13784
  "VpcSubnetIds"
12596
13785
  ]),
12597
- silentDrop: new Map([["EndpointNetworkType", "not yet implemented by cdkd"]])
13786
+ silentDrop: /* @__PURE__ */ new Map([["EndpointNetworkType", "not yet implemented by cdkd"]])
12598
13787
  }],
12599
13788
  ["AWS::RDS::DBProxyTargetGroup", {
12600
- handled: new Set([
13789
+ handled: /* @__PURE__ */ new Set([
12601
13790
  "ConnectionPoolConfigurationInfo",
12602
13791
  "DBClusterIdentifiers",
12603
13792
  "DBInstanceIdentifiers",
@@ -12607,7 +13796,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12607
13796
  silentDrop: /* @__PURE__ */ new Map()
12608
13797
  }],
12609
13798
  ["AWS::RDS::DBSubnetGroup", {
12610
- handled: new Set([
13799
+ handled: /* @__PURE__ */ new Set([
12611
13800
  "DBSubnetGroupDescription",
12612
13801
  "DBSubnetGroupName",
12613
13802
  "SubnetIds",
@@ -12616,7 +13805,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12616
13805
  silentDrop: /* @__PURE__ */ new Map()
12617
13806
  }],
12618
13807
  ["AWS::Route53::HostedZone", {
12619
- handled: new Set([
13808
+ handled: /* @__PURE__ */ new Set([
12620
13809
  "HostedZoneConfig",
12621
13810
  "HostedZoneFeatures",
12622
13811
  "HostedZoneTags",
@@ -12627,7 +13816,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12627
13816
  silentDrop: /* @__PURE__ */ new Map()
12628
13817
  }],
12629
13818
  ["AWS::Route53::RecordSet", {
12630
- handled: new Set([
13819
+ handled: /* @__PURE__ */ new Set([
12631
13820
  "AliasTarget",
12632
13821
  "CidrRoutingConfig",
12633
13822
  "Comment",
@@ -12649,7 +13838,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12649
13838
  silentDrop: /* @__PURE__ */ new Map()
12650
13839
  }],
12651
13840
  ["AWS::S3::Bucket", {
12652
- handled: new Set([
13841
+ handled: /* @__PURE__ */ new Set([
12653
13842
  "AccelerateConfiguration",
12654
13843
  "AnalyticsConfigurations",
12655
13844
  "BucketEncryption",
@@ -12670,7 +13859,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12670
13859
  "VersioningConfiguration",
12671
13860
  "WebsiteConfiguration"
12672
13861
  ]),
12673
- silentDrop: new Map([
13862
+ silentDrop: /* @__PURE__ */ new Map([
12674
13863
  ["AbacStatus", "not yet implemented by cdkd"],
12675
13864
  ["AccessControl", "Legacy canned ACL; AWS disables ACLs by default since 2023-04 — use BucketOwnershipControls + BucketPolicy / PublicAccessBlockConfiguration instead"],
12676
13865
  ["BucketNamePrefix", "not yet implemented by cdkd"],
@@ -12680,16 +13869,16 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12680
13869
  ])
12681
13870
  }],
12682
13871
  ["AWS::S3::BucketPolicy", {
12683
- handled: new Set(["Bucket", "PolicyDocument"]),
13872
+ handled: /* @__PURE__ */ new Set(["Bucket", "PolicyDocument"]),
12684
13873
  silentDrop: /* @__PURE__ */ new Map()
12685
13874
  }],
12686
13875
  ["AWS::S3Express::DirectoryBucket", {
12687
- handled: new Set([
13876
+ handled: /* @__PURE__ */ new Set([
12688
13877
  "BucketName",
12689
13878
  "DataRedundancy",
12690
13879
  "LocationName"
12691
13880
  ]),
12692
- silentDrop: new Map([
13881
+ silentDrop: /* @__PURE__ */ new Map([
12693
13882
  ["BucketEncryption", "not yet implemented by cdkd"],
12694
13883
  ["InventoryConfigurations", "not yet implemented by cdkd"],
12695
13884
  ["LifecycleConfiguration", "not yet implemented by cdkd"],
@@ -12698,11 +13887,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12698
13887
  ])
12699
13888
  }],
12700
13889
  ["AWS::S3Tables::Namespace", {
12701
- handled: new Set(["Namespace", "TableBucketARN"]),
13890
+ handled: /* @__PURE__ */ new Set(["Namespace", "TableBucketARN"]),
12702
13891
  silentDrop: /* @__PURE__ */ new Map()
12703
13892
  }],
12704
13893
  ["AWS::S3Tables::Table", {
12705
- handled: new Set([
13894
+ handled: /* @__PURE__ */ new Set([
12706
13895
  "Format",
12707
13896
  "Name",
12708
13897
  "Namespace",
@@ -12711,7 +13900,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12711
13900
  "TableName",
12712
13901
  "Tags"
12713
13902
  ]),
12714
- silentDrop: new Map([
13903
+ silentDrop: /* @__PURE__ */ new Map([
12715
13904
  ["Compaction", "not yet implemented by cdkd"],
12716
13905
  ["IcebergMetadata", "not yet implemented by cdkd"],
12717
13906
  ["SnapshotManagement", "not yet implemented by cdkd"],
@@ -12720,8 +13909,8 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12720
13909
  ])
12721
13910
  }],
12722
13911
  ["AWS::S3Tables::TableBucket", {
12723
- handled: new Set(["TableBucketName", "Tags"]),
12724
- silentDrop: new Map([
13912
+ handled: /* @__PURE__ */ new Set(["TableBucketName", "Tags"]),
13913
+ silentDrop: /* @__PURE__ */ new Map([
12725
13914
  ["EncryptionConfiguration", "not yet implemented by cdkd"],
12726
13915
  ["MetricsConfiguration", "not yet implemented by cdkd"],
12727
13916
  ["ReplicationConfiguration", "not yet implemented by cdkd"],
@@ -12730,7 +13919,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12730
13919
  ])
12731
13920
  }],
12732
13921
  ["AWS::S3Vectors::VectorBucket", {
12733
- handled: new Set([
13922
+ handled: /* @__PURE__ */ new Set([
12734
13923
  "EncryptionConfiguration",
12735
13924
  "Tags",
12736
13925
  "VectorBucketName"
@@ -12738,7 +13927,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12738
13927
  silentDrop: /* @__PURE__ */ new Map()
12739
13928
  }],
12740
13929
  ["AWS::Scheduler::Schedule", {
12741
- handled: new Set([
13930
+ handled: /* @__PURE__ */ new Set([
12742
13931
  "Description",
12743
13932
  "EndDate",
12744
13933
  "FlexibleTimeWindow",
@@ -12754,7 +13943,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12754
13943
  silentDrop: /* @__PURE__ */ new Map()
12755
13944
  }],
12756
13945
  ["AWS::SecretsManager::Secret", {
12757
- handled: new Set([
13946
+ handled: /* @__PURE__ */ new Set([
12758
13947
  "Description",
12759
13948
  "GenerateSecretString",
12760
13949
  "KmsKeyId",
@@ -12767,7 +13956,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12767
13956
  silentDrop: /* @__PURE__ */ new Map()
12768
13957
  }],
12769
13958
  ["AWS::ServiceDiscovery::HttpNamespace", {
12770
- handled: new Set([
13959
+ handled: /* @__PURE__ */ new Set([
12771
13960
  "Description",
12772
13961
  "Name",
12773
13962
  "Tags"
@@ -12775,7 +13964,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12775
13964
  silentDrop: /* @__PURE__ */ new Map()
12776
13965
  }],
12777
13966
  ["AWS::ServiceDiscovery::PrivateDnsNamespace", {
12778
- handled: new Set([
13967
+ handled: /* @__PURE__ */ new Set([
12779
13968
  "Description",
12780
13969
  "Name",
12781
13970
  "Properties",
@@ -12785,7 +13974,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12785
13974
  silentDrop: /* @__PURE__ */ new Map()
12786
13975
  }],
12787
13976
  ["AWS::ServiceDiscovery::PublicDnsNamespace", {
12788
- handled: new Set([
13977
+ handled: /* @__PURE__ */ new Set([
12789
13978
  "Description",
12790
13979
  "Name",
12791
13980
  "Properties",
@@ -12794,7 +13983,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12794
13983
  silentDrop: /* @__PURE__ */ new Map()
12795
13984
  }],
12796
13985
  ["AWS::ServiceDiscovery::Service", {
12797
- handled: new Set([
13986
+ handled: /* @__PURE__ */ new Set([
12798
13987
  "Description",
12799
13988
  "DnsConfig",
12800
13989
  "HealthCheckConfig",
@@ -12808,7 +13997,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12808
13997
  silentDrop: /* @__PURE__ */ new Map()
12809
13998
  }],
12810
13999
  ["AWS::SNS::Subscription", {
12811
- handled: new Set([
14000
+ handled: /* @__PURE__ */ new Set([
12812
14001
  "DeliveryPolicy",
12813
14002
  "Endpoint",
12814
14003
  "FilterPolicy",
@@ -12820,10 +14009,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12820
14009
  "SubscriptionRoleArn",
12821
14010
  "TopicArn"
12822
14011
  ]),
12823
- silentDrop: new Map([["Region", "CFn-only cross-region subscription hint; cdkd uses the SDK client region directly and has no per-resource region override"]])
14012
+ silentDrop: /* @__PURE__ */ new Map([["Region", "CFn-only cross-region subscription hint; cdkd uses the SDK client region directly and has no per-resource region override"]])
12824
14013
  }],
12825
14014
  ["AWS::SNS::Topic", {
12826
- handled: new Set([
14015
+ handled: /* @__PURE__ */ new Set([
12827
14016
  "ArchivePolicy",
12828
14017
  "ContentBasedDeduplication",
12829
14018
  "DataProtectionPolicy",
@@ -12841,11 +14030,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12841
14030
  silentDrop: /* @__PURE__ */ new Map()
12842
14031
  }],
12843
14032
  ["AWS::SNS::TopicPolicy", {
12844
- handled: new Set(["PolicyDocument", "Topics"]),
14033
+ handled: /* @__PURE__ */ new Set(["PolicyDocument", "Topics"]),
12845
14034
  silentDrop: /* @__PURE__ */ new Map()
12846
14035
  }],
12847
14036
  ["AWS::SQS::Queue", {
12848
- handled: new Set([
14037
+ handled: /* @__PURE__ */ new Set([
12849
14038
  "ContentBasedDeduplication",
12850
14039
  "DeduplicationScope",
12851
14040
  "DelaySeconds",
@@ -12866,11 +14055,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12866
14055
  silentDrop: /* @__PURE__ */ new Map()
12867
14056
  }],
12868
14057
  ["AWS::SQS::QueuePolicy", {
12869
- handled: new Set(["PolicyDocument", "Queues"]),
14058
+ handled: /* @__PURE__ */ new Set(["PolicyDocument", "Queues"]),
12870
14059
  silentDrop: /* @__PURE__ */ new Map()
12871
14060
  }],
12872
14061
  ["AWS::SSM::Parameter", {
12873
- handled: new Set([
14062
+ handled: /* @__PURE__ */ new Set([
12874
14063
  "AllowedPattern",
12875
14064
  "DataType",
12876
14065
  "Description",
@@ -12884,7 +14073,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12884
14073
  silentDrop: /* @__PURE__ */ new Map()
12885
14074
  }],
12886
14075
  ["AWS::StepFunctions::StateMachine", {
12887
- handled: new Set([
14076
+ handled: /* @__PURE__ */ new Set([
12888
14077
  "Definition",
12889
14078
  "DefinitionS3Location",
12890
14079
  "DefinitionString",
@@ -12900,7 +14089,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12900
14089
  silentDrop: /* @__PURE__ */ new Map()
12901
14090
  }],
12902
14091
  ["AWS::WAFv2::WebACL", {
12903
- handled: new Set([
14092
+ handled: /* @__PURE__ */ new Set([
12904
14093
  "AssociationConfig",
12905
14094
  "CaptchaConfig",
12906
14095
  "ChallengeConfig",
@@ -12914,7 +14103,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12914
14103
  "TokenDomains",
12915
14104
  "VisibilityConfig"
12916
14105
  ]),
12917
- silentDrop: new Map([
14106
+ silentDrop: /* @__PURE__ */ new Map([
12918
14107
  ["ApplicationConfig", "not yet implemented by cdkd"],
12919
14108
  ["DataProtectionConfig", "not yet implemented by cdkd"],
12920
14109
  ["OnSourceDDoSProtectionConfig", "not yet implemented by cdkd"]
@@ -13050,7 +14239,7 @@ function findActionableSilentDrops(resourceType, templateProperties, allowedKeys
13050
14239
  * bare schedule name as physicalId, and the state properties carry
13051
14240
  * GroupName, so the SDK provider addresses existing records correctly.
13052
14241
  */
13053
- const STICKY_CC_MIGRATION_EXEMPT = new Set(["AWS::Scheduler::Schedule"]);
14242
+ const STICKY_CC_MIGRATION_EXEMPT = /* @__PURE__ */ new Set(["AWS::Scheduler::Schedule"]);
13054
14243
  var ProviderRegistry = class {
13055
14244
  logger = getLogger().child("ProviderRegistry");
13056
14245
  providers = /* @__PURE__ */ new Map();
@@ -13387,7 +14576,7 @@ function isCustomResource(resourceType) {
13387
14576
  var IAMRoleProvider = class {
13388
14577
  iamClient;
13389
14578
  logger = getLogger().child("IAMRoleProvider");
13390
- handledProperties = new Map([["AWS::IAM::Role", new Set([
14579
+ handledProperties = /* @__PURE__ */ new Map([["AWS::IAM::Role", /* @__PURE__ */ new Set([
13391
14580
  "RoleName",
13392
14581
  "AssumeRolePolicyDocument",
13393
14582
  "Description",
@@ -14084,7 +15273,7 @@ function formatResourceLine(op, logicalId, resourceType, verbOverride) {
14084
15273
  * Both conditional checks live in {@link isStatefulRecreateTarget};
14085
15274
  * the bare {@link STATEFUL_TYPES} set is the type-only first-cut.
14086
15275
  */
14087
- const STATEFUL_TYPES = new Set([
15276
+ const STATEFUL_TYPES = /* @__PURE__ */ new Set([
14088
15277
  "AWS::RDS::DBInstance",
14089
15278
  "AWS::RDS::DBCluster",
14090
15279
  "AWS::DocDB::DBInstance",
@@ -14120,7 +15309,7 @@ const STATEFUL_TYPES = new Set([
14120
15309
  * loss (bypassable with `--force-stateful-recreation`); this set is
14121
15310
  * an out-of-scope refusal (no bypass).
14122
15311
  */
14123
- const MULTI_REGION_RECREATE_BLOCKED_TYPES = new Set(["AWS::DynamoDB::GlobalTable"]);
15312
+ const MULTI_REGION_RECREATE_BLOCKED_TYPES = /* @__PURE__ */ new Set(["AWS::DynamoDB::GlobalTable"]);
14124
15313
  /**
14125
15314
  * Cheap, synchronous read of the resource's recorded properties only.
14126
15315
  * For `AWS::S3::Bucket` this returns `null` — the live `ListObjectsV2`
@@ -14416,7 +15605,7 @@ function extractReferencedAlarmNames(alarmRule) {
14416
15605
  */
14417
15606
  function computeImplicitDeleteEdges(resources) {
14418
15607
  const edges = [];
14419
- const alarmTypes = new Set(["AWS::CloudWatch::Alarm", "AWS::CloudWatch::CompositeAlarm"]);
15608
+ const alarmTypes = /* @__PURE__ */ new Set(["AWS::CloudWatch::Alarm", "AWS::CloudWatch::CompositeAlarm"]);
14420
15609
  const nameToLogicalId = /* @__PURE__ */ new Map();
14421
15610
  for (const [logicalId, resource] of Object.entries(resources)) {
14422
15611
  if (!alarmTypes.has(resource.resourceType)) continue;
@@ -14489,7 +15678,7 @@ const RETRYABLE_ERROR_MESSAGE_PATTERNS = [
14489
15678
  * HTTP status codes that always indicate a transient failure worth retrying.
14490
15679
  * 429 = Too Many Requests (throttle), 503 = Service Unavailable.
14491
15680
  */
14492
- const RETRYABLE_HTTP_STATUS_CODES = new Set([429, 503]);
15681
+ const RETRYABLE_HTTP_STATUS_CODES = /* @__PURE__ */ new Set([429, 503]);
14493
15682
  /**
14494
15683
  * AWS SDK v3 canonical throttling error names. Mirrors
14495
15684
  * `@aws-sdk/service-error-classification`'s `THROTTLING_ERROR_CODES` — any
@@ -14499,7 +15688,7 @@ const RETRYABLE_HTTP_STATUS_CODES = new Set([429, 503]);
14499
15688
  * (not 429) with the throttling signal carried only in the error code / name
14500
15689
  * (e.g. SSM `ThrottlingException` for the `Rate exceeded` message).
14501
15690
  */
14502
- const THROTTLING_ERROR_NAMES = new Set([
15691
+ const THROTTLING_ERROR_NAMES = /* @__PURE__ */ new Set([
14503
15692
  "BandwidthLimitExceeded",
14504
15693
  "EC2ThrottledException",
14505
15694
  "LimitExceededException",
@@ -16176,5 +17365,5 @@ var DeployEngine = class {
16176
17365
  };
16177
17366
 
16178
17367
  //#endregion
16179
- export { getDockerCmd as $, DiffCalculator as A, buildAssetRedirectMap as B, findActionableSilentDrops as C, resolveBucketRegion as Ct, refStateLookupFromResource as D, cfnRefValueFromPhysicalId as E, rebuildClientForBucketRegion as F, BOOTSTRAP_MARKER_PREFIX as G, loadPublishableAssetManifest as H, shouldRetainResource as I, parseBootstrapMarker as J, ensureAssetStorage as K, AssetPublisher as L, TemplateParser as M, LockManager as N, WAFv2WebACLProvider as O, S3StateBackend as P, formatDockerLoginError as Q, stringifyValue as R, ProviderRegistry as S, clearBucketRegionCache as St, IntrinsicFunctionResolver as T, rewriteTemplateAssetReferences as U, createAssetRedirectResolver as V, AssetModeResolver as W, validateContainerRepoName as X, validateAssetBucketName as Y, buildDockerImage as Z, green as _, CFN_TEMPLATE_URL_LIMIT as _t, withRetry as a, synthesisStatusMessage as at, IAMRoleProvider as b, uploadCfnTemplate as bt, computeImplicitDeleteEdges as c, resolveApp as ct, isStatefulRecreateTargetSync as d, resolveSkipPrefix as dt, runDockerForeground as et, renderStatefulReason as f, resolveStateBucketWithDefault as ft, gray as g, CFN_TEMPLATE_BODY_LIMIT as gt, cyan as h, warnDeprecatedNoPrefixCliFlag as ht, withResourceDeadline as i, Synthesizer as it, DagBuilder as j, applyRoleArnIfSet as k, extractDeploymentEventError as l, resolveAutoAssetStorage as lt, bold as m, resolveUseCdkBootstrapAssets as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, AssetManifestLoader as nt, isRetryableTransientError as o, getDefaultStateBucketName as ot, formatResourceLine as p, resolveStateBucketWithDefaultAndSource as pt, getBootstrapMarkerKey as q, DeployEngine as r, getDockerImageBySourceHash as rt, IMPLICIT_DELETE_DEPENDENCIES as s, getLegacyStateBucketName as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, runDockerStreaming as tt, MULTI_REGION_RECREATE_BLOCKED_TYPES as u, resolveCaptureObservedState as ut, red as v, MIGRATE_TMP_PREFIX as vt, CloudControlProvider as w, collectInlinePolicyNamesManagedBySiblings as x, AssemblyReader as xt, yellow as y, findLargeInlineResources as yt, WorkGraph as z };
16180
- //# sourceMappingURL=deploy-engine-D6U-Cm8B.js.map
17368
+ export { ensureAssetStorage as $, SynthesisError as $t, WAFv2WebACLProvider as A, clearBucketRegionCache as At, LockManager as B, LocalInvokeBuildError as Bt, findActionableSilentDrops as C, CFN_TEMPLATE_BODY_LIMIT as Ct, IntrinsicFunctionResolver as D, uploadCfnTemplate as Dt, isTerminationProtectionPropagationError as E, findLargeInlineResources as Et, assertRegionMatch as F, setAwsClients as Ft, stringifyValue as G, NestedStackChildDirectDestroyError as Gt, rebuildClientForBucketRegion as H, LocalStartServiceError as Ht, applyRoleArnIfSet as I, AssetError as It, createAssetRedirectResolver as J, ResourceTimeoutError as Jt, WorkGraph as K, PartialFailureError as Kt, DiffCalculator as L, CdkdError as Lt, matchesCdkPath as M, AwsClients as Mt, normalizeAwsTagsToCfn as N, getAwsClients as Nt, cfnRefValueFromPhysicalId as O, expectedOwnerParam as Ot, resolveExplicitPhysicalId as P, resetAwsClients as Pt, BOOTSTRAP_MARKER_PREFIX as Q, StateError as Qt, DagBuilder as R, ConfigError as Rt, ProviderRegistry as S, warnDeprecatedNoPrefixCliFlag as St, disableInstanceApiTermination as T, MIGRATE_TMP_PREFIX as Tt, shouldRetainResource as U, LockError as Ut, S3StateBackend as V, LocalMigrateError as Vt, AssetPublisher as W, MissingCdkCliError as Wt, rewriteTemplateAssetReferences as X, StackHasActiveImportsError as Xt, loadPublishableAssetManifest as Y, ResourceUpdateNotSupportedError as Yt, AssetModeResolver as Z, StackTerminationProtectionError as Zt, green as _, resolveCaptureObservedState as _t, withRetry as a, formatDockerLoginError as at, IAMRoleProvider as b, resolveStateBucketWithDefaultAndSource as bt, computeImplicitDeleteEdges as c, runDockerStreaming as ct, isStatefulRecreateTargetSync as d, Synthesizer as dt, formatError as en, getBootstrapMarkerKey as et, renderStatefulReason as f, synthesisStatusMessage as ft, gray as g, resolveAutoAssetStorage as gt, cyan as h, resolveApp as ht, withResourceDeadline as i, __exportAll as in, buildDockerImage as it, CDK_PATH_TAG as j, resolveBucketRegion as jt, refStateLookupFromResource as k, AssemblyReader as kt, extractDeploymentEventError as l, AssetManifestLoader as lt, bold as m, getLegacyStateBucketName as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, normalizeAwsError as nn, validateAssetBucketName as nt, isRetryableTransientError as o, getDockerCmd as ot, formatResourceLine as p, getDefaultStateBucketName as pt, buildAssetRedirectMap as q, ProvisioningError as qt, DeployEngine as r, withErrorHandling as rn, validateContainerRepoName as rt, IMPLICIT_DELETE_DEPENDENCIES as s, runDockerForeground as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, isCdkdError as tn, parseBootstrapMarker as tt, MULTI_REGION_RECREATE_BLOCKED_TYPES as u, getDockerImageBySourceHash as ut, red as v, resolveSkipPrefix as vt, CloudControlProvider as w, CFN_TEMPLATE_URL_LIMIT as wt, collectInlinePolicyNamesManagedBySiblings as x, resolveUseCdkBootstrapAssets as xt, yellow as y, resolveStateBucketWithDefault as yt, TemplateParser as z, DependencyError as zt };
17369
+ //# sourceMappingURL=deploy-engine-DqAyGFJu.js.map