@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.
- package/dist/{asg-provider-C3dMUcV4.js → asg-provider-D8Ln3-ij.js} +2 -2
- package/dist/{asg-provider-C3dMUcV4.js.map → asg-provider-D8Ln3-ij.js.map} +1 -1
- package/dist/cli.js +19 -17
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-C1wXn1V7.js → deploy-engine-B-0iA5XV.js} +194 -19
- package/dist/deploy-engine-B-0iA5XV.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-C1wXn1V7.js.map +0 -1
|
@@ -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.
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
243
|
-
*
|
|
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
|
|
569
|
-
*
|
|
570
|
-
*
|
|
571
|
-
*
|
|
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")
|
|
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-
|
|
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.
|
|
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-
|
|
23536
|
+
//# sourceMappingURL=deploy-engine-B-0iA5XV.js.map
|