@go-to-k/cdkd 0.283.16 → 0.283.18

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.
@@ -236,11 +236,29 @@ function markNonRetryable(error) {
236
236
  * intended case and stays terminal. UPWARD is the inverse: wrapping a marked
237
237
  * refusal as the `cause` of a genuinely RETRYABLE outer error
238
238
  * (`new Error(msg, { cause: markedRefusal })`) makes the outer error terminal
239
- * too, because this walk finds the marker on the cause. Unconstructible today
240
- * (`ProvisioningError` is built with no `cause` at the one marking site), and
241
- * the failure is fail-fast rather than silent, but a future wrapper that
242
- * carries a marked cause into a transient error would stop retrying something
243
- * that should retry. Strip or re-raise the cause there rather than nesting it.
239
+ * too, because this walk finds the marker on the cause. That shape IS
240
+ * constructed today, on purpose: `deploy-engine.ts`'s `--strict-getatt`
241
+ * output re-wrap threads `{ cause: error }` precisely so a marked resolver
242
+ * refusal survives the wrap (issue #1874) — the wrapper inlines the refusal's
243
+ * text, including template-controlled identifiers, so without the cause the
244
+ * marker is dropped and the classifier can read the copied text as transient.
245
+ * The hazard is therefore not "can this be built" but "is the OUTER error
246
+ * genuinely retryable": wrapping a marked refusal as the cause of a
247
+ * transient error would stop retrying something that should retry. Thread the
248
+ * cause when the wrapper is as terminal as its cause (the case above); strip
249
+ * or re-raise it when the wrapper is retryable in its own right. That applies
250
+ * to every `markNonRetryable` call site — `grep -rn 'markNonRetryable(' src/`
251
+ * is the authority, deliberately in place of a list here.
252
+ *
253
+ * **Do not restate the sites as a count or an enumeration.** Both have already
254
+ * gone stale in this one comment: it first said "six", which was the count of
255
+ * `IntrinsicResolutionRefusalError` THROW sites transplanted from the other
256
+ * file, and the per-file list that replaced it was stale within a day, when a
257
+ * parallel lane added two sites in `nested-stack-provider.ts`. Marking is a
258
+ * per-site judgement any lane can make, so any tally written here is a
259
+ * snapshot of one moment that then reads as complete — which is the defect
260
+ * {@link file://../utils/error-handler.ts}'s own enumeration warning
261
+ * describes. What is stable, and all a reader needs, is the RULE above.
244
262
  */
245
263
  function isMarkedNonRetryable(error) {
246
264
  let current = error;
@@ -565,16 +583,45 @@ function formatDuration(ms) {
565
583
  * resolution, which speculatively tries `Ref` and then `Fn::GetAtt` and keeps
566
584
  * the raw `${...}` placeholder when neither resolves. That warn-and-keep is the
567
585
  * long-standing, deliberate behavior for a genuinely unknown variable — but a
568
- * bare `catch` around it also swallowed every REFUSAL the resolver raises on
569
- * purpose (`guardedPhysicalIdFallback`'s ARN / URL shape hard-fail, the
570
- * `--strict-getatt` rejection, `rejectPlaceholderArnAttribute`), so a template
571
- * that hard-fails when the reference sits in a resource property silently
572
- * degraded to shipping a literal `${Resource.Attribute}` to AWS when the
573
- * IDENTICAL reference was written inside an `Fn::Sub`.
586
+ * bare `catch` around it also swallowed every REFUSAL raised on that PATH, so a
587
+ * template that hard-fails when the reference sits in a resource property
588
+ * silently degraded to shipping a literal `${Resource.Attribute}` to AWS when
589
+ * the IDENTICAL reference was written inside an `Fn::Sub`.
574
590
  *
575
591
  * Throwing this class rather than a bare `Error` is what lets that catch
576
592
  * re-raise a refusal (carrying its own message and remedy) while leaving the
577
593
  * not-found path on warn-and-keep. Nothing else branches on it.
594
+ *
595
+ * **Throw sites split into two groups, and the enumeration is worth keeping
596
+ * accurate** — an out-of-date one reads as "these are all of them", which is
597
+ * how the #1730 site below went unlisted for three releases. All live in
598
+ * `src/deployment/intrinsic-function-resolver.ts`:
599
+ *
600
+ * 1. Reachable from `Fn::Sub`'s `${LogicalId.Attribute}` form, i.e. the ones
601
+ * the laundering fix above is actually about: `guardedPhysicalIdFallback`'s
602
+ * ARN / URL shape hard-fail (the #1103 class), the `--strict-getatt`
603
+ * rejection, `rejectPlaceholderArnAttribute` (#1729), and the
604
+ * fabricated-account guard (#1730), which refuses to build a value from the
605
+ * placeholder account id when STS did not answer.
606
+ * 2. NOT reachable from it, and thrown as this class only so that "deliberate
607
+ * refusal" is a property of the THROW rather than of the one catch that
608
+ * inspects it: `resolveSplit`'s two refusals of a non-string value (#1874).
609
+ * `Fn::Sub` cannot syntactically contain an `Fn::Split`, so those change no
610
+ * behavior by being this class.
611
+ *
612
+ * The class is deliberately NOT `markNonRetryable` at construction, unlike
613
+ * {@link ResourceUpdateNotSupportedError}: EXACTLY ONE of its throw sites is
614
+ * genuinely time-dependent — the fabricated-account guard, where
615
+ * `getAccountInfo` caches a fabricated answer for only 10s precisely so a
616
+ * later attempt can heal — so a constructor-level marker would wrongly make
617
+ * that one terminal. Every OTHER site marks at its own `throw`: all five
618
+ * decide from inputs a retry cannot change (a persisted state record, an
619
+ * attribute-name suffix, a CLI flag, an already-resolved value's type), and
620
+ * all five interpolate template-controlled text into their message, which the
621
+ * SUBSTRING-matching retry classifiers can read as transient (issue #1838 —
622
+ * a logical id like `MyDependencyViolationHandler` is enough). So the split is
623
+ * "which SITE can heal", not "which class"; do not read the unmarked class as
624
+ * a statement that these refusals are retryable.
578
625
  */
579
626
  var IntrinsicResolutionRefusalError = class IntrinsicResolutionRefusalError extends CdkdError {
580
627
  constructor(message, cause) {
@@ -11931,7 +11978,7 @@ var IntrinsicFunctionResolver = class {
11931
11978
  rejectPlaceholderArnAttribute(resource, attributeName, value, logicalId) {
11932
11979
  if (!REF_RETURNS_ARN_FROM_STATE.get(resource.resourceType)?.includes(attributeName)) return;
11933
11980
  if (typeof value !== "string" || !isPlaceholderArn(value)) return;
11934
- throw new IntrinsicResolutionRefusalError(`Cannot resolve Fn::GetAtt [${logicalId}, ${attributeName}] for ${resource.resourceType}: the recorded value "${value}" is a placeholder written by a cdkd version older than issue #1681 — its region and account fields are literal wildcards, so it is not a usable ARN. Deploy the stack again so the resource's next update heals the record (cdkd now records the real ARN), or re-import the resource.`);
11981
+ throw markNonRetryable(new IntrinsicResolutionRefusalError(`Cannot resolve Fn::GetAtt [${logicalId}, ${attributeName}] for ${resource.resourceType}: the recorded value "${value}" is a placeholder written by a cdkd version older than issue #1681 — its region and account fields are literal wildcards, so it is not a usable ARN. Deploy the stack again so the resource's next update heals the record (cdkd now records the real ARN), or re-import the resource.`));
11935
11982
  }
11936
11983
  /**
11937
11984
  * Construct resource attribute value based on resource type, refusing to
@@ -12306,8 +12353,8 @@ var IntrinsicFunctionResolver = class {
12306
12353
  guardedPhysicalIdFallback(logicalId, attributeName, resourceType, physicalId) {
12307
12354
  const expectsArnShape = attributeName.endsWith("Arn") && !physicalId.startsWith("arn:");
12308
12355
  const expectsUrlShape = attributeName.endsWith("Url") && !/^https?:\/\//.test(physicalId);
12309
- if (expectsArnShape || expectsUrlShape) throw new IntrinsicResolutionRefusalError(`Cannot resolve Fn::GetAtt [${logicalId}, ${attributeName}] for ${resourceType}: attributes are not enriched for this resource type, and the physical ID fallback "${physicalId}" is not ${expectsArnShape ? "an ARN (arn:...)" : "a URL (http(s)://...)"}. CloudFormation would return a different value here, so falling back to the physical ID would silently produce a wrong value (e.g. in stack Outputs). Avoid this Fn::GetAtt, or file an issue at https://github.com/go-to-k/cdkd/issues so cdkd can enrich ${resourceType}.${attributeName}.`);
12310
- if (this.strictGetAtt) throw new IntrinsicResolutionRefusalError(`Cannot resolve Fn::GetAtt [${logicalId}, ${attributeName}] for ${resourceType}: attributes are not enriched for this resource type, and --strict-getatt rejects the physical ID fallback "${physicalId}" (which may not be the value CloudFormation would return). Drop --strict-getatt to fall back with a warning, avoid this Fn::GetAtt, or file an issue at https://github.com/go-to-k/cdkd/issues so cdkd can enrich ${resourceType}.${attributeName}.`);
12356
+ if (expectsArnShape || expectsUrlShape) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Cannot resolve Fn::GetAtt [${logicalId}, ${attributeName}] for ${resourceType}: attributes are not enriched for this resource type, and the physical ID fallback "${physicalId}" is not ${expectsArnShape ? "an ARN (arn:...)" : "a URL (http(s)://...)"}. CloudFormation would return a different value here, so falling back to the physical ID would silently produce a wrong value (e.g. in stack Outputs). Avoid this Fn::GetAtt, or file an issue at https://github.com/go-to-k/cdkd/issues so cdkd can enrich ${resourceType}.${attributeName}.`));
12357
+ if (this.strictGetAtt) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Cannot resolve Fn::GetAtt [${logicalId}, ${attributeName}] for ${resourceType}: attributes are not enriched for this resource type, and --strict-getatt rejects the physical ID fallback "${physicalId}" (which may not be the value CloudFormation would return). Drop --strict-getatt to fall back with a warning, avoid this Fn::GetAtt, or file an issue at https://github.com/go-to-k/cdkd/issues so cdkd can enrich ${resourceType}.${attributeName}.`));
12311
12358
  this.physicalIdFallbackCount++;
12312
12359
  this.logger.warn(`Unknown attribute ${attributeName} for resource type ${resourceType}, returning physical ID`);
12313
12360
  return physicalId;
@@ -12435,15 +12482,143 @@ var IntrinsicFunctionResolver = class {
12435
12482
  return result;
12436
12483
  }
12437
12484
  /**
12485
+ * Render ONE `Fn::GetAtt` argument for {@link describeSplitValueSource}'s
12486
+ * label. A string is emitted verbatim; anything else is named by its
12487
+ * intrinsic key (`<Fn::Sub>`) or, failing that, as `<intrinsic>` — never by
12488
+ * default stringification, whose answer for an object is `[object Object]`.
12489
+ */
12490
+ renderGetAttArg(arg) {
12491
+ if (typeof arg === "string") return arg;
12492
+ if (typeof arg === "object" && arg !== null && !Array.isArray(arg)) {
12493
+ const keys = Object.keys(arg);
12494
+ const key = keys.length === 1 ? keys[0] : void 0;
12495
+ if (key !== void 0 && (key === "Ref" || key.startsWith("Fn::"))) return `<${key}>`;
12496
+ }
12497
+ return "<intrinsic>";
12498
+ }
12499
+ /**
12500
+ * Name the UNRESOLVED value argument of an `Fn::Split` for its refusal
12501
+ * message (issue [#1874](https://github.com/go-to-k/cdkd/issues/1874)).
12502
+ *
12503
+ * `ResolverContext` carries no referencing logical id / attribute, and
12504
+ * threading one through this cross-cutting file for a message would be a
12505
+ * plumbing change out of proportion to the win. The value EXPRESSION is
12506
+ * already in hand, though, and for the shapes that actually reach the
12507
+ * refusal it is exactly what the user needs to find the site:
12508
+ *
12509
+ * - a list-valued `Fn::GetAtt` renders as `Fn::GetAtt [Zone, NameServers]`,
12510
+ * naming both the resource and the attribute;
12511
+ * - a `Ref` to a `CommaDelimitedList` / `List<Number>` parameter — the
12512
+ * SECOND genuinely reachable array source, via `coerceParameterValue` —
12513
+ * renders as `Ref MyListParam`, naming the parameter.
12514
+ *
12515
+ * Anything else degrades to its bare intrinsic key, or to `undefined` for a
12516
+ * literal (which the message then simply omits).
12517
+ *
12518
+ * `kind` is not decoration: the caller uses it to pick the remedy, since the
12519
+ * `Fn::GetAtt` remedy (drop the `Fn::Split`, and the #1868 note for the
12520
+ * reader whose `Fn::Split` was that bug's workaround) is irrelevant and
12521
+ * confusing for a parameter reference or a hand-written literal.
12522
+ */
12523
+ describeSplitValueSource(value) {
12524
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
12525
+ const keys = Object.keys(value);
12526
+ if (keys.length !== 1) return void 0;
12527
+ const key = keys[0];
12528
+ const args = value[key];
12529
+ if (key === "Ref") return typeof args === "string" ? {
12530
+ label: `Ref ${args}`,
12531
+ kind: "ref"
12532
+ } : {
12533
+ label: "Ref",
12534
+ kind: "ref"
12535
+ };
12536
+ if (key !== "Fn::GetAtt") return key.startsWith("Fn::") ? {
12537
+ label: key,
12538
+ kind: "other"
12539
+ } : void 0;
12540
+ if (Array.isArray(args)) return {
12541
+ label: `Fn::GetAtt [${args.map((a) => this.renderGetAttArg(a)).join(", ")}]`,
12542
+ kind: "getatt"
12543
+ };
12544
+ if (typeof args === "string") {
12545
+ const dot = args.indexOf(".");
12546
+ return {
12547
+ label: `Fn::GetAtt [${dot === -1 ? args : `${args.slice(0, dot)}, ${args.slice(dot + 1)}`}]`,
12548
+ kind: "getatt"
12549
+ };
12550
+ }
12551
+ return {
12552
+ label: "Fn::GetAtt",
12553
+ kind: "getatt"
12554
+ };
12555
+ }
12556
+ /**
12438
12557
  * Resolve Fn::Split intrinsic function
12439
12558
  *
12440
12559
  * Fn::Split: [delimiter, string]
12441
12560
  * Splits a string into a list of strings using the specified delimiter
12561
+ *
12562
+ * A non-string value is REFUSED, and an ARRAY is refused with its own
12563
+ * message (issue [#1874](https://github.com/go-to-k/cdkd/issues/1874)).
12564
+ * Passing an array through unchanged was considered and rejected: real
12565
+ * CloudFormation rejects `Fn::Split` over a list too, so a template written
12566
+ * that way was never valid CFn. It only ever worked because cdkd resolved
12567
+ * `AWS::Route53::HostedZone.NameServers` to a comma-delimited STRING, which
12568
+ * was the defect PR #1868 fixed — so the post-upgrade failure is a correct
12569
+ * rejection of an invalid template, not a regression. Accepting the array
12570
+ * would let cdkd deploy templates that `cdkd export` /
12571
+ * `cdkd import --migrate-from-cloudformation` then cannot hand back to
12572
+ * CloudFormation, breaking the bidirectional-migration guarantee. What WAS
12573
+ * genuinely wrong is the message: `value must be a string, got object` names
12574
+ * neither the situation nor the remedy.
12575
+ *
12576
+ * Both refusals throw {@link IntrinsicResolutionRefusalError} rather than a
12577
+ * bare `Error`, matching the deliberate refusals already in this file. The
12578
+ * #1740 laundering path this class exists for is NOT reachable from here
12579
+ * today: `Fn::Sub`'s `${LogicalId.Attribute}` form cannot syntactically
12580
+ * contain an `Fn::Split`, and its 2-arg variable-map form resolves each
12581
+ * value through `resolveValue` OUTSIDE any catch, so either class would
12582
+ * propagate identically there. Using the class anyway keeps "deliberate
12583
+ * refusal" a property of the THROW rather than of the one catch that
12584
+ * happens to inspect it. It does NOT make the refusal un-launderable: this
12585
+ * file's own `evaluateConditions` catches everything per condition, warns,
12586
+ * and downgrades that condition to `false`, so an `Fn::Split`-over-a-list
12587
+ * inside a `Conditions` entry IS silently absorbed today — by both classes
12588
+ * alike, so the choice regresses nothing, but the class is not a guarantee
12589
+ * against a class-agnostic catch.
12590
+ *
12591
+ * Both are additionally `markNonRetryable` (issue #1838). The test is "can
12592
+ * this ever succeed on a retry" — an `Fn::Split` over an array never can —
12593
+ * NOT "does today's wording collide with a pattern", which is exactly the
12594
+ * criterion `retryable-errors.ts` documents as insufficient: the classifiers
12595
+ * match by SUBSTRING, and `sourceClause` interpolates template-controlled
12596
+ * text, so a logical id like `MyDependencyViolationHandler` puts
12597
+ * `DependencyViolation` (the table's only whitespace-free entry) into the
12598
+ * message. Reachability is real even though resolution runs outside
12599
+ * `withRetry` on the flat path: `NestedStackProvider.create` runs a child
12600
+ * `DeployEngine.deploy()` and re-throws, and the parent wraps `create()` in
12601
+ * `withRetry` — so inside a nested stack each retry re-runs a full child
12602
+ * deploy plus rollback, up to the ~47s schedule, on a path that cannot
12603
+ * succeed. Marked at the THROW rather than in the constructor because the
12604
+ * class is retryable in general: its fabricated-account arm (see
12605
+ * `constructGuardedAttribute`) IS genuinely time-dependent
12606
+ * (`getAccountInfo` caches a fabricated answer for only 10s precisely so a
12607
+ * later attempt can heal), so a constructor-level marker would wrongly make
12608
+ * that one terminal too.
12442
12609
  */
12443
12610
  async resolveSplit(splitArgs, context) {
12444
12611
  const [delimiter, value] = splitArgs;
12445
12612
  const resolvedValue = await this.resolveValue(value, context);
12446
- if (typeof resolvedValue !== "string") throw new Error(`Fn::Split: value must be a string, got ${typeof resolvedValue}`);
12613
+ if (typeof resolvedValue !== "string") {
12614
+ const source = this.describeSplitValueSource(value);
12615
+ const sourceClause = source ? ` (from ${source.label})` : "";
12616
+ if (Array.isArray(resolvedValue)) {
12617
+ const remedy = source?.kind === "ref" ? `A CommaDelimitedList / List<Number> parameter is already a list.` : source?.kind === "getatt" ? "A list-valued Fn::GetAtt (for example AWS::Route53::HostedZone.NameServers or AWS::EC2::VPC.Ipv6CidrBlocks) already returns a list. If you wrote the Fn::Split as a workaround for cdkd resolving that attribute to a comma-delimited string, that bug is fixed (PR #1868) and the workaround is no longer needed." : "Several intrinsics already return a list — among them a list-valued Fn::GetAtt, a Ref to a CommaDelimitedList / List<Number> parameter, Fn::GetAZs, Fn::Cidr, and Fn::Split itself.";
12618
+ throw markNonRetryable(new IntrinsicResolutionRefusalError(`Fn::Split: the value to split${sourceClause} is ALREADY a list (an array of ${resolvedValue.length} item${resolvedValue.length === 1 ? "" : "s"}), not a string. CloudFormation rejects Fn::Split over a list too, so this template is not valid CloudFormation either. Remove the Fn::Split and use the value directly. ${remedy}`));
12619
+ }
12620
+ throw markNonRetryable(new IntrinsicResolutionRefusalError(`Fn::Split: the value to split${sourceClause} must be a string, got ${resolvedValue === null ? "null" : typeof resolvedValue}. Fn::Split accepts only a string; check the value or the intrinsic that produced it.`));
12621
+ }
12447
12622
  const result = resolvedValue.split(delimiter);
12448
12623
  this.logger.debug(`Resolved Fn::Split: split by "${delimiter}" -> ${JSON.stringify(result)}`);
12449
12624
  return result;
@@ -14037,7 +14212,7 @@ var CloudControlProvider = class {
14037
14212
  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);
14038
14213
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
14039
14214
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
14040
- const { ASGProvider } = await import("./asg-provider-C3dMUcV4.js").then((n) => n.n);
14215
+ const { ASGProvider } = await import("./asg-provider-D8Ln3-ij.js").then((n) => n.n);
14041
14216
  return await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
14042
14217
  }
14043
14218
  const isProtectedEc2Instance = context?.removeProtection === true && resourceType === "AWS::EC2::Instance";
@@ -21141,7 +21316,7 @@ const FLUSH_INTERVAL_MS = 2e3;
21141
21316
  const FLUSH_EVENT_THRESHOLD = 50;
21142
21317
  /** Build-time cdkd version, with a dev fallback for non-built contexts. */
21143
21318
  function getCdkdVersion() {
21144
- return "0.283.16";
21319
+ return "0.283.18";
21145
21320
  }
21146
21321
  /**
21147
21322
  * Generate a time-sortable unique run id, e.g.
@@ -23338,7 +23513,7 @@ var DeployEngine = class {
23338
23513
  if (typeof exportName === "string") outputs[exportName] = value;
23339
23514
  }
23340
23515
  } catch (error) {
23341
- if (this.options.strictGetAtt) throw new Error(`Failed to resolve output ${outputKey}: ${error instanceof Error ? error.message : String(error)} (--strict-getatt promotes output resolution failures to deploy errors; drop the flag to warn and skip the output instead)`);
23516
+ if (this.options.strictGetAtt) throw new Error(`Failed to resolve output ${outputKey}: ${error instanceof Error ? error.message : String(error)} (--strict-getatt promotes output resolution failures to deploy errors; drop the flag to warn and skip the output instead)`, { cause: error });
23342
23517
  this.logger.warn(`Failed to resolve output ${outputKey}: ${String(error)}`);
23343
23518
  outputs[outputKey] = void 0;
23344
23519
  }
@@ -23358,4 +23533,4 @@ var DeployEngine = class {
23358
23533
 
23359
23534
  //#endregion
23360
23535
  export { coerceCfnBoolean as $, resolveStateBucketWithDefault as $t, cyan as A, MissingCdkCliError as An, AssetModeResolver as At, findSilentDropProperties as B, formatError as Bn, getDockerCmd as Bt, makeCanonicalizePropertiesFn as C, ConfigError as Cn, stringifyValue as Ct, renderStatefulReason as D, LocalMigrateError as Dn, loadPublishableAssetManifest as Dt, isStatefulRecreateTargetSync as E, LocalInvokeBuildError as En, createAssetRedirectResolver as Et, IAMRoleProvider as F, ResourceUpdateNotSupportedError as Fn, validateAssetBucketName as Ft, IntrinsicFunctionResolver as G, isRetryableTransientError as Gn, Synthesizer as Gt, slowCcOperationTimeoutMs as H, normalizeAwsError as Hn, runDockerStreaming as Ht, collectInlinePolicyNamesManagedBySiblings as I, StackHasActiveImportsError as In, validateContainerRepoName as It, refStateLookupFromResource as J, __exportAll as Jn, getLegacyStateBucketName as Jt, cfnRefValueFromPhysicalId as K, isThrottlingError as Kn, synthesisStatusMessage as Kt, clearOnUpdateRemoval as L, StackTerminationProtectionError as Ln, buildDenyExternalAccessPolicy as Lt, green as M, PartialFailureError as Mn, ensureAssetStorage as Mt, red as N, ProvisioningError as Nn, getBootstrapMarkerKey as Nt, formatResourceLine as O, LocalStartServiceError as On, rewriteTemplateAssetReferences as Ot, yellow as P, ResourceTimeoutError as Pn, parseBootstrapMarker as Pt, assertRegionMatch as Q, resolveSkipPrefix as Qt, ProviderRegistry as R, StateError as Rn, buildDockerImage as Rt, unsupportedFinalSnapshotError as S, CdkdError as Sn, AssetPublisher as St, MULTI_REGION_RECREATE_BLOCKED_TYPES as T, DeployCancelledError as Tn, buildAssetRedirectMap as Tt, disableInstanceApiTermination as U, withErrorHandling as Un, AssetManifestLoader as Ut, CloudControlProvider as V, isCdkdError as Vn, runDockerForeground as Vt, isTerminationProtectionPropagationError as W, isMarkedNonRetryable as Wn, getDockerImageBySourceHash as Wt, normalizeAwsTagsToCfn as X, resolveAutoAssetStorage as Xt, WAFv2WebACLProvider as Y, resolveApp as Yt, resolveExplicitPhysicalId as Z, resolveCaptureObservedState as Zt, buildFinalSnapshotIdentifier as _, AwsClients as _n, TemplateParser as _t, DeploymentEventsStore as a, CFN_TEMPLATE_URL_LIMIT as an, requireConfigObject as at, isFinalSnapshotError as b, setAwsClients as bn, rebuildClientForBucketRegion as bt, replayFailedOperations as c, uploadCfnTemplate as cn, s3BucketDomainName as ct, deleteSkipReason as d, canonicalizeRegion as dn, s3BucketWebsiteUrl as dt, resolveStateBucketWithDefaultAndSource as en, configBooleanRefusal as et, withResourceDeadline as f, derivePartitionAndUrlSuffix as fn, applyRoleArnIfSet as ft, PRE_DELETE_SNAPSHOT_TYPES as g, resolveBucketRegion as gn, DagBuilder as gt, ATOMIC_FINAL_SNAPSHOT_TYPES as h, clearBucketRegionCache as hn, withRetry as ht, DeploymentEventsReader as i, CFN_TEMPLATE_BODY_LIMIT as in, requireConfigArray as it, gray as j, NestedStackChildDirectDestroyError as jn, BOOTSTRAP_MARKER_PREFIX as jt, bold as k, LockError as kn, escapeRegExp as kt, replayRollback as l, expectedOwnerParam as ln, s3BucketDualStackDomainName as lt, computeImplicitDeleteEdges as m, processStackMessages as mn, describeTypeWithThrottleRetry as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, stateBucketExistenceConfirmed as nn, readConfigString as nt, planFailedOps as o, MIGRATE_TMP_PREFIX as on, requireConfigString as ot, IMPLICIT_DELETE_DEPENDENCIES as p, AssemblyReader as pn, DiffCalculator as pt, getAccountInfo as q, markNonRetryable as qn, getDefaultStateBucketName as qt, DeployEngine as r, warnDeprecatedNoPrefixCliFlag as rn, replayWarn as rt, planRollback as s, findLargeInlineResources as sn, s3BucketArn as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, resolveUseCdkBootstrapAssets as tn, configStringRefusal as tt, UNSPECIFIED_SKIP_REASON as u, PARTITION_TABLE as un, s3BucketRegionalDomainName as ut, ccRoutedFinalSnapshotError as v, getAwsClients as vn, LockManager as vt, extractDeploymentEventError as w, DependencyError as wn, WorkGraph as wt, refusesFinalSnapshot as x, AssetError as xn, shouldRetainResource as xt, createPreDeleteFinalSnapshot as y, resetAwsClients as yn, S3StateBackend as yt, findActionableSilentDrops as z, SynthesisError as zn, formatDockerLoginError as zt };
23361
- //# sourceMappingURL=deploy-engine-C1wXn1V7.js.map
23536
+ //# sourceMappingURL=deploy-engine-B-0iA5XV.js.map