@go-to-k/cdkd 0.299.7 → 0.300.0
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-DJcywE5x.js → asg-provider-COcKVcvZ.js} +3 -3
- package/dist/{asg-provider-DJcywE5x.js.map → asg-provider-COcKVcvZ.js.map} +1 -1
- package/dist/{aws-clients-Bj7qH5Ph.js → aws-clients-B_CEQGE1.js} +21 -1
- package/dist/aws-clients-B_CEQGE1.js.map +1 -0
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-C8vr7ip7.js → deploy-engine-C-4ho8TJ.js} +598 -54
- package/dist/deploy-engine-C-4ho8TJ.js.map +1 -0
- package/dist/{iam-policy-targets-dAY3-gXJ.js → iam-policy-targets-BxP3yqlr.js} +5 -5
- package/dist/{iam-policy-targets-dAY3-gXJ.js.map → iam-policy-targets-BxP3yqlr.js.map} +1 -1
- package/dist/{iam-role-provider-B6J_r85R.js → iam-role-provider-a-8z7Dpm.js} +4 -4
- package/dist/{iam-role-provider-B6J_r85R.js.map → iam-role-provider-a-8z7Dpm.js.map} +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/{neptune-provider-CEvdRHVa.js → neptune-provider-Bnr2VC6V.js} +3 -3
- package/dist/{neptune-provider-CEvdRHVa.js.map → neptune-provider-Bnr2VC6V.js.map} +1 -1
- package/dist/{program-CDhS17Aj.js → program-BHjdsRtD.js} +668 -512
- package/dist/program-BHjdsRtD.js.map +1 -0
- package/dist/{provider-classes-BaayIZYt.js → provider-classes-CVC9_-km.js} +1217 -101
- package/dist/provider-classes-CVC9_-km.js.map +1 -0
- package/dist/{rds-provider-CvZqL4Ut.js → rds-provider-QKN-WHF3.js} +3 -3
- package/dist/{rds-provider-CvZqL4Ut.js.map → rds-provider-QKN-WHF3.js.map} +1 -1
- package/dist/{version-OFXndzzC.js → version-CXGQKplb.js} +2 -2
- package/dist/{version-OFXndzzC.js.map → version-CXGQKplb.js.map} +1 -1
- package/package.json +3 -1
- package/dist/aws-clients-Bj7qH5Ph.js.map +0 -1
- package/dist/deploy-engine-C8vr7ip7.js.map +0 -1
- package/dist/program-CDhS17Aj.js.map +0 -1
- package/dist/provider-classes-BaayIZYt.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { r as getAwsClients, s as __exportAll } from "./aws-clients-
|
|
1
|
+
import { r as getAwsClients, s as __exportAll } from "./aws-clients-B_CEQGE1.js";
|
|
2
2
|
import { A as UNRENDERABLE, B as safeMsg, C as looksLikeCdkdGeneratedName, D as SAFE_MSG_ALTERED_CHAR, E as withoutGeneratedFallbackName, F as displaySafe, H as terminalSafe, I as displayStackName, L as isPasteableIdent, N as displayAwsMessage, O as SECRET_REF_MAX_CODE_POINTS, P as displayIdent, S as getCurrentStackName, T as withStackName, U as truncateCodePoints, a as getLogger, b as generateResourceNameWithFallback, d as installLogLineMaskerSource, f as getLiveRenderer, g as applyDefaultNameForFallback, j as asIsMessage, 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 plainIdentOr } from "./aws-failure-text-BEQfs6za.js";
|
|
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-
|
|
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-BxP3yqlr.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-CXGQKplb.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";
|
|
@@ -2308,7 +2308,7 @@ async function resolveStateBucketWithDefaultAndSource(cliBucket, region, legacyF
|
|
|
2308
2308
|
logger.debug("No state bucket specified, resolving default from account...");
|
|
2309
2309
|
const { GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
|
|
2310
2310
|
const { S3Client, HeadBucketCommand, ListObjectsV2Command } = await import("@aws-sdk/client-s3");
|
|
2311
|
-
const { getAwsClients } = await import("./aws-clients-
|
|
2311
|
+
const { getAwsClients } = await import("./aws-clients-B_CEQGE1.js").then((n) => n.n);
|
|
2312
2312
|
const { expectedOwnerParam, recordResolvedAccountId } = await Promise.resolve().then(() => expected_bucket_owner_exports);
|
|
2313
2313
|
const probeDeps = {
|
|
2314
2314
|
HeadBucketCommand,
|
|
@@ -4846,7 +4846,7 @@ function retainedOldPhysicalId(op) {
|
|
|
4846
4846
|
const prevType = op.previousState?.resourceType;
|
|
4847
4847
|
const oldType = op.previousResourceType ?? (typeof prevType === "string" && prevType !== "" ? prevType : void 0);
|
|
4848
4848
|
if (!(prev !== journalOpPhysicalId(op) || oldType !== void 0 && oldType !== op.resourceType)) return void 0;
|
|
4849
|
-
return op.oldResourceRetained !== false ? prev : void 0;
|
|
4849
|
+
return op.oldResourceRetained !== false || op.oldResourceMaySurvive !== void 0 ? prev : void 0;
|
|
4850
4850
|
}
|
|
4851
4851
|
function isMarkFor(mark, op) {
|
|
4852
4852
|
const own = journalOpPhysicalId(op);
|
|
@@ -4892,6 +4892,7 @@ function refuseMalformedOperation(shownStack, where, op) {
|
|
|
4892
4892
|
}
|
|
4893
4893
|
if (o["wasReplaced"] !== void 0 && typeof o["wasReplaced"] !== "boolean") fail("wasReplaced", o["wasReplaced"], "a boolean when present");
|
|
4894
4894
|
if (o["oldDeletedBeforeCreate"] !== void 0 && typeof o["oldDeletedBeforeCreate"] !== "boolean") fail("oldDeletedBeforeCreate", o["oldDeletedBeforeCreate"], "a boolean when present");
|
|
4895
|
+
if (o["oldResourceMaySurvive"] !== void 0 && !["kept", "unconfirmed"].includes(o["oldResourceMaySurvive"])) fail("oldResourceMaySurvive", o["oldResourceMaySurvive"], "kept or unconfirmed when present");
|
|
4895
4896
|
if (o["physicalIdRecoveredFromError"] !== void 0 && typeof o["physicalIdRecoveredFromError"] !== "boolean") fail("physicalIdRecoveredFromError", o["physicalIdRecoveredFromError"], "a boolean when present");
|
|
4896
4897
|
if (o["physicalIdRecoveredFromError"] !== void 0 && o["changeType"] !== "CREATE") refuseMalformed(shownStack, `${where}.physicalIdRecoveredFromError is only valid on a CREATE (got changeType ${kind(o["changeType"])}).`);
|
|
4897
4898
|
const identity = o["createdResourceIdentity"];
|
|
@@ -8032,21 +8033,35 @@ function inheritedRenderedSpan(childSecrets, key, text) {
|
|
|
8032
8033
|
}
|
|
8033
8034
|
const inheritedParameterReads = /* @__PURE__ */ new WeakMap();
|
|
8034
8035
|
const POISONED_PARAMETER_READS = Symbol("cdkd.inherited-parameter-reads.poisoned");
|
|
8035
|
-
function
|
|
8036
|
+
function parameterReadsFor(childSecrets, parentSecrets) {
|
|
8036
8037
|
const reads = inheritedParameterReads.get(childSecrets);
|
|
8037
8038
|
if (reads === void 0) {
|
|
8038
|
-
|
|
8039
|
+
const created = {
|
|
8039
8040
|
parent: parentSecrets,
|
|
8040
|
-
names: /* @__PURE__ */ new Set(
|
|
8041
|
-
|
|
8042
|
-
|
|
8041
|
+
names: /* @__PURE__ */ new Set(),
|
|
8042
|
+
values: /* @__PURE__ */ new Map()
|
|
8043
|
+
};
|
|
8044
|
+
inheritedParameterReads.set(childSecrets, created);
|
|
8045
|
+
return created;
|
|
8043
8046
|
}
|
|
8044
|
-
if (typeof reads === "symbol") return;
|
|
8047
|
+
if (typeof reads === "symbol") return void 0;
|
|
8045
8048
|
if (reads.parent !== parentSecrets) {
|
|
8046
8049
|
inheritedParameterReads.set(childSecrets, POISONED_PARAMETER_READS);
|
|
8047
8050
|
return;
|
|
8048
8051
|
}
|
|
8049
|
-
reads
|
|
8052
|
+
return reads;
|
|
8053
|
+
}
|
|
8054
|
+
function recordInheritedParameterValue(childSecrets, parentSecrets, parameterName, value) {
|
|
8055
|
+
const reads = parameterReadsFor(childSecrets, parentSecrets);
|
|
8056
|
+
if (reads === void 0) return;
|
|
8057
|
+
if (reads.values.has(parameterName)) {
|
|
8058
|
+
if (!deepEqualJsonValue(reads.values.get(parameterName), value)) inheritedParameterReads.set(childSecrets, POISONED_PARAMETER_READS);
|
|
8059
|
+
return;
|
|
8060
|
+
}
|
|
8061
|
+
reads.values.set(parameterName, value);
|
|
8062
|
+
}
|
|
8063
|
+
function recordInheritedParameterRead(childSecrets, parentSecrets, parameterName) {
|
|
8064
|
+
parameterReadsFor(childSecrets, parentSecrets)?.names.add(parameterName);
|
|
8050
8065
|
}
|
|
8051
8066
|
function redactInheritedParameterValue(parentSecrets, parameterName, value) {
|
|
8052
8067
|
return inheritedParameterExpression(parentSecrets, parameterName, value) ?? redactSecretsForState(value, parentSecrets);
|
|
@@ -8064,6 +8079,119 @@ function positionByInheritedParameter(bag, source, secrets) {
|
|
|
8064
8079
|
if (!deepEqualJsonValue(redactSecretsForState(answer, secrets), answer)) return void 0;
|
|
8065
8080
|
return answer;
|
|
8066
8081
|
}
|
|
8082
|
+
const REREAD_TRIGGERS = /* @__PURE__ */ new Set(["Fn::Select", "Fn::Split"]);
|
|
8083
|
+
const MAX_REREAD_DEPTH = 16;
|
|
8084
|
+
function splitOutsideDynamicReferences(text, delimiter, standsForSecret) {
|
|
8085
|
+
if (delimiter === "") return text.split(delimiter);
|
|
8086
|
+
const spans = dynamicReferenceSpans(text).filter((span) => {
|
|
8087
|
+
const token = text.slice(span.start, span.end);
|
|
8088
|
+
return spanNamesResolvableService(token) && standsForSecret(token);
|
|
8089
|
+
});
|
|
8090
|
+
if (spans.length === 0) return text.split(delimiter);
|
|
8091
|
+
const pieces = [];
|
|
8092
|
+
let cursor = 0;
|
|
8093
|
+
let from = 0;
|
|
8094
|
+
for (;;) {
|
|
8095
|
+
const at = text.indexOf(delimiter, from);
|
|
8096
|
+
if (at === -1) break;
|
|
8097
|
+
const end = at + delimiter.length;
|
|
8098
|
+
const token = spans.find((span) => span.start < end && at < span.end);
|
|
8099
|
+
if (token !== void 0) {
|
|
8100
|
+
from = token.end;
|
|
8101
|
+
continue;
|
|
8102
|
+
}
|
|
8103
|
+
pieces.push(text.slice(cursor, at));
|
|
8104
|
+
cursor = end;
|
|
8105
|
+
from = end;
|
|
8106
|
+
}
|
|
8107
|
+
pieces.push(text.slice(cursor));
|
|
8108
|
+
return pieces;
|
|
8109
|
+
}
|
|
8110
|
+
function standsForInheritedSecret(parentSecrets, token) {
|
|
8111
|
+
return parentSecrets !== void 0 && resolvedPlaintextOf(parentSecrets, token) !== void 0;
|
|
8112
|
+
}
|
|
8113
|
+
const plainSplit = (text, delimiter) => text.split(delimiter);
|
|
8114
|
+
function evaluatePureRead(node, bind, split, depth = 0) {
|
|
8115
|
+
if (depth > MAX_REREAD_DEPTH) return void 0;
|
|
8116
|
+
if (typeof node === "string") return node.includes("{{resolve:") ? void 0 : { value: node };
|
|
8117
|
+
if (Array.isArray(node)) {
|
|
8118
|
+
const out = [];
|
|
8119
|
+
for (const element of node) {
|
|
8120
|
+
const evaluated = evaluatePureRead(element, bind, split, depth + 1);
|
|
8121
|
+
if (evaluated === void 0) return void 0;
|
|
8122
|
+
out.push(evaluated.value);
|
|
8123
|
+
}
|
|
8124
|
+
return { value: out };
|
|
8125
|
+
}
|
|
8126
|
+
if (!isPlainObject$7(node)) return void 0;
|
|
8127
|
+
const keys = Object.keys(node);
|
|
8128
|
+
if (keys.length !== 1) return void 0;
|
|
8129
|
+
const key = keys[0];
|
|
8130
|
+
const args = node[key];
|
|
8131
|
+
if (key === "Ref") return typeof args === "string" ? bind(args) : void 0;
|
|
8132
|
+
if (!Array.isArray(args) || args.length !== 2) return void 0;
|
|
8133
|
+
if (key === "Fn::Select") {
|
|
8134
|
+
const index = args[0];
|
|
8135
|
+
const position = typeof index === "number" ? index : typeof index === "string" && /^(0|[1-9][0-9]*)$/.test(index) ? Number(index) : void 0;
|
|
8136
|
+
if (position === void 0 || !Number.isSafeInteger(position) || position < 0) return void 0;
|
|
8137
|
+
const list = evaluatePureRead(args[1], bind, split, depth + 1);
|
|
8138
|
+
if (list === void 0 || !Array.isArray(list.value) || position >= list.value.length) return;
|
|
8139
|
+
return { value: list.value[position] };
|
|
8140
|
+
}
|
|
8141
|
+
const delimiter = args[0];
|
|
8142
|
+
if (typeof delimiter !== "string") return void 0;
|
|
8143
|
+
if (key === "Fn::Split") {
|
|
8144
|
+
const value = evaluatePureRead(args[1], bind, split, depth + 1);
|
|
8145
|
+
if (value === void 0 || typeof value.value !== "string") return void 0;
|
|
8146
|
+
return { value: split(value.value, delimiter) };
|
|
8147
|
+
}
|
|
8148
|
+
if (key === "Fn::Join") {
|
|
8149
|
+
const parts = evaluatePureRead(args[1], bind, split, depth + 1);
|
|
8150
|
+
if (parts === void 0 || !Array.isArray(parts.value)) return void 0;
|
|
8151
|
+
if (!parts.value.every((part) => typeof part === "string")) return void 0;
|
|
8152
|
+
return { value: parts.value.join(delimiter) };
|
|
8153
|
+
}
|
|
8154
|
+
}
|
|
8155
|
+
function holdsRereadTrigger(node, depth = 0) {
|
|
8156
|
+
if (depth > MAX_REREAD_DEPTH) return false;
|
|
8157
|
+
if (Array.isArray(node)) return node.some((element) => holdsRereadTrigger(element, depth + 1));
|
|
8158
|
+
if (!isPlainObject$7(node)) return false;
|
|
8159
|
+
return Object.entries(node).some(([key, child]) => REREAD_TRIGGERS.has(key) || holdsRereadTrigger(child, depth + 1));
|
|
8160
|
+
}
|
|
8161
|
+
function rendersReadTo(spelling, parentSecrets, value) {
|
|
8162
|
+
if (typeof spelling === "string" && typeof value === "string") {
|
|
8163
|
+
if (spelling === value) return redactSecretsForState(spelling, parentSecrets) === spelling;
|
|
8164
|
+
return rendersLiteralTo(spelling, parentSecrets, value);
|
|
8165
|
+
}
|
|
8166
|
+
if (Array.isArray(spelling) && Array.isArray(value) && spelling.length === value.length) return spelling.every((element, i) => rendersReadTo(element, parentSecrets, value[i]));
|
|
8167
|
+
return false;
|
|
8168
|
+
}
|
|
8169
|
+
function rereadParameterExpression(source, bind, parentSecrets) {
|
|
8170
|
+
if (!holdsRereadTrigger(source)) return void 0;
|
|
8171
|
+
const resolved = evaluatePureRead(source, bind, plainSplit);
|
|
8172
|
+
if (resolved === void 0) return void 0;
|
|
8173
|
+
const redacted = evaluatePureRead(source, (name) => {
|
|
8174
|
+
const bound = bind(name);
|
|
8175
|
+
return bound && { value: redactInheritedParameterValue(parentSecrets, name, bound.value) };
|
|
8176
|
+
}, (text, delimiter) => splitOutsideDynamicReferences(text, delimiter, (token) => standsForInheritedSecret(parentSecrets, token)));
|
|
8177
|
+
if (redacted === void 0) return void 0;
|
|
8178
|
+
if (!rendersReadTo(redacted.value, parentSecrets, resolved.value)) return void 0;
|
|
8179
|
+
return {
|
|
8180
|
+
resolved: resolved.value,
|
|
8181
|
+
redacted: redacted.value
|
|
8182
|
+
};
|
|
8183
|
+
}
|
|
8184
|
+
function positionByParameterReread(bag, source, secrets) {
|
|
8185
|
+
const reads = inheritedParameterReads.get(secrets);
|
|
8186
|
+
if (reads === void 0 || typeof reads === "symbol") return void 0;
|
|
8187
|
+
if (typeof bag !== "string" && !Array.isArray(bag)) return void 0;
|
|
8188
|
+
const reread = rereadParameterExpression(source, (name) => reads.values.has(name) ? { value: reads.values.get(name) } : void 0, reads.parent);
|
|
8189
|
+
if (reread === void 0 || !deepEqualJsonValue(reread.resolved, bag)) return void 0;
|
|
8190
|
+
if (carriesChildOnlyPlaintext(bag, secrets, reads.parent)) return void 0;
|
|
8191
|
+
const answer = reread.redacted;
|
|
8192
|
+
if (!deepEqualJsonValue(redactSecretsForState(answer, secrets), answer)) return void 0;
|
|
8193
|
+
return answer;
|
|
8194
|
+
}
|
|
8067
8195
|
function carriesChildOnlyPlaintext(value, childSecrets, parentSecrets) {
|
|
8068
8196
|
const parentNeedles = new Set(substringNeedlesOf(parentSecrets));
|
|
8069
8197
|
const childNeedles = new Set(substringNeedlesOf(childSecrets));
|
|
@@ -8311,6 +8439,8 @@ function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameG
|
|
|
8311
8439
|
if ((typeof bag === "string" || Array.isArray(bag)) && isPlainObject$7(source)) {
|
|
8312
8440
|
const inherited = positionByInheritedParameter(bag, source, secrets);
|
|
8313
8441
|
if (inherited !== void 0) return inherited;
|
|
8442
|
+
const reread = positionByParameterReread(bag, source, secrets);
|
|
8443
|
+
if (reread !== void 0) return reread;
|
|
8314
8444
|
}
|
|
8315
8445
|
if (typeof bag === "string" && isPlainObject$7(source)) {
|
|
8316
8446
|
const certified = positionByCrossStackSource(bag, source, secrets);
|
|
@@ -9518,14 +9648,16 @@ function carryListElementFragments(needles, to, value) {
|
|
|
9518
9648
|
for (const fragment of fragments) recordLogOnlyValue(to, fragment);
|
|
9519
9649
|
}
|
|
9520
9650
|
}
|
|
9521
|
-
function recordLogOnlySplitFragments(from, to, text, delimiter) {
|
|
9651
|
+
function recordLogOnlySplitFragments(from, to, text, delimiter, printed) {
|
|
9522
9652
|
if (delimiter === "") return;
|
|
9653
|
+
const splits = [text.split(delimiter)];
|
|
9654
|
+
if (printed !== void 0 && (printed.length !== splits[0].length || printed.some((piece, i) => piece !== splits[0][i]))) splits.push(printed);
|
|
9523
9655
|
for (const bag of from) {
|
|
9524
9656
|
if (bag === void 0) continue;
|
|
9525
|
-
for (const needle of [...logOnlyValuesOf.get(bag) ?? []]) for (const fragment of fragmentsOfNeedleIn(text, delimiter, needle)) if (fragment !== needle) recordLogOnlyValue(to, fragment);
|
|
9657
|
+
for (const needle of [...logOnlyValuesOf.get(bag) ?? []]) for (const pieces of splits) for (const fragment of fragmentsOfNeedleIn(text, delimiter, needle, pieces)) if (fragment !== needle) recordLogOnlyValue(to, fragment);
|
|
9526
9658
|
}
|
|
9527
9659
|
}
|
|
9528
|
-
function fragmentsOfNeedleIn(text, delimiter, needle) {
|
|
9660
|
+
function fragmentsOfNeedleIn(text, delimiter, needle, pieces = text.split(delimiter)) {
|
|
9529
9661
|
const fragments = /* @__PURE__ */ new Set();
|
|
9530
9662
|
if (needle === "") return fragments;
|
|
9531
9663
|
const starts = [];
|
|
@@ -9534,7 +9666,7 @@ function fragmentsOfNeedleIn(text, delimiter, needle) {
|
|
|
9534
9666
|
if (starts.length === 0) return fragments;
|
|
9535
9667
|
const spans = [];
|
|
9536
9668
|
let offset = 0;
|
|
9537
|
-
for (const piece of
|
|
9669
|
+
for (const piece of pieces) {
|
|
9538
9670
|
spans.push([offset, offset + piece.length]);
|
|
9539
9671
|
offset += piece.length + delimiter.length;
|
|
9540
9672
|
}
|
|
@@ -11823,6 +11955,7 @@ const CREATE_ONLY_PATHS_SNAPSHOT = /* @__PURE__ */ new Map([
|
|
|
11823
11955
|
["LicenseInfo"]
|
|
11824
11956
|
]],
|
|
11825
11957
|
["AWS::Lambda::MicrovmImage", [["Name"]]],
|
|
11958
|
+
["AWS::Lambda::NetworkConnector", [["Name"]]],
|
|
11826
11959
|
["AWS::Lambda::Permission", [
|
|
11827
11960
|
["Action"],
|
|
11828
11961
|
["EventSourceToken"],
|
|
@@ -11835,6 +11968,19 @@ const CREATE_ONLY_PATHS_SNAPSHOT = /* @__PURE__ */ new Map([
|
|
|
11835
11968
|
["SourceArn"]
|
|
11836
11969
|
]],
|
|
11837
11970
|
["AWS::Lambda::Url", [["Qualifier"], ["TargetFunctionArn"]]],
|
|
11971
|
+
["AWS::Lambda::WebFunctionEndpoint", [
|
|
11972
|
+
["EndpointName"],
|
|
11973
|
+
["EndpointType"],
|
|
11974
|
+
["FunctionName"],
|
|
11975
|
+
["Regions"]
|
|
11976
|
+
]],
|
|
11977
|
+
["AWS::Lambda::WebFunctionRevision", [
|
|
11978
|
+
["BuildConfig"],
|
|
11979
|
+
["Description"],
|
|
11980
|
+
["FunctionName"],
|
|
11981
|
+
["KmsKeyArn"],
|
|
11982
|
+
["ServiceConfig"]
|
|
11983
|
+
]],
|
|
11838
11984
|
["AWS::Logs::LogGroup", [["LogGroupName"]]],
|
|
11839
11985
|
["AWS::Neptune::DBCluster", [
|
|
11840
11986
|
["AvailabilityZones"],
|
|
@@ -12281,6 +12427,11 @@ const REVERSE_REPLACEMENT_NAME_KEYS = {
|
|
|
12281
12427
|
"AWS::KinesisFirehose::DeliveryStream": flat("DeliveryStreamName"),
|
|
12282
12428
|
"AWS::KMS::Alias": flat("AliasName"),
|
|
12283
12429
|
"AWS::Lambda::MicrovmImage": flat("Name"),
|
|
12430
|
+
"AWS::Lambda::NetworkConnector": flat("Name"),
|
|
12431
|
+
"AWS::Lambda::WebFunctionEndpoint": {
|
|
12432
|
+
name: [["EndpointName"]],
|
|
12433
|
+
scope: [["FunctionName"]]
|
|
12434
|
+
},
|
|
12284
12435
|
"AWS::Pipes::Pipe": flat("Name"),
|
|
12285
12436
|
"AWS::RDS::DBProxyTargetGroup": {
|
|
12286
12437
|
name: [["TargetGroupName"]],
|
|
@@ -12323,6 +12474,7 @@ const NOT_NAME_KEYED_TYPES = /* @__PURE__ */ new Set([
|
|
|
12323
12474
|
"AWS::IAM::Policy",
|
|
12324
12475
|
"AWS::Lambda::EventInvokeConfig",
|
|
12325
12476
|
"AWS::Lambda::Permission",
|
|
12477
|
+
"AWS::Lambda::WebFunctionRevision",
|
|
12326
12478
|
"AWS::Route53::HostedZone"
|
|
12327
12479
|
]);
|
|
12328
12480
|
const CASE_INSENSITIVE_NAME_TYPES = /* @__PURE__ */ new Set([
|
|
@@ -14435,7 +14587,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
14435
14587
|
]),
|
|
14436
14588
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
14437
14589
|
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
14438
|
-
readOnly: /* @__PURE__ */ new Set(["
|
|
14590
|
+
readOnly: /* @__PURE__ */ new Set(["AnomalyDetectorId"]),
|
|
14439
14591
|
ccRouteUnavailable: true
|
|
14440
14592
|
}],
|
|
14441
14593
|
["AWS::CodeBuild::Project", {
|
|
@@ -15852,6 +16004,23 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
15852
16004
|
]),
|
|
15853
16005
|
ccRouteUnavailable: false
|
|
15854
16006
|
}],
|
|
16007
|
+
["AWS::Lambda::NetworkConnector", {
|
|
16008
|
+
handled: /* @__PURE__ */ new Set([
|
|
16009
|
+
"Configuration",
|
|
16010
|
+
"Name",
|
|
16011
|
+
"OperatorRole",
|
|
16012
|
+
"Tags"
|
|
16013
|
+
]),
|
|
16014
|
+
silentDrop: /* @__PURE__ */ new Map(),
|
|
16015
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
16016
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
16017
|
+
"Arn",
|
|
16018
|
+
"LatestVersion",
|
|
16019
|
+
"LatestVersionArn",
|
|
16020
|
+
"State"
|
|
16021
|
+
]),
|
|
16022
|
+
ccRouteUnavailable: false
|
|
16023
|
+
}],
|
|
15855
16024
|
["AWS::Lambda::Permission", {
|
|
15856
16025
|
handled: /* @__PURE__ */ new Set([
|
|
15857
16026
|
"Action",
|
|
@@ -15882,6 +16051,54 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
15882
16051
|
readOnly: /* @__PURE__ */ new Set(["FunctionArn", "FunctionUrl"]),
|
|
15883
16052
|
ccRouteUnavailable: false
|
|
15884
16053
|
}],
|
|
16054
|
+
["AWS::Lambda::WebFunctionEndpoint", {
|
|
16055
|
+
handled: /* @__PURE__ */ new Set([
|
|
16056
|
+
"AuthType",
|
|
16057
|
+
"Description",
|
|
16058
|
+
"EndpointName",
|
|
16059
|
+
"EndpointType",
|
|
16060
|
+
"FunctionName",
|
|
16061
|
+
"Regions",
|
|
16062
|
+
"RevisionWeights",
|
|
16063
|
+
"ScalingConfig",
|
|
16064
|
+
"ThrottleConfig"
|
|
16065
|
+
]),
|
|
16066
|
+
silentDrop: /* @__PURE__ */ new Map(),
|
|
16067
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
16068
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
16069
|
+
"CreatedAt",
|
|
16070
|
+
"DomainName",
|
|
16071
|
+
"EndpointArn",
|
|
16072
|
+
"FunctionArn",
|
|
16073
|
+
"RegionalEndpoints",
|
|
16074
|
+
"State",
|
|
16075
|
+
"StateReason",
|
|
16076
|
+
"UpdatedAt",
|
|
16077
|
+
"UpdateStatus",
|
|
16078
|
+
"UpdateStatusReason"
|
|
16079
|
+
]),
|
|
16080
|
+
ccRouteUnavailable: false
|
|
16081
|
+
}],
|
|
16082
|
+
["AWS::Lambda::WebFunctionRevision", {
|
|
16083
|
+
handled: /* @__PURE__ */ new Set([
|
|
16084
|
+
"BuildConfig",
|
|
16085
|
+
"Description",
|
|
16086
|
+
"FunctionName",
|
|
16087
|
+
"KmsKeyArn",
|
|
16088
|
+
"ServiceConfig"
|
|
16089
|
+
]),
|
|
16090
|
+
silentDrop: /* @__PURE__ */ new Map(),
|
|
16091
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
16092
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
16093
|
+
"CreatedAt",
|
|
16094
|
+
"FunctionArn",
|
|
16095
|
+
"RevisionArn",
|
|
16096
|
+
"RevisionId",
|
|
16097
|
+
"State",
|
|
16098
|
+
"StateReason"
|
|
16099
|
+
]),
|
|
16100
|
+
ccRouteUnavailable: false
|
|
16101
|
+
}],
|
|
15885
16102
|
["AWS::Logs::LogGroup", {
|
|
15886
16103
|
handled: /* @__PURE__ */ new Set([
|
|
15887
16104
|
"BearerTokenAuthenticationEnabled",
|
|
@@ -21865,6 +22082,7 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21865
22082
|
const verdictScope = secretVerdictScope(this);
|
|
21866
22083
|
const isKnownSecret = service === "secretsmanager" || service === "ssm-secure" || isScopedSecretVerdict(verdictScope, fullMatch);
|
|
21867
22084
|
if (isKnownSecret && context?.skipDynamicReferences) {
|
|
22085
|
+
context.skippedSecretReferences?.add(fullMatch);
|
|
21868
22086
|
complete = false;
|
|
21869
22087
|
continue;
|
|
21870
22088
|
}
|
|
@@ -21943,6 +22161,7 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21943
22161
|
isSecret = param.secure;
|
|
21944
22162
|
if (param.secure) {
|
|
21945
22163
|
if (!decrypt) {
|
|
22164
|
+
context?.skippedSecretReferences?.add(fullMatch);
|
|
21946
22165
|
complete = false;
|
|
21947
22166
|
continue;
|
|
21948
22167
|
}
|
|
@@ -22291,6 +22510,12 @@ function describeSplitValueSource(value) {
|
|
|
22291
22510
|
kind: "getatt"
|
|
22292
22511
|
};
|
|
22293
22512
|
}
|
|
22513
|
+
function splitValueResolvesReferences(value) {
|
|
22514
|
+
if (typeof value === "string") return true;
|
|
22515
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
|
|
22516
|
+
const keys = Object.keys(value);
|
|
22517
|
+
return keys.length === 1 && (keys[0] === "Fn::Join" || keys[0] === "Fn::Sub");
|
|
22518
|
+
}
|
|
22294
22519
|
async function resolveSplit(splitArgs, context) {
|
|
22295
22520
|
const [delimiter, value] = splitArgs;
|
|
22296
22521
|
const resolvedValue = await this.resolveValue(value, context);
|
|
@@ -22303,22 +22528,22 @@ async function resolveSplit(splitArgs, context) {
|
|
|
22303
22528
|
}
|
|
22304
22529
|
throw markNonRetryable(new IntrinsicResolutionRefusalError(`Fn::Split: the value to split${sourceClause} must be a string, got ${resolvedValue === null ? "null" : typeof resolvedValue}. Fn::Split accepts only a string; check the value or the intrinsic that produced it.`));
|
|
22305
22530
|
}
|
|
22306
|
-
const result = resolvedValue.split(delimiter);
|
|
22531
|
+
const result = context.skipDynamicReferences === true && typeof delimiter === "string" ? splitOutsideDynamicReferences(resolvedValue, delimiter, splitValueResolvesReferences(value) ? () => true : (token) => standsForInheritedSecret(context.inheritedSecrets, token) || context.secretStandInTokens?.has(token) === true) : resolvedValue.split(delimiter);
|
|
22307
22532
|
let lineContext = context;
|
|
22308
22533
|
if (this.hasLogOnlyNeedles(context)) {
|
|
22309
|
-
if (context.recordedSecretValues) recordLogOnlySplitFragments([context.inheritedSecrets, context.recordedSecretValues], context.recordedSecretValues, resolvedValue, String(delimiter));
|
|
22534
|
+
if (context.recordedSecretValues) recordLogOnlySplitFragments([context.inheritedSecrets, context.recordedSecretValues], context.recordedSecretValues, resolvedValue, String(delimiter), result);
|
|
22310
22535
|
else {
|
|
22311
22536
|
const linePieces = /* @__PURE__ */ new Map();
|
|
22312
22537
|
if (context.printingSecrets !== void 0) carryLogOnlyValues(context.printingSecrets, linePieces);
|
|
22313
|
-
recordLogOnlySplitFragments([context.inheritedSecrets], linePieces, resolvedValue, String(delimiter));
|
|
22538
|
+
recordLogOnlySplitFragments([context.inheritedSecrets], linePieces, resolvedValue, String(delimiter), result);
|
|
22314
22539
|
lineContext = {
|
|
22315
22540
|
...context,
|
|
22316
22541
|
printingSecrets: linePieces
|
|
22317
22542
|
};
|
|
22318
22543
|
}
|
|
22319
22544
|
}
|
|
22320
|
-
if (context.printingSecrets !== void 0 && hasLogOnlyValues(context.printingSecrets)) recordLogOnlySplitFragments([context.printingSecrets], context.printingSecrets, resolvedValue, String(delimiter));
|
|
22321
|
-
if (context.secretNameSink !== void 0 && hasLogOnlyValues(context.secretNameSink)) recordLogOnlySplitFragments([context.secretNameSink], context.secretNameSink, resolvedValue, String(delimiter));
|
|
22545
|
+
if (context.printingSecrets !== void 0 && hasLogOnlyValues(context.printingSecrets)) recordLogOnlySplitFragments([context.printingSecrets], context.printingSecrets, resolvedValue, String(delimiter), result);
|
|
22546
|
+
if (context.secretNameSink !== void 0 && hasLogOnlyValues(context.secretNameSink)) recordLogOnlySplitFragments([context.secretNameSink], context.secretNameSink, resolvedValue, String(delimiter), result);
|
|
22322
22547
|
const pieceTwins = String(delimiter) === "" && this.maskRenderedNeedlesForLog(resolvedValue, lineContext) !== resolvedValue ? result.map(() => "***") : this.splitLogTwins(resolvedValue, delimiter, result, context);
|
|
22323
22548
|
this.logger.debug(`Resolved Fn::Split: split by ${this.splitDelimiterRender(String(delimiter), lineContext)} resolved to ${this.logRender(JSON.stringify(this.maskValueLeaves(pieceTwins, lineContext)), lineContext, { structured: true })}`);
|
|
22324
22549
|
return result;
|
|
@@ -23113,15 +23338,23 @@ function recordInheritedParameterSecrets(parameterName, value, context) {
|
|
|
23113
23338
|
if (recorded) carryPhysicalNameCopiesCarriedBy(context, recorded, value);
|
|
23114
23339
|
if (inherited && recorded) recordInheritedNoEchoListElements(this, inherited, recorded, value, context);
|
|
23115
23340
|
if (!inherited || inherited.size === 0 || !recorded) return;
|
|
23341
|
+
const mirror = parameterReadMirrors.get(recorded);
|
|
23342
|
+
recordInheritedParameterValue(recorded, inherited, parameterName, value);
|
|
23343
|
+
if (mirror) recordInheritedParameterValue(mirror, inherited, parameterName, value);
|
|
23116
23344
|
for (const [plaintext, expression] of inheritedSecretsCarriedBy(value, inherited)) {
|
|
23117
23345
|
const carried = carriedExpressionFor(inherited, parameterName, value, plaintext, expression);
|
|
23118
23346
|
recorded.set(plaintext, carried);
|
|
23119
23347
|
const parentEntry = context.inheritedReferenceProvenance?.get(carried);
|
|
23120
23348
|
if (parentEntry !== void 0) recordReferenceProvenanceEntry(recorded, carried, parentEntry, "read");
|
|
23121
23349
|
recordInheritedParameterRead(recorded, inherited, parameterName);
|
|
23350
|
+
if (mirror) recordInheritedParameterRead(mirror, inherited, parameterName);
|
|
23122
23351
|
carryFreshNoEchoMark(inherited, recorded, plaintext);
|
|
23123
23352
|
}
|
|
23124
23353
|
}
|
|
23354
|
+
const parameterReadMirrors = /* @__PURE__ */ new WeakMap();
|
|
23355
|
+
function mirrorInheritedParameterReads(passSecrets, persistSecrets) {
|
|
23356
|
+
if (passSecrets !== persistSecrets) parameterReadMirrors.set(passSecrets, persistSecrets);
|
|
23357
|
+
}
|
|
23125
23358
|
function carryPhysicalNameCopiesCarriedBy(context, recorded, value) {
|
|
23126
23359
|
const names = context.inheritedPhysicalNameCopies ?? (context.inheritedSecrets && physicalNameCopiesOf.get(context.inheritedSecrets));
|
|
23127
23360
|
if (names === void 0 || names.size === 0) return;
|
|
@@ -23138,12 +23371,25 @@ function poisonRenderedSpellingsCollidingIn(template, parameterValues, inherited
|
|
|
23138
23371
|
const names = new Set(Object.keys(parameterValues));
|
|
23139
23372
|
if (names.size < 2) return;
|
|
23140
23373
|
const groups = [];
|
|
23141
|
-
if (template.Resources !== null && typeof template.Resources === "object") for (const resource of Object.values(template.Resources)) groups.push([
|
|
23142
|
-
|
|
23143
|
-
|
|
23374
|
+
if (template.Resources !== null && typeof template.Resources === "object") for (const resource of Object.values(template.Resources)) groups.push([{
|
|
23375
|
+
node: resource,
|
|
23376
|
+
mode: "resource"
|
|
23377
|
+
}]);
|
|
23378
|
+
if (template.Outputs !== void 0) groups.push(outputsGroupParts(template.Outputs));
|
|
23379
|
+
const bind = (name) => Object.hasOwn(parameterValues, name) ? { value: parameterValues[name] } : void 0;
|
|
23144
23380
|
const withdrawn = /* @__PURE__ */ new Set();
|
|
23145
23381
|
for (;;) {
|
|
23146
|
-
const fresh = [...collidingRenderedNames(
|
|
23382
|
+
const fresh = [...collidingRenderedNames(groups.map((parts) => {
|
|
23383
|
+
const reads = /* @__PURE__ */ new Map();
|
|
23384
|
+
for (const { node, mode } of parts) {
|
|
23385
|
+
const reread = mode === "slot" ? void 0 : {
|
|
23386
|
+
bind,
|
|
23387
|
+
inherited
|
|
23388
|
+
};
|
|
23389
|
+
for (const [name, slotRead] of parameterReadsOf(node, names, reread, mode !== "output")) reads.set(name, slotRead || reads.get(name) === true);
|
|
23390
|
+
}
|
|
23391
|
+
return reads;
|
|
23392
|
+
}).filter((reads) => reads.size >= 2), parameterValues, inherited)].filter((name) => !withdrawn.has(name));
|
|
23147
23393
|
if (fresh.length === 0) return;
|
|
23148
23394
|
for (const name of fresh) {
|
|
23149
23395
|
withdrawn.add(name);
|
|
@@ -23184,31 +23430,107 @@ function collidingRenderedNames(readsByGroup, parameterValues, inherited) {
|
|
|
23184
23430
|
return withdraw;
|
|
23185
23431
|
}
|
|
23186
23432
|
const POSITIONED_INTRINSICS = /* @__PURE__ */ new Set(["Fn::Join", "Fn::Sub"]);
|
|
23187
|
-
function parameterReadsOf(node, names,
|
|
23433
|
+
function parameterReadsOf(node, names, reread, positionsArrays) {
|
|
23188
23434
|
const reads = /* @__PURE__ */ new Map();
|
|
23189
23435
|
const add = (name, slotRead) => {
|
|
23190
23436
|
reads.set(name, slotRead || reads.get(name) === true);
|
|
23191
23437
|
};
|
|
23192
|
-
const visit = (value, slotRead) => {
|
|
23438
|
+
const visit = (value, slotRead, atLeaf) => {
|
|
23193
23439
|
if (Array.isArray(value)) {
|
|
23194
|
-
|
|
23440
|
+
const mayShrink = atLeaf && !positionsArrays || value.some((element) => element !== null && typeof element === "object" && !Array.isArray(element) && (Object.hasOwn(element, "Fn::If") || element["Ref"] === "AWS::NoValue"));
|
|
23441
|
+
for (const element of value) visit(element, slotRead || mayShrink, atLeaf && !mayShrink);
|
|
23195
23442
|
return;
|
|
23196
23443
|
}
|
|
23197
23444
|
if (value === null || typeof value !== "object") return;
|
|
23198
23445
|
const record = value;
|
|
23446
|
+
const intrinsic = Object.keys(record).some((key) => key === "Ref" || key.startsWith("Fn::"));
|
|
23447
|
+
if (intrinsic && atLeaf && reread !== void 0 && rereadParameterExpression(record, reread.bind, reread.inherited) !== void 0) {
|
|
23448
|
+
for (const name of refNamesIn(record, names)) add(name, false);
|
|
23449
|
+
return;
|
|
23450
|
+
}
|
|
23199
23451
|
const ref = record["Ref"];
|
|
23200
23452
|
if (typeof ref === "string" && names.has(ref)) add(ref, slotRead);
|
|
23453
|
+
const placeholderSlot = !positionsArrays && unkeyedPlaceholderParts(record, (name) => certifiesPlaceholder(name, reread)) > MAX_UNKEYED_PARTS;
|
|
23201
23454
|
const sub = record["Fn::Sub"];
|
|
23202
23455
|
const text = typeof sub === "string" ? sub : Array.isArray(sub) ? sub[0] : void 0;
|
|
23203
23456
|
if (typeof text === "string") for (const match of text.matchAll(/\$\{([^}!][^}]*)\}/g)) {
|
|
23204
23457
|
const name = match[1].trim();
|
|
23205
|
-
if (names.has(name)) add(name, slotRead);
|
|
23458
|
+
if (names.has(name)) add(name, slotRead || placeholderSlot);
|
|
23206
23459
|
}
|
|
23207
|
-
for (const [key, child] of Object.entries(record)) visit(child, slotRead || key.startsWith("Fn::") && !POSITIONED_INTRINSICS.has(key));
|
|
23460
|
+
for (const [key, child] of Object.entries(record)) visit(child, slotRead || placeholderSlot || key.startsWith("Fn::") && !POSITIONED_INTRINSICS.has(key), atLeaf && !intrinsic);
|
|
23208
23461
|
};
|
|
23209
|
-
visit(node,
|
|
23462
|
+
visit(node, reread === void 0, true);
|
|
23210
23463
|
return reads;
|
|
23211
23464
|
}
|
|
23465
|
+
const MAX_UNKEYED_PARTS = 1;
|
|
23466
|
+
function certifiesPlaceholder(name, reread) {
|
|
23467
|
+
if (reread === void 0) return false;
|
|
23468
|
+
const bound = reread.bind(name);
|
|
23469
|
+
if (bound === void 0) return false;
|
|
23470
|
+
if (inheritedSecretsCarriedBy(bound.value, reread.inherited).length === 0) return false;
|
|
23471
|
+
return typeof inheritedParameterExpression(reread.inherited, name, bound.value) === "string";
|
|
23472
|
+
}
|
|
23473
|
+
function unkeyedPlaceholderParts(record, certified) {
|
|
23474
|
+
const keyed = (value) => typeof value === "string" || value !== null && typeof value === "object" && !Array.isArray(value) && Object.keys(value).length === 1 && typeof value["Ref"] === "string" && certified(value["Ref"]);
|
|
23475
|
+
if (Object.hasOwn(record, "Fn::Join")) {
|
|
23476
|
+
const args = record["Fn::Join"];
|
|
23477
|
+
if (!Array.isArray(args) || args.length !== 2 || !Array.isArray(args[1])) return Number.POSITIVE_INFINITY;
|
|
23478
|
+
return args[1].filter((part) => !keyed(part)).length;
|
|
23479
|
+
}
|
|
23480
|
+
if (Object.hasOwn(record, "Fn::Sub")) {
|
|
23481
|
+
const args = record["Fn::Sub"];
|
|
23482
|
+
const [template, variables] = typeof args === "string" ? [args, {}] : Array.isArray(args) ? [args[0], args[1]] : [];
|
|
23483
|
+
if (typeof template !== "string" || variables === null || typeof variables !== "object") return Number.POSITIVE_INFINITY;
|
|
23484
|
+
let unkeyed = 0;
|
|
23485
|
+
for (const hit of template.matchAll(/\$\{(!)?([^}]*)\}/g)) {
|
|
23486
|
+
const name = hit[2] ?? "";
|
|
23487
|
+
if (hit[1] === "!" || name === "") continue;
|
|
23488
|
+
if (!(Object.hasOwn(variables, name) ? keyed(variables[name]) : certified(name))) unkeyed += 1;
|
|
23489
|
+
}
|
|
23490
|
+
return unkeyed;
|
|
23491
|
+
}
|
|
23492
|
+
return 0;
|
|
23493
|
+
}
|
|
23494
|
+
function outputsGroupParts(outputs) {
|
|
23495
|
+
if (outputs === null || typeof outputs !== "object" || Array.isArray(outputs)) return [{
|
|
23496
|
+
node: outputs,
|
|
23497
|
+
mode: "slot"
|
|
23498
|
+
}];
|
|
23499
|
+
const parts = [];
|
|
23500
|
+
for (const output of Object.values(outputs)) {
|
|
23501
|
+
if (output === null || typeof output !== "object" || Array.isArray(output)) {
|
|
23502
|
+
parts.push({
|
|
23503
|
+
node: output,
|
|
23504
|
+
mode: "slot"
|
|
23505
|
+
});
|
|
23506
|
+
continue;
|
|
23507
|
+
}
|
|
23508
|
+
const { Value: value, ...rest } = output;
|
|
23509
|
+
parts.push({
|
|
23510
|
+
node: value,
|
|
23511
|
+
mode: "output"
|
|
23512
|
+
}, {
|
|
23513
|
+
node: rest,
|
|
23514
|
+
mode: "slot"
|
|
23515
|
+
});
|
|
23516
|
+
}
|
|
23517
|
+
return parts;
|
|
23518
|
+
}
|
|
23519
|
+
function refNamesIn(node, names) {
|
|
23520
|
+
const found = /* @__PURE__ */ new Set();
|
|
23521
|
+
const visit = (value) => {
|
|
23522
|
+
if (Array.isArray(value)) {
|
|
23523
|
+
for (const element of value) visit(element);
|
|
23524
|
+
return;
|
|
23525
|
+
}
|
|
23526
|
+
if (value === null || typeof value !== "object") return;
|
|
23527
|
+
const record = value;
|
|
23528
|
+
if (typeof record["Ref"] === "string" && names.has(record["Ref"])) found.add(record["Ref"]);
|
|
23529
|
+
for (const child of Object.values(record)) visit(child);
|
|
23530
|
+
};
|
|
23531
|
+
visit(node);
|
|
23532
|
+
return found;
|
|
23533
|
+
}
|
|
23212
23534
|
function recordInheritedNoEchoListElements(resolver, inherited, recorded, value, context) {
|
|
23213
23535
|
if (!Array.isArray(value)) return;
|
|
23214
23536
|
const parameterValues = [...inherited.keys()].filter((plaintext) => isNoEchoParameterPlaintext(inherited, plaintext));
|
|
@@ -25107,6 +25429,62 @@ var JsonPatchGenerator = class {
|
|
|
25107
25429
|
}
|
|
25108
25430
|
};
|
|
25109
25431
|
|
|
25432
|
+
//#endregion
|
|
25433
|
+
//#region src/provisioning/guardduty-detector-patch.ts
|
|
25434
|
+
const DETECTOR_TYPE = "AWS::GuardDuty::Detector";
|
|
25435
|
+
const READ_BACK_KEYS = ["Features", "DataSources"];
|
|
25436
|
+
function withGuardDutyDetectorReadBackOps(resourceType, patch, desired, readback) {
|
|
25437
|
+
if (resourceType !== DETECTOR_TYPE || patch.length === 0) return patch;
|
|
25438
|
+
let out = patch;
|
|
25439
|
+
if (readback) {
|
|
25440
|
+
out = patch.map((op) => op.path === "/Features" ? narrowToChangedFeatures(op, readback.previous["Features"]) : op);
|
|
25441
|
+
if (out.some((op) => op.path === "/Features" && op.op !== "remove")) out = out.map((op) => op.path === "/DataSources" ? {
|
|
25442
|
+
op: "remove",
|
|
25443
|
+
path: "/DataSources"
|
|
25444
|
+
} : op);
|
|
25445
|
+
}
|
|
25446
|
+
const extra = [];
|
|
25447
|
+
for (const key of READ_BACK_KEYS) {
|
|
25448
|
+
if (out.some((op) => op.path === `/${key}`)) continue;
|
|
25449
|
+
if (readback) {
|
|
25450
|
+
if (Object.prototype.hasOwnProperty.call(readback.previous, key)) extra.push({
|
|
25451
|
+
op: "remove",
|
|
25452
|
+
path: `/${key}`
|
|
25453
|
+
});
|
|
25454
|
+
continue;
|
|
25455
|
+
}
|
|
25456
|
+
extra.push(Object.prototype.hasOwnProperty.call(desired, key) ? {
|
|
25457
|
+
op: "add",
|
|
25458
|
+
path: `/${key}`,
|
|
25459
|
+
value: desired[key]
|
|
25460
|
+
} : {
|
|
25461
|
+
op: "remove",
|
|
25462
|
+
path: `/${key}`
|
|
25463
|
+
});
|
|
25464
|
+
}
|
|
25465
|
+
return extra.length === 0 && out === patch ? patch : [...out, ...extra];
|
|
25466
|
+
}
|
|
25467
|
+
function narrowToChangedFeatures(op, current) {
|
|
25468
|
+
if (!Array.isArray(op.value) || !Array.isArray(current)) return op;
|
|
25469
|
+
const byName = /* @__PURE__ */ new Map();
|
|
25470
|
+
for (const entry of current) byName.set(featureName(entry), entry);
|
|
25471
|
+
const changed = [];
|
|
25472
|
+
for (const entry of op.value) {
|
|
25473
|
+
const name = featureName(entry);
|
|
25474
|
+
if (name === void 0) return op;
|
|
25475
|
+
if (!isDeepStrictEqual(entry, byName.get(name))) changed.push(entry);
|
|
25476
|
+
}
|
|
25477
|
+
if (changed.length === 0) throw markNonRetryable(/* @__PURE__ */ new Error("cannot revert Features: the live list differs from the recorded baseline only in the order of its entries or in entries GuardDuty added, which UpdateDetector cannot undo, so nothing on this detector was reverted. cdkd drift --accept would record the live list, but it records the live value of EVERY drifted property of the stack, not only Features: revert any other drift on this detector first (for example with aws guardduty update-detector), then run it."));
|
|
25478
|
+
return {
|
|
25479
|
+
...op,
|
|
25480
|
+
value: changed
|
|
25481
|
+
};
|
|
25482
|
+
}
|
|
25483
|
+
function featureName(entry) {
|
|
25484
|
+
const name = entry?.["Name"];
|
|
25485
|
+
return typeof name === "string" ? name : void 0;
|
|
25486
|
+
}
|
|
25487
|
+
|
|
25110
25488
|
//#endregion
|
|
25111
25489
|
//#region src/provisioning/secret-reference-immutable.ts
|
|
25112
25490
|
const IDENTITY = maskerOrIdentity(void 0);
|
|
@@ -25896,6 +26274,7 @@ var CloudControlProvider = class {
|
|
|
25896
26274
|
};
|
|
25897
26275
|
}
|
|
25898
26276
|
}
|
|
26277
|
+
patch = withGuardDutyDetectorReadBackOps(resourceType, patch, cleanProperties, context?.desiredFromAwsReadback === true ? { previous: cleanPreviousProperties } : void 0);
|
|
25899
26278
|
this.logger.debug(`Generated ${patch.length} patch operations for ${logicalId}: ${JSON.stringify(patch.map((op) => {
|
|
25900
26279
|
const anyOp = op;
|
|
25901
26280
|
return {
|
|
@@ -25952,7 +26331,7 @@ var CloudControlProvider = class {
|
|
|
25952
26331
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
25953
26332
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
25954
26333
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
25955
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
26334
|
+
const { ASGProvider } = await import("./asg-provider-COcKVcvZ.js");
|
|
25956
26335
|
const delegateRegion = ambientRegion();
|
|
25957
26336
|
let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
|
|
25958
26337
|
if (asgProvider === void 0) {
|
|
@@ -26058,7 +26437,7 @@ var CloudControlProvider = class {
|
|
|
26058
26437
|
const family = SDK_DELETE_FAMILIES.get(resourceType);
|
|
26059
26438
|
const cached = this.sdkDeleteDelegates.get(family);
|
|
26060
26439
|
if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
|
|
26061
|
-
const provider = family === "rds" ? new (await (import("./rds-provider-
|
|
26440
|
+
const provider = family === "rds" ? new (await (import("./rds-provider-QKN-WHF3.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-Bnr2VC6V.js"))).NeptuneProvider({ region: ccRegion });
|
|
26062
26441
|
this.sdkDeleteDelegates.set(family, {
|
|
26063
26442
|
region: ccRegion,
|
|
26064
26443
|
provider
|
|
@@ -29220,6 +29599,24 @@ const NESTED_REQUIRED = /* @__PURE__ */ new Map([
|
|
|
29220
29599
|
["Resources", ["MinimumMemoryInMiB"]],
|
|
29221
29600
|
["Tags", ["Key"]]
|
|
29222
29601
|
])],
|
|
29602
|
+
["AWS::Lambda::NetworkConnector", /* @__PURE__ */ new Map([
|
|
29603
|
+
["Configuration", ["VpcEgressConfiguration"]],
|
|
29604
|
+
["Configuration.VpcEgressConfiguration", [
|
|
29605
|
+
"AssociatedComputeResourceTypes",
|
|
29606
|
+
"NetworkProtocol",
|
|
29607
|
+
"SecurityGroupIds",
|
|
29608
|
+
"SubnetIds"
|
|
29609
|
+
]],
|
|
29610
|
+
["Tags", ["Key"]]
|
|
29611
|
+
])],
|
|
29612
|
+
["AWS::Lambda::WebFunctionEndpoint", /* @__PURE__ */ new Map([["RevisionWeights", ["RevisionId", "Weight"]]])],
|
|
29613
|
+
["AWS::Lambda::WebFunctionRevision", /* @__PURE__ */ new Map([
|
|
29614
|
+
["BuildConfig", ["CodeConfig", "RuntimeConfig"]],
|
|
29615
|
+
["BuildConfig.CodeConfig", ["S3Object"]],
|
|
29616
|
+
["BuildConfig.CodeConfig.S3Object", ["Bucket", "Key"]],
|
|
29617
|
+
["BuildConfig.RuntimeConfig", ["Runtime"]],
|
|
29618
|
+
["ServiceConfig", ["ExecutionRoleArn"]]
|
|
29619
|
+
])],
|
|
29223
29620
|
["AWS::Logs::LogGroup", /* @__PURE__ */ new Map([["Tags", ["Key", "Value"]]])],
|
|
29224
29621
|
["AWS::Neptune::DBCluster", /* @__PURE__ */ new Map([
|
|
29225
29622
|
["AssociatedRoles", ["RoleArn"]],
|
|
@@ -29934,7 +30331,10 @@ const PROPERTY_SHAPES = /* @__PURE__ */ new Map([
|
|
|
29934
30331
|
["AWS::Lambda::Function", "{\"Architectures\":\"array\",\"CapacityProviderConfig\":\"object\",\"CapacityProviderConfig.LambdaManagedInstancesCapacityProviderConfig\":\"object\",\"Code\":\"object\",\"DeadLetterConfig\":\"object\",\"DurableConfig\":\"object\",\"Environment\":\"object\",\"Environment.Variables\":\"object\",\"EphemeralStorage\":\"object\",\"FileSystemConfigs\":\"array\",\"FileSystemConfigs[]\":\"object\",\"FileSystemConfigs[].S3FilesConfig\":\"object\",\"FunctionScalingConfig\":\"object\",\"ImageConfig\":\"object\",\"ImageConfig.Command\":\"array\",\"ImageConfig.EntryPoint\":\"array\",\"Layers\":\"array\",\"LoggingConfig\":\"object\",\"RuntimeManagementConfig\":\"object\",\"SnapStart\":\"object\",\"SnapStartResponse\":\"object\",\"Tags\":\"array\",\"Tags[]\":\"object\",\"TenancyConfig\":\"object\",\"TracingConfig\":\"object\",\"VpcConfig\":\"object\",\"VpcConfig.SecurityGroupIds\":\"array\",\"VpcConfig.SubnetIds\":\"array\"}"],
|
|
29935
30332
|
["AWS::Lambda::LayerVersion", "{\"CompatibleArchitectures\":\"array\",\"CompatibleRuntimes\":\"array\",\"Content\":\"object\"}"],
|
|
29936
30333
|
["AWS::Lambda::MicrovmImage", "{\"AdditionalOsCapabilities\":\"array\",\"CodeArtifact\":\"object\",\"CpuConfigurations\":\"array\",\"CpuConfigurations[]\":\"object\",\"EgressNetworkConnectors\":\"array\",\"EnvironmentVariables\":\"array\",\"EnvironmentVariables[]\":\"object\",\"Hooks\":\"object\",\"Hooks.MicrovmHooks\":\"object\",\"Hooks.MicrovmImageHooks\":\"object\",\"Logging\":\"object\",\"Logging.CloudWatch\":\"object\",\"Resources\":\"array\",\"Resources[]\":\"object\",\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
|
|
30334
|
+
["AWS::Lambda::NetworkConnector", "{\"Configuration\":\"object\",\"Configuration.VpcEgressConfiguration\":\"object\",\"Configuration.VpcEgressConfiguration.AssociatedComputeResourceTypes\":\"array\",\"Configuration.VpcEgressConfiguration.SecurityGroupIds\":\"array\",\"Configuration.VpcEgressConfiguration.SubnetIds\":\"array\",\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
|
|
29937
30335
|
["AWS::Lambda::Url", "{\"Cors\":\"object\",\"Cors.AllowHeaders\":\"array\",\"Cors.AllowMethods\":\"array\",\"Cors.AllowOrigins\":\"array\",\"Cors.ExposeHeaders\":\"array\"}"],
|
|
30336
|
+
["AWS::Lambda::WebFunctionEndpoint", "{\"RegionalEndpoints\":\"object\",\"Regions\":\"array\",\"RevisionWeights\":\"array\",\"RevisionWeights[]\":\"object\",\"ScalingConfig\":\"object\",\"ThrottleConfig\":\"object\"}"],
|
|
30337
|
+
["AWS::Lambda::WebFunctionRevision", "{\"BuildConfig\":\"object\",\"BuildConfig.CodeConfig\":\"object\",\"BuildConfig.CodeConfig.S3Object\":\"object\",\"BuildConfig.RuntimeConfig\":\"object\",\"ServiceConfig\":\"object\",\"ServiceConfig.EnvironmentVariables\":\"object\",\"ServiceConfig.TelemetryConfig\":\"object\",\"ServiceConfig.TelemetryConfig.LoggingConfig\":\"object\"}"],
|
|
29938
30338
|
["AWS::Logs::LogGroup", "{\"DataProtectionPolicy\":\"object\",\"FieldIndexPolicies\":\"array\",\"FieldIndexPolicies[]\":\"object\",\"ResourcePolicyDocument\":\"object\",\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
|
|
29939
30339
|
["AWS::Neptune::DBCluster", "{\"AssociatedRoles\":\"array\",\"AssociatedRoles[]\":\"object\",\"AvailabilityZones\":\"array\",\"EnableCloudwatchLogsExports\":\"array\",\"ServerlessScalingConfiguration\":\"object\",\"Tags\":\"array\",\"Tags[]\":\"object\",\"VpcSecurityGroupIds\":\"array\"}"],
|
|
29940
30340
|
["AWS::Neptune::DBInstance", "{\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
|
|
@@ -30096,6 +30496,24 @@ const STICKY_CC_MIGRATION_EXEMPT = /* @__PURE__ */ new Map([
|
|
|
30096
30496
|
issue: "https://github.com/go-to-k/cdkd/issues/2719",
|
|
30097
30497
|
integFixture: "cc-to-sdk-reroute"
|
|
30098
30498
|
}],
|
|
30499
|
+
["AWS::Lambda::WebFunctionRevision", {
|
|
30500
|
+
mode: "sdk-coverage",
|
|
30501
|
+
physicalIdForm: "both layers store the revision ARN: the schema primaryIdentifier is RevisionArn and LambdaWebFunctionRevisionProvider.create records the CreateWebFunctionRevision revisionArn",
|
|
30502
|
+
issue: "https://github.com/go-to-k/cdkd/issues/4926",
|
|
30503
|
+
integFixture: "lambda-web-function-revision-replace"
|
|
30504
|
+
}],
|
|
30505
|
+
["AWS::Lambda::WebFunctionEndpoint", {
|
|
30506
|
+
mode: "sdk-coverage",
|
|
30507
|
+
physicalIdForm: "both layers store the endpoint ARN: the schema primaryIdentifier is EndpointArn and LambdaWebFunctionEndpointProvider.create records the CreateWebFunctionEndpoint endpointArn",
|
|
30508
|
+
issue: "https://github.com/go-to-k/cdkd/issues/4926",
|
|
30509
|
+
integFixture: "lambda-web-function-revision-replace"
|
|
30510
|
+
}],
|
|
30511
|
+
["AWS::Lambda::NetworkConnector", {
|
|
30512
|
+
mode: "sdk-coverage",
|
|
30513
|
+
physicalIdForm: "both layers store the connector ARN: the schema primaryIdentifier is Arn and LambdaNetworkConnectorProvider.create records the CreateNetworkConnector Arn",
|
|
30514
|
+
issue: "https://github.com/go-to-k/cdkd/issues/4928",
|
|
30515
|
+
integFixture: "lambda-network-connector"
|
|
30516
|
+
}],
|
|
30099
30517
|
["AWS::ElasticLoadBalancingV2::Listener", {
|
|
30100
30518
|
mode: "sdk-coverage",
|
|
30101
30519
|
physicalIdForm: "both layers store the listener ARN: the schema primaryIdentifier is ListenerArn and ELBv2Provider.create records the CreateListener ListenerArn",
|
|
@@ -32490,7 +32908,11 @@ async function resolveOutputs(template, resources, stackName, digestSource, para
|
|
|
32490
32908
|
};
|
|
32491
32909
|
const outputsPassSecrets = context.recordedSecretValues ?? EMPTY_SECRETS;
|
|
32492
32910
|
const outputsPassInherited = context.inheritedSecrets ?? EMPTY_SECRETS;
|
|
32493
|
-
if (context.recordedSecretValues)
|
|
32911
|
+
if (context.recordedSecretValues) {
|
|
32912
|
+
this.outputsPassSecretMaps.push(context.recordedSecretValues);
|
|
32913
|
+
mirrorInheritedParameterReads(context.recordedSecretValues, this.outputSecrets);
|
|
32914
|
+
if (this.options.inheritedSecrets && this.options.inheritedSecrets.size > 0) inheritNestedStackParameterAssociations(this.outputSecrets, this.options.inheritedSecrets);
|
|
32915
|
+
}
|
|
32494
32916
|
const publishedOutputNames = collectPublishedOutputNames(template.Outputs, conditions);
|
|
32495
32917
|
let outputsPassCompleted = false;
|
|
32496
32918
|
try {
|
|
@@ -34167,24 +34589,25 @@ async function replayDelete(s) {
|
|
|
34167
34589
|
|
|
34168
34590
|
//#endregion
|
|
34169
34591
|
//#region src/deployment/rollback-executor/replay-revert.ts
|
|
34170
|
-
async function replayReadopt(s) {
|
|
34592
|
+
async function replayReadopt(s, survivor) {
|
|
34171
34593
|
const { op, stateResources, stackName, ctx, result, inlinePolicyWriters, afterOp, logger, mask } = s;
|
|
34594
|
+
const oldKind = survivor === void 0 ? "retained" : "surviving";
|
|
34172
34595
|
const current = stateResources[op.logicalId];
|
|
34173
34596
|
const prev = op.previousState;
|
|
34174
34597
|
const oldShown = hasAddressablePhysicalId({ physicalId: prev.physicalId }) ? displaySafe(mask(prev.physicalId)) : "no recorded id";
|
|
34175
34598
|
const unprovenCopyRefusal = (reason) => {
|
|
34176
34599
|
const remedy = orphanRemedy(op.logicalId, ctx);
|
|
34177
|
-
return ownRemedyError(markNonRetryable(new CdkdError(safeMsg`Cannot reverse the replacement of ${shownLogicalId(op.logicalId)} (${refusalResourceType(op.resourceType)}): ` + reason + ` The
|
|
34600
|
+
return ownRemedyError(markNonRetryable(new CdkdError(safeMsg`Cannot reverse the replacement of ${shownLogicalId(op.logicalId)} (${refusalResourceType(op.resourceType)}): ` + reason + ` The ${oldKind} old resource (${oldShown}) is named only by the rollback journal, so the JOURNAL is kept. Check both resources by hand.` + (remedy.offered ? ` To leave this one as it is, re-run ${rerunRollbackPhrase(ctx, "`cdkd rollback`")} with the command below; that also drops the journal's only record of the ${oldKind} old resource (${oldShown}), so note that id first.` : ` No repair of the state record makes this op succeed on a re-run.`) + remedy.clause + remedy.line, STATE_RESOURCES_MALFORMED)));
|
|
34178
34601
|
};
|
|
34179
34602
|
const opIdUnusable = op.physicalId !== void 0 && !hasAddressablePhysicalId(op);
|
|
34180
34603
|
if (!rollbackRetainsNewResource(current) && rollbackCannotAddress(current, op.resourceType, current.provisionedBy ?? op.provisionedBy, current.physicalId)) {
|
|
34181
34604
|
if (opIdUnusable) throw unprovenCopyRefusal("neither its state record nor its rollback journal entry has a non-empty string 'physicalId' for the replacement's new resource, so cdkd cannot address that resource in AWS or tell which resource it is, and sent nothing.");
|
|
34182
34605
|
const target = op.physicalId === void 0 ? void 0 : refusalPhysicalId(mask(String(op.physicalId)));
|
|
34183
|
-
const repair = target === void 0 ? `Repair the record's 'physicalId' to the id of the replacement's NEW resource (inspect it with \`cdkd state show\`): the journal does not record that id, and the re-run DELETES the resource the repaired record names as the new copy, so name the right one. Then re-run ${rerunRollbackPhrase(ctx, "`cdkd rollback`")}.` : `Repair the record's 'physicalId' to ${target}, the replacement's new resource the journal records (inspect it with \`cdkd state show\`); the re-run deletes it and re-adopts the old one. Any other id stops the revert and drops the journal's only record of the
|
|
34184
|
-
throw new CdkdError(safeMsg`Cannot reverse the replacement of ${shownLogicalId(op.logicalId)} (${refusalResourceType(op.resourceType)}): ` + `its state record has no non-empty string 'physicalId', so cdkd cannot address the new resource in AWS to delete it, and sent nothing. The
|
|
34606
|
+
const repair = target === void 0 ? `Repair the record's 'physicalId' to the id of the replacement's NEW resource (inspect it with \`cdkd state show\`): the journal does not record that id, and the re-run DELETES the resource the repaired record names as the new copy, so name the right one. Then re-run ${rerunRollbackPhrase(ctx, "`cdkd rollback`")}.` : `Repair the record's 'physicalId' to ${target}, the replacement's new resource the journal records (inspect it with \`cdkd state show\`); the re-run deletes it and re-adopts the old one. Any other id stops the revert and drops the journal's only record of the ${oldKind} old resource (${oldShown}). Then re-run ${rerunRollbackPhrase(ctx, "`cdkd rollback`")}.` + (describedPhysicalIdPointer(target) !== "" ? " That id is left out of the prose above: it is not a plain identifier — read it from the rollback journal." : target.includes("***") ? ` That id is shown masked — read the full value from the rollback journal.` : "");
|
|
34607
|
+
throw new CdkdError(safeMsg`Cannot reverse the replacement of ${shownLogicalId(op.logicalId)} (${refusalResourceType(op.resourceType)}): ` + `its state record has no non-empty string 'physicalId', so cdkd cannot address the new resource in AWS to delete it, and sent nothing. The ${oldKind} old resource (${oldShown}) is named only by the rollback journal, so the JOURNAL is kept. ` + repair, STATE_RESOURCES_MALFORMED);
|
|
34185
34608
|
}
|
|
34186
34609
|
if (!rollbackRetainsNewResource(current) && opIdUnusable && current.physicalId !== op.physicalId) throw unprovenCopyRefusal("its rollback journal entry has no non-empty string 'physicalId' for the replacement's new resource, so cdkd cannot tell whether the resource state records under this id is that one, and did not delete it; nothing was sent.");
|
|
34187
|
-
logger.info(` Rollback: Reversing replacement of ${safe(op.logicalId)} (${safe(op.resourceType)}) — deleting the new resource and re-adopting the
|
|
34610
|
+
logger.info(` Rollback: Reversing replacement of ${safe(op.logicalId)} (${safe(op.resourceType)}) — deleting the new resource and re-adopting the ${oldKind} old one (${displaySafe(mask(prev.physicalId))})`);
|
|
34188
34611
|
let survivorReason;
|
|
34189
34612
|
const survivorId = retainedSurvivorId(current, op);
|
|
34190
34613
|
if (rollbackRetainsNewResource(current)) {
|
|
@@ -34208,7 +34631,7 @@ async function replayReadopt(s) {
|
|
|
34208
34631
|
recordedNoEchoLeaves: current.noEchoLeaves,
|
|
34209
34632
|
maskSecrets: mask
|
|
34210
34633
|
}));
|
|
34211
|
-
throwIfDeleteSkipped(readoptDelete, op.logicalId, current.physicalId,
|
|
34634
|
+
throwIfDeleteSkipped(readoptDelete, op.logicalId, current.physicalId, `while reversing its replacement (re-adopting the ${oldKind} old resource)`, {
|
|
34212
34635
|
ctx,
|
|
34213
34636
|
stackName,
|
|
34214
34637
|
resourceType: op.resourceType,
|
|
@@ -34217,7 +34640,7 @@ async function replayReadopt(s) {
|
|
|
34217
34640
|
});
|
|
34218
34641
|
}
|
|
34219
34642
|
stateResources[op.logicalId] = prev;
|
|
34220
|
-
logger.info(` Rollback: ${safe(op.logicalId)} restored to the
|
|
34643
|
+
logger.info(` Rollback: ${safe(op.logicalId)} restored to the ${oldKind} old resource`);
|
|
34221
34644
|
await afterOp?.(op.logicalId);
|
|
34222
34645
|
const survivorProvisionedBy = current.provisionedBy;
|
|
34223
34646
|
ctx.recordEvent?.({
|
|
@@ -34227,9 +34650,10 @@ async function replayReadopt(s) {
|
|
|
34227
34650
|
logicalId: op.logicalId,
|
|
34228
34651
|
resourceType: op.resourceType,
|
|
34229
34652
|
...op.provisionedBy && { provisionedBy: op.provisionedBy },
|
|
34653
|
+
...survivorReason === void 0 && survivor !== void 0 && { reason: mask(survivor.reason) },
|
|
34230
34654
|
...survivorReason !== void 0 && {
|
|
34231
34655
|
...survivorId !== void 0 && { physicalId: survivorId },
|
|
34232
|
-
reason: mask(survivorReason),
|
|
34656
|
+
reason: mask(survivor === void 0 ? survivorReason : `${survivorReason}; ${survivor.reason}`),
|
|
34233
34657
|
...survivorProvisionedBy && { provisionedBy: survivorProvisionedBy }
|
|
34234
34658
|
}
|
|
34235
34659
|
});
|
|
@@ -34331,6 +34755,73 @@ async function replayRevert(s) {
|
|
|
34331
34755
|
});
|
|
34332
34756
|
}
|
|
34333
34757
|
|
|
34758
|
+
//#endregion
|
|
34759
|
+
//#region src/deployment/rollback-executor/replaced-survivor.ts
|
|
34760
|
+
const DELETE_REFUSAL_NAMES = /* @__PURE__ */ new Set([
|
|
34761
|
+
"AccessDenied",
|
|
34762
|
+
"AccessDeniedException",
|
|
34763
|
+
"UnauthorizedOperation",
|
|
34764
|
+
"AuthorizationError",
|
|
34765
|
+
"DependencyViolation",
|
|
34766
|
+
"DeleteConflict",
|
|
34767
|
+
"DeleteConflictException"
|
|
34768
|
+
]);
|
|
34769
|
+
function replacedDeleteFailureVerdict(error) {
|
|
34770
|
+
let current = error;
|
|
34771
|
+
for (let depth = 0; depth < 10 && current != null; depth++) {
|
|
34772
|
+
if (typeof current !== "object") break;
|
|
34773
|
+
const link = current;
|
|
34774
|
+
for (const name of [
|
|
34775
|
+
link.name,
|
|
34776
|
+
link.Code,
|
|
34777
|
+
link.code
|
|
34778
|
+
]) if (typeof name === "string" && DELETE_REFUSAL_NAMES.has(name)) return "kept";
|
|
34779
|
+
current = link.cause;
|
|
34780
|
+
}
|
|
34781
|
+
return "unconfirmed";
|
|
34782
|
+
}
|
|
34783
|
+
const REPLACED_SURVIVOR_PROBE_TIMEOUT_MS = 3e4;
|
|
34784
|
+
const INTERRUPT_POLL_MS = 250;
|
|
34785
|
+
async function probeReplacedSurvivor(s, oldType, timeoutMs = REPLACED_SURVIVOR_PROBE_TIMEOUT_MS) {
|
|
34786
|
+
if (s.isInterrupted?.() === true) return "interrupted";
|
|
34787
|
+
let timer;
|
|
34788
|
+
let poll;
|
|
34789
|
+
const stopped = new Promise((resolve) => {
|
|
34790
|
+
timer = setTimeout(() => resolve("unknown"), timeoutMs);
|
|
34791
|
+
if (s.isInterrupted !== void 0) {
|
|
34792
|
+
const interrupted = s.isInterrupted;
|
|
34793
|
+
poll = setInterval(() => {
|
|
34794
|
+
if (interrupted()) resolve("interrupted");
|
|
34795
|
+
}, INTERRUPT_POLL_MS);
|
|
34796
|
+
}
|
|
34797
|
+
});
|
|
34798
|
+
try {
|
|
34799
|
+
return await Promise.race([readSurvivor(s, oldType), stopped]);
|
|
34800
|
+
} finally {
|
|
34801
|
+
clearTimeout(timer);
|
|
34802
|
+
clearInterval(poll);
|
|
34803
|
+
}
|
|
34804
|
+
}
|
|
34805
|
+
async function readSurvivor(s, oldType) {
|
|
34806
|
+
const prev = s.op.previousState;
|
|
34807
|
+
const physicalId = prev?.physicalId;
|
|
34808
|
+
if (typeof physicalId !== "string" || physicalId === "") return "unknown";
|
|
34809
|
+
try {
|
|
34810
|
+
const { provider } = s.ctx.providerRegistry.getProviderFor({
|
|
34811
|
+
resourceType: oldType,
|
|
34812
|
+
provisionedBy: prev?.provisionedBy
|
|
34813
|
+
});
|
|
34814
|
+
if (typeof provider.readCurrentState !== "function") return "unreadable";
|
|
34815
|
+
const read = await withReplayDeletePrinting(s, () => provider.readCurrentState(physicalId, s.op.logicalId, oldType, prev?.properties));
|
|
34816
|
+
if (read === RESOURCE_NOT_FOUND) return "gone";
|
|
34817
|
+
if (read === void 0) return "unreadable";
|
|
34818
|
+
if (typeof read !== "object" || read === null || Array.isArray(read)) return "unknown";
|
|
34819
|
+
return Object.keys(read).length > 0 ? "exists" : "unreadable";
|
|
34820
|
+
} catch {
|
|
34821
|
+
return "unknown";
|
|
34822
|
+
}
|
|
34823
|
+
}
|
|
34824
|
+
|
|
34334
34825
|
//#endregion
|
|
34335
34826
|
//#region src/deployment/rollback-executor/replay-reverse-replacement.ts
|
|
34336
34827
|
async function replayReverseReplacement(s) {
|
|
@@ -34340,6 +34831,18 @@ async function replayReverseReplacement(s) {
|
|
|
34340
34831
|
const oldTypeRouting = resolveReplacementOldType(op);
|
|
34341
34832
|
if (!oldTypeRouting.ok) throw unroutableReplacementError(op, oldTypeRouting.reason, ctx);
|
|
34342
34833
|
const oldType = oldTypeRouting.oldType;
|
|
34834
|
+
if (op.oldResourceMaySurvive !== void 0) {
|
|
34835
|
+
const survivor = await probeReplacedSurvivor(s, oldType);
|
|
34836
|
+
if (survivor === "exists" && op.oldResourceMaySurvive !== "kept") throw survivorUnprovenRefusal(s, oldType, "maybe-deleting");
|
|
34837
|
+
if (survivor === "exists") {
|
|
34838
|
+
const oldShown = refusalPhysicalId(mask(String(prev.physicalId)));
|
|
34839
|
+
logger.warn(safeMsg` ⚠ Rollback: the old resource of ${shownLogicalId(op.logicalId)} (${oldShown}) still ` + "exists — the deploy's delete of it was not confirmed — so it is re-adopted instead of re-created. Part of it may have been removed before that delete failed: check it " + safeMsg`with cdkd drift after the rollback.${describedPhysicalIdPointer(oldShown)}`);
|
|
34840
|
+
result.warnings++;
|
|
34841
|
+
return replayReadopt(s, { reason: "the old resource survived a delete that was refused or never sent during the deploy and was re-adopted instead of re-created; the provider may have run part of that delete, so check it with cdkd drift" });
|
|
34842
|
+
}
|
|
34843
|
+
if (survivor !== "gone") throw survivorUnprovenRefusal(s, oldType, survivor);
|
|
34844
|
+
logger.info(safeMsg` Rollback: the old resource of ${safe(op.logicalId)} (${mask(String(prev.physicalId))}) is gone — re-creating it`);
|
|
34845
|
+
}
|
|
34343
34846
|
const typeChanged = oldType !== op.resourceType;
|
|
34344
34847
|
if (!requireRestorableBaseline(prev.properties, logger, {
|
|
34345
34848
|
logicalId: op.logicalId,
|
|
@@ -34589,6 +35092,15 @@ async function deleteMarkedRecreate(error, s) {
|
|
|
34589
35092
|
s.logger.warn(safeMsg` Rollback: could not delete ${id}, which the failed re-create of ${shown} made before ` + safeMsg`failing (${s.mask(failure)}); no record holds it — delete it yourself`);
|
|
34590
35093
|
return false;
|
|
34591
35094
|
}
|
|
35095
|
+
function survivorUnprovenRefusal(s, oldType, verdict) {
|
|
35096
|
+
const { op, ctx, mask } = s;
|
|
35097
|
+
const remedy = orphanRemedy(op.logicalId, ctx);
|
|
35098
|
+
const oldId = op.previousState?.physicalId;
|
|
35099
|
+
const oldShown = hasAddressablePhysicalId({ physicalId: oldId }) ? refusalPhysicalId(mask(String(oldId))) : "no recorded id";
|
|
35100
|
+
const rerun = rerunRollbackPhrase(ctx, "cdkd rollback");
|
|
35101
|
+
const why = verdict === "unreadable" ? "cdkd has no read for this resource type that can tell whether it does. Re-creating it could duplicate it or collide with it" : verdict === "interrupted" ? `the rollback was interrupted before cdkd could read whether it does; re-running ${rerun} reads it` : verdict === "unknown" ? `cdkd could not read whether it does (the read failed or did not answer in time); re-running ${rerun} reads it again. Re-creating it could duplicate it or collide with it` : `AWS still reports it, but its failed delete may have been accepted and still be running, or only partly ran. Re-adopting it could leave neither resource once a running delete finishes, or one that delete already stripped; once AWS reports it gone, re-running ${rerun} re-creates it`;
|
|
35102
|
+
return ownRemedyError(markNonRetryable(new CdkdError(`Cannot reverse the replacement of ${refusalLogicalId(op.logicalId)} (${refusalResourceType(oldType)}): the deploy did not confirm that it deleted the old resource (${oldShown}), so it may still exist, and ${why}. Nothing was sent and the journal is kept.` + (remedy.offered ? " To keep the new resource in its place instead, re-run with the command below, then delete the old resource by hand if it still exists." : "") + `${remedy.clause}${describedPhysicalIdPointer(oldShown)}` + remedy.line, "REPLACED_SURVIVOR_UNPROVEN")));
|
|
35103
|
+
}
|
|
34592
35104
|
|
|
34593
35105
|
//#endregion
|
|
34594
35106
|
//#region src/provisioning/remove-protection-types.ts
|
|
@@ -35636,7 +36148,7 @@ function displacedOpClause(op, marks, logger) {
|
|
|
35636
36148
|
const retainedOld = retainedOldPhysicalId(op);
|
|
35637
36149
|
if (retainedOld !== void 0 && marks.some((m) => isMarkFor(m, op))) {
|
|
35638
36150
|
const shownOld = displacedPhysicalIdShown(op, logger, retainedOld);
|
|
35639
|
-
return `replaced ${shownOld} ${op.oldResourceRetained === true ? "but kept it (UpdateReplacePolicy: Retain)" : "and may have kept it (the journal records no verdict)"}; cdkd import adopted the replacement, so ${shownOld} is left untracked`;
|
|
36151
|
+
return `replaced ${shownOld} ${op.oldResourceRetained === true ? "but kept it (UpdateReplacePolicy: Retain)" : op.oldResourceMaySurvive !== void 0 ? "and may have kept it (its delete was not confirmed)" : "and may have kept it (the journal records no verdict)"}; cdkd import adopted the replacement, so ${shownOld} is left untracked`;
|
|
35640
36152
|
}
|
|
35641
36153
|
const shownId = displacedPhysicalIdShown(op, logger);
|
|
35642
36154
|
return shownId !== void 0 ? `recorded ${shownId}, which cdkd import has since replaced under this id` : "recorded no physical id, and cdkd import has since put another resource under this id";
|
|
@@ -37330,6 +37842,7 @@ async function deleteReplacedAfterCreate(logicalId, oldResourceType, currentReso
|
|
|
37330
37842
|
} catch (deleteError) {
|
|
37331
37843
|
const deleteMsg = maskSecretsInText(deleteError instanceof Error ? deleteError.message : String(deleteError), secrets);
|
|
37332
37844
|
deleteFailed = true;
|
|
37845
|
+
this.replacedOldMaySurvive.set(logicalId, this.replacedOldMaySurvive.get(logicalId) === "unconfirmed" ? "unconfirmed" : replacedDeleteFailureVerdict(deleteError));
|
|
37333
37846
|
const deferred = this.deferredReplacedDeletes;
|
|
37334
37847
|
if (!isRetry && deferred !== void 0) {
|
|
37335
37848
|
this.logger.info(safeMsg` Could not delete old ${logicalId} (${currentResource.physicalId}) yet: ${deleteMsg}. Retrying after the rest of the deploy.`);
|
|
@@ -37351,9 +37864,13 @@ async function deleteReplacedAfterCreate(logicalId, oldResourceType, currentReso
|
|
|
37351
37864
|
});
|
|
37352
37865
|
const skipReason = deleteSkipReason(deleteResult);
|
|
37353
37866
|
if (skipReason !== void 0) {
|
|
37867
|
+
this.replacedOldMaySurvive.set(logicalId, "unconfirmed");
|
|
37354
37868
|
this.replacedDeleteSkips.set(logicalId, `the replaced ${oldResourceType} (${currentResource.physicalId}) was not deleted (${skipReason}) and is no longer tracked by cdkd`);
|
|
37355
37869
|
this.logger.warn(safeMsg` ⚠ ${deleteSkippedMessage(logicalId, currentResource.physicalId, skipReason, "while cleaning up the replaced resource", { commandFreeLine: true })}. Delete it manually — it is no longer tracked in state.`);
|
|
37356
|
-
} else if (!deleteFailed)
|
|
37870
|
+
} else if (!deleteFailed) {
|
|
37871
|
+
if (isRetry) this.replacedOldMaySurvive.delete(logicalId);
|
|
37872
|
+
this.logger.info(isRetry ? safeMsg` ${green("✓")} Old ${logicalId} (${currentResource.physicalId}) deleted` : safeMsg` ${green("✓")} Old resource deleted`);
|
|
37873
|
+
}
|
|
37357
37874
|
}
|
|
37358
37875
|
async function retryDeferredReplacedDeletes(stackName, counts) {
|
|
37359
37876
|
const deferred = this.deferredReplacedDeletes;
|
|
@@ -37495,6 +38012,19 @@ function isHealEligible(logicalId, resource) {
|
|
|
37495
38012
|
const loaded = Object.hasOwn(this.healBaseline, logicalId) ? this.healBaseline[logicalId] : void 0;
|
|
37496
38013
|
return loaded !== void 0 && loaded.physicalId === resource.physicalId && loaded.attributes === resource.attributes && !isHealExcludedType(resource.resourceType);
|
|
37497
38014
|
}
|
|
38015
|
+
const healJudges = /* @__PURE__ */ new WeakMap();
|
|
38016
|
+
function healPrintingBag(baseline, logicalId, resource) {
|
|
38017
|
+
if (!Object.hasOwn(baseline, logicalId) || baseline[logicalId] !== resource) return secretNamePrintingBag(logicalId, {
|
|
38018
|
+
...baseline,
|
|
38019
|
+
[logicalId]: resource
|
|
38020
|
+
});
|
|
38021
|
+
let judge = healJudges.get(baseline);
|
|
38022
|
+
if (judge === void 0) {
|
|
38023
|
+
judge = secretNamePrintingBags(baseline, void 0);
|
|
38024
|
+
healJudges.set(baseline, judge);
|
|
38025
|
+
}
|
|
38026
|
+
return judge(logicalId);
|
|
38027
|
+
}
|
|
37498
38028
|
async function readStaleAttributes(logicalId, resource, stackName) {
|
|
37499
38029
|
const { provider } = this.providerRegistry.getProviderFor({
|
|
37500
38030
|
resourceType: resource.resourceType,
|
|
@@ -37502,13 +38032,13 @@ async function readStaleAttributes(logicalId, resource, stackName) {
|
|
|
37502
38032
|
provisionedBy: resource.provisionedBy,
|
|
37503
38033
|
previousProperties: resource.properties
|
|
37504
38034
|
});
|
|
37505
|
-
const outcome = await readRecordAttributes({
|
|
38035
|
+
const outcome = await withPrintingSecrets(healPrintingBag(this.healBaseline, logicalId, resource), () => readRecordAttributes({
|
|
37506
38036
|
provider,
|
|
37507
38037
|
logicalId,
|
|
37508
38038
|
resource,
|
|
37509
38039
|
stackName,
|
|
37510
38040
|
region: this.stackRegion
|
|
37511
|
-
});
|
|
38041
|
+
}));
|
|
37512
38042
|
if (outcome.kind !== "read") return outcome;
|
|
37513
38043
|
const { attributes } = outcome;
|
|
37514
38044
|
if (Object.keys(attributes).length > 0) this.healedAttributes.set(logicalId, {
|
|
@@ -42571,7 +43101,7 @@ const REMEDY = "To move a custom resource to a different handler, give it a new
|
|
|
42571
43101
|
const UNJUDGEABLE_REMEDY = `Where the recorded ServiceToken is unreadable and the handler did not change, put the ARN of the handler that created this resource (the one it was last deployed with, not the one the template names now) back as ServiceToken in state.json (a ServiceToken fed by a NoEcho parameter is recorded only as '${"***"}': feed it from a plain value) and re-deploy.`;
|
|
42572
43102
|
function renderServiceTokenRefusal(refusals, stackName, mask = (text) => text) {
|
|
42573
43103
|
const rows = refusals.map((refusal) => ` - ${rowText(refusal, mask)}`);
|
|
42574
|
-
return `Refusing to deploy ${stackName}: ` + (refusals.length === 1 ? `a custom resource's ServiceToken changes` : `${refusals.length} custom resources' ServiceTokens change`) + `, which CloudFormation does not allow ("Modifying service token is not allowed"). Nothing was sent to either handler.
|
|
43104
|
+
return safeMsg`Refusing to deploy ${displayStackName(stackName)}: ` + (refusals.length === 1 ? `a custom resource's ServiceToken changes` : `${refusals.length} custom resources' ServiceTokens change`) + `, which CloudFormation does not allow ("Modifying service token is not allowed"). Nothing was sent to either handler.
|
|
42575
43105
|
${rows.join("\n")}\n ${REMEDY}` + (refusals.some((refusal) => refusal.kind === "unjudgeable") ? `\n ${UNJUDGEABLE_REMEDY}` : "");
|
|
42576
43106
|
}
|
|
42577
43107
|
function serviceTokenBlockingReason(refusal, mask) {
|
|
@@ -42617,7 +43147,7 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
|
|
|
42617
43147
|
const existingState = stateResources[logicalId];
|
|
42618
43148
|
const renderer = getLiveRenderer();
|
|
42619
43149
|
const currentResource = existingState;
|
|
42620
|
-
if (!currentResource) throw new Error(`Cannot update ${logicalId}: resource not found in state`);
|
|
43150
|
+
if (!currentResource) throw new Error(safeMsg`Cannot update ${logicalId}: resource not found in state`);
|
|
42621
43151
|
const oldResourceType = currentResource.resourceType;
|
|
42622
43152
|
const typeChanged = oldResourceType !== resourceType;
|
|
42623
43153
|
const desiredProps = change.desiredProperties || {};
|
|
@@ -42860,7 +43390,7 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
|
|
|
42860
43390
|
applyAttributeOnlyUpdate(change.attributeChanges);
|
|
42861
43391
|
return;
|
|
42862
43392
|
}
|
|
42863
|
-
this.logger.debug(`Skipping ${logicalId}: no actual changes after intrinsic function resolution`);
|
|
43393
|
+
this.logger.debug(safeMsg`Skipping ${logicalId}: no actual changes after intrinsic function resolution`);
|
|
42864
43394
|
if (counts) counts.skipped++;
|
|
42865
43395
|
return;
|
|
42866
43396
|
}
|
|
@@ -43125,7 +43655,7 @@ function unwrittenCreateOnlyRefusal(input) {
|
|
|
43125
43655
|
const keep = [.../* @__PURE__ */ new Set([...unwritten, ...routeDriving])].sort((a, b) => a.localeCompare(b)).map((property) => `${resourceType}:${property}`).join(",");
|
|
43126
43656
|
const replaceFlags = nested ? "--replace (which creates the new resource before deleting the old one, so a resource holding a unique value other than its name, such as a CIDR block, collides)" : `--recreate-via-cc-api ${logicalId}, which deletes the old resource first (--replace also works, but creates the new one first, so a resource holding a unique value other than its name, such as a CIDR block, collides)`;
|
|
43127
43657
|
const routed = [...routeDriving].sort((a, b) => a.localeCompare(b)).join(", ");
|
|
43128
|
-
return `${logicalId} (${resourceType}): ${list} ${one ? "is" : "are"} create-only, and the state record holds ${one ? "it" : "them"} although this type's SDK provider never writes ${one ? "it" : "them"}, so AWS does not. This deploy routes the resource through Cloud Control (--prefer-sdk-route does not cover ${routed}), and applying a create-only property means replacing the resource, which cdkd does not do on its own. This resource was not changed. To replace it and apply ${list}, re-run with ${replaceFlags}; a stateful resource also needs --force-stateful-recreation.` + (protectionEvidence !== void 0 ? ` ${recordedProtectionNote(protectionEvidence, nested ? "--replace" : `--recreate-via-cc-api ${logicalId} or --replace`)}` : "") + ` To keep dropping ${one ? "it" : "them"}, re-run with --prefer-sdk-route ${keep}.`;
|
|
43658
|
+
return safeMsg`${logicalId} (${resourceType}): ${list} ${one ? "is" : "are"} create-only, and the ` + `state record holds ${one ? "it" : "them"} although this type's SDK provider never writes ${one ? "it" : "them"}, so AWS does not. This deploy routes the resource through ` + safeMsg`Cloud Control (--prefer-sdk-route does not cover ${routed}), and applying a create-only ` + `property means replacing the resource, which cdkd does not do on its own. This ` + safeMsg`resource was not changed. To replace it and apply ${list}, re-run with ${replaceFlags}; a ` + `stateful resource also needs --force-stateful-recreation.` + (protectionEvidence !== void 0 ? safeMsg` ${recordedProtectionNote(protectionEvidence, nested ? "--replace" : `--recreate-via-cc-api ${logicalId} or --replace`)}` : "") + safeMsg` To keep dropping ${one ? "it" : "them"}, re-run with --prefer-sdk-route ${keep}.`;
|
|
43129
43659
|
}
|
|
43130
43660
|
function scalarLeavesOf(value, into = /* @__PURE__ */ new Set()) {
|
|
43131
43661
|
if (typeof value === "string") into.add(value);
|
|
@@ -43370,6 +43900,7 @@ async function updateByReplacement({ change, counts, currentProps, currentResour
|
|
|
43370
43900
|
} catch (snapshotError) {
|
|
43371
43901
|
if (snapshotError instanceof CdkdError && snapshotError.code === "FINAL_SNAPSHOT_UNSUPPORTED") throw snapshotError;
|
|
43372
43902
|
snapshotBlockedDelete = true;
|
|
43903
|
+
this.replacedOldMaySurvive.set(logicalId, "kept");
|
|
43373
43904
|
this.logger.warn(safeMsg` ⚠ Final snapshot for old ${logicalId} (${currentResource.physicalId}) ` + safeMsg`failed: ${asIsMessage(snapshotError instanceof Error ? snapshotError.message : String(snapshotError))}. ` + "The old resource was NOT deleted (UpdateReplacePolicy: Snapshot) — delete it manually once you have a snapshot; it is no longer tracked in state.");
|
|
43374
43905
|
}
|
|
43375
43906
|
if (!snapshotBlockedDelete) await this.deleteReplacedAfterCreate(logicalId, oldResourceType, currentResource, oldDeleteProvider, currentResource.properties, cleanupFinalSnapshotId, updateReplacePolicy, updateSecrets, oldDeleteRoute.provisionedBy, noEchoDeleteValues);
|
|
@@ -43480,6 +44011,7 @@ async function updateInPlace({ conditions, counts, currentProps, currentPropsAsW
|
|
|
43480
44011
|
...removal.context
|
|
43481
44012
|
})), logicalId, void 0, void 0, updateProvider);
|
|
43482
44013
|
if (result.sentNothing === true) this.updatesThatSentNothing.add(logicalId);
|
|
44014
|
+
if (result.wasReplaced === true && result.outcome === "partial") this.replacedOldMaySurvive.set(logicalId, result.oldResourceSurvivor === "kept" ? "kept" : "unconfirmed");
|
|
43483
44015
|
result = withoutInjectedRemovals(result, removal.injected);
|
|
43484
44016
|
if (removal.unhandled.length > 0) this.logger.warn(removalWarning(logicalId, resourceType, removal.unhandled));
|
|
43485
44017
|
} catch (updateError) {
|
|
@@ -44442,6 +44974,7 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
44442
44974
|
oldResourceRetained: this.retainedOldOnReplacement.has(logicalId),
|
|
44443
44975
|
oldDeletedBeforeCreate: this.oldDeletedBeforeCreate.has(logicalId)
|
|
44444
44976
|
},
|
|
44977
|
+
...change.changeType === "UPDATE" && this.replacedOldMaySurvive.has(logicalId) && { oldResourceMaySurvive: this.replacedOldMaySurvive.get(logicalId) },
|
|
44445
44978
|
...change.changeType === "UPDATE" && this.updateWasReplaced.has(logicalId) && { wasReplaced: this.updateWasReplaced.get(logicalId) },
|
|
44446
44979
|
...change.changeType === "UPDATE" && previousState !== void 0 && { previousResourceType: previousState.resourceType }
|
|
44447
44980
|
});
|
|
@@ -44502,7 +45035,16 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
44502
45035
|
if (this.interrupted && this.hasPending(deleteExecutor)) throw new InterruptedError(this.interruptCause ?? "user");
|
|
44503
45036
|
}
|
|
44504
45037
|
if (this.interrupted) this.warnUnretriedReplacedDeletes("interrupted");
|
|
44505
|
-
else
|
|
45038
|
+
else try {
|
|
45039
|
+
await this.retryDeferredReplacedDeletes(stackName, actualCounts);
|
|
45040
|
+
} finally {
|
|
45041
|
+
for (const op of completedOperations) {
|
|
45042
|
+
if (op.changeType !== "UPDATE") continue;
|
|
45043
|
+
const verdict = this.replacedOldMaySurvive.get(op.logicalId);
|
|
45044
|
+
if (verdict !== void 0) op.oldResourceMaySurvive = verdict;
|
|
45045
|
+
else delete op.oldResourceMaySurvive;
|
|
45046
|
+
}
|
|
45047
|
+
}
|
|
44506
45048
|
} catch (error) {
|
|
44507
45049
|
this.warnUnretriedReplacedDeletes(this.interruptCause === "user" ? "interrupted" : "failed");
|
|
44508
45050
|
const initialDeploy = currentEtag === void 0;
|
|
@@ -46724,6 +47266,7 @@ var DeployEngine = class {
|
|
|
46724
47266
|
generatedNameGuard;
|
|
46725
47267
|
liveTaskLabels = /* @__PURE__ */ new Map();
|
|
46726
47268
|
retainedOldOnReplacement = /* @__PURE__ */ new Set();
|
|
47269
|
+
replacedOldMaySurvive = /* @__PURE__ */ new Map();
|
|
46727
47270
|
recreatedUnderSameId = /* @__PURE__ */ new Set();
|
|
46728
47271
|
restoredLostChildren = /* @__PURE__ */ new Set();
|
|
46729
47272
|
updatesThatSentNothing = /* @__PURE__ */ new Set();
|
|
@@ -46800,6 +47343,7 @@ var DeployEngine = class {
|
|
|
46800
47343
|
this.outputsSourceUsable = true;
|
|
46801
47344
|
this.skippedOutputs = void 0;
|
|
46802
47345
|
this.retainedOldOnReplacement = /* @__PURE__ */ new Set();
|
|
47346
|
+
this.replacedOldMaySurvive = /* @__PURE__ */ new Map();
|
|
46803
47347
|
this.recreatedUnderSameId = /* @__PURE__ */ new Set();
|
|
46804
47348
|
this.restoredLostChildren = /* @__PURE__ */ new Set();
|
|
46805
47349
|
this.updatesThatSentNothing = /* @__PURE__ */ new Set();
|
|
@@ -47072,5 +47616,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
|
|
|
47072
47616
|
DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
|
|
47073
47617
|
|
|
47074
47618
|
//#endregion
|
|
47075
|
-
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 };
|
|
47076
|
-
//# sourceMappingURL=deploy-engine-
|
|
47619
|
+
export { S3_AUTO_DELETE_OBJECTS_TAG as $, findSilentDropProperties as $a, synthesisStatusMessage as $c, malformedExportNamesWarning as $i, findDestructiveChanges as $n, printingCorpusOf as $o, assertSendableRoleArn as $r, describeRegionValueKind as $s, recordUnderIdIsNotOwn as $t, diffSecurity as A, refuseMalformedResourceEntriesForDestroy as Aa, resolveDockerContextDirectory as Ac, AWS_NO_VALUE as Ai, nullPrototypeRecord as Al, DEFAULT_RESOURCE_TIMEOUT_MS as An, lambdaFunctionNameForMask as Ao, unchangedBehindSecretReference as Ar, recordMaskOnlyValuesIn as As, withNestedStackContext as At, readProtection as B, refuseMalformedResourcesForExport as Ba, partitionSensitiveEnv as Bc, STATE_REGION_DIVERGED as Bi, resolveBucketRegion as Bl, storedSecretNameNeedles as Bn, noEchoCoordinatesOf as Bo, ec2InstanceProtectionSite as Br, isSingleDynamicReferenceToken as Bs, awaitInFlightSibling as Bt, withApiLimit as C, refuseMalformedOrphansForDestroy as Ca, isCrossRegionRedirect as Cc, parameterTypeMayLoseSecretIdentity as Ci, derivePartitionAndUrlSuffix as Cl, exportNameSecretExposure as Cn, requireConfigObject as Co, getCurrentResourceSecrets as Cr, physicalNameCopiesOf as Cs, nestedChildStackName as Ct, findServiceTokenRefusals as D, refuseMalformedResourceAttributesForOrphan as Da, validateContainerRepoName as Dc, carriesFetchableDynamicReference as Di, defineOwnKey as Dl, collectPublishedOutputNames as Dn, describeTypeWithThrottleRetry as Do, customResourceResponseExpirationWarning as Dr, carriesSecretMask as Ds, withNestedRevertRun as Dt, deferredServiceTokenWarning as E, refuseMalformedOutputsForDestroy as Ea, validateAssetBucketName as Ec, carriesDynamicReference as Ei, processStackMessages as El, collectDeclaredOutputNames as En, templateResourceTypes as Eo, applyCustomResourceResponseExpiration as Er, splitGetAttStringForm as Es, revertedNestedRowIds as Et, recordedProtectionEvidence as F, refuseMalformedResourcePropertiesForDrift as Fa, finchSecretArgvRefusal as Fc, withSharedDrainBudget as Fi, renderAssemblyPathEscape as Fl, orphanRecordsPrintingBag as Fn, isMarkedCoordinate as Fo, deleteSkipReason as Fr, STATE_SOURCED_BASELINE_RULES as Fs, loadJournaledOrphans as Ft, deleteBudgetKey as G, repairMalformedResourceEntriesForReadOnly as Ga, runDockerStreaming as Gc, deployRefusesOrphanRowsReason as Gi, ccRoutedFinalSnapshotError as Gn, readsNoEchoSource as Go, DiffCalculator as Gr, CrossPrefixReadError as Gs, replacedDeleteFailureVerdict as Gt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as H, repairMalformedOrphanRecordsForReadOnly as Ha, redactedCause as Hc, UNREADABLE_ORPHANS_CONTAINER_ROW as Hi, ATOMIC_FINAL_SNAPSHOT_TYPES as Hn, noEchoOutputsComparison as Ho, observeThenDisableInstanceApiTermination as Hr, isLockInfoExpired as Hs, getStackRecords as Ht, recordedProtectionNote as I, refuseMalformedResourcePropertiesForExport as Ia, formatDockerLoginError as Ic, parameterInputsFor as Ii, resolveAssemblyPath as Il, secretNamePrintingBag as In, maskAtCoordinates as Io, withIndeterminateGuard as Ir, STATE_SOURCED_CROSS_GENERATION_RULES as Is, makeForeignHolderScan as It, DELETE_INDEX_WAIT_PROCEED_NOTE as J, unpreviewableOrphanRecords as Ja, stripControlChars as Jc, hasReadableOutputs as Ji, isFinalSnapshotError as Jn, carryLogOnlyValues as Jo, poisonRenderedSpellingsCollidingIn as Jr, crossPrefixDeniedWarning as Js, isJournaledOrphan as Jt, resolveDynamoDbDeleteBudgetClock as K, repairMalformedResourcePropertiesForReadOnly as Ka, warnFinchArgvExposure as Kc, displayLogicalId as Ki, createPreDeleteFinalSnapshot as Kn, valueAtCoordinate as Ko, INTRINSIC_KEYS as Kr, CrossPrefixScanCache as Ks, recordAfterRollbackUpdate as Kt, PROTECTION_PROPERTY_BY_TYPE as L, refuseMalformedResourcePropertiesForOrphan as La, getDockerCmd as Lc, passedParameterClassesOf as Li, injectAwsRegion as Ll, secretNamePrintingBags as Ln, maskReadbackAtCoordinates as Lo, isWaitAbandonedError as Lr, STATE_SOURCED_READBACK_RULES as Ls, sameJournaledOrphans as Lt, noEchoComparisonForTemplate as M, refuseMalformedResourceEntriesForImportSave as Ma, describeDockerExecFailure as Mc, isStalePlaceholderArnAttribute as Mi, absoluteAssemblyPathEscape as Ml, completedReplayEntries as Mn, DagBuilder as Mo, UNSPECIFIED_SKIP_REASON as Mr, recordNoEchoParameterFreshValue as Ms, dropFailedHint as Mt, noEchoExactEchoLeavesOf as N, refuseMalformedResourceEntriesForOrphan as Na, describeDockerFailure as Nc, refStateLookupFromResource as Ni, describeFileReadFailure as Nl, journaledOrphanPrintingBag as Nn, TemplateParser as No, deleteIndeterminateGuards as Nr, recordProvenPublicExpression as Ns, isHandledOrphan as Nt, serviceTokenBlockingReason as O, refuseMalformedResourceEntries as Oa, buildDenyExternalAccessPolicy as Oc, isNamelessDynamicReferenceError as Oi, hasOwnKey as Ol, isExportAliasCollision as On, withRetry as Oo, CloudControlProvider as Or, provenPublicValue as Os, collectNestedChildUnaddressed as Ot, noEchoParameterNamesOf as P, refuseMalformedResourcePropertiesForDestroy as Pa, dockerSpawnEnvWithSensitive as Pc, parseWebACLArn as Pi, displayAssemblyPath as Pl, maskEventTextWithBoundBags as Pn, canonicalCoordinates as Po, deleteLeftInPlace as Pr, wholeStringLeavesOf as Ps, journaledOrphanLines as Pt, ECR_AUTO_DELETE_IMAGES_TAG as Q, findActionableSilentDrops as Qa, Synthesizer as Qc, malformedDriftResourcePropertiesWarning as Qi, constructPathOf as Qn, logOnlyValueCount as Qo, assertFlagRoleArn as Qr, acceptedCreateOnlyDropsOf as Qs, recheckFailedPlan as Qt, isProtectionValueActive as R, refuseMalformedResourcesForDeploy as Ra, isDockerClientEnvKey as Rc, declaresNoEcho as Ri, injectedAwsRegionValue as Rl, secretNamedRecordNeedles as Rn, maskWholeValue as Ro, markWaitAbandoned as Rr, TEMPLATE_SOURCED_RULES as Rs, replayFailedOperations as Rt, lookupEachName as S, refuseMalformedOrphans as Sa, getBootstrapMarkerKey as Sc, isUnboundTemplateParameter as Si, canonicalizeRegion as Sl, exportNameNoEchoParameters as Sn, requireConfigArray as So, isCustomResourceType as Sr, recoverMaskedOutput as Ss, getNestedRevertRun as St, recordRetainedForReadoption as T, refuseMalformedOutputs as Ta, readBootstrapMarkerBody as Tc, isImpossibleEmptyStoredAttribute as Ti, StageLoadError as Tl, noEchoParameterValueSeed as Tn, prefetchCreateOnlyPropertyPaths as To, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Tr, recordPhysicalNameCopy as Ts, revertNestedChildFromJournal as Tt, beginDeleteWait as U, repairMalformedOrphansForReadOnly as Ua, redactedDockerCause as Uc, UNREADABLE_RESOURCES_MAP_ROW as Ui, PRE_DELETE_SNAPSHOT_TYPES as Un, passedNoEchoParametersOf as Uo, reDisableInstanceApiTermination as Ur, S3StateBackend as Us, withStackRecords as Ut, DynamoDBGlobalTableProvider as V, refuseMalformedState as Va, redactDockerArgvValues as Vc, STATE_RESOURCES_MALFORMED as Vi, extractDeploymentEventError as Vn, noEchoLeavesOf as Vo, isTerminationProtectionPropagationError as Vr, LockManager as Vs, destroyStackRecordsView as Vt, compensateRemovedDeletionProtection as W, repairMalformedOutputsForReadOnly as Wa, runDockerForeground as Wc, accountArgs as Wi, buildFinalSnapshotIdentifier as Wn, readbackPathFor as Wo, reEnableInstanceApiTermination as Wr, rebuildClientForBucketRegion as Ws, removeProtectionTypeList as Wt, deleteTableWithIndexBusyRetry as X, unreadableResourceEntries as Xa, AssetManifestLoader as Xc, isReadableOrphanRecord as Xi, unsupportedFinalSnapshotError as Xn, hasMaskableValues as Xo, refuseUnreadableCdkCrossAccountRefs as Xr, isNotImplemented as Xs, planFailedOps as Xt, INDEX_SETTLE_POLL_INTERVAL_MS as Y, unreadableOrphanRecords as Ya, stripForDisplay as Yc, hasReadableResources as Yi, refusesFinalSnapshot as Yn, createUnionSecretMasker as Yo, producerLookupOver as Yr, isAccessDenied$1 as Ys, isReplacementOrphan as Yt, waitForIndexesSettled as Z, withheldAccountClause as Za, getDockerImageBySourceHash as Zc, isReadableResourceEntry as Zi, maskingRetryLogger as Zn, literalSplitDelimitersOf as Zo, applyRoleArnIfSet as Zr, splitImportedOps as Zs, planRollback as Zt, keptWholeReasonText as _, previewableOrphanRecords as _a, rewriteTemplateAssetReferences as _c, classifyRecordedSecretRegion as _i, uploadCfnTemplate as _l, exportAliasCollisionScrubWarning as _n, configBooleanRefusal as _o, ccBrokenReason as _r, isUncertifiedBaselineMaskPosition as _s, planOrphanAdoption as _t, inheritedProvenanceForChildDiff as a, malformedOrphanRecordsWarning as aa, importableOutputs as ac, callerEnvCredentials as ai, resolveCaptureObservedState as al, getCurrentProducerRegions as an, shownType as ao, acquireIdempotencyToken as ar, errorCauseChain as as, createReadOnlyAttributeHealerFactory as at, chunks as b, refuseMalformedOrphanRecords as ba, assertAssetBucketRegion as bc, regionLessSecretName as bi, expectedOwnerParam as bl, secretSafeKeyDisplay as bn, readConfigString as bo, TemplateNoEchoReresolver as br, inheritNestedStackParameterAssociations as bs, displacedPhysicalIdShown as bt, isAbsoluteAssetPath as c, malformedOrphansWarning as ca, orphansCarriedFrom as cc, keepHeldTokenProvenance as ci, resolveStateBucketWithDefaultAndSource as cl, isRedactedRecordedValue as cn, isStatefulRecreateTargetSync as co, planTagDiff as cr, markSameGenerationBag as cs, gray as ct, templateIdentity as d, malformedRenderedContainersWarning as da, isSensitiveAttributeName as dc, recordedReferenceRegions as di, warnDeprecatedNoPrefixCliFlag as dl, updatePartialMessage as dn, coerceWarmThroughput as do, tagMapAsList as dr, redactSecretsForState as ds, yellow as dt, malformedExportSourceWarning as ea, exportNamesCarriedFrom as ec, explicitRoleArnOrThrow as ei, getDefaultStateBucketName as el, replacementNeverSwapped as en, unwrittenCreateOnlyReplacement as eo, formatDestructiveChange as er, recordLogOnlyParameterValue as es, hasCdkAutoDeleteTag as et, conditionFingerprint as f, malformedResourceEntriesWarning as fa, stringifyValue as fc, s3BucketArn as fi, ssmResolvedValueType as fl, updatePartialReason as fn, isWarmThroughputDecrease as fo, tagPlanWarning as fr, scrubResourceRecord as fs, computeParameterTaint as ft, isSecretBearingReferenceString as g, malformedStateRefusalMessage as ga, loadPublishableAssetManifest as gc, s3BucketWebsiteUrl as gi, findLargeInlineResources as gl, displayTextOrWithheld as gn, coerceCfnInteger as go, ProviderRegistry as gr, dynamicReferenceTokens as gs, makeSiblingClaimReader as gt, readRecordedConditionVerdicts as h, malformedScrubResourceEntriesRefusalMessage as ha, createAssetRedirectResolver as hc, s3BucketRegionalDomainName as hi, MIGRATE_TMP_PREFIX as hl, WITHHELD_NAME_DISPLAY as hn, coerceCfnBoolean as ho, CC_BROKEN_REASON as hr, DYNAMIC_REFERENCE_TOKEN_SCAN as hs, resourcesNamingDeclaredParameter as ht, crossStackOutputProvenanceSource as i, malformedOrphanRecordsRefusalMessage as ia, importableOutputKeys as ic, applyCallerIdentityCredentials as ii, resolveAutoAssetStorage as il, findNestedStackTypeChanges as in, findReplacedReadersOfRecreateTargets as io, withCreateTokenLedger as ir, createSecretMasker as is, formatResourceLine as it, noEchoAttributeNamesOf as j, refuseMalformedResourceEntriesForImport as ja, describeDockerCapturedOutput as jc, cfnRefValueFromPhysicalId as ji, ownValue as jl, DEFAULT_RESOURCE_WARN_AFTER_MS as jn, sameLambdaFunctionAddress as jo, RollbackInlinePolicyWriters as jr, recordNoEchoAttributeValues as js, deleteJournaledOrphans as jt, withResourceDeadline as k, refuseMalformedResourceEntriesForDeploy as ka, buildDockerImage as kc, keepsSecretReferenceToken as ki, hasPlainPrototype$1 as kl, bindingSkippedOutputs as kn, canonicalLambdaFunctionName as ko, slowCcOperationTimeoutMs as kr, recordMaskOnlyValue as ks, getCurrentNestedStackContext as kt, listNestedTemplateRows as l, malformedOutputsRefusalMessage as la, shouldRetainResource as lc, outputReferenceProvenanceOf as li, resolveUseCdkBootstrapAssets as ll, redactedDeleteAddressFields as ln, renderStatefulReason as lo, readTagList as lr, recordReferenceProvenanceEntry as ls, green as lt, parentSuppliedValues as m, malformedResourcesWarning as ma, buildAssetRedirectMap as mc, s3BucketDualStackDomainName as mi, CFN_TEMPLATE_URL_LIMIT as ml, DeploymentEventsStore as mn, toFiniteNumber as mo, stringifyIfAssigned as mr, withoutPhysicalNameCopies as ms, reachableDivergentParameters as mt, IMPLICIT_DELETE_DEPENDENCIES as n, malformedLocalResourceEntriesWarning as na, hasReasonlessBaselineRefusal as nc, sendableAssumeRoleCommand as ni, loadCdkJson as nl, seedsDeleteFirstGuard as nn, NO_CC_HANDLERS_REASON as no, ledgerForStack as nr, shareLogOnlyValues as ns, getPriorAttempts as nt, childTemplateLoader as o, malformedOrphanRowsKeptWarning as oa, isReadableBag as oc, envCredentialsAreAssumedRole as oi, resolveSkipPrefix as ol, inheritProducerRegions as on, MULTI_REGION_RECREATE_BLOCKED_TYPES as oo, DBPROXY_TAGS_WHAT as or, maskSecretsInError as os, bold as ot, conditionInputsFrom as p, malformedResourcePropertiesWarning as pa, WorkGraph as pc, s3BucketDomainName as pi, CFN_TEMPLATE_BODY_LIMIT as pl, DeploymentEventsReader as pn, toCfnInteger as po, definedAttributes as pr, withPhysicalNameCopies as ps, namesAnyDeclaredParameter as pt, resolveDynamoDbDeleteBudgetMs as q, repairMalformedResourcesForReadOnly as qa, escapeRegExp$3 as qc, hasReadableOrphans as qi, effectiveDeletionPolicy as qn, liveMatchesUnresolvedTokenFrame as qo, IntrinsicFunctionResolver as qr, applyCrossPrefixScan as qs, demoteSupersededOrphans as qt, computeImplicitDeleteEdges as r, malformedLocalResourcesWarning as ra, hasUnverifiableParameterRefusal as rc, AWS_CREDENTIAL_ENV_KEYS as ri, resolveApp as rl, orphanDeleteNeedsIdentity as rn, hasNoCloudControlHandlers as ro, reserveStackCreateToken as rr, unionOfSecretBags as rs, markRefusedBeforeApplying as rt, findNestedTemplateTreeDefect as s, malformedOrphansRefusalMessage as sa, orphansAfterRollback as sc, isSettledInstanceState as si, resolveStateBucketWithDefault as sl, REDACTED_DELETE_ADDRESS_SKIP_REASON as sn, isStatefulRecreateTargetForReplace as so, DBPROXY_TAG_OPTIONS as sr, maskSecretsInText as ss, cyan as st, DeployEngine as t, malformedLocalOutputsWarning as ta, hasReadableExportSet as tc, isIamRoleArn as ti, getLegacyStateBucketName as tl, resolveReplacementOldType as tn, withoutSilentDropProperties as to, earliestDefined as tr, recordLogOnlyValue as ts, isTruthyCfnBoolean as tt, renderNestedTemplateTreeDefect as u, malformedOutputsWarning as ua, AssetPublisher as uc, recordedOutputReferenceRegions as ui, stateBucketExistenceConfirmed as ul, redactedDeleteAddressSkip as un, WARM_THROUGHPUT_MEMBERS as uo, refuseMalformedDesiredTags as ur, snapshotPassProvenance as us, red as ut, mergeNoChangeOutputs as v, refuseDivergentRecordRegionForDestroy as va, AssetModeResolver as vc, classifyReplaySecretRegion as vi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as vl, secretBearing as vn, configIntegerRefusal as vo, isCustomResource as vr, pathCrossesDottedKey as vs, NESTED_PENDING_PARENT_REASON as vt, keptForReadoption as w, refuseMalformedOrphansForOrphan as wa, parseBootstrapMarker as wc, getAccountInfo as wi, AssemblyReader as wl, isWholeDynamicReferenceValue as wn, requireConfigString as wo, withPrintingSecrets as wr, recordAttributeIdCopy as ws, recordDisplacedSkips as wt, isAccessDeniedError as x, refuseMalformedOrphanRecordsForDestroy as xa, ensureAssetStorage as xc, coerceParameterTypedValue as xi, PARTITION_TABLE as xl, carriedExportAliasExposure as xn, replayWarn as xo, readsNoEchoDeleteValues as xr, recordNestedStackParameterExpressions as xs, dropSettledNestedJournals as xt, makeCanonicalizePropertiesFn as y, refuseMalformedNestedChildOutputs as ya, BOOTSTRAP_MARKER_PREFIX as yc, producerRegionsFromState as yi, decodeListingKey as yl, secretBearingStateKeyWarning as yn, configStringRefusal as yo, wouldReturnToSdkProvider as yr, identityKeyFor as ys, displacedOpClause as yt, perType as z, refuseMalformedResourcesForDestroy as za, isMalformedEnvKey as zc, JSON_LISTING_HOLE_VALUE as zi, clearBucketRegionCache as zl, stateSecretNameNeedles as zn, maskedLeafCoordinatesOf as zo, disableInstanceApiTermination as zr, WHOLE_DYNAMIC_REFERENCE_PATTERN as zs, replayRollback as zt };
|
|
47620
|
+
//# sourceMappingURL=deploy-engine-C-4ho8TJ.js.map
|