@go-to-k/cdkd 0.284.80 → 0.284.81
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-lbqsxGkM.js → asg-provider-DW0VKnyp.js} +2 -2
- package/dist/{asg-provider-lbqsxGkM.js.map → asg-provider-DW0VKnyp.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-Dsd8oL2h.js → deploy-engine-DAY3Q6s4.js} +200 -48
- package/dist/deploy-engine-DAY3Q6s4.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{program-CQiB2tE5.js → program-DFsR9GOJ.js} +67 -6
- package/dist/{program-CQiB2tE5.js.map → program-DFsR9GOJ.js.map} +1 -1
- package/dist/{version-CdU_rRxd.js → version-D91AoEe5.js} +2 -2
- package/dist/{version-CdU_rRxd.js.map → version-D91AoEe5.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-Dsd8oL2h.js.map +0 -1
|
@@ -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-
|
|
2
|
+
import { t as getCdkdVersion } from "./version-D91AoEe5.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, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -9646,6 +9646,8 @@ function recordNestedStackParameterExpressions(secrets, resourceType, resolvedPr
|
|
|
9646
9646
|
const sourceLeaf = sourceParameters[name];
|
|
9647
9647
|
if (typeof sourceLeaf === "string" && expression !== sourceLeaf) continue;
|
|
9648
9648
|
if (expression === resolvedValue) continue;
|
|
9649
|
+
const seenResolvingTo = plaintextIndexOf(secrets).get(expression);
|
|
9650
|
+
if (seenResolvingTo !== void 0 && seenResolvingTo !== resolvedValue) continue;
|
|
9649
9651
|
if (table === void 0) {
|
|
9650
9652
|
table = /* @__PURE__ */ new Map();
|
|
9651
9653
|
nestedStackParameterExpressions.set(secrets, table);
|
|
@@ -9705,19 +9707,35 @@ function inheritNestedStackParameterAssociations(childSecrets, parentSecrets) {
|
|
|
9705
9707
|
* `parentSecrets` is the INHERITED bag — the parent's own per-resource map, the
|
|
9706
9708
|
* object this table is keyed by — not the child resource's bag.
|
|
9707
9709
|
*
|
|
9708
|
-
* The same THREE conditions
|
|
9709
|
-
* same
|
|
9710
|
-
*
|
|
9710
|
+
* The same THREE conditions the persist side applies, because it is literally
|
|
9711
|
+
* the same code: {@link certifiedExpressionForLeaf} OWNS the question and both
|
|
9712
|
+
* halves call it. See that function for why condition 3 is not subsumed by
|
|
9713
|
+
* condition 2.
|
|
9714
|
+
*
|
|
9715
|
+
* RETURNS AN ARRAY for a LIST-typed parameter (issue
|
|
9716
|
+
* [#2327](https://github.com/go-to-k/cdkd/issues/2327)), through the same
|
|
9717
|
+
* {@link certifiedListForLeaf} the persist side reaches from
|
|
9718
|
+
* {@link positionListByCrossStackSource}. `coerceParameterTypedValue` splits a
|
|
9719
|
+
* `CommaDelimitedList` parameter's STRING into an array before either side sees
|
|
9720
|
+
* it, so a scalar answer here would be compared against an array in state and
|
|
9721
|
+
* report a change forever — this function's own failure mode, one shape over.
|
|
9722
|
+
*
|
|
9723
|
+
* TWO CALLERS, and the widened return type is why the second one asks a
|
|
9724
|
+
* different question. `redactParametersForDiff` assigns the result into a
|
|
9725
|
+
* `Record<string, unknown>` and needs the whole parameter's answer, array
|
|
9726
|
+
* included. `IntrinsicFunctionResolver.recordInheritedParameterSecrets` writes
|
|
9727
|
+
* into a `Map<string, string>` keyed by PLAINTEXT, so it asks this per
|
|
9728
|
+
* PLAINTEXT — passing the carried plaintext rather than the parameter's value —
|
|
9729
|
+
* and keeps only a `string` answer. That is not a workaround for the type: a
|
|
9730
|
+
* plaintext-keyed bag has one slot per plaintext, and the question it needs
|
|
9731
|
+
* answered is "does THIS parameter certify THIS plaintext", which is the same
|
|
9732
|
+
* question for a scalar and for an element of a list.
|
|
9711
9733
|
*/
|
|
9712
9734
|
function inheritedParameterExpression(parentSecrets, parameterName, resolvedValue) {
|
|
9713
|
-
if (typeof resolvedValue !== "string" || resolvedValue === "") return void 0;
|
|
9714
|
-
if (!parentSecrets.has(resolvedValue)) return void 0;
|
|
9715
9735
|
const association = nestedStackParameterExpressions.get(parentSecrets)?.get(parameterName);
|
|
9716
9736
|
if (association === void 0 || typeof association === "symbol") return void 0;
|
|
9717
|
-
if (
|
|
9718
|
-
|
|
9719
|
-
if (recordedPlaintext !== void 0 && recordedPlaintext !== resolvedValue) return void 0;
|
|
9720
|
-
return association.expression;
|
|
9737
|
+
if (Array.isArray(resolvedValue)) return certifiedListForLeaf(parentSecrets, association, resolvedValue);
|
|
9738
|
+
return certifiedExpressionForLeaf(parentSecrets, association, resolvedValue);
|
|
9721
9739
|
}
|
|
9722
9740
|
/**
|
|
9723
9741
|
* A resolved secret value shorter than this is NOT used as a redaction needle:
|
|
@@ -10206,6 +10224,103 @@ function plaintextIndexOf(secrets) {
|
|
|
10206
10224
|
return plaintextOf;
|
|
10207
10225
|
}
|
|
10208
10226
|
/**
|
|
10227
|
+
* THE THREE CONDITIONS, in ONE place, over one bag and one already-resolved
|
|
10228
|
+
* association (issue [#2327](https://github.com/go-to-k/cdkd/issues/2327)).
|
|
10229
|
+
*
|
|
10230
|
+
* Three call sites ask this same question and every one of them must answer it
|
|
10231
|
+
* identically or the PERSIST side and the DIFF side disagree — which is not a
|
|
10232
|
+
* hypothetical: the two halves must produce the same expression for the same
|
|
10233
|
+
* leaf, or the desired side of the next diff never matches what was persisted
|
|
10234
|
+
* and the resource reports a change on every deploy (issue #2087's symptom,
|
|
10235
|
+
* arriving through a second spelling of one predicate). The sites are
|
|
10236
|
+
* {@link positionByCrossStackSource} (persist, string leaf),
|
|
10237
|
+
* {@link certifiedListForLeaf} (persist and diff, list leaf) and
|
|
10238
|
+
* {@link inheritedParameterExpression} (diff, whole parameter). THIS FUNCTION
|
|
10239
|
+
* OWNS THE QUESTION; none of them re-spells it.
|
|
10240
|
+
*
|
|
10241
|
+
* 1. The leaf's WHOLE value is a recorded secret plaintext. A leaf that merely
|
|
10242
|
+
* EMBEDS a secret is not this shape and must keep going to the value scan,
|
|
10243
|
+
* which rewrites just the substring. This is also what keeps a PUBLIC
|
|
10244
|
+
* reference out (issue #1901): the resolver records a plaintext only on a
|
|
10245
|
+
* proven-secret verdict, so a public parameter's value is not a key here.
|
|
10246
|
+
* The empty string is excluded for the reason the value pass excludes it: it
|
|
10247
|
+
* is not a distinguishing value.
|
|
10248
|
+
* 2. The association is ABOUT THIS LEAF — the plaintext the WRITER recorded
|
|
10249
|
+
* beside the expression equals the leaf. Within one pass this is the only
|
|
10250
|
+
* guard against a bag/source MISALIGNMENT: a readback bag can hold a
|
|
10251
|
+
* DIFFERENT resource's secret while the source leaf still spells this
|
|
10252
|
+
* import, and condition 3 cannot refuse that (it must ACCEPT an expression
|
|
10253
|
+
* absent from the pass's map, since the collapsed loser is absent too).
|
|
10254
|
+
* 3. The match is not DEMONSTRABLY another value's expression, over the
|
|
10255
|
+
* {@link plaintextIndexOf} index. NOT subsumed by condition 2: that one
|
|
10256
|
+
* compares what the WRITER recorded, this one what THIS pass's own map
|
|
10257
|
+
* holds, and they can disagree when one reference answers differently in two
|
|
10258
|
+
* regions (issue #1933). The collapsed LOSER is absent from the index, so it
|
|
10259
|
+
* passes — which is the case this whole mechanism exists to serve.
|
|
10260
|
+
*/
|
|
10261
|
+
function certifiedExpressionForLeaf(secrets, association, leaf) {
|
|
10262
|
+
if (typeof leaf !== "string" || leaf === "") return void 0;
|
|
10263
|
+
if (!secrets.has(leaf)) return void 0;
|
|
10264
|
+
if (association.plaintext !== leaf) return void 0;
|
|
10265
|
+
const recordedPlaintext = plaintextIndexOf(secrets).get(association.expression);
|
|
10266
|
+
if (recordedPlaintext !== void 0 && recordedPlaintext !== leaf) return void 0;
|
|
10267
|
+
return association.expression;
|
|
10268
|
+
}
|
|
10269
|
+
/**
|
|
10270
|
+
* Apply {@link certifiedExpressionForLeaf} to every ELEMENT of a list leaf
|
|
10271
|
+
* (issue [#2327](https://github.com/go-to-k/cdkd/issues/2327)).
|
|
10272
|
+
*
|
|
10273
|
+
* WHAT "POSITION" MEANS FOR A LIST ELEMENT, which is the question that killed
|
|
10274
|
+
* the earlier attempt in issue #2012 and has to be answered before any array
|
|
10275
|
+
* may be certified: **it is not the index.** There is no source ARRAY to align
|
|
10276
|
+
* against — a list leaf's source is ONE intrinsic standing for the whole list —
|
|
10277
|
+
* so an index-based pairing would have nothing on the other side to pair WITH,
|
|
10278
|
+
* and inventing one is exactly the fabrication issue #2012 refused. What
|
|
10279
|
+
* certifies an element is its OWN VALUE, through condition 1 and condition 2
|
|
10280
|
+
* above. Order is therefore irrelevant: a reordered array certifies
|
|
10281
|
+
* identically, and an element the conditions do not reach is left exactly where
|
|
10282
|
+
* the value scan would have left it.
|
|
10283
|
+
*
|
|
10284
|
+
* NOTHING IS FABRICATED. The output array has the SAME length and the SAME
|
|
10285
|
+
* element ORDER as the input; every element is either an expression certified
|
|
10286
|
+
* from that element's own recorded plaintext, or the value-scan answer this
|
|
10287
|
+
* module already produces for it. No element is added, dropped, reordered, or
|
|
10288
|
+
* copied from the source — so there is no baseline content here that
|
|
10289
|
+
* `cdkd drift --revert` could push to AWS but AWS never reported. That is the
|
|
10290
|
+
* constraint the issue #2012 review imposed, satisfied structurally rather than
|
|
10291
|
+
* argued around.
|
|
10292
|
+
*
|
|
10293
|
+
* SHARED BY BOTH HALVES, and that sharing is load-bearing rather than tidy: the
|
|
10294
|
+
* persist side reaches it through {@link positionListByCrossStackSource} and
|
|
10295
|
+
* the diff side through {@link inheritedParameterExpression}, with the same
|
|
10296
|
+
* association content on either side ({@link inheritNestedStackParameterAssociations}
|
|
10297
|
+
* copies the parent's rows onto the child bag). Two spellings that agreed on
|
|
10298
|
+
* every case but one would reintroduce the perpetual UPDATE at that one case.
|
|
10299
|
+
*
|
|
10300
|
+
* Returns `undefined` when NO element was certified, so every caller falls
|
|
10301
|
+
* through to the value scan and keeps its identity-return: with an empty
|
|
10302
|
+
* secrets map (the issue #1900 unchanged-resource path) condition 1 refuses
|
|
10303
|
+
* every element, so this costs one walk and changes nothing.
|
|
10304
|
+
*/
|
|
10305
|
+
function certifiedListForLeaf(secrets, association, bag) {
|
|
10306
|
+
const certified = bag.map((element) => certifiedExpressionForLeaf(secrets, association, element));
|
|
10307
|
+
if (certified.every((expression) => expression === void 0)) return void 0;
|
|
10308
|
+
return bag.map((element, i) => certified[i] ?? redactSecretsForState(element, secrets));
|
|
10309
|
+
}
|
|
10310
|
+
/**
|
|
10311
|
+
* The association {@link crossStackAssociations} holds for a SOURCE leaf, or
|
|
10312
|
+
* `undefined` when this pass has none (or a poisoned one) for it.
|
|
10313
|
+
*/
|
|
10314
|
+
function associationForSource(source, secrets) {
|
|
10315
|
+
const key = crossStackSourceKey(source);
|
|
10316
|
+
if (key === void 0) return void 0;
|
|
10317
|
+
const associations = crossStackAssociations.get(secrets);
|
|
10318
|
+
if (associations === void 0) return void 0;
|
|
10319
|
+
const association = associations.get(key);
|
|
10320
|
+
if (association === void 0 || typeof association === "symbol") return void 0;
|
|
10321
|
+
return association;
|
|
10322
|
+
}
|
|
10323
|
+
/**
|
|
10209
10324
|
* Position a leaf whose SOURCE is a CROSS-STACK intrinsic object
|
|
10210
10325
|
* (`Fn::ImportValue` / `Fn::GetStackOutput`), by looking its identity up in the
|
|
10211
10326
|
* association the RESOLVER recorded while it read the producer (issue
|
|
@@ -10224,27 +10339,14 @@ function plaintextIndexOf(secrets) {
|
|
|
10224
10339
|
* has to come from the one place that holds both halves at once, which is
|
|
10225
10340
|
* {@link crossStackAssociations}.
|
|
10226
10341
|
*
|
|
10227
|
-
*
|
|
10228
|
-
*
|
|
10229
|
-
*
|
|
10230
|
-
*
|
|
10231
|
-
*
|
|
10232
|
-
*
|
|
10233
|
-
*
|
|
10234
|
-
*
|
|
10235
|
-
* proven-secret verdict, so a public parameter's value is not a key here.
|
|
10236
|
-
* 2. The association is ABOUT THIS BAG — the plaintext the WRITER recorded
|
|
10237
|
-
* beside the expression equals the bag leaf. Against another pass this is
|
|
10238
|
-
* belt-and-braces, since {@link crossStackAssociations} is scoped to the
|
|
10239
|
-
* pass and a foreign entry cannot be reached; within one pass it is the only
|
|
10240
|
-
* guard against a bag/source MISALIGNMENT.
|
|
10241
|
-
* 3. The match is not DEMONSTRABLY another value's expression — verbatim
|
|
10242
|
-
* condition 3 next door, over the same {@link plaintextIndexOf} index. It is
|
|
10243
|
-
* what fences a bag/source MISALIGNMENT: on a readback walk the bag leaf can
|
|
10244
|
-
* hold a different resource's secret while the source leaf still spells this
|
|
10245
|
-
* import, and an association recorded against a plaintext that is not this
|
|
10246
|
-
* bag is refused outright. The collapsed LOSER is absent from that index, so
|
|
10247
|
-
* it passes — which is the case this whole function exists to serve.
|
|
10342
|
+
* THE THREE CONDITIONS ARE {@link certifiedExpressionForLeaf}'s and are stated
|
|
10343
|
+
* ONLY there. They were re-enumerated here until issue #2327 extracted the
|
|
10344
|
+
* owner, and the copy had already drifted from it three ways within the same
|
|
10345
|
+
* change -- it dropped the empty-string clause, it explained condition 2 by a
|
|
10346
|
+
* scoping story ({@link crossStackAssociations} being per-pass) that is not the
|
|
10347
|
+
* owner's OTHER caller's, and it said "three intrinsic spellings" when
|
|
10348
|
+
* {@link crossStackSourceKey} answers for five. A rationale that drifts inside
|
|
10349
|
+
* one PR is the argument against duplicating it.
|
|
10248
10350
|
*
|
|
10249
10351
|
* There is deliberately NO "exactly one candidate" test (the neighbour's
|
|
10250
10352
|
* condition 2): this is a LOOKUP rather than a search, so the ambiguity that
|
|
@@ -10257,23 +10359,16 @@ function plaintextIndexOf(secrets) {
|
|
|
10257
10359
|
* bag could not be vouched for, because it rewrote a `{Name: '', Value:
|
|
10258
10360
|
* 'an-unrelated-literal'}` pair. Nothing here can do that: the answer is never
|
|
10259
10361
|
* the source subtree, it is an expression a WRITER recorded against this exact
|
|
10260
|
-
* leaf identity; the arm fires for
|
|
10362
|
+
* leaf identity; the arm fires only for the spellings
|
|
10363
|
+
* {@link crossStackSourceKey} can key; and
|
|
10261
10364
|
* condition 1 still demands that the bag leaf be a plaintext this pass
|
|
10262
10365
|
* resolved. Every rejection degrades to {@link positionByIntrinsicSkeleton} and
|
|
10263
10366
|
* then to the value scan, i.e. to today's behavior.
|
|
10264
10367
|
*/
|
|
10265
10368
|
function positionByCrossStackSource(bag, source, secrets) {
|
|
10266
|
-
|
|
10267
|
-
|
|
10268
|
-
|
|
10269
|
-
const associations = crossStackAssociations.get(secrets);
|
|
10270
|
-
if (associations === void 0) return void 0;
|
|
10271
|
-
const association = associations.get(key);
|
|
10272
|
-
if (association === void 0 || typeof association === "symbol") return void 0;
|
|
10273
|
-
if (association.plaintext !== bag) return void 0;
|
|
10274
|
-
const recordedPlaintext = plaintextIndexOf(secrets).get(association.expression);
|
|
10275
|
-
if (recordedPlaintext !== void 0 && recordedPlaintext !== bag) return void 0;
|
|
10276
|
-
return association.expression;
|
|
10369
|
+
const association = associationForSource(source, secrets);
|
|
10370
|
+
if (association === void 0) return void 0;
|
|
10371
|
+
return certifiedExpressionForLeaf(secrets, association, bag);
|
|
10277
10372
|
}
|
|
10278
10373
|
/**
|
|
10279
10374
|
* Position a leaf whose SOURCE is an intrinsic OBJECT, by matching the shape of
|
|
@@ -10457,6 +10552,49 @@ function identityKeyFor(bag, source) {
|
|
|
10457
10552
|
for (const key of ARRAY_IDENTITY_KEYS) if (isUniquelyKeyedBy(bag, key) && isUniquelyKeyedBy(source, key)) return key;
|
|
10458
10553
|
}
|
|
10459
10554
|
/**
|
|
10555
|
+
* Position the ELEMENTS of an array leaf whose SOURCE is an intrinsic OBJECT,
|
|
10556
|
+
* by the same leaf-identity lookup {@link positionByCrossStackSource} performs
|
|
10557
|
+
* for a string leaf (issue
|
|
10558
|
+
* [#2327](https://github.com/go-to-k/cdkd/issues/2327)).
|
|
10559
|
+
*
|
|
10560
|
+
* A child parameter declared `CommaDelimitedList` is coerced by
|
|
10561
|
+
* `coerceParameterTypedValue` into an ARRAY before any of this runs, so a
|
|
10562
|
+
* leaf the child template spells `{Ref: <Param>}` arrives beside an intrinsic
|
|
10563
|
+
* OBJECT as an array — a shape NO arm matched, which dropped it to the
|
|
10564
|
+
* plaintext-keyed value scan and handed BOTH members of a coinciding pair the
|
|
10565
|
+
* survivor's expression. `docs/cli-reference.md` names `CommaDelimitedList` as
|
|
10566
|
+
* an ALLOWED spelling for a secret-bearing nested-stack parameter, so it is
|
|
10567
|
+
* reachable rather than theoretical.
|
|
10568
|
+
*
|
|
10569
|
+
* The element rule, what it refuses and why nothing is fabricated all live on
|
|
10570
|
+
* {@link certifiedListForLeaf}, which the DIFF side calls too. TWO further
|
|
10571
|
+
* refusals belong to THIS site rather than to the shared rule:
|
|
10572
|
+
*
|
|
10573
|
+
* 1. REFUSAL — a source leaf {@link crossStackSourceKey} cannot key, or one
|
|
10574
|
+
* this pass recorded no association for. Both fall to the value scan, i.e.
|
|
10575
|
+
* to today's behaviour.
|
|
10576
|
+
* 2. REFUSAL — {@link positionByIntrinsicSkeleton} is deliberately NOT tried
|
|
10577
|
+
* element-wise, and the asymmetry with the string arm is structural rather
|
|
10578
|
+
* than caution. {@link intrinsicSkeletonPattern} accepts exactly `Fn::Join`
|
|
10579
|
+
* and `Fn::Sub`, both of which produce a STRING; an array bag beside one of
|
|
10580
|
+
* them is a SHAPE DIVERGENCE, not a position. Matching a per-element pattern
|
|
10581
|
+
* built from text that describes the whole joined string would be a guess of
|
|
10582
|
+
* precisely the kind condition 2 of that function exists to refuse.
|
|
10583
|
+
*
|
|
10584
|
+
* NOT GATED ON `rules`, for the reason the string arm next door is not: the
|
|
10585
|
+
* certification rests on the element being a plaintext THIS pass recorded,
|
|
10586
|
+
* which a previous generation's persisted expression can never be, and it never
|
|
10587
|
+
* depends on the two sides being positionally aligned. In practice only the
|
|
10588
|
+
* TEMPLATE-sourced walks can reach it at all — every STATE-sourced source leaf
|
|
10589
|
+
* is a persisted value, not an intrinsic object — but the safety does not rest
|
|
10590
|
+
* on that.
|
|
10591
|
+
*/
|
|
10592
|
+
function positionListByCrossStackSource(bag, source, secrets) {
|
|
10593
|
+
const association = associationForSource(source, secrets);
|
|
10594
|
+
if (association === void 0) return void 0;
|
|
10595
|
+
return certifiedListForLeaf(secrets, association, bag);
|
|
10596
|
+
}
|
|
10597
|
+
/**
|
|
10460
10598
|
* PATH-based redaction: walk `bag` alongside a SOURCE bag that still carries the
|
|
10461
10599
|
* unresolved `{{resolve:...}}` expressions, and wherever the source leaf is such
|
|
10462
10600
|
* a string, persist THAT string verbatim.
|
|
@@ -10488,6 +10626,14 @@ function identityKeyFor(bag, source) {
|
|
|
10488
10626
|
* recorded secret expressions, THAT is persisted. This is the dominant CDK
|
|
10489
10627
|
* shape — an L2 secret token renders the ARN as a `Ref`, hence a join.
|
|
10490
10628
|
*
|
|
10629
|
+
* An ARRAY leaf beside such an intrinsic OBJECT — the shape a
|
|
10630
|
+
* `CommaDelimitedList` nested-stack parameter produces once the child has
|
|
10631
|
+
* coerced it — is positioned ELEMENT-WISE by
|
|
10632
|
+
* {@link positionListByCrossStackSource} (issue #2327). What certifies an
|
|
10633
|
+
* element there is its own recorded plaintext rather than its index, so nothing
|
|
10634
|
+
* is aligned against a source array that does not exist; see that function for
|
|
10635
|
+
* the two shapes it refuses.
|
|
10636
|
+
*
|
|
10491
10637
|
* The value scan is still applied wherever none can answer: a leaf that merely
|
|
10492
10638
|
* EMBEDS a secret inside surrounding text, an intrinsic whose skeleton matches
|
|
10493
10639
|
* zero or several candidates, a cross-stack leaf whose identity is not
|
|
@@ -10510,6 +10656,10 @@ function redactByPath(bag, source, secrets, rules, secretExpressions) {
|
|
|
10510
10656
|
const positioned = positionByIntrinsicSkeleton(bag, source, secrets, secretExpressions);
|
|
10511
10657
|
if (positioned !== void 0) return positioned;
|
|
10512
10658
|
}
|
|
10659
|
+
if (Array.isArray(bag) && isPlainObject$2(source)) {
|
|
10660
|
+
const positionedList = positionListByCrossStackSource(bag, source, secrets);
|
|
10661
|
+
if (positionedList !== void 0) return positionedList;
|
|
10662
|
+
}
|
|
10513
10663
|
if (Array.isArray(bag) && Array.isArray(source)) {
|
|
10514
10664
|
const key = identityKeyFor(bag, source);
|
|
10515
10665
|
if (key !== void 0) {
|
|
@@ -17149,8 +17299,10 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
17149
17299
|
const inherited = context.inheritedSecrets;
|
|
17150
17300
|
const recorded = context.recordedSecretValues;
|
|
17151
17301
|
if (!inherited || inherited.size === 0 || !recorded) return;
|
|
17152
|
-
const
|
|
17153
|
-
|
|
17302
|
+
for (const [plaintext, expression] of inheritedSecretsCarriedBy(value, inherited)) {
|
|
17303
|
+
const own = inheritedParameterExpression(inherited, parameterName, plaintext);
|
|
17304
|
+
recorded.set(plaintext, typeof own === "string" ? own : expression);
|
|
17305
|
+
}
|
|
17154
17306
|
}
|
|
17155
17307
|
/**
|
|
17156
17308
|
* Refuse a child parameter whose declared `Type` would COERCE an inherited
|
|
@@ -20235,7 +20387,7 @@ var CloudControlProvider = class {
|
|
|
20235
20387
|
await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
20236
20388
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
20237
20389
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
20238
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
20390
|
+
const { ASGProvider } = await import("./asg-provider-DW0VKnyp.js").then((n) => n.n);
|
|
20239
20391
|
return await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
|
|
20240
20392
|
}
|
|
20241
20393
|
const isProtectedEc2Instance = context?.removeProtection === true && resourceType === "AWS::EC2::Instance";
|
|
@@ -32149,5 +32301,5 @@ var DeployEngine = class {
|
|
|
32149
32301
|
};
|
|
32150
32302
|
|
|
32151
32303
|
//#endregion
|
|
32152
|
-
export { maskerOrIdentity as $,
|
|
32153
|
-
//# sourceMappingURL=deploy-engine-
|
|
32304
|
+
export { maskerOrIdentity as $, CFN_TEMPLATE_BODY_LIMIT as $n, maskSecretsInText as $t, renderStatefulReason as A, describeAwsFailure as An, ProvisioningError as Ar, requireConfigString as At, exportAliasCollisionScrubWarning as B, Synthesizer as Bn, withErrorHandling as Br, INTRINSIC_KEYS as Bt, isFinalSnapshotError as C, getBootstrapMarkerKey as Cn, LocalInvokeBuildError as Cr, coerceCfnBoolean as Ct, extractDeploymentEventError as D, validateAssetBucketName as Dn, MissingCdkCliError as Dr, replayWarn as Dt, makeCanonicalizePropertiesFn as E, readBootstrapMarkerBody as En, LockError as Er, readConfigString as Et, green as F, partitionSensitiveEnv as Fn, StateError as Fr, s3BucketDualStackDomainName as Ft, IAMRoleProvider as G, resolveAutoAssetStorage as Gn, markRedactedCause as Gr, STATE_SOURCED_CROSS_GENERATION_RULES as Gt, secretBearingStateKeyWarning as H, getDefaultStateBucketName as Hn, isRetryableTransientError as Hr, withRetry as Ht, red as I, runDockerForeground as In, SynthesisError as Ir, s3BucketRegionalDomainName as It, ProviderRegistry as J, resolveStateBucketWithDefault as Jn, createSecretMasker as Jt, collectInlinePolicyNamesManagedBySiblings as K, resolveCaptureObservedState as Kn, retryClassificationText as Kr, STATE_SOURCED_READBACK_RULES as Kt, yellow as L, runDockerStreaming as Ln, formatError as Lr, s3BucketWebsiteUrl as Lt, bold as M, dockerSpawnEnvWithSensitive as Mn, ResourceUpdateNotSupportedError as Mr, producerRegionsFromState as Mt, cyan as N, formatDockerLoginError as Nn, StackHasActiveImportsError as Nr, s3BucketArn as Nt, MULTI_REGION_RECREATE_BLOCKED_TYPES as O, validateContainerRepoName as On, NestedStackChildDirectDestroyError as Or, requireConfigArray as Ot, gray as P, getDockerCmd as Pn, StackTerminationProtectionError as Pr, s3BucketDomainName as Pt, maskDeep as Q, warnDeprecatedNoPrefixCliFlag as Qn, maskSecretsInError as Qt, collectDeclaredOutputNames as R, AssetManifestLoader as Rn, isCdkdError as Rr, applyRoleArnIfSet as Rt, createPreDeleteFinalSnapshot as S, ensureAssetStorage as Sn, DynamicReferenceRegionAmbiguousError as Sr, assertRegionMatch as St, unsupportedFinalSnapshotError as T, parseBootstrapMarker as Tn, LocalStartServiceError as Tr, configStringRefusal as Tt, stateKeySecretExposure as U, getLegacyStateBucketName as Un, isThrottlingError as Ur, DagBuilder as Ut, isExportAliasCollision as V, synthesisStatusMessage as Vn, isMarkedNonRetryable as Vr, describeTypeWithThrottleRetry as Vt, getCurrentResourceSecrets as W, resolveApp as Wn, markNonRetryable as Wr, TemplateParser as Wt, findSilentDropProperties as X, resolveUseCdkBootstrapAssets as Xn, errorCauseChain as Xt, findActionableSilentDrops as Y, resolveStateBucketWithDefaultAndSource as Yn, dynamicReferenceTokens as Yt, createMaskedRetryLogger as Z, stateBucketExistenceConfirmed as Zn, isSingleDynamicReferenceToken as Zt, computeImplicitDeleteEdges as _, escapeRegExp$1 as _n, CdkdError as _r, parameterTypeMayLoseSecretIdentity as _t, DeploymentEventsStore as a, rebuildClientForBucketRegion as an, PARTITION_TABLE as ar, isInterruptedWaitError as at, buildFinalSnapshotIdentifier as b, BOOTSTRAP_MARKER_PREFIX as bn, DependencyError as br, normalizeAwsTagsToCfn as bt, replayFailedOperations as c, importableOutputs as cn, AssemblyReader as cr, slowCcOperationTimeoutMs as ct, updatePartialReason as d, stringifyValue as dn, resolveBucketRegion as dr, IntrinsicFunctionResolver as dt, redactSecretsForState as en, CFN_TEMPLATE_URL_LIMIT as er, CUSTOM_RESOURCE_RESPONSE_PREFIX as et, UNSPECIFIED_SKIP_REASON as f, WorkGraph as fn, AwsClients as fr, carriesDynamicReference as ft, IMPLICIT_DELETE_DEPENDENCIES as g, rewriteTemplateAssetReferences as gn, AssetError as gr, isUnboundTemplateParameter as gt, maskingRetryLogger as h, loadPublishableAssetManifest as hn, setAwsClients as hr, getAccountInfo as ht, DeploymentEventsReader as i, S3StateBackend as in, expectedOwnerParam as ir, interruptWatchListenerCount as it, formatResourceLine as j, buildDockerImage as jn, ResourceTimeoutError as jr, classifyReplaySecretRegion as jt, isStatefulRecreateTargetSync as k, buildDenyExternalAccessPolicy as kn, PartialFailureError as kr, requireConfigObject as kt, replayRollback as l, shouldRetainResource as ln, processStackMessages as lr, disableInstanceApiTermination as lt, withResourceDeadline as m, createAssetRedirectResolver as mn, resetAwsClients as mr, coerceParameterTypedValue as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, LockManager as nn, findLargeInlineResources as nr, beginCommandInterruptScope as nt, planFailedOps as o, exportNamesCarriedFrom as on, canonicalizeRegion as or, startInterruptWatch as ot, deleteSkipReason as p, buildAssetRedirectMap as pn, getAwsClients as pr, cfnRefValueFromPhysicalId as pt, clearOnUpdateRemoval as q, resolveSkipPrefix as qn, __exportAll as qr, TEMPLATE_SOURCED_RULES as qt, DeployEngine as r, displaySafe as rn, uploadCfnTemplate as rr, endCommandInterruptScope as rt, planRollback as s, importableOutputKeys as sn, derivePartitionAndUrlSuffix as sr, CloudControlProvider as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, scrubResourceRecord as tn, MIGRATE_TMP_PREFIX as tr, DEFAULT_STATE_PREFIX as tt, updatePartialMessage as u, AssetPublisher as un, clearBucketRegionCache as ur, isTerminationProtectionPropagationError as ut, ATOMIC_FINAL_SNAPSHOT_TYPES as v, stripControlChars as vn, ConfigError as vr, refStateLookupFromResource as vt, refusesFinalSnapshot as w, isCrossRegionRedirect as wn, LocalMigrateError as wr, configBooleanRefusal as wt, ccRoutedFinalSnapshotError as x, assertAssetBucketRegion as xn, DeployCancelledError as xr, resolveExplicitPhysicalId as xt, PRE_DELETE_SNAPSHOT_TYPES as y, AssetModeResolver as yn, CrossAccountSecretRefusalError as yr, WAFv2WebACLProvider as yt, collectPublishedOutputNames as z, getDockerImageBySourceHash as zn, normalizeAwsError as zr, DiffCalculator as zt };
|
|
32305
|
+
//# sourceMappingURL=deploy-engine-DAY3Q6s4.js.map
|