@go-to-k/cdkd 0.284.72 → 0.284.73

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,5 +1,5 @@
1
1
  import { d as generateResourceName, f as generateResourceNameWithFallback, g as withStackName, m as looksLikeCdkdGeneratedName, n as getLogger, o as getLiveRenderer, p as getCurrentStackName, u as applyDefaultNameForFallback } from "./logger-C9-E73FI.js";
2
- import { t as getCdkdVersion } from "./version-DY_eLvXB.js";
2
+ import { t as getCdkdVersion } from "./version-NRgaYAmx.js";
3
3
  import { AsyncLocalStorage } from "node:async_hooks";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
@@ -5873,7 +5873,7 @@ function readBucketRegionHeader(error) {
5873
5873
  * The API answers with an EMPTY constraint for `us-east-1` and the legacy `EU`
5874
5874
  * alias for `eu-west-1`; every other region comes back verbatim.
5875
5875
  */
5876
- function bucketLocationToRegion(constraint) {
5876
+ function bucketLocationToRegion$1(constraint) {
5877
5877
  if (!constraint) return "us-east-1";
5878
5878
  if (constraint === "EU") return "eu-west-1";
5879
5879
  return constraint;
@@ -5938,7 +5938,7 @@ async function assertAssetBucketRegion(s3Client, bucketName, expectedRegion, acc
5938
5938
  const fromHeader = readBucketRegionHeader(cause);
5939
5939
  if (fromHeader) actual = canonicalizeRegion(fromHeader);
5940
5940
  else try {
5941
- actual = canonicalizeRegion(bucketLocationToRegion((await s3Client.send(new GetBucketLocationCommand({
5941
+ actual = canonicalizeRegion(bucketLocationToRegion$1((await s3Client.send(new GetBucketLocationCommand({
5942
5942
  Bucket: bucketName,
5943
5943
  ExpectedBucketOwner: accountId
5944
5944
  }))).LocationConstraint));
@@ -19194,6 +19194,110 @@ function describeJsonKeys(document) {
19194
19194
  const suffix = pattern.lastIndex < document.length && keys.length >= MAX_LOGGED_MODEL_KEYS ? ", ..." : "";
19195
19195
  return `keys: ${keys.join(", ")}${suffix}`;
19196
19196
  }
19197
+ /**
19198
+ * Resource types whose Cloud-Control-routed DELETE gets a pre-flight
19199
+ * IDENTITY confirmation -- proof that the physical id the state record names
19200
+ * denotes a resource in the region this destroy is targeting -- before
19201
+ * `DeleteResource` is issued (issue #2283).
19202
+ *
19203
+ * WHY THIS IS A HOOK HERE AND NOT A ROUTING CHANGE
19204
+ * ------------------------------------------------
19205
+ * The issue offered two shapes and called the routing change "much smaller":
19206
+ * stop letting `AWS::S3::Bucket` reach Cloud Control at all, now that
19207
+ * `S3BucketProvider` carries its own region guard (issues #2227 / #2245).
19208
+ * Reading `provider-registry.ts` settles it the other way, for two reasons:
19209
+ *
19210
+ * 1. There is no per-type "CC auto-route list" to remove the type FROM. The
19211
+ * route at `provider-registry.ts` step 3-5 is the generic issue #614
19212
+ * silent-drop rule: a type WITH an SDK provider goes to Cloud Control
19213
+ * exactly when its template uses a property that provider would silently
19214
+ * DROP. Suppressing it for buckets means `disableCcApiFallback` on
19215
+ * `S3BucketProvider`, which converts those deploys from "provisioned
19216
+ * correctly via CC" into a hard `buildUnroutableSilentDropMessage` throw.
19217
+ * That is a strictly larger behaviour change than this guard, and it
19218
+ * regresses the bug #614 was filed for.
19219
+ *
19220
+ * 2. It would not even close the hazard. Step 2 of `getProviderFor` is the
19221
+ * STICKY rule: a resource whose state says `provisionedBy: 'cc-api'`
19222
+ * routes to this provider BEFORE the SDK provider is ever consulted, and
19223
+ * `disableCcApiFallback` is not read on that path. The poisoned pre-guard
19224
+ * state record the issue is about is precisely a record that already says
19225
+ * `cc-api`, so it would still arrive here. Only adding the type to
19226
+ * `STICKY_CC_MIGRATION_EXEMPT` would divert it -- and that set is reserved
19227
+ * for types whose CC routing is BROKEN, which would then send the
19228
+ * silent-drop property back down the dropping path on the next deploy.
19229
+ *
19230
+ * So the confirmation belongs where the delete is actually issued. The set is
19231
+ * a set rather than an `if` because the hazard is not S3-specific in kind: any
19232
+ * type whose physical id is globally unique but whose RESOURCE is regional can
19233
+ * be named by a state record that denotes something in another region.
19234
+ * `AWS::S3::Bucket` is the only instance recorded so far (issue #2283).
19235
+ */
19236
+ const CC_DELETE_IDENTITY_CHECKED_TYPES = /* @__PURE__ */ new Set(["AWS::S3::Bucket"]);
19237
+ /**
19238
+ * Whether a Cloud-Control-routed DELETE of `resourceType` is preceded by the
19239
+ * pre-flight identity confirmation described on
19240
+ * {@link CC_DELETE_IDENTITY_CHECKED_TYPES}.
19241
+ *
19242
+ * Exported so the routing decision is assertable in BOTH polarities: the
19243
+ * guarded type, and a control type that must keep issuing its `DeleteResource`
19244
+ * with no extra probe and no new IAM dependency.
19245
+ */
19246
+ function requiresCcDeleteIdentityCheck(resourceType) {
19247
+ return CC_DELETE_IDENTITY_CHECKED_TYPES.has(resourceType);
19248
+ }
19249
+ /**
19250
+ * The region a `GetBucketLocation` answer denotes, canonicalized.
19251
+ *
19252
+ * Two legacy wire shapes, both still returned, which is why this is a function
19253
+ * rather than a field read: a bucket in `us-east-1` answers with an EMPTY /
19254
+ * null `LocationConstraint` (absent therefore means `us-east-1`, never
19255
+ * "unknown" -- folding it to unknown would make the commonest region
19256
+ * permanently indeterminate), and `EU` is a legacy alias for `eu-west-1`.
19257
+ *
19258
+ * THREE copies of this fold exist and neither of the other two is reusable
19259
+ * here:
19260
+ *
19261
+ * - `providers/s3-bucket-provider.ts`'s private twin is the SDK route's
19262
+ * guard, reached by a different routing decision, and it additionally
19263
+ * reads `x-amz-bucket-region` off a `CreateBucket` 409 -- a signal that
19264
+ * does not exist on this path, where the probe is a PRE-flight with no
19265
+ * prior error to read. Folding them together would export a create-shaped
19266
+ * API into a delete-only call site.
19267
+ * - `utils/aws-region-resolver.ts:147` holds only the us-east-1 HALF of the
19268
+ * fold, inline (`response.LocationConstraint || 'us-east-1'`, with no `EU`
19269
+ * case at all), and is wrong here twice
19270
+ * over: it is fail-OPEN by contract (it never throws and returns
19271
+ * `fallbackRegion` on a failed probe, which would report this deploy's own
19272
+ * region and let the foreign bucket through), and it passes
19273
+ * `ExpectedBucketOwner`, which is the opposite of what this probe needs --
19274
+ * see {@link CloudControlProvider.confirmDeleteTargetIdentity}. It also
19275
+ * caches, so a second call in one process would skip the probe entirely.
19276
+ *
19277
+ * Each copy is pinned by unit tests on its own side, for exactly the fold it
19278
+ * carries: `s3-bucket-provider-already-owned-region.test.ts:223-224` for the
19279
+ * SDK twin's `''` / `null` spellings, `aws-region-resolver.test.ts:66` / `:74`
19280
+ * for the resolver's us-east-1 half, and this module's own suite for all three
19281
+ * us-east-1 spellings plus both polarities of the `EU` alias.
19282
+ */
19283
+ function bucketLocationToRegion(constraint) {
19284
+ const value = canonicalizeRegion((constraint ?? "").trim());
19285
+ if (value === "") return "us-east-1";
19286
+ if (value === "eu") return "eu-west-1";
19287
+ return value;
19288
+ }
19289
+ /**
19290
+ * Whether an S3 error means the NAMED BUCKET IS ABSENT, as opposed to the
19291
+ * probe being unable to answer.
19292
+ *
19293
+ * The wire CODE alone, never a message match. Collapsing "absent" into "could
19294
+ * not answer" (or the reverse) is the failure mode the issue #2245 review
19295
+ * named: a bare 404 from a proxy, `AWS_ENDPOINT_URL`, or an S3-compatible
19296
+ * gateway must not be read as a positive statement about a bucket's region.
19297
+ */
19298
+ function isNoSuchBucketError(error) {
19299
+ return error?.name === "NoSuchBucket";
19300
+ }
19197
19301
  var CloudControlProvider = class {
19198
19302
  cloudControlClient;
19199
19303
  logger = getLogger().child("CloudControlProvider");
@@ -19352,9 +19456,10 @@ var CloudControlProvider = class {
19352
19456
  async delete(logicalId, physicalId, resourceType, _properties, context) {
19353
19457
  this.logger.debug(`Deleting resource ${logicalId} (${resourceType}), physical ID: ${physicalId}`);
19354
19458
  if (context?.finalSnapshotIdentifier !== void 0) throw new ProvisioningError(`${logicalId} (${resourceType}) requires a final snapshot (DeletionPolicy: Snapshot), but the Cloud Control API delete route has no final-snapshot parameter. Re-run with --skip-final-snapshot after snapshotting manually, or retain the resource.`, resourceType, logicalId, physicalId);
19459
+ await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
19355
19460
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
19356
19461
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
19357
- const { ASGProvider } = await import("./asg-provider-DcAqfBUo.js").then((n) => n.n);
19462
+ const { ASGProvider } = await import("./asg-provider-xXB0aei5.js").then((n) => n.n);
19358
19463
  return await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
19359
19464
  }
19360
19465
  const isProtectedEc2Instance = context?.removeProtection === true && resourceType === "AWS::EC2::Instance";
@@ -19391,6 +19496,104 @@ var CloudControlProvider = class {
19391
19496
  }
19392
19497
  }
19393
19498
  /**
19499
+ * Confirm that the resource `physicalId` names actually lives in the region
19500
+ * this destroy is targeting, for the types in
19501
+ * {@link CC_DELETE_IDENTITY_CHECKED_TYPES}. No-op for every other type.
19502
+ *
19503
+ * WHAT THIS GUARDS THAT `assertRegionMatch` DOES NOT
19504
+ * ---------------------------------------------------
19505
+ * The existing `assertRegionMatch` in the catch block below compares the
19506
+ * CLIENT's region against the state's region, and only on the `NotFound`
19507
+ * branch. Both halves miss this hazard. An `AWS::S3::Bucket` physical id is
19508
+ * a GLOBALLY unique name, so a state record written before the issue #2227 /
19509
+ * #2245 guards existed can name a bucket that is ours but lives elsewhere --
19510
+ * a cdkd-GENERATED bucket name carries no region or account: for a name cdkd
19511
+ * derives itself, `resource-name.ts:240` builds
19512
+ * `` `${currentStackName}-${name}` `` whenever `resource-name.ts:239`'s
19513
+ * `shouldPrefix` holds, so the same stack deployed to two regions produces
19514
+ * the same bucket name by construction. (That guard has a second, unrelated
19515
+ * path -- it also drops the prefix when there is no ambient stack name at
19516
+ * all -- so it is quoted here rather than enumerated.) And a delete of such a bucket is NOT expected to come back
19517
+ * `NotFound`: the mechanism issues #2245 / #2283 record is that S3 follows
19518
+ * the region redirect for a body-bearing operation, so the delete lands on
19519
+ * the live bucket in the other region and this catch block is never entered.
19520
+ * Nothing downstream can undo that, which is why the confirmation is
19521
+ * pre-flight rather than a wider net around the existing handler. The live
19522
+ * arm in `tests/integration/s3-lifecycle` (phase 0c) is what holds that
19523
+ * mechanism to account on THIS route.
19524
+ *
19525
+ * THE PROBE HAS THREE OUTCOMES AND ALL THREE ARE DISTINCT
19526
+ * -------------------------------------------------------
19527
+ * - ANSWERED, region matches -> proceed silently. The hot path costs one
19528
+ * `GetBucketLocation`.
19529
+ * - ANSWERED, region differs -> REFUSE, non-retryable. Both retry loops
19530
+ * that wrap a `delete()` honour the marker and would otherwise re-run the
19531
+ * whole delete for their full budget before surfacing the same
19532
+ * deterministic message, which reads as flaky AWS: the destroy path's own
19533
+ * loop (`destroy-runner.ts:1328`, which runs FOUR attempts -- `attempt`
19534
+ * goes 0..`maxAttempts` and `maxAttempts` is 3 at `:1326` -- with
19535
+ * `isMarkedNonRetryable` gating both of its retryable arms at `:1372`)
19536
+ * and the deploy engine's `withRetry` (`retry.ts:332`) on the
19537
+ * replacement-delete path.
19538
+ * - COULD NOT ANSWER -> proceed, but WARN at default verbosity. Refusing
19539
+ * would strand destroys for least-privilege roles that never granted
19540
+ * `s3:GetBucketLocation`, with no escape hatch. But proceeding SILENTLY
19541
+ * is what the issue #2245 review rejected: a bucket policy denying
19542
+ * `s3:GetBucketLocation` -- settable by anyone holding
19543
+ * `s3:PutBucketPolicy` on the target -- would disable this guard while
19544
+ * the operator's output stayed identical to a normal destroy. Failing
19545
+ * closed on 403 alone is not the answer either, because a missing IAM
19546
+ * grant and a hostile `Deny` are the same wire response.
19547
+ *
19548
+ * A bucket that is ABSENT is a fourth thing and is NOT the warning case: the
19549
+ * name denotes nothing, so there is nothing to delete in the wrong region,
19550
+ * and the `DeleteResource` below reaches its existing `NotFound` /
19551
+ * `assertRegionMatch` handling. Warning there would fire on every ordinary
19552
+ * re-run of an already-completed destroy.
19553
+ *
19554
+ * `GetBucketLocation` and not `HeadBucket`: a cross-region `HeadBucket` 301s
19555
+ * and SDK v3's region-redirect middleware mishandles the empty-body HEAD
19556
+ * response, yielding a synthetic `name: 'Unknown'`. That would land every
19557
+ * foreign-region bucket -- the exact case this exists to catch -- in the
19558
+ * indeterminate arm, which PROCEEDS. `src/utils/aws-region-resolver.ts`
19559
+ * records the same finding, and the SDK-side guard re-learned it the
19560
+ * expensive way.
19561
+ */
19562
+ async confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context) {
19563
+ if (!requiresCcDeleteIdentityCheck(resourceType)) return;
19564
+ const recordedRegion = context?.expectedRegion?.trim();
19565
+ let expectedRegion = recordedRegion === void 0 || recordedRegion === "" ? void 0 : recordedRegion;
19566
+ if (expectedRegion === void 0) try {
19567
+ const clientRegion = (await this.cloudControlClient.config.region())?.trim();
19568
+ expectedRegion = clientRegion === void 0 || clientRegion === "" ? void 0 : clientRegion;
19569
+ } catch (error) {
19570
+ this.logger.debug(`Could not resolve the Cloud Control client region while confirming ${physicalId}: ${error instanceof Error ? error.message : String(error)}`);
19571
+ expectedRegion = void 0;
19572
+ }
19573
+ if (expectedRegion === void 0) {
19574
+ this.logger.warn(`Could not confirm that ${resourceType} ${physicalId} (${logicalId}) is the resource this destroy targets: neither the stack state nor the AWS client reports a region. Proceeding with the delete.`);
19575
+ return;
19576
+ }
19577
+ const wantRegion = canonicalizeRegion(expectedRegion);
19578
+ let actualRegion;
19579
+ try {
19580
+ actualRegion = bucketLocationToRegion((await getAwsClients().s3.send(new GetBucketLocationCommand({ Bucket: physicalId }))).LocationConstraint);
19581
+ } catch (error) {
19582
+ if (isNoSuchBucketError(error)) {
19583
+ this.logger.debug(`Bucket ${physicalId} (${logicalId}) is already absent; leaving the delete to the Cloud Control idempotency path`);
19584
+ return;
19585
+ }
19586
+ const reason = error instanceof Error ? error.message : String(error);
19587
+ this.logger.warn(`Could not confirm which region S3 bucket ${physicalId} (${logicalId}) lives in before deleting it: ${reason}. S3 bucket names are globally unique, so cdkd cannot rule out that this name denotes a bucket in another region. Grant s3:GetBucketLocation on the bucket to enable the check. Proceeding with the delete.`);
19588
+ return;
19589
+ }
19590
+ if (actualRegion === wantRegion) {
19591
+ this.logger.debug(`Confirmed S3 bucket ${physicalId} (${logicalId}) lives in ${wantRegion} before deleting it`);
19592
+ return;
19593
+ }
19594
+ throw markNonRetryable(new ProvisioningError(`Refusing to delete S3 bucket ${physicalId} for ${logicalId} (${resourceType}): the bucket carrying that name lives in ${actualRegion}, while this destroy targets ${wantRegion}. S3 bucket names are globally unique, so a physical id recorded in cdkd state can denote a bucket in a different region. S3 follows the region redirect for a body-bearing operation, so issuing this delete risks destroying the live bucket in ${actualRegion} instead, unrecoverably, rather than reporting the bucket absent. Confirm the physical id recorded in cdkd state (cdkd state show) and correct the record: --region does not change this comparison, which reads the region stored in the state file, so re-running the destroy with a different flag value will not resolve it.`, resourceType, logicalId, physicalId));
19595
+ }
19596
+ /**
19394
19597
  * Set a registry-declared deletion-protection property to its "off" value
19395
19598
  * in-place via a CC UpdateResource patch (issues #1312 / #1314).
19396
19599
  * Best-effort: failures are logged at warn and swallowed — the subsequent
@@ -31141,4 +31344,4 @@ var DeployEngine = class {
31141
31344
 
31142
31345
  //#endregion
31143
31346
  export { maskerOrIdentity as $, findLargeInlineResources as $n, scrubResourceRecord as $t, renderStatefulReason as A, formatDockerLoginError as An, StackHasActiveImportsError as Ar, producerRegionsFromState as At, exportAliasCollisionScrubWarning as B, getLegacyStateBucketName as Bn, isThrottlingError as Br, withRetry as Bt, isFinalSnapshotError as C, parseBootstrapMarker as Cn, LockError as Cr, configStringRefusal as Ct, extractDeploymentEventError as D, buildDenyExternalAccessPolicy as Dn, ProvisioningError as Dr, requireConfigObject as Dt, makeCanonicalizePropertiesFn as E, validateContainerRepoName as En, PartialFailureError as Er, requireConfigArray as Et, green as F, AssetManifestLoader as Fn, isCdkdError as Fr, s3BucketWebsiteUrl as Ft, IAMRoleProvider as G, resolveStateBucketWithDefault as Gn, TEMPLATE_SOURCED_RULES as Gt, secretBearingStateKeyWarning as H, resolveAutoAssetStorage as Hn, __exportAll as Hr, TemplateParser as Ht, red as I, getDockerImageBySourceHash as In, normalizeAwsError as Ir, applyRoleArnIfSet as It, ProviderRegistry as J, stateBucketExistenceConfirmed as Jn, errorCauseChain as Jt, collectInlinePolicyNamesManagedBySiblings as K, resolveStateBucketWithDefaultAndSource as Kn, createSecretMasker as Kt, yellow as L, Synthesizer as Ln, withErrorHandling as Lr, DiffCalculator as Lt, bold as M, partitionSensitiveEnv as Mn, StateError as Mr, s3BucketDomainName as Mt, cyan as N, runDockerForeground as Nn, SynthesisError as Nr, s3BucketDualStackDomainName as Nt, MULTI_REGION_RECREATE_BLOCKED_TYPES as O, buildDockerImage as On, ResourceTimeoutError as Or, requireConfigString as Ot, gray as P, runDockerStreaming as Pn, formatError as Pr, s3BucketRegionalDomainName as Pt, maskDeep as Q, MIGRATE_TMP_PREFIX as Qn, redactSecretsForState as Qt, collectDeclaredOutputNames as R, synthesisStatusMessage as Rn, isMarkedNonRetryable as Rr, INTRINSIC_KEYS as Rt, createPreDeleteFinalSnapshot as S, isCrossRegionRedirect as Sn, LocalStartServiceError as Sr, configBooleanRefusal as St, unsupportedFinalSnapshotError as T, validateAssetBucketName as Tn, NestedStackChildDirectDestroyError as Tr, replayWarn as Tt, stateKeySecretExposure as U, resolveCaptureObservedState as Un, STATE_SOURCED_CROSS_GENERATION_RULES as Ut, isExportAliasCollision as V, resolveApp as Vn, markNonRetryable as Vr, DagBuilder as Vt, getCurrentResourceSecrets as W, resolveSkipPrefix as Wn, STATE_SOURCED_READBACK_RULES as Wt, findSilentDropProperties as X, CFN_TEMPLATE_BODY_LIMIT as Xn, maskSecretsInError as Xt, findActionableSilentDrops as Y, warnDeprecatedNoPrefixCliFlag as Yn, isSingleDynamicReferenceToken as Yt, createMaskedRetryLogger as Z, CFN_TEMPLATE_URL_LIMIT as Zn, maskSecretsInText as Zt, computeImplicitDeleteEdges as _, AssetModeResolver as _n, DependencyError as _r, WAFv2WebACLProvider as _t, DeploymentEventsStore as a, importableOutputKeys as an, AssemblyReader as ar, isInterruptedWaitError as at, buildFinalSnapshotIdentifier as b, ensureAssetStorage as bn, LocalInvokeBuildError as br, assertRegionMatch as bt, replayFailedOperations as c, AssetPublisher as cn, resolveBucketRegion as cr, slowCcOperationTimeoutMs as ct, updatePartialReason as d, buildAssetRedirectMap as dn, resetAwsClients as dr, IntrinsicFunctionResolver as dt, LockManager as en, uploadCfnTemplate as er, CUSTOM_RESOURCE_RESPONSE_PREFIX as et, UNSPECIFIED_SKIP_REASON as f, createAssetRedirectResolver as fn, setAwsClients as fr, carriesDynamicReference as ft, IMPLICIT_DELETE_DEPENDENCIES as g, stripControlChars as gn, CrossAccountSecretRefusalError as gr, refStateLookupFromResource as gt, maskingRetryLogger as h, escapeRegExp$1 as hn, ConfigError as hr, parameterTypeMayLoseSecretIdentity as ht, DeploymentEventsReader as i, exportNamesCarriedFrom as in, derivePartitionAndUrlSuffix as ir, interruptWatchListenerCount as it, formatResourceLine as j, getDockerCmd as jn, StackTerminationProtectionError as jr, s3BucketArn as jt, isStatefulRecreateTargetSync as k, dockerSpawnEnvWithSensitive as kn, ResourceUpdateNotSupportedError as kr, classifyReplaySecretRegion as kt, replayRollback as l, stringifyValue as ln, AwsClients as lr, disableInstanceApiTermination as lt, withResourceDeadline as m, rewriteTemplateAssetReferences as mn, CdkdError as mr, getAccountInfo as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, S3StateBackend as nn, PARTITION_TABLE as nr, beginCommandInterruptScope as nt, planFailedOps as o, importableOutputs as on, processStackMessages as or, startInterruptWatch as ot, deleteSkipReason as p, loadPublishableAssetManifest as pn, AssetError as pr, cfnRefValueFromPhysicalId as pt, clearOnUpdateRemoval as q, resolveUseCdkBootstrapAssets as qn, dynamicReferenceTokens as qt, DeployEngine as r, rebuildClientForBucketRegion as rn, canonicalizeRegion as rr, endCommandInterruptScope as rt, planRollback as s, shouldRetainResource as sn, clearBucketRegionCache as sr, CloudControlProvider as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, displaySafe as tn, expectedOwnerParam as tr, DEFAULT_STATE_PREFIX as tt, updatePartialMessage as u, WorkGraph as un, getAwsClients as ur, isTerminationProtectionPropagationError as ut, ATOMIC_FINAL_SNAPSHOT_TYPES as v, BOOTSTRAP_MARKER_PREFIX as vn, DeployCancelledError as vr, normalizeAwsTagsToCfn as vt, refusesFinalSnapshot as w, readBootstrapMarkerBody as wn, MissingCdkCliError as wr, readConfigString as wt, ccRoutedFinalSnapshotError as x, getBootstrapMarkerKey as xn, LocalMigrateError as xr, coerceCfnBoolean as xt, PRE_DELETE_SNAPSHOT_TYPES as y, assertAssetBucketRegion as yn, DynamicReferenceRegionAmbiguousError as yr, resolveExplicitPhysicalId as yt, collectPublishedOutputNames as z, getDefaultStateBucketName as zn, isRetryableTransientError as zr, describeTypeWithThrottleRetry as zt };
31144
- //# sourceMappingURL=deploy-engine-Bc0FBOuJ.js.map
31347
+ //# sourceMappingURL=deploy-engine-DjcVPGO-.js.map