@go-to-k/cdkd 0.248.0 → 0.250.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",
@@ -9335,8 +10525,6 @@ const NON_PROVISIONABLE_TYPES = new Set([
9335
10525
  "AWS::ElastiCache::SecurityGroupIngress",
9336
10526
  "AWS::ElasticLoadBalancingV2::ListenerCertificate",
9337
10527
  "AWS::Elasticsearch::Domain",
9338
- "AWS::EMR::InstanceFleetConfig",
9339
- "AWS::EMR::InstanceGroupConfig",
9340
10528
  "AWS::FSx::Snapshot",
9341
10529
  "AWS::FSx::StorageVirtualMachine",
9342
10530
  "AWS::FSx::Volume",
@@ -9496,7 +10684,7 @@ function unsupportedTypeIssueUrl(resourceType) {
9496
10684
  * CC API schema declares these as type: ["string", "object"] but
9497
10685
  * the implementation only accepts strings.
9498
10686
  */
9499
- const JSON_STRING_PROPERTIES = { "AWS::Events::Rule": new Set(["EventPattern"]) };
10687
+ const JSON_STRING_PROPERTIES = { "AWS::Events::Rule": /* @__PURE__ */ new Set(["EventPattern"]) };
9500
10688
  /**
9501
10689
  * Stringify object properties that CC API expects as JSON strings.
9502
10690
  */
@@ -9685,7 +10873,7 @@ var CloudControlProvider = class {
9685
10873
  this.logger.debug(`Deleting resource ${logicalId} (${resourceType}), physical ID: ${physicalId}`);
9686
10874
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
9687
10875
  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);
10876
+ const { ASGProvider } = await import("./asg-provider-er3xGYRo.js").then((n) => n.n);
9689
10877
  await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
9690
10878
  return;
9691
10879
  }
@@ -10086,7 +11274,7 @@ var CloudControlProvider = class {
10086
11274
  * even if they appear to be supported.
10087
11275
  */
10088
11276
  static isSupportedResourceType(resourceType) {
10089
- if (new Set([
11277
+ if ((/* @__PURE__ */ new Set([
10090
11278
  "AWS::IAM::Role",
10091
11279
  "AWS::IAM::Policy",
10092
11280
  "AWS::IAM::User",
@@ -10102,7 +11290,7 @@ var CloudControlProvider = class {
10102
11290
  "Custom::CDKBucketDeployment",
10103
11291
  "Custom::S3AutoDeleteObjects",
10104
11292
  "AWS::Route53::HostedZone"
10105
- ]).has(resourceType)) return false;
11293
+ ])).has(resourceType)) return false;
10106
11294
  if (resourceType.startsWith("Custom::") || resourceType.startsWith("AWS::CloudFormation::CustomResource")) return false;
10107
11295
  if (isNonProvisionable(resourceType)) return false;
10108
11296
  return resourceType.startsWith("AWS::");
@@ -10862,13 +12050,13 @@ var CustomResourceProvider = class CustomResourceProvider {
10862
12050
 
10863
12051
  //#endregion
10864
12052
  //#region src/provisioning/property-coverage.generated.ts
10865
- const PROPERTY_COVERAGE_BY_TYPE = new Map([
12053
+ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
10866
12054
  ["AWS::ApiGateway::Account", {
10867
- handled: new Set(["CloudWatchRoleArn"]),
12055
+ handled: /* @__PURE__ */ new Set(["CloudWatchRoleArn"]),
10868
12056
  silentDrop: /* @__PURE__ */ new Map()
10869
12057
  }],
10870
12058
  ["AWS::ApiGateway::Authorizer", {
10871
- handled: new Set([
12059
+ handled: /* @__PURE__ */ new Set([
10872
12060
  "AuthorizerCredentials",
10873
12061
  "AuthorizerResultTtlInSeconds",
10874
12062
  "AuthorizerUri",
@@ -10883,15 +12071,15 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10883
12071
  silentDrop: /* @__PURE__ */ new Map()
10884
12072
  }],
10885
12073
  ["AWS::ApiGateway::Deployment", {
10886
- handled: new Set(["Description", "RestApiId"]),
10887
- silentDrop: new Map([
12074
+ handled: /* @__PURE__ */ new Set(["Description", "RestApiId"]),
12075
+ silentDrop: /* @__PURE__ */ new Map([
10888
12076
  ["DeploymentCanarySettings", "not yet implemented by cdkd"],
10889
12077
  ["StageDescription", "CFn-only convenience for inline-creating a Stage; declare AWS::ApiGateway::Stage with the Description property instead"],
10890
12078
  ["StageName", "CFn-only convenience for inline-creating a Stage from a Deployment; declare AWS::ApiGateway::Stage explicitly to attach to this Deployment"]
10891
12079
  ])
10892
12080
  }],
10893
12081
  ["AWS::ApiGateway::Method", {
10894
- handled: new Set([
12082
+ handled: /* @__PURE__ */ new Set([
10895
12083
  "ApiKeyRequired",
10896
12084
  "AuthorizationScopes",
10897
12085
  "AuthorizationType",
@@ -10909,7 +12097,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10909
12097
  silentDrop: /* @__PURE__ */ new Map()
10910
12098
  }],
10911
12099
  ["AWS::ApiGateway::Resource", {
10912
- handled: new Set([
12100
+ handled: /* @__PURE__ */ new Set([
10913
12101
  "ParentId",
10914
12102
  "PathPart",
10915
12103
  "RestApiId"
@@ -10917,7 +12105,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10917
12105
  silentDrop: /* @__PURE__ */ new Map()
10918
12106
  }],
10919
12107
  ["AWS::ApiGateway::Stage", {
10920
- handled: new Set([
12108
+ handled: /* @__PURE__ */ new Set([
10921
12109
  "DeploymentId",
10922
12110
  "Description",
10923
12111
  "MethodSettings",
@@ -10927,7 +12115,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10927
12115
  "TracingEnabled",
10928
12116
  "Variables"
10929
12117
  ]),
10930
- silentDrop: new Map([
12118
+ silentDrop: /* @__PURE__ */ new Map([
10931
12119
  ["AccessLogSetting", "not yet implemented by cdkd"],
10932
12120
  ["CacheClusterEnabled", "not yet implemented by cdkd"],
10933
12121
  ["CacheClusterSize", "not yet implemented by cdkd"],
@@ -10937,7 +12125,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10937
12125
  ])
10938
12126
  }],
10939
12127
  ["AWS::ApiGatewayV2::Api", {
10940
- handled: new Set([
12128
+ handled: /* @__PURE__ */ new Set([
10941
12129
  "ApiKeySelectionExpression",
10942
12130
  "CorsConfiguration",
10943
12131
  "Description",
@@ -10949,7 +12137,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10949
12137
  "Tags",
10950
12138
  "Version"
10951
12139
  ]),
10952
- silentDrop: new Map([
12140
+ silentDrop: /* @__PURE__ */ new Map([
10953
12141
  ["BasePath", "OpenAPI-import-only basePath override; meaningful only on the ImportApi code path."],
10954
12142
  ["Body", "OpenAPI/Swagger inline spec; routed through ImportApi, not the field-by-field CreateApi path."],
10955
12143
  ["BodyS3Location", "OpenAPI/Swagger spec on S3; routed through ImportApi, not the field-by-field CreateApi path."],
@@ -10961,7 +12149,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10961
12149
  ])
10962
12150
  }],
10963
12151
  ["AWS::ApiGatewayV2::Authorizer", {
10964
- handled: new Set([
12152
+ handled: /* @__PURE__ */ new Set([
10965
12153
  "ApiId",
10966
12154
  "AuthorizerCredentialsArn",
10967
12155
  "AuthorizerPayloadFormatVersion",
@@ -10977,7 +12165,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10977
12165
  silentDrop: /* @__PURE__ */ new Map()
10978
12166
  }],
10979
12167
  ["AWS::ApiGatewayV2::Integration", {
10980
- handled: new Set([
12168
+ handled: /* @__PURE__ */ new Set([
10981
12169
  "ApiId",
10982
12170
  "Description",
10983
12171
  "IntegrationMethod",
@@ -10987,7 +12175,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
10987
12175
  "RequestParameters",
10988
12176
  "TimeoutInMillis"
10989
12177
  ]),
10990
- silentDrop: new Map([
12178
+ silentDrop: /* @__PURE__ */ new Map([
10991
12179
  ["ConnectionId", "not yet implemented by cdkd"],
10992
12180
  ["ConnectionType", "not yet implemented by cdkd"],
10993
12181
  ["ContentHandlingStrategy", "not yet implemented by cdkd"],
@@ -11001,7 +12189,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11001
12189
  ])
11002
12190
  }],
11003
12191
  ["AWS::ApiGatewayV2::Route", {
11004
- handled: new Set([
12192
+ handled: /* @__PURE__ */ new Set([
11005
12193
  "ApiId",
11006
12194
  "AuthorizationScopes",
11007
12195
  "AuthorizationType",
@@ -11010,7 +12198,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11010
12198
  "RouteKey",
11011
12199
  "Target"
11012
12200
  ]),
11013
- silentDrop: new Map([
12201
+ silentDrop: /* @__PURE__ */ new Map([
11014
12202
  ["ApiKeyRequired", "not yet implemented by cdkd"],
11015
12203
  ["ModelSelectionExpression", "not yet implemented by cdkd"],
11016
12204
  ["RequestModels", "not yet implemented by cdkd"],
@@ -11019,7 +12207,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11019
12207
  ])
11020
12208
  }],
11021
12209
  ["AWS::ApiGatewayV2::Stage", {
11022
- handled: new Set([
12210
+ handled: /* @__PURE__ */ new Set([
11023
12211
  "ApiId",
11024
12212
  "AutoDeploy",
11025
12213
  "DefaultRouteSettings",
@@ -11028,7 +12216,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11028
12216
  "StageVariables",
11029
12217
  "Tags"
11030
12218
  ]),
11031
- silentDrop: new Map([
12219
+ silentDrop: /* @__PURE__ */ new Map([
11032
12220
  ["AccessLogSettings", "not yet implemented by cdkd"],
11033
12221
  ["ClientCertificateId", "not yet implemented by cdkd"],
11034
12222
  ["DeploymentId", "not yet implemented by cdkd"],
@@ -11036,7 +12224,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11036
12224
  ])
11037
12225
  }],
11038
12226
  ["AWS::AppSync::ApiKey", {
11039
- handled: new Set([
12227
+ handled: /* @__PURE__ */ new Set([
11040
12228
  "ApiId",
11041
12229
  "Description",
11042
12230
  "Expires"
@@ -11044,7 +12232,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11044
12232
  silentDrop: /* @__PURE__ */ new Map()
11045
12233
  }],
11046
12234
  ["AWS::AppSync::DataSource", {
11047
- handled: new Set([
12235
+ handled: /* @__PURE__ */ new Set([
11048
12236
  "ApiId",
11049
12237
  "Description",
11050
12238
  "DynamoDBConfig",
@@ -11054,7 +12242,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11054
12242
  "ServiceRoleArn",
11055
12243
  "Type"
11056
12244
  ]),
11057
- silentDrop: new Map([
12245
+ silentDrop: /* @__PURE__ */ new Map([
11058
12246
  ["ElasticsearchConfig", "Legacy Elasticsearch alias; use OpenSearchServiceConfig (AppSync deprecated the Elasticsearch DataSource type in favor of OpenSearch)"],
11059
12247
  ["EventBridgeConfig", "not yet implemented by cdkd"],
11060
12248
  ["MetricsConfig", "not yet implemented by cdkd"],
@@ -11063,14 +12251,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11063
12251
  ])
11064
12252
  }],
11065
12253
  ["AWS::AppSync::GraphQLApi", {
11066
- handled: new Set([
12254
+ handled: /* @__PURE__ */ new Set([
11067
12255
  "AuthenticationType",
11068
12256
  "LogConfig",
11069
12257
  "Name",
11070
12258
  "Tags",
11071
12259
  "XrayEnabled"
11072
12260
  ]),
11073
- silentDrop: new Map([
12261
+ silentDrop: /* @__PURE__ */ new Map([
11074
12262
  ["AdditionalAuthenticationProviders", "not yet implemented by cdkd"],
11075
12263
  ["ApiType", "not yet implemented by cdkd"],
11076
12264
  ["EnhancedMetricsConfig", "not yet implemented by cdkd"],
@@ -11087,7 +12275,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11087
12275
  ])
11088
12276
  }],
11089
12277
  ["AWS::AppSync::GraphQLSchema", {
11090
- handled: new Set([
12278
+ handled: /* @__PURE__ */ new Set([
11091
12279
  "ApiId",
11092
12280
  "Definition",
11093
12281
  "DefinitionS3Location"
@@ -11095,7 +12283,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11095
12283
  silentDrop: /* @__PURE__ */ new Map()
11096
12284
  }],
11097
12285
  ["AWS::AppSync::Resolver", {
11098
- handled: new Set([
12286
+ handled: /* @__PURE__ */ new Set([
11099
12287
  "ApiId",
11100
12288
  "Code",
11101
12289
  "DataSourceName",
@@ -11107,7 +12295,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11107
12295
  "Runtime",
11108
12296
  "TypeName"
11109
12297
  ]),
11110
- silentDrop: new Map([
12298
+ silentDrop: /* @__PURE__ */ new Map([
11111
12299
  ["CachingConfig", "not yet implemented by cdkd"],
11112
12300
  ["CodeS3Location", "not yet implemented by cdkd"],
11113
12301
  ["MaxBatchSize", "not yet implemented by cdkd"],
@@ -11118,7 +12306,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11118
12306
  ])
11119
12307
  }],
11120
12308
  ["AWS::AutoScaling::AutoScalingGroup", {
11121
- handled: new Set([
12309
+ handled: /* @__PURE__ */ new Set([
11122
12310
  "AutoScalingGroupName",
11123
12311
  "AvailabilityZoneDistribution",
11124
12312
  "AvailabilityZoneImpairmentPolicy",
@@ -11153,7 +12341,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11153
12341
  "TrafficSources",
11154
12342
  "VPCZoneIdentifier"
11155
12343
  ]),
11156
- silentDrop: new Map([
12344
+ silentDrop: /* @__PURE__ */ new Map([
11157
12345
  ["AvailabilityZoneIds", "not yet implemented by cdkd"],
11158
12346
  ["InstanceId", "not yet implemented by cdkd"],
11159
12347
  ["InstanceLifecyclePolicy", "not yet implemented by cdkd"],
@@ -11171,7 +12359,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11171
12359
  silentDrop: /* @__PURE__ */ new Map()
11172
12360
  }],
11173
12361
  ["AWS::BedrockAgentCore::Evaluator", {
11174
- handled: new Set([
12362
+ handled: /* @__PURE__ */ new Set([
11175
12363
  "Description",
11176
12364
  "EvaluatorConfig",
11177
12365
  "EvaluatorName",
@@ -11182,7 +12370,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11182
12370
  silentDrop: /* @__PURE__ */ new Map()
11183
12371
  }],
11184
12372
  ["AWS::BedrockAgentCore::Runtime", {
11185
- handled: new Set([
12373
+ handled: /* @__PURE__ */ new Set([
11186
12374
  "AgentRuntimeArtifact",
11187
12375
  "AgentRuntimeName",
11188
12376
  "AuthorizerConfiguration",
@@ -11194,14 +12382,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11194
12382
  "ProtocolConfiguration",
11195
12383
  "RoleArn"
11196
12384
  ]),
11197
- silentDrop: new Map([
12385
+ silentDrop: /* @__PURE__ */ new Map([
11198
12386
  ["FilesystemConfigurations", "not yet implemented by cdkd"],
11199
12387
  ["RequestHeaderConfiguration", "not yet implemented by cdkd"],
11200
12388
  ["Tags", "not yet implemented by cdkd"]
11201
12389
  ])
11202
12390
  }],
11203
12391
  ["AWS::Budgets::Budget", {
11204
- handled: new Set([
12392
+ handled: /* @__PURE__ */ new Set([
11205
12393
  "Budget",
11206
12394
  "NotificationsWithSubscribers",
11207
12395
  "ResourceTags"
@@ -11209,7 +12397,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11209
12397
  silentDrop: /* @__PURE__ */ new Map()
11210
12398
  }],
11211
12399
  ["AWS::CertificateManager::Certificate", {
11212
- handled: new Set([
12400
+ handled: /* @__PURE__ */ new Set([
11213
12401
  "CertificateAuthorityArn",
11214
12402
  "CertificateExport",
11215
12403
  "CertificateTransparencyLoggingPreference",
@@ -11223,8 +12411,8 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11223
12411
  silentDrop: /* @__PURE__ */ new Map()
11224
12412
  }],
11225
12413
  ["AWS::CloudFormation::Stack", {
11226
- handled: new Set(["Parameters", "TemplateURL"]),
11227
- silentDrop: new Map([
12414
+ handled: /* @__PURE__ */ new Set(["Parameters", "TemplateURL"]),
12415
+ silentDrop: /* @__PURE__ */ new Map([
11228
12416
  ["Capabilities", "CFn-only IAM capability declaration — cdkd does not go through CloudFormation so capabilities have no equivalent"],
11229
12417
  ["Description", "CFn-only informational — no semantic effect on the recursive deploy"],
11230
12418
  ["DisableRollback", "CFn-only — cdkd controls rollback via the top-level deploy-engine --no-rollback flag, not per nested stack"],
@@ -11245,15 +12433,15 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11245
12433
  silentDrop: /* @__PURE__ */ new Map()
11246
12434
  }],
11247
12435
  ["AWS::CloudFront::CloudFrontOriginAccessIdentity", {
11248
- handled: new Set(["CloudFrontOriginAccessIdentityConfig"]),
12436
+ handled: /* @__PURE__ */ new Set(["CloudFrontOriginAccessIdentityConfig"]),
11249
12437
  silentDrop: /* @__PURE__ */ new Map()
11250
12438
  }],
11251
12439
  ["AWS::CloudFront::Distribution", {
11252
- handled: new Set(["DistributionConfig", "Tags"]),
12440
+ handled: /* @__PURE__ */ new Set(["DistributionConfig", "Tags"]),
11253
12441
  silentDrop: /* @__PURE__ */ new Map()
11254
12442
  }],
11255
12443
  ["AWS::CloudTrail::Trail", {
11256
- handled: new Set([
12444
+ handled: /* @__PURE__ */ new Set([
11257
12445
  "CloudWatchLogsLogGroupArn",
11258
12446
  "CloudWatchLogsRoleArn",
11259
12447
  "EnableLogFileValidation",
@@ -11270,10 +12458,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11270
12458
  "Tags",
11271
12459
  "TrailName"
11272
12460
  ]),
11273
- silentDrop: new Map([["AdvancedEventSelectors", "not yet implemented by cdkd"], ["AggregationConfigurations", "not yet implemented by cdkd"]])
12461
+ silentDrop: /* @__PURE__ */ new Map([["AdvancedEventSelectors", "not yet implemented by cdkd"], ["AggregationConfigurations", "not yet implemented by cdkd"]])
11274
12462
  }],
11275
12463
  ["AWS::CloudWatch::Alarm", {
11276
- handled: new Set([
12464
+ handled: /* @__PURE__ */ new Set([
11277
12465
  "ActionsEnabled",
11278
12466
  "AlarmActions",
11279
12467
  "AlarmDescription",
@@ -11297,10 +12485,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11297
12485
  "TreatMissingData",
11298
12486
  "Unit"
11299
12487
  ]),
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."]])
12488
+ 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
12489
  }],
11302
12490
  ["AWS::CodeBuild::Project", {
11303
- handled: new Set([
12491
+ handled: /* @__PURE__ */ new Set([
11304
12492
  "Artifacts",
11305
12493
  "AutoRetryLimit",
11306
12494
  "BadgeEnabled",
@@ -11324,14 +12512,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11324
12512
  "TimeoutInMinutes",
11325
12513
  "VpcConfig"
11326
12514
  ]),
11327
- silentDrop: new Map([
12515
+ silentDrop: /* @__PURE__ */ new Map([
11328
12516
  ["ResourceAccessRole", "not yet implemented by cdkd"],
11329
12517
  ["Triggers", "not yet implemented by cdkd"],
11330
12518
  ["Visibility", "not yet implemented by cdkd"]
11331
12519
  ])
11332
12520
  }],
11333
12521
  ["AWS::CodeCommit::Repository", {
11334
- handled: new Set([
12522
+ handled: /* @__PURE__ */ new Set([
11335
12523
  "Code",
11336
12524
  "KmsKeyId",
11337
12525
  "RepositoryDescription",
@@ -11342,7 +12530,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11342
12530
  silentDrop: /* @__PURE__ */ new Map()
11343
12531
  }],
11344
12532
  ["AWS::Cognito::UserPool", {
11345
- handled: new Set([
12533
+ handled: /* @__PURE__ */ new Set([
11346
12534
  "AccountRecoverySetting",
11347
12535
  "AdminCreateUserConfig",
11348
12536
  "AliasAttributes",
@@ -11373,10 +12561,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11373
12561
  "WebAuthnRelyingPartyID",
11374
12562
  "WebAuthnUserVerification"
11375
12563
  ]),
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"]])
12564
+ 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
12565
  }],
11378
12566
  ["AWS::DLM::LifecyclePolicy", {
11379
- handled: new Set([
12567
+ handled: /* @__PURE__ */ new Set([
11380
12568
  "CopyTags",
11381
12569
  "CreateInterval",
11382
12570
  "CrossRegionCopyTargets",
@@ -11393,7 +12581,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11393
12581
  silentDrop: /* @__PURE__ */ new Map()
11394
12582
  }],
11395
12583
  ["AWS::DocDB::DBCluster", {
11396
- handled: new Set([
12584
+ handled: /* @__PURE__ */ new Set([
11397
12585
  "BackupRetentionPeriod",
11398
12586
  "DBClusterIdentifier",
11399
12587
  "DBClusterParameterGroupName",
@@ -11410,7 +12598,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11410
12598
  "Tags",
11411
12599
  "VpcSecurityGroupIds"
11412
12600
  ]),
11413
- silentDrop: new Map([
12601
+ silentDrop: /* @__PURE__ */ new Map([
11414
12602
  ["AvailabilityZones", "not yet implemented by cdkd"],
11415
12603
  ["CopyTagsToSnapshot", "not yet implemented by cdkd"],
11416
12604
  ["EnableCloudwatchLogsExports", "not yet implemented by cdkd"],
@@ -11429,7 +12617,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11429
12617
  ])
11430
12618
  }],
11431
12619
  ["AWS::DocDB::DBInstance", {
11432
- handled: new Set([
12620
+ handled: /* @__PURE__ */ new Set([
11433
12621
  "AutoMinorVersionUpgrade",
11434
12622
  "AvailabilityZone",
11435
12623
  "DBClusterIdentifier",
@@ -11438,14 +12626,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11438
12626
  "PreferredMaintenanceWindow",
11439
12627
  "Tags"
11440
12628
  ]),
11441
- silentDrop: new Map([
12629
+ silentDrop: /* @__PURE__ */ new Map([
11442
12630
  ["CACertificateIdentifier", "not yet implemented by cdkd"],
11443
12631
  ["CertificateRotationRestart", "not yet implemented by cdkd"],
11444
12632
  ["EnablePerformanceInsights", "not yet implemented by cdkd"]
11445
12633
  ])
11446
12634
  }],
11447
12635
  ["AWS::DocDB::DBSubnetGroup", {
11448
- handled: new Set([
12636
+ handled: /* @__PURE__ */ new Set([
11449
12637
  "DBSubnetGroupDescription",
11450
12638
  "DBSubnetGroupName",
11451
12639
  "SubnetIds",
@@ -11454,7 +12642,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11454
12642
  silentDrop: /* @__PURE__ */ new Map()
11455
12643
  }],
11456
12644
  ["AWS::DynamoDB::GlobalTable", {
11457
- handled: new Set([
12645
+ handled: /* @__PURE__ */ new Set([
11458
12646
  "AttributeDefinitions",
11459
12647
  "BillingMode",
11460
12648
  "DeletionProtectionEnabled",
@@ -11470,7 +12658,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11470
12658
  "WriteOnDemandThroughputSettings",
11471
12659
  "WriteProvisionedThroughputSettings"
11472
12660
  ]),
11473
- silentDrop: new Map([
12661
+ silentDrop: /* @__PURE__ */ new Map([
11474
12662
  ["GlobalTableSourceArn", "not yet implemented by cdkd"],
11475
12663
  ["GlobalTableWitnesses", "not yet implemented by cdkd"],
11476
12664
  ["MultiRegionConsistency", "not yet implemented by cdkd"],
@@ -11480,7 +12668,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11480
12668
  ])
11481
12669
  }],
11482
12670
  ["AWS::DynamoDB::Table", {
11483
- handled: new Set([
12671
+ handled: /* @__PURE__ */ new Set([
11484
12672
  "AttributeDefinitions",
11485
12673
  "BillingMode",
11486
12674
  "ContributorInsightsSpecification",
@@ -11501,10 +12689,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11501
12689
  "TimeToLiveSpecification",
11502
12690
  "WarmThroughput"
11503
12691
  ]),
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"]])
12692
+ 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
12693
  }],
11506
12694
  ["AWS::EC2::Instance", {
11507
- handled: new Set([
12695
+ handled: /* @__PURE__ */ new Set([
11508
12696
  "BlockDeviceMappings",
11509
12697
  "CreditSpecification",
11510
12698
  "DisableApiTermination",
@@ -11521,7 +12709,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11521
12709
  "Tags",
11522
12710
  "UserData"
11523
12711
  ]),
11524
- silentDrop: new Map([
12712
+ silentDrop: /* @__PURE__ */ new Map([
11525
12713
  ["AdditionalInfo", "not yet implemented by cdkd"],
11526
12714
  ["Affinity", "not yet implemented by cdkd"],
11527
12715
  ["AvailabilityZone", "not yet implemented by cdkd"],
@@ -11551,11 +12739,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11551
12739
  ])
11552
12740
  }],
11553
12741
  ["AWS::EC2::InternetGateway", {
11554
- handled: new Set(["Tags"]),
12742
+ handled: /* @__PURE__ */ new Set(["Tags"]),
11555
12743
  silentDrop: /* @__PURE__ */ new Map()
11556
12744
  }],
11557
12745
  ["AWS::EC2::NatGateway", {
11558
- handled: new Set([
12746
+ handled: /* @__PURE__ */ new Set([
11559
12747
  "AllocationId",
11560
12748
  "ConnectivityType",
11561
12749
  "MaxDrainDurationSeconds",
@@ -11566,18 +12754,18 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11566
12754
  "SubnetId",
11567
12755
  "Tags"
11568
12756
  ]),
11569
- silentDrop: new Map([
12757
+ silentDrop: /* @__PURE__ */ new Map([
11570
12758
  ["AvailabilityMode", "not yet implemented by cdkd"],
11571
12759
  ["AvailabilityZoneAddresses", "not yet implemented by cdkd"],
11572
12760
  ["VpcId", "AWS derives the VPC from SubnetId; the ec2:CreateNatGateway API has no VpcId parameter"]
11573
12761
  ])
11574
12762
  }],
11575
12763
  ["AWS::EC2::NetworkAcl", {
11576
- handled: new Set(["Tags", "VpcId"]),
12764
+ handled: /* @__PURE__ */ new Set(["Tags", "VpcId"]),
11577
12765
  silentDrop: /* @__PURE__ */ new Map()
11578
12766
  }],
11579
12767
  ["AWS::EC2::NetworkAclEntry", {
11580
- handled: new Set([
12768
+ handled: /* @__PURE__ */ new Set([
11581
12769
  "CidrBlock",
11582
12770
  "Egress",
11583
12771
  "Icmp",
@@ -11591,7 +12779,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11591
12779
  silentDrop: /* @__PURE__ */ new Map()
11592
12780
  }],
11593
12781
  ["AWS::EC2::Route", {
11594
- handled: new Set([
12782
+ handled: /* @__PURE__ */ new Set([
11595
12783
  "DestinationCidrBlock",
11596
12784
  "DestinationIpv6CidrBlock",
11597
12785
  "EgressOnlyInternetGatewayId",
@@ -11602,7 +12790,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11602
12790
  "RouteTableId",
11603
12791
  "VpcPeeringConnectionId"
11604
12792
  ]),
11605
- silentDrop: new Map([
12793
+ silentDrop: /* @__PURE__ */ new Map([
11606
12794
  ["CarrierGatewayId", "not yet implemented by cdkd"],
11607
12795
  ["CoreNetworkArn", "not yet implemented by cdkd"],
11608
12796
  ["DestinationPrefixListId", "not yet implemented by cdkd"],
@@ -11612,11 +12800,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11612
12800
  ])
11613
12801
  }],
11614
12802
  ["AWS::EC2::RouteTable", {
11615
- handled: new Set(["Tags", "VpcId"]),
12803
+ handled: /* @__PURE__ */ new Set(["Tags", "VpcId"]),
11616
12804
  silentDrop: /* @__PURE__ */ new Map()
11617
12805
  }],
11618
12806
  ["AWS::EC2::SecurityGroup", {
11619
- handled: new Set([
12807
+ handled: /* @__PURE__ */ new Set([
11620
12808
  "GroupDescription",
11621
12809
  "GroupName",
11622
12810
  "SecurityGroupEgress",
@@ -11627,7 +12815,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11627
12815
  silentDrop: /* @__PURE__ */ new Map()
11628
12816
  }],
11629
12817
  ["AWS::EC2::SecurityGroupIngress", {
11630
- handled: new Set([
12818
+ handled: /* @__PURE__ */ new Set([
11631
12819
  "CidrIp",
11632
12820
  "CidrIpv6",
11633
12821
  "Description",
@@ -11639,17 +12827,17 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11639
12827
  "SourceSecurityGroupOwnerId",
11640
12828
  "ToPort"
11641
12829
  ]),
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)"]])
12830
+ 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
12831
  }],
11644
12832
  ["AWS::EC2::Subnet", {
11645
- handled: new Set([
12833
+ handled: /* @__PURE__ */ new Set([
11646
12834
  "AvailabilityZone",
11647
12835
  "CidrBlock",
11648
12836
  "MapPublicIpOnLaunch",
11649
12837
  "Tags",
11650
12838
  "VpcId"
11651
12839
  ]),
11652
- silentDrop: new Map([
12840
+ silentDrop: /* @__PURE__ */ new Map([
11653
12841
  ["AssignIpv6AddressOnCreation", "not yet implemented by cdkd"],
11654
12842
  ["AvailabilityZoneId", "not yet implemented by cdkd"],
11655
12843
  ["EnableDns64", "not yet implemented by cdkd"],
@@ -11665,29 +12853,29 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11665
12853
  ])
11666
12854
  }],
11667
12855
  ["AWS::EC2::SubnetNetworkAclAssociation", {
11668
- handled: new Set(["NetworkAclId", "SubnetId"]),
12856
+ handled: /* @__PURE__ */ new Set(["NetworkAclId", "SubnetId"]),
11669
12857
  silentDrop: /* @__PURE__ */ new Map()
11670
12858
  }],
11671
12859
  ["AWS::EC2::SubnetRouteTableAssociation", {
11672
- handled: new Set(["RouteTableId", "SubnetId"]),
12860
+ handled: /* @__PURE__ */ new Set(["RouteTableId", "SubnetId"]),
11673
12861
  silentDrop: /* @__PURE__ */ new Map()
11674
12862
  }],
11675
12863
  ["AWS::EC2::VPC", {
11676
- handled: new Set([
12864
+ handled: /* @__PURE__ */ new Set([
11677
12865
  "CidrBlock",
11678
12866
  "EnableDnsHostnames",
11679
12867
  "EnableDnsSupport",
11680
12868
  "InstanceTenancy",
11681
12869
  "Tags"
11682
12870
  ]),
11683
- silentDrop: new Map([["Ipv4IpamPoolId", "not yet implemented by cdkd"], ["Ipv4NetmaskLength", "not yet implemented by cdkd"]])
12871
+ silentDrop: /* @__PURE__ */ new Map([["Ipv4IpamPoolId", "not yet implemented by cdkd"], ["Ipv4NetmaskLength", "not yet implemented by cdkd"]])
11684
12872
  }],
11685
12873
  ["AWS::EC2::VPCGatewayAttachment", {
11686
- handled: new Set(["InternetGatewayId", "VpcId"]),
11687
- silentDrop: new Map([["VpnGatewayId", "not yet implemented by cdkd"]])
12874
+ handled: /* @__PURE__ */ new Set(["InternetGatewayId", "VpcId"]),
12875
+ silentDrop: /* @__PURE__ */ new Map([["VpnGatewayId", "not yet implemented by cdkd"]])
11688
12876
  }],
11689
12877
  ["AWS::ECR::Repository", {
11690
- handled: new Set([
12878
+ handled: /* @__PURE__ */ new Set([
11691
12879
  "EmptyOnDelete",
11692
12880
  "EncryptionConfiguration",
11693
12881
  "ImageScanningConfiguration",
@@ -11701,7 +12889,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11701
12889
  silentDrop: /* @__PURE__ */ new Map()
11702
12890
  }],
11703
12891
  ["AWS::ECS::Cluster", {
11704
- handled: new Set([
12892
+ handled: /* @__PURE__ */ new Set([
11705
12893
  "CapacityProviders",
11706
12894
  "ClusterName",
11707
12895
  "ClusterSettings",
@@ -11713,7 +12901,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11713
12901
  silentDrop: /* @__PURE__ */ new Map()
11714
12902
  }],
11715
12903
  ["AWS::ECS::Service", {
11716
- handled: new Set([
12904
+ handled: /* @__PURE__ */ new Set([
11717
12905
  "CapacityProviderStrategy",
11718
12906
  "Cluster",
11719
12907
  "DeploymentConfiguration",
@@ -11734,7 +12922,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11734
12922
  "Tags",
11735
12923
  "TaskDefinition"
11736
12924
  ]),
11737
- silentDrop: new Map([
12925
+ silentDrop: /* @__PURE__ */ new Map([
11738
12926
  ["AvailabilityZoneRebalancing", "not yet implemented by cdkd"],
11739
12927
  ["DeploymentController", "not yet implemented by cdkd"],
11740
12928
  ["ForceNewDeployment", "not yet implemented by cdkd"],
@@ -11745,7 +12933,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11745
12933
  ])
11746
12934
  }],
11747
12935
  ["AWS::ECS::TaskDefinition", {
11748
- handled: new Set([
12936
+ handled: /* @__PURE__ */ new Set([
11749
12937
  "ContainerDefinitions",
11750
12938
  "Cpu",
11751
12939
  "EnableFaultInjection",
@@ -11764,19 +12952,19 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11764
12952
  "TaskRoleArn",
11765
12953
  "Volumes"
11766
12954
  ]),
11767
- silentDrop: new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])
12955
+ silentDrop: /* @__PURE__ */ new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])
11768
12956
  }],
11769
12957
  ["AWS::EFS::AccessPoint", {
11770
- handled: new Set([
12958
+ handled: /* @__PURE__ */ new Set([
11771
12959
  "AccessPointTags",
11772
12960
  "FileSystemId",
11773
12961
  "PosixUser",
11774
12962
  "RootDirectory"
11775
12963
  ]),
11776
- silentDrop: new Map([["ClientToken", "AWS SDK manages this idempotency token internally on CreateAccessPoint; no user-supplied value is honored"]])
12964
+ silentDrop: /* @__PURE__ */ new Map([["ClientToken", "AWS SDK manages this idempotency token internally on CreateAccessPoint; no user-supplied value is honored"]])
11777
12965
  }],
11778
12966
  ["AWS::EFS::FileSystem", {
11779
- handled: new Set([
12967
+ handled: /* @__PURE__ */ new Set([
11780
12968
  "AvailabilityZoneName",
11781
12969
  "BackupPolicy",
11782
12970
  "BypassPolicyLockoutSafetyCheck",
@@ -11790,22 +12978,22 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11790
12978
  "ProvisionedThroughputInMibps",
11791
12979
  "ThroughputMode"
11792
12980
  ]),
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."]])
12981
+ 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
12982
  }],
11795
12983
  ["AWS::EFS::MountTarget", {
11796
- handled: new Set([
12984
+ handled: /* @__PURE__ */ new Set([
11797
12985
  "FileSystemId",
11798
12986
  "SecurityGroups",
11799
12987
  "SubnetId"
11800
12988
  ]),
11801
- silentDrop: new Map([
12989
+ silentDrop: /* @__PURE__ */ new Map([
11802
12990
  ["IpAddress", "not yet implemented by cdkd"],
11803
12991
  ["IpAddressType", "not yet implemented by cdkd"],
11804
12992
  ["Ipv6Address", "not yet implemented by cdkd"]
11805
12993
  ])
11806
12994
  }],
11807
12995
  ["AWS::ElastiCache::CacheCluster", {
11808
- handled: new Set([
12996
+ handled: /* @__PURE__ */ new Set([
11809
12997
  "AutoMinorVersionUpgrade",
11810
12998
  "AZMode",
11811
12999
  "CacheNodeType",
@@ -11830,10 +13018,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11830
13018
  "TransitEncryptionEnabled",
11831
13019
  "VpcSecurityGroupIds"
11832
13020
  ]),
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"]])
13021
+ 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
13022
  }],
11835
13023
  ["AWS::ElastiCache::SubnetGroup", {
11836
- handled: new Set([
13024
+ handled: /* @__PURE__ */ new Set([
11837
13025
  "CacheSubnetGroupDescription",
11838
13026
  "CacheSubnetGroupName",
11839
13027
  "Description",
@@ -11843,7 +13031,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11843
13031
  silentDrop: /* @__PURE__ */ new Map()
11844
13032
  }],
11845
13033
  ["AWS::ElasticLoadBalancingV2::Listener", {
11846
- handled: new Set([
13034
+ handled: /* @__PURE__ */ new Set([
11847
13035
  "AlpnPolicy",
11848
13036
  "Certificates",
11849
13037
  "DefaultActions",
@@ -11857,7 +13045,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11857
13045
  silentDrop: /* @__PURE__ */ new Map()
11858
13046
  }],
11859
13047
  ["AWS::ElasticLoadBalancingV2::LoadBalancer", {
11860
- handled: new Set([
13048
+ handled: /* @__PURE__ */ new Set([
11861
13049
  "IpAddressType",
11862
13050
  "LoadBalancerAttributes",
11863
13051
  "Name",
@@ -11868,7 +13056,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11868
13056
  "Tags",
11869
13057
  "Type"
11870
13058
  ]),
11871
- silentDrop: new Map([
13059
+ silentDrop: /* @__PURE__ */ new Map([
11872
13060
  ["EnableCapacityReservationProvisionStabilize", "not yet implemented by cdkd"],
11873
13061
  ["EnablePrefixForIpv6SourceNat", "not yet implemented by cdkd"],
11874
13062
  ["EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic", "not yet implemented by cdkd"],
@@ -11877,7 +13065,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11877
13065
  ])
11878
13066
  }],
11879
13067
  ["AWS::ElasticLoadBalancingV2::TargetGroup", {
11880
- handled: new Set([
13068
+ handled: /* @__PURE__ */ new Set([
11881
13069
  "HealthCheckEnabled",
11882
13070
  "HealthCheckIntervalSeconds",
11883
13071
  "HealthCheckPath",
@@ -11895,7 +13083,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11895
13083
  "UnhealthyThresholdCount",
11896
13084
  "VpcId"
11897
13085
  ]),
11898
- silentDrop: new Map([
13086
+ silentDrop: /* @__PURE__ */ new Map([
11899
13087
  ["IpAddressType", "not yet implemented by cdkd"],
11900
13088
  ["TargetControlPort", "not yet implemented by cdkd"],
11901
13089
  ["TargetGroupAttributes", "not yet implemented by cdkd"],
@@ -11903,7 +13091,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11903
13091
  ])
11904
13092
  }],
11905
13093
  ["AWS::EMR::Cluster", {
11906
- handled: new Set([
13094
+ handled: /* @__PURE__ */ new Set([
11907
13095
  "AdditionalInfo",
11908
13096
  "Applications",
11909
13097
  "AutoScalingRole",
@@ -11934,8 +13122,37 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11934
13122
  ]),
11935
13123
  silentDrop: /* @__PURE__ */ new Map()
11936
13124
  }],
13125
+ ["AWS::EMR::InstanceFleetConfig", {
13126
+ handled: /* @__PURE__ */ new Set([
13127
+ "ClusterId",
13128
+ "InstanceFleetType",
13129
+ "InstanceTypeConfigs",
13130
+ "LaunchSpecifications",
13131
+ "Name",
13132
+ "ResizeSpecifications",
13133
+ "TargetOnDemandCapacity",
13134
+ "TargetSpotCapacity"
13135
+ ]),
13136
+ silentDrop: /* @__PURE__ */ new Map()
13137
+ }],
13138
+ ["AWS::EMR::InstanceGroupConfig", {
13139
+ handled: /* @__PURE__ */ new Set([
13140
+ "AutoScalingPolicy",
13141
+ "BidPrice",
13142
+ "Configurations",
13143
+ "CustomAmiId",
13144
+ "EbsConfiguration",
13145
+ "InstanceCount",
13146
+ "InstanceRole",
13147
+ "InstanceType",
13148
+ "JobFlowId",
13149
+ "Market",
13150
+ "Name"
13151
+ ]),
13152
+ silentDrop: /* @__PURE__ */ new Map()
13153
+ }],
11937
13154
  ["AWS::Events::EventBus", {
11938
- handled: new Set([
13155
+ handled: /* @__PURE__ */ new Set([
11939
13156
  "DeadLetterConfig",
11940
13157
  "Description",
11941
13158
  "EventSourceName",
@@ -11948,7 +13165,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11948
13165
  silentDrop: /* @__PURE__ */ new Map()
11949
13166
  }],
11950
13167
  ["AWS::Events::Rule", {
11951
- handled: new Set([
13168
+ handled: /* @__PURE__ */ new Set([
11952
13169
  "Description",
11953
13170
  "EventBusName",
11954
13171
  "EventPattern",
@@ -11962,31 +13179,30 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11962
13179
  silentDrop: /* @__PURE__ */ new Map()
11963
13180
  }],
11964
13181
  ["AWS::FSx::FileSystem", {
11965
- handled: new Set([
13182
+ handled: /* @__PURE__ */ new Set([
11966
13183
  "BackupId",
11967
13184
  "FileSystemType",
11968
13185
  "FileSystemTypeVersion",
11969
13186
  "KmsKeyId",
11970
13187
  "LustreConfiguration",
11971
13188
  "NetworkType",
13189
+ "OntapConfiguration",
13190
+ "OpenZFSConfiguration",
11972
13191
  "SecurityGroupIds",
11973
13192
  "StorageCapacity",
11974
13193
  "StorageType",
11975
13194
  "SubnetIds",
11976
- "Tags"
13195
+ "Tags",
13196
+ "WindowsConfiguration"
11977
13197
  ]),
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
- ])
13198
+ silentDrop: /* @__PURE__ */ new Map()
11983
13199
  }],
11984
13200
  ["AWS::Glue::Connection", {
11985
- handled: new Set(["CatalogId", "ConnectionInput"]),
13201
+ handled: /* @__PURE__ */ new Set(["CatalogId", "ConnectionInput"]),
11986
13202
  silentDrop: /* @__PURE__ */ new Map()
11987
13203
  }],
11988
13204
  ["AWS::Glue::Crawler", {
11989
- handled: new Set([
13205
+ handled: /* @__PURE__ */ new Set([
11990
13206
  "Classifiers",
11991
13207
  "Configuration",
11992
13208
  "CrawlerSecurityConfiguration",
@@ -12006,7 +13222,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12006
13222
  silentDrop: /* @__PURE__ */ new Map()
12007
13223
  }],
12008
13224
  ["AWS::Glue::Database", {
12009
- handled: new Set([
13225
+ handled: /* @__PURE__ */ new Set([
12010
13226
  "CatalogId",
12011
13227
  "DatabaseInput",
12012
13228
  "DatabaseName"
@@ -12014,7 +13230,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12014
13230
  silentDrop: /* @__PURE__ */ new Map()
12015
13231
  }],
12016
13232
  ["AWS::Glue::Job", {
12017
- handled: new Set([
13233
+ handled: /* @__PURE__ */ new Set([
12018
13234
  "AllocatedCapacity",
12019
13235
  "Command",
12020
13236
  "Connections",
@@ -12043,11 +13259,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12043
13259
  silentDrop: /* @__PURE__ */ new Map()
12044
13260
  }],
12045
13261
  ["AWS::Glue::SecurityConfiguration", {
12046
- handled: new Set(["EncryptionConfiguration", "Name"]),
13262
+ handled: /* @__PURE__ */ new Set(["EncryptionConfiguration", "Name"]),
12047
13263
  silentDrop: /* @__PURE__ */ new Map()
12048
13264
  }],
12049
13265
  ["AWS::Glue::Table", {
12050
- handled: new Set([
13266
+ handled: /* @__PURE__ */ new Set([
12051
13267
  "CatalogId",
12052
13268
  "DatabaseName",
12053
13269
  "Name",
@@ -12057,7 +13273,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12057
13273
  silentDrop: /* @__PURE__ */ new Map()
12058
13274
  }],
12059
13275
  ["AWS::Glue::Trigger", {
12060
- handled: new Set([
13276
+ handled: /* @__PURE__ */ new Set([
12061
13277
  "Actions",
12062
13278
  "Description",
12063
13279
  "EventBatchingCondition",
@@ -12072,7 +13288,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12072
13288
  silentDrop: /* @__PURE__ */ new Map()
12073
13289
  }],
12074
13290
  ["AWS::Glue::Workflow", {
12075
- handled: new Set([
13291
+ handled: /* @__PURE__ */ new Set([
12076
13292
  "DefaultRunProperties",
12077
13293
  "Description",
12078
13294
  "MaxConcurrentRuns",
@@ -12082,7 +13298,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12082
13298
  silentDrop: /* @__PURE__ */ new Map()
12083
13299
  }],
12084
13300
  ["AWS::IAM::Group", {
12085
- handled: new Set([
13301
+ handled: /* @__PURE__ */ new Set([
12086
13302
  "GroupName",
12087
13303
  "ManagedPolicyArns",
12088
13304
  "Path",
@@ -12091,7 +13307,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12091
13307
  silentDrop: /* @__PURE__ */ new Map()
12092
13308
  }],
12093
13309
  ["AWS::IAM::InstanceProfile", {
12094
- handled: new Set([
13310
+ handled: /* @__PURE__ */ new Set([
12095
13311
  "InstanceProfileName",
12096
13312
  "Path",
12097
13313
  "Roles"
@@ -12099,7 +13315,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12099
13315
  silentDrop: /* @__PURE__ */ new Map()
12100
13316
  }],
12101
13317
  ["AWS::IAM::ManagedPolicy", {
12102
- handled: new Set([
13318
+ handled: /* @__PURE__ */ new Set([
12103
13319
  "Description",
12104
13320
  "Groups",
12105
13321
  "ManagedPolicyName",
@@ -12112,7 +13328,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12112
13328
  silentDrop: /* @__PURE__ */ new Map()
12113
13329
  }],
12114
13330
  ["AWS::IAM::Policy", {
12115
- handled: new Set([
13331
+ handled: /* @__PURE__ */ new Set([
12116
13332
  "Groups",
12117
13333
  "PolicyDocument",
12118
13334
  "PolicyName",
@@ -12122,7 +13338,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12122
13338
  silentDrop: /* @__PURE__ */ new Map()
12123
13339
  }],
12124
13340
  ["AWS::IAM::Role", {
12125
- handled: new Set([
13341
+ handled: /* @__PURE__ */ new Set([
12126
13342
  "AssumeRolePolicyDocument",
12127
13343
  "Description",
12128
13344
  "ManagedPolicyArns",
@@ -12136,7 +13352,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12136
13352
  silentDrop: /* @__PURE__ */ new Map()
12137
13353
  }],
12138
13354
  ["AWS::IAM::User", {
12139
- handled: new Set([
13355
+ handled: /* @__PURE__ */ new Set([
12140
13356
  "Groups",
12141
13357
  "LoginProfile",
12142
13358
  "ManagedPolicyArns",
@@ -12149,11 +13365,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12149
13365
  silentDrop: /* @__PURE__ */ new Map()
12150
13366
  }],
12151
13367
  ["AWS::IAM::UserToGroupAddition", {
12152
- handled: new Set(["GroupName", "Users"]),
13368
+ handled: /* @__PURE__ */ new Set(["GroupName", "Users"]),
12153
13369
  silentDrop: /* @__PURE__ */ new Map()
12154
13370
  }],
12155
13371
  ["AWS::Kinesis::Stream", {
12156
- handled: new Set([
13372
+ handled: /* @__PURE__ */ new Set([
12157
13373
  "Name",
12158
13374
  "RetentionPeriodHours",
12159
13375
  "ShardCount",
@@ -12161,14 +13377,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12161
13377
  "StreamModeDetails",
12162
13378
  "Tags"
12163
13379
  ]),
12164
- silentDrop: new Map([
13380
+ silentDrop: /* @__PURE__ */ new Map([
12165
13381
  ["DesiredShardLevelMetrics", "not yet implemented by cdkd"],
12166
13382
  ["MaxRecordSizeInKiB", "not yet implemented by cdkd"],
12167
13383
  ["WarmThroughputMiBps", "not yet implemented by cdkd"]
12168
13384
  ])
12169
13385
  }],
12170
13386
  ["AWS::Kinesis::StreamConsumer", {
12171
- handled: new Set([
13387
+ handled: /* @__PURE__ */ new Set([
12172
13388
  "ConsumerName",
12173
13389
  "StreamARN",
12174
13390
  "Tags"
@@ -12176,7 +13392,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12176
13392
  silentDrop: /* @__PURE__ */ new Map()
12177
13393
  }],
12178
13394
  ["AWS::KinesisFirehose::DeliveryStream", {
12179
- handled: new Set([
13395
+ handled: /* @__PURE__ */ new Set([
12180
13396
  "AmazonOpenSearchServerlessDestinationConfiguration",
12181
13397
  "AmazonopensearchserviceDestinationConfiguration",
12182
13398
  "DeliveryStreamEncryptionConfigurationInput",
@@ -12191,7 +13407,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12191
13407
  "SplunkDestinationConfiguration",
12192
13408
  "Tags"
12193
13409
  ]),
12194
- silentDrop: new Map([
13410
+ silentDrop: /* @__PURE__ */ new Map([
12195
13411
  ["DatabaseSourceConfiguration", "not yet implemented by cdkd"],
12196
13412
  ["DirectPutSourceConfiguration", "not yet implemented by cdkd"],
12197
13413
  ["IcebergDestinationConfiguration", "not yet implemented by cdkd"],
@@ -12200,11 +13416,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12200
13416
  ])
12201
13417
  }],
12202
13418
  ["AWS::KMS::Alias", {
12203
- handled: new Set(["AliasName", "TargetKeyId"]),
13419
+ handled: /* @__PURE__ */ new Set(["AliasName", "TargetKeyId"]),
12204
13420
  silentDrop: /* @__PURE__ */ new Map()
12205
13421
  }],
12206
13422
  ["AWS::KMS::Key", {
12207
- handled: new Set([
13423
+ handled: /* @__PURE__ */ new Set([
12208
13424
  "BypassPolicyLockoutSafetyCheck",
12209
13425
  "Description",
12210
13426
  "Enabled",
@@ -12221,7 +13437,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12221
13437
  silentDrop: /* @__PURE__ */ new Map()
12222
13438
  }],
12223
13439
  ["AWS::Lambda::EventInvokeConfig", {
12224
- handled: new Set([
13440
+ handled: /* @__PURE__ */ new Set([
12225
13441
  "DestinationConfig",
12226
13442
  "FunctionName",
12227
13443
  "MaximumEventAgeInSeconds",
@@ -12231,7 +13447,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12231
13447
  silentDrop: /* @__PURE__ */ new Map()
12232
13448
  }],
12233
13449
  ["AWS::Lambda::EventSourceMapping", {
12234
- handled: new Set([
13450
+ handled: /* @__PURE__ */ new Set([
12235
13451
  "AmazonManagedKafkaEventSourceConfig",
12236
13452
  "BatchSize",
12237
13453
  "BisectBatchOnFunctionError",
@@ -12264,7 +13480,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12264
13480
  silentDrop: /* @__PURE__ */ new Map()
12265
13481
  }],
12266
13482
  ["AWS::Lambda::Function", {
12267
- handled: new Set([
13483
+ handled: /* @__PURE__ */ new Set([
12268
13484
  "Architectures",
12269
13485
  "Code",
12270
13486
  "DeadLetterConfig",
@@ -12290,7 +13506,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12290
13506
  "TracingConfig",
12291
13507
  "VpcConfig"
12292
13508
  ]),
12293
- silentDrop: new Map([
13509
+ silentDrop: /* @__PURE__ */ new Map([
12294
13510
  ["CapacityProviderConfig", "not yet implemented by cdkd"],
12295
13511
  ["CodeSigningConfigArn", "not yet implemented by cdkd"],
12296
13512
  ["DurableConfig", "not yet implemented by cdkd"],
@@ -12301,7 +13517,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12301
13517
  ])
12302
13518
  }],
12303
13519
  ["AWS::Lambda::LayerVersion", {
12304
- handled: new Set([
13520
+ handled: /* @__PURE__ */ new Set([
12305
13521
  "CompatibleArchitectures",
12306
13522
  "CompatibleRuntimes",
12307
13523
  "Content",
@@ -12312,7 +13528,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12312
13528
  silentDrop: /* @__PURE__ */ new Map()
12313
13529
  }],
12314
13530
  ["AWS::Lambda::Permission", {
12315
- handled: new Set([
13531
+ handled: /* @__PURE__ */ new Set([
12316
13532
  "Action",
12317
13533
  "EventSourceToken",
12318
13534
  "FunctionName",
@@ -12326,7 +13542,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12326
13542
  silentDrop: /* @__PURE__ */ new Map()
12327
13543
  }],
12328
13544
  ["AWS::Lambda::Url", {
12329
- handled: new Set([
13545
+ handled: /* @__PURE__ */ new Set([
12330
13546
  "AuthType",
12331
13547
  "Cors",
12332
13548
  "InvokeMode",
@@ -12336,7 +13552,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12336
13552
  silentDrop: /* @__PURE__ */ new Map()
12337
13553
  }],
12338
13554
  ["AWS::Logs::LogGroup", {
12339
- handled: new Set([
13555
+ handled: /* @__PURE__ */ new Set([
12340
13556
  "BearerTokenAuthenticationEnabled",
12341
13557
  "DataProtectionPolicy",
12342
13558
  "DeletionProtectionEnabled",
@@ -12351,7 +13567,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12351
13567
  silentDrop: /* @__PURE__ */ new Map()
12352
13568
  }],
12353
13569
  ["AWS::Neptune::DBCluster", {
12354
- handled: new Set([
13570
+ handled: /* @__PURE__ */ new Set([
12355
13571
  "BackupRetentionPeriod",
12356
13572
  "DBClusterIdentifier",
12357
13573
  "DBClusterParameterGroupName",
@@ -12368,7 +13584,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12368
13584
  "Tags",
12369
13585
  "VpcSecurityGroupIds"
12370
13586
  ]),
12371
- silentDrop: new Map([
13587
+ silentDrop: /* @__PURE__ */ new Map([
12372
13588
  ["AssociatedRoles", "not yet implemented by cdkd"],
12373
13589
  ["AvailabilityZones", "not yet implemented by cdkd"],
12374
13590
  ["CopyTagsToSnapshot", "not yet implemented by cdkd"],
@@ -12383,7 +13599,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12383
13599
  ])
12384
13600
  }],
12385
13601
  ["AWS::Neptune::DBInstance", {
12386
- handled: new Set([
13602
+ handled: /* @__PURE__ */ new Set([
12387
13603
  "AutoMinorVersionUpgrade",
12388
13604
  "AvailabilityZone",
12389
13605
  "DBClusterIdentifier",
@@ -12395,14 +13611,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12395
13611
  "PreferredMaintenanceWindow",
12396
13612
  "Tags"
12397
13613
  ]),
12398
- silentDrop: new Map([
13614
+ silentDrop: /* @__PURE__ */ new Map([
12399
13615
  ["AllowMajorVersionUpgrade", "not yet implemented by cdkd"],
12400
13616
  ["DBSnapshotIdentifier", "not yet implemented by cdkd"],
12401
13617
  ["PubliclyAccessible", "not yet implemented by cdkd"]
12402
13618
  ])
12403
13619
  }],
12404
13620
  ["AWS::Neptune::DBSubnetGroup", {
12405
- handled: new Set([
13621
+ handled: /* @__PURE__ */ new Set([
12406
13622
  "DBSubnetGroupDescription",
12407
13623
  "DBSubnetGroupName",
12408
13624
  "SubnetIds",
@@ -12411,7 +13627,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12411
13627
  silentDrop: /* @__PURE__ */ new Map()
12412
13628
  }],
12413
13629
  ["AWS::RDS::DBCluster", {
12414
- handled: new Set([
13630
+ handled: /* @__PURE__ */ new Set([
12415
13631
  "BackupRetentionPeriod",
12416
13632
  "DatabaseName",
12417
13633
  "DBClusterIdentifier",
@@ -12434,7 +13650,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12434
13650
  "Tags",
12435
13651
  "VpcSecurityGroupIds"
12436
13652
  ]),
12437
- silentDrop: new Map([
13653
+ silentDrop: /* @__PURE__ */ new Map([
12438
13654
  ["AllocatedStorage", "not yet implemented by cdkd"],
12439
13655
  ["AssociatedRoles", "not yet implemented by cdkd"],
12440
13656
  ["AutoMinorVersionUpgrade", "not yet implemented by cdkd"],
@@ -12478,7 +13694,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12478
13694
  ])
12479
13695
  }],
12480
13696
  ["AWS::RDS::DBInstance", {
12481
- handled: new Set([
13697
+ handled: /* @__PURE__ */ new Set([
12482
13698
  "AllocatedStorage",
12483
13699
  "DBClusterIdentifier",
12484
13700
  "DBInstanceClass",
@@ -12501,7 +13717,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12501
13717
  "Tags",
12502
13718
  "VPCSecurityGroups"
12503
13719
  ]),
12504
- silentDrop: new Map([
13720
+ silentDrop: /* @__PURE__ */ new Map([
12505
13721
  ["AdditionalStorageVolumes", "not yet implemented by cdkd"],
12506
13722
  ["AllowMajorVersionUpgrade", "not yet implemented by cdkd"],
12507
13723
  ["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 +13783,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12567
13783
  ])
12568
13784
  }],
12569
13785
  ["AWS::RDS::DBProxy", {
12570
- handled: new Set([
13786
+ handled: /* @__PURE__ */ new Set([
12571
13787
  "Auth",
12572
13788
  "DBProxyName",
12573
13789
  "DebugLogging",
@@ -12579,14 +13795,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12579
13795
  "VpcSecurityGroupIds",
12580
13796
  "VpcSubnetIds"
12581
13797
  ]),
12582
- silentDrop: new Map([
13798
+ silentDrop: /* @__PURE__ */ new Map([
12583
13799
  ["DefaultAuthScheme", "not yet implemented by cdkd"],
12584
13800
  ["EndpointNetworkType", "not yet implemented by cdkd"],
12585
13801
  ["TargetConnectionNetworkType", "not yet implemented by cdkd"]
12586
13802
  ])
12587
13803
  }],
12588
13804
  ["AWS::RDS::DBProxyEndpoint", {
12589
- handled: new Set([
13805
+ handled: /* @__PURE__ */ new Set([
12590
13806
  "DBProxyEndpointName",
12591
13807
  "DBProxyName",
12592
13808
  "Tags",
@@ -12594,10 +13810,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12594
13810
  "VpcSecurityGroupIds",
12595
13811
  "VpcSubnetIds"
12596
13812
  ]),
12597
- silentDrop: new Map([["EndpointNetworkType", "not yet implemented by cdkd"]])
13813
+ silentDrop: /* @__PURE__ */ new Map([["EndpointNetworkType", "not yet implemented by cdkd"]])
12598
13814
  }],
12599
13815
  ["AWS::RDS::DBProxyTargetGroup", {
12600
- handled: new Set([
13816
+ handled: /* @__PURE__ */ new Set([
12601
13817
  "ConnectionPoolConfigurationInfo",
12602
13818
  "DBClusterIdentifiers",
12603
13819
  "DBInstanceIdentifiers",
@@ -12607,7 +13823,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12607
13823
  silentDrop: /* @__PURE__ */ new Map()
12608
13824
  }],
12609
13825
  ["AWS::RDS::DBSubnetGroup", {
12610
- handled: new Set([
13826
+ handled: /* @__PURE__ */ new Set([
12611
13827
  "DBSubnetGroupDescription",
12612
13828
  "DBSubnetGroupName",
12613
13829
  "SubnetIds",
@@ -12616,7 +13832,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12616
13832
  silentDrop: /* @__PURE__ */ new Map()
12617
13833
  }],
12618
13834
  ["AWS::Route53::HostedZone", {
12619
- handled: new Set([
13835
+ handled: /* @__PURE__ */ new Set([
12620
13836
  "HostedZoneConfig",
12621
13837
  "HostedZoneFeatures",
12622
13838
  "HostedZoneTags",
@@ -12627,7 +13843,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12627
13843
  silentDrop: /* @__PURE__ */ new Map()
12628
13844
  }],
12629
13845
  ["AWS::Route53::RecordSet", {
12630
- handled: new Set([
13846
+ handled: /* @__PURE__ */ new Set([
12631
13847
  "AliasTarget",
12632
13848
  "CidrRoutingConfig",
12633
13849
  "Comment",
@@ -12649,7 +13865,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12649
13865
  silentDrop: /* @__PURE__ */ new Map()
12650
13866
  }],
12651
13867
  ["AWS::S3::Bucket", {
12652
- handled: new Set([
13868
+ handled: /* @__PURE__ */ new Set([
12653
13869
  "AccelerateConfiguration",
12654
13870
  "AnalyticsConfigurations",
12655
13871
  "BucketEncryption",
@@ -12670,7 +13886,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12670
13886
  "VersioningConfiguration",
12671
13887
  "WebsiteConfiguration"
12672
13888
  ]),
12673
- silentDrop: new Map([
13889
+ silentDrop: /* @__PURE__ */ new Map([
12674
13890
  ["AbacStatus", "not yet implemented by cdkd"],
12675
13891
  ["AccessControl", "Legacy canned ACL; AWS disables ACLs by default since 2023-04 — use BucketOwnershipControls + BucketPolicy / PublicAccessBlockConfiguration instead"],
12676
13892
  ["BucketNamePrefix", "not yet implemented by cdkd"],
@@ -12680,16 +13896,16 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12680
13896
  ])
12681
13897
  }],
12682
13898
  ["AWS::S3::BucketPolicy", {
12683
- handled: new Set(["Bucket", "PolicyDocument"]),
13899
+ handled: /* @__PURE__ */ new Set(["Bucket", "PolicyDocument"]),
12684
13900
  silentDrop: /* @__PURE__ */ new Map()
12685
13901
  }],
12686
13902
  ["AWS::S3Express::DirectoryBucket", {
12687
- handled: new Set([
13903
+ handled: /* @__PURE__ */ new Set([
12688
13904
  "BucketName",
12689
13905
  "DataRedundancy",
12690
13906
  "LocationName"
12691
13907
  ]),
12692
- silentDrop: new Map([
13908
+ silentDrop: /* @__PURE__ */ new Map([
12693
13909
  ["BucketEncryption", "not yet implemented by cdkd"],
12694
13910
  ["InventoryConfigurations", "not yet implemented by cdkd"],
12695
13911
  ["LifecycleConfiguration", "not yet implemented by cdkd"],
@@ -12698,11 +13914,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12698
13914
  ])
12699
13915
  }],
12700
13916
  ["AWS::S3Tables::Namespace", {
12701
- handled: new Set(["Namespace", "TableBucketARN"]),
13917
+ handled: /* @__PURE__ */ new Set(["Namespace", "TableBucketARN"]),
12702
13918
  silentDrop: /* @__PURE__ */ new Map()
12703
13919
  }],
12704
13920
  ["AWS::S3Tables::Table", {
12705
- handled: new Set([
13921
+ handled: /* @__PURE__ */ new Set([
12706
13922
  "Format",
12707
13923
  "Name",
12708
13924
  "Namespace",
@@ -12711,7 +13927,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12711
13927
  "TableName",
12712
13928
  "Tags"
12713
13929
  ]),
12714
- silentDrop: new Map([
13930
+ silentDrop: /* @__PURE__ */ new Map([
12715
13931
  ["Compaction", "not yet implemented by cdkd"],
12716
13932
  ["IcebergMetadata", "not yet implemented by cdkd"],
12717
13933
  ["SnapshotManagement", "not yet implemented by cdkd"],
@@ -12720,8 +13936,8 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12720
13936
  ])
12721
13937
  }],
12722
13938
  ["AWS::S3Tables::TableBucket", {
12723
- handled: new Set(["TableBucketName", "Tags"]),
12724
- silentDrop: new Map([
13939
+ handled: /* @__PURE__ */ new Set(["TableBucketName", "Tags"]),
13940
+ silentDrop: /* @__PURE__ */ new Map([
12725
13941
  ["EncryptionConfiguration", "not yet implemented by cdkd"],
12726
13942
  ["MetricsConfiguration", "not yet implemented by cdkd"],
12727
13943
  ["ReplicationConfiguration", "not yet implemented by cdkd"],
@@ -12730,7 +13946,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12730
13946
  ])
12731
13947
  }],
12732
13948
  ["AWS::S3Vectors::VectorBucket", {
12733
- handled: new Set([
13949
+ handled: /* @__PURE__ */ new Set([
12734
13950
  "EncryptionConfiguration",
12735
13951
  "Tags",
12736
13952
  "VectorBucketName"
@@ -12738,7 +13954,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12738
13954
  silentDrop: /* @__PURE__ */ new Map()
12739
13955
  }],
12740
13956
  ["AWS::Scheduler::Schedule", {
12741
- handled: new Set([
13957
+ handled: /* @__PURE__ */ new Set([
12742
13958
  "Description",
12743
13959
  "EndDate",
12744
13960
  "FlexibleTimeWindow",
@@ -12754,7 +13970,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12754
13970
  silentDrop: /* @__PURE__ */ new Map()
12755
13971
  }],
12756
13972
  ["AWS::SecretsManager::Secret", {
12757
- handled: new Set([
13973
+ handled: /* @__PURE__ */ new Set([
12758
13974
  "Description",
12759
13975
  "GenerateSecretString",
12760
13976
  "KmsKeyId",
@@ -12767,7 +13983,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12767
13983
  silentDrop: /* @__PURE__ */ new Map()
12768
13984
  }],
12769
13985
  ["AWS::ServiceDiscovery::HttpNamespace", {
12770
- handled: new Set([
13986
+ handled: /* @__PURE__ */ new Set([
12771
13987
  "Description",
12772
13988
  "Name",
12773
13989
  "Tags"
@@ -12775,7 +13991,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12775
13991
  silentDrop: /* @__PURE__ */ new Map()
12776
13992
  }],
12777
13993
  ["AWS::ServiceDiscovery::PrivateDnsNamespace", {
12778
- handled: new Set([
13994
+ handled: /* @__PURE__ */ new Set([
12779
13995
  "Description",
12780
13996
  "Name",
12781
13997
  "Properties",
@@ -12785,7 +14001,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12785
14001
  silentDrop: /* @__PURE__ */ new Map()
12786
14002
  }],
12787
14003
  ["AWS::ServiceDiscovery::PublicDnsNamespace", {
12788
- handled: new Set([
14004
+ handled: /* @__PURE__ */ new Set([
12789
14005
  "Description",
12790
14006
  "Name",
12791
14007
  "Properties",
@@ -12794,7 +14010,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12794
14010
  silentDrop: /* @__PURE__ */ new Map()
12795
14011
  }],
12796
14012
  ["AWS::ServiceDiscovery::Service", {
12797
- handled: new Set([
14013
+ handled: /* @__PURE__ */ new Set([
12798
14014
  "Description",
12799
14015
  "DnsConfig",
12800
14016
  "HealthCheckConfig",
@@ -12808,7 +14024,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12808
14024
  silentDrop: /* @__PURE__ */ new Map()
12809
14025
  }],
12810
14026
  ["AWS::SNS::Subscription", {
12811
- handled: new Set([
14027
+ handled: /* @__PURE__ */ new Set([
12812
14028
  "DeliveryPolicy",
12813
14029
  "Endpoint",
12814
14030
  "FilterPolicy",
@@ -12820,10 +14036,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12820
14036
  "SubscriptionRoleArn",
12821
14037
  "TopicArn"
12822
14038
  ]),
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"]])
14039
+ 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
14040
  }],
12825
14041
  ["AWS::SNS::Topic", {
12826
- handled: new Set([
14042
+ handled: /* @__PURE__ */ new Set([
12827
14043
  "ArchivePolicy",
12828
14044
  "ContentBasedDeduplication",
12829
14045
  "DataProtectionPolicy",
@@ -12841,11 +14057,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12841
14057
  silentDrop: /* @__PURE__ */ new Map()
12842
14058
  }],
12843
14059
  ["AWS::SNS::TopicPolicy", {
12844
- handled: new Set(["PolicyDocument", "Topics"]),
14060
+ handled: /* @__PURE__ */ new Set(["PolicyDocument", "Topics"]),
12845
14061
  silentDrop: /* @__PURE__ */ new Map()
12846
14062
  }],
12847
14063
  ["AWS::SQS::Queue", {
12848
- handled: new Set([
14064
+ handled: /* @__PURE__ */ new Set([
12849
14065
  "ContentBasedDeduplication",
12850
14066
  "DeduplicationScope",
12851
14067
  "DelaySeconds",
@@ -12866,11 +14082,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12866
14082
  silentDrop: /* @__PURE__ */ new Map()
12867
14083
  }],
12868
14084
  ["AWS::SQS::QueuePolicy", {
12869
- handled: new Set(["PolicyDocument", "Queues"]),
14085
+ handled: /* @__PURE__ */ new Set(["PolicyDocument", "Queues"]),
12870
14086
  silentDrop: /* @__PURE__ */ new Map()
12871
14087
  }],
12872
14088
  ["AWS::SSM::Parameter", {
12873
- handled: new Set([
14089
+ handled: /* @__PURE__ */ new Set([
12874
14090
  "AllowedPattern",
12875
14091
  "DataType",
12876
14092
  "Description",
@@ -12884,7 +14100,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12884
14100
  silentDrop: /* @__PURE__ */ new Map()
12885
14101
  }],
12886
14102
  ["AWS::StepFunctions::StateMachine", {
12887
- handled: new Set([
14103
+ handled: /* @__PURE__ */ new Set([
12888
14104
  "Definition",
12889
14105
  "DefinitionS3Location",
12890
14106
  "DefinitionString",
@@ -12900,7 +14116,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12900
14116
  silentDrop: /* @__PURE__ */ new Map()
12901
14117
  }],
12902
14118
  ["AWS::WAFv2::WebACL", {
12903
- handled: new Set([
14119
+ handled: /* @__PURE__ */ new Set([
12904
14120
  "AssociationConfig",
12905
14121
  "CaptchaConfig",
12906
14122
  "ChallengeConfig",
@@ -12914,7 +14130,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
12914
14130
  "TokenDomains",
12915
14131
  "VisibilityConfig"
12916
14132
  ]),
12917
- silentDrop: new Map([
14133
+ silentDrop: /* @__PURE__ */ new Map([
12918
14134
  ["ApplicationConfig", "not yet implemented by cdkd"],
12919
14135
  ["DataProtectionConfig", "not yet implemented by cdkd"],
12920
14136
  ["OnSourceDDoSProtectionConfig", "not yet implemented by cdkd"]
@@ -13050,7 +14266,7 @@ function findActionableSilentDrops(resourceType, templateProperties, allowedKeys
13050
14266
  * bare schedule name as physicalId, and the state properties carry
13051
14267
  * GroupName, so the SDK provider addresses existing records correctly.
13052
14268
  */
13053
- const STICKY_CC_MIGRATION_EXEMPT = new Set(["AWS::Scheduler::Schedule"]);
14269
+ const STICKY_CC_MIGRATION_EXEMPT = /* @__PURE__ */ new Set(["AWS::Scheduler::Schedule"]);
13054
14270
  var ProviderRegistry = class {
13055
14271
  logger = getLogger().child("ProviderRegistry");
13056
14272
  providers = /* @__PURE__ */ new Map();
@@ -13387,7 +14603,7 @@ function isCustomResource(resourceType) {
13387
14603
  var IAMRoleProvider = class {
13388
14604
  iamClient;
13389
14605
  logger = getLogger().child("IAMRoleProvider");
13390
- handledProperties = new Map([["AWS::IAM::Role", new Set([
14606
+ handledProperties = /* @__PURE__ */ new Map([["AWS::IAM::Role", /* @__PURE__ */ new Set([
13391
14607
  "RoleName",
13392
14608
  "AssumeRolePolicyDocument",
13393
14609
  "Description",
@@ -14084,7 +15300,7 @@ function formatResourceLine(op, logicalId, resourceType, verbOverride) {
14084
15300
  * Both conditional checks live in {@link isStatefulRecreateTarget};
14085
15301
  * the bare {@link STATEFUL_TYPES} set is the type-only first-cut.
14086
15302
  */
14087
- const STATEFUL_TYPES = new Set([
15303
+ const STATEFUL_TYPES = /* @__PURE__ */ new Set([
14088
15304
  "AWS::RDS::DBInstance",
14089
15305
  "AWS::RDS::DBCluster",
14090
15306
  "AWS::DocDB::DBInstance",
@@ -14120,7 +15336,7 @@ const STATEFUL_TYPES = new Set([
14120
15336
  * loss (bypassable with `--force-stateful-recreation`); this set is
14121
15337
  * an out-of-scope refusal (no bypass).
14122
15338
  */
14123
- const MULTI_REGION_RECREATE_BLOCKED_TYPES = new Set(["AWS::DynamoDB::GlobalTable"]);
15339
+ const MULTI_REGION_RECREATE_BLOCKED_TYPES = /* @__PURE__ */ new Set(["AWS::DynamoDB::GlobalTable"]);
14124
15340
  /**
14125
15341
  * Cheap, synchronous read of the resource's recorded properties only.
14126
15342
  * For `AWS::S3::Bucket` this returns `null` — the live `ListObjectsV2`
@@ -14416,7 +15632,7 @@ function extractReferencedAlarmNames(alarmRule) {
14416
15632
  */
14417
15633
  function computeImplicitDeleteEdges(resources) {
14418
15634
  const edges = [];
14419
- const alarmTypes = new Set(["AWS::CloudWatch::Alarm", "AWS::CloudWatch::CompositeAlarm"]);
15635
+ const alarmTypes = /* @__PURE__ */ new Set(["AWS::CloudWatch::Alarm", "AWS::CloudWatch::CompositeAlarm"]);
14420
15636
  const nameToLogicalId = /* @__PURE__ */ new Map();
14421
15637
  for (const [logicalId, resource] of Object.entries(resources)) {
14422
15638
  if (!alarmTypes.has(resource.resourceType)) continue;
@@ -14479,6 +15695,7 @@ const RETRYABLE_ERROR_MESSAGE_PATTERNS = [
14479
15695
  "Policy contains a statement with one or more invalid principals",
14480
15696
  "Invalid IAM Instance Profile",
14481
15697
  "Invalid InstanceProfile",
15698
+ "Failed to authorize instance profile",
14482
15699
  "Could not deliver test message",
14483
15700
  "wait 60 seconds",
14484
15701
  "concurrent update operation",
@@ -14489,7 +15706,7 @@ const RETRYABLE_ERROR_MESSAGE_PATTERNS = [
14489
15706
  * HTTP status codes that always indicate a transient failure worth retrying.
14490
15707
  * 429 = Too Many Requests (throttle), 503 = Service Unavailable.
14491
15708
  */
14492
- const RETRYABLE_HTTP_STATUS_CODES = new Set([429, 503]);
15709
+ const RETRYABLE_HTTP_STATUS_CODES = /* @__PURE__ */ new Set([429, 503]);
14493
15710
  /**
14494
15711
  * AWS SDK v3 canonical throttling error names. Mirrors
14495
15712
  * `@aws-sdk/service-error-classification`'s `THROTTLING_ERROR_CODES` — any
@@ -14499,7 +15716,7 @@ const RETRYABLE_HTTP_STATUS_CODES = new Set([429, 503]);
14499
15716
  * (not 429) with the throttling signal carried only in the error code / name
14500
15717
  * (e.g. SSM `ThrottlingException` for the `Rate exceeded` message).
14501
15718
  */
14502
- const THROTTLING_ERROR_NAMES = new Set([
15719
+ const THROTTLING_ERROR_NAMES = /* @__PURE__ */ new Set([
14503
15720
  "BandwidthLimitExceeded",
14504
15721
  "EC2ThrottledException",
14505
15722
  "LimitExceededException",
@@ -16176,5 +17393,5 @@ var DeployEngine = class {
16176
17393
  };
16177
17394
 
16178
17395
  //#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
17396
+ 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 };
17397
+ //# sourceMappingURL=deploy-engine-D-gBbMiZ.js.map