@go-to-k/cdkd 0.283.30 → 0.283.31
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-BpVWOeU3.js → asg-provider-SQ0V0nFd.js} +2 -2
- package/dist/{asg-provider-BpVWOeU3.js.map → asg-provider-SQ0V0nFd.js.map} +1 -1
- package/dist/cli.js +5 -5
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-Bb4ECtz3.js → deploy-engine-AWFiXyhp.js} +219 -32
- package/dist/deploy-engine-AWFiXyhp.js.map +1 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-Bb4ECtz3.js.map +0 -1
|
@@ -9925,40 +9925,88 @@ function buildNeedleRegex(values) {
|
|
|
9925
9925
|
if (needles.length === 0) return void 0;
|
|
9926
9926
|
return new RegExp(needles.map(escapeRegExp).join("|"), "g");
|
|
9927
9927
|
}
|
|
9928
|
-
/**
|
|
9928
|
+
/**
|
|
9929
|
+
* The bag was produced by resolving the source: same shape, template source.
|
|
9930
|
+
*
|
|
9931
|
+
* `sourceIsSameGeneration` is FALSE despite the name, and that is the whole
|
|
9932
|
+
* lesson of issue #1917's review: the RULES describe the source, but the deploy
|
|
9933
|
+
* engine's persist choke point applies them to every record in the state map,
|
|
9934
|
+
* including ones this pass never rewrote. A template can never certify the
|
|
9935
|
+
* generation of the bag it is walked against.
|
|
9936
|
+
*/
|
|
9929
9937
|
const TEMPLATE_DERIVED_RULES = {
|
|
9930
9938
|
descendArrays: true,
|
|
9931
|
-
trustAnyExpression: false
|
|
9939
|
+
trustAnyExpression: false,
|
|
9940
|
+
sourceIsSameGeneration: false
|
|
9941
|
+
};
|
|
9942
|
+
/**
|
|
9943
|
+
* An AWS readback, or a persisted STATE bag, projected from the TEMPLATE: no
|
|
9944
|
+
* relaxation applies.
|
|
9945
|
+
*
|
|
9946
|
+
* One constant covers both bags because the template is what decides all three
|
|
9947
|
+
* rules here, and it decides them identically: shapes may diverge (no
|
|
9948
|
+
* positional descent), the template carries PUBLIC ssm expressions (no blanket
|
|
9949
|
+
* trust), and it is a different generation from anything it is walked against
|
|
9950
|
+
* (no source-takes-precedence on an expression-shaped leaf). An earlier draft
|
|
9951
|
+
* split this into a second `TEMPLATE_SOURCED_STATE_BAG_RULES` for `cdkd scrub`;
|
|
9952
|
+
* the two ended up byte-identical once the axis moved from CALLER to
|
|
9953
|
+
* GENERATION, and two identical constants are a drift hazard, not a
|
|
9954
|
+
* distinction.
|
|
9955
|
+
*/
|
|
9956
|
+
const TEMPLATE_SOURCED_RULES = {
|
|
9957
|
+
descendArrays: false,
|
|
9958
|
+
trustAnyExpression: false,
|
|
9959
|
+
sourceIsSameGeneration: false
|
|
9932
9960
|
};
|
|
9933
|
-
/** An AWS readback projected from
|
|
9961
|
+
/** An AWS readback projected from THIS record's own persisted STATE bag. */
|
|
9934
9962
|
const STATE_SOURCED_READBACK_RULES = {
|
|
9935
9963
|
descendArrays: false,
|
|
9936
|
-
trustAnyExpression: true
|
|
9964
|
+
trustAnyExpression: true,
|
|
9965
|
+
sourceIsSameGeneration: true
|
|
9937
9966
|
};
|
|
9938
|
-
/**
|
|
9939
|
-
|
|
9967
|
+
/**
|
|
9968
|
+
* A STATE source that is no longer this bag's own generation — `cdkd scrub`'s
|
|
9969
|
+
* `observedProperties` walk (issue #1917 review).
|
|
9970
|
+
*
|
|
9971
|
+
* It differs from {@link STATE_SOURCED_READBACK_RULES} on one flag, and the
|
|
9972
|
+
* difference is not cosmetic. Scrub positions `properties` against TODAY's
|
|
9973
|
+
* template BEFORE the observed bag is walked, so the "record's own properties"
|
|
9974
|
+
* that serve as the observed source may already carry an expression the stack
|
|
9975
|
+
* has never deployed. Taking that source for an observed leaf that ALREADY
|
|
9976
|
+
* holds an expression rewrites the drift baseline onto an undeployed
|
|
9977
|
+
* reference — which `cdkd drift --revert` then pushes to AWS.
|
|
9978
|
+
*
|
|
9979
|
+
* `trustAnyExpression` stays TRUE: the source is still a STATE bag, holding no
|
|
9980
|
+
* public expressions, and that relaxation is what lets scrub clean a legacy
|
|
9981
|
+
* PLAINTEXT observed leaf (issue #1900) rather than falling back to a value
|
|
9982
|
+
* scan that an old state file gives no needles for.
|
|
9983
|
+
*/
|
|
9984
|
+
const STATE_SOURCED_CROSS_GENERATION_RULES = {
|
|
9940
9985
|
descendArrays: false,
|
|
9941
|
-
trustAnyExpression:
|
|
9986
|
+
trustAnyExpression: true,
|
|
9987
|
+
sourceIsSameGeneration: false
|
|
9942
9988
|
};
|
|
9943
9989
|
/**
|
|
9944
|
-
* The bag was produced by resolving a STATE source —
|
|
9990
|
+
* The bag was produced by resolving a STATE source — every relaxation applies.
|
|
9945
9991
|
*
|
|
9946
9992
|
* The rollback replay is the case (issue #1910): `resolveReplayProps` resolves
|
|
9947
9993
|
* the JOURNALED bag and the provider's `effectiveProperties` come back from
|
|
9948
9994
|
* that, so the two have identical structure and positional array descent is
|
|
9949
|
-
* sound exactly as it is for a template-derived bag.
|
|
9950
|
-
*
|
|
9951
|
-
*
|
|
9952
|
-
*
|
|
9995
|
+
* sound exactly as it is for a template-derived bag. The source is a persisted
|
|
9996
|
+
* record, which holds no PUBLIC expressions — a `String` ssm reference is
|
|
9997
|
+
* stored resolved — so any `{{resolve:...}}` in it is by construction a secret.
|
|
9998
|
+
* And it is the SAME generation the bag was resolved from, one statement
|
|
9999
|
+
* earlier in the same call, which is as strong as that claim ever gets.
|
|
9953
10000
|
*
|
|
9954
|
-
* Using
|
|
9955
|
-
*
|
|
9956
|
-
*
|
|
9957
|
-
*
|
|
10001
|
+
* Using a `*_SOURCED_*` constant here instead would be wrong in the quiet
|
|
10002
|
+
* direction: it turns positional array descent OFF for a bag that genuinely
|
|
10003
|
+
* does correspond positionally, and drops the generation claim for the one
|
|
10004
|
+
* writer that can actually make it.
|
|
9958
10005
|
*/
|
|
9959
10006
|
const STATE_DERIVED_RULES = {
|
|
9960
10007
|
descendArrays: true,
|
|
9961
|
-
trustAnyExpression: true
|
|
10008
|
+
trustAnyExpression: true,
|
|
10009
|
+
sourceIsSameGeneration: true
|
|
9962
10010
|
};
|
|
9963
10011
|
function isDynamicReferenceString(value) {
|
|
9964
10012
|
return typeof value === "string" && value.includes("{{resolve:");
|
|
@@ -10252,6 +10300,103 @@ function positionByIntrinsicSkeleton(bag, source, secrets, secretExpressions) {
|
|
|
10252
10300
|
return matched;
|
|
10253
10301
|
}
|
|
10254
10302
|
/**
|
|
10303
|
+
* Keys tried, in order, when pairing two arrays whose ORDER cannot be trusted
|
|
10304
|
+
* (issue #1915).
|
|
10305
|
+
*
|
|
10306
|
+
* Both are the identity field of an unordered CloudFormation list that really
|
|
10307
|
+
* does carry secrets: `Name` is the ECS `ContainerDefinitions[]` /
|
|
10308
|
+
* `Environment[]` / `Secrets[]` and CodeBuild `EnvironmentVariables[]` shape,
|
|
10309
|
+
* `Key` is the `Tags[]` shape the drift normalizer already keys on
|
|
10310
|
+
* (`canonicalizeTagListsDeep` in `src/analyzer/drift-normalize.ts`). The list
|
|
10311
|
+
* is deliberately SHORT: an entry is only useful when it is a genuine identity,
|
|
10312
|
+
* and a wrong entry costs a refused pairing rather than a wrong one (see
|
|
10313
|
+
* {@link identityKeyFor}), so widening it buys little and has to be justified
|
|
10314
|
+
* per shape.
|
|
10315
|
+
*
|
|
10316
|
+
* Worth naming rather than leaving to be rediscovered: `drift-normalize.ts`
|
|
10317
|
+
* deliberately moved its GENERAL case OFF heuristics like this one, onto
|
|
10318
|
+
* provider-DECLARED paths (`getDriftUnorderedPaths` + `matchesPathPrefix`),
|
|
10319
|
+
* after issue #1783 showed a heuristic claiming order-independence for a list
|
|
10320
|
+
* that was order-SIGNIFICANT (`KeySchema`). Only its `Tags[]` pass is still a
|
|
10321
|
+
* heuristic. This module diverges on purpose, because the two failure modes are
|
|
10322
|
+
* not comparable: there, a wrong claim SUPPRESSES real drift; here, the worst a
|
|
10323
|
+
* wrong pairing key can do is fail the uniqueness test and refuse, leaving the
|
|
10324
|
+
* leaf exactly where the value scan already had it. If that ever stops being
|
|
10325
|
+
* true — if a pairing gains the power to DELETE or REORDER rather than only to
|
|
10326
|
+
* rewrite a matched leaf — this list has to move to a declared seam too.
|
|
10327
|
+
*/
|
|
10328
|
+
const ARRAY_IDENTITY_KEYS = ["Name", "Key"];
|
|
10329
|
+
/**
|
|
10330
|
+
* Is every element of `items` a plain object carrying a NON-EMPTY OWN string at
|
|
10331
|
+
* `key`, with no two elements sharing a value?
|
|
10332
|
+
*
|
|
10333
|
+
* `Object.hasOwn` for the same reason the object walk below uses it: without
|
|
10334
|
+
* it the prototype chain answers for a key like `constructor`, and while state
|
|
10335
|
+
* that came from `JSON.parse` cannot carry one, this module is called with
|
|
10336
|
+
* caller-constructed bags too and the two walks disagreeing is the kind of gap
|
|
10337
|
+
* that only shows up once something else changes.
|
|
10338
|
+
*
|
|
10339
|
+
* The empty string is excluded because it is not a distinguishing identity —
|
|
10340
|
+
* the same reason the value scan refuses it as a needle. Two elements both
|
|
10341
|
+
* carrying `Name: ''` would otherwise pair on "equality" that means nothing.
|
|
10342
|
+
*/
|
|
10343
|
+
function isUniquelyKeyedBy(items, key) {
|
|
10344
|
+
if (items.length === 0) return false;
|
|
10345
|
+
const seen = /* @__PURE__ */ new Set();
|
|
10346
|
+
for (const item of items) {
|
|
10347
|
+
if (!isPlainObject$2(item) || !Object.hasOwn(item, key)) return false;
|
|
10348
|
+
const id = item[key];
|
|
10349
|
+
if (typeof id !== "string" || id === "") return false;
|
|
10350
|
+
if (seen.has(id)) return false;
|
|
10351
|
+
seen.add(id);
|
|
10352
|
+
}
|
|
10353
|
+
return true;
|
|
10354
|
+
}
|
|
10355
|
+
/**
|
|
10356
|
+
* Pick a key that identifies the elements of BOTH arrays, or `undefined` when
|
|
10357
|
+
* none does (issue #1915).
|
|
10358
|
+
*
|
|
10359
|
+
* This is what lets a leaf nested in an ARRAY be positioned on a path where
|
|
10360
|
+
* positional descent is refused. `descendArrays: false` is not a claim that the
|
|
10361
|
+
* bag and source elements are unrelated — it is a claim that their ORDER does
|
|
10362
|
+
* not correspond, because AWS does not preserve list order (the reason
|
|
10363
|
+
* `src/analyzer/drift-normalize.ts` exists). Matching by an identity FIELD
|
|
10364
|
+
* answers the order objection directly instead of working around it, so the
|
|
10365
|
+
* relaxation is sound on every rules constant and is deliberately NOT gated on
|
|
10366
|
+
* one.
|
|
10367
|
+
*
|
|
10368
|
+
* Requiring uniqueness WITHIN each array is what makes a pairing impossible to
|
|
10369
|
+
* get wrong: pairing is by string EQUALITY, so a bag element can only ever meet
|
|
10370
|
+
* the source element carrying the same identity, and uniqueness means there is
|
|
10371
|
+
* at most one of those. A key that is not really an identity (a repeated enum
|
|
10372
|
+
* value) fails the uniqueness test and refuses the whole pairing rather than
|
|
10373
|
+
* producing a plausible-looking wrong one. An element with no partner is not
|
|
10374
|
+
* guessed at either — it falls to the value scan, exactly as the whole array
|
|
10375
|
+
* did before.
|
|
10376
|
+
*
|
|
10377
|
+
* Keys are tried in {@link ARRAY_IDENTITY_KEYS} order and the FIRST one that
|
|
10378
|
+
* qualifies on both sides wins; a key that fails does not veto the next one.
|
|
10379
|
+
*
|
|
10380
|
+
* Two shapes this deliberately does NOT reach, stated so they are bounds rather
|
|
10381
|
+
* than surprises — both fail closed, leaving the leaf to the value scan:
|
|
10382
|
+
*
|
|
10383
|
+
* - **The identity field itself holds a secret.** The source element carries
|
|
10384
|
+
* `{Name: '{{resolve:...}}'}` and the bag element the resolved plaintext, so
|
|
10385
|
+
* the two never pair and the element's other leaves are not reached either.
|
|
10386
|
+
* Closing it would mean pairing on a field whose two sides are KNOWN to
|
|
10387
|
+
* differ, i.e. exactly the guessing the uniqueness rule exists to forbid. On
|
|
10388
|
+
* the unchanged-resource path the value scan is also a no-op, so such a leaf
|
|
10389
|
+
* keeps its plaintext — narrow (an identity field is a name, not a
|
|
10390
|
+
* credential) but real.
|
|
10391
|
+
* - **Arrays of arrays.** `M: [[{Name, Value}]]` pairs nothing, because the
|
|
10392
|
+
* OUTER elements are arrays rather than plain objects and have no identity
|
|
10393
|
+
* field to key on. Positional descent into the outer list would reintroduce
|
|
10394
|
+
* the order assumption this function exists to avoid.
|
|
10395
|
+
*/
|
|
10396
|
+
function identityKeyFor(bag, source) {
|
|
10397
|
+
for (const key of ARRAY_IDENTITY_KEYS) if (isUniquelyKeyedBy(bag, key) && isUniquelyKeyedBy(source, key)) return key;
|
|
10398
|
+
}
|
|
10399
|
+
/**
|
|
10255
10400
|
* PATH-based redaction: walk `bag` alongside a SOURCE bag that still carries the
|
|
10256
10401
|
* unresolved `{{resolve:...}}` expressions, and wherever the source leaf is such
|
|
10257
10402
|
* a string, persist THAT string verbatim.
|
|
@@ -10284,16 +10429,41 @@ function positionByIntrinsicSkeleton(bag, source, secrets, secretExpressions) {
|
|
|
10284
10429
|
* where neither is.
|
|
10285
10430
|
*/
|
|
10286
10431
|
function redactByPath(bag, source, secrets, rules, secretExpressions) {
|
|
10287
|
-
if (typeof bag === "string" && isSingleDynamicReferenceToken(bag)) return bag;
|
|
10288
10432
|
if (isDynamicReferenceString(source) && typeof bag === "string") {
|
|
10289
|
-
if (isSingleDynamicReferenceToken(source) && (rules.trustAnyExpression || isKnownSecretExpression(source, secretExpressions)))
|
|
10433
|
+
if (isSingleDynamicReferenceToken(source) && (rules.trustAnyExpression || isKnownSecretExpression(source, secretExpressions))) {
|
|
10434
|
+
if (!rules.sourceIsSameGeneration && isSingleDynamicReferenceToken(bag)) return secrets.get(bag) ?? bag;
|
|
10435
|
+
return source;
|
|
10436
|
+
}
|
|
10290
10437
|
return redactSecretsForState(bag, secrets);
|
|
10291
10438
|
}
|
|
10292
10439
|
if (typeof bag === "string" && isPlainObject$2(source)) {
|
|
10293
10440
|
const positioned = positionByIntrinsicSkeleton(bag, source, secrets, secretExpressions);
|
|
10294
10441
|
if (positioned !== void 0) return positioned;
|
|
10295
10442
|
}
|
|
10296
|
-
if (
|
|
10443
|
+
if (Array.isArray(bag) && Array.isArray(source)) {
|
|
10444
|
+
const key = identityKeyFor(bag, source);
|
|
10445
|
+
if (key !== void 0) {
|
|
10446
|
+
const sourceIndexById = /* @__PURE__ */ new Map();
|
|
10447
|
+
source.forEach((item, i) => {
|
|
10448
|
+
sourceIndexById.set(item[key], i);
|
|
10449
|
+
});
|
|
10450
|
+
let orderPreserved = true;
|
|
10451
|
+
const partnerIndex = bag.map((item, i) => {
|
|
10452
|
+
const j = sourceIndexById.get(item[key]);
|
|
10453
|
+
if (j === void 0) return -1;
|
|
10454
|
+
if (j !== i) orderPreserved = false;
|
|
10455
|
+
return j;
|
|
10456
|
+
});
|
|
10457
|
+
const positionalIsExact = rules.descendArrays && bag.length === source.length && orderPreserved;
|
|
10458
|
+
return bag.map((item, i) => {
|
|
10459
|
+
const j = partnerIndex[i];
|
|
10460
|
+
if (j >= 0) return redactByPath(item, source[j], secrets, rules, secretExpressions);
|
|
10461
|
+
if (positionalIsExact) return redactByPath(item, source[i], secrets, rules, secretExpressions);
|
|
10462
|
+
return redactSecretsForState(item, secrets);
|
|
10463
|
+
});
|
|
10464
|
+
}
|
|
10465
|
+
if (rules.descendArrays && bag.length === source.length) return bag.map((item, i) => redactByPath(item, source[i], secrets, rules, secretExpressions));
|
|
10466
|
+
}
|
|
10297
10467
|
if (isPlainObject$2(bag) && isPlainObject$2(source)) {
|
|
10298
10468
|
const out = {};
|
|
10299
10469
|
for (const [k, v] of Object.entries(bag)) out[k] = Object.hasOwn(source, k) ? redactByPath(v, source[k], secrets, rules, secretExpressions) : redactSecretsForState(v, secrets);
|
|
@@ -10319,6 +10489,7 @@ function redactSecretsForState(bag, secrets, source, rules = TEMPLATE_DERIVED_RU
|
|
|
10319
10489
|
if (typeof value === "string") {
|
|
10320
10490
|
const whole = wholeValueExpr(value);
|
|
10321
10491
|
if (whole !== void 0) return whole;
|
|
10492
|
+
if (isSingleDynamicReferenceToken(value)) return value;
|
|
10322
10493
|
if (!regex) return value;
|
|
10323
10494
|
regex.lastIndex = 0;
|
|
10324
10495
|
if (!regex.test(value)) return value;
|
|
@@ -10342,13 +10513,23 @@ function redactSecretsForState(bag, secrets, source, rules = TEMPLATE_DERIVED_RU
|
|
|
10342
10513
|
* changed, or the input by identity when there are no secrets — so callers can
|
|
10343
10514
|
* detect a no-op cheaply. Shared by the deploy engine's save choke point and
|
|
10344
10515
|
* the `cdkd scrub` command so both scrub the same three fields identically.
|
|
10345
|
-
|
|
10346
|
-
|
|
10516
|
+
*
|
|
10517
|
+
* `observedRules` overrides the rules the `observedProperties` walk would
|
|
10518
|
+
* otherwise DERIVE from whether a `sourceProperties` bag was supplied. Exactly
|
|
10519
|
+
* one caller needs it and the reason is not obvious, so it is a parameter
|
|
10520
|
+
* rather than another derivation: `cdkd scrub` has already repositioned
|
|
10521
|
+
* `properties` against TODAY's template by the time it calls this, so the
|
|
10522
|
+
* "record's own properties" this walk falls back to are no longer the same
|
|
10523
|
+
* GENERATION as the observed bag beside them (issue #1917 review). Left
|
|
10524
|
+
* unspecified, the derivation below is right for every other caller, whose
|
|
10525
|
+
* `properties` reach this function untouched.
|
|
10526
|
+
*/
|
|
10527
|
+
function scrubResourceRecord(record, secrets, sourceProperties, observedRules) {
|
|
10347
10528
|
if (secrets.size === 0 && sourceProperties === void 0 && !record.observedProperties) return record;
|
|
10348
10529
|
const next = { ...record };
|
|
10349
10530
|
next.properties = redactSecretsForState(record.properties, secrets, sourceProperties);
|
|
10350
10531
|
if (record.attributes) next.attributes = redactSecretsForState(record.attributes, secrets);
|
|
10351
|
-
if (record.observedProperties) next.observedProperties = redactSecretsForState(record.observedProperties, secrets, sourceProperties ?? next.properties, sourceProperties === void 0 ? STATE_SOURCED_READBACK_RULES :
|
|
10532
|
+
if (record.observedProperties) next.observedProperties = redactSecretsForState(record.observedProperties, secrets, sourceProperties ?? next.properties, observedRules ?? (sourceProperties === void 0 ? STATE_SOURCED_READBACK_RULES : TEMPLATE_SOURCED_RULES));
|
|
10352
10533
|
return next;
|
|
10353
10534
|
}
|
|
10354
10535
|
/**
|
|
@@ -14895,7 +15076,7 @@ var CloudControlProvider = class {
|
|
|
14895
15076
|
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);
|
|
14896
15077
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
14897
15078
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
14898
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
15079
|
+
const { ASGProvider } = await import("./asg-provider-SQ0V0nFd.js").then((n) => n.n);
|
|
14899
15080
|
return await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
|
|
14900
15081
|
}
|
|
14901
15082
|
const isProtectedEc2Instance = context?.removeProtection === true && resourceType === "AWS::EC2::Instance";
|
|
@@ -21526,16 +21707,22 @@ async function resolveReplayProps(props, resolver, secrets) {
|
|
|
21526
21707
|
* deploy reports a change that never converges — the same defect the four
|
|
21527
21708
|
* deploy-side writers had, arriving here through the replay instead.
|
|
21528
21709
|
*
|
|
21529
|
-
* It takes `STATE_DERIVED_RULES`, which is
|
|
21710
|
+
* It takes `STATE_DERIVED_RULES`, which is every relaxation. The source is a
|
|
21530
21711
|
* persisted record, so it holds no PUBLIC expressions (a `String` ssm reference
|
|
21531
21712
|
* is stored resolved) and any `{{resolve:...}}` in it is by construction a
|
|
21532
21713
|
* secret — that is `trustAnyExpression`. And the bag WAS produced by resolving
|
|
21533
21714
|
* that source (`resolveReplayProps` -> the provider's `effectiveProperties`),
|
|
21534
21715
|
* so the two have identical structure and positional array descent is sound —
|
|
21535
|
-
* that is `descendArrays`.
|
|
21536
|
-
*
|
|
21537
|
-
*
|
|
21538
|
-
*
|
|
21716
|
+
* that is `descendArrays`. It is also the SAME generation, resolved one
|
|
21717
|
+
* statement earlier in this call — that is `sourceIsSameGeneration`, and this
|
|
21718
|
+
* writer is one of only two that can honestly claim it.
|
|
21719
|
+
*
|
|
21720
|
+
* Using `STATE_SOURCED_READBACK_RULES` here reads plausible and is wrong in the
|
|
21721
|
+
* quiet direction: it turns positional array descent off. Since issue #1915 a
|
|
21722
|
+
* `Tags[]` / ECS `Environment[]` element is reached by KEYED descent either
|
|
21723
|
+
* way, so the concrete loss is narrower than it was — it is a list whose
|
|
21724
|
+
* elements carry no `Name` / `Key` identity, which only positional descent can
|
|
21725
|
+
* walk.
|
|
21539
21726
|
*
|
|
21540
21727
|
* No-op when the op resolved no secret.
|
|
21541
21728
|
*/
|
|
@@ -22107,7 +22294,7 @@ const FLUSH_INTERVAL_MS = 2e3;
|
|
|
22107
22294
|
const FLUSH_EVENT_THRESHOLD = 50;
|
|
22108
22295
|
/** Build-time cdkd version, with a dev fallback for non-built contexts. */
|
|
22109
22296
|
function getCdkdVersion() {
|
|
22110
|
-
return "0.283.
|
|
22297
|
+
return "0.283.31";
|
|
22111
22298
|
}
|
|
22112
22299
|
/**
|
|
22113
22300
|
* Generate a time-sortable unique run id, e.g.
|
|
@@ -24489,5 +24676,5 @@ var DeployEngine = class {
|
|
|
24489
24676
|
};
|
|
24490
24677
|
|
|
24491
24678
|
//#endregion
|
|
24492
|
-
export { coerceCfnBoolean as $,
|
|
24493
|
-
//# sourceMappingURL=deploy-engine-
|
|
24679
|
+
export { coerceCfnBoolean as $, __exportAll as $n, getLegacyStateBucketName as $t, cyan as A, DeployCancelledError as An, buildAssetRedirectMap as At, findSilentDropProperties as B, ResourceUpdateNotSupportedError as Bn, validateAssetBucketName as Bt, makeCanonicalizePropertiesFn as C, getAwsClients as Cn, LockManager as Ct, renderStatefulReason as D, CdkdError as Dn, AssetPublisher as Dt, isStatefulRecreateTargetSync as E, AssetError as En, shouldRetainResource as Et, IAMRoleProvider as F, MissingCdkCliError as Fn, AssetModeResolver as Ft, IntrinsicFunctionResolver as G, formatError as Gn, getDockerCmd as Gt, slowCcOperationTimeoutMs as H, StackTerminationProtectionError as Hn, buildDenyExternalAccessPolicy as Ht, collectInlinePolicyNamesManagedBySiblings as I, NestedStackChildDirectDestroyError as In, BOOTSTRAP_MARKER_PREFIX as It, refStateLookupFromResource as J, withErrorHandling as Jn, AssetManifestLoader as Jt, cfnRefValueFromPhysicalId as K, isCdkdError as Kn, runDockerForeground as Kt, clearOnUpdateRemoval as L, PartialFailureError as Ln, ensureAssetStorage as Lt, green as M, LocalMigrateError as Mn, loadPublishableAssetManifest as Mt, red as N, LocalStartServiceError as Nn, rewriteTemplateAssetReferences as Nt, formatResourceLine as O, ConfigError as On, stringifyValue as Ot, yellow as P, LockError as Pn, escapeRegExp$1 as Pt, assertRegionMatch as Q, markNonRetryable as Qn, getDefaultStateBucketName as Qt, ProviderRegistry as R, ProvisioningError as Rn, getBootstrapMarkerKey as Rt, unsupportedFinalSnapshotError as S, AwsClients as Sn, TemplateParser as St, MULTI_REGION_RECREATE_BLOCKED_TYPES as T, setAwsClients as Tn, rebuildClientForBucketRegion as Tt, disableInstanceApiTermination as U, StateError as Un, buildDockerImage as Ut, CloudControlProvider as V, StackHasActiveImportsError as Vn, validateContainerRepoName as Vt, isTerminationProtectionPropagationError as W, SynthesisError as Wn, formatDockerLoginError as Wt, normalizeAwsTagsToCfn as X, isRetryableTransientError as Xn, Synthesizer as Xt, WAFv2WebACLProvider as Y, isMarkedNonRetryable as Yn, getDockerImageBySourceHash as Yt, resolveExplicitPhysicalId as Z, isThrottlingError as Zn, synthesisStatusMessage as Zt, buildFinalSnapshotIdentifier as _, derivePartitionAndUrlSuffix as _n, DiffCalculator as _t, DeploymentEventsStore as a, resolveStateBucketWithDefaultAndSource as an, requireConfigObject as at, isFinalSnapshotError as b, clearBucketRegionCache as bn, withRetry as bt, replayFailedOperations as c, warnDeprecatedNoPrefixCliFlag as cn, TEMPLATE_SOURCED_RULES as ct, deleteSkipReason as d, MIGRATE_TMP_PREFIX as dn, s3BucketArn as dt, resolveApp as en, configBooleanRefusal as et, withResourceDeadline as f, findLargeInlineResources as fn, s3BucketDomainName as ft, PRE_DELETE_SNAPSHOT_TYPES as g, canonicalizeRegion as gn, applyRoleArnIfSet as gt, ATOMIC_FINAL_SNAPSHOT_TYPES as h, PARTITION_TABLE as hn, s3BucketWebsiteUrl as ht, DeploymentEventsReader as i, resolveStateBucketWithDefault as in, requireConfigArray as it, gray as j, LocalInvokeBuildError as jn, createAssetRedirectResolver as jt, bold as k, DependencyError as kn, WorkGraph as kt, replayRollback as l, CFN_TEMPLATE_BODY_LIMIT as ln, redactSecretsForState as lt, computeImplicitDeleteEdges as m, expectedOwnerParam as mn, s3BucketRegionalDomainName as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, resolveCaptureObservedState as nn, readConfigString as nt, planFailedOps as o, resolveUseCdkBootstrapAssets as on, requireConfigString as ot, IMPLICIT_DELETE_DEPENDENCIES as p, uploadCfnTemplate as pn, s3BucketDualStackDomainName as pt, getAccountInfo as q, normalizeAwsError as qn, runDockerStreaming as qt, DeployEngine as r, resolveSkipPrefix as rn, replayWarn as rt, planRollback as s, stateBucketExistenceConfirmed as sn, STATE_SOURCED_CROSS_GENERATION_RULES as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, resolveAutoAssetStorage as tn, configStringRefusal as tt, UNSPECIFIED_SKIP_REASON as u, CFN_TEMPLATE_URL_LIMIT as un, scrubResourceRecord as ut, ccRoutedFinalSnapshotError as v, AssemblyReader as vn, INTRINSIC_KEYS as vt, extractDeploymentEventError as w, resetAwsClients as wn, S3StateBackend as wt, refusesFinalSnapshot as x, resolveBucketRegion as xn, DagBuilder as xt, createPreDeleteFinalSnapshot as y, processStackMessages as yn, describeTypeWithThrottleRetry as yt, findActionableSilentDrops as z, ResourceTimeoutError as zn, parseBootstrapMarker as zt };
|
|
24680
|
+
//# sourceMappingURL=deploy-engine-AWFiXyhp.js.map
|