@go-to-k/cdkd 0.299.3 → 0.299.4
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-CsBxbRlH.js → asg-provider-BtUUjRnI.js} +2 -2
- package/dist/{asg-provider-CsBxbRlH.js.map → asg-provider-BtUUjRnI.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-DEBgHf6Z.js → deploy-engine-DWIbDQdg.js} +708 -150
- package/dist/deploy-engine-DWIbDQdg.js.map +1 -0
- package/dist/{iam-role-provider-CXfEJz94.js → iam-role-provider-DTQlG8qe.js} +2 -2
- package/dist/{iam-role-provider-CXfEJz94.js.map → iam-role-provider-DTQlG8qe.js.map} +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{neptune-provider-C81KkPPG.js → neptune-provider-Bkrw65eO.js} +2 -2
- package/dist/{neptune-provider-C81KkPPG.js.map → neptune-provider-Bkrw65eO.js.map} +1 -1
- package/dist/{program-B4pWdUfl.js → program-B4_qJpAO.js} +31 -12
- package/dist/program-B4_qJpAO.js.map +1 -0
- package/dist/{provider-classes-BFHOZwKd.js → provider-classes-SNKb1al7.js} +8 -7
- package/dist/{provider-classes-BFHOZwKd.js.map → provider-classes-SNKb1al7.js.map} +1 -1
- package/dist/{rds-provider-d15q7Rp5.js → rds-provider-B9gz-giS.js} +2 -2
- package/dist/{rds-provider-d15q7Rp5.js.map → rds-provider-B9gz-giS.js.map} +1 -1
- package/dist/{version-B7Gzz6TR.js → version-B-AQELPJ.js} +2 -2
- package/dist/{version-B7Gzz6TR.js.map → version-B-AQELPJ.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-DEBgHf6Z.js.map +0 -1
- package/dist/program-B4pWdUfl.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { r as getAwsClients, s as __exportAll } from "./aws-clients-Bj7qH5Ph.js"
|
|
|
2
2
|
import { A as UNRENDERABLE, C as looksLikeCdkdGeneratedName, E as withoutGeneratedFallbackName, F as displayStackName, H as truncateCodePoints, I as isPasteableIdent, M as displayAwsMessage, N as displayIdent, O as SECRET_REF_MAX_CODE_POINTS, P as displaySafe, R as plainIdentOr, S as getCurrentStackName, T as withStackName, V as terminalSafe, a as getLogger, b as generateResourceNameWithFallback, d as installLogLineMaskerSource, f as getLiveRenderer, g as applyDefaultNameForFallback, k as STACK_REF_MAX_CODE_POINTS, o as isStdoutReservedForPayload, r as safeStringify$1, t as describeAwsFailure, u as currentLogLineMasker, v as explicitNamePropertyFor, w as withSkipPrefix, x as getCurrentSkipPrefix, y as generateResourceName, z as safeMsg } from "./aws-failure-text-DtvlUugx.js";
|
|
3
3
|
import { $ as protectedReplacementAdvice, $n as isAmbiguousOutcomeError, $t as credentialFingerprint, A as isQuotableImportValue, An as UNSHOWABLE_VALUE, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bn as withheldTargetClause, Bt as recoveryCommandFlags, Ct as RETRY_AUXILIARY_OWNER, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as physicalIdShownBesideCommand, G as runDeleteAttempt, Gn as isNameCollisionErrorFrom, H as observeThenDisableProtection, Ht as CUSTOM_RESOURCE_RESPONSE_PREFIX, In as plainOrDescribed, J as DELETION_PROTECTION_DOC_POINTER, Jn as isReplayedNameCollisionFrom, Kn as isNameCooldownError, L as ProtectionFlipRegistry, Ln as quotedOrDescribed, Lt as formatLockExpiry, M as quotedRemedyLogicalId, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as isInertUnquoted, Nt as UNREPRODUCIBLE_LOCK_CLAUSE, On as SHELL_ACTIVE, Ot as hasCreatedBeforeFailure, Pn as pasteableCommand, Pt as buildForceUnlockCommand, Q as pasteableAwsCommand, Qn as isAmbiguousCcHandlerErrorCode, Qt as clientDefaultsFor, R as compensateProtectionFlip, Rn as shellBoundedDisplay, Rt as formatLockOperation, Sn as SynthesisError, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, Tn as normalizeAwsError, U as protectionFlipKey, Un as isUpdateUnsupportedError, Ut as DEFAULT_STATE_PREFIX, Vt as sanitizeRecoveryValue, Wn as hasReplayMayCollide, Wt as injectiveKey, Xn as markReplayMayCollide, Xt as ambientClientDefaults, Yt as withPasteableAwsProfile, Zn as formatRetryClassificationSignals, Zt as ambientCredentialConfig, _n as ResourceTimeoutError, _t as createMaskedLogSinks, an as DependencyError, ar as isMarkedNonRetryable, at as startInterruptWatch, bt as maskDeep, cn as IntrinsicResolutionRefusalError, cr as markRedactedCause, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dn as LockError, en as AccountIdUnavailableError, er as isIamPropagationError, f as removalWarning, fn as MacroExpansionError, ft as logicalIdShown, gn as ProvisioningError, gt as stateOrphanRecordRemedy, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CrossAccountSecretRefusalError, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jn as commandHole, jt as markAuxiliaryFailure, kn as SHELL_ACTIVE_WHY, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, lr as wrapMaskedAwsError, m as withoutInjectedRemovals, mt as resourceTypeShown, nn as CdkdError, nr as isTransientServerError, or as isThrottlingError, ot as ElapsedBudgetRegistry, pn as MalformedProducerRecordRefusalError, qn as isRecreateRetryableError, qt as producerRecordKey, rr as retryClassificationText, sn as DynamicReferenceRegionAmbiguousError, sr as markNonRetryable, st as monotonicNowMs, tn as AssetError, tr as isRetryableTransientError, ut as compositeIdSeparatorRefusal, vn as ResourceUpdateNotSupportedError, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wt as carryCreatedBeforeFailure, xn as StateError, xt as maskerOrIdentity, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as shellQuote, zt as formatLockOwner } from "./iam-policy-targets-Pn2m0R67.js";
|
|
4
4
|
import { a as setAssumedRoleCredentials, i as getPreAssumeEnvCredentials, n as awsClientDefaults, o as setPreAssumeEnvCredentials, r as getAssumedRoleCredentials, s as ambientRegion, t as SECOND_ROLE_PUBLISH_REFUSAL } from "./aws-client-defaults-DBXBcg0J.js";
|
|
5
|
-
import { t as getCdkdVersion } from "./version-
|
|
5
|
+
import { t as getCdkdVersion } from "./version-B-AQELPJ.js";
|
|
6
6
|
import { createHash, randomUUID } from "node:crypto";
|
|
7
7
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
8
8
|
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketLifecycleConfigurationCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -5427,6 +5427,46 @@ async function readEarlierStateResources(s3, bucket, owner, key, max) {
|
|
|
5427
5427
|
}
|
|
5428
5428
|
}))).filter((r) => r !== void 0);
|
|
5429
5429
|
}
|
|
5430
|
+
async function keyMayHaveVersions(s3, bucket, owner, key) {
|
|
5431
|
+
try {
|
|
5432
|
+
const listed = await s3.send(new ListObjectVersionsCommand({
|
|
5433
|
+
Bucket: bucket,
|
|
5434
|
+
...await owner(),
|
|
5435
|
+
Prefix: key,
|
|
5436
|
+
EncodingType: "url",
|
|
5437
|
+
MaxKeys: 1
|
|
5438
|
+
}));
|
|
5439
|
+
return (listed.Versions ?? []).length + (listed.DeleteMarkers ?? []).length > 0 || listed.IsTruncated === true;
|
|
5440
|
+
} catch {
|
|
5441
|
+
return true;
|
|
5442
|
+
}
|
|
5443
|
+
}
|
|
5444
|
+
async function listVersionedSubdirectories(s3, bucket, owner, prefix) {
|
|
5445
|
+
const out = [];
|
|
5446
|
+
let keyMarker;
|
|
5447
|
+
let versionIdMarker;
|
|
5448
|
+
for (;;) {
|
|
5449
|
+
const listed = await s3.send(new ListObjectVersionsCommand({
|
|
5450
|
+
Bucket: bucket,
|
|
5451
|
+
...await owner(),
|
|
5452
|
+
Prefix: prefix,
|
|
5453
|
+
Delimiter: "/",
|
|
5454
|
+
EncodingType: "url",
|
|
5455
|
+
...keyMarker !== void 0 && { KeyMarker: keyMarker },
|
|
5456
|
+
...versionIdMarker !== void 0 && { VersionIdMarker: versionIdMarker }
|
|
5457
|
+
}));
|
|
5458
|
+
for (const cp of listed.CommonPrefixes ?? []) {
|
|
5459
|
+
const decoded = decodeListingKey(cp.Prefix);
|
|
5460
|
+
if (decoded === void 0 || !decoded.startsWith(prefix)) continue;
|
|
5461
|
+
const segment = decoded.slice(prefix.length).replace(/\/$/, "");
|
|
5462
|
+
if (segment !== "") out.push(segment);
|
|
5463
|
+
}
|
|
5464
|
+
if (listed.IsTruncated !== true) return out;
|
|
5465
|
+
if (listed.NextKeyMarker === void 0) throw new Error("a truncated version listing returned no NextKeyMarker");
|
|
5466
|
+
keyMarker = decodeListingKey(listed.NextKeyMarker);
|
|
5467
|
+
versionIdMarker = listed.NextVersionIdMarker;
|
|
5468
|
+
}
|
|
5469
|
+
}
|
|
5430
5470
|
|
|
5431
5471
|
//#endregion
|
|
5432
5472
|
//#region src/state/retained-time.ts
|
|
@@ -5513,6 +5553,7 @@ function legacyProbeBelongsTo(probe, region) {
|
|
|
5513
5553
|
}
|
|
5514
5554
|
const KEPT_AT_CLOCK_TOLERANCE_MS = 2e3;
|
|
5515
5555
|
const ROLLBACK_JOURNAL_OBJECT_DESCRIPTION = "the rollback journal, whose `failedOperations[].attemptedProperties` records the properties of the failed write verbatim";
|
|
5556
|
+
const STATE_RECORD_OBJECT_DESCRIPTION = "the stack's state record, which carries every resource's recorded properties and attributes";
|
|
5516
5557
|
var S3StateBackend = class S3StateBackend {
|
|
5517
5558
|
logger = getLogger().child("S3StateBackend");
|
|
5518
5559
|
s3Client;
|
|
@@ -5767,6 +5808,49 @@ var S3StateBackend = class S3StateBackend {
|
|
|
5767
5808
|
await this.deleteRollbackJournal(stackName, region);
|
|
5768
5809
|
}
|
|
5769
5810
|
}
|
|
5811
|
+
async purgeDeletedStateHistory(stackName, region) {
|
|
5812
|
+
try {
|
|
5813
|
+
await this.ensureClientForBucket();
|
|
5814
|
+
const stateKey = this.getStateKey(stackName, region);
|
|
5815
|
+
const shown = displayStackName(stackName);
|
|
5816
|
+
let recordBack;
|
|
5817
|
+
try {
|
|
5818
|
+
recordBack = await this.headObject(stateKey);
|
|
5819
|
+
} catch {
|
|
5820
|
+
recordBack = true;
|
|
5821
|
+
}
|
|
5822
|
+
if (recordBack) {
|
|
5823
|
+
this.logger.warn(safeMsg`Kept the earlier versions of the state record for ${shown}: the record exists again, or its absence could not be confirmed, so they may belong to a live record.`);
|
|
5824
|
+
return;
|
|
5825
|
+
}
|
|
5826
|
+
const keys = [stateKey];
|
|
5827
|
+
const legacyKey = this.getLegacyStateKey(stackName);
|
|
5828
|
+
const mayHave = (key) => keyMayHaveVersions(this.s3Client, this.config.bucket, () => this.ownerParam(), key);
|
|
5829
|
+
if (await mayHave(legacyKey)) {
|
|
5830
|
+
const legacyProbe = await this.probeLegacyState(stackName);
|
|
5831
|
+
const keptBecause = legacyProbe.kind === "unreadable" ? `the legacy record could not be read (${legacyProbe.reason})` : legacyProbe.kind !== "absent" ? "its current body belongs to another record of the stack" : await this.otherRegionHistoryState(stackName, region, mayHave);
|
|
5832
|
+
if (keptBecause === "none") keys.push(legacyKey);
|
|
5833
|
+
else {
|
|
5834
|
+
const why = keptBecause === "exists" ? "another region of the stack still has state record versions, current or earlier, and the legacy versions may be that region's" : keptBecause === "unknown" ? "could not list the stack's other regions to confirm none of them still owns that history" : keptBecause;
|
|
5835
|
+
this.logger.warn(safeMsg`Kept the earlier versions of the legacy state record for ${shown}: ${why}. cdkd state destroy purges them only once no other region of the stack has state record versions and the legacy record can be read; otherwise delete them by hand.`);
|
|
5836
|
+
}
|
|
5837
|
+
}
|
|
5838
|
+
await this.purgeNoncurrentVersions(keys, { objectDescription: STATE_RECORD_OBJECT_DESCRIPTION });
|
|
5839
|
+
} catch (error) {
|
|
5840
|
+
this.logger.warn(safeMsg`Could not purge the earlier versions of the state record for ${displayStackName(stackName)}: ${describeAwsFailure(error).summary}. They remain readable via GetObject with a VersionId.`);
|
|
5841
|
+
}
|
|
5842
|
+
}
|
|
5843
|
+
async otherRegionHistoryState(stackName, region, mayHave) {
|
|
5844
|
+
const stackPrefix = `${this.config.prefix}/${stackName}/`;
|
|
5845
|
+
try {
|
|
5846
|
+
const regions = (await listVersionedSubdirectories(this.s3Client, this.config.bucket, () => this.ownerParam(), stackPrefix)).filter((segment) => segment !== region);
|
|
5847
|
+
for (const other of regions) if (await mayHave(this.getStateKey(stackName, other))) return "exists";
|
|
5848
|
+
return "none";
|
|
5849
|
+
} catch (error) {
|
|
5850
|
+
this.logger.debug(safeMsg`Could not list the other regions of ${displayStackName(stackName)}: ${displaySafe(describeAwsFailure(error).detail, { asciiOnly: true }) || "<unrenderable>"}`);
|
|
5851
|
+
return "unknown";
|
|
5852
|
+
}
|
|
5853
|
+
}
|
|
5770
5854
|
async deleteLegacyState(stackName) {
|
|
5771
5855
|
await this.ensureClientForBucket();
|
|
5772
5856
|
const key = this.getLegacyStateKey(stackName);
|
|
@@ -7189,7 +7273,7 @@ const WHOLE_DYNAMIC_REFERENCE_PATTERN = new RegExp(`^\\{\\{resolve:${DYNAMIC_REF
|
|
|
7189
7273
|
function isSingleDynamicReferenceToken(value) {
|
|
7190
7274
|
return WHOLE_DYNAMIC_REFERENCE_PATTERN.test(value);
|
|
7191
7275
|
}
|
|
7192
|
-
function isPlainObject$
|
|
7276
|
+
function isPlainObject$7(value) {
|
|
7193
7277
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
7194
7278
|
}
|
|
7195
7279
|
|
|
@@ -7438,7 +7522,7 @@ function crossStackSourceKey(source) {
|
|
|
7438
7522
|
}
|
|
7439
7523
|
if (key === "Fn::GetStackOutput") {
|
|
7440
7524
|
const args = source[key];
|
|
7441
|
-
if (!isPlainObject$
|
|
7525
|
+
if (!isPlainObject$7(args)) return void 0;
|
|
7442
7526
|
const stackName = Object.hasOwn(args, "StackName") ? literalStringOrUndefined(args["StackName"]) : void 0;
|
|
7443
7527
|
const outputName = Object.hasOwn(args, "OutputName") ? literalStringOrUndefined(args["OutputName"]) : void 0;
|
|
7444
7528
|
if (stackName === void 0 || outputName === void 0) return void 0;
|
|
@@ -7484,7 +7568,7 @@ function crossStackSourceKey(source) {
|
|
|
7484
7568
|
let template;
|
|
7485
7569
|
let variables;
|
|
7486
7570
|
if (typeof raw === "string") template = raw;
|
|
7487
|
-
else if (Array.isArray(raw) && raw.length === 2 && isPlainObject$
|
|
7571
|
+
else if (Array.isArray(raw) && raw.length === 2 && isPlainObject$7(raw[1])) {
|
|
7488
7572
|
if (typeof raw[0] !== "string") return void 0;
|
|
7489
7573
|
template = raw[0];
|
|
7490
7574
|
variables = raw[1];
|
|
@@ -7727,12 +7811,12 @@ const UNFRAMED_SPELLING = Symbol("cdkd.nested-parameter.unframed-spelling");
|
|
|
7727
7811
|
function recordNestedStackParameterExpressions(secrets, resourceType, resolvedProperties, sourceProperties, rules = TEMPLATE_DERIVED_RULES) {
|
|
7728
7812
|
if (resourceType !== NESTED_STACK_RESOURCE_TYPE$4) return;
|
|
7729
7813
|
if (secrets.size === 0) return;
|
|
7730
|
-
if (!isPlainObject$
|
|
7814
|
+
if (!isPlainObject$7(resolvedProperties) || !isPlainObject$7(sourceProperties)) return;
|
|
7731
7815
|
if (!Object.hasOwn(resolvedProperties, "Parameters")) return;
|
|
7732
7816
|
if (!Object.hasOwn(sourceProperties, "Parameters")) return;
|
|
7733
7817
|
const resolvedParameters = resolvedProperties["Parameters"];
|
|
7734
7818
|
const sourceParameters = sourceProperties["Parameters"];
|
|
7735
|
-
if (!isPlainObject$
|
|
7819
|
+
if (!isPlainObject$7(resolvedParameters) || !isPlainObject$7(sourceParameters)) return;
|
|
7736
7820
|
const positioned = redactSecretsForState(markSameGenerationBag({ ...resolvedParameters }), secrets, sourceParameters, rules);
|
|
7737
7821
|
let table = nestedStackParameterExpressions.get(secrets);
|
|
7738
7822
|
for (const [name, resolvedValue] of Object.entries(resolvedParameters)) {
|
|
@@ -7781,7 +7865,7 @@ function recordNestedStackParameterExpressions(secrets, resourceType, resolvedPr
|
|
|
7781
7865
|
if (typeof resolvedValue !== "string") return void 0;
|
|
7782
7866
|
const sourceLeaf = sourceParameters[name];
|
|
7783
7867
|
if (typeof sourceLeaf === "string") return sourceLeaf;
|
|
7784
|
-
if (!isPlainObject$
|
|
7868
|
+
if (!isPlainObject$7(sourceLeaf)) return void 0;
|
|
7785
7869
|
const written = positioned[name];
|
|
7786
7870
|
if (typeof written !== "string") return void 0;
|
|
7787
7871
|
const rendered = intrinsicSkeletonSegments(sourceLeaf)?.map((s) => s === UNKNOWN_PART ? "\0" : s).join("");
|
|
@@ -7992,7 +8076,7 @@ function appendValuePlaceholderParts(value, out, budget, depth) {
|
|
|
7992
8076
|
if (budget.exhausted) return;
|
|
7993
8077
|
const literal = joinPartLiteralText(value);
|
|
7994
8078
|
if (literal !== void 0) return pushPlaceholderPart(out, literal, budget);
|
|
7995
|
-
if (isPlainObject$
|
|
8079
|
+
if (isPlainObject$7(value) && Object.keys(value).length === 1) {
|
|
7996
8080
|
const ref = value["Ref"];
|
|
7997
8081
|
if (typeof ref === "string" && ref !== "") return pushPlaceholderPart(out, keyedPart({ Ref: ref }), budget);
|
|
7998
8082
|
if (depth >= MAX_PLACEHOLDER_DEPTH) {
|
|
@@ -8024,7 +8108,7 @@ function appendParameterPlaceholderParts(source, out, budget, depth) {
|
|
|
8024
8108
|
let template;
|
|
8025
8109
|
let variables = {};
|
|
8026
8110
|
if (typeof args === "string") template = args;
|
|
8027
|
-
else if (Array.isArray(args) && args.length === 2 && isPlainObject$
|
|
8111
|
+
else if (Array.isArray(args) && args.length === 2 && isPlainObject$7(args[1])) {
|
|
8028
8112
|
template = args[0];
|
|
8029
8113
|
variables = args[1];
|
|
8030
8114
|
} else return false;
|
|
@@ -8172,7 +8256,7 @@ function isUniquelyKeyedBy(items, key) {
|
|
|
8172
8256
|
if (items.length === 0) return false;
|
|
8173
8257
|
const seen = /* @__PURE__ */ new Set();
|
|
8174
8258
|
for (const item of items) {
|
|
8175
|
-
if (!isPlainObject$
|
|
8259
|
+
if (!isPlainObject$7(item) || !Object.hasOwn(item, key)) return false;
|
|
8176
8260
|
const id = item[key];
|
|
8177
8261
|
if (typeof id !== "string" || id === "") return false;
|
|
8178
8262
|
if (seen.has(id)) return false;
|
|
@@ -8202,11 +8286,11 @@ function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameG
|
|
|
8202
8286
|
}
|
|
8203
8287
|
return positionByEmbeddedSpan(bag, source, secrets, bagIsSameGeneration);
|
|
8204
8288
|
}
|
|
8205
|
-
if ((typeof bag === "string" || Array.isArray(bag)) && isPlainObject$
|
|
8289
|
+
if ((typeof bag === "string" || Array.isArray(bag)) && isPlainObject$7(source)) {
|
|
8206
8290
|
const inherited = positionByInheritedParameter(bag, source, secrets);
|
|
8207
8291
|
if (inherited !== void 0) return inherited;
|
|
8208
8292
|
}
|
|
8209
|
-
if (typeof bag === "string" && isPlainObject$
|
|
8293
|
+
if (typeof bag === "string" && isPlainObject$7(source)) {
|
|
8210
8294
|
const certified = positionByCrossStackSource(bag, source, secrets);
|
|
8211
8295
|
if (certified !== void 0) return certified;
|
|
8212
8296
|
const placeheld = positionByParameterPlaceholders(bag, source, secrets);
|
|
@@ -8216,7 +8300,7 @@ function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameG
|
|
|
8216
8300
|
const framed = positionByIntrinsicFrame(bag, source, secrets, secretExpressions, bagIsSameGeneration);
|
|
8217
8301
|
if (framed !== void 0) return framed;
|
|
8218
8302
|
}
|
|
8219
|
-
if (Array.isArray(bag) && isPlainObject$
|
|
8303
|
+
if (Array.isArray(bag) && isPlainObject$7(source)) {
|
|
8220
8304
|
const positionedList = positionListByCrossStackSource(bag, source, secrets);
|
|
8221
8305
|
if (positionedList !== void 0) return positionedList;
|
|
8222
8306
|
}
|
|
@@ -8244,7 +8328,7 @@ function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameG
|
|
|
8244
8328
|
}
|
|
8245
8329
|
if (rules.descendArrays && bag.length === source.length) return bag.map((item, i) => redactByPath(item, source[i], secrets, rules, secretExpressions, bagIsSameGeneration));
|
|
8246
8330
|
}
|
|
8247
|
-
if (isPlainObject$
|
|
8331
|
+
if (isPlainObject$7(bag) && hasPlainPrototype(bag) && isPlainObject$7(source)) {
|
|
8248
8332
|
const out = Object.create(null);
|
|
8249
8333
|
for (const [k, v] of Object.entries(bag)) out[k] = Object.hasOwn(source, k) ? redactByPath(v, source[k], secrets, rules, secretExpressions, bagIsSameGeneration) : redactSecretsForState(v, secrets);
|
|
8250
8334
|
return out;
|
|
@@ -8257,7 +8341,7 @@ function isReadbackProjectedFromState(rules) {
|
|
|
8257
8341
|
function subtreeHasDynamicReference(value) {
|
|
8258
8342
|
if (isDynamicReferenceString(value)) return true;
|
|
8259
8343
|
if (Array.isArray(value)) return value.some(subtreeHasDynamicReference);
|
|
8260
|
-
if (isPlainObject$
|
|
8344
|
+
if (isPlainObject$7(value)) return Object.values(value).some(subtreeHasDynamicReference);
|
|
8261
8345
|
return false;
|
|
8262
8346
|
}
|
|
8263
8347
|
function pathCrossesDottedKey(bag, path) {
|
|
@@ -8332,8 +8416,8 @@ function deepEqualJsonValue(a, b) {
|
|
|
8332
8416
|
if (!Array.isArray(b) || a.length !== b.length) return false;
|
|
8333
8417
|
return a.every((item, i) => deepEqualJsonValue(item, b[i]));
|
|
8334
8418
|
}
|
|
8335
|
-
if (isPlainObject$
|
|
8336
|
-
if (!isPlainObject$
|
|
8419
|
+
if (isPlainObject$7(a)) {
|
|
8420
|
+
if (!isPlainObject$7(b)) return false;
|
|
8337
8421
|
if (!hasPlainPrototype(a) || !hasPlainPrototype(b)) return false;
|
|
8338
8422
|
const keys = Object.keys(a);
|
|
8339
8423
|
if (keys.length !== Object.keys(b).length) return false;
|
|
@@ -8359,7 +8443,7 @@ function refuseUncertifiedSubtree(value, sourceLiterals, mark, seen = /* @__PURE
|
|
|
8359
8443
|
for (const item of value) out.push(refuseUncertifiedSubtree(item, sourceLiterals, mark, seen));
|
|
8360
8444
|
return out;
|
|
8361
8445
|
}
|
|
8362
|
-
if (isPlainObject$
|
|
8446
|
+
if (isPlainObject$7(value) && hasPlainPrototype(value)) {
|
|
8363
8447
|
const out = Object.create(null);
|
|
8364
8448
|
seen.set(value, out);
|
|
8365
8449
|
for (const [k, v] of Object.entries(value)) out[k] = refuseUncertifiedSubtree(v, sourceLiterals, mark, seen);
|
|
@@ -8387,7 +8471,7 @@ function refuseUncertifiedReadbackPositions(bag, source, secrets, failClosed, le
|
|
|
8387
8471
|
return mark ? POSITION_DECIDED : source;
|
|
8388
8472
|
}
|
|
8389
8473
|
if (!subtreeHasDynamicReference(source)) return bag;
|
|
8390
|
-
if (isPlainObject$
|
|
8474
|
+
if (isPlainObject$7(bag) && hasPlainPrototype(bag) && isPlainObject$7(source)) {
|
|
8391
8475
|
const out = Object.create(null);
|
|
8392
8476
|
for (const [k, v] of Object.entries(bag)) out[k] = Object.hasOwn(source, k) ? refuseUncertifiedReadbackPositions(v, source[k], secrets, failClosed, learn, mark) : v;
|
|
8393
8477
|
return out;
|
|
@@ -8414,14 +8498,14 @@ function refuseUncertifiedReadbackPositions(bag, source, secrets, failClosed, le
|
|
|
8414
8498
|
function isDistinguishingAnchor(value) {
|
|
8415
8499
|
if (typeof value === "string") return value !== "";
|
|
8416
8500
|
if (Array.isArray(value)) return value.some(isDistinguishingAnchor);
|
|
8417
|
-
if (isPlainObject$
|
|
8501
|
+
if (isPlainObject$7(value)) return Object.values(value).some(isDistinguishingAnchor);
|
|
8418
8502
|
return false;
|
|
8419
8503
|
}
|
|
8420
8504
|
const ANCHOR_REFERENCE_MASK = "<ref>";
|
|
8421
8505
|
function anchorSignature(source) {
|
|
8422
8506
|
if (isDynamicReferenceString(source)) return ANCHOR_REFERENCE_MASK;
|
|
8423
8507
|
if (Array.isArray(source)) return `[${source.map(anchorSignature).sort().join(",")}]`;
|
|
8424
|
-
if (isPlainObject$
|
|
8508
|
+
if (isPlainObject$7(source)) return `{${Object.keys(source).sort().map((k) => `${JSON.stringify(k)}:${anchorSignature(source[k])}`).join(",")}}`;
|
|
8425
8509
|
return JSON.stringify(source) ?? "undefined";
|
|
8426
8510
|
}
|
|
8427
8511
|
function anchorsCorroboratePairing(bag, source, anchors) {
|
|
@@ -8431,8 +8515,8 @@ function anchorsCorroboratePairing(bag, source, anchors) {
|
|
|
8431
8515
|
return true;
|
|
8432
8516
|
}
|
|
8433
8517
|
if (isDynamicReferenceString(source)) return typeof bag === "string";
|
|
8434
|
-
if (isPlainObject$
|
|
8435
|
-
if (!isPlainObject$
|
|
8518
|
+
if (isPlainObject$7(source)) {
|
|
8519
|
+
if (!isPlainObject$7(bag)) return false;
|
|
8436
8520
|
return Object.keys(source).every((k) => Object.hasOwn(bag, k) && anchorsCorroboratePairing(bag[k], source[k], anchors));
|
|
8437
8521
|
}
|
|
8438
8522
|
if (Array.isArray(source)) {
|
|
@@ -8523,13 +8607,13 @@ function learnMixedLeafNeedle(collector, bag, source) {
|
|
|
8523
8607
|
learnNeedle(collector, plaintext, token);
|
|
8524
8608
|
}
|
|
8525
8609
|
function asChild(marks, key) {
|
|
8526
|
-
return isPlainObject$
|
|
8610
|
+
return isPlainObject$7(marks) && hasPlainPrototype(marks) ? marks[key] : void 0;
|
|
8527
8611
|
}
|
|
8528
8612
|
function asIndex(marks, index) {
|
|
8529
8613
|
return Array.isArray(marks) ? marks[index] : void 0;
|
|
8530
8614
|
}
|
|
8531
8615
|
function preferPositionDecisions(scanned, refused, bag, marks, inferred) {
|
|
8532
|
-
if (isPlainObject$
|
|
8616
|
+
if (isPlainObject$7(bag) && hasPlainPrototype(bag) && isPlainObject$7(refused) && isPlainObject$7(scanned)) {
|
|
8533
8617
|
const out = Object.create(null);
|
|
8534
8618
|
for (const [k, v] of Object.entries(refused)) out[k] = preferPositionDecisions(scanned[k], v, bag[k], asChild(marks, k), inferred);
|
|
8535
8619
|
return out;
|
|
@@ -9039,6 +9123,11 @@ function passProvenanceFor(secrets, token) {
|
|
|
9039
9123
|
if (entry === void 0) return void 0;
|
|
9040
9124
|
return finalize(entry);
|
|
9041
9125
|
}
|
|
9126
|
+
function passReadVersionsFor(secrets, token) {
|
|
9127
|
+
if (secrets === void 0) return void 0;
|
|
9128
|
+
const read = passProvenanceOf.get(secrets)?.get(token)?.readVersions;
|
|
9129
|
+
return read === void 0 || read.size === 0 ? void 0 : read;
|
|
9130
|
+
}
|
|
9042
9131
|
function finalize(entry) {
|
|
9043
9132
|
const out = {};
|
|
9044
9133
|
if (!entry.regionUnknown && entry.regions.size === 1) out.region = [...entry.regions][0];
|
|
@@ -9648,7 +9737,7 @@ function readsNoEchoSource(node, sources) {
|
|
|
9648
9737
|
if (typeof argument === "string") return subStringReadsNoEcho(argument, void 0, sources);
|
|
9649
9738
|
if (Array.isArray(argument)) {
|
|
9650
9739
|
const [text, variables] = argument;
|
|
9651
|
-
const vars = isPlainObject$
|
|
9740
|
+
const vars = isPlainObject$7(variables) ? variables : void 0;
|
|
9652
9741
|
if (typeof text === "string" && subStringReadsNoEcho(text, vars, sources)) return true;
|
|
9653
9742
|
return vars !== void 0 && Object.values(vars).some(walk);
|
|
9654
9743
|
}
|
|
@@ -9682,7 +9771,7 @@ function noEchoCoordinatesOf(template, resolved, sources, onCoordinate) {
|
|
|
9682
9771
|
parameters: sources.parameters,
|
|
9683
9772
|
...sources.conditions !== void 0 && { conditions: sources.conditions }
|
|
9684
9773
|
};
|
|
9685
|
-
const isBareDeclaredGetAtt = (node) => isPlainObject$
|
|
9774
|
+
const isBareDeclaredGetAtt = (node) => isPlainObject$7(node) && intrinsicKeyOf(node) === "Fn::GetAtt" && getAttReadsNoEcho(node["Fn::GetAtt"], sources);
|
|
9686
9775
|
const walk = (source, value, path) => {
|
|
9687
9776
|
if (value === void 0) return;
|
|
9688
9777
|
if (source === null || typeof source !== "object") return;
|
|
@@ -9698,7 +9787,7 @@ function noEchoCoordinatesOf(template, resolved, sources, onCoordinate) {
|
|
|
9698
9787
|
const record = source;
|
|
9699
9788
|
const intrinsic = intrinsicKeyOf(record);
|
|
9700
9789
|
if (intrinsic === void 0) {
|
|
9701
|
-
if (!isPlainObject$
|
|
9790
|
+
if (!isPlainObject$7(value)) {
|
|
9702
9791
|
if (readsNoEchoSource(record, parametersOnly)) push(path, source);
|
|
9703
9792
|
return;
|
|
9704
9793
|
}
|
|
@@ -9746,7 +9835,7 @@ function maskWholeValue(value) {
|
|
|
9746
9835
|
if (value === null || value === void 0) return value;
|
|
9747
9836
|
if (typeof value === "string" && isSingleDynamicReferenceToken(value)) return value;
|
|
9748
9837
|
if (Array.isArray(value)) return value.map(maskWholeValue);
|
|
9749
|
-
if (isPlainObject$
|
|
9838
|
+
if (isPlainObject$7(value)) {
|
|
9750
9839
|
const out = {};
|
|
9751
9840
|
for (const [key, child] of Object.entries(value)) Object.defineProperty(out, key, {
|
|
9752
9841
|
value: maskWholeValue(child),
|
|
@@ -9769,7 +9858,7 @@ function readAt(bag, coordinate) {
|
|
|
9769
9858
|
node = node[segment];
|
|
9770
9859
|
continue;
|
|
9771
9860
|
}
|
|
9772
|
-
if (!isPlainObject$
|
|
9861
|
+
if (!isPlainObject$7(node) || !Object.hasOwn(node, segment)) return {
|
|
9773
9862
|
found: false,
|
|
9774
9863
|
value: void 0
|
|
9775
9864
|
};
|
|
@@ -9785,7 +9874,7 @@ function valueAtCoordinate(bag, coordinate) {
|
|
|
9785
9874
|
}
|
|
9786
9875
|
function cloneContainer(node) {
|
|
9787
9876
|
if (Array.isArray(node)) return [...node];
|
|
9788
|
-
if (isPlainObject$
|
|
9877
|
+
if (isPlainObject$7(node)) return { ...node };
|
|
9789
9878
|
return node;
|
|
9790
9879
|
}
|
|
9791
9880
|
function maskAtCoordinates(bag, coordinates) {
|
|
@@ -9852,20 +9941,20 @@ function readbackPathFor(readback, properties, coordinate) {
|
|
|
9852
9941
|
if (!Array.isArray(live)) return path.length === 0 ? void 0 : path;
|
|
9853
9942
|
const key = Array.isArray(desired) ? identityKeyFor(live, desired) : void 0;
|
|
9854
9943
|
const element = Array.isArray(desired) ? desired[segment] : void 0;
|
|
9855
|
-
if (key === void 0 || !isPlainObject$
|
|
9944
|
+
if (key === void 0 || !isPlainObject$7(element)) return path;
|
|
9856
9945
|
const identity = element[key];
|
|
9857
|
-
const index = live.findIndex((item) => isPlainObject$
|
|
9946
|
+
const index = live.findIndex((item) => isPlainObject$7(item) && item[key] === identity);
|
|
9858
9947
|
if (index < 0) return path;
|
|
9859
9948
|
path.push(index);
|
|
9860
9949
|
live = live[index];
|
|
9861
9950
|
desired = element;
|
|
9862
9951
|
continue;
|
|
9863
9952
|
}
|
|
9864
|
-
if (!isPlainObject$
|
|
9953
|
+
if (!isPlainObject$7(live)) return path.length === 0 ? void 0 : path;
|
|
9865
9954
|
if (!Object.hasOwn(live, segment)) return void 0;
|
|
9866
9955
|
path.push(segment);
|
|
9867
9956
|
live = live[segment];
|
|
9868
|
-
desired = isPlainObject$
|
|
9957
|
+
desired = isPlainObject$7(desired) ? desired[segment] : void 0;
|
|
9869
9958
|
}
|
|
9870
9959
|
return path;
|
|
9871
9960
|
}
|
|
@@ -9894,7 +9983,7 @@ function witnessNormalize(stored, today, v11) {
|
|
|
9894
9983
|
const confirmed = [];
|
|
9895
9984
|
const differing = [];
|
|
9896
9985
|
const walk = (s, t, v, path) => {
|
|
9897
|
-
if (v !== "***" && containsMask(v) && (Array.isArray(v) ? !Array.isArray(s) || s.length !== v.length : isPlainObject$
|
|
9986
|
+
if (v !== "***" && containsMask(v) && (Array.isArray(v) ? !Array.isArray(s) || s.length !== v.length : isPlainObject$7(v) ? !isPlainObject$7(s) : false)) {
|
|
9898
9987
|
if (s === void 0 || containsMask(s)) return s;
|
|
9899
9988
|
if (jsonEqual(s, t)) {
|
|
9900
9989
|
confirmed.push(path);
|
|
@@ -9923,8 +10012,8 @@ function witnessNormalize(stored, today, v11) {
|
|
|
9923
10012
|
});
|
|
9924
10013
|
return changed ? out : s;
|
|
9925
10014
|
}
|
|
9926
|
-
if (isPlainObject$
|
|
9927
|
-
const tt = isPlainObject$
|
|
10015
|
+
if (isPlainObject$7(v) && isPlainObject$7(s)) {
|
|
10016
|
+
const tt = isPlainObject$7(t) ? t : {};
|
|
9928
10017
|
let out;
|
|
9929
10018
|
for (const key of Object.keys(v)) {
|
|
9930
10019
|
if (!Object.hasOwn(s, key)) continue;
|
|
@@ -9947,7 +10036,7 @@ function witnessNormalize(stored, today, v11) {
|
|
|
9947
10036
|
function containsMask(value) {
|
|
9948
10037
|
if (value === "***") return true;
|
|
9949
10038
|
if (Array.isArray(value)) return value.some(containsMask);
|
|
9950
|
-
if (isPlainObject$
|
|
10039
|
+
if (isPlainObject$7(value)) return Object.values(value).some(containsMask);
|
|
9951
10040
|
return false;
|
|
9952
10041
|
}
|
|
9953
10042
|
function jsonEqual(a, b) {
|
|
@@ -9991,7 +10080,7 @@ function noEchoComparison(options) {
|
|
|
9991
10080
|
const out = node.map(walk);
|
|
9992
10081
|
return out.some((item, i) => item !== node[i]) ? out : node;
|
|
9993
10082
|
}
|
|
9994
|
-
if (isPlainObject$
|
|
10083
|
+
if (isPlainObject$7(node)) {
|
|
9995
10084
|
let out;
|
|
9996
10085
|
for (const [key, child] of Object.entries(node)) {
|
|
9997
10086
|
const next = walk(child);
|
|
@@ -12878,7 +12967,7 @@ function probeFoundSameId(resourceType, a, b) {
|
|
|
12878
12967
|
//#region src/provisioning/config-shape.ts
|
|
12879
12968
|
function readConfigString(container, key, fallback, containerPath, options) {
|
|
12880
12969
|
if (container === void 0 || container === null) return fallback;
|
|
12881
|
-
if (!isPlainObject$
|
|
12970
|
+
if (!isPlainObject$6(container) || isUnresolvedIntrinsicContainer(container)) {
|
|
12882
12971
|
const detail = malformedShapeDetail(container);
|
|
12883
12972
|
if (options?.onUnusable) {
|
|
12884
12973
|
const named = fallback === "" ? "" : ` (${fallback})`;
|
|
@@ -12918,7 +13007,7 @@ function requireConfigArray(value, path, options) {
|
|
|
12918
13007
|
return value;
|
|
12919
13008
|
}
|
|
12920
13009
|
function requireConfigObject(value, path, options) {
|
|
12921
|
-
if (!isPlainObject$
|
|
13010
|
+
if (!isPlainObject$6(value) || isUnresolvedIntrinsicContainer(value)) {
|
|
12922
13011
|
const detail = malformedShapeDetail(value);
|
|
12923
13012
|
if (options?.onUnusable) {
|
|
12924
13013
|
options.onUnusable(`${path} must be an object ${detail}. Leaving this configuration unapplied here; the same value is REFUSED on a template-path create.`);
|
|
@@ -12930,7 +13019,7 @@ function requireConfigObject(value, path, options) {
|
|
|
12930
13019
|
}
|
|
12931
13020
|
function configStringRefusal(container, key, fallback, containerPath, options) {
|
|
12932
13021
|
if (container === void 0 || container === null) return void 0;
|
|
12933
|
-
if (!isPlainObject$
|
|
13022
|
+
if (!isPlainObject$6(container) || isUnresolvedIntrinsicContainer(container)) return `${containerPath} must be an object ${malformedShapeDetail(container)}`;
|
|
12934
13023
|
return configValueRefusal(container[key], fallback, `${containerPath}.${key}`, options);
|
|
12935
13024
|
}
|
|
12936
13025
|
function coerceCfnBoolean(value) {
|
|
@@ -12943,7 +13032,7 @@ function coerceCfnBoolean(value) {
|
|
|
12943
13032
|
}
|
|
12944
13033
|
function configBooleanRefusal(container, key, containerPath) {
|
|
12945
13034
|
if (container === void 0 || container === null) return void 0;
|
|
12946
|
-
if (!isPlainObject$
|
|
13035
|
+
if (!isPlainObject$6(container) || isUnresolvedIntrinsicContainer(container)) return `${containerPath} must be an object ${malformedShapeDetail(container)}`;
|
|
12947
13036
|
const value = container[key];
|
|
12948
13037
|
if (value === void 0) return void 0;
|
|
12949
13038
|
if (coerceCfnBoolean(value) !== void 0) return void 0;
|
|
@@ -12957,7 +13046,7 @@ function coerceCfnInteger(value) {
|
|
|
12957
13046
|
}
|
|
12958
13047
|
function configIntegerRefusal(container, key, containerPath, min, max) {
|
|
12959
13048
|
if (container === void 0 || container === null) return void 0;
|
|
12960
|
-
if (!isPlainObject$
|
|
13049
|
+
if (!isPlainObject$6(container) || isUnresolvedIntrinsicContainer(container)) return `${containerPath} must be an object ${malformedShapeDetail(container)}`;
|
|
12961
13050
|
const value = container[key];
|
|
12962
13051
|
if (value === void 0) return void 0;
|
|
12963
13052
|
const n = coerceCfnInteger(value);
|
|
@@ -12971,10 +13060,10 @@ function configValueRefusal(value, fallback, path, options) {
|
|
|
12971
13060
|
if (typeof value !== "string" || value.trim() === "") return `${path} must be a non-empty string ${malformedShapeDetail(value)}`;
|
|
12972
13061
|
}
|
|
12973
13062
|
function malformedShapeDetail(value) {
|
|
12974
|
-
if (isPlainObject$
|
|
13063
|
+
if (isPlainObject$6(value) && isUnresolvedIntrinsicContainer(value)) return `(got ${describe(value)} — nothing substituted it before this call)`;
|
|
12975
13064
|
return `(got ${describe(value)}) — check for an unresolved intrinsic or a mis-nested template value`;
|
|
12976
13065
|
}
|
|
12977
|
-
function isPlainObject$
|
|
13066
|
+
function isPlainObject$6(value) {
|
|
12978
13067
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
12979
13068
|
}
|
|
12980
13069
|
const NAMEABLE_INTRINSIC_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -13001,7 +13090,7 @@ function describe(value) {
|
|
|
13001
13090
|
if (value === null) return "null";
|
|
13002
13091
|
if (Array.isArray(value)) return "an array";
|
|
13003
13092
|
if (typeof value === "string") return value.trim() === "" ? "a blank string" : "a string";
|
|
13004
|
-
if (isPlainObject$
|
|
13093
|
+
if (isPlainObject$6(value) && isUnresolvedIntrinsicContainer(value)) {
|
|
13005
13094
|
const key = Object.keys(value)[0];
|
|
13006
13095
|
return NAMEABLE_INTRINSIC_KEYS.has(key) ? `an unresolved ${key} intrinsic` : "an unresolved intrinsic";
|
|
13007
13096
|
}
|
|
@@ -17891,7 +17980,7 @@ function maskedPropertyFingerprint(templateValue) {
|
|
|
17891
17980
|
return `${FINGERPRINT_PREFIX}${digest}`;
|
|
17892
17981
|
}
|
|
17893
17982
|
var UnknownInput = class extends Error {};
|
|
17894
|
-
function isPlainObject$
|
|
17983
|
+
function isPlainObject$5(value) {
|
|
17895
17984
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
17896
17985
|
}
|
|
17897
17986
|
const DYNAMIC_REFERENCE_OPEN = "{{resolve:";
|
|
@@ -17911,7 +18000,7 @@ function carriesSecretValue(value, corpora) {
|
|
|
17911
18000
|
return false;
|
|
17912
18001
|
}
|
|
17913
18002
|
function parameterInputsFor(args) {
|
|
17914
|
-
const declared = isPlainObject$
|
|
18003
|
+
const declared = isPlainObject$5(args.template.Parameters) ? args.template.Parameters : {};
|
|
17915
18004
|
const values = args.values ?? {};
|
|
17916
18005
|
const inputs = /* @__PURE__ */ new Map();
|
|
17917
18006
|
const bound = {};
|
|
@@ -17922,7 +18011,7 @@ function parameterInputsFor(args) {
|
|
|
17922
18011
|
continue;
|
|
17923
18012
|
}
|
|
17924
18013
|
const value = values[name];
|
|
17925
|
-
let secret = isPlainObject$
|
|
18014
|
+
let secret = isPlainObject$5(definition) && declaresNoEcho(definition) || carriesSecretValue(value, []);
|
|
17926
18015
|
if (!secret && args.nestedChild === true && args.supplied !== void 0) {
|
|
17927
18016
|
if (Object.hasOwn(args.supplied, name)) {
|
|
17928
18017
|
const passed = args.passedClasses?.get(name);
|
|
@@ -17973,7 +18062,7 @@ function intrinsicKey(value) {
|
|
|
17973
18062
|
const OPAQUE_ATTRIBUTE_TYPES = /* @__PURE__ */ new Set(["AWS::CloudFormation::CustomResource", NESTED_STACK_TYPE$4]);
|
|
17974
18063
|
function hasOpaqueAttributes(logicalId, walk) {
|
|
17975
18064
|
const definition = walk.resources[logicalId];
|
|
17976
|
-
const type = isPlainObject$
|
|
18065
|
+
const type = isPlainObject$5(definition) ? definition["Type"] : void 0;
|
|
17977
18066
|
return typeof type === "string" && (type.startsWith("Custom::") || OPAQUE_ATTRIBUTE_TYPES.has(type));
|
|
17978
18067
|
}
|
|
17979
18068
|
function getAttTarget(operand) {
|
|
@@ -17998,7 +18087,7 @@ function taintOf(logicalId, walk) {
|
|
|
17998
18087
|
const visit = (value) => {
|
|
17999
18088
|
if (typeof value === "string") return value.includes(DYNAMIC_REFERENCE_OPEN);
|
|
18000
18089
|
if (Array.isArray(value)) return value.some(visit);
|
|
18001
|
-
if (!isPlainObject$
|
|
18090
|
+
if (!isPlainObject$5(value)) return false;
|
|
18002
18091
|
const key = intrinsicKey(value);
|
|
18003
18092
|
const operand = key === void 0 ? void 0 : value[key];
|
|
18004
18093
|
let verdict = "clean";
|
|
@@ -18010,7 +18099,7 @@ function taintOf(logicalId, walk) {
|
|
|
18010
18099
|
else if (key === "Fn::FindInMap" && mapReadClass(operand, walk.sources.template) !== "clean") verdict = "tainted";
|
|
18011
18100
|
else if (key === "Fn::Sub") {
|
|
18012
18101
|
const text = Array.isArray(operand) ? operand[0] : operand;
|
|
18013
|
-
const vars = Array.isArray(operand) && isPlainObject$
|
|
18102
|
+
const vars = Array.isArray(operand) && isPlainObject$5(operand[1]) ? operand[1] : {};
|
|
18014
18103
|
if (typeof text === "string") for (const name of subPlaceholders(text)) {
|
|
18015
18104
|
if (Object.hasOwn(vars, name)) continue;
|
|
18016
18105
|
const owner = name.includes(".") ? name.split(".")[0] : name;
|
|
@@ -18024,7 +18113,7 @@ function taintOf(logicalId, walk) {
|
|
|
18024
18113
|
return Object.values(value).some(visit);
|
|
18025
18114
|
};
|
|
18026
18115
|
const definition = walk.resources[logicalId];
|
|
18027
|
-
const result = visit(isPlainObject$
|
|
18116
|
+
const result = visit(isPlainObject$5(definition) ? definition["Properties"] : void 0) ? "tainted" : unknown ? "unknown" : "clean";
|
|
18028
18117
|
walk.inProgress.delete(logicalId);
|
|
18029
18118
|
walk.taint.set(logicalId, result);
|
|
18030
18119
|
return result;
|
|
@@ -18040,7 +18129,7 @@ function conditionInput(name, walk) {
|
|
|
18040
18129
|
return typeof verdict === "boolean" ? verdict : "unknown";
|
|
18041
18130
|
}
|
|
18042
18131
|
function conditionClosure(name, walk) {
|
|
18043
|
-
const definitions = isPlainObject$
|
|
18132
|
+
const definitions = isPlainObject$5(walk.sources.template.Conditions) ? walk.sources.template.Conditions : {};
|
|
18044
18133
|
let secret = false;
|
|
18045
18134
|
let unknown = false;
|
|
18046
18135
|
let unread = false;
|
|
@@ -18055,7 +18144,7 @@ function conditionClosure(name, walk) {
|
|
|
18055
18144
|
value.forEach(visit);
|
|
18056
18145
|
return;
|
|
18057
18146
|
}
|
|
18058
|
-
if (!isPlainObject$
|
|
18147
|
+
if (!isPlainObject$5(value)) return;
|
|
18059
18148
|
const keys = Object.keys(value);
|
|
18060
18149
|
if (keys.length === 1 && keys[0] === "Condition" && typeof value["Condition"] === "string") {
|
|
18061
18150
|
pending.push(value["Condition"]);
|
|
@@ -18088,7 +18177,7 @@ function conditionClosure(name, walk) {
|
|
|
18088
18177
|
if (key === "Fn::Sub") {
|
|
18089
18178
|
const operand = value["Fn::Sub"];
|
|
18090
18179
|
const text = Array.isArray(operand) ? operand[0] : operand;
|
|
18091
|
-
const vars = Array.isArray(operand) && isPlainObject$
|
|
18180
|
+
const vars = Array.isArray(operand) && isPlainObject$5(operand[1]) ? operand[1] : {};
|
|
18092
18181
|
if (typeof text === "string") for (const name of subPlaceholders(text)) {
|
|
18093
18182
|
if (Object.hasOwn(vars, name)) continue;
|
|
18094
18183
|
if (name.includes(".") && !name.startsWith("AWS::")) secret = true;
|
|
@@ -18117,8 +18206,8 @@ function mapReadClass(operand, template) {
|
|
|
18117
18206
|
const mapName = Array.isArray(operand) ? operand[0] : void 0;
|
|
18118
18207
|
if (typeof mapName !== "string") return "unknown";
|
|
18119
18208
|
const mappings = template.Mappings;
|
|
18120
|
-
const map = isPlainObject$
|
|
18121
|
-
if (!isPlainObject$
|
|
18209
|
+
const map = isPlainObject$5(mappings) && Object.hasOwn(mappings, mapName) ? mappings[mapName] : void 0;
|
|
18210
|
+
if (!isPlainObject$5(map)) return "unknown";
|
|
18122
18211
|
return carriesSecretValue(map, []) ? "secret" : "clean";
|
|
18123
18212
|
}
|
|
18124
18213
|
async function resolvedInput(node, walk) {
|
|
@@ -18186,7 +18275,7 @@ async function inputForm(value, walk) {
|
|
|
18186
18275
|
concrete: parts.every((p) => p.concrete)
|
|
18187
18276
|
};
|
|
18188
18277
|
}
|
|
18189
|
-
if (!isPlainObject$
|
|
18278
|
+
if (!isPlainObject$5(value)) return {
|
|
18190
18279
|
form: value,
|
|
18191
18280
|
concrete: true
|
|
18192
18281
|
};
|
|
@@ -18249,7 +18338,7 @@ async function inputForm(value, walk) {
|
|
|
18249
18338
|
concrete: false
|
|
18250
18339
|
};
|
|
18251
18340
|
}
|
|
18252
|
-
const explicit = Array.isArray(operand) && isPlainObject$
|
|
18341
|
+
const explicit = Array.isArray(operand) && isPlainObject$5(operand[1]) ? operand[1] : {};
|
|
18253
18342
|
const vars = await inputForm(explicit, walk);
|
|
18254
18343
|
const placeholders = [];
|
|
18255
18344
|
let concrete = vars.concrete && !text.includes(DYNAMIC_REFERENCE_OPEN);
|
|
@@ -18302,8 +18391,8 @@ function newWalk(sources, nested = {
|
|
|
18302
18391
|
}) {
|
|
18303
18392
|
return {
|
|
18304
18393
|
sources,
|
|
18305
|
-
resources: isPlainObject$
|
|
18306
|
-
parameters: isPlainObject$
|
|
18394
|
+
resources: isPlainObject$5(sources.template.Resources) ? sources.template.Resources : {},
|
|
18395
|
+
parameters: isPlainObject$5(sources.template.Parameters) ? sources.template.Parameters : {},
|
|
18307
18396
|
taint: /* @__PURE__ */ new Map(),
|
|
18308
18397
|
inProgress: /* @__PURE__ */ new Set(),
|
|
18309
18398
|
stackChain: nested.stackChain,
|
|
@@ -18327,34 +18416,34 @@ function passedKey(passed) {
|
|
|
18327
18416
|
function isNestedStackRow(logicalId, walk) {
|
|
18328
18417
|
if (!Object.hasOwn(walk.resources, logicalId)) return false;
|
|
18329
18418
|
const definition = walk.resources[logicalId];
|
|
18330
|
-
return isPlainObject$
|
|
18419
|
+
return isPlainObject$5(definition) && definition["Type"] === NESTED_STACK_TYPE$4;
|
|
18331
18420
|
}
|
|
18332
18421
|
function getAttAttribute(operand, target) {
|
|
18333
18422
|
if (Array.isArray(operand)) return operand.length === 2 && typeof operand[1] === "string" ? operand[1] : void 0;
|
|
18334
18423
|
return typeof operand === "string" ? operand.slice(target.length + 1) : void 0;
|
|
18335
18424
|
}
|
|
18336
18425
|
function rowParameters(definition) {
|
|
18337
|
-
const properties = isPlainObject$
|
|
18426
|
+
const properties = isPlainObject$5(definition) ? definition["Properties"] : void 0;
|
|
18338
18427
|
if (properties === void 0) return {};
|
|
18339
|
-
if (!isPlainObject$
|
|
18428
|
+
if (!isPlainObject$5(properties)) return "unknown";
|
|
18340
18429
|
const parameters = properties["Parameters"];
|
|
18341
18430
|
if (parameters === void 0) return {};
|
|
18342
|
-
if (!isPlainObject$
|
|
18431
|
+
if (!isPlainObject$5(parameters) || intrinsicKey(parameters) !== void 0) return "unknown";
|
|
18343
18432
|
return parameters;
|
|
18344
18433
|
}
|
|
18345
18434
|
function childParameterInputs(template, passed) {
|
|
18346
|
-
const declared = isPlainObject$
|
|
18435
|
+
const declared = isPlainObject$5(template.Parameters) ? template.Parameters : {};
|
|
18347
18436
|
const inputs = /* @__PURE__ */ new Map();
|
|
18348
18437
|
for (const name of Object.keys(declared)) {
|
|
18349
18438
|
const definition = declared[name];
|
|
18350
|
-
if (isPlainObject$
|
|
18439
|
+
if (isPlainObject$5(definition) && declaresNoEcho(definition)) inputs.set(name, { kind: "secret" });
|
|
18351
18440
|
else if (passed.has(name)) {
|
|
18352
18441
|
const passedClass = passed.get(name);
|
|
18353
18442
|
inputs.set(name, passedClass === "clean" ? {
|
|
18354
18443
|
kind: "value",
|
|
18355
18444
|
value: void 0
|
|
18356
18445
|
} : passedClass === "unknown" ? { kind: "unknown" } : { kind: "secret" });
|
|
18357
|
-
} else if (isPlainObject$
|
|
18446
|
+
} else if (isPlainObject$5(definition) && Object.hasOwn(definition, "Default") && !carriesSecretValue(definition["Default"], [])) inputs.set(name, {
|
|
18358
18447
|
kind: "value",
|
|
18359
18448
|
value: definition["Default"]
|
|
18360
18449
|
});
|
|
@@ -18371,7 +18460,7 @@ function closureClass(closure) {
|
|
|
18371
18460
|
return closure.unread ? "unread" : "clean";
|
|
18372
18461
|
}
|
|
18373
18462
|
async function childOutputClass(loaded, outputName, passed, chain, shared) {
|
|
18374
|
-
if (loaded === void 0 || !isPlainObject$
|
|
18463
|
+
if (loaded === void 0 || !isPlainObject$5(loaded.template)) return "unknown";
|
|
18375
18464
|
const scopeKey = JSON.stringify([loaded.identity, passedKey(passed)]);
|
|
18376
18465
|
const memoKey = JSON.stringify([scopeKey, outputName]);
|
|
18377
18466
|
const memo = shared.outputs.get(memoKey);
|
|
@@ -18384,8 +18473,8 @@ async function classifyChildOutput(loaded, outputName, passed, chain, shared, sc
|
|
|
18384
18473
|
if (++shared.steps > MAX_NESTED_OUTPUT_STEPS) return "unknown";
|
|
18385
18474
|
if (chain.includes(loaded.identity) || chain.length >= MAX_NESTED_OUTPUT_DEPTH) return "unknown";
|
|
18386
18475
|
const template = loaded.template;
|
|
18387
|
-
const output = (isPlainObject$
|
|
18388
|
-
if (!isPlainObject$
|
|
18476
|
+
const output = (isPlainObject$5(template.Outputs) ? template.Outputs : {})[outputName];
|
|
18477
|
+
if (!isPlainObject$5(output) || !Object.hasOwn(output, "Value")) return "unknown";
|
|
18389
18478
|
const scope = {
|
|
18390
18479
|
walk: newWalk({
|
|
18391
18480
|
template,
|
|
@@ -18457,7 +18546,7 @@ async function expressionClass(value, scope) {
|
|
|
18457
18546
|
return result;
|
|
18458
18547
|
};
|
|
18459
18548
|
if (Array.isArray(value)) return all(value);
|
|
18460
|
-
if (!isPlainObject$
|
|
18549
|
+
if (!isPlainObject$5(value)) return "clean";
|
|
18461
18550
|
const key = intrinsicKey(value);
|
|
18462
18551
|
if (key === void 0) return all(Object.values(value));
|
|
18463
18552
|
const operand = value[key];
|
|
@@ -18472,7 +18561,7 @@ async function expressionClass(value, scope) {
|
|
|
18472
18561
|
case "Fn::Sub": {
|
|
18473
18562
|
const text = Array.isArray(operand) ? operand[0] : operand;
|
|
18474
18563
|
if (typeof text !== "string") return worseOf("unknown", await expressionClass(operand, scope));
|
|
18475
|
-
const vars = Array.isArray(operand) && isPlainObject$
|
|
18564
|
+
const vars = Array.isArray(operand) && isPlainObject$5(operand[1]) ? operand[1] : {};
|
|
18476
18565
|
let result = text.includes(DYNAMIC_REFERENCE_OPEN) ? "secret" : "clean";
|
|
18477
18566
|
result = worseOf(result, await all(Object.values(vars)));
|
|
18478
18567
|
for (const name of subPlaceholders(text)) {
|
|
@@ -18550,7 +18639,7 @@ async function classifyPassedParameters(parameters, sources) {
|
|
|
18550
18639
|
}
|
|
18551
18640
|
async function classifyPassed(parameters, sources, nested) {
|
|
18552
18641
|
const classes = /* @__PURE__ */ new Map();
|
|
18553
|
-
if (!isPlainObject$
|
|
18642
|
+
if (!isPlainObject$5(parameters)) return classes;
|
|
18554
18643
|
for (const [name, expression] of Object.entries(parameters)) {
|
|
18555
18644
|
let passedClass;
|
|
18556
18645
|
try {
|
|
@@ -18591,7 +18680,7 @@ function possiblyMaskedKeys(resolvedProps, corpora) {
|
|
|
18591
18680
|
const wholeShortLeaf = (value) => {
|
|
18592
18681
|
if (typeof value === "string") return short.includes(value);
|
|
18593
18682
|
if (Array.isArray(value)) return value.some(wholeShortLeaf);
|
|
18594
|
-
if (isPlainObject$
|
|
18683
|
+
if (isPlainObject$5(value)) return Object.values(value).some(wholeShortLeaf);
|
|
18595
18684
|
return false;
|
|
18596
18685
|
};
|
|
18597
18686
|
return Object.keys(resolvedProps).filter((key) => {
|
|
@@ -18622,7 +18711,7 @@ function maskedPropertyFingerprintsOf(record) {
|
|
|
18622
18711
|
const read = /* @__PURE__ */ new Map();
|
|
18623
18712
|
if (record === null || typeof record !== "object") return read;
|
|
18624
18713
|
const field = record.maskedPropertyFingerprints;
|
|
18625
|
-
if (!isPlainObject$
|
|
18714
|
+
if (!isPlainObject$5(field)) return read;
|
|
18626
18715
|
for (const [key, value] of Object.entries(field)) if (typeof value === "string" && value.startsWith(FINGERPRINT_PREFIX)) read.set(key, value);
|
|
18627
18716
|
return read;
|
|
18628
18717
|
}
|
|
@@ -18630,7 +18719,7 @@ function maskedPropertyInputFingerprintsOf(record) {
|
|
|
18630
18719
|
const read = /* @__PURE__ */ new Map();
|
|
18631
18720
|
if (record === null || typeof record !== "object") return read;
|
|
18632
18721
|
const field = record.maskedPropertyInputFingerprints;
|
|
18633
|
-
if (!isPlainObject$
|
|
18722
|
+
if (!isPlainObject$5(field)) return read;
|
|
18634
18723
|
const text = maskedPropertyFingerprintsOf(record);
|
|
18635
18724
|
for (const [key, value] of Object.entries(field)) {
|
|
18636
18725
|
if (typeof value !== "string" || !value.startsWith(INPUT_FINGERPRINT_PREFIX)) continue;
|
|
@@ -18677,7 +18766,7 @@ async function movedMaskedProperties(record, templateProps, fingerprinter, onReb
|
|
|
18677
18766
|
function withRebaselinedFingerprints(record, fingerprints) {
|
|
18678
18767
|
const text = maskedPropertyFingerprintsOf(record);
|
|
18679
18768
|
const field = record.maskedPropertyInputFingerprints;
|
|
18680
|
-
const next = isPlainObject$
|
|
18769
|
+
const next = isPlainObject$5(field) ? Object.entries(field) : [];
|
|
18681
18770
|
let changed = false;
|
|
18682
18771
|
for (const [key, value] of Object.entries(fingerprints)) {
|
|
18683
18772
|
if (text.get(key) !== splitInputFingerprint(value).text) continue;
|
|
@@ -18710,10 +18799,10 @@ function withMaskedPropertyFingerprints(scrubbed, writtenBag, templateProps, sec
|
|
|
18710
18799
|
fingerprints = maskedPropertyFingerprintsFor(scrubbed.properties, templateProps);
|
|
18711
18800
|
inputs = boundInputFingerprints(fingerprints, inputFingerprints);
|
|
18712
18801
|
} else {
|
|
18713
|
-
if (!isPlainObject$
|
|
18802
|
+
if (!isPlainObject$5(previous)) return scrubbed;
|
|
18714
18803
|
if (corpora.length === 0) return scrubbed;
|
|
18715
18804
|
fingerprints = { ...previous };
|
|
18716
|
-
inputs = isPlainObject$
|
|
18805
|
+
inputs = isPlainObject$5(previousInputs) ? { ...previousInputs } : void 0;
|
|
18717
18806
|
}
|
|
18718
18807
|
if (fingerprints !== void 0 && corpora.length > 0) {
|
|
18719
18808
|
const refused = Object.keys(fingerprints).filter((key) => Object.hasOwn(templateProps, key) && corpora.some((corpus) => templateCarriesNeedle(templateProps[key], corpus)));
|
|
@@ -19697,11 +19786,11 @@ function validReferenceRegion(region) {
|
|
|
19697
19786
|
if (typeof region !== "string") return void 0;
|
|
19698
19787
|
return canonicalizeRegion(region) === region && isClientSafeRegion(region) ? region : void 0;
|
|
19699
19788
|
}
|
|
19700
|
-
function isPlainObject$
|
|
19789
|
+
function isPlainObject$4(value) {
|
|
19701
19790
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
19702
19791
|
}
|
|
19703
19792
|
function validateReferenceProvenance(token, raw) {
|
|
19704
|
-
if (!isSingleDynamicReferenceToken(token) || !isPlainObject$
|
|
19793
|
+
if (!isSingleDynamicReferenceToken(token) || !isPlainObject$4(raw)) return void 0;
|
|
19705
19794
|
const versionsRaw = Object.hasOwn(raw, "versions") ? raw["versions"] : void 0;
|
|
19706
19795
|
const readRaw = Object.hasOwn(raw, "readVersions") ? raw["readVersions"] : void 0;
|
|
19707
19796
|
if (readRaw !== void 0) {
|
|
@@ -19719,11 +19808,11 @@ function validateReferenceProvenance(token, raw) {
|
|
|
19719
19808
|
return out;
|
|
19720
19809
|
}
|
|
19721
19810
|
function referenceProvenanceOf(record) {
|
|
19722
|
-
if (!isPlainObject$
|
|
19811
|
+
if (!isPlainObject$4(record) || !Object.hasOwn(record, "referenceProvenance")) return void 0;
|
|
19723
19812
|
return validatedBag(record["referenceProvenance"]);
|
|
19724
19813
|
}
|
|
19725
19814
|
function validatedBag(field) {
|
|
19726
|
-
if (!isPlainObject$
|
|
19815
|
+
if (!isPlainObject$4(field)) return void 0;
|
|
19727
19816
|
const out = Object.create(null);
|
|
19728
19817
|
for (const [token, raw] of Object.entries(field)) {
|
|
19729
19818
|
const entry = validateReferenceProvenance(token, raw);
|
|
@@ -19732,9 +19821,9 @@ function validatedBag(field) {
|
|
|
19732
19821
|
return { ...out };
|
|
19733
19822
|
}
|
|
19734
19823
|
function recordedProvenanceOf(record, token) {
|
|
19735
|
-
if (!isPlainObject$
|
|
19824
|
+
if (!isPlainObject$4(record) || !Object.hasOwn(record, "referenceProvenance")) return void 0;
|
|
19736
19825
|
const field = record["referenceProvenance"];
|
|
19737
|
-
if (!isPlainObject$
|
|
19826
|
+
if (!isPlainObject$4(field) || !Object.hasOwn(field, token)) return void 0;
|
|
19738
19827
|
return validateReferenceProvenance(token, field[token]);
|
|
19739
19828
|
}
|
|
19740
19829
|
function recordedReferenceRegions(record) {
|
|
@@ -19756,7 +19845,7 @@ function regionsOf(field) {
|
|
|
19756
19845
|
function keepHeldTokenProvenance(record) {
|
|
19757
19846
|
if (!hasReferenceProvenanceField(record)) return record;
|
|
19758
19847
|
const field = record.referenceProvenance;
|
|
19759
|
-
if (!isPlainObject$
|
|
19848
|
+
if (!isPlainObject$4(field)) return record;
|
|
19760
19849
|
const held = recordReferenceTokens(record);
|
|
19761
19850
|
const keys = Object.keys(field);
|
|
19762
19851
|
if (keys.every((token) => held.has(token))) return record;
|
|
@@ -19768,12 +19857,12 @@ function keepHeldTokenProvenance(record) {
|
|
|
19768
19857
|
};
|
|
19769
19858
|
}
|
|
19770
19859
|
function hasReferenceProvenanceField(record) {
|
|
19771
|
-
return isPlainObject$
|
|
19860
|
+
return isPlainObject$4(record) && Object.hasOwn(record, "referenceProvenance") && record["referenceProvenance"] !== void 0;
|
|
19772
19861
|
}
|
|
19773
19862
|
function outputReferenceProvenanceOf(state, outputKey) {
|
|
19774
|
-
if (!isPlainObject$
|
|
19863
|
+
if (!isPlainObject$4(state) || !Object.hasOwn(state, "outputReferenceProvenance")) return;
|
|
19775
19864
|
const field = state["outputReferenceProvenance"];
|
|
19776
|
-
if (!isPlainObject$
|
|
19865
|
+
if (!isPlainObject$4(field) || !Object.hasOwn(field, outputKey)) return void 0;
|
|
19777
19866
|
return validatedBag(field[outputKey]);
|
|
19778
19867
|
}
|
|
19779
19868
|
function persistable(token, entry) {
|
|
@@ -19791,7 +19880,7 @@ function tokensUnderPaths(properties, paths) {
|
|
|
19791
19880
|
for (const item of value) descend(item, path, next);
|
|
19792
19881
|
return;
|
|
19793
19882
|
}
|
|
19794
|
-
if (isPlainObject$
|
|
19883
|
+
if (isPlainObject$4(value) && Object.hasOwn(value, path[at])) descend(value[path[at]], path, at + 1);
|
|
19795
19884
|
};
|
|
19796
19885
|
for (const path of paths) descend(properties, path, 0);
|
|
19797
19886
|
return out;
|
|
@@ -19834,7 +19923,7 @@ function unionWithPrevious(pass, before) {
|
|
|
19834
19923
|
}
|
|
19835
19924
|
function outputProvenanceForPersist(args) {
|
|
19836
19925
|
const { outputs, resolvedThisRun, carriedFrom, sinkOf } = args;
|
|
19837
|
-
if (!resolvedThisRun) return carriedFrom !== void 0 && isPlainObject$
|
|
19926
|
+
if (!resolvedThisRun) return carriedFrom !== void 0 && isPlainObject$4(carriedFrom.outputReferenceProvenance) ? carriedFrom.outputReferenceProvenance : void 0;
|
|
19838
19927
|
let out;
|
|
19839
19928
|
for (const [outputKey, value] of Object.entries(outputs)) {
|
|
19840
19929
|
const sink = sinkOf(outputKey);
|
|
@@ -19868,20 +19957,37 @@ function tokensOf(value) {
|
|
|
19868
19957
|
}
|
|
19869
19958
|
function recordedTokenRoutes(value, record) {
|
|
19870
19959
|
if (!hasReferenceProvenanceField(record)) return void 0;
|
|
19960
|
+
return routesOf(tokensOf(value), (token) => recordedProvenanceOf(record, token));
|
|
19961
|
+
}
|
|
19962
|
+
function provenanceTokenRoutes(value, bag) {
|
|
19963
|
+
if (bag === void 0) return void 0;
|
|
19964
|
+
return routesOf(tokensOf(value), (token) => Object.hasOwn(bag, token) ? bag[token] : void 0);
|
|
19965
|
+
}
|
|
19966
|
+
function routesOf(tokens, entryOf) {
|
|
19871
19967
|
const routes = /* @__PURE__ */ new Map();
|
|
19872
19968
|
let recorded = false;
|
|
19873
|
-
for (const token of
|
|
19874
|
-
const entry =
|
|
19969
|
+
for (const token of tokens) {
|
|
19970
|
+
const entry = entryOf(token);
|
|
19875
19971
|
const region = entry?.region;
|
|
19876
19972
|
const pin = entry?.versions?.length === 1 ? entry.versions[0] : void 0;
|
|
19877
19973
|
if (region !== void 0 || pin !== void 0) recorded = true;
|
|
19878
19974
|
routes.set(token, {
|
|
19879
19975
|
region,
|
|
19880
|
-
pin
|
|
19976
|
+
pin,
|
|
19977
|
+
...entry?.versions !== void 0 && { versions: entry.versions }
|
|
19881
19978
|
});
|
|
19882
19979
|
}
|
|
19883
19980
|
return recorded ? routes : void 0;
|
|
19884
19981
|
}
|
|
19982
|
+
function recordedTokenVersions(value, record) {
|
|
19983
|
+
if (!hasReferenceProvenanceField(record)) return void 0;
|
|
19984
|
+
let out;
|
|
19985
|
+
for (const token of tokensOf(value)) {
|
|
19986
|
+
const versions = recordedProvenanceOf(record, token)?.versions;
|
|
19987
|
+
if (versions !== void 0 && versions.length > 0) (out ??= /* @__PURE__ */ new Map()).set(token, versions);
|
|
19988
|
+
}
|
|
19989
|
+
return out;
|
|
19990
|
+
}
|
|
19885
19991
|
async function reresolveByRecordedRoutes(resolver, value, logicalId, context, origin, sourceKey, routes, defaults) {
|
|
19886
19992
|
const tokens = [...routes.keys()];
|
|
19887
19993
|
const regionOf = (token) => routes.get(token)?.region ?? defaults.region;
|
|
@@ -19918,9 +20024,12 @@ async function reresolveByRecordedRoutes(resolver, value, logicalId, context, or
|
|
|
19918
20024
|
return value;
|
|
19919
20025
|
}
|
|
19920
20026
|
}
|
|
19921
|
-
const
|
|
20027
|
+
const readVersions = /* @__PURE__ */ new Map();
|
|
20028
|
+
for (const [token, route] of routes) if (route.versions !== void 0 && route.versions.length > 0) readVersions.set(token, route.versions);
|
|
20029
|
+
const walkContext = pins.size > 0 || readVersions.size > 0 ? {
|
|
19922
20030
|
...context,
|
|
19923
|
-
referencePins: pins
|
|
20031
|
+
...pins.size > 0 && { referencePins: pins },
|
|
20032
|
+
...readVersions.size > 0 && { recordedReadVersions: readVersions }
|
|
19924
20033
|
} : context;
|
|
19925
20034
|
const regions = new Set(tokens.map((token) => regionOf(token) ?? ""));
|
|
19926
20035
|
if (regions.size <= 1) {
|
|
@@ -20545,7 +20654,11 @@ async function reresolveRecordedReferences(value, logicalId, context, origin, so
|
|
|
20545
20654
|
servingAsRecordedLine();
|
|
20546
20655
|
return value;
|
|
20547
20656
|
}
|
|
20548
|
-
|
|
20657
|
+
const readVersions = recordedTokenVersions(value, record);
|
|
20658
|
+
return await this.reresolveCrossStackValue(value, void 0, readVersions === void 0 ? context : {
|
|
20659
|
+
...context,
|
|
20660
|
+
recordedReadVersions: readVersions
|
|
20661
|
+
}, origin, sourceKey);
|
|
20549
20662
|
}
|
|
20550
20663
|
async function referencesMatchPhysicalId(value, logicalId, context, routeOf) {
|
|
20551
20664
|
const record = Object.hasOwn(context.resources, logicalId) ? context.resources[logicalId] : void 0;
|
|
@@ -20800,6 +20913,13 @@ function healMaskedOwnIdAttribute(logicalId, resource, attributeName, stored, co
|
|
|
20800
20913
|
//#endregion
|
|
20801
20914
|
//#region src/deployment/intrinsic-resolver/cross-stack.ts
|
|
20802
20915
|
async function reresolveCrossStackValue(value, producerRegion, context, origin, sourceKey, producerOutput, producerRegionLogText) {
|
|
20916
|
+
if (context.crossStackReads !== void 0 && producerOutput !== void 0 && producerOutput.crossAccount !== true && sourceKey !== void 0) context.crossStackReads.set(sourceKey, {
|
|
20917
|
+
stackName: producerOutput.stackName,
|
|
20918
|
+
region: producerOutput.region || this.resolverRegion || "",
|
|
20919
|
+
outputKey: producerOutput.outputKey,
|
|
20920
|
+
carriesToken: carriesDynamicReference(value),
|
|
20921
|
+
...producerOutput.state !== void 0 && { state: producerOutput.state }
|
|
20922
|
+
});
|
|
20803
20923
|
if (carriesSecretMask(value)) {
|
|
20804
20924
|
const recovered = producerOutput === void 0 || producerOutput.crossAccount === true ? void 0 : recoverMaskedOutput(credentialFingerprint(ambientCredentialConfig()), producerOutput.stackName, producerOutput.region, producerOutput.outputKey);
|
|
20805
20925
|
if (recovered !== void 0) {
|
|
@@ -20824,11 +20944,16 @@ async function reresolveCrossStackValue(value, producerRegion, context, origin,
|
|
|
20824
20944
|
if (context.recordedSecretValues !== void 0 && producerOutput !== void 0 && producerOutput.crossAccount !== true && context.stateBackend !== void 0 && context.skipDynamicReferences !== true) {
|
|
20825
20945
|
const plain = [...wholeStringLeavesOf(value)].filter((leaf) => !leaf.includes("{{resolve:") && !carriesSecretMask(leaf));
|
|
20826
20946
|
if (plain.length > 0) {
|
|
20827
|
-
const ids = await
|
|
20947
|
+
const ids = physicalIdsOf(await producerStateOnce(this.resolverRegion, context, producerOutput, () => this.logger.debug(safeMsg`Could not read the state of producer ${this.displayMasked(producerOutput.stackName, context)} for its physical ids; no cross-stack copy of one is kept (go-to-k/cdkd#4819)`)));
|
|
20828
20948
|
for (const leaf of plain) if (ids.has(leaf)) recordPhysicalNameCopy(context.recordedSecretValues, leaf);
|
|
20829
20949
|
}
|
|
20830
20950
|
}
|
|
20831
20951
|
if (!carriesDynamicReference(value)) return value;
|
|
20952
|
+
if (producerOutput !== void 0 && producerOutput.crossAccount !== true && context.recordedSecretValues !== void 0 && context.skipDynamicReferences !== true && context.provenanceCapture !== true) {
|
|
20953
|
+
const state = await producerStateOnce(this.resolverRegion, context, producerOutput, () => this.logger.debug(safeMsg`Could not read the state of producer ${this.displayMasked(producerOutput.stackName, context)} for its recorded secret versions; its output is resolved at the current version`));
|
|
20954
|
+
const routes = provenanceTokenRoutes(value, outputReferenceProvenanceOf(state, producerOutput.outputKey));
|
|
20955
|
+
if (routes !== void 0) return await reresolveByRecordedRoutes(this, value, producerOutput.stackName, context, origin, sourceKey, routes, { region: producerRegion || void 0 });
|
|
20956
|
+
}
|
|
20832
20957
|
const resolver = this.resolverForProducerRegion(producerRegion, context, producerRegionLogText);
|
|
20833
20958
|
const pinnedContext = {
|
|
20834
20959
|
...producerRegion ? withoutProducerRegions(context) : context,
|
|
@@ -20917,7 +21042,8 @@ async function resolveImportValue(importValueArg, context) {
|
|
|
20917
21042
|
found = {
|
|
20918
21043
|
value,
|
|
20919
21044
|
refStack,
|
|
20920
|
-
lookupRegion
|
|
21045
|
+
lookupRegion,
|
|
21046
|
+
state
|
|
20921
21047
|
};
|
|
20922
21048
|
break;
|
|
20923
21049
|
}
|
|
@@ -20929,7 +21055,8 @@ async function resolveImportValue(importValueArg, context) {
|
|
|
20929
21055
|
if (found) return await this.reresolveCrossStackValue(found.value, found.lookupRegion, context, `Fn::ImportValue ${quotedRender(this.displayLeaf(exportName, context), "'")} (producer ${this.displayLeaf(found.refStack, context)} / ${this.displayLeaf(found.lookupRegion, context)})`, sourceKey, {
|
|
20930
21056
|
stackName: found.refStack,
|
|
20931
21057
|
region: found.lookupRegion,
|
|
20932
|
-
outputKey: exportName
|
|
21058
|
+
outputKey: exportName,
|
|
21059
|
+
state: found.state
|
|
20933
21060
|
});
|
|
20934
21061
|
if (this.cfnFallback) {
|
|
20935
21062
|
const cfnExport = await this.lookupCfnExport(exportName, context);
|
|
@@ -20949,32 +21076,60 @@ function recordImport(context, exportName, producerStack, producerRegion) {
|
|
|
20949
21076
|
sourceRegion: producerRegion
|
|
20950
21077
|
});
|
|
20951
21078
|
}
|
|
20952
|
-
const
|
|
20953
|
-
function
|
|
20954
|
-
let reads =
|
|
21079
|
+
const producerStateReads = /* @__PURE__ */ new WeakMap();
|
|
21080
|
+
async function readProducerStateOnce(scope, stateBackend, stackName, region, onFailure, inHand) {
|
|
21081
|
+
let reads = producerStateReads.get(scope);
|
|
20955
21082
|
if (reads === void 0) {
|
|
20956
21083
|
reads = /* @__PURE__ */ new Map();
|
|
20957
|
-
|
|
21084
|
+
producerStateReads.set(scope, reads);
|
|
20958
21085
|
}
|
|
20959
21086
|
const key = JSON.stringify([stackName, region]);
|
|
20960
21087
|
let read = reads.get(key);
|
|
20961
21088
|
if (read === void 0) {
|
|
20962
|
-
read =
|
|
20963
|
-
|
|
21089
|
+
read = inHand !== void 0 ? Promise.resolve({
|
|
21090
|
+
state: inHand,
|
|
21091
|
+
failed: false
|
|
21092
|
+
}) : (async () => {
|
|
21093
|
+
if (stateBackend === void 0) return {
|
|
21094
|
+
state: void 0,
|
|
21095
|
+
failed: false
|
|
21096
|
+
};
|
|
20964
21097
|
try {
|
|
20965
|
-
|
|
20966
|
-
|
|
20967
|
-
|
|
20968
|
-
|
|
20969
|
-
}
|
|
21098
|
+
return {
|
|
21099
|
+
state: (await stateBackend.getState(stackName, region))?.state ?? void 0,
|
|
21100
|
+
failed: false
|
|
21101
|
+
};
|
|
20970
21102
|
} catch {
|
|
20971
|
-
|
|
21103
|
+
return {
|
|
21104
|
+
state: void 0,
|
|
21105
|
+
failed: true
|
|
21106
|
+
};
|
|
20972
21107
|
}
|
|
20973
|
-
return ids;
|
|
20974
21108
|
})();
|
|
20975
21109
|
reads.set(key, read);
|
|
20976
21110
|
}
|
|
20977
|
-
|
|
21111
|
+
const { state, failed } = await read;
|
|
21112
|
+
if (failed) onFailure();
|
|
21113
|
+
return state;
|
|
21114
|
+
}
|
|
21115
|
+
function producerStateOnce(resolverRegion, context, producerOutput, onFailure) {
|
|
21116
|
+
return readProducerStateOnce(context.recordedImports ?? context.recordedSecretValues ?? context, context.stateBackend, producerOutput.stackName, producerOutput.region || resolverRegion || "", onFailure, producerOutput.state);
|
|
21117
|
+
}
|
|
21118
|
+
const physicalIdsByState = /* @__PURE__ */ new WeakMap();
|
|
21119
|
+
function physicalIdsOf(state) {
|
|
21120
|
+
if (state === void 0) return /* @__PURE__ */ new Set();
|
|
21121
|
+
let ids = physicalIdsByState.get(state);
|
|
21122
|
+
if (ids === void 0) {
|
|
21123
|
+
const out = /* @__PURE__ */ new Set();
|
|
21124
|
+
const resources = state.resources;
|
|
21125
|
+
if (resources !== null && typeof resources === "object") for (const record of Object.values(resources)) {
|
|
21126
|
+
const id = record?.physicalId;
|
|
21127
|
+
if (typeof id === "string" && id !== "") out.add(id);
|
|
21128
|
+
}
|
|
21129
|
+
ids = out;
|
|
21130
|
+
physicalIdsByState.set(state, ids);
|
|
21131
|
+
}
|
|
21132
|
+
return ids;
|
|
20978
21133
|
}
|
|
20979
21134
|
|
|
20980
21135
|
//#endregion
|
|
@@ -21517,7 +21672,7 @@ async function resolveGetStackOutput(arg, context) {
|
|
|
21517
21672
|
stackName,
|
|
21518
21673
|
region,
|
|
21519
21674
|
outputKey: outputName,
|
|
21520
|
-
...roleArn ? { crossAccount: true } : {}
|
|
21675
|
+
...roleArn ? { crossAccount: true } : { state: stateData.state }
|
|
21521
21676
|
}, loggedRegionText);
|
|
21522
21677
|
}
|
|
21523
21678
|
function recordOutputRead(context, producerStack, producerRegion, outputName) {
|
|
@@ -21637,13 +21792,19 @@ function secretVerdictScope(resolver) {
|
|
|
21637
21792
|
}
|
|
21638
21793
|
function recordProvenanceOfResolution(resolver, context, token, version) {
|
|
21639
21794
|
if (context === void 0 || context.provenanceSuppressed === true) return;
|
|
21640
|
-
const
|
|
21641
|
-
|
|
21642
|
-
|
|
21643
|
-
|
|
21644
|
-
|
|
21645
|
-
|
|
21646
|
-
|
|
21795
|
+
const route = context.provenanceRoute ?? "literal";
|
|
21796
|
+
const region = canonicalizeRegion(resolver.explicitRegion);
|
|
21797
|
+
const recorded = route === "read" ? context.recordedReadVersions?.get(token) : void 0;
|
|
21798
|
+
const versions = recorded !== void 0 && recorded.length > 0 ? recorded : [version];
|
|
21799
|
+
for (const one of versions) {
|
|
21800
|
+
const resolution = {
|
|
21801
|
+
region,
|
|
21802
|
+
version: one,
|
|
21803
|
+
route
|
|
21804
|
+
};
|
|
21805
|
+
if (context.recordedSecretValues !== void 0) recordReferenceResolution(context.recordedSecretValues, token, resolution);
|
|
21806
|
+
if (context.provenanceSink !== void 0) recordReferenceResolution(context.provenanceSink, token, resolution);
|
|
21807
|
+
}
|
|
21647
21808
|
}
|
|
21648
21809
|
async function resolveDynamicReferences(value, context) {
|
|
21649
21810
|
return (await this.resolveDynamicReferencesWithLogTwin(value, value, context, void 0, true)).result;
|
|
@@ -23426,6 +23587,101 @@ IntrinsicFunctionResolver.prototype.noteRefStateMask = noteRefStateMask;
|
|
|
23426
23587
|
IntrinsicFunctionResolver.prototype.clientsForRegion = clientsForRegion;
|
|
23427
23588
|
IntrinsicFunctionResolver.prototype.serviceDiscoveryClient = serviceDiscoveryClient;
|
|
23428
23589
|
|
|
23590
|
+
//#endregion
|
|
23591
|
+
//#region src/analyzer/read-provenance-promotion.ts
|
|
23592
|
+
function isPlainObject$3(value) {
|
|
23593
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
23594
|
+
}
|
|
23595
|
+
function readsAcrossStacks(value) {
|
|
23596
|
+
if (Array.isArray(value)) return value.some(readsAcrossStacks);
|
|
23597
|
+
if (!isPlainObject$3(value)) return false;
|
|
23598
|
+
if (Object.hasOwn(value, "Fn::ImportValue") || Object.hasOwn(value, "Fn::GetStackOutput")) return true;
|
|
23599
|
+
return Object.values(value).some(readsAcrossStacks);
|
|
23600
|
+
}
|
|
23601
|
+
function recordedReadVersions(record) {
|
|
23602
|
+
if (!isPlainObject$3(record) || !Object.hasOwn(record, "referenceProvenance")) return void 0;
|
|
23603
|
+
const field = referenceProvenanceOf(record);
|
|
23604
|
+
if (field === void 0) return void 0;
|
|
23605
|
+
let out;
|
|
23606
|
+
for (const [token, entry] of Object.entries(field)) if (entry.readVersions !== void 0 && entry.readVersions.length > 0) (out ??= /* @__PURE__ */ new Map()).set(token, entry.readVersions);
|
|
23607
|
+
return out;
|
|
23608
|
+
}
|
|
23609
|
+
async function readProvenancePromotions(args) {
|
|
23610
|
+
const { currentState, desiredTemplate, sources } = args;
|
|
23611
|
+
const parser = args.parser ?? new TemplateParser();
|
|
23612
|
+
const records = currentState.resources;
|
|
23613
|
+
const parameters = isPlainObject$3(desiredTemplate.Parameters) ? desiredTemplate.Parameters : void 0;
|
|
23614
|
+
const out = [];
|
|
23615
|
+
for (const { logicalId, changeType } of args.rows) {
|
|
23616
|
+
if (changeType !== "NO_CHANGE" && changeType !== "UPDATE") continue;
|
|
23617
|
+
const record = Object.hasOwn(records, logicalId) ? records[logicalId] : void 0;
|
|
23618
|
+
const readVersions = recordedReadVersions(record);
|
|
23619
|
+
if (readVersions === void 0) continue;
|
|
23620
|
+
const resource = Object.hasOwn(desiredTemplate.Resources, logicalId) ? desiredTemplate.Resources[logicalId] : void 0;
|
|
23621
|
+
const properties = isPlainObject$3(resource?.Properties) ? resource.Properties : {};
|
|
23622
|
+
const reads = [];
|
|
23623
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
23624
|
+
const referenced = [...parser.extractReferences(value)].filter((id) => id !== logicalId);
|
|
23625
|
+
const resourceIds = referenced.filter((id) => Object.hasOwn(desiredTemplate.Resources, id));
|
|
23626
|
+
const readsParameter = parameters !== void 0 && referenced.some((id) => Object.hasOwn(parameters, id));
|
|
23627
|
+
const crossStack = readsAcrossStacks(value);
|
|
23628
|
+
if (resourceIds.length === 0 && !readsParameter && !crossStack) continue;
|
|
23629
|
+
reads.push({
|
|
23630
|
+
key,
|
|
23631
|
+
value,
|
|
23632
|
+
resources: resourceIds,
|
|
23633
|
+
parameters: readsParameter,
|
|
23634
|
+
crossStack
|
|
23635
|
+
});
|
|
23636
|
+
}
|
|
23637
|
+
if (reads.length === 0) continue;
|
|
23638
|
+
let crossStackBags = [];
|
|
23639
|
+
if (sources?.crossStackOutputs !== void 0) {
|
|
23640
|
+
const crossValues = reads.filter((r) => r.crossStack).map((r) => r.value);
|
|
23641
|
+
if (crossValues.length > 0) crossStackBags = await sources.crossStackOutputs(crossValues);
|
|
23642
|
+
}
|
|
23643
|
+
const upstreamIds = new Set(reads.flatMap((r) => r.resources));
|
|
23644
|
+
const readsAnyParameter = reads.some((r) => r.parameters);
|
|
23645
|
+
const moved = [];
|
|
23646
|
+
for (const [token, recorded] of readVersions) {
|
|
23647
|
+
const domain = /* @__PURE__ */ new Set();
|
|
23648
|
+
let member = false;
|
|
23649
|
+
const join = (versions) => {
|
|
23650
|
+
if (versions === void 0 || versions.length === 0) return;
|
|
23651
|
+
member = true;
|
|
23652
|
+
for (const version of versions) domain.add(version);
|
|
23653
|
+
};
|
|
23654
|
+
for (const id of upstreamIds) {
|
|
23655
|
+
const upstream = Object.hasOwn(records, id) ? records[id] : void 0;
|
|
23656
|
+
join(recordedProvenanceOf(upstream, token)?.versions);
|
|
23657
|
+
}
|
|
23658
|
+
if (readsAnyParameter && sources?.inherited !== void 0) join(sources.inherited.get(token)?.versions);
|
|
23659
|
+
for (const bag of crossStackBags) if (Object.hasOwn(bag, token)) join(bag[token]?.versions);
|
|
23660
|
+
if (!member) continue;
|
|
23661
|
+
if (recorded.some((version) => !domain.has(version))) moved.push(token);
|
|
23662
|
+
}
|
|
23663
|
+
if (moved.length === 0) continue;
|
|
23664
|
+
const recordProperties = isPlainObject$3(record?.properties) ? record.properties : {};
|
|
23665
|
+
const keys = [];
|
|
23666
|
+
for (const r of reads) {
|
|
23667
|
+
if (!Object.hasOwn(recordProperties, r.key)) continue;
|
|
23668
|
+
const held = referenceTokensIn(recordProperties[r.key]);
|
|
23669
|
+
if (!moved.some((token) => held.has(token))) continue;
|
|
23670
|
+
keys.push({
|
|
23671
|
+
key: r.key,
|
|
23672
|
+
upstreams: r.resources
|
|
23673
|
+
});
|
|
23674
|
+
}
|
|
23675
|
+
if (keys.length === 0) continue;
|
|
23676
|
+
out.push({
|
|
23677
|
+
logicalId,
|
|
23678
|
+
keys,
|
|
23679
|
+
tokens: moved
|
|
23680
|
+
});
|
|
23681
|
+
}
|
|
23682
|
+
return out;
|
|
23683
|
+
}
|
|
23684
|
+
|
|
23429
23685
|
//#endregion
|
|
23430
23686
|
//#region src/analyzer/diff-calculator.ts
|
|
23431
23687
|
const INTRINSIC_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -23470,7 +23726,7 @@ var DiffCalculator = class DiffCalculator {
|
|
|
23470
23726
|
conditionalReplacementVerdict(resourceType, propertyPath, oldValue, newValue) {
|
|
23471
23727
|
return this.replacementRules.conditionalReplacementVerdict(resourceType, propertyPath, oldValue, newValue);
|
|
23472
23728
|
}
|
|
23473
|
-
async calculateDiff(currentState, desiredTemplate, resolveFn, canonicalizeProperties, allowedUnsupportedProperties, freshParameters, maskForLog, recreateTargets, maskedInputs, refusalRecovery, noEchoCompare) {
|
|
23729
|
+
async calculateDiff(currentState, desiredTemplate, resolveFn, canonicalizeProperties, allowedUnsupportedProperties, freshParameters, maskForLog, recreateTargets, maskedInputs, refusalRecovery, noEchoCompare, readProvenance) {
|
|
23474
23730
|
const changes = /* @__PURE__ */ new Map();
|
|
23475
23731
|
refuseMalformedResourceEntriesForDeploy(currentState, void 0, void 0, refusalRecovery);
|
|
23476
23732
|
refuseMalformedResourceProperties(currentState, void 0, void 0, refusalRecovery);
|
|
@@ -23600,7 +23856,12 @@ var DiffCalculator = class DiffCalculator {
|
|
|
23600
23856
|
const changeType = changes.get(logicalId)?.changeType;
|
|
23601
23857
|
if (changeType === "NO_CHANGE" || changeType === "UPDATE") forcedReplacements.add(logicalId);
|
|
23602
23858
|
}
|
|
23859
|
+
const provenanceChanges = await this.promoteReadProvenanceDependents(changes, currentState, desiredTemplate, readProvenance);
|
|
23603
23860
|
const syntheticCreateOnlyPaths = await this.loadSyntheticCreateOnlyPaths(changes, desiredTemplate, rawGetAttRefs, freshParameters, forcedReplacements);
|
|
23861
|
+
for (const { change, pc, upstreams } of provenanceChanges) {
|
|
23862
|
+
const templateValue = desiredTemplate.Resources[change.logicalId]?.Properties?.[pc.path];
|
|
23863
|
+
pc.requiresReplacement = this.syntheticRequiresReplacement(change.resourceType, pc.path, syntheticCreateOnlyPaths, upstreams.some((id) => isPlainReferenceTo(templateValue, id, desiredTemplate.Resources[id]?.Type)));
|
|
23864
|
+
}
|
|
23604
23865
|
do
|
|
23605
23866
|
this.promoteReplacementDependents(changes, desiredTemplate, syntheticCreateOnlyPaths, forcedReplacements);
|
|
23606
23867
|
while (this.promoteInPlaceAttributeDependents(changes, desiredTemplate, rawGetAttRefs, syntheticCreateOnlyPaths, freshParameters));
|
|
@@ -23608,6 +23869,47 @@ var DiffCalculator = class DiffCalculator {
|
|
|
23608
23869
|
this.logger.debug(`Diff calculated: ${summary.create} CREATE, ${summary.update} UPDATE, ${summary.delete} DELETE, ${summary.noChange} NO_CHANGE`);
|
|
23609
23870
|
return changes;
|
|
23610
23871
|
}
|
|
23872
|
+
async promoteReadProvenanceDependents(changes, currentState, desiredTemplate, sources) {
|
|
23873
|
+
if (isKnownTokenFreeState(currentState)) return [];
|
|
23874
|
+
const promotions = await readProvenancePromotions({
|
|
23875
|
+
rows: changes.values(),
|
|
23876
|
+
currentState,
|
|
23877
|
+
desiredTemplate,
|
|
23878
|
+
sources,
|
|
23879
|
+
parser: this.parser
|
|
23880
|
+
});
|
|
23881
|
+
const out = [];
|
|
23882
|
+
for (const promotion of promotions) {
|
|
23883
|
+
const change = changes.get(promotion.logicalId);
|
|
23884
|
+
if (change === void 0) continue;
|
|
23885
|
+
const existingPaths = new Set((change.propertyChanges ?? []).map((pc) => pc.path));
|
|
23886
|
+
const synthetic = [];
|
|
23887
|
+
for (const { key, upstreams } of promotion.keys) {
|
|
23888
|
+
if (existingPaths.has(key)) continue;
|
|
23889
|
+
const pc = {
|
|
23890
|
+
path: key,
|
|
23891
|
+
oldValue: change.currentProperties?.[key],
|
|
23892
|
+
newValue: change.desiredProperties?.[key],
|
|
23893
|
+
requiresReplacement: false,
|
|
23894
|
+
inPlacePropagated: true,
|
|
23895
|
+
readProvenancePromoted: true
|
|
23896
|
+
};
|
|
23897
|
+
synthetic.push(pc);
|
|
23898
|
+
out.push({
|
|
23899
|
+
change,
|
|
23900
|
+
pc,
|
|
23901
|
+
upstreams
|
|
23902
|
+
});
|
|
23903
|
+
}
|
|
23904
|
+
if (synthetic.length === 0) continue;
|
|
23905
|
+
if (change.changeType === "NO_CHANGE") {
|
|
23906
|
+
change.changeType = "UPDATE";
|
|
23907
|
+
change.propertyChanges = synthetic;
|
|
23908
|
+
} else change.propertyChanges = [...change.propertyChanges ?? [], ...synthetic];
|
|
23909
|
+
this.logger.debug(safeMsg`UPDATE (promoted): ${promotion.logicalId} holds a secret reference read at a version its upstream no longer records (${synthetic.map((pc) => pc.path).join(", ")})`);
|
|
23910
|
+
}
|
|
23911
|
+
return out;
|
|
23912
|
+
}
|
|
23611
23913
|
async loadSyntheticCreateOnlyPaths(changes, desiredTemplate, rawGetAttRefs, freshParameters, forcedReplacements) {
|
|
23612
23914
|
const loaded = /* @__PURE__ */ new Map();
|
|
23613
23915
|
const queue = [...freshParameters ?? []];
|
|
@@ -24809,8 +25111,8 @@ function compare(desired, previous, mask) {
|
|
|
24809
25111
|
if (!Array.isArray(desired) || desired.length !== previous.length) return "differs";
|
|
24810
25112
|
return combine(previous.map((item, i) => compare(desired[i], item, mask)));
|
|
24811
25113
|
}
|
|
24812
|
-
if (isPlainObject$
|
|
24813
|
-
if (!isPlainObject$
|
|
25114
|
+
if (isPlainObject$2(previous)) {
|
|
25115
|
+
if (!isPlainObject$2(desired)) return "differs";
|
|
24814
25116
|
if (!Object.keys(desired).every((k) => Object.prototype.hasOwnProperty.call(previous, k))) return "differs";
|
|
24815
25117
|
return combine(Object.keys(previous).map((k) => compare(desired[k], previous[k], mask)));
|
|
24816
25118
|
}
|
|
@@ -24836,7 +25138,7 @@ function resolvesReference(desired, previous, mask) {
|
|
|
24836
25138
|
const pattern = literals.map(escapeRegExp$1).join("[\\s\\S]*");
|
|
24837
25139
|
return new RegExp(`^${pattern}$`).test(desired);
|
|
24838
25140
|
}
|
|
24839
|
-
function isPlainObject$
|
|
25141
|
+
function isPlainObject$2(value) {
|
|
24840
25142
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
24841
25143
|
}
|
|
24842
25144
|
function escapeRegExp$1(text) {
|
|
@@ -25627,7 +25929,7 @@ var CloudControlProvider = class {
|
|
|
25627
25929
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
25628
25930
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
25629
25931
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
25630
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
25932
|
+
const { ASGProvider } = await import("./asg-provider-BtUUjRnI.js");
|
|
25631
25933
|
const delegateRegion = ambientRegion();
|
|
25632
25934
|
let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
|
|
25633
25935
|
if (asgProvider === void 0) {
|
|
@@ -25733,7 +26035,7 @@ var CloudControlProvider = class {
|
|
|
25733
26035
|
const family = SDK_DELETE_FAMILIES.get(resourceType);
|
|
25734
26036
|
const cached = this.sdkDeleteDelegates.get(family);
|
|
25735
26037
|
if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
|
|
25736
|
-
const provider = family === "rds" ? new (await (import("./rds-provider-
|
|
26038
|
+
const provider = family === "rds" ? new (await (import("./rds-provider-B9gz-giS.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-Bkrw65eO.js"))).NeptuneProvider({ region: ccRegion });
|
|
25737
26039
|
this.sdkDeleteDelegates.set(family, {
|
|
25738
26040
|
region: ccRegion,
|
|
25739
26041
|
provider
|
|
@@ -33556,11 +33858,16 @@ async function resolveReplayProps(props, resolvers, secrets, execCtx, logicalId,
|
|
|
33556
33858
|
resources: {},
|
|
33557
33859
|
recordedSecretValues: secrets
|
|
33558
33860
|
};
|
|
33861
|
+
const pins = new ReplayPins(record, resolvers, execCtx, logicalId);
|
|
33559
33862
|
const walk = async (v, path) => {
|
|
33560
33863
|
if (typeof v === "string") {
|
|
33561
33864
|
if (!v.includes("{{resolve:")) return v;
|
|
33562
33865
|
refuseUnprovenReplaySecret(v, path, logicalId, execCtx, recordedRegions);
|
|
33563
|
-
|
|
33866
|
+
const leafPins = await pins.forLeaf(v, recordedRegions);
|
|
33867
|
+
return await resolveLeafByRegion(v, path, logicalId, execCtx, resolvers, leafPins === void 0 ? resolverContext : {
|
|
33868
|
+
...resolverContext,
|
|
33869
|
+
referencePins: leafPins
|
|
33870
|
+
}, recordedRegions);
|
|
33564
33871
|
}
|
|
33565
33872
|
if (Array.isArray(v)) {
|
|
33566
33873
|
const out = new Array(v.length);
|
|
@@ -33576,6 +33883,66 @@ async function resolveReplayProps(props, resolvers, secrets, execCtx, logicalId,
|
|
|
33576
33883
|
};
|
|
33577
33884
|
return await walk(props, "");
|
|
33578
33885
|
}
|
|
33886
|
+
var ReplayPins = class {
|
|
33887
|
+
recorded = /* @__PURE__ */ new Map();
|
|
33888
|
+
verdicts = /* @__PURE__ */ new Map();
|
|
33889
|
+
resolvers;
|
|
33890
|
+
execCtx;
|
|
33891
|
+
logicalId;
|
|
33892
|
+
constructor(record, resolvers, execCtx, logicalId) {
|
|
33893
|
+
this.resolvers = resolvers;
|
|
33894
|
+
this.execCtx = execCtx;
|
|
33895
|
+
this.logicalId = logicalId;
|
|
33896
|
+
const field = referenceProvenanceOf(record);
|
|
33897
|
+
for (const [token, entry] of Object.entries(field ?? {})) if (entry.versions?.length === 1) this.recorded.set(token, entry.versions[0]);
|
|
33898
|
+
}
|
|
33899
|
+
async forLeaf(leaf, recordedRegions) {
|
|
33900
|
+
if (this.recorded.size === 0) return void 0;
|
|
33901
|
+
let out;
|
|
33902
|
+
for (const token of dynamicReferenceTokens(leaf)) {
|
|
33903
|
+
const pin = this.recorded.get(token);
|
|
33904
|
+
if (pin === void 0) continue;
|
|
33905
|
+
if (!await this.usable(token, pin, recordedRegions)) continue;
|
|
33906
|
+
(out ??= /* @__PURE__ */ new Map()).set(token, pin);
|
|
33907
|
+
}
|
|
33908
|
+
return out;
|
|
33909
|
+
}
|
|
33910
|
+
async usable(token, pin, recordedRegions) {
|
|
33911
|
+
const known = this.verdicts.get(token);
|
|
33912
|
+
if (known !== void 0) return known;
|
|
33913
|
+
const verdict = classifyRecordedSecretRegion(token, this.execCtx.region, this.execCtx.importedProducerRegions, recordedRegions);
|
|
33914
|
+
if (verdict.kind === "ambiguous") return false;
|
|
33915
|
+
const resolver = verdict.kind === "named-region" ? this.resolvers.forRegion(verdict.region) : verdict.kind === "recorded-region" ? this.resolvers.forRecordedRegion(verdict.region) : this.resolvers.primary;
|
|
33916
|
+
let ok;
|
|
33917
|
+
try {
|
|
33918
|
+
await resolver.resolveDynamicReferences(token, {
|
|
33919
|
+
template: { Resources: {} },
|
|
33920
|
+
resources: {},
|
|
33921
|
+
recordedSecretValues: /* @__PURE__ */ new Map(),
|
|
33922
|
+
provenanceSuppressed: true
|
|
33923
|
+
});
|
|
33924
|
+
} catch (err) {
|
|
33925
|
+
if (isDeliberateResolutionRefusal(err)) throw err;
|
|
33926
|
+
}
|
|
33927
|
+
try {
|
|
33928
|
+
const served = await resolver.resolveDynamicReferences(token, {
|
|
33929
|
+
template: { Resources: {} },
|
|
33930
|
+
resources: {},
|
|
33931
|
+
recordedSecretValues: /* @__PURE__ */ new Map(),
|
|
33932
|
+
provenanceSuppressed: true,
|
|
33933
|
+
referencePins: /* @__PURE__ */ new Map([[token, pin]])
|
|
33934
|
+
});
|
|
33935
|
+
ok = served.includes("{{resolve:") || served.length >= 4;
|
|
33936
|
+
if (!ok) getLogger().warn(safeMsg`Rollback of ${this.logicalId} restores a secret reference at its current version, not the version its record names: that value is shorter than four characters, so cdkd could not keep it out of state.`);
|
|
33937
|
+
} catch (err) {
|
|
33938
|
+
if (isDeliberateResolutionRefusal(err)) throw err;
|
|
33939
|
+
getLogger().warn(safeMsg`Rollback of ${this.logicalId} could not read a secret at the version its record names (it may have been deprecated or deleted); restoring the current value instead.`);
|
|
33940
|
+
ok = false;
|
|
33941
|
+
}
|
|
33942
|
+
this.verdicts.set(token, ok);
|
|
33943
|
+
return ok;
|
|
33944
|
+
}
|
|
33945
|
+
};
|
|
33579
33946
|
function refuseMaskedReplayBaseline(props, logicalId, inert = []) {
|
|
33580
33947
|
if (props === void 0 || !carriesSecretMask(props)) return;
|
|
33581
33948
|
if (inert.length > 0 && masksOnlyAt(props, inert)) return;
|
|
@@ -40235,6 +40602,118 @@ function recordedProtectionNote(evidence, flags) {
|
|
|
40235
40602
|
return `${evidence}. AWS refuses to delete the resource while that protection is on, and cdkd deploy has no --remove-protection flag to clear it (only cdkd destroy and cdkd state destroy act on one), so ${flags} alone does not remove the old resource: depending on the replacement order, the deploy either fails at that delete or completes leaving the old resource, and its data, in AWS and no longer tracked by cdkd. Read ${DELETION_PROTECTION_DOC_POINTER} before you disable anything, then turn the protection off out of band (the console, or the service's own API) and re-run with ${flags}.`;
|
|
40236
40603
|
}
|
|
40237
40604
|
|
|
40605
|
+
//#endregion
|
|
40606
|
+
//#region src/deployment/deploy-engine/read-provenance-moved.ts
|
|
40607
|
+
function occurrences(value, token) {
|
|
40608
|
+
if (typeof value === "string") return value.includes(token) ? value.split(token).length - 1 : 0;
|
|
40609
|
+
if (Array.isArray(value)) {
|
|
40610
|
+
let n = 0;
|
|
40611
|
+
for (const item of value) n += occurrences(item, token);
|
|
40612
|
+
return n;
|
|
40613
|
+
}
|
|
40614
|
+
if (value !== null && typeof value === "object") {
|
|
40615
|
+
let n = 0;
|
|
40616
|
+
for (const item of Object.values(value)) n += occurrences(item, token);
|
|
40617
|
+
return n;
|
|
40618
|
+
}
|
|
40619
|
+
return 0;
|
|
40620
|
+
}
|
|
40621
|
+
function readProvenanceMovedPaths(args) {
|
|
40622
|
+
const paths = /* @__PURE__ */ new Set();
|
|
40623
|
+
const tokens = [];
|
|
40624
|
+
const field = referenceProvenanceOf(args.record);
|
|
40625
|
+
if (field === void 0) return {
|
|
40626
|
+
paths,
|
|
40627
|
+
tokens
|
|
40628
|
+
};
|
|
40629
|
+
for (const [token, entry] of Object.entries(field)) {
|
|
40630
|
+
const recorded = entry.readVersions;
|
|
40631
|
+
if (recorded === void 0 || recorded.length === 0) continue;
|
|
40632
|
+
const served = passReadVersionsFor(args.secrets, token);
|
|
40633
|
+
if (served === void 0) continue;
|
|
40634
|
+
if ([...served].every((version) => recorded.includes(version))) continue;
|
|
40635
|
+
const held = /* @__PURE__ */ new Set();
|
|
40636
|
+
for (const key of Object.keys(args.desiredRedacted)) {
|
|
40637
|
+
const count = occurrences(args.desiredRedacted[key], token);
|
|
40638
|
+
if (count === 0) continue;
|
|
40639
|
+
if (count > (Object.hasOwn(args.templateProperties, key) ? occurrences(args.templateProperties[key], token) : 0)) held.add(key);
|
|
40640
|
+
}
|
|
40641
|
+
if (held.size === 0) continue;
|
|
40642
|
+
for (const key of held) paths.add(key);
|
|
40643
|
+
tokens.push({
|
|
40644
|
+
token,
|
|
40645
|
+
paths: held,
|
|
40646
|
+
recorded,
|
|
40647
|
+
served,
|
|
40648
|
+
region: entry.region
|
|
40649
|
+
});
|
|
40650
|
+
}
|
|
40651
|
+
return {
|
|
40652
|
+
paths,
|
|
40653
|
+
tokens
|
|
40654
|
+
};
|
|
40655
|
+
}
|
|
40656
|
+
async function confirmValueMoves(moved, sameValue) {
|
|
40657
|
+
const kept = [];
|
|
40658
|
+
const unchanged = [];
|
|
40659
|
+
for (const entry of moved.tokens) {
|
|
40660
|
+
let equal = entry.recorded.length === 1 ? true : void 0;
|
|
40661
|
+
for (const served of entry.served) {
|
|
40662
|
+
if (equal !== true) break;
|
|
40663
|
+
equal = await sameValue(entry, entry.recorded[0], served);
|
|
40664
|
+
}
|
|
40665
|
+
if (equal === true) unchanged.push(entry);
|
|
40666
|
+
else kept.push(entry);
|
|
40667
|
+
}
|
|
40668
|
+
const paths = /* @__PURE__ */ new Set();
|
|
40669
|
+
for (const entry of kept) for (const key of entry.paths) paths.add(key);
|
|
40670
|
+
return {
|
|
40671
|
+
moved: {
|
|
40672
|
+
paths,
|
|
40673
|
+
tokens: kept
|
|
40674
|
+
},
|
|
40675
|
+
unchanged
|
|
40676
|
+
};
|
|
40677
|
+
}
|
|
40678
|
+
async function sameValueAtVersions(resolver, entry, recorded, served, base) {
|
|
40679
|
+
const context = (pin) => ({
|
|
40680
|
+
template: base.template,
|
|
40681
|
+
resources: base.resources,
|
|
40682
|
+
recordedSecretValues: /* @__PURE__ */ new Map(),
|
|
40683
|
+
provenanceSuppressed: true,
|
|
40684
|
+
referencePins: /* @__PURE__ */ new Map([[entry.token, pin]])
|
|
40685
|
+
});
|
|
40686
|
+
if (entry.region === void 0) return void 0;
|
|
40687
|
+
const reader = resolver.resolverForRecordedRegion(entry.region);
|
|
40688
|
+
try {
|
|
40689
|
+
const now = await reader.resolveDynamicReferences(entry.token, context(served));
|
|
40690
|
+
const then = await reader.resolveDynamicReferences(entry.token, context(recorded));
|
|
40691
|
+
if (now.includes("{{resolve:") || then.includes("{{resolve:")) return void 0;
|
|
40692
|
+
return now === then;
|
|
40693
|
+
} catch (err) {
|
|
40694
|
+
if (isDeliberateResolutionRefusal(err)) throw err;
|
|
40695
|
+
return;
|
|
40696
|
+
}
|
|
40697
|
+
}
|
|
40698
|
+
function withRefreshedReadVersions(record, unchanged) {
|
|
40699
|
+
const field = referenceProvenanceOf(record);
|
|
40700
|
+
if (field === void 0) return record;
|
|
40701
|
+
const out = { ...field };
|
|
40702
|
+
for (const { token, served } of unchanged) {
|
|
40703
|
+
const before = Object.hasOwn(field, token) ? field[token] : void 0;
|
|
40704
|
+
const previousRead = new Set(before?.readVersions ?? []);
|
|
40705
|
+
const versions = [.../* @__PURE__ */ new Set([...(before?.versions ?? []).filter((version) => !previousRead.has(version)), ...served])].sort();
|
|
40706
|
+
if (versions.length > 8) continue;
|
|
40707
|
+
const next = validateReferenceProvenance(token, {
|
|
40708
|
+
...before?.region !== void 0 && { region: before.region },
|
|
40709
|
+
versions,
|
|
40710
|
+
readVersions: [...served].sort()
|
|
40711
|
+
});
|
|
40712
|
+
if (next !== void 0) out[token] = next;
|
|
40713
|
+
}
|
|
40714
|
+
return withReferenceProvenance(record, out);
|
|
40715
|
+
}
|
|
40716
|
+
|
|
40238
40717
|
//#endregion
|
|
40239
40718
|
//#region src/deployment/deploy-engine/noecho.ts
|
|
40240
40719
|
function noEchoExactEchoLeavesOf(record) {
|
|
@@ -42191,12 +42670,23 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
|
|
|
42191
42670
|
};
|
|
42192
42671
|
const suppliesFreshMaskOnlyValue = pendingParameterLeaves.size > 0 || Object.keys(resolvedProps).some((key) => otherFreshAt(key).length > 0);
|
|
42193
42672
|
const rewrittenPaths = readsProducerReplacedThisRun.call(this, template, logicalId, stateResources) ? redactionRewrittenPaths(resolvedProps, desiredForSkipCheck, comparisonCoordinates) : /* @__PURE__ */ new Set();
|
|
42673
|
+
const { moved: provenanceMoved, unchanged: provenanceUnchanged } = await confirmValueMoves(readProvenanceMovedPaths({
|
|
42674
|
+
record: currentResource,
|
|
42675
|
+
templateProperties: desiredProps,
|
|
42676
|
+
desiredRedacted: desiredForSkipCheck,
|
|
42677
|
+
secrets: updateSecrets
|
|
42678
|
+
}), (entry, recordedVersion, servedVersion) => sameValueAtVersions(this.resolver, entry, recordedVersion, servedVersion, {
|
|
42679
|
+
template,
|
|
42680
|
+
resources: stateResources
|
|
42681
|
+
}));
|
|
42682
|
+
for (const path of provenanceMoved.paths) rewrittenPaths.add(path);
|
|
42683
|
+
if (provenanceMoved.paths.size > 0) this.logger.info(safeMsg`${logicalId} is sent: ${[...provenanceMoved.paths].sort().join(", ")} read a secret-derived value at a newer version than ${logicalId} was deployed with (its upstream changed since then)`);
|
|
42194
42684
|
const recordMatchesDesired = movedMasked.size === 0 && rewrittenPaths.size === 0 && keyOrderFreeJson(desiredForSkipCheckAsWritten) === keyOrderFreeJson(currentPropsAsWritten);
|
|
42195
42685
|
const applyAttributeOnlyUpdate = (attributeChanges) => {
|
|
42196
42686
|
const attrSummary = attributeChanges.map((a) => `${a.attribute}: ${a.oldValue ?? "(unset)"} → ${a.newValue ?? "(unset)"}`).join(", ");
|
|
42197
42687
|
this.logger.info(safeMsg` ↻ ${logicalId} (${resourceType}) attribute update: ${attrSummary}`);
|
|
42198
42688
|
stateResources[logicalId] = {
|
|
42199
|
-
...currentResource,
|
|
42689
|
+
...stateResources[logicalId] ?? currentResource,
|
|
42200
42690
|
...this.extractTemplateAttributes(template, logicalId)
|
|
42201
42691
|
};
|
|
42202
42692
|
if (counts) counts.updated++;
|
|
@@ -42266,6 +42756,7 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
|
|
|
42266
42756
|
const differsWhy = (key) => !lateReplacementDeclined.has(key) ? "differs; the provider is not known to report this property exactly, so the difference may be its normalization" : lateCrossPrefixRefused ? "differs; the replacement was refused: see the state-prefix warning above" : `differs; the replacement was not approved (--require-approval=${this.options.requireApproval ?? "never"})`;
|
|
42267
42757
|
if (witnessMigrates && !typeChanged && echoCandidates.length > 0 && hasAddressablePhysicalId(currentResource)) await readOnce();
|
|
42268
42758
|
if (!typeChanged && !suppliesFreshMaskOnlyValue && lostChild === void 0 && this.recreateDirectionFor(stackName, logicalId) === void 0 && recordMatchesDesired) {
|
|
42759
|
+
if (provenanceUnchanged.length > 0) stateResources[logicalId] = withRefreshedReadVersions(stateResources[logicalId] ?? currentResource, provenanceUnchanged);
|
|
42269
42760
|
if (change.attributeChanges && change.attributeChanges.length > 0) {
|
|
42270
42761
|
applyAttributeOnlyUpdate(change.attributeChanges);
|
|
42271
42762
|
return;
|
|
@@ -42411,6 +42902,7 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
|
|
|
42411
42902
|
...remaining.length > 0 && { noEchoLeaves: remaining.map((c) => [...c]) }
|
|
42412
42903
|
};
|
|
42413
42904
|
}
|
|
42905
|
+
if (provenanceUnchanged.length > 0) stateResources[logicalId] = withRefreshedReadVersions(stateResources[logicalId] ?? currentResource, provenanceUnchanged);
|
|
42414
42906
|
this.attemptedResolvedProps.delete(logicalId);
|
|
42415
42907
|
if (change.attributeChanges && change.attributeChanges.length > 0) {
|
|
42416
42908
|
applyAttributeOnlyUpdate(change.attributeChanges);
|
|
@@ -44924,18 +45416,18 @@ function conditionInputsFrom(args) {
|
|
|
44924
45416
|
};
|
|
44925
45417
|
}
|
|
44926
45418
|
const FINGERPRINT_LAYOUT = 1;
|
|
44927
|
-
function isPlainObject(value) {
|
|
45419
|
+
function isPlainObject$1(value) {
|
|
44928
45420
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
44929
45421
|
}
|
|
44930
45422
|
function canonicalJson(value) {
|
|
44931
45423
|
if (Array.isArray(value)) return `[${value.map(canonicalJson).join(",")}]`;
|
|
44932
|
-
if (isPlainObject(value)) return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key])}`).join(",")}}`;
|
|
45424
|
+
if (isPlainObject$1(value)) return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key])}`).join(",")}}`;
|
|
44933
45425
|
const encoded = JSON.stringify(value);
|
|
44934
45426
|
return encoded === void 0 ? "undefined" : encoded;
|
|
44935
45427
|
}
|
|
44936
45428
|
function walkModelledDefinition(value, declaredParameters, parameters, conditions) {
|
|
44937
45429
|
if (typeof value === "string") return !carriesDynamicReference(value);
|
|
44938
|
-
if (!isPlainObject(value)) return false;
|
|
45430
|
+
if (!isPlainObject$1(value)) return false;
|
|
44939
45431
|
const keys = Object.keys(value);
|
|
44940
45432
|
if (keys.length !== 1) return false;
|
|
44941
45433
|
const [key] = keys;
|
|
@@ -44958,8 +45450,8 @@ function walkModelledDefinition(value, declaredParameters, parameters, condition
|
|
|
44958
45450
|
}
|
|
44959
45451
|
function conditionFingerprint(template, name, inputOf) {
|
|
44960
45452
|
const definitions = template.Conditions;
|
|
44961
|
-
if (!isPlainObject(definitions)) return void 0;
|
|
44962
|
-
const declared = isPlainObject(template.Parameters) ? template.Parameters : {};
|
|
45453
|
+
if (!isPlainObject$1(definitions)) return void 0;
|
|
45454
|
+
const declared = isPlainObject$1(template.Parameters) ? template.Parameters : {};
|
|
44963
45455
|
const declaredNames = new Set(Object.keys(declared));
|
|
44964
45456
|
const closure = nullPrototypeRecord();
|
|
44965
45457
|
const parameters = /* @__PURE__ */ new Set();
|
|
@@ -44981,7 +45473,7 @@ function conditionFingerprint(template, name, inputOf) {
|
|
|
44981
45473
|
let hasToken = false;
|
|
44982
45474
|
for (const parameter of parameters) {
|
|
44983
45475
|
const definition = declared[parameter];
|
|
44984
|
-
const type = isPlainObject(definition) ? definition["Type"] : void 0;
|
|
45476
|
+
const type = isPlainObject$1(definition) ? definition["Type"] : void 0;
|
|
44985
45477
|
if (typeof type !== "string") return void 0;
|
|
44986
45478
|
const input = inputOf(parameter);
|
|
44987
45479
|
if (input === void 0) return void 0;
|
|
@@ -45012,7 +45504,7 @@ function collectIfConditionNames(value, names, conditions) {
|
|
|
45012
45504
|
for (const element of value) collectIfConditionNames(element, names, conditions);
|
|
45013
45505
|
return;
|
|
45014
45506
|
}
|
|
45015
|
-
if (!isPlainObject(value)) return;
|
|
45507
|
+
if (!isPlainObject$1(value)) return;
|
|
45016
45508
|
const ifArgs = value["Fn::If"];
|
|
45017
45509
|
if (Array.isArray(ifArgs) && typeof ifArgs[0] === "string") {
|
|
45018
45510
|
names.add(ifArgs[0]);
|
|
@@ -45026,9 +45518,9 @@ function collectIfConditionNames(value, names, conditions) {
|
|
|
45026
45518
|
function conditionsReadByDiff(template, conditions) {
|
|
45027
45519
|
const names = /* @__PURE__ */ new Set();
|
|
45028
45520
|
for (const section of [template.Resources, template.Outputs]) {
|
|
45029
|
-
if (!isPlainObject(section)) continue;
|
|
45521
|
+
if (!isPlainObject$1(section)) continue;
|
|
45030
45522
|
for (const entry of Object.values(section)) {
|
|
45031
|
-
if (!isPlainObject(entry)) continue;
|
|
45523
|
+
if (!isPlainObject$1(entry)) continue;
|
|
45032
45524
|
const gate = entry["Condition"];
|
|
45033
45525
|
if (typeof gate === "string") {
|
|
45034
45526
|
names.add(gate);
|
|
@@ -45060,10 +45552,10 @@ function buildConditionVerdictRecord(template, conditions, inputOf) {
|
|
|
45060
45552
|
function readRecordedConditionVerdicts(state) {
|
|
45061
45553
|
const read = nullPrototypeRecord();
|
|
45062
45554
|
const field = state?.conditionVerdicts;
|
|
45063
|
-
if (!isPlainObject(field)) return read;
|
|
45555
|
+
if (!isPlainObject$1(field)) return read;
|
|
45064
45556
|
for (const name of Object.keys(field)) {
|
|
45065
45557
|
const entry = field[name];
|
|
45066
|
-
if (isPlainObject(entry) && typeof entry["verdict"] === "boolean" && typeof entry["fingerprint"] === "string") read[name] = {
|
|
45558
|
+
if (isPlainObject$1(entry) && typeof entry["verdict"] === "boolean" && typeof entry["fingerprint"] === "string") read[name] = {
|
|
45067
45559
|
verdict: entry["verdict"],
|
|
45068
45560
|
fingerprint: entry["fingerprint"]
|
|
45069
45561
|
};
|
|
@@ -45106,11 +45598,11 @@ function deployConditionInputs(parameterValues, inheritedSecrets, shadowedBy = /
|
|
|
45106
45598
|
function parentSuppliedValues(template, supplied, tokens) {
|
|
45107
45599
|
const names = /* @__PURE__ */ new Set();
|
|
45108
45600
|
if (supplied === void 0) return names;
|
|
45109
|
-
const declared = isPlainObject(template.Parameters) ? template.Parameters : {};
|
|
45601
|
+
const declared = isPlainObject$1(template.Parameters) ? template.Parameters : {};
|
|
45110
45602
|
for (const [name, value] of Object.entries(supplied)) {
|
|
45111
45603
|
if (tokens.has(name)) continue;
|
|
45112
45604
|
const definition = declared[name];
|
|
45113
|
-
const fallback = isPlainObject(definition) ? definition["Default"] : void 0;
|
|
45605
|
+
const fallback = isPlainObject$1(definition) ? definition["Default"] : void 0;
|
|
45114
45606
|
if (fallback === void 0 || String(fallback) !== String(value)) names.add(name);
|
|
45115
45607
|
}
|
|
45116
45608
|
return names;
|
|
@@ -45334,6 +45826,67 @@ function promoteRecreateTargets(changes, recreateTargets, stackName) {
|
|
|
45334
45826
|
};
|
|
45335
45827
|
}
|
|
45336
45828
|
|
|
45829
|
+
//#endregion
|
|
45830
|
+
//#region src/deployment/read-provenance-sources.ts
|
|
45831
|
+
function isPlainObject(value) {
|
|
45832
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
45833
|
+
}
|
|
45834
|
+
function crossStackNodes(value, into = []) {
|
|
45835
|
+
if (Array.isArray(value)) {
|
|
45836
|
+
for (const item of value) crossStackNodes(item, into);
|
|
45837
|
+
return into;
|
|
45838
|
+
}
|
|
45839
|
+
if (!isPlainObject(value)) return into;
|
|
45840
|
+
const keys = Object.keys(value);
|
|
45841
|
+
if (keys.length === 1 && (keys[0] === "Fn::ImportValue" || keys[0] === "Fn::GetStackOutput")) into.push(value);
|
|
45842
|
+
for (const item of Object.values(value)) crossStackNodes(item, into);
|
|
45843
|
+
return into;
|
|
45844
|
+
}
|
|
45845
|
+
function crossStackOutputProvenanceSource(reads, scope, stateBackend) {
|
|
45846
|
+
return async (value) => {
|
|
45847
|
+
const out = [];
|
|
45848
|
+
for (const node of crossStackNodes(value)) {
|
|
45849
|
+
const key = crossStackSourceKey(node);
|
|
45850
|
+
if (key === void 0) continue;
|
|
45851
|
+
const read = reads.get(key);
|
|
45852
|
+
if (read === void 0 || !read.carriesToken) continue;
|
|
45853
|
+
const state = await readProducerStateOnce(scope, stateBackend, read.stackName, read.region, () => void 0, read.state);
|
|
45854
|
+
const bag = outputReferenceProvenanceOf(state, read.outputKey);
|
|
45855
|
+
if (bag !== void 0) out.push(bag);
|
|
45856
|
+
}
|
|
45857
|
+
return out;
|
|
45858
|
+
};
|
|
45859
|
+
}
|
|
45860
|
+
function inheritedProvenanceForChildDiff(args) {
|
|
45861
|
+
const { row, rowRecord, parentRecords, parentTemplate } = args;
|
|
45862
|
+
if (!args.rowProvisioned || rowRecord === void 0) return void 0;
|
|
45863
|
+
const recordedParameters = isPlainObject(rowRecord.properties) ? rowRecord.properties["Parameters"] : void 0;
|
|
45864
|
+
const tokens = referenceTokensIn(recordedParameters);
|
|
45865
|
+
if (tokens.size === 0) return void 0;
|
|
45866
|
+
const own = referenceProvenanceOf(rowRecord);
|
|
45867
|
+
const upstreams = [...new TemplateParser().extractReferences(isPlainObject(row.Properties) ? row.Properties["Parameters"] : void 0)].filter((id) => Object.hasOwn(parentTemplate.Resources, id) && Object.hasOwn(parentRecords, id));
|
|
45868
|
+
const out = /* @__PURE__ */ new Map();
|
|
45869
|
+
for (const token of tokens) {
|
|
45870
|
+
const versions = /* @__PURE__ */ new Set();
|
|
45871
|
+
let region;
|
|
45872
|
+
for (const id of upstreams) {
|
|
45873
|
+
const entry = recordedProvenanceOf(parentRecords[id], token);
|
|
45874
|
+
for (const version of entry?.versions ?? []) versions.add(version);
|
|
45875
|
+
region ??= entry?.region;
|
|
45876
|
+
}
|
|
45877
|
+
if (versions.size > 0) {
|
|
45878
|
+
out.set(token, {
|
|
45879
|
+
...region !== void 0 && { region },
|
|
45880
|
+
versions: [...versions].sort()
|
|
45881
|
+
});
|
|
45882
|
+
continue;
|
|
45883
|
+
}
|
|
45884
|
+
const recorded = own !== void 0 && Object.hasOwn(own, token) ? own[token] : void 0;
|
|
45885
|
+
if (recorded !== void 0) out.set(token, recorded);
|
|
45886
|
+
}
|
|
45887
|
+
return out.size === 0 ? void 0 : out;
|
|
45888
|
+
}
|
|
45889
|
+
|
|
45337
45890
|
//#endregion
|
|
45338
45891
|
//#region src/deployment/deploy-engine/deploy-flow.ts
|
|
45339
45892
|
const TAIL_WARM_CONNECTIONS = 3;
|
|
@@ -45495,13 +46048,18 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
|
|
|
45495
46048
|
}, stackName);
|
|
45496
46049
|
diffResolverContext.bestEffort = true;
|
|
45497
46050
|
diffResolverContext.skipDynamicReferences = true;
|
|
46051
|
+
const crossStackReads = /* @__PURE__ */ new Map();
|
|
46052
|
+
diffResolverContext.crossStackReads = crossStackReads;
|
|
45498
46053
|
const diffResolveFn = (value) => this.resolver.resolve(value, diffResolverContext);
|
|
45499
46054
|
const maskedInputSourcesForDiff = this.maskedInputSources(effectiveTemplate, currentState.resources, conditions, stackName);
|
|
45500
46055
|
const maskedInputs = maskedInputSourcesForDiff && {
|
|
45501
46056
|
sources: maskedInputSourcesForDiff,
|
|
45502
46057
|
rebaselined: /* @__PURE__ */ new Map()
|
|
45503
46058
|
};
|
|
45504
|
-
const changes = await this.diffCalculator.calculateDiff(currentState, effectiveTemplate, diffResolveFn, makeCanonicalizePropertiesFn(this.providerRegistry), this.providerRegistry.getAllowedUnsupportedProperties?.(), freshNoEchoParametersWithDeclared(this.inheritedNoEchoParameters, effectiveTemplate), this.diffLogMasker(diffResolverContext.recordedSecretValues, effectiveTemplate, parameterValues, currentState.resources), recreateTargetIdsFor(this.options.recreateTargets, stackName), maskedInputs, this.options.refusalRecovery, this.noEchoDiffComparison(currentState.resources, effectiveTemplate, conditions, parameterValues, stackName)
|
|
46059
|
+
const changes = await this.diffCalculator.calculateDiff(currentState, effectiveTemplate, diffResolveFn, makeCanonicalizePropertiesFn(this.providerRegistry), this.providerRegistry.getAllowedUnsupportedProperties?.(), freshNoEchoParametersWithDeclared(this.inheritedNoEchoParameters, effectiveTemplate), this.diffLogMasker(diffResolverContext.recordedSecretValues, effectiveTemplate, parameterValues, currentState.resources), recreateTargetIdsFor(this.options.recreateTargets, stackName), maskedInputs, this.options.refusalRecovery, this.noEchoDiffComparison(currentState.resources, effectiveTemplate, conditions, parameterValues, stackName), {
|
|
46060
|
+
...this.options.inheritedReferenceProvenance && { inherited: this.options.inheritedReferenceProvenance },
|
|
46061
|
+
crossStackOutputs: crossStackOutputProvenanceSource(crossStackReads, this.recordedImports, this.stateBackend)
|
|
46062
|
+
});
|
|
45505
46063
|
createOnlyPrefetch.cancel();
|
|
45506
46064
|
for (const [logicalId, fingerprints] of maskedInputs?.rebaselined ?? []) {
|
|
45507
46065
|
const record = currentState.resources[logicalId];
|
|
@@ -46380,5 +46938,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
|
|
|
46380
46938
|
DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
|
|
46381
46939
|
|
|
46382
46940
|
//#endregion
|
|
46383
|
-
export { isTruthyCfnBoolean as $, NO_CC_HANDLERS_REASON as $a, resolveApp as $c, malformedLocalResourceEntriesWarning as $i, ledgerForStack as $n, shareLogOnlyValues as $o, sendableAssumeRoleCommand as $r, hasUnverifiableParameterRefusal as $s, seedsDeleteFirstGuard as $t, noEchoComparisonForTemplate as A, refuseMalformedResourceEntriesForOrphan as Aa, dockerSpawnEnvWithSensitive as Ac, refStateLookupFromResource as Ai, displayAssemblyPath as Al, journaledOrphanPrintingBag as An, TemplateParser as Ao, deleteIndeterminateGuards as Ar, wholeStringLeavesOf as As, dropFailedHint as At, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as B, repairMalformedOrphansForReadOnly as Ba, runDockerForeground as Bc, UNREADABLE_RESOURCES_MAP_ROW as Bi, PRE_DELETE_SNAPSHOT_TYPES as Bn, passedNoEchoParametersOf as Bo, reDisableInstanceApiTermination as Br, rebuildClientForBucketRegion as Bs, getStackRecords as Bt, recordRetainedForReadoption as C, refuseMalformedOutputsForDestroy as Ca, validateContainerRepoName as Cc, carriesDynamicReference as Ci, defineOwnKey as Cl, collectDeclaredOutputNames as Cn, templateResourceTypes as Co, applyCustomResourceResponseExpiration as Cr, carriesSecretMask as Cs, revertNestedChildFromJournal as Ct, withResourceDeadline as D, refuseMalformedResourceEntriesForDestroy as Da, describeDockerCapturedOutput as Dc, AWS_NO_VALUE as Di, ownValue as Dl, DEFAULT_RESOURCE_TIMEOUT_MS as Dn, lambdaFunctionNameForMask as Do, unchangedBehindSecretReference as Dr, recordNoEchoAttributeValues as Ds, getCurrentNestedStackContext as Dt, serviceTokenBlockingReason as E, refuseMalformedResourceEntriesForDeploy as Ea, resolveDockerContextDirectory as Ec, keepsSecretReferenceToken as Ei, nullPrototypeRecord as El, bindingSkippedOutputs as En, canonicalLambdaFunctionName as Eo, slowCcOperationTimeoutMs as Er, recordMaskOnlyValuesIn as Es, collectNestedChildUnaddressed as Et, PROTECTION_PROPERTY_BY_TYPE as F, refuseMalformedResourcesForDeploy as Fa, isMalformedEnvKey as Fc, declaresNoEcho as Fi, clearBucketRegionCache as Fl, secretNamedRecordNeedles as Fn, maskWholeValue as Fo, markWaitAbandoned as Fr, WHOLE_DYNAMIC_REFERENCE_PATTERN as Fs, sameJournaledOrphans as Ft, resolveDynamoDbDeleteBudgetMs as G, unpreviewableOrphanRecords as Ga, stripForDisplay as Gc, hasReadableOutputs as Gi, isFinalSnapshotError as Gn, carryLogOnlyValues as Go, poisonRenderedSpellingsCollidingIn as Gr, isAccessDenied$1 as Gs, isJournaledOrphan as Gt, compensateRemovedDeletionProtection as H, repairMalformedResourceEntriesForReadOnly as Ha, warnFinchArgvExposure as Hc, deployRefusesOrphanRowsReason as Hi, ccRoutedFinalSnapshotError as Hn, readsNoEchoSource as Ho, DiffCalculator as Hr, CrossPrefixScanCache as Hs, removeProtectionTypeList as Ht, isProtectionValueActive as I, refuseMalformedResourcesForDestroy as Ia, partitionSensitiveEnv as Ic, JSON_LISTING_HOLE_VALUE as Ii, resolveBucketRegion as Il, stateSecretNameNeedles as In, maskedLeafCoordinatesOf as Io, disableInstanceApiTermination as Ir, isSingleDynamicReferenceToken as Is, replayFailedOperations as It, deleteTableWithIndexBusyRetry as J, withheldAccountClause as Ja, Synthesizer as Jc, isReadableResourceEntry as Ji, maskingRetryLogger as Jn, literalSplitDelimitersOf as Jo, applyRoleArnIfSet as Jr, acceptedCreateOnlyDropsOf as Js, planRollback as Jt, DELETE_INDEX_WAIT_PROCEED_NOTE as K, unreadableOrphanRecords as Ka, AssetManifestLoader as Kc, hasReadableResources as Ki, refusesFinalSnapshot as Kn, createUnionSecretMasker as Ko, producerLookupOver as Kr, isNotImplemented as Ks, isReplacementOrphan as Kt, perType as L, refuseMalformedResourcesForExport as La, redactDockerArgvValues as Lc, STATE_REGION_DIVERGED as Li, storedSecretNameNeedles as Ln, noEchoCoordinatesOf as Lo, ec2InstanceProtectionSite as Lr, LockManager as Ls, replayRollback as Lt, noEchoParameterNamesOf as M, refuseMalformedResourcePropertiesForDrift as Ma, formatDockerLoginError as Mc, withSharedDrainBudget as Mi, resolveAssemblyPath as Ml, orphanRecordsPrintingBag as Mn, isMarkedCoordinate as Mo, deleteSkipReason as Mr, STATE_SOURCED_CROSS_GENERATION_RULES as Ms, journaledOrphanLines as Mt, recordedProtectionEvidence as N, refuseMalformedResourcePropertiesForExport as Na, getDockerCmd as Nc, parameterInputsFor as Ni, injectAwsRegion as Nl, secretNamePrintingBag as Nn, maskAtCoordinates as No, withIndeterminateGuard as Nr, STATE_SOURCED_READBACK_RULES as Ns, loadJournaledOrphans as Nt, diffSecurity as O, refuseMalformedResourceEntriesForImport as Oa, describeDockerExecFailure as Oc, cfnRefValueFromPhysicalId as Oi, absoluteAssemblyPathEscape as Ol, DEFAULT_RESOURCE_WARN_AFTER_MS as On, sameLambdaFunctionAddress as Oo, RollbackInlinePolicyWriters as Or, recordNoEchoParameterFreshValue as Os, withNestedStackContext as Ot, recordedProtectionNote as P, refuseMalformedResourcePropertiesForOrphan as Pa, isDockerClientEnvKey as Pc, passedParameterClassesOf as Pi, injectedAwsRegionValue as Pl, secretNamePrintingBags as Pn, maskReadbackAtCoordinates as Po, isWaitAbandonedError as Pr, TEMPLATE_SOURCED_RULES as Ps, makeForeignHolderScan as Pt, hasCdkAutoDeleteTag as Q, withoutSilentDropProperties as Qa, loadCdkJson as Qc, malformedLocalOutputsWarning as Qi, earliestDefined as Qn, recordLogOnlyValue as Qo, isIamRoleArn as Qr, hasReasonlessBaselineRefusal as Qs, resolveReplacementOldType as Qt, readProtection as R, refuseMalformedState as Ra, redactedCause as Rc, STATE_RESOURCES_MALFORMED as Ri, extractDeploymentEventError as Rn, noEchoLeavesOf as Ro, isTerminationProtectionPropagationError as Rr, isLockInfoExpired as Rs, awaitInFlightSibling as Rt, keptForReadoption as S, refuseMalformedOutputs as Sa, validateAssetBucketName as Sc, isImpossibleEmptyStoredAttribute as Si, processStackMessages as Sl, noEchoParameterValueSeed as Sn, prefetchCreateOnlyPropertyPaths as So, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Sr, splitGetAttStringForm as Ss, recordDisplacedSkips as St, findServiceTokenRefusals as T, refuseMalformedResourceEntries as Ta, buildDockerImage as Tc, isNamelessDynamicReferenceError as Ti, hasPlainPrototype$1 as Tl, isExportAliasCollision as Tn, withRetry as To, CloudControlProvider as Tr, recordMaskOnlyValue as Ts, withNestedRevertRun as Tt, deleteBudgetKey as U, repairMalformedResourcePropertiesForReadOnly as Ua, escapeRegExp$3 as Uc, displayLogicalId as Ui, createPreDeleteFinalSnapshot as Un, valueAtCoordinate as Uo, INTRINSIC_KEYS as Ur, applyCrossPrefixScan as Us, recordAfterRollbackUpdate as Ut, beginDeleteWait as V, repairMalformedOutputsForReadOnly as Va, runDockerStreaming as Vc, accountArgs as Vi, buildFinalSnapshotIdentifier as Vn, readbackPathFor as Vo, reEnableInstanceApiTermination as Vr, CrossPrefixReadError as Vs, withStackRecords as Vt, resolveDynamoDbDeleteBudgetClock as W, repairMalformedResourcesForReadOnly as Wa, stripControlChars as Wc, hasReadableOrphans as Wi, effectiveDeletionPolicy as Wn, liveMatchesUnresolvedTokenFrame as Wo, IntrinsicFunctionResolver as Wr, crossPrefixDeniedWarning as Ws, demoteSupersededOrphans as Wt, ECR_AUTO_DELETE_IMAGES_TAG as X, findSilentDropProperties as Xa, getDefaultStateBucketName as Xc, malformedExportNamesWarning as Xi, findDestructiveChanges as Xn, printingCorpusOf as Xo, assertSendableRoleArn as Xr, exportNamesCarriedFrom as Xs, recordUnderIdIsNotOwn as Xt, waitForIndexesSettled as Y, findActionableSilentDrops as Ya, synthesisStatusMessage as Yc, malformedDriftResourcePropertiesWarning as Yi, constructPathOf as Yn, logOnlyValueCount as Yo, assertFlagRoleArn as Yr, describeRegionValueKind as Ys, recheckFailedPlan as Yt, S3_AUTO_DELETE_OBJECTS_TAG as Z, unwrittenCreateOnlyReplacement as Za, getLegacyStateBucketName as Zc, malformedExportSourceWarning as Zi, formatDestructiveChange as Zn, recordLogOnlyParameterValue as Zo, explicitRoleArnOrThrow as Zr, hasReadableExportSet as Zs, replacementNeverSwapped as Zt, makeCanonicalizePropertiesFn as _, refuseMalformedOrphanRecords as _a, ensureAssetStorage as _c, regionLessSecretName as _i, PARTITION_TABLE as _l, secretSafeKeyDisplay as _n, readConfigString as _o, TemplateNoEchoReresolver as _r, recordNestedStackParameterExpressions as _s, displacedOpClause as _t, findNestedTemplateTreeDefect as a, malformedOrphansWarning as aa, shouldRetainResource as ac, keepHeldTokenProvenance as ai, resolveUseCdkBootstrapAssets as al, isRedactedRecordedValue as an, isStatefulRecreateTargetSync as ao, planTagDiff as ar, recordReferenceProvenanceEntry as as, cyan as at, lookupEachName as b, refuseMalformedOrphansForDestroy as ba, parseBootstrapMarker as bc, parameterTypeMayLoseSecretIdentity as bi, AssemblyReader as bl, exportNameSecretExposure as bn, requireConfigObject as bo, getCurrentResourceSecrets as br, recordAttributeIdCopy as bs, getNestedRevertRun as bt, renderNestedTemplateTreeDefect as c, malformedRenderedContainersWarning as ca, stringifyValue as cc, recordedReferenceRegions as ci, ssmResolvedValueType as cl, updatePartialMessage as cn, coerceWarmThroughput as co, tagMapAsList as cr, scrubResourceRecord as cs, red as ct, conditionInputsFrom as d, malformedResourcesWarning as da, createAssetRedirectResolver as dc, s3BucketDualStackDomainName as di, MIGRATE_TMP_PREFIX as dl, DeploymentEventsStore as dn, toFiniteNumber as do, stringifyIfAssigned as dr, DYNAMIC_REFERENCE_TOKEN_SCAN as ds, namesAnyDeclaredParameter as dt, malformedLocalResourcesWarning as ea, importableOutputKeys as ec, AWS_CREDENTIAL_ENV_KEYS as ei, resolveAutoAssetStorage as el, orphanDeleteNeedsIdentity as en, hasNoCloudControlHandlers as eo, reserveStackCreateToken as er, createSecretMasker as es, getPriorAttempts as et, parentSuppliedValues as f, malformedScrubResourceEntriesRefusalMessage as fa, loadPublishableAssetManifest as fc, s3BucketRegionalDomainName as fi, findLargeInlineResources as fl, WITHHELD_NAME_DISPLAY as fn, coerceCfnBoolean as fo, CC_BROKEN_REASON as fr, dynamicReferenceTokens as fs, reachableDivergentParameters as ft, mergeNoChangeOutputs as g, refuseMalformedNestedChildOutputs as ga, assertAssetBucketRegion as gc, producerRegionsFromState as gi, expectedOwnerParam as gl, secretBearingStateKeyWarning as gn, configStringRefusal as go, wouldReturnToSdkProvider as gr, inheritNestedStackParameterAssociations as gs, NESTED_PENDING_PARENT_REASON as gt, keptWholeReasonText as h, refuseDivergentRecordRegionForDestroy as ha, BOOTSTRAP_MARKER_PREFIX as hc, classifyReplaySecretRegion as hi, decodeListingKey as hl, secretBearing as hn, configIntegerRefusal as ho, isCustomResource as hr, identityKeyFor as hs, planOrphanAdoption as ht, childTemplateLoader as i, malformedOrphansRefusalMessage as ia, orphansCarriedFrom as ic, isSettledInstanceState as ii, resolveStateBucketWithDefaultAndSource as il, REDACTED_DELETE_ADDRESS_SKIP_REASON as in, isStatefulRecreateTargetForReplace as io, DBPROXY_TAG_OPTIONS as ir, markSameGenerationBag as is, bold as it, noEchoExactEchoLeavesOf as j, refuseMalformedResourcePropertiesForDestroy as ja, finchSecretArgvRefusal as jc, parseWebACLArn as ji, renderAssemblyPathEscape as jl, maskEventTextWithBoundBags as jn, canonicalCoordinates as jo, deleteLeftInPlace as jr, STATE_SOURCED_BASELINE_RULES as js, isHandledOrphan as jt, noEchoAttributeNamesOf as k, refuseMalformedResourceEntriesForImportSave as ka, describeDockerFailure as kc, isStalePlaceholderArnAttribute as ki, describeFileReadFailure as kl, completedReplayEntries as kn, DagBuilder as ko, UNSPECIFIED_SKIP_REASON as kr, recordProvenPublicExpression as ks, deleteJournaledOrphans as kt, templateIdentity as l, malformedResourceEntriesWarning as la, WorkGraph as lc, s3BucketArn as li, CFN_TEMPLATE_BODY_LIMIT as ll, updatePartialReason as ln, isWarmThroughputDecrease as lo, tagPlanWarning as lr, withPhysicalNameCopies as ls, yellow as lt, isSecretBearingReferenceString as m, previewableOrphanRecords as ma, AssetModeResolver as mc, classifyRecordedSecretRegion as mi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as ml, exportAliasCollisionScrubWarning as mn, configBooleanRefusal as mo, ccBrokenReason as mr, pathCrossesDottedKey as ms, makeSiblingClaimReader as mt, IMPLICIT_DELETE_DEPENDENCIES as n, malformedOrphanRecordsWarning as na, isReadableBag as nc, callerEnvCredentials as ni, resolveSkipPrefix as nl, getCurrentProducerRegions as nn, shownType as no, acquireIdempotencyToken as nr, maskSecretsInError as ns, formatResourceLine as nt, isAbsoluteAssetPath as o, malformedOutputsRefusalMessage as oa, AssetPublisher as oc, outputReferenceProvenanceOf as oi, stateBucketExistenceConfirmed as ol, redactedDeleteAddressFields as on, renderStatefulReason as oo, readTagList as or, snapshotPassProvenance as os, gray as ot, readRecordedConditionVerdicts as p, malformedStateRefusalMessage as pa, rewriteTemplateAssetReferences as pc, s3BucketWebsiteUrl as pi, uploadCfnTemplate as pl, displayTextOrWithheld as pn, coerceCfnInteger as po, ProviderRegistry as pr, isUncertifiedBaselineMaskPosition as ps, resourcesNamingDeclaredParameter as pt, INDEX_SETTLE_POLL_INTERVAL_MS as q, unreadableResourceEntries as qa, getDockerImageBySourceHash as qc, isReadableOrphanRecord as qi, unsupportedFinalSnapshotError as qn, hasMaskableValues as qo, refuseUnreadableCdkCrossAccountRefs as qr, splitImportedOps as qs, planFailedOps as qt, computeImplicitDeleteEdges as r, malformedOrphanRowsKeptWarning as ra, orphansAfterRollback as rc, envCredentialsAreAssumedRole as ri, resolveStateBucketWithDefault as rl, inheritProducerRegions as rn, MULTI_REGION_RECREATE_BLOCKED_TYPES as ro, DBPROXY_TAGS_WHAT as rr, maskSecretsInText as rs, createReadOnlyAttributeHealerFactory as rt, listNestedTemplateRows as s, malformedOutputsWarning as sa, isSensitiveAttributeName as sc, recordedOutputReferenceRegions as si, warnDeprecatedNoPrefixCliFlag as sl, redactedDeleteAddressSkip as sn, WARM_THROUGHPUT_MEMBERS as so, refuseMalformedDesiredTags as sr, redactSecretsForState as ss, green as st, DeployEngine as t, malformedOrphanRecordsRefusalMessage as ta, importableOutputs as tc, applyCallerIdentityCredentials as ti, resolveCaptureObservedState as tl, findNestedStackTypeChanges as tn, findReplacedReadersOfRecreateTargets as to, withCreateTokenLedger as tr, errorCauseChain as ts, markRefusedBeforeApplying as tt, conditionFingerprint as u, malformedResourcePropertiesWarning as ua, buildAssetRedirectMap as uc, s3BucketDomainName as ui, CFN_TEMPLATE_URL_LIMIT as ul, DeploymentEventsReader as un, toCfnInteger as uo, definedAttributes as ur, withoutPhysicalNameCopies as us, computeParameterTaint as ut, chunks as v, refuseMalformedOrphanRecordsForDestroy as va, getBootstrapMarkerKey as vc, coerceParameterTypedValue as vi, canonicalizeRegion as vl, carriedExportAliasExposure as vn, replayWarn as vo, readsNoEchoDeleteValues as vr, recoverMaskedOutput as vs, displacedPhysicalIdShown as vt, deferredServiceTokenWarning as w, refuseMalformedResourceAttributesForOrphan as wa, buildDenyExternalAccessPolicy as wc, carriesFetchableDynamicReference as wi, hasOwnKey as wl, collectPublishedOutputNames as wn, describeTypeWithThrottleRetry as wo, customResourceResponseExpirationWarning as wr, provenPublicValue as ws, revertedNestedRowIds as wt, withApiLimit as x, refuseMalformedOrphansForOrphan as xa, readBootstrapMarkerBody as xc, getAccountInfo as xi, StageLoadError as xl, isWholeDynamicReferenceValue as xn, requireConfigString as xo, withPrintingSecrets as xr, recordPhysicalNameCopy as xs, nestedChildStackName as xt, isAccessDeniedError as y, refuseMalformedOrphans as ya, isCrossRegionRedirect as yc, isUnboundTemplateParameter as yi, derivePartitionAndUrlSuffix as yl, exportNameNoEchoParameters as yn, requireConfigArray as yo, isCustomResourceType as yr, physicalNameCopiesOf as ys, dropSettledNestedJournals as yt, DynamoDBGlobalTableProvider as z, repairMalformedOrphanRecordsForReadOnly as za, redactedDockerCause as zc, UNREADABLE_ORPHANS_CONTAINER_ROW as zi, ATOMIC_FINAL_SNAPSHOT_TYPES as zn, noEchoOutputsComparison as zo, observeThenDisableInstanceApiTermination as zr, S3StateBackend as zs, destroyStackRecordsView as zt };
|
|
46384
|
-
//# sourceMappingURL=deploy-engine-
|
|
46941
|
+
export { S3_AUTO_DELETE_OBJECTS_TAG as $, unwrittenCreateOnlyReplacement as $a, getLegacyStateBucketName as $c, malformedExportSourceWarning as $i, formatDestructiveChange as $n, recordLogOnlyParameterValue as $o, explicitRoleArnOrThrow as $r, hasReadableExportSet as $s, replacementNeverSwapped as $t, diffSecurity as A, refuseMalformedResourceEntriesForImport as Aa, describeDockerExecFailure as Ac, cfnRefValueFromPhysicalId as Ai, absoluteAssemblyPathEscape as Al, DEFAULT_RESOURCE_WARN_AFTER_MS as An, sameLambdaFunctionAddress as Ao, RollbackInlinePolicyWriters as Ar, recordNoEchoParameterFreshValue as As, withNestedStackContext as At, readProtection as B, refuseMalformedState as Ba, redactedCause as Bc, STATE_RESOURCES_MALFORMED as Bi, extractDeploymentEventError as Bn, noEchoLeavesOf as Bo, isTerminationProtectionPropagationError as Br, isLockInfoExpired as Bs, awaitInFlightSibling as Bt, withApiLimit as C, refuseMalformedOrphansForOrphan as Ca, readBootstrapMarkerBody as Cc, getAccountInfo as Ci, StageLoadError as Cl, isWholeDynamicReferenceValue as Cn, requireConfigString as Co, withPrintingSecrets as Cr, recordPhysicalNameCopy as Cs, nestedChildStackName as Ct, findServiceTokenRefusals as D, refuseMalformedResourceEntries as Da, buildDockerImage as Dc, isNamelessDynamicReferenceError as Di, hasPlainPrototype$1 as Dl, isExportAliasCollision as Dn, withRetry as Do, CloudControlProvider as Dr, recordMaskOnlyValue as Ds, withNestedRevertRun as Dt, deferredServiceTokenWarning as E, refuseMalformedResourceAttributesForOrphan as Ea, buildDenyExternalAccessPolicy as Ec, carriesFetchableDynamicReference as Ei, hasOwnKey as El, collectPublishedOutputNames as En, describeTypeWithThrottleRetry as Eo, customResourceResponseExpirationWarning as Er, provenPublicValue as Es, revertedNestedRowIds as Et, recordedProtectionEvidence as F, refuseMalformedResourcePropertiesForExport as Fa, getDockerCmd as Fc, parameterInputsFor as Fi, injectAwsRegion as Fl, secretNamePrintingBag as Fn, maskAtCoordinates as Fo, withIndeterminateGuard as Fr, STATE_SOURCED_READBACK_RULES as Fs, loadJournaledOrphans as Ft, deleteBudgetKey as G, repairMalformedResourcePropertiesForReadOnly as Ga, escapeRegExp$3 as Gc, displayLogicalId as Gi, createPreDeleteFinalSnapshot as Gn, valueAtCoordinate as Go, INTRINSIC_KEYS as Gr, applyCrossPrefixScan as Gs, recordAfterRollbackUpdate as Gt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as H, repairMalformedOrphansForReadOnly as Ha, runDockerForeground as Hc, UNREADABLE_RESOURCES_MAP_ROW as Hi, PRE_DELETE_SNAPSHOT_TYPES as Hn, passedNoEchoParametersOf as Ho, reDisableInstanceApiTermination as Hr, rebuildClientForBucketRegion as Hs, getStackRecords as Ht, recordedProtectionNote as I, refuseMalformedResourcePropertiesForOrphan as Ia, isDockerClientEnvKey as Ic, passedParameterClassesOf as Ii, injectedAwsRegionValue as Il, secretNamePrintingBags as In, maskReadbackAtCoordinates as Io, isWaitAbandonedError as Ir, TEMPLATE_SOURCED_RULES as Is, makeForeignHolderScan as It, DELETE_INDEX_WAIT_PROCEED_NOTE as J, unreadableOrphanRecords as Ja, AssetManifestLoader as Jc, hasReadableResources as Ji, refusesFinalSnapshot as Jn, createUnionSecretMasker as Jo, producerLookupOver as Jr, isNotImplemented as Js, isReplacementOrphan as Jt, resolveDynamoDbDeleteBudgetClock as K, repairMalformedResourcesForReadOnly as Ka, stripControlChars as Kc, hasReadableOrphans as Ki, effectiveDeletionPolicy as Kn, liveMatchesUnresolvedTokenFrame as Ko, IntrinsicFunctionResolver as Kr, crossPrefixDeniedWarning as Ks, demoteSupersededOrphans as Kt, PROTECTION_PROPERTY_BY_TYPE as L, refuseMalformedResourcesForDeploy as La, isMalformedEnvKey as Lc, declaresNoEcho as Li, clearBucketRegionCache as Ll, secretNamedRecordNeedles as Ln, maskWholeValue as Lo, markWaitAbandoned as Lr, WHOLE_DYNAMIC_REFERENCE_PATTERN as Ls, sameJournaledOrphans as Lt, noEchoComparisonForTemplate as M, refuseMalformedResourceEntriesForOrphan as Ma, dockerSpawnEnvWithSensitive as Mc, refStateLookupFromResource as Mi, displayAssemblyPath as Ml, journaledOrphanPrintingBag as Mn, TemplateParser as Mo, deleteIndeterminateGuards as Mr, wholeStringLeavesOf as Ms, dropFailedHint as Mt, noEchoExactEchoLeavesOf as N, refuseMalformedResourcePropertiesForDestroy as Na, finchSecretArgvRefusal as Nc, parseWebACLArn as Ni, renderAssemblyPathEscape as Nl, maskEventTextWithBoundBags as Nn, canonicalCoordinates as No, deleteLeftInPlace as Nr, STATE_SOURCED_BASELINE_RULES as Ns, isHandledOrphan as Nt, serviceTokenBlockingReason as O, refuseMalformedResourceEntriesForDeploy as Oa, resolveDockerContextDirectory as Oc, keepsSecretReferenceToken as Oi, nullPrototypeRecord as Ol, bindingSkippedOutputs as On, canonicalLambdaFunctionName as Oo, slowCcOperationTimeoutMs as Or, recordMaskOnlyValuesIn as Os, collectNestedChildUnaddressed as Ot, noEchoParameterNamesOf as P, refuseMalformedResourcePropertiesForDrift as Pa, formatDockerLoginError as Pc, withSharedDrainBudget as Pi, resolveAssemblyPath as Pl, orphanRecordsPrintingBag as Pn, isMarkedCoordinate as Po, deleteSkipReason as Pr, STATE_SOURCED_CROSS_GENERATION_RULES as Ps, journaledOrphanLines as Pt, ECR_AUTO_DELETE_IMAGES_TAG as Q, findSilentDropProperties as Qa, getDefaultStateBucketName as Qc, malformedExportNamesWarning as Qi, findDestructiveChanges as Qn, printingCorpusOf as Qo, assertSendableRoleArn as Qr, exportNamesCarriedFrom as Qs, recordUnderIdIsNotOwn as Qt, isProtectionValueActive as R, refuseMalformedResourcesForDestroy as Ra, partitionSensitiveEnv as Rc, JSON_LISTING_HOLE_VALUE as Ri, resolveBucketRegion as Rl, stateSecretNameNeedles as Rn, maskedLeafCoordinatesOf as Ro, disableInstanceApiTermination as Rr, isSingleDynamicReferenceToken as Rs, replayFailedOperations as Rt, lookupEachName as S, refuseMalformedOrphansForDestroy as Sa, parseBootstrapMarker as Sc, parameterTypeMayLoseSecretIdentity as Si, AssemblyReader as Sl, exportNameSecretExposure as Sn, requireConfigObject as So, getCurrentResourceSecrets as Sr, recordAttributeIdCopy as Ss, getNestedRevertRun as St, recordRetainedForReadoption as T, refuseMalformedOutputsForDestroy as Ta, validateContainerRepoName as Tc, carriesDynamicReference as Ti, defineOwnKey as Tl, collectDeclaredOutputNames as Tn, templateResourceTypes as To, applyCustomResourceResponseExpiration as Tr, carriesSecretMask as Ts, revertNestedChildFromJournal as Tt, beginDeleteWait as U, repairMalformedOutputsForReadOnly as Ua, runDockerStreaming as Uc, accountArgs as Ui, buildFinalSnapshotIdentifier as Un, readbackPathFor as Uo, reEnableInstanceApiTermination as Ur, CrossPrefixReadError as Us, withStackRecords as Ut, DynamoDBGlobalTableProvider as V, repairMalformedOrphanRecordsForReadOnly as Va, redactedDockerCause as Vc, UNREADABLE_ORPHANS_CONTAINER_ROW as Vi, ATOMIC_FINAL_SNAPSHOT_TYPES as Vn, noEchoOutputsComparison as Vo, observeThenDisableInstanceApiTermination as Vr, S3StateBackend as Vs, destroyStackRecordsView as Vt, compensateRemovedDeletionProtection as W, repairMalformedResourceEntriesForReadOnly as Wa, warnFinchArgvExposure as Wc, deployRefusesOrphanRowsReason as Wi, ccRoutedFinalSnapshotError as Wn, readsNoEchoSource as Wo, DiffCalculator as Wr, CrossPrefixScanCache as Ws, removeProtectionTypeList as Wt, deleteTableWithIndexBusyRetry as X, withheldAccountClause as Xa, Synthesizer as Xc, isReadableResourceEntry as Xi, maskingRetryLogger as Xn, literalSplitDelimitersOf as Xo, applyRoleArnIfSet as Xr, acceptedCreateOnlyDropsOf as Xs, planRollback as Xt, INDEX_SETTLE_POLL_INTERVAL_MS as Y, unreadableResourceEntries as Ya, getDockerImageBySourceHash as Yc, isReadableOrphanRecord as Yi, unsupportedFinalSnapshotError as Yn, hasMaskableValues as Yo, refuseUnreadableCdkCrossAccountRefs as Yr, splitImportedOps as Ys, planFailedOps as Yt, waitForIndexesSettled as Z, findActionableSilentDrops as Za, synthesisStatusMessage as Zc, malformedDriftResourcePropertiesWarning as Zi, constructPathOf as Zn, logOnlyValueCount as Zo, assertFlagRoleArn as Zr, describeRegionValueKind as Zs, recheckFailedPlan as Zt, keptWholeReasonText as _, refuseDivergentRecordRegionForDestroy as _a, BOOTSTRAP_MARKER_PREFIX as _c, classifyReplaySecretRegion as _i, decodeListingKey as _l, secretBearing as _n, configIntegerRefusal as _o, isCustomResource as _r, identityKeyFor as _s, planOrphanAdoption as _t, inheritedProvenanceForChildDiff as a, malformedOrphanRowsKeptWarning as aa, orphansAfterRollback as ac, envCredentialsAreAssumedRole as ai, resolveStateBucketWithDefault as al, inheritProducerRegions as an, MULTI_REGION_RECREATE_BLOCKED_TYPES as ao, DBPROXY_TAGS_WHAT as ar, maskSecretsInText as as, createReadOnlyAttributeHealerFactory as at, chunks as b, refuseMalformedOrphanRecordsForDestroy as ba, getBootstrapMarkerKey as bc, coerceParameterTypedValue as bi, canonicalizeRegion as bl, carriedExportAliasExposure as bn, replayWarn as bo, readsNoEchoDeleteValues as br, recoverMaskedOutput as bs, displacedPhysicalIdShown as bt, isAbsoluteAssetPath as c, malformedOutputsRefusalMessage as ca, AssetPublisher as cc, outputReferenceProvenanceOf as ci, stateBucketExistenceConfirmed as cl, redactedDeleteAddressFields as cn, renderStatefulReason as co, readTagList as cr, snapshotPassProvenance as cs, gray as ct, templateIdentity as d, malformedResourceEntriesWarning as da, WorkGraph as dc, s3BucketArn as di, CFN_TEMPLATE_BODY_LIMIT as dl, updatePartialReason as dn, isWarmThroughputDecrease as do, tagPlanWarning as dr, withPhysicalNameCopies as ds, yellow as dt, malformedLocalOutputsWarning as ea, hasReasonlessBaselineRefusal as ec, isIamRoleArn as ei, loadCdkJson as el, resolveReplacementOldType as en, withoutSilentDropProperties as eo, earliestDefined as er, recordLogOnlyValue as es, hasCdkAutoDeleteTag as et, conditionFingerprint as f, malformedResourcePropertiesWarning as fa, buildAssetRedirectMap as fc, s3BucketDomainName as fi, CFN_TEMPLATE_URL_LIMIT as fl, DeploymentEventsReader as fn, toCfnInteger as fo, definedAttributes as fr, withoutPhysicalNameCopies as fs, computeParameterTaint as ft, isSecretBearingReferenceString as g, previewableOrphanRecords as ga, AssetModeResolver as gc, classifyRecordedSecretRegion as gi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as gl, exportAliasCollisionScrubWarning as gn, configBooleanRefusal as go, ccBrokenReason as gr, pathCrossesDottedKey as gs, makeSiblingClaimReader as gt, readRecordedConditionVerdicts as h, malformedStateRefusalMessage as ha, rewriteTemplateAssetReferences as hc, s3BucketWebsiteUrl as hi, uploadCfnTemplate as hl, displayTextOrWithheld as hn, coerceCfnInteger as ho, ProviderRegistry as hr, isUncertifiedBaselineMaskPosition as hs, resourcesNamingDeclaredParameter as ht, crossStackOutputProvenanceSource as i, malformedOrphanRecordsWarning as ia, isReadableBag as ic, callerEnvCredentials as ii, resolveSkipPrefix as il, getCurrentProducerRegions as in, shownType as io, acquireIdempotencyToken as ir, maskSecretsInError as is, formatResourceLine as it, noEchoAttributeNamesOf as j, refuseMalformedResourceEntriesForImportSave as ja, describeDockerFailure as jc, isStalePlaceholderArnAttribute as ji, describeFileReadFailure as jl, completedReplayEntries as jn, DagBuilder as jo, UNSPECIFIED_SKIP_REASON as jr, recordProvenPublicExpression as js, deleteJournaledOrphans as jt, withResourceDeadline as k, refuseMalformedResourceEntriesForDestroy as ka, describeDockerCapturedOutput as kc, AWS_NO_VALUE as ki, ownValue as kl, DEFAULT_RESOURCE_TIMEOUT_MS as kn, lambdaFunctionNameForMask as ko, unchangedBehindSecretReference as kr, recordNoEchoAttributeValues as ks, getCurrentNestedStackContext as kt, listNestedTemplateRows as l, malformedOutputsWarning as la, isSensitiveAttributeName as lc, recordedOutputReferenceRegions as li, warnDeprecatedNoPrefixCliFlag as ll, redactedDeleteAddressSkip as ln, WARM_THROUGHPUT_MEMBERS as lo, refuseMalformedDesiredTags as lr, redactSecretsForState as ls, green as lt, parentSuppliedValues as m, malformedScrubResourceEntriesRefusalMessage as ma, loadPublishableAssetManifest as mc, s3BucketRegionalDomainName as mi, findLargeInlineResources as ml, WITHHELD_NAME_DISPLAY as mn, coerceCfnBoolean as mo, CC_BROKEN_REASON as mr, dynamicReferenceTokens as ms, reachableDivergentParameters as mt, IMPLICIT_DELETE_DEPENDENCIES as n, malformedLocalResourcesWarning as na, importableOutputKeys as nc, AWS_CREDENTIAL_ENV_KEYS as ni, resolveAutoAssetStorage as nl, orphanDeleteNeedsIdentity as nn, hasNoCloudControlHandlers as no, reserveStackCreateToken as nr, createSecretMasker as ns, getPriorAttempts as nt, childTemplateLoader as o, malformedOrphansRefusalMessage as oa, orphansCarriedFrom as oc, isSettledInstanceState as oi, resolveStateBucketWithDefaultAndSource as ol, REDACTED_DELETE_ADDRESS_SKIP_REASON as on, isStatefulRecreateTargetForReplace as oo, DBPROXY_TAG_OPTIONS as or, markSameGenerationBag as os, bold as ot, conditionInputsFrom as p, malformedResourcesWarning as pa, createAssetRedirectResolver as pc, s3BucketDualStackDomainName as pi, MIGRATE_TMP_PREFIX as pl, DeploymentEventsStore as pn, toFiniteNumber as po, stringifyIfAssigned as pr, DYNAMIC_REFERENCE_TOKEN_SCAN as ps, namesAnyDeclaredParameter as pt, resolveDynamoDbDeleteBudgetMs as q, unpreviewableOrphanRecords as qa, stripForDisplay as qc, hasReadableOutputs as qi, isFinalSnapshotError as qn, carryLogOnlyValues as qo, poisonRenderedSpellingsCollidingIn as qr, isAccessDenied$1 as qs, isJournaledOrphan as qt, computeImplicitDeleteEdges as r, malformedOrphanRecordsRefusalMessage as ra, importableOutputs as rc, applyCallerIdentityCredentials as ri, resolveCaptureObservedState as rl, findNestedStackTypeChanges as rn, findReplacedReadersOfRecreateTargets as ro, withCreateTokenLedger as rr, errorCauseChain as rs, markRefusedBeforeApplying as rt, findNestedTemplateTreeDefect as s, malformedOrphansWarning as sa, shouldRetainResource as sc, keepHeldTokenProvenance as si, resolveUseCdkBootstrapAssets as sl, isRedactedRecordedValue as sn, isStatefulRecreateTargetSync as so, planTagDiff as sr, recordReferenceProvenanceEntry as ss, cyan as st, DeployEngine as t, malformedLocalResourceEntriesWarning as ta, hasUnverifiableParameterRefusal as tc, sendableAssumeRoleCommand as ti, resolveApp as tl, seedsDeleteFirstGuard as tn, NO_CC_HANDLERS_REASON as to, ledgerForStack as tr, shareLogOnlyValues as ts, isTruthyCfnBoolean as tt, renderNestedTemplateTreeDefect as u, malformedRenderedContainersWarning as ua, stringifyValue as uc, recordedReferenceRegions as ui, ssmResolvedValueType as ul, updatePartialMessage as un, coerceWarmThroughput as uo, tagMapAsList as ur, scrubResourceRecord as us, red as ut, mergeNoChangeOutputs as v, refuseMalformedNestedChildOutputs as va, assertAssetBucketRegion as vc, producerRegionsFromState as vi, expectedOwnerParam as vl, secretBearingStateKeyWarning as vn, configStringRefusal as vo, wouldReturnToSdkProvider as vr, inheritNestedStackParameterAssociations as vs, NESTED_PENDING_PARENT_REASON as vt, keptForReadoption as w, refuseMalformedOutputs as wa, validateAssetBucketName as wc, isImpossibleEmptyStoredAttribute as wi, processStackMessages as wl, noEchoParameterValueSeed as wn, prefetchCreateOnlyPropertyPaths as wo, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as wr, splitGetAttStringForm as ws, recordDisplacedSkips as wt, isAccessDeniedError as x, refuseMalformedOrphans as xa, isCrossRegionRedirect as xc, isUnboundTemplateParameter as xi, derivePartitionAndUrlSuffix as xl, exportNameNoEchoParameters as xn, requireConfigArray as xo, isCustomResourceType as xr, physicalNameCopiesOf as xs, dropSettledNestedJournals as xt, makeCanonicalizePropertiesFn as y, refuseMalformedOrphanRecords as ya, ensureAssetStorage as yc, regionLessSecretName as yi, PARTITION_TABLE as yl, secretSafeKeyDisplay as yn, readConfigString as yo, TemplateNoEchoReresolver as yr, recordNestedStackParameterExpressions as ys, displacedOpClause as yt, perType as z, refuseMalformedResourcesForExport as za, redactDockerArgvValues as zc, STATE_REGION_DIVERGED as zi, storedSecretNameNeedles as zn, noEchoCoordinatesOf as zo, ec2InstanceProtectionSite as zr, LockManager as zs, replayRollback as zt };
|
|
46942
|
+
//# sourceMappingURL=deploy-engine-DWIbDQdg.js.map
|