@go-to-k/cdkd 0.299.8 → 0.300.1
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-ebjf5E8o.js → asg-provider-BS5i71bK.js} +3 -3
- package/dist/{asg-provider-ebjf5E8o.js.map → asg-provider-BS5i71bK.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-BU3iY59A.js → deploy-engine-BK4gG_5A.js} +734 -80
- package/dist/deploy-engine-BK4gG_5A.js.map +1 -0
- package/dist/{iam-policy-targets-dAY3-gXJ.js → iam-policy-targets-DAs3w7QW.js} +47 -6
- package/dist/{iam-policy-targets-dAY3-gXJ.js.map → iam-policy-targets-DAs3w7QW.js.map} +1 -1
- package/dist/{iam-role-provider-C8O3q2ua.js → iam-role-provider-SmvPHPLC.js} +16 -11
- package/dist/iam-role-provider-SmvPHPLC.js.map +1 -0
- 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-CuJF3t-Q.js → neptune-provider-CqZ1FaqT.js} +3 -3
- package/dist/{neptune-provider-CuJF3t-Q.js.map → neptune-provider-CqZ1FaqT.js.map} +1 -1
- package/dist/{program-C87Q8YFK.js → program-DVPHKsxv.js} +668 -512
- package/dist/program-DVPHKsxv.js.map +1 -0
- package/dist/{provider-classes-DmohfhIq.js → provider-classes-CDzT2xg0.js} +1433 -158
- package/dist/provider-classes-CDzT2xg0.js.map +1 -0
- package/dist/{rds-provider-Br3hPyHP.js → rds-provider-DraxDuQq.js} +13 -7
- package/dist/rds-provider-DraxDuQq.js.map +1 -0
- package/dist/{version-BtTEjOpj.js → version-DTSDiQcV.js} +2 -2
- package/dist/{version-BtTEjOpj.js.map → version-DTSDiQcV.js.map} +1 -1
- package/package.json +3 -1
- package/dist/aws-clients-Bj7qH5Ph.js.map +0 -1
- package/dist/deploy-engine-BU3iY59A.js.map +0 -1
- package/dist/iam-role-provider-C8O3q2ua.js.map +0 -1
- package/dist/program-C87Q8YFK.js.map +0 -1
- package/dist/provider-classes-DmohfhIq.js.map +0 -1
- package/dist/rds-provider-Br3hPyHP.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
|
|
3
|
+
import { $ as protectedReplacementAdvice, $n as formatRetryClassificationSignals, $t as ambientCredentialConfig, A as isQuotableImportValue, An as SHELL_ACTIVE, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bn as shellBoundedDisplay, Bt as formatLockOperation, Cn as StateError, Ct as RETRY_AUXILIARY_OWNER, Dn as normalizeAwsError, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as isInertUnquoted, Ft as UNREPRODUCIBLE_LOCK_CLAUSE, G as runDeleteAttempt, Gn as isUpdateUnsupportedError, Gt as DEFAULT_STATE_PREFIX, H as observeThenDisableProtection, Hn as withheldTargetClause, Ht as recoveryCommandFlags, In as pasteableCommand, It as buildForceUnlockCommand, J as DELETION_PROTECTION_DOC_POINTER, Jn as isNameCooldownError, Kn as hasReplayMayCollide, Kt as injectiveKey, L as ProtectionFlipRegistry, Ln as physicalIdShownBesideCommand, M as quotedRemedyLogicalId, Mn as UNSHOWABLE_VALUE, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as commandHole, Ot as hasCreatedBeforeFailure, Pt as replayMadeAnotherResource, Q as pasteableAwsCommand, Qn as markReplayMayCollide, Qt as ambientClientDefaults, R as compensateProtectionFlip, Rn as plainOrDescribed, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, U as protectionFlipKey, Ut as sanitizeRecoveryValue, Vn as shellQuote, Vt as formatLockOwner, Wt as CUSTOM_RESOURCE_RESPONSE_PREFIX, Xn as isReplayedNameCollisionFrom, Yn as isRecreateRetryableError, Yt as producerRecordKey, Zt as withPasteableAwsProfile, _t as createMaskedLogSinks, ar as retryClassificationText, at as startInterruptWatch, bn as ResourceUpdateNotSupportedError, bt as maskDeep, cr as isThrottlingError, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dr as wrapMaskedAwsError, en as clientDefaultsFor, er as isAmbiguousCcHandlerErrorCode, f as removalWarning, ft as logicalIdShown, gt as stateOrphanRecordRemedy, hn as MalformedProducerRecordRefusalError, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CdkdError, ir as isTransientServerError, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jn as SHELL_ACTIVE_WHY, jt as markAuxiliaryFailure, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, ln as DynamicReferenceRegionAmbiguousError, lr as markNonRetryable, m as withoutInjectedRemovals, mn as MacroExpansionError, mt as resourceTypeShown, nn as AccountIdUnavailableError, nr as isIamPropagationError, on as CrossAccountSecretRefusalError, ot as ElapsedBudgetRegistry, pn as LockError, qn as isNameCollisionErrorFrom, rn as AssetError, rr as isRetryableTransientError, sn as DependencyError, sr as isMarkedNonRetryable, st as monotonicNowMs, tn as credentialFingerprint, tr as isAmbiguousOutcomeError, un as IntrinsicResolutionRefusalError, ur as markRedactedCause, ut as compositeIdSeparatorRefusal, vn as ProvisioningError, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wn as SynthesisError, wt as carryCreatedBeforeFailure, xt as maskerOrIdentity, yn as ResourceTimeoutError, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as quotedOrDescribed, zt as formatLockExpiry } from "./iam-policy-targets-DAs3w7QW.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-DTSDiQcV.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"];
|
|
@@ -8050,9 +8051,16 @@ function parameterReadsFor(childSecrets, parentSecrets) {
|
|
|
8050
8051
|
}
|
|
8051
8052
|
return reads;
|
|
8052
8053
|
}
|
|
8053
|
-
function recordInheritedParameterValue(childSecrets, parentSecrets, parameterName, value) {
|
|
8054
|
+
function recordInheritedParameterValue(childSecrets, parentSecrets, parameterName, value, declared) {
|
|
8054
8055
|
const reads = parameterReadsFor(childSecrets, parentSecrets);
|
|
8055
8056
|
if (reads === void 0) return;
|
|
8057
|
+
if (declared !== void 0) {
|
|
8058
|
+
if (reads.declared === void 0) reads.declared = declared;
|
|
8059
|
+
else if (reads.declared.size !== declared.size || [...declared].some((name) => !reads.declared.has(name))) {
|
|
8060
|
+
inheritedParameterReads.set(childSecrets, POISONED_PARAMETER_READS);
|
|
8061
|
+
return;
|
|
8062
|
+
}
|
|
8063
|
+
}
|
|
8056
8064
|
if (reads.values.has(parameterName)) {
|
|
8057
8065
|
if (!deepEqualJsonValue(reads.values.get(parameterName), value)) inheritedParameterReads.set(childSecrets, POISONED_PARAMETER_READS);
|
|
8058
8066
|
return;
|
|
@@ -8078,16 +8086,53 @@ function positionByInheritedParameter(bag, source, secrets) {
|
|
|
8078
8086
|
if (!deepEqualJsonValue(redactSecretsForState(answer, secrets), answer)) return void 0;
|
|
8079
8087
|
return answer;
|
|
8080
8088
|
}
|
|
8081
|
-
const REREAD_TRIGGERS = /* @__PURE__ */ new Set([
|
|
8089
|
+
const REREAD_TRIGGERS = /* @__PURE__ */ new Set([
|
|
8090
|
+
"Fn::Select",
|
|
8091
|
+
"Fn::Split",
|
|
8092
|
+
"Fn::If"
|
|
8093
|
+
]);
|
|
8082
8094
|
const MAX_REREAD_DEPTH = 16;
|
|
8083
|
-
|
|
8095
|
+
const MAX_REREAD_CONDITIONS = 4;
|
|
8096
|
+
const REREAD_NO_VALUE = Symbol("cdkd.reread.no-value");
|
|
8097
|
+
function splitOutsideDynamicReferences(text, delimiter, standsForSecret) {
|
|
8098
|
+
if (delimiter === "") return text.split(delimiter);
|
|
8099
|
+
const spans = dynamicReferenceSpans(text).filter((span) => {
|
|
8100
|
+
const token = text.slice(span.start, span.end);
|
|
8101
|
+
return spanNamesResolvableService(token) && standsForSecret(token);
|
|
8102
|
+
});
|
|
8103
|
+
if (spans.length === 0) return text.split(delimiter);
|
|
8104
|
+
const pieces = [];
|
|
8105
|
+
let cursor = 0;
|
|
8106
|
+
let from = 0;
|
|
8107
|
+
for (;;) {
|
|
8108
|
+
const at = text.indexOf(delimiter, from);
|
|
8109
|
+
if (at === -1) break;
|
|
8110
|
+
const end = at + delimiter.length;
|
|
8111
|
+
const token = spans.find((span) => span.start < end && at < span.end);
|
|
8112
|
+
if (token !== void 0) {
|
|
8113
|
+
from = token.end;
|
|
8114
|
+
continue;
|
|
8115
|
+
}
|
|
8116
|
+
pieces.push(text.slice(cursor, at));
|
|
8117
|
+
cursor = end;
|
|
8118
|
+
from = end;
|
|
8119
|
+
}
|
|
8120
|
+
pieces.push(text.slice(cursor));
|
|
8121
|
+
return pieces;
|
|
8122
|
+
}
|
|
8123
|
+
function standsForInheritedSecret(parentSecrets, token) {
|
|
8124
|
+
return parentSecrets !== void 0 && resolvedPlaintextOf(parentSecrets, token) !== void 0;
|
|
8125
|
+
}
|
|
8126
|
+
const plainSplit = (text, delimiter) => text.split(delimiter);
|
|
8127
|
+
function evaluatePureRead(node, bind, split, choose, depth = 0) {
|
|
8084
8128
|
if (depth > MAX_REREAD_DEPTH) return void 0;
|
|
8129
|
+
const evaluate = (child) => evaluatePureRead(child, bind, split, choose, depth + 1);
|
|
8085
8130
|
if (typeof node === "string") return node.includes("{{resolve:") ? void 0 : { value: node };
|
|
8086
8131
|
if (Array.isArray(node)) {
|
|
8087
8132
|
const out = [];
|
|
8088
8133
|
for (const element of node) {
|
|
8089
|
-
const evaluated =
|
|
8090
|
-
if (evaluated === void 0) return void 0;
|
|
8134
|
+
const evaluated = evaluate(element);
|
|
8135
|
+
if (evaluated === void 0 || evaluated.value === REREAD_NO_VALUE) return void 0;
|
|
8091
8136
|
out.push(evaluated.value);
|
|
8092
8137
|
}
|
|
8093
8138
|
return { value: out };
|
|
@@ -8097,30 +8142,77 @@ function evaluatePureRead(node, bind, depth = 0) {
|
|
|
8097
8142
|
if (keys.length !== 1) return void 0;
|
|
8098
8143
|
const key = keys[0];
|
|
8099
8144
|
const args = node[key];
|
|
8100
|
-
if (key === "Ref")
|
|
8145
|
+
if (key === "Ref") {
|
|
8146
|
+
if (args === "AWS::NoValue") return { value: REREAD_NO_VALUE };
|
|
8147
|
+
return typeof args === "string" ? bind(args) : void 0;
|
|
8148
|
+
}
|
|
8149
|
+
if (key === "Fn::If") {
|
|
8150
|
+
if (!Array.isArray(args) || args.length !== 3 || typeof args[0] !== "string") return void 0;
|
|
8151
|
+
return evaluate(choose(args[0]) ? args[1] : args[2]);
|
|
8152
|
+
}
|
|
8153
|
+
if (key === "Fn::Sub") return evaluatePureSub(args, bind, evaluate);
|
|
8101
8154
|
if (!Array.isArray(args) || args.length !== 2) return void 0;
|
|
8102
8155
|
if (key === "Fn::Select") {
|
|
8103
8156
|
const index = args[0];
|
|
8104
8157
|
const position = typeof index === "number" ? index : typeof index === "string" && /^(0|[1-9][0-9]*)$/.test(index) ? Number(index) : void 0;
|
|
8105
8158
|
if (position === void 0 || !Number.isSafeInteger(position) || position < 0) return void 0;
|
|
8106
|
-
const list =
|
|
8159
|
+
const list = evaluate(args[1]);
|
|
8107
8160
|
if (list === void 0 || !Array.isArray(list.value) || position >= list.value.length) return;
|
|
8108
8161
|
return { value: list.value[position] };
|
|
8109
8162
|
}
|
|
8110
8163
|
const delimiter = args[0];
|
|
8111
8164
|
if (typeof delimiter !== "string") return void 0;
|
|
8112
8165
|
if (key === "Fn::Split") {
|
|
8113
|
-
const value =
|
|
8166
|
+
const value = evaluate(args[1]);
|
|
8114
8167
|
if (value === void 0 || typeof value.value !== "string") return void 0;
|
|
8115
|
-
return { value: value.value
|
|
8168
|
+
return { value: split(value.value, delimiter) };
|
|
8116
8169
|
}
|
|
8117
8170
|
if (key === "Fn::Join") {
|
|
8118
|
-
const parts =
|
|
8171
|
+
const parts = evaluate(args[1]);
|
|
8119
8172
|
if (parts === void 0 || !Array.isArray(parts.value)) return void 0;
|
|
8120
8173
|
if (!parts.value.every((part) => typeof part === "string")) return void 0;
|
|
8121
8174
|
return { value: parts.value.join(delimiter) };
|
|
8122
8175
|
}
|
|
8123
8176
|
}
|
|
8177
|
+
function evaluatePureSub(args, bind, evaluate) {
|
|
8178
|
+
const [text, variables] = typeof args === "string" ? [args, {}] : Array.isArray(args) && args.length === 2 ? [args[0], args[1]] : [void 0, void 0];
|
|
8179
|
+
if (typeof text !== "string" || text.includes("{{resolve:") || !isPlainObject$7(variables)) return;
|
|
8180
|
+
const bound = /* @__PURE__ */ new Map();
|
|
8181
|
+
for (const [name, variable] of Object.entries(variables)) {
|
|
8182
|
+
const evaluated = evaluate(variable);
|
|
8183
|
+
if (evaluated === void 0 || typeof evaluated.value !== "string") return void 0;
|
|
8184
|
+
bound.set(name, evaluated.value);
|
|
8185
|
+
}
|
|
8186
|
+
let out = "";
|
|
8187
|
+
let cursor = 0;
|
|
8188
|
+
for (const match of text.matchAll(/\$\{(!)?([^}]*)\}/g)) {
|
|
8189
|
+
const name = match[2] ?? "";
|
|
8190
|
+
let replacement;
|
|
8191
|
+
if (match[1] === "!") replacement = `\${${name}}`;
|
|
8192
|
+
else if (name === "") replacement = match[0];
|
|
8193
|
+
else if (bound.has(name)) replacement = bound.get(name);
|
|
8194
|
+
else {
|
|
8195
|
+
if (name.startsWith("AWS::") || name.includes(".")) return void 0;
|
|
8196
|
+
const value = bind(name);
|
|
8197
|
+
if (value === void 0 || typeof value.value !== "string") return void 0;
|
|
8198
|
+
replacement = value.value;
|
|
8199
|
+
}
|
|
8200
|
+
out += text.slice(cursor, match.index) + replacement;
|
|
8201
|
+
cursor = match.index + match[0].length;
|
|
8202
|
+
}
|
|
8203
|
+
return { value: out + text.slice(cursor) };
|
|
8204
|
+
}
|
|
8205
|
+
function collectRereadConditions(node, names, depth = 0) {
|
|
8206
|
+
if (depth > MAX_REREAD_DEPTH) return false;
|
|
8207
|
+
if (Array.isArray(node)) return node.every((element) => collectRereadConditions(element, names, depth + 1));
|
|
8208
|
+
if (!isPlainObject$7(node)) return true;
|
|
8209
|
+
if (Object.hasOwn(node, "Fn::If")) {
|
|
8210
|
+
const args = node["Fn::If"];
|
|
8211
|
+
if (!Array.isArray(args) || typeof args[0] !== "string") return false;
|
|
8212
|
+
names.add(args[0]);
|
|
8213
|
+
}
|
|
8214
|
+
return Object.values(node).every((child) => collectRereadConditions(child, names, depth + 1));
|
|
8215
|
+
}
|
|
8124
8216
|
function holdsRereadTrigger(node, depth = 0) {
|
|
8125
8217
|
if (depth > MAX_REREAD_DEPTH) return false;
|
|
8126
8218
|
if (Array.isArray(node)) return node.some((element) => holdsRereadTrigger(element, depth + 1));
|
|
@@ -8135,29 +8227,61 @@ function rendersReadTo(spelling, parentSecrets, value) {
|
|
|
8135
8227
|
if (Array.isArray(spelling) && Array.isArray(value) && spelling.length === value.length) return spelling.every((element, i) => rendersReadTo(element, parentSecrets, value[i]));
|
|
8136
8228
|
return false;
|
|
8137
8229
|
}
|
|
8138
|
-
|
|
8230
|
+
const REREAD_UNBOUND = Symbol("cdkd.reread.unbound");
|
|
8231
|
+
function rereadAssignments(source, bind, parentSecrets, untakenWhenUnbound = () => false) {
|
|
8139
8232
|
if (!holdsRereadTrigger(source)) return void 0;
|
|
8140
|
-
const
|
|
8141
|
-
if (
|
|
8142
|
-
|
|
8233
|
+
const conditions = /* @__PURE__ */ new Set();
|
|
8234
|
+
if (!collectRereadConditions(source, conditions)) return void 0;
|
|
8235
|
+
if (conditions.size > MAX_REREAD_CONDITIONS) return void 0;
|
|
8236
|
+
const names = [...conditions];
|
|
8237
|
+
const redactedBind = (name) => {
|
|
8143
8238
|
const bound = bind(name);
|
|
8144
8239
|
return bound && { value: redactInheritedParameterValue(parentSecrets, name, bound.value) };
|
|
8145
|
-
});
|
|
8146
|
-
if (redacted === void 0) return void 0;
|
|
8147
|
-
if (!rendersReadTo(redacted.value, parentSecrets, resolved.value)) return void 0;
|
|
8148
|
-
return {
|
|
8149
|
-
resolved: resolved.value,
|
|
8150
|
-
redacted: redacted.value
|
|
8151
8240
|
};
|
|
8241
|
+
const tokenSplit = (text, delimiter) => splitOutsideDynamicReferences(text, delimiter, (token) => standsForInheritedSecret(parentSecrets, token));
|
|
8242
|
+
const out = [];
|
|
8243
|
+
for (let assignment = 0; assignment < 2 ** names.length; assignment++) {
|
|
8244
|
+
const choose = (condition) => Math.floor(assignment / 2 ** names.indexOf(condition)) % 2 === 1;
|
|
8245
|
+
let unbound = false;
|
|
8246
|
+
const tracked = (name) => {
|
|
8247
|
+
const bound = bind(name);
|
|
8248
|
+
if (bound === void 0 && untakenWhenUnbound(name)) unbound = true;
|
|
8249
|
+
return bound;
|
|
8250
|
+
};
|
|
8251
|
+
const resolved = evaluatePureRead(source, tracked, plainSplit, choose);
|
|
8252
|
+
const redacted = resolved && evaluatePureRead(source, redactedBind, tokenSplit, choose);
|
|
8253
|
+
if (unbound) out.push(REREAD_UNBOUND);
|
|
8254
|
+
else if (resolved === void 0 || redacted === void 0) out.push(void 0);
|
|
8255
|
+
else if (resolved.value === REREAD_NO_VALUE || redacted.value === REREAD_NO_VALUE) out.push(resolved.value === redacted.value ? REREAD_NO_VALUE : void 0);
|
|
8256
|
+
else if (!rendersReadTo(redacted.value, parentSecrets, resolved.value)) out.push(void 0);
|
|
8257
|
+
else out.push({
|
|
8258
|
+
resolved: resolved.value,
|
|
8259
|
+
redacted: redacted.value
|
|
8260
|
+
});
|
|
8261
|
+
}
|
|
8262
|
+
return out;
|
|
8263
|
+
}
|
|
8264
|
+
function rereadParameterExpression(source, bind, parentSecrets) {
|
|
8265
|
+
const assignments = rereadAssignments(source, bind, parentSecrets);
|
|
8266
|
+
if (assignments === void 0 || assignments.includes(void 0) || assignments.includes(REREAD_UNBOUND)) return;
|
|
8267
|
+
const rereads = assignments.filter((entry) => entry !== void 0 && entry !== REREAD_NO_VALUE && entry !== REREAD_UNBOUND);
|
|
8268
|
+
if (rereads.length === 0 || ambiguousRereads(rereads)) return void 0;
|
|
8269
|
+
return rereads[0];
|
|
8270
|
+
}
|
|
8271
|
+
function ambiguousRereads(rereads) {
|
|
8272
|
+
return rereads.some((a, i) => rereads.slice(i + 1).some((b) => deepEqualJsonValue(a.resolved, b.resolved) && !deepEqualJsonValue(a.redacted, b.redacted)));
|
|
8152
8273
|
}
|
|
8153
8274
|
function positionByParameterReread(bag, source, secrets) {
|
|
8154
8275
|
const reads = inheritedParameterReads.get(secrets);
|
|
8155
8276
|
if (reads === void 0 || typeof reads === "symbol") return void 0;
|
|
8156
8277
|
if (typeof bag !== "string" && !Array.isArray(bag)) return void 0;
|
|
8157
|
-
const
|
|
8158
|
-
|
|
8278
|
+
const declared = reads.declared;
|
|
8279
|
+
const assignments = rereadAssignments(source, (name) => reads.values.has(name) ? { value: reads.values.get(name) } : void 0, reads.parent, (name) => declared?.has(name) === true);
|
|
8280
|
+
if (assignments === void 0 || assignments.includes(void 0)) return void 0;
|
|
8281
|
+
const matching = assignments.filter((entry) => entry !== void 0 && entry !== REREAD_NO_VALUE && entry !== REREAD_UNBOUND && deepEqualJsonValue(entry.resolved, bag));
|
|
8282
|
+
if (matching.length === 0 || ambiguousRereads(matching)) return void 0;
|
|
8159
8283
|
if (carriesChildOnlyPlaintext(bag, secrets, reads.parent)) return void 0;
|
|
8160
|
-
const answer =
|
|
8284
|
+
const answer = matching[0].redacted;
|
|
8161
8285
|
if (!deepEqualJsonValue(redactSecretsForState(answer, secrets), answer)) return void 0;
|
|
8162
8286
|
return answer;
|
|
8163
8287
|
}
|
|
@@ -8394,6 +8518,78 @@ function positionListByCrossStackSource(bag, source, secrets) {
|
|
|
8394
8518
|
|
|
8395
8519
|
//#endregion
|
|
8396
8520
|
//#region src/deployment/secret-redaction/redact-path.ts
|
|
8521
|
+
const NEVER_DROPPING_INTRINSICS = /* @__PURE__ */ new Set([
|
|
8522
|
+
"Fn::Join",
|
|
8523
|
+
"Fn::Sub",
|
|
8524
|
+
"Fn::Select",
|
|
8525
|
+
"Fn::Split",
|
|
8526
|
+
"Fn::GetAtt"
|
|
8527
|
+
]);
|
|
8528
|
+
function arrayElementDrop(element, depth = 0) {
|
|
8529
|
+
if (depth > 16) return "unknown";
|
|
8530
|
+
if (!isPlainObject$7(element)) return "never";
|
|
8531
|
+
if (Object.hasOwn(element, "Ref")) return element["Ref"] === "AWS::NoValue" ? "always" : "never";
|
|
8532
|
+
const keys = Object.keys(element);
|
|
8533
|
+
if (keys.filter((key) => key.startsWith("Fn::") || key === "Condition").length === 0) return "never";
|
|
8534
|
+
if (keys.length !== 1) return "unknown";
|
|
8535
|
+
if (NEVER_DROPPING_INTRINSICS.has(keys[0])) return "never";
|
|
8536
|
+
if (keys[0] !== "Fn::If") return "unknown";
|
|
8537
|
+
const args = element["Fn::If"];
|
|
8538
|
+
if (!Array.isArray(args) || args.length !== 3) return "unknown";
|
|
8539
|
+
const branches = [arrayElementDrop(args[1], depth + 1), arrayElementDrop(args[2], depth + 1)];
|
|
8540
|
+
if (branches.includes("unknown")) return "unknown";
|
|
8541
|
+
if (branches.every((branch) => branch === "never")) return "never";
|
|
8542
|
+
if (branches.every((branch) => branch === "always")) return "always";
|
|
8543
|
+
return "maybe";
|
|
8544
|
+
}
|
|
8545
|
+
function sourceElementsKeptFor(source, bagLength) {
|
|
8546
|
+
const drops = source.map((element) => arrayElementDrop(element));
|
|
8547
|
+
if (drops.includes("unknown")) return void 0;
|
|
8548
|
+
const always = drops.filter((drop) => drop === "always").length;
|
|
8549
|
+
const maybe = drops.filter((drop) => drop === "maybe").length;
|
|
8550
|
+
const dropped = source.length - bagLength;
|
|
8551
|
+
let dropMaybe;
|
|
8552
|
+
if (dropped === always) dropMaybe = false;
|
|
8553
|
+
else if (dropped === always + maybe) dropMaybe = true;
|
|
8554
|
+
else return void 0;
|
|
8555
|
+
return source.filter((_, i) => drops[i] === "never" || drops[i] === "maybe" && !dropMaybe);
|
|
8556
|
+
}
|
|
8557
|
+
function keptLiteralsCorroborate(kept, bag, secrets) {
|
|
8558
|
+
return kept.every((element, i) => keptElementCorroborates(element, bag[i], secrets));
|
|
8559
|
+
}
|
|
8560
|
+
function isIntrinsicNode(value) {
|
|
8561
|
+
if (!isPlainObject$7(value)) return false;
|
|
8562
|
+
const keys = Object.keys(value);
|
|
8563
|
+
return keys.length === 1 && (keys[0] === "Ref" || keys[0].startsWith("Fn::"));
|
|
8564
|
+
}
|
|
8565
|
+
function keptElementCorroborates(source, bag, secrets, depth = 0) {
|
|
8566
|
+
if (depth > 16) return false;
|
|
8567
|
+
if (typeof source === "string") {
|
|
8568
|
+
if (!source.includes("{{resolve:")) return source === bag;
|
|
8569
|
+
return isSingleDynamicReferenceToken(source) && resolvedPlaintextOf(secrets, source) === bag;
|
|
8570
|
+
}
|
|
8571
|
+
if (source === null || typeof source !== "object") return source === bag;
|
|
8572
|
+
if (isIntrinsicNode(source)) return true;
|
|
8573
|
+
if (Array.isArray(source)) return Array.isArray(bag) && bag.length === source.length && source.every((element, i) => keptElementCorroborates(element, bag[i], secrets, depth + 1));
|
|
8574
|
+
if (!isPlainObject$7(source) || !isPlainObject$7(bag)) return false;
|
|
8575
|
+
if (Object.keys(bag).some((key) => !Object.hasOwn(source, key))) return false;
|
|
8576
|
+
return Object.entries(source).every(([key, value]) => Object.hasOwn(bag, key) ? keptElementCorroborates(value, bag[key], secrets, depth + 1) : arrayElementDrop(value) === "always" || arrayElementDrop(value) === "maybe");
|
|
8577
|
+
}
|
|
8578
|
+
function corroboratesWhateverResolves(source, depth = 0) {
|
|
8579
|
+
if (depth > 16) return false;
|
|
8580
|
+
if (typeof source === "string") return !source.includes("{{resolve:");
|
|
8581
|
+
if (source === null || typeof source !== "object") return true;
|
|
8582
|
+
if (isIntrinsicNode(source)) return true;
|
|
8583
|
+
if (Array.isArray(source)) return source.every((element) => arrayElementDrop(element) === "never" && corroboratesWhateverResolves(element, depth + 1));
|
|
8584
|
+
if (!isPlainObject$7(source)) return false;
|
|
8585
|
+
if (Object.keys(source).some((key) => key === "Ref" || key.startsWith("Fn::"))) return false;
|
|
8586
|
+
return Object.values(source).every((value) => arrayElementDrop(value) !== "unknown" && corroboratesWhateverResolves(value, depth + 1));
|
|
8587
|
+
}
|
|
8588
|
+
function arrayPairsWhateverDrops(source) {
|
|
8589
|
+
if (!source.some((element) => isPlainObject$7(element) && (Object.hasOwn(element, "Fn::If") || element["Ref"] === "AWS::NoValue" || Array.isArray(element["Fn::FindInMap"]) && element["Fn::FindInMap"].length > 3))) return true;
|
|
8590
|
+
const drops = source.map((element) => arrayElementDrop(element));
|
|
8591
|
+
return !drops.includes("unknown") && drops.filter((drop) => drop === "maybe").length <= 1 && source.every((element) => corroboratesWhateverResolves(element));
|
|
8592
|
+
}
|
|
8397
8593
|
function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameGeneration) {
|
|
8398
8594
|
if (isDynamicReferenceString(source) && typeof bag === "string") {
|
|
8399
8595
|
if (isSingleDynamicReferenceToken(source) && (rules.trustAnyExpression || isKnownSecretExpression(source, secretExpressions))) {
|
|
@@ -8448,6 +8644,10 @@ function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameG
|
|
|
8448
8644
|
});
|
|
8449
8645
|
}
|
|
8450
8646
|
if (rules.descendArrays && bag.length === source.length) return bag.map((item, i) => redactByPath(item, source[i], secrets, rules, secretExpressions, bagIsSameGeneration));
|
|
8647
|
+
if (rules.descendArrays && bag.length < source.length) {
|
|
8648
|
+
const kept = sourceElementsKeptFor(source, bag.length);
|
|
8649
|
+
if (kept !== void 0 && keptLiteralsCorroborate(kept, bag, secrets)) return bag.map((item, i) => redactByPath(item, kept[i], secrets, rules, secretExpressions, bagIsSameGeneration));
|
|
8650
|
+
}
|
|
8451
8651
|
}
|
|
8452
8652
|
if (isPlainObject$7(bag) && hasPlainPrototype(bag) && isPlainObject$7(source)) {
|
|
8453
8653
|
const out = Object.create(null);
|
|
@@ -9617,14 +9817,16 @@ function carryListElementFragments(needles, to, value) {
|
|
|
9617
9817
|
for (const fragment of fragments) recordLogOnlyValue(to, fragment);
|
|
9618
9818
|
}
|
|
9619
9819
|
}
|
|
9620
|
-
function recordLogOnlySplitFragments(from, to, text, delimiter) {
|
|
9820
|
+
function recordLogOnlySplitFragments(from, to, text, delimiter, printed) {
|
|
9621
9821
|
if (delimiter === "") return;
|
|
9822
|
+
const splits = [text.split(delimiter)];
|
|
9823
|
+
if (printed !== void 0 && (printed.length !== splits[0].length || printed.some((piece, i) => piece !== splits[0][i]))) splits.push(printed);
|
|
9622
9824
|
for (const bag of from) {
|
|
9623
9825
|
if (bag === void 0) continue;
|
|
9624
|
-
for (const needle of [...logOnlyValuesOf.get(bag) ?? []]) for (const fragment of fragmentsOfNeedleIn(text, delimiter, needle)) if (fragment !== needle) recordLogOnlyValue(to, fragment);
|
|
9826
|
+
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);
|
|
9625
9827
|
}
|
|
9626
9828
|
}
|
|
9627
|
-
function fragmentsOfNeedleIn(text, delimiter, needle) {
|
|
9829
|
+
function fragmentsOfNeedleIn(text, delimiter, needle, pieces = text.split(delimiter)) {
|
|
9628
9830
|
const fragments = /* @__PURE__ */ new Set();
|
|
9629
9831
|
if (needle === "") return fragments;
|
|
9630
9832
|
const starts = [];
|
|
@@ -9633,7 +9835,7 @@ function fragmentsOfNeedleIn(text, delimiter, needle) {
|
|
|
9633
9835
|
if (starts.length === 0) return fragments;
|
|
9634
9836
|
const spans = [];
|
|
9635
9837
|
let offset = 0;
|
|
9636
|
-
for (const piece of
|
|
9838
|
+
for (const piece of pieces) {
|
|
9637
9839
|
spans.push([offset, offset + piece.length]);
|
|
9638
9840
|
offset += piece.length + delimiter.length;
|
|
9639
9841
|
}
|
|
@@ -11299,12 +11501,19 @@ async function withRetry(operation, logicalId, opts = {}) {
|
|
|
11299
11501
|
return await operation();
|
|
11300
11502
|
} catch (error) {
|
|
11301
11503
|
lastError = error;
|
|
11504
|
+
const replayMadeAnother = replayMadeAnotherResource(previousError, error);
|
|
11302
11505
|
const carried = carryCreatedBeforeFailure(previousError, error);
|
|
11303
11506
|
if (hasCreatedBeforeFailure(carried) || !hasCreatedBeforeFailure(previousError)) previousError = carried;
|
|
11304
11507
|
if (isAuxiliaryFailure(error) || hasReplayMayCollide(error) || isAmbiguousOutcomeError(error)) replayMayCollide = true;
|
|
11305
11508
|
const message = describeAwsFailure(error).detail;
|
|
11306
11509
|
const classifyText = retryClassificationText(error);
|
|
11307
11510
|
if (isMarkedNonRetryable(error)) throw settle(error);
|
|
11511
|
+
if (replayMadeAnother) {
|
|
11512
|
+
try {
|
|
11513
|
+
opts.logger?.warn?.(safeMsg`${shownId}: not retrying - a retried create made another resource instead of resuming the one an earlier attempt left behind, and only the latest is recorded for \`cdkd rollback --revert-failed\`. Find the earlier one and delete it by hand`);
|
|
11514
|
+
} catch {}
|
|
11515
|
+
throw settle(error);
|
|
11516
|
+
}
|
|
11308
11517
|
const retryable = opts.isRetryable ? opts.isRetryable(classifyText, error) : isRetryableTransientError(error, classifyText);
|
|
11309
11518
|
const propagation = defaultSchedule && isIamPropagationError(classifyText);
|
|
11310
11519
|
if (propagation) sawPropagation = true;
|
|
@@ -11922,6 +12131,7 @@ const CREATE_ONLY_PATHS_SNAPSHOT = /* @__PURE__ */ new Map([
|
|
|
11922
12131
|
["LicenseInfo"]
|
|
11923
12132
|
]],
|
|
11924
12133
|
["AWS::Lambda::MicrovmImage", [["Name"]]],
|
|
12134
|
+
["AWS::Lambda::NetworkConnector", [["Name"]]],
|
|
11925
12135
|
["AWS::Lambda::Permission", [
|
|
11926
12136
|
["Action"],
|
|
11927
12137
|
["EventSourceToken"],
|
|
@@ -11934,6 +12144,19 @@ const CREATE_ONLY_PATHS_SNAPSHOT = /* @__PURE__ */ new Map([
|
|
|
11934
12144
|
["SourceArn"]
|
|
11935
12145
|
]],
|
|
11936
12146
|
["AWS::Lambda::Url", [["Qualifier"], ["TargetFunctionArn"]]],
|
|
12147
|
+
["AWS::Lambda::WebFunctionEndpoint", [
|
|
12148
|
+
["EndpointName"],
|
|
12149
|
+
["EndpointType"],
|
|
12150
|
+
["FunctionName"],
|
|
12151
|
+
["Regions"]
|
|
12152
|
+
]],
|
|
12153
|
+
["AWS::Lambda::WebFunctionRevision", [
|
|
12154
|
+
["BuildConfig"],
|
|
12155
|
+
["Description"],
|
|
12156
|
+
["FunctionName"],
|
|
12157
|
+
["KmsKeyArn"],
|
|
12158
|
+
["ServiceConfig"]
|
|
12159
|
+
]],
|
|
11937
12160
|
["AWS::Logs::LogGroup", [["LogGroupName"]]],
|
|
11938
12161
|
["AWS::Neptune::DBCluster", [
|
|
11939
12162
|
["AvailabilityZones"],
|
|
@@ -12380,6 +12603,11 @@ const REVERSE_REPLACEMENT_NAME_KEYS = {
|
|
|
12380
12603
|
"AWS::KinesisFirehose::DeliveryStream": flat("DeliveryStreamName"),
|
|
12381
12604
|
"AWS::KMS::Alias": flat("AliasName"),
|
|
12382
12605
|
"AWS::Lambda::MicrovmImage": flat("Name"),
|
|
12606
|
+
"AWS::Lambda::NetworkConnector": flat("Name"),
|
|
12607
|
+
"AWS::Lambda::WebFunctionEndpoint": {
|
|
12608
|
+
name: [["EndpointName"]],
|
|
12609
|
+
scope: [["FunctionName"]]
|
|
12610
|
+
},
|
|
12383
12611
|
"AWS::Pipes::Pipe": flat("Name"),
|
|
12384
12612
|
"AWS::RDS::DBProxyTargetGroup": {
|
|
12385
12613
|
name: [["TargetGroupName"]],
|
|
@@ -12422,6 +12650,7 @@ const NOT_NAME_KEYED_TYPES = /* @__PURE__ */ new Set([
|
|
|
12422
12650
|
"AWS::IAM::Policy",
|
|
12423
12651
|
"AWS::Lambda::EventInvokeConfig",
|
|
12424
12652
|
"AWS::Lambda::Permission",
|
|
12653
|
+
"AWS::Lambda::WebFunctionRevision",
|
|
12425
12654
|
"AWS::Route53::HostedZone"
|
|
12426
12655
|
]);
|
|
12427
12656
|
const CASE_INSENSITIVE_NAME_TYPES = /* @__PURE__ */ new Set([
|
|
@@ -14534,7 +14763,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
14534
14763
|
]),
|
|
14535
14764
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
14536
14765
|
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
14537
|
-
readOnly: /* @__PURE__ */ new Set(["
|
|
14766
|
+
readOnly: /* @__PURE__ */ new Set(["AnomalyDetectorId"]),
|
|
14538
14767
|
ccRouteUnavailable: true
|
|
14539
14768
|
}],
|
|
14540
14769
|
["AWS::CodeBuild::Project", {
|
|
@@ -15951,6 +16180,23 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
15951
16180
|
]),
|
|
15952
16181
|
ccRouteUnavailable: false
|
|
15953
16182
|
}],
|
|
16183
|
+
["AWS::Lambda::NetworkConnector", {
|
|
16184
|
+
handled: /* @__PURE__ */ new Set([
|
|
16185
|
+
"Configuration",
|
|
16186
|
+
"Name",
|
|
16187
|
+
"OperatorRole",
|
|
16188
|
+
"Tags"
|
|
16189
|
+
]),
|
|
16190
|
+
silentDrop: /* @__PURE__ */ new Map(),
|
|
16191
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
16192
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
16193
|
+
"Arn",
|
|
16194
|
+
"LatestVersion",
|
|
16195
|
+
"LatestVersionArn",
|
|
16196
|
+
"State"
|
|
16197
|
+
]),
|
|
16198
|
+
ccRouteUnavailable: false
|
|
16199
|
+
}],
|
|
15954
16200
|
["AWS::Lambda::Permission", {
|
|
15955
16201
|
handled: /* @__PURE__ */ new Set([
|
|
15956
16202
|
"Action",
|
|
@@ -15981,6 +16227,54 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
15981
16227
|
readOnly: /* @__PURE__ */ new Set(["FunctionArn", "FunctionUrl"]),
|
|
15982
16228
|
ccRouteUnavailable: false
|
|
15983
16229
|
}],
|
|
16230
|
+
["AWS::Lambda::WebFunctionEndpoint", {
|
|
16231
|
+
handled: /* @__PURE__ */ new Set([
|
|
16232
|
+
"AuthType",
|
|
16233
|
+
"Description",
|
|
16234
|
+
"EndpointName",
|
|
16235
|
+
"EndpointType",
|
|
16236
|
+
"FunctionName",
|
|
16237
|
+
"Regions",
|
|
16238
|
+
"RevisionWeights",
|
|
16239
|
+
"ScalingConfig",
|
|
16240
|
+
"ThrottleConfig"
|
|
16241
|
+
]),
|
|
16242
|
+
silentDrop: /* @__PURE__ */ new Map(),
|
|
16243
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
16244
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
16245
|
+
"CreatedAt",
|
|
16246
|
+
"DomainName",
|
|
16247
|
+
"EndpointArn",
|
|
16248
|
+
"FunctionArn",
|
|
16249
|
+
"RegionalEndpoints",
|
|
16250
|
+
"State",
|
|
16251
|
+
"StateReason",
|
|
16252
|
+
"UpdatedAt",
|
|
16253
|
+
"UpdateStatus",
|
|
16254
|
+
"UpdateStatusReason"
|
|
16255
|
+
]),
|
|
16256
|
+
ccRouteUnavailable: false
|
|
16257
|
+
}],
|
|
16258
|
+
["AWS::Lambda::WebFunctionRevision", {
|
|
16259
|
+
handled: /* @__PURE__ */ new Set([
|
|
16260
|
+
"BuildConfig",
|
|
16261
|
+
"Description",
|
|
16262
|
+
"FunctionName",
|
|
16263
|
+
"KmsKeyArn",
|
|
16264
|
+
"ServiceConfig"
|
|
16265
|
+
]),
|
|
16266
|
+
silentDrop: /* @__PURE__ */ new Map(),
|
|
16267
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
16268
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
16269
|
+
"CreatedAt",
|
|
16270
|
+
"FunctionArn",
|
|
16271
|
+
"RevisionArn",
|
|
16272
|
+
"RevisionId",
|
|
16273
|
+
"State",
|
|
16274
|
+
"StateReason"
|
|
16275
|
+
]),
|
|
16276
|
+
ccRouteUnavailable: false
|
|
16277
|
+
}],
|
|
15984
16278
|
["AWS::Logs::LogGroup", {
|
|
15985
16279
|
handled: /* @__PURE__ */ new Set([
|
|
15986
16280
|
"BearerTokenAuthenticationEnabled",
|
|
@@ -21964,6 +22258,7 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21964
22258
|
const verdictScope = secretVerdictScope(this);
|
|
21965
22259
|
const isKnownSecret = service === "secretsmanager" || service === "ssm-secure" || isScopedSecretVerdict(verdictScope, fullMatch);
|
|
21966
22260
|
if (isKnownSecret && context?.skipDynamicReferences) {
|
|
22261
|
+
context.skippedSecretReferences?.add(fullMatch);
|
|
21967
22262
|
complete = false;
|
|
21968
22263
|
continue;
|
|
21969
22264
|
}
|
|
@@ -22042,6 +22337,7 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
22042
22337
|
isSecret = param.secure;
|
|
22043
22338
|
if (param.secure) {
|
|
22044
22339
|
if (!decrypt) {
|
|
22340
|
+
context?.skippedSecretReferences?.add(fullMatch);
|
|
22045
22341
|
complete = false;
|
|
22046
22342
|
continue;
|
|
22047
22343
|
}
|
|
@@ -22390,6 +22686,12 @@ function describeSplitValueSource(value) {
|
|
|
22390
22686
|
kind: "getatt"
|
|
22391
22687
|
};
|
|
22392
22688
|
}
|
|
22689
|
+
function splitValueResolvesReferences(value) {
|
|
22690
|
+
if (typeof value === "string") return true;
|
|
22691
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
|
|
22692
|
+
const keys = Object.keys(value);
|
|
22693
|
+
return keys.length === 1 && (keys[0] === "Fn::Join" || keys[0] === "Fn::Sub");
|
|
22694
|
+
}
|
|
22393
22695
|
async function resolveSplit(splitArgs, context) {
|
|
22394
22696
|
const [delimiter, value] = splitArgs;
|
|
22395
22697
|
const resolvedValue = await this.resolveValue(value, context);
|
|
@@ -22402,22 +22704,22 @@ async function resolveSplit(splitArgs, context) {
|
|
|
22402
22704
|
}
|
|
22403
22705
|
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.`));
|
|
22404
22706
|
}
|
|
22405
|
-
const result = resolvedValue.split(delimiter);
|
|
22707
|
+
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);
|
|
22406
22708
|
let lineContext = context;
|
|
22407
22709
|
if (this.hasLogOnlyNeedles(context)) {
|
|
22408
|
-
if (context.recordedSecretValues) recordLogOnlySplitFragments([context.inheritedSecrets, context.recordedSecretValues], context.recordedSecretValues, resolvedValue, String(delimiter));
|
|
22710
|
+
if (context.recordedSecretValues) recordLogOnlySplitFragments([context.inheritedSecrets, context.recordedSecretValues], context.recordedSecretValues, resolvedValue, String(delimiter), result);
|
|
22409
22711
|
else {
|
|
22410
22712
|
const linePieces = /* @__PURE__ */ new Map();
|
|
22411
22713
|
if (context.printingSecrets !== void 0) carryLogOnlyValues(context.printingSecrets, linePieces);
|
|
22412
|
-
recordLogOnlySplitFragments([context.inheritedSecrets], linePieces, resolvedValue, String(delimiter));
|
|
22714
|
+
recordLogOnlySplitFragments([context.inheritedSecrets], linePieces, resolvedValue, String(delimiter), result);
|
|
22413
22715
|
lineContext = {
|
|
22414
22716
|
...context,
|
|
22415
22717
|
printingSecrets: linePieces
|
|
22416
22718
|
};
|
|
22417
22719
|
}
|
|
22418
22720
|
}
|
|
22419
|
-
if (context.printingSecrets !== void 0 && hasLogOnlyValues(context.printingSecrets)) recordLogOnlySplitFragments([context.printingSecrets], context.printingSecrets, resolvedValue, String(delimiter));
|
|
22420
|
-
if (context.secretNameSink !== void 0 && hasLogOnlyValues(context.secretNameSink)) recordLogOnlySplitFragments([context.secretNameSink], context.secretNameSink, resolvedValue, String(delimiter));
|
|
22721
|
+
if (context.printingSecrets !== void 0 && hasLogOnlyValues(context.printingSecrets)) recordLogOnlySplitFragments([context.printingSecrets], context.printingSecrets, resolvedValue, String(delimiter), result);
|
|
22722
|
+
if (context.secretNameSink !== void 0 && hasLogOnlyValues(context.secretNameSink)) recordLogOnlySplitFragments([context.secretNameSink], context.secretNameSink, resolvedValue, String(delimiter), result);
|
|
22421
22723
|
const pieceTwins = String(delimiter) === "" && this.maskRenderedNeedlesForLog(resolvedValue, lineContext) !== resolvedValue ? result.map(() => "***") : this.splitLogTwins(resolvedValue, delimiter, result, context);
|
|
22422
22724
|
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 })}`);
|
|
22423
22725
|
return result;
|
|
@@ -23212,16 +23514,35 @@ function recordInheritedParameterSecrets(parameterName, value, context) {
|
|
|
23212
23514
|
if (recorded) carryPhysicalNameCopiesCarriedBy(context, recorded, value);
|
|
23213
23515
|
if (inherited && recorded) recordInheritedNoEchoListElements(this, inherited, recorded, value, context);
|
|
23214
23516
|
if (!inherited || inherited.size === 0 || !recorded) return;
|
|
23215
|
-
|
|
23517
|
+
const mirror = parameterReadMirrors.get(recorded);
|
|
23518
|
+
const declared = declaredParameterNames(context);
|
|
23519
|
+
recordInheritedParameterValue(recorded, inherited, parameterName, value, declared);
|
|
23520
|
+
if (mirror) recordInheritedParameterValue(mirror, inherited, parameterName, value, declared);
|
|
23216
23521
|
for (const [plaintext, expression] of inheritedSecretsCarriedBy(value, inherited)) {
|
|
23217
23522
|
const carried = carriedExpressionFor(inherited, parameterName, value, plaintext, expression);
|
|
23218
23523
|
recorded.set(plaintext, carried);
|
|
23219
23524
|
const parentEntry = context.inheritedReferenceProvenance?.get(carried);
|
|
23220
23525
|
if (parentEntry !== void 0) recordReferenceProvenanceEntry(recorded, carried, parentEntry, "read");
|
|
23221
23526
|
recordInheritedParameterRead(recorded, inherited, parameterName);
|
|
23527
|
+
if (mirror) recordInheritedParameterRead(mirror, inherited, parameterName);
|
|
23222
23528
|
carryFreshNoEchoMark(inherited, recorded, plaintext);
|
|
23223
23529
|
}
|
|
23224
23530
|
}
|
|
23531
|
+
function declaredParameterNames(context) {
|
|
23532
|
+
const declared = context.template?.Parameters;
|
|
23533
|
+
if (declared === null || typeof declared !== "object") return void 0;
|
|
23534
|
+
let names = declaredNamesCache.get(declared);
|
|
23535
|
+
if (names === void 0) {
|
|
23536
|
+
names = new Set(Object.keys(declared));
|
|
23537
|
+
declaredNamesCache.set(declared, names);
|
|
23538
|
+
}
|
|
23539
|
+
return names;
|
|
23540
|
+
}
|
|
23541
|
+
const declaredNamesCache = /* @__PURE__ */ new WeakMap();
|
|
23542
|
+
const parameterReadMirrors = /* @__PURE__ */ new WeakMap();
|
|
23543
|
+
function mirrorInheritedParameterReads(passSecrets, persistSecrets) {
|
|
23544
|
+
if (passSecrets !== persistSecrets) parameterReadMirrors.set(passSecrets, persistSecrets);
|
|
23545
|
+
}
|
|
23225
23546
|
function carryPhysicalNameCopiesCarriedBy(context, recorded, value) {
|
|
23226
23547
|
const names = context.inheritedPhysicalNameCopies ?? (context.inheritedSecrets && physicalNameCopiesOf.get(context.inheritedSecrets));
|
|
23227
23548
|
if (names === void 0 || names.size === 0) return;
|
|
@@ -23238,15 +23559,25 @@ function poisonRenderedSpellingsCollidingIn(template, parameterValues, inherited
|
|
|
23238
23559
|
const names = new Set(Object.keys(parameterValues));
|
|
23239
23560
|
if (names.size < 2) return;
|
|
23240
23561
|
const groups = [];
|
|
23241
|
-
if (template.Resources !== null && typeof template.Resources === "object") for (const resource of Object.values(template.Resources)) groups.push([
|
|
23242
|
-
|
|
23562
|
+
if (template.Resources !== null && typeof template.Resources === "object") for (const resource of Object.values(template.Resources)) groups.push([{
|
|
23563
|
+
node: resource,
|
|
23564
|
+
mode: "resource"
|
|
23565
|
+
}]);
|
|
23566
|
+
if (template.Outputs !== void 0) groups.push(outputsGroupParts(template.Outputs));
|
|
23243
23567
|
const bind = (name) => Object.hasOwn(parameterValues, name) ? { value: parameterValues[name] } : void 0;
|
|
23244
23568
|
const withdrawn = /* @__PURE__ */ new Set();
|
|
23245
23569
|
for (;;) {
|
|
23246
|
-
const fresh = [...collidingRenderedNames(groups.map((
|
|
23247
|
-
|
|
23248
|
-
|
|
23249
|
-
|
|
23570
|
+
const fresh = [...collidingRenderedNames(groups.map((parts) => {
|
|
23571
|
+
const reads = /* @__PURE__ */ new Map();
|
|
23572
|
+
for (const { node, mode } of parts) {
|
|
23573
|
+
const reread = mode === "slot" ? void 0 : {
|
|
23574
|
+
bind,
|
|
23575
|
+
inherited
|
|
23576
|
+
};
|
|
23577
|
+
for (const [name, slotRead] of parameterReadsOf(node, names, reread, mode !== "output")) reads.set(name, slotRead || reads.get(name) === true);
|
|
23578
|
+
}
|
|
23579
|
+
return reads;
|
|
23580
|
+
}).filter((reads) => reads.size >= 2), parameterValues, inherited)].filter((name) => !withdrawn.has(name));
|
|
23250
23581
|
if (fresh.length === 0) return;
|
|
23251
23582
|
for (const name of fresh) {
|
|
23252
23583
|
withdrawn.add(name);
|
|
@@ -23287,14 +23618,14 @@ function collidingRenderedNames(readsByGroup, parameterValues, inherited) {
|
|
|
23287
23618
|
return withdraw;
|
|
23288
23619
|
}
|
|
23289
23620
|
const POSITIONED_INTRINSICS = /* @__PURE__ */ new Set(["Fn::Join", "Fn::Sub"]);
|
|
23290
|
-
function parameterReadsOf(node, names, reread) {
|
|
23621
|
+
function parameterReadsOf(node, names, reread, positionsArrays) {
|
|
23291
23622
|
const reads = /* @__PURE__ */ new Map();
|
|
23292
23623
|
const add = (name, slotRead) => {
|
|
23293
23624
|
reads.set(name, slotRead || reads.get(name) === true);
|
|
23294
23625
|
};
|
|
23295
23626
|
const visit = (value, slotRead, atLeaf) => {
|
|
23296
23627
|
if (Array.isArray(value)) {
|
|
23297
|
-
const mayShrink = value.some((element) => element !== null && typeof element === "object" && !Array.isArray(element) && (Object.hasOwn(element, "Fn::If") || element["Ref"] === "AWS::NoValue"));
|
|
23628
|
+
const mayShrink = atLeaf ? !positionsArrays || !arrayPairsWhateverDrops(value) : value.some((element) => element !== null && typeof element === "object" && !Array.isArray(element) && (Object.hasOwn(element, "Fn::If") || element["Ref"] === "AWS::NoValue"));
|
|
23298
23629
|
for (const element of value) visit(element, slotRead || mayShrink, atLeaf && !mayShrink);
|
|
23299
23630
|
return;
|
|
23300
23631
|
}
|
|
@@ -23307,17 +23638,72 @@ function parameterReadsOf(node, names, reread) {
|
|
|
23307
23638
|
}
|
|
23308
23639
|
const ref = record["Ref"];
|
|
23309
23640
|
if (typeof ref === "string" && names.has(ref)) add(ref, slotRead);
|
|
23641
|
+
const placeholderSlot = !positionsArrays && unkeyedPlaceholderParts(record, (name) => certifiesPlaceholder(name, reread)) > MAX_UNKEYED_PARTS;
|
|
23310
23642
|
const sub = record["Fn::Sub"];
|
|
23311
23643
|
const text = typeof sub === "string" ? sub : Array.isArray(sub) ? sub[0] : void 0;
|
|
23312
23644
|
if (typeof text === "string") for (const match of text.matchAll(/\$\{([^}!][^}]*)\}/g)) {
|
|
23313
23645
|
const name = match[1].trim();
|
|
23314
|
-
if (names.has(name)) add(name, slotRead);
|
|
23646
|
+
if (names.has(name)) add(name, slotRead || placeholderSlot);
|
|
23315
23647
|
}
|
|
23316
|
-
for (const [key, child] of Object.entries(record)) visit(child, slotRead || key.startsWith("Fn::") && !POSITIONED_INTRINSICS.has(key), atLeaf && !intrinsic);
|
|
23648
|
+
for (const [key, child] of Object.entries(record)) visit(child, slotRead || placeholderSlot || key.startsWith("Fn::") && !POSITIONED_INTRINSICS.has(key), atLeaf && !intrinsic);
|
|
23317
23649
|
};
|
|
23318
23650
|
visit(node, reread === void 0, true);
|
|
23319
23651
|
return reads;
|
|
23320
23652
|
}
|
|
23653
|
+
const MAX_UNKEYED_PARTS = 1;
|
|
23654
|
+
function certifiesPlaceholder(name, reread) {
|
|
23655
|
+
if (reread === void 0) return false;
|
|
23656
|
+
const bound = reread.bind(name);
|
|
23657
|
+
if (bound === void 0) return false;
|
|
23658
|
+
if (inheritedSecretsCarriedBy(bound.value, reread.inherited).length === 0) return false;
|
|
23659
|
+
return typeof inheritedParameterExpression(reread.inherited, name, bound.value) === "string";
|
|
23660
|
+
}
|
|
23661
|
+
function unkeyedPlaceholderParts(record, certified) {
|
|
23662
|
+
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"]);
|
|
23663
|
+
if (Object.hasOwn(record, "Fn::Join")) {
|
|
23664
|
+
const args = record["Fn::Join"];
|
|
23665
|
+
if (!Array.isArray(args) || args.length !== 2 || !Array.isArray(args[1])) return Number.POSITIVE_INFINITY;
|
|
23666
|
+
return args[1].filter((part) => !keyed(part)).length;
|
|
23667
|
+
}
|
|
23668
|
+
if (Object.hasOwn(record, "Fn::Sub")) {
|
|
23669
|
+
const args = record["Fn::Sub"];
|
|
23670
|
+
const [template, variables] = typeof args === "string" ? [args, {}] : Array.isArray(args) ? [args[0], args[1]] : [];
|
|
23671
|
+
if (typeof template !== "string" || variables === null || typeof variables !== "object") return Number.POSITIVE_INFINITY;
|
|
23672
|
+
let unkeyed = 0;
|
|
23673
|
+
for (const hit of template.matchAll(/\$\{(!)?([^}]*)\}/g)) {
|
|
23674
|
+
const name = hit[2] ?? "";
|
|
23675
|
+
if (hit[1] === "!" || name === "") continue;
|
|
23676
|
+
if (!(Object.hasOwn(variables, name) ? keyed(variables[name]) : certified(name))) unkeyed += 1;
|
|
23677
|
+
}
|
|
23678
|
+
return unkeyed;
|
|
23679
|
+
}
|
|
23680
|
+
return 0;
|
|
23681
|
+
}
|
|
23682
|
+
function outputsGroupParts(outputs) {
|
|
23683
|
+
if (outputs === null || typeof outputs !== "object" || Array.isArray(outputs)) return [{
|
|
23684
|
+
node: outputs,
|
|
23685
|
+
mode: "slot"
|
|
23686
|
+
}];
|
|
23687
|
+
const parts = [];
|
|
23688
|
+
for (const output of Object.values(outputs)) {
|
|
23689
|
+
if (output === null || typeof output !== "object" || Array.isArray(output)) {
|
|
23690
|
+
parts.push({
|
|
23691
|
+
node: output,
|
|
23692
|
+
mode: "slot"
|
|
23693
|
+
});
|
|
23694
|
+
continue;
|
|
23695
|
+
}
|
|
23696
|
+
const { Value: value, ...rest } = output;
|
|
23697
|
+
parts.push({
|
|
23698
|
+
node: value,
|
|
23699
|
+
mode: "output"
|
|
23700
|
+
}, {
|
|
23701
|
+
node: rest,
|
|
23702
|
+
mode: "slot"
|
|
23703
|
+
});
|
|
23704
|
+
}
|
|
23705
|
+
return parts;
|
|
23706
|
+
}
|
|
23321
23707
|
function refNamesIn(node, names) {
|
|
23322
23708
|
const found = /* @__PURE__ */ new Set();
|
|
23323
23709
|
const visit = (value) => {
|
|
@@ -23328,6 +23714,12 @@ function refNamesIn(node, names) {
|
|
|
23328
23714
|
if (value === null || typeof value !== "object") return;
|
|
23329
23715
|
const record = value;
|
|
23330
23716
|
if (typeof record["Ref"] === "string" && names.has(record["Ref"])) found.add(record["Ref"]);
|
|
23717
|
+
const sub = record["Fn::Sub"];
|
|
23718
|
+
const text = typeof sub === "string" ? sub : Array.isArray(sub) ? sub[0] : void 0;
|
|
23719
|
+
if (typeof text === "string") for (const match of text.matchAll(/\$\{([^}!][^}]*)\}/g)) {
|
|
23720
|
+
const name = match[1].trim();
|
|
23721
|
+
if (names.has(name)) found.add(name);
|
|
23722
|
+
}
|
|
23331
23723
|
for (const child of Object.values(record)) visit(child);
|
|
23332
23724
|
};
|
|
23333
23725
|
visit(node);
|
|
@@ -25231,6 +25623,62 @@ var JsonPatchGenerator = class {
|
|
|
25231
25623
|
}
|
|
25232
25624
|
};
|
|
25233
25625
|
|
|
25626
|
+
//#endregion
|
|
25627
|
+
//#region src/provisioning/guardduty-detector-patch.ts
|
|
25628
|
+
const DETECTOR_TYPE = "AWS::GuardDuty::Detector";
|
|
25629
|
+
const READ_BACK_KEYS = ["Features", "DataSources"];
|
|
25630
|
+
function withGuardDutyDetectorReadBackOps(resourceType, patch, desired, readback) {
|
|
25631
|
+
if (resourceType !== DETECTOR_TYPE || patch.length === 0) return patch;
|
|
25632
|
+
let out = patch;
|
|
25633
|
+
if (readback) {
|
|
25634
|
+
out = patch.map((op) => op.path === "/Features" ? narrowToChangedFeatures(op, readback.previous["Features"]) : op);
|
|
25635
|
+
if (out.some((op) => op.path === "/Features" && op.op !== "remove")) out = out.map((op) => op.path === "/DataSources" ? {
|
|
25636
|
+
op: "remove",
|
|
25637
|
+
path: "/DataSources"
|
|
25638
|
+
} : op);
|
|
25639
|
+
}
|
|
25640
|
+
const extra = [];
|
|
25641
|
+
for (const key of READ_BACK_KEYS) {
|
|
25642
|
+
if (out.some((op) => op.path === `/${key}`)) continue;
|
|
25643
|
+
if (readback) {
|
|
25644
|
+
if (Object.prototype.hasOwnProperty.call(readback.previous, key)) extra.push({
|
|
25645
|
+
op: "remove",
|
|
25646
|
+
path: `/${key}`
|
|
25647
|
+
});
|
|
25648
|
+
continue;
|
|
25649
|
+
}
|
|
25650
|
+
extra.push(Object.prototype.hasOwnProperty.call(desired, key) ? {
|
|
25651
|
+
op: "add",
|
|
25652
|
+
path: `/${key}`,
|
|
25653
|
+
value: desired[key]
|
|
25654
|
+
} : {
|
|
25655
|
+
op: "remove",
|
|
25656
|
+
path: `/${key}`
|
|
25657
|
+
});
|
|
25658
|
+
}
|
|
25659
|
+
return extra.length === 0 && out === patch ? patch : [...out, ...extra];
|
|
25660
|
+
}
|
|
25661
|
+
function narrowToChangedFeatures(op, current) {
|
|
25662
|
+
if (!Array.isArray(op.value) || !Array.isArray(current)) return op;
|
|
25663
|
+
const byName = /* @__PURE__ */ new Map();
|
|
25664
|
+
for (const entry of current) byName.set(featureName(entry), entry);
|
|
25665
|
+
const changed = [];
|
|
25666
|
+
for (const entry of op.value) {
|
|
25667
|
+
const name = featureName(entry);
|
|
25668
|
+
if (name === void 0) return op;
|
|
25669
|
+
if (!isDeepStrictEqual(entry, byName.get(name))) changed.push(entry);
|
|
25670
|
+
}
|
|
25671
|
+
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."));
|
|
25672
|
+
return {
|
|
25673
|
+
...op,
|
|
25674
|
+
value: changed
|
|
25675
|
+
};
|
|
25676
|
+
}
|
|
25677
|
+
function featureName(entry) {
|
|
25678
|
+
const name = entry?.["Name"];
|
|
25679
|
+
return typeof name === "string" ? name : void 0;
|
|
25680
|
+
}
|
|
25681
|
+
|
|
25234
25682
|
//#endregion
|
|
25235
25683
|
//#region src/provisioning/secret-reference-immutable.ts
|
|
25236
25684
|
const IDENTITY = maskerOrIdentity(void 0);
|
|
@@ -26020,6 +26468,7 @@ var CloudControlProvider = class {
|
|
|
26020
26468
|
};
|
|
26021
26469
|
}
|
|
26022
26470
|
}
|
|
26471
|
+
patch = withGuardDutyDetectorReadBackOps(resourceType, patch, cleanProperties, context?.desiredFromAwsReadback === true ? { previous: cleanPreviousProperties } : void 0);
|
|
26023
26472
|
this.logger.debug(`Generated ${patch.length} patch operations for ${logicalId}: ${JSON.stringify(patch.map((op) => {
|
|
26024
26473
|
const anyOp = op;
|
|
26025
26474
|
return {
|
|
@@ -26076,7 +26525,7 @@ var CloudControlProvider = class {
|
|
|
26076
26525
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
26077
26526
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
26078
26527
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
26079
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
26528
|
+
const { ASGProvider } = await import("./asg-provider-BS5i71bK.js");
|
|
26080
26529
|
const delegateRegion = ambientRegion();
|
|
26081
26530
|
let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
|
|
26082
26531
|
if (asgProvider === void 0) {
|
|
@@ -26182,7 +26631,7 @@ var CloudControlProvider = class {
|
|
|
26182
26631
|
const family = SDK_DELETE_FAMILIES.get(resourceType);
|
|
26183
26632
|
const cached = this.sdkDeleteDelegates.get(family);
|
|
26184
26633
|
if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
|
|
26185
|
-
const provider = family === "rds" ? new (await (import("./rds-provider-
|
|
26634
|
+
const provider = family === "rds" ? new (await (import("./rds-provider-DraxDuQq.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-CqZ1FaqT.js"))).NeptuneProvider({ region: ccRegion });
|
|
26186
26635
|
this.sdkDeleteDelegates.set(family, {
|
|
26187
26636
|
region: ccRegion,
|
|
26188
26637
|
provider
|
|
@@ -29344,6 +29793,24 @@ const NESTED_REQUIRED = /* @__PURE__ */ new Map([
|
|
|
29344
29793
|
["Resources", ["MinimumMemoryInMiB"]],
|
|
29345
29794
|
["Tags", ["Key"]]
|
|
29346
29795
|
])],
|
|
29796
|
+
["AWS::Lambda::NetworkConnector", /* @__PURE__ */ new Map([
|
|
29797
|
+
["Configuration", ["VpcEgressConfiguration"]],
|
|
29798
|
+
["Configuration.VpcEgressConfiguration", [
|
|
29799
|
+
"AssociatedComputeResourceTypes",
|
|
29800
|
+
"NetworkProtocol",
|
|
29801
|
+
"SecurityGroupIds",
|
|
29802
|
+
"SubnetIds"
|
|
29803
|
+
]],
|
|
29804
|
+
["Tags", ["Key"]]
|
|
29805
|
+
])],
|
|
29806
|
+
["AWS::Lambda::WebFunctionEndpoint", /* @__PURE__ */ new Map([["RevisionWeights", ["RevisionId", "Weight"]]])],
|
|
29807
|
+
["AWS::Lambda::WebFunctionRevision", /* @__PURE__ */ new Map([
|
|
29808
|
+
["BuildConfig", ["CodeConfig", "RuntimeConfig"]],
|
|
29809
|
+
["BuildConfig.CodeConfig", ["S3Object"]],
|
|
29810
|
+
["BuildConfig.CodeConfig.S3Object", ["Bucket", "Key"]],
|
|
29811
|
+
["BuildConfig.RuntimeConfig", ["Runtime"]],
|
|
29812
|
+
["ServiceConfig", ["ExecutionRoleArn"]]
|
|
29813
|
+
])],
|
|
29347
29814
|
["AWS::Logs::LogGroup", /* @__PURE__ */ new Map([["Tags", ["Key", "Value"]]])],
|
|
29348
29815
|
["AWS::Neptune::DBCluster", /* @__PURE__ */ new Map([
|
|
29349
29816
|
["AssociatedRoles", ["RoleArn"]],
|
|
@@ -30058,7 +30525,10 @@ const PROPERTY_SHAPES = /* @__PURE__ */ new Map([
|
|
|
30058
30525
|
["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\"}"],
|
|
30059
30526
|
["AWS::Lambda::LayerVersion", "{\"CompatibleArchitectures\":\"array\",\"CompatibleRuntimes\":\"array\",\"Content\":\"object\"}"],
|
|
30060
30527
|
["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\"}"],
|
|
30528
|
+
["AWS::Lambda::NetworkConnector", "{\"Configuration\":\"object\",\"Configuration.VpcEgressConfiguration\":\"object\",\"Configuration.VpcEgressConfiguration.AssociatedComputeResourceTypes\":\"array\",\"Configuration.VpcEgressConfiguration.SecurityGroupIds\":\"array\",\"Configuration.VpcEgressConfiguration.SubnetIds\":\"array\",\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
|
|
30061
30529
|
["AWS::Lambda::Url", "{\"Cors\":\"object\",\"Cors.AllowHeaders\":\"array\",\"Cors.AllowMethods\":\"array\",\"Cors.AllowOrigins\":\"array\",\"Cors.ExposeHeaders\":\"array\"}"],
|
|
30530
|
+
["AWS::Lambda::WebFunctionEndpoint", "{\"RegionalEndpoints\":\"object\",\"Regions\":\"array\",\"RevisionWeights\":\"array\",\"RevisionWeights[]\":\"object\",\"ScalingConfig\":\"object\",\"ThrottleConfig\":\"object\"}"],
|
|
30531
|
+
["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\"}"],
|
|
30062
30532
|
["AWS::Logs::LogGroup", "{\"DataProtectionPolicy\":\"object\",\"FieldIndexPolicies\":\"array\",\"FieldIndexPolicies[]\":\"object\",\"ResourcePolicyDocument\":\"object\",\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
|
|
30063
30533
|
["AWS::Neptune::DBCluster", "{\"AssociatedRoles\":\"array\",\"AssociatedRoles[]\":\"object\",\"AvailabilityZones\":\"array\",\"EnableCloudwatchLogsExports\":\"array\",\"ServerlessScalingConfiguration\":\"object\",\"Tags\":\"array\",\"Tags[]\":\"object\",\"VpcSecurityGroupIds\":\"array\"}"],
|
|
30064
30534
|
["AWS::Neptune::DBInstance", "{\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
|
|
@@ -30220,6 +30690,24 @@ const STICKY_CC_MIGRATION_EXEMPT = /* @__PURE__ */ new Map([
|
|
|
30220
30690
|
issue: "https://github.com/go-to-k/cdkd/issues/2719",
|
|
30221
30691
|
integFixture: "cc-to-sdk-reroute"
|
|
30222
30692
|
}],
|
|
30693
|
+
["AWS::Lambda::WebFunctionRevision", {
|
|
30694
|
+
mode: "sdk-coverage",
|
|
30695
|
+
physicalIdForm: "both layers store the revision ARN: the schema primaryIdentifier is RevisionArn and LambdaWebFunctionRevisionProvider.create records the CreateWebFunctionRevision revisionArn",
|
|
30696
|
+
issue: "https://github.com/go-to-k/cdkd/issues/4926",
|
|
30697
|
+
integFixture: "lambda-web-function-revision-replace"
|
|
30698
|
+
}],
|
|
30699
|
+
["AWS::Lambda::WebFunctionEndpoint", {
|
|
30700
|
+
mode: "sdk-coverage",
|
|
30701
|
+
physicalIdForm: "both layers store the endpoint ARN: the schema primaryIdentifier is EndpointArn and LambdaWebFunctionEndpointProvider.create records the CreateWebFunctionEndpoint endpointArn",
|
|
30702
|
+
issue: "https://github.com/go-to-k/cdkd/issues/4926",
|
|
30703
|
+
integFixture: "lambda-web-function-revision-replace"
|
|
30704
|
+
}],
|
|
30705
|
+
["AWS::Lambda::NetworkConnector", {
|
|
30706
|
+
mode: "sdk-coverage",
|
|
30707
|
+
physicalIdForm: "both layers store the connector ARN: the schema primaryIdentifier is Arn and LambdaNetworkConnectorProvider.create records the CreateNetworkConnector Arn",
|
|
30708
|
+
issue: "https://github.com/go-to-k/cdkd/issues/4928",
|
|
30709
|
+
integFixture: "lambda-network-connector"
|
|
30710
|
+
}],
|
|
30223
30711
|
["AWS::ElasticLoadBalancingV2::Listener", {
|
|
30224
30712
|
mode: "sdk-coverage",
|
|
30225
30713
|
physicalIdForm: "both layers store the listener ARN: the schema primaryIdentifier is ListenerArn and ELBv2Provider.create records the CreateListener ListenerArn",
|
|
@@ -30620,6 +31108,58 @@ function recordedTagsUnreadableWarning(resourceType, id, applied) {
|
|
|
30620
31108
|
return safeMsg`The recorded Tags of ${resourceType} ${id} is not a list cdkd can read, so cdkd removed no tag and applied the ${applied} desired tag(s) only. Untag any key the template no longer names yourself.`;
|
|
30621
31109
|
}
|
|
30622
31110
|
|
|
31111
|
+
//#endregion
|
|
31112
|
+
//#region src/provisioning/delete-started.ts
|
|
31113
|
+
const DELETE_STARTED = Symbol.for("cdkd.deleteStarted");
|
|
31114
|
+
const MAX_DEPTH = 10;
|
|
31115
|
+
function markDeleteStarted(error) {
|
|
31116
|
+
try {
|
|
31117
|
+
if (typeof error !== "object" || error === null || !Object.isExtensible(error)) return error;
|
|
31118
|
+
Object.defineProperty(error, DELETE_STARTED, {
|
|
31119
|
+
value: true,
|
|
31120
|
+
enumerable: false,
|
|
31121
|
+
writable: false,
|
|
31122
|
+
configurable: true
|
|
31123
|
+
});
|
|
31124
|
+
} catch {}
|
|
31125
|
+
return error;
|
|
31126
|
+
}
|
|
31127
|
+
function isDeleteStarted(error) {
|
|
31128
|
+
try {
|
|
31129
|
+
let current = error;
|
|
31130
|
+
for (let depth = 0; depth < MAX_DEPTH && typeof current === "object" && current !== null; depth++) {
|
|
31131
|
+
if (current[DELETE_STARTED] === true) return true;
|
|
31132
|
+
current = current.cause;
|
|
31133
|
+
}
|
|
31134
|
+
} catch {}
|
|
31135
|
+
return false;
|
|
31136
|
+
}
|
|
31137
|
+
const REFUSAL_NAMES = /* @__PURE__ */ new Set([
|
|
31138
|
+
"AccessDenied",
|
|
31139
|
+
"AccessDeniedException",
|
|
31140
|
+
"UnauthorizedOperation",
|
|
31141
|
+
"AuthorizationError",
|
|
31142
|
+
"DependencyViolation",
|
|
31143
|
+
"DeleteConflict",
|
|
31144
|
+
"DeleteConflictException"
|
|
31145
|
+
]);
|
|
31146
|
+
function isRefusedByName(error) {
|
|
31147
|
+
try {
|
|
31148
|
+
let current = error;
|
|
31149
|
+
for (let depth = 0; depth < MAX_DEPTH && current != null; depth++) {
|
|
31150
|
+
if (typeof current !== "object") break;
|
|
31151
|
+
const link = current;
|
|
31152
|
+
for (const name of [
|
|
31153
|
+
link.name,
|
|
31154
|
+
link.Code,
|
|
31155
|
+
link.code
|
|
31156
|
+
]) if (typeof name === "string" && REFUSAL_NAMES.has(name)) return true;
|
|
31157
|
+
current = link.cause;
|
|
31158
|
+
}
|
|
31159
|
+
} catch {}
|
|
31160
|
+
return false;
|
|
31161
|
+
}
|
|
31162
|
+
|
|
30623
31163
|
//#endregion
|
|
30624
31164
|
//#region src/provisioning/providers/idempotency-token.ts
|
|
30625
31165
|
const PROCESS_NONCE = randomUUID();
|
|
@@ -32614,7 +33154,11 @@ async function resolveOutputs(template, resources, stackName, digestSource, para
|
|
|
32614
33154
|
};
|
|
32615
33155
|
const outputsPassSecrets = context.recordedSecretValues ?? EMPTY_SECRETS;
|
|
32616
33156
|
const outputsPassInherited = context.inheritedSecrets ?? EMPTY_SECRETS;
|
|
32617
|
-
if (context.recordedSecretValues)
|
|
33157
|
+
if (context.recordedSecretValues) {
|
|
33158
|
+
this.outputsPassSecretMaps.push(context.recordedSecretValues);
|
|
33159
|
+
mirrorInheritedParameterReads(context.recordedSecretValues, this.outputSecrets);
|
|
33160
|
+
if (this.options.inheritedSecrets && this.options.inheritedSecrets.size > 0) inheritNestedStackParameterAssociations(this.outputSecrets, this.options.inheritedSecrets);
|
|
33161
|
+
}
|
|
32618
33162
|
const publishedOutputNames = collectPublishedOutputNames(template.Outputs, conditions);
|
|
32619
33163
|
let outputsPassCompleted = false;
|
|
32620
33164
|
try {
|
|
@@ -34291,24 +34835,25 @@ async function replayDelete(s) {
|
|
|
34291
34835
|
|
|
34292
34836
|
//#endregion
|
|
34293
34837
|
//#region src/deployment/rollback-executor/replay-revert.ts
|
|
34294
|
-
async function replayReadopt(s) {
|
|
34838
|
+
async function replayReadopt(s, survivor) {
|
|
34295
34839
|
const { op, stateResources, stackName, ctx, result, inlinePolicyWriters, afterOp, logger, mask } = s;
|
|
34840
|
+
const oldKind = survivor === void 0 ? "retained" : "surviving";
|
|
34296
34841
|
const current = stateResources[op.logicalId];
|
|
34297
34842
|
const prev = op.previousState;
|
|
34298
34843
|
const oldShown = hasAddressablePhysicalId({ physicalId: prev.physicalId }) ? displaySafe(mask(prev.physicalId)) : "no recorded id";
|
|
34299
34844
|
const unprovenCopyRefusal = (reason) => {
|
|
34300
34845
|
const remedy = orphanRemedy(op.logicalId, ctx);
|
|
34301
|
-
return ownRemedyError(markNonRetryable(new CdkdError(safeMsg`Cannot reverse the replacement of ${shownLogicalId(op.logicalId)} (${refusalResourceType(op.resourceType)}): ` + reason + ` The
|
|
34846
|
+
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)));
|
|
34302
34847
|
};
|
|
34303
34848
|
const opIdUnusable = op.physicalId !== void 0 && !hasAddressablePhysicalId(op);
|
|
34304
34849
|
if (!rollbackRetainsNewResource(current) && rollbackCannotAddress(current, op.resourceType, current.provisionedBy ?? op.provisionedBy, current.physicalId)) {
|
|
34305
34850
|
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.");
|
|
34306
34851
|
const target = op.physicalId === void 0 ? void 0 : refusalPhysicalId(mask(String(op.physicalId)));
|
|
34307
|
-
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
|
|
34308
|
-
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
|
|
34852
|
+
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.` : "");
|
|
34853
|
+
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);
|
|
34309
34854
|
}
|
|
34310
34855
|
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.");
|
|
34311
|
-
logger.info(` Rollback: Reversing replacement of ${safe(op.logicalId)} (${safe(op.resourceType)}) — deleting the new resource and re-adopting the
|
|
34856
|
+
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))})`);
|
|
34312
34857
|
let survivorReason;
|
|
34313
34858
|
const survivorId = retainedSurvivorId(current, op);
|
|
34314
34859
|
if (rollbackRetainsNewResource(current)) {
|
|
@@ -34332,7 +34877,7 @@ async function replayReadopt(s) {
|
|
|
34332
34877
|
recordedNoEchoLeaves: current.noEchoLeaves,
|
|
34333
34878
|
maskSecrets: mask
|
|
34334
34879
|
}));
|
|
34335
|
-
throwIfDeleteSkipped(readoptDelete, op.logicalId, current.physicalId,
|
|
34880
|
+
throwIfDeleteSkipped(readoptDelete, op.logicalId, current.physicalId, `while reversing its replacement (re-adopting the ${oldKind} old resource)`, {
|
|
34336
34881
|
ctx,
|
|
34337
34882
|
stackName,
|
|
34338
34883
|
resourceType: op.resourceType,
|
|
@@ -34341,7 +34886,7 @@ async function replayReadopt(s) {
|
|
|
34341
34886
|
});
|
|
34342
34887
|
}
|
|
34343
34888
|
stateResources[op.logicalId] = prev;
|
|
34344
|
-
logger.info(` Rollback: ${safe(op.logicalId)} restored to the
|
|
34889
|
+
logger.info(` Rollback: ${safe(op.logicalId)} restored to the ${oldKind} old resource`);
|
|
34345
34890
|
await afterOp?.(op.logicalId);
|
|
34346
34891
|
const survivorProvisionedBy = current.provisionedBy;
|
|
34347
34892
|
ctx.recordEvent?.({
|
|
@@ -34351,9 +34896,10 @@ async function replayReadopt(s) {
|
|
|
34351
34896
|
logicalId: op.logicalId,
|
|
34352
34897
|
resourceType: op.resourceType,
|
|
34353
34898
|
...op.provisionedBy && { provisionedBy: op.provisionedBy },
|
|
34899
|
+
...survivorReason === void 0 && survivor !== void 0 && { reason: mask(survivor.reason) },
|
|
34354
34900
|
...survivorReason !== void 0 && {
|
|
34355
34901
|
...survivorId !== void 0 && { physicalId: survivorId },
|
|
34356
|
-
reason: mask(survivorReason),
|
|
34902
|
+
reason: mask(survivor === void 0 ? survivorReason : `${survivorReason}; ${survivor.reason}`),
|
|
34357
34903
|
...survivorProvisionedBy && { provisionedBy: survivorProvisionedBy }
|
|
34358
34904
|
}
|
|
34359
34905
|
});
|
|
@@ -34455,6 +35001,54 @@ async function replayRevert(s) {
|
|
|
34455
35001
|
});
|
|
34456
35002
|
}
|
|
34457
35003
|
|
|
35004
|
+
//#endregion
|
|
35005
|
+
//#region src/deployment/rollback-executor/replaced-survivor.ts
|
|
35006
|
+
function replacedDeleteFailureVerdict(error) {
|
|
35007
|
+
if (isDeleteStarted(error)) return "unconfirmed";
|
|
35008
|
+
return isRefusedByName(error) ? "kept" : "unconfirmed";
|
|
35009
|
+
}
|
|
35010
|
+
const REPLACED_SURVIVOR_PROBE_TIMEOUT_MS = 3e4;
|
|
35011
|
+
const INTERRUPT_POLL_MS = 250;
|
|
35012
|
+
async function probeReplacedSurvivor(s, oldType, timeoutMs = REPLACED_SURVIVOR_PROBE_TIMEOUT_MS) {
|
|
35013
|
+
if (s.isInterrupted?.() === true) return "interrupted";
|
|
35014
|
+
let timer;
|
|
35015
|
+
let poll;
|
|
35016
|
+
const stopped = new Promise((resolve) => {
|
|
35017
|
+
timer = setTimeout(() => resolve("unknown"), timeoutMs);
|
|
35018
|
+
if (s.isInterrupted !== void 0) {
|
|
35019
|
+
const interrupted = s.isInterrupted;
|
|
35020
|
+
poll = setInterval(() => {
|
|
35021
|
+
if (interrupted()) resolve("interrupted");
|
|
35022
|
+
}, INTERRUPT_POLL_MS);
|
|
35023
|
+
}
|
|
35024
|
+
});
|
|
35025
|
+
try {
|
|
35026
|
+
return await Promise.race([readSurvivor(s, oldType), stopped]);
|
|
35027
|
+
} finally {
|
|
35028
|
+
clearTimeout(timer);
|
|
35029
|
+
clearInterval(poll);
|
|
35030
|
+
}
|
|
35031
|
+
}
|
|
35032
|
+
async function readSurvivor(s, oldType) {
|
|
35033
|
+
const prev = s.op.previousState;
|
|
35034
|
+
const physicalId = prev?.physicalId;
|
|
35035
|
+
if (typeof physicalId !== "string" || physicalId === "") return "unknown";
|
|
35036
|
+
try {
|
|
35037
|
+
const { provider } = s.ctx.providerRegistry.getProviderFor({
|
|
35038
|
+
resourceType: oldType,
|
|
35039
|
+
provisionedBy: prev?.provisionedBy
|
|
35040
|
+
});
|
|
35041
|
+
if (typeof provider.readCurrentState !== "function") return "unreadable";
|
|
35042
|
+
const read = await withReplayDeletePrinting(s, () => provider.readCurrentState(physicalId, s.op.logicalId, oldType, prev?.properties));
|
|
35043
|
+
if (read === RESOURCE_NOT_FOUND) return "gone";
|
|
35044
|
+
if (read === void 0) return "unreadable";
|
|
35045
|
+
if (typeof read !== "object" || read === null || Array.isArray(read)) return "unknown";
|
|
35046
|
+
return Object.keys(read).length > 0 ? "exists" : "unreadable";
|
|
35047
|
+
} catch {
|
|
35048
|
+
return "unknown";
|
|
35049
|
+
}
|
|
35050
|
+
}
|
|
35051
|
+
|
|
34458
35052
|
//#endregion
|
|
34459
35053
|
//#region src/deployment/rollback-executor/replay-reverse-replacement.ts
|
|
34460
35054
|
async function replayReverseReplacement(s) {
|
|
@@ -34464,6 +35058,18 @@ async function replayReverseReplacement(s) {
|
|
|
34464
35058
|
const oldTypeRouting = resolveReplacementOldType(op);
|
|
34465
35059
|
if (!oldTypeRouting.ok) throw unroutableReplacementError(op, oldTypeRouting.reason, ctx);
|
|
34466
35060
|
const oldType = oldTypeRouting.oldType;
|
|
35061
|
+
if (op.oldResourceMaySurvive !== void 0) {
|
|
35062
|
+
const survivor = await probeReplacedSurvivor(s, oldType);
|
|
35063
|
+
if (survivor === "exists" && op.oldResourceMaySurvive !== "kept") throw survivorUnprovenRefusal(s, oldType, "maybe-deleting");
|
|
35064
|
+
if (survivor === "exists") {
|
|
35065
|
+
const oldShown = refusalPhysicalId(mask(String(prev.physicalId)));
|
|
35066
|
+
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)}`);
|
|
35067
|
+
result.warnings++;
|
|
35068
|
+
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" });
|
|
35069
|
+
}
|
|
35070
|
+
if (survivor !== "gone") throw survivorUnprovenRefusal(s, oldType, survivor);
|
|
35071
|
+
logger.info(safeMsg` Rollback: the old resource of ${safe(op.logicalId)} (${mask(String(prev.physicalId))}) is gone — re-creating it`);
|
|
35072
|
+
}
|
|
34467
35073
|
const typeChanged = oldType !== op.resourceType;
|
|
34468
35074
|
if (!requireRestorableBaseline(prev.properties, logger, {
|
|
34469
35075
|
logicalId: op.logicalId,
|
|
@@ -34713,6 +35319,15 @@ async function deleteMarkedRecreate(error, s) {
|
|
|
34713
35319
|
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`);
|
|
34714
35320
|
return false;
|
|
34715
35321
|
}
|
|
35322
|
+
function survivorUnprovenRefusal(s, oldType, verdict) {
|
|
35323
|
+
const { op, ctx, mask } = s;
|
|
35324
|
+
const remedy = orphanRemedy(op.logicalId, ctx);
|
|
35325
|
+
const oldId = op.previousState?.physicalId;
|
|
35326
|
+
const oldShown = hasAddressablePhysicalId({ physicalId: oldId }) ? refusalPhysicalId(mask(String(oldId))) : "no recorded id";
|
|
35327
|
+
const rerun = rerunRollbackPhrase(ctx, "cdkd rollback");
|
|
35328
|
+
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. A refused delete is not running, so waiting does not help: if its delete was refused, delete it by hand, then re-run ${rerun}`;
|
|
35329
|
+
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")));
|
|
35330
|
+
}
|
|
34716
35331
|
|
|
34717
35332
|
//#endregion
|
|
34718
35333
|
//#region src/provisioning/remove-protection-types.ts
|
|
@@ -35760,7 +36375,7 @@ function displacedOpClause(op, marks, logger) {
|
|
|
35760
36375
|
const retainedOld = retainedOldPhysicalId(op);
|
|
35761
36376
|
if (retainedOld !== void 0 && marks.some((m) => isMarkFor(m, op))) {
|
|
35762
36377
|
const shownOld = displacedPhysicalIdShown(op, logger, retainedOld);
|
|
35763
|
-
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`;
|
|
36378
|
+
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`;
|
|
35764
36379
|
}
|
|
35765
36380
|
const shownId = displacedPhysicalIdShown(op, logger);
|
|
35766
36381
|
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";
|
|
@@ -37454,6 +38069,7 @@ async function deleteReplacedAfterCreate(logicalId, oldResourceType, currentReso
|
|
|
37454
38069
|
} catch (deleteError) {
|
|
37455
38070
|
const deleteMsg = maskSecretsInText(deleteError instanceof Error ? deleteError.message : String(deleteError), secrets);
|
|
37456
38071
|
deleteFailed = true;
|
|
38072
|
+
this.replacedOldMaySurvive.set(logicalId, this.replacedOldMaySurvive.get(logicalId) === "unconfirmed" ? "unconfirmed" : replacedDeleteFailureVerdict(deleteError));
|
|
37457
38073
|
const deferred = this.deferredReplacedDeletes;
|
|
37458
38074
|
if (!isRetry && deferred !== void 0) {
|
|
37459
38075
|
this.logger.info(safeMsg` Could not delete old ${logicalId} (${currentResource.physicalId}) yet: ${deleteMsg}. Retrying after the rest of the deploy.`);
|
|
@@ -37475,9 +38091,13 @@ async function deleteReplacedAfterCreate(logicalId, oldResourceType, currentReso
|
|
|
37475
38091
|
});
|
|
37476
38092
|
const skipReason = deleteSkipReason(deleteResult);
|
|
37477
38093
|
if (skipReason !== void 0) {
|
|
38094
|
+
this.replacedOldMaySurvive.set(logicalId, "unconfirmed");
|
|
37478
38095
|
this.replacedDeleteSkips.set(logicalId, `the replaced ${oldResourceType} (${currentResource.physicalId}) was not deleted (${skipReason}) and is no longer tracked by cdkd`);
|
|
37479
38096
|
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.`);
|
|
37480
|
-
} else if (!deleteFailed)
|
|
38097
|
+
} else if (!deleteFailed) {
|
|
38098
|
+
if (isRetry) this.replacedOldMaySurvive.delete(logicalId);
|
|
38099
|
+
this.logger.info(isRetry ? safeMsg` ${green("✓")} Old ${logicalId} (${currentResource.physicalId}) deleted` : safeMsg` ${green("✓")} Old resource deleted`);
|
|
38100
|
+
}
|
|
37481
38101
|
}
|
|
37482
38102
|
async function retryDeferredReplacedDeletes(stackName, counts) {
|
|
37483
38103
|
const deferred = this.deferredReplacedDeletes;
|
|
@@ -37619,6 +38239,19 @@ function isHealEligible(logicalId, resource) {
|
|
|
37619
38239
|
const loaded = Object.hasOwn(this.healBaseline, logicalId) ? this.healBaseline[logicalId] : void 0;
|
|
37620
38240
|
return loaded !== void 0 && loaded.physicalId === resource.physicalId && loaded.attributes === resource.attributes && !isHealExcludedType(resource.resourceType);
|
|
37621
38241
|
}
|
|
38242
|
+
const healJudges = /* @__PURE__ */ new WeakMap();
|
|
38243
|
+
function healPrintingBag(baseline, logicalId, resource) {
|
|
38244
|
+
if (!Object.hasOwn(baseline, logicalId) || baseline[logicalId] !== resource) return secretNamePrintingBag(logicalId, {
|
|
38245
|
+
...baseline,
|
|
38246
|
+
[logicalId]: resource
|
|
38247
|
+
});
|
|
38248
|
+
let judge = healJudges.get(baseline);
|
|
38249
|
+
if (judge === void 0) {
|
|
38250
|
+
judge = secretNamePrintingBags(baseline, void 0);
|
|
38251
|
+
healJudges.set(baseline, judge);
|
|
38252
|
+
}
|
|
38253
|
+
return judge(logicalId);
|
|
38254
|
+
}
|
|
37622
38255
|
async function readStaleAttributes(logicalId, resource, stackName) {
|
|
37623
38256
|
const { provider } = this.providerRegistry.getProviderFor({
|
|
37624
38257
|
resourceType: resource.resourceType,
|
|
@@ -37626,13 +38259,13 @@ async function readStaleAttributes(logicalId, resource, stackName) {
|
|
|
37626
38259
|
provisionedBy: resource.provisionedBy,
|
|
37627
38260
|
previousProperties: resource.properties
|
|
37628
38261
|
});
|
|
37629
|
-
const outcome = await readRecordAttributes({
|
|
38262
|
+
const outcome = await withPrintingSecrets(healPrintingBag(this.healBaseline, logicalId, resource), () => readRecordAttributes({
|
|
37630
38263
|
provider,
|
|
37631
38264
|
logicalId,
|
|
37632
38265
|
resource,
|
|
37633
38266
|
stackName,
|
|
37634
38267
|
region: this.stackRegion
|
|
37635
|
-
});
|
|
38268
|
+
}));
|
|
37636
38269
|
if (outcome.kind !== "read") return outcome;
|
|
37637
38270
|
const { attributes } = outcome;
|
|
37638
38271
|
if (Object.keys(attributes).length > 0) this.healedAttributes.set(logicalId, {
|
|
@@ -39203,7 +39836,7 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39203
39836
|
this.logger.debug(maskSecrets(`Added/updated ${tagsToAdd.length} tag(s) on DynamoDB GlobalTable ${tableArn}`));
|
|
39204
39837
|
}
|
|
39205
39838
|
}
|
|
39206
|
-
async applyAutoScalingDiff(tableName, dimension, oldSettings, newSettings, client, indexName, budget, maskSecrets = (text) => text) {
|
|
39839
|
+
async applyAutoScalingDiff(tableName, dimension, oldSettings, newSettings, client, indexName, budget, maskSecrets = (text) => text, progress) {
|
|
39207
39840
|
const warn = (message) => this.logger.warn(maskSecrets(message));
|
|
39208
39841
|
const asMaxRetries = autoScalingRetriesWithinDeleteBudget(budget, 8);
|
|
39209
39842
|
const metricType = dimension.endsWith("WriteCapacityUnits") ? "DynamoDBWriteCapacityUtilization" : "DynamoDBReadCapacityUtilization";
|
|
@@ -39303,8 +39936,10 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39303
39936
|
onInterrupted: watch.onInterrupted,
|
|
39304
39937
|
...autoScalingRetryDelays.sleep ? { sleep: autoScalingRetryDelays.sleep } : {}
|
|
39305
39938
|
});
|
|
39939
|
+
if (progress) progress.stripped = true;
|
|
39306
39940
|
} catch (err) {
|
|
39307
39941
|
if (isInterruptedWaitError(err)) throw err;
|
|
39942
|
+
if (progress && !isObjectNotFound(err) && !isRefusedByName(err)) progress.stripped = true;
|
|
39308
39943
|
if (!isObjectNotFound(err)) warn(`Could not delete auto-scaling policy on ${tableName} (${dimension}): ${describeAwsFailure(err).detail}. Run: ${pasteableAwsCommand(maskSecrets)`aws application-autoscaling delete-scaling-policy --policy-name ${policyName} --service-namespace dynamodb --resource-id ${resourceId} --scalable-dimension ${dimension}`.render()}`);
|
|
39309
39944
|
}
|
|
39310
39945
|
try {
|
|
@@ -39319,9 +39954,11 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39319
39954
|
onInterrupted: watch.onInterrupted,
|
|
39320
39955
|
...autoScalingRetryDelays.sleep ? { sleep: autoScalingRetryDelays.sleep } : {}
|
|
39321
39956
|
});
|
|
39957
|
+
if (progress) progress.stripped = true;
|
|
39322
39958
|
this.logger.debug(maskSecrets(`Deregistered auto-scaling target ${resourceId} (${dimension})`));
|
|
39323
39959
|
} catch (err) {
|
|
39324
39960
|
if (isInterruptedWaitError(err)) throw err;
|
|
39961
|
+
if (progress && !isObjectNotFound(err) && !isRefusedByName(err)) progress.stripped = true;
|
|
39325
39962
|
if (!isObjectNotFound(err)) warn(`Could not deregister auto-scaling target on ${tableName} (${dimension}): ${describeAwsFailure(err).detail}. Run: ${pasteableAwsCommand(maskSecrets)`aws application-autoscaling deregister-scalable-target --service-namespace dynamodb --resource-id ${resourceId} --scalable-dimension ${dimension}`.render()}`);
|
|
39326
39963
|
}
|
|
39327
39964
|
} finally {
|
|
@@ -39409,9 +40046,11 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39409
40046
|
}
|
|
39410
40047
|
async delete(logicalId, physicalId, resourceType, _properties, context) {
|
|
39411
40048
|
const flip = this.protectionFlips.acquire(deleteBudgetKey(physicalId, context?.expectedRegion), DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS, resolveDynamoDbDeleteBudgetClock());
|
|
40049
|
+
const progress = { stripped: false };
|
|
39412
40050
|
try {
|
|
39413
|
-
await this.deleteGlobalTableResource(logicalId, physicalId, resourceType, context, flip);
|
|
40051
|
+
await this.deleteGlobalTableResource(logicalId, physicalId, resourceType, context, flip, progress);
|
|
39414
40052
|
} catch (error) {
|
|
40053
|
+
if (progress.stripped) markDeleteStarted(error);
|
|
39415
40054
|
let outcome = "failed";
|
|
39416
40055
|
try {
|
|
39417
40056
|
outcome = await compensateRemovedDeletionProtection({
|
|
@@ -39434,7 +40073,7 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39434
40073
|
throw error;
|
|
39435
40074
|
}
|
|
39436
40075
|
}
|
|
39437
|
-
async deleteGlobalTableResource(logicalId, physicalId, resourceType, context, flip) {
|
|
40076
|
+
async deleteGlobalTableResource(logicalId, physicalId, resourceType, context, flip, progress) {
|
|
39438
40077
|
const deleteMask = context?.maskSecrets ?? ((text) => text);
|
|
39439
40078
|
const shownTable = deleteMask(physicalId);
|
|
39440
40079
|
this.logger.debug(deleteMask(`Deleting DynamoDB GlobalTable ${logicalId}: ${shownTable}`));
|
|
@@ -39477,23 +40116,24 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39477
40116
|
const region = replica.RegionName;
|
|
39478
40117
|
if (!region || region === currentRegion) continue;
|
|
39479
40118
|
try {
|
|
39480
|
-
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:ReadCapacityUnits", {}, void 0, this.getRegionalAutoScalingClient(region), void 0, budget);
|
|
39481
|
-
for (const indexName of tableIndexNames) await this.applyAutoScalingDiff(physicalId, "dynamodb:index:ReadCapacityUnits", {}, void 0, this.getRegionalAutoScalingClient(region), indexName, budget);
|
|
40119
|
+
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:ReadCapacityUnits", {}, void 0, this.getRegionalAutoScalingClient(region), void 0, budget, void 0, progress);
|
|
40120
|
+
for (const indexName of tableIndexNames) await this.applyAutoScalingDiff(physicalId, "dynamodb:index:ReadCapacityUnits", {}, void 0, this.getRegionalAutoScalingClient(region), indexName, budget, void 0, progress);
|
|
39482
40121
|
await this.dynamoDBClient.send(new UpdateTableCommand({
|
|
39483
40122
|
TableName: physicalId,
|
|
39484
40123
|
ReplicaUpdates: [{ Delete: { RegionName: region } }]
|
|
39485
40124
|
}));
|
|
40125
|
+
progress.stripped = true;
|
|
39486
40126
|
await this.waitForReplicaGone(physicalId, region, logicalId, REPLICA_GONE_WAIT_ATTEMPTS, budget, context?.maskSecrets);
|
|
39487
40127
|
} catch (replicaErr) {
|
|
39488
40128
|
if (!(replicaErr instanceof ResourceNotFoundException$1)) throw replicaErr;
|
|
39489
40129
|
}
|
|
39490
40130
|
}
|
|
39491
40131
|
const localAsClient = await this.getLocalAutoScalingClient();
|
|
39492
|
-
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:ReadCapacityUnits", {}, void 0, localAsClient, void 0, budget);
|
|
39493
|
-
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:WriteCapacityUnits", {}, void 0, localAsClient, void 0, budget);
|
|
40132
|
+
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:ReadCapacityUnits", {}, void 0, localAsClient, void 0, budget, void 0, progress);
|
|
40133
|
+
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:WriteCapacityUnits", {}, void 0, localAsClient, void 0, budget, void 0, progress);
|
|
39494
40134
|
for (const indexName of tableIndexNames) {
|
|
39495
|
-
await this.applyAutoScalingDiff(physicalId, "dynamodb:index:WriteCapacityUnits", {}, void 0, localAsClient, indexName, budget);
|
|
39496
|
-
await this.applyAutoScalingDiff(physicalId, "dynamodb:index:ReadCapacityUnits", {}, void 0, localAsClient, indexName, budget);
|
|
40135
|
+
await this.applyAutoScalingDiff(physicalId, "dynamodb:index:WriteCapacityUnits", {}, void 0, localAsClient, indexName, budget, void 0, progress);
|
|
40136
|
+
await this.applyAutoScalingDiff(physicalId, "dynamodb:index:ReadCapacityUnits", {}, void 0, localAsClient, indexName, budget, void 0, progress);
|
|
39497
40137
|
}
|
|
39498
40138
|
} catch (describeErr) {
|
|
39499
40139
|
if (describeErr instanceof ProvisioningError) throw describeErr;
|
|
@@ -42695,7 +43335,7 @@ const REMEDY = "To move a custom resource to a different handler, give it a new
|
|
|
42695
43335
|
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.`;
|
|
42696
43336
|
function renderServiceTokenRefusal(refusals, stackName, mask = (text) => text) {
|
|
42697
43337
|
const rows = refusals.map((refusal) => ` - ${rowText(refusal, mask)}`);
|
|
42698
|
-
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.
|
|
43338
|
+
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.
|
|
42699
43339
|
${rows.join("\n")}\n ${REMEDY}` + (refusals.some((refusal) => refusal.kind === "unjudgeable") ? `\n ${UNJUDGEABLE_REMEDY}` : "");
|
|
42700
43340
|
}
|
|
42701
43341
|
function serviceTokenBlockingReason(refusal, mask) {
|
|
@@ -42741,7 +43381,7 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
|
|
|
42741
43381
|
const existingState = stateResources[logicalId];
|
|
42742
43382
|
const renderer = getLiveRenderer();
|
|
42743
43383
|
const currentResource = existingState;
|
|
42744
|
-
if (!currentResource) throw new Error(`Cannot update ${logicalId}: resource not found in state`);
|
|
43384
|
+
if (!currentResource) throw new Error(safeMsg`Cannot update ${logicalId}: resource not found in state`);
|
|
42745
43385
|
const oldResourceType = currentResource.resourceType;
|
|
42746
43386
|
const typeChanged = oldResourceType !== resourceType;
|
|
42747
43387
|
const desiredProps = change.desiredProperties || {};
|
|
@@ -42984,7 +43624,7 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
|
|
|
42984
43624
|
applyAttributeOnlyUpdate(change.attributeChanges);
|
|
42985
43625
|
return;
|
|
42986
43626
|
}
|
|
42987
|
-
this.logger.debug(`Skipping ${logicalId}: no actual changes after intrinsic function resolution`);
|
|
43627
|
+
this.logger.debug(safeMsg`Skipping ${logicalId}: no actual changes after intrinsic function resolution`);
|
|
42988
43628
|
if (counts) counts.skipped++;
|
|
42989
43629
|
return;
|
|
42990
43630
|
}
|
|
@@ -43249,7 +43889,7 @@ function unwrittenCreateOnlyRefusal(input) {
|
|
|
43249
43889
|
const keep = [.../* @__PURE__ */ new Set([...unwritten, ...routeDriving])].sort((a, b) => a.localeCompare(b)).map((property) => `${resourceType}:${property}`).join(",");
|
|
43250
43890
|
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)`;
|
|
43251
43891
|
const routed = [...routeDriving].sort((a, b) => a.localeCompare(b)).join(", ");
|
|
43252
|
-
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}.`;
|
|
43892
|
+
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}.`;
|
|
43253
43893
|
}
|
|
43254
43894
|
function scalarLeavesOf(value, into = /* @__PURE__ */ new Set()) {
|
|
43255
43895
|
if (typeof value === "string") into.add(value);
|
|
@@ -43494,6 +44134,7 @@ async function updateByReplacement({ change, counts, currentProps, currentResour
|
|
|
43494
44134
|
} catch (snapshotError) {
|
|
43495
44135
|
if (snapshotError instanceof CdkdError && snapshotError.code === "FINAL_SNAPSHOT_UNSUPPORTED") throw snapshotError;
|
|
43496
44136
|
snapshotBlockedDelete = true;
|
|
44137
|
+
this.replacedOldMaySurvive.set(logicalId, "kept");
|
|
43497
44138
|
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.");
|
|
43498
44139
|
}
|
|
43499
44140
|
if (!snapshotBlockedDelete) await this.deleteReplacedAfterCreate(logicalId, oldResourceType, currentResource, oldDeleteProvider, currentResource.properties, cleanupFinalSnapshotId, updateReplacePolicy, updateSecrets, oldDeleteRoute.provisionedBy, noEchoDeleteValues);
|
|
@@ -43604,6 +44245,7 @@ async function updateInPlace({ conditions, counts, currentProps, currentPropsAsW
|
|
|
43604
44245
|
...removal.context
|
|
43605
44246
|
})), logicalId, void 0, void 0, updateProvider);
|
|
43606
44247
|
if (result.sentNothing === true) this.updatesThatSentNothing.add(logicalId);
|
|
44248
|
+
if (result.wasReplaced === true && result.outcome === "partial") this.replacedOldMaySurvive.set(logicalId, result.oldResourceSurvivor === "kept" ? "kept" : "unconfirmed");
|
|
43607
44249
|
result = withoutInjectedRemovals(result, removal.injected);
|
|
43608
44250
|
if (removal.unhandled.length > 0) this.logger.warn(removalWarning(logicalId, resourceType, removal.unhandled));
|
|
43609
44251
|
} catch (updateError) {
|
|
@@ -44566,6 +45208,7 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
44566
45208
|
oldResourceRetained: this.retainedOldOnReplacement.has(logicalId),
|
|
44567
45209
|
oldDeletedBeforeCreate: this.oldDeletedBeforeCreate.has(logicalId)
|
|
44568
45210
|
},
|
|
45211
|
+
...change.changeType === "UPDATE" && this.replacedOldMaySurvive.has(logicalId) && { oldResourceMaySurvive: this.replacedOldMaySurvive.get(logicalId) },
|
|
44569
45212
|
...change.changeType === "UPDATE" && this.updateWasReplaced.has(logicalId) && { wasReplaced: this.updateWasReplaced.get(logicalId) },
|
|
44570
45213
|
...change.changeType === "UPDATE" && previousState !== void 0 && { previousResourceType: previousState.resourceType }
|
|
44571
45214
|
});
|
|
@@ -44626,7 +45269,16 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
44626
45269
|
if (this.interrupted && this.hasPending(deleteExecutor)) throw new InterruptedError(this.interruptCause ?? "user");
|
|
44627
45270
|
}
|
|
44628
45271
|
if (this.interrupted) this.warnUnretriedReplacedDeletes("interrupted");
|
|
44629
|
-
else
|
|
45272
|
+
else try {
|
|
45273
|
+
await this.retryDeferredReplacedDeletes(stackName, actualCounts);
|
|
45274
|
+
} finally {
|
|
45275
|
+
for (const op of completedOperations) {
|
|
45276
|
+
if (op.changeType !== "UPDATE") continue;
|
|
45277
|
+
const verdict = this.replacedOldMaySurvive.get(op.logicalId);
|
|
45278
|
+
if (verdict !== void 0) op.oldResourceMaySurvive = verdict;
|
|
45279
|
+
else delete op.oldResourceMaySurvive;
|
|
45280
|
+
}
|
|
45281
|
+
}
|
|
44630
45282
|
} catch (error) {
|
|
44631
45283
|
this.warnUnretriedReplacedDeletes(this.interruptCause === "user" ? "interrupted" : "failed");
|
|
44632
45284
|
const initialDeploy = currentEtag === void 0;
|
|
@@ -46848,6 +47500,7 @@ var DeployEngine = class {
|
|
|
46848
47500
|
generatedNameGuard;
|
|
46849
47501
|
liveTaskLabels = /* @__PURE__ */ new Map();
|
|
46850
47502
|
retainedOldOnReplacement = /* @__PURE__ */ new Set();
|
|
47503
|
+
replacedOldMaySurvive = /* @__PURE__ */ new Map();
|
|
46851
47504
|
recreatedUnderSameId = /* @__PURE__ */ new Set();
|
|
46852
47505
|
restoredLostChildren = /* @__PURE__ */ new Set();
|
|
46853
47506
|
updatesThatSentNothing = /* @__PURE__ */ new Set();
|
|
@@ -46924,6 +47577,7 @@ var DeployEngine = class {
|
|
|
46924
47577
|
this.outputsSourceUsable = true;
|
|
46925
47578
|
this.skippedOutputs = void 0;
|
|
46926
47579
|
this.retainedOldOnReplacement = /* @__PURE__ */ new Set();
|
|
47580
|
+
this.replacedOldMaySurvive = /* @__PURE__ */ new Map();
|
|
46927
47581
|
this.recreatedUnderSameId = /* @__PURE__ */ new Set();
|
|
46928
47582
|
this.restoredLostChildren = /* @__PURE__ */ new Set();
|
|
46929
47583
|
this.updatesThatSentNothing = /* @__PURE__ */ new Set();
|
|
@@ -47196,5 +47850,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
|
|
|
47196
47850
|
DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
|
|
47197
47851
|
|
|
47198
47852
|
//#endregion
|
|
47199
|
-
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 };
|
|
47200
|
-
//# sourceMappingURL=deploy-engine-
|
|
47853
|
+
export { S3_AUTO_DELETE_OBJECTS_TAG as $, withheldAccountClause as $a, getDockerImageBySourceHash as $c, isReadableResourceEntry as $i, findDestructiveChanges as $n, literalSplitDelimitersOf as $o, applyRoleArnIfSet as $r, splitImportedOps as $s, recordUnderIdIsNotOwn as $t, diffSecurity as A, refuseMalformedResourceEntries as Aa, buildDenyExternalAccessPolicy as Ac, isNamelessDynamicReferenceError as Ai, hasOwnKey as Al, DEFAULT_RESOURCE_TIMEOUT_MS as An, withRetry as Ao, CloudControlProvider as Ar, provenPublicValue as As, withNestedStackContext as At, readProtection as B, refuseMalformedResourcesForDeploy as Ba, isDockerClientEnvKey as Bc, declaresNoEcho as Bi, injectedAwsRegionValue as Bl, storedSecretNameNeedles as Bn, maskWholeValue as Bo, markWaitAbandoned as Br, TEMPLATE_SOURCED_RULES as Bs, awaitInFlightSibling as Bt, withApiLimit as C, refuseMalformedOrphanRecordsForDestroy as Ca, ensureAssetStorage as Cc, coerceParameterTypedValue as Ci, PARTITION_TABLE as Cl, exportNameSecretExposure as Cn, replayWarn as Co, readsNoEchoDeleteValues as Cr, recordNestedStackParameterExpressions as Cs, nestedChildStackName as Ct, findServiceTokenRefusals as D, refuseMalformedOutputs as Da, readBootstrapMarkerBody as Dc, isImpossibleEmptyStoredAttribute as Di, StageLoadError as Dl, collectPublishedOutputNames as Dn, prefetchCreateOnlyPropertyPaths as Do, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Dr, recordPhysicalNameCopy as Ds, withNestedRevertRun as Dt, deferredServiceTokenWarning as E, refuseMalformedOrphansForOrphan as Ea, parseBootstrapMarker as Ec, getAccountInfo as Ei, AssemblyReader as El, collectDeclaredOutputNames as En, requireConfigString as Eo, withPrintingSecrets as Er, recordAttributeIdCopy as Es, revertedNestedRowIds as Et, recordedProtectionEvidence as F, refuseMalformedResourceEntriesForOrphan as Fa, describeDockerFailure as Fc, refStateLookupFromResource as Fi, describeFileReadFailure as Fl, orphanRecordsPrintingBag as Fn, TemplateParser as Fo, deleteIndeterminateGuards as Fr, recordProvenPublicExpression as Fs, loadJournaledOrphans as Ft, deleteBudgetKey as G, repairMalformedOrphansForReadOnly as Ga, redactedDockerCause as Gc, UNREADABLE_RESOURCES_MAP_ROW as Gi, ccRoutedFinalSnapshotError as Gn, passedNoEchoParametersOf as Go, reDisableInstanceApiTermination as Gr, S3StateBackend as Gs, replacedDeleteFailureVerdict as Gt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as H, refuseMalformedResourcesForExport as Ha, partitionSensitiveEnv as Hc, STATE_REGION_DIVERGED as Hi, resolveBucketRegion as Hl, ATOMIC_FINAL_SNAPSHOT_TYPES as Hn, noEchoCoordinatesOf as Ho, ec2InstanceProtectionSite as Hr, isSingleDynamicReferenceToken as Hs, getStackRecords as Ht, recordedProtectionNote as I, refuseMalformedResourcePropertiesForDestroy as Ia, dockerSpawnEnvWithSensitive as Ic, parseWebACLArn as Ii, displayAssemblyPath as Il, secretNamePrintingBag as In, canonicalCoordinates as Io, deleteLeftInPlace as Ir, wholeStringLeavesOf as Is, makeForeignHolderScan as It, DELETE_INDEX_WAIT_PROCEED_NOTE as J, repairMalformedResourcePropertiesForReadOnly as Ja, warnFinchArgvExposure as Jc, displayLogicalId as Ji, isFinalSnapshotError as Jn, valueAtCoordinate as Jo, INTRINSIC_KEYS as Jr, CrossPrefixScanCache as Js, isJournaledOrphan as Jt, resolveDynamoDbDeleteBudgetClock as K, repairMalformedOutputsForReadOnly as Ka, runDockerForeground as Kc, accountArgs as Ki, createPreDeleteFinalSnapshot as Kn, readbackPathFor as Ko, reEnableInstanceApiTermination as Kr, rebuildClientForBucketRegion as Ks, recordAfterRollbackUpdate as Kt, PROTECTION_PROPERTY_BY_TYPE as L, refuseMalformedResourcePropertiesForDrift as La, finchSecretArgvRefusal as Lc, withSharedDrainBudget as Li, renderAssemblyPathEscape as Ll, secretNamePrintingBags as Ln, isMarkedCoordinate as Lo, deleteSkipReason as Lr, STATE_SOURCED_BASELINE_RULES as Ls, sameJournaledOrphans as Lt, noEchoComparisonForTemplate as M, refuseMalformedResourceEntriesForDestroy as Ma, resolveDockerContextDirectory as Mc, AWS_NO_VALUE as Mi, nullPrototypeRecord as Ml, completedReplayEntries as Mn, lambdaFunctionNameForMask as Mo, unchangedBehindSecretReference as Mr, recordMaskOnlyValuesIn as Ms, dropFailedHint as Mt, noEchoExactEchoLeavesOf as N, refuseMalformedResourceEntriesForImport as Na, describeDockerCapturedOutput as Nc, cfnRefValueFromPhysicalId as Ni, ownValue as Nl, journaledOrphanPrintingBag as Nn, sameLambdaFunctionAddress as No, RollbackInlinePolicyWriters as Nr, recordNoEchoAttributeValues as Ns, isHandledOrphan as Nt, serviceTokenBlockingReason as O, refuseMalformedOutputsForDestroy as Oa, validateAssetBucketName as Oc, carriesDynamicReference as Oi, processStackMessages as Ol, isExportAliasCollision as On, templateResourceTypes as Oo, applyCustomResourceResponseExpiration as Or, splitGetAttStringForm as Os, collectNestedChildUnaddressed as Ot, noEchoParameterNamesOf as P, refuseMalformedResourceEntriesForImportSave as Pa, describeDockerExecFailure as Pc, isStalePlaceholderArnAttribute as Pi, absoluteAssemblyPathEscape as Pl, maskEventTextWithBoundBags as Pn, DagBuilder as Po, UNSPECIFIED_SKIP_REASON as Pr, recordNoEchoParameterFreshValue as Ps, journaledOrphanLines as Pt, ECR_AUTO_DELETE_IMAGES_TAG as Q, unreadableResourceEntries as Qa, AssetManifestLoader as Qc, isReadableOrphanRecord as Qi, constructPathOf as Qn, hasMaskableValues as Qo, refuseUnreadableCdkCrossAccountRefs as Qr, isNotImplemented as Qs, recheckFailedPlan as Qt, isProtectionValueActive as R, refuseMalformedResourcePropertiesForExport as Ra, formatDockerLoginError as Rc, parameterInputsFor as Ri, resolveAssemblyPath as Rl, secretNamedRecordNeedles as Rn, maskAtCoordinates as Ro, withIndeterminateGuard as Rr, STATE_SOURCED_CROSS_GENERATION_RULES as Rs, replayFailedOperations as Rt, lookupEachName as S, refuseMalformedOrphanRecords as Sa, assertAssetBucketRegion as Sc, regionLessSecretName as Si, expectedOwnerParam as Sl, exportNameNoEchoParameters as Sn, readConfigString as So, TemplateNoEchoReresolver as Sr, inheritNestedStackParameterAssociations as Ss, getNestedRevertRun as St, recordRetainedForReadoption as T, refuseMalformedOrphansForDestroy as Ta, isCrossRegionRedirect as Tc, parameterTypeMayLoseSecretIdentity as Ti, derivePartitionAndUrlSuffix as Tl, noEchoParameterValueSeed as Tn, requireConfigObject as To, getCurrentResourceSecrets as Tr, physicalNameCopiesOf as Ts, revertNestedChildFromJournal as Tt, beginDeleteWait as U, refuseMalformedState as Ua, redactDockerArgvValues as Uc, STATE_RESOURCES_MALFORMED as Ui, PRE_DELETE_SNAPSHOT_TYPES as Un, noEchoLeavesOf as Uo, isTerminationProtectionPropagationError as Ur, LockManager as Us, withStackRecords as Ut, DynamoDBGlobalTableProvider as V, refuseMalformedResourcesForDestroy as Va, isMalformedEnvKey as Vc, JSON_LISTING_HOLE_VALUE as Vi, clearBucketRegionCache as Vl, extractDeploymentEventError as Vn, maskedLeafCoordinatesOf as Vo, disableInstanceApiTermination as Vr, WHOLE_DYNAMIC_REFERENCE_PATTERN as Vs, destroyStackRecordsView as Vt, compensateRemovedDeletionProtection as W, repairMalformedOrphanRecordsForReadOnly as Wa, redactedCause as Wc, UNREADABLE_ORPHANS_CONTAINER_ROW as Wi, buildFinalSnapshotIdentifier as Wn, noEchoOutputsComparison as Wo, observeThenDisableInstanceApiTermination as Wr, isLockInfoExpired as Ws, removeProtectionTypeList as Wt, deleteTableWithIndexBusyRetry as X, unpreviewableOrphanRecords as Xa, stripControlChars as Xc, hasReadableOutputs as Xi, unsupportedFinalSnapshotError as Xn, carryLogOnlyValues as Xo, poisonRenderedSpellingsCollidingIn as Xr, crossPrefixDeniedWarning as Xs, planFailedOps as Xt, INDEX_SETTLE_POLL_INTERVAL_MS as Y, repairMalformedResourcesForReadOnly as Ya, escapeRegExp$3 as Yc, hasReadableOrphans as Yi, refusesFinalSnapshot as Yn, liveMatchesUnresolvedTokenFrame as Yo, IntrinsicFunctionResolver as Yr, applyCrossPrefixScan as Ys, isReplacementOrphan as Yt, waitForIndexesSettled as Z, unreadableOrphanRecords as Za, stripForDisplay as Zc, hasReadableResources as Zi, maskingRetryLogger as Zn, createUnionSecretMasker as Zo, producerLookupOver as Zr, isAccessDenied$1 as Zs, planRollback as Zt, keptWholeReasonText as _, malformedScrubResourceEntriesRefusalMessage as _a, createAssetRedirectResolver as _c, s3BucketRegionalDomainName as _i, MIGRATE_TMP_PREFIX as _l, exportAliasCollisionScrubWarning as _n, coerceCfnBoolean as _o, CC_BROKEN_REASON as _r, DYNAMIC_REFERENCE_TOKEN_SCAN as _s, planOrphanAdoption as _t, inheritedProvenanceForChildDiff as a, malformedLocalResourcesWarning as aa, hasUnverifiableParameterRefusal as ac, AWS_CREDENTIAL_ENV_KEYS as ai, resolveApp as al, getCurrentProducerRegions as an, hasNoCloudControlHandlers as ao, acquireIdempotencyToken as ar, unionOfSecretBags as as, createReadOnlyAttributeHealerFactory as at, chunks as b, refuseDivergentRecordRegionForDestroy as ba, AssetModeResolver as bc, classifyReplaySecretRegion as bi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as bl, secretSafeKeyDisplay as bn, configIntegerRefusal as bo, isCustomResource as br, pathCrossesDottedKey as bs, displacedPhysicalIdShown as bt, isAbsoluteAssetPath as c, malformedOrphanRowsKeptWarning as ca, isReadableBag as cc, envCredentialsAreAssumedRole as ci, resolveSkipPrefix as cl, isRedactedRecordedValue as cn, MULTI_REGION_RECREATE_BLOCKED_TYPES as co, DBPROXY_TAGS_WHAT as cr, maskSecretsInError as cs, gray as ct, templateIdentity as d, malformedOutputsRefusalMessage as da, shouldRetainResource as dc, outputReferenceProvenanceOf as di, resolveUseCdkBootstrapAssets as dl, updatePartialMessage as dn, renderStatefulReason as do, readTagList as dr, recordReferenceProvenanceEntry as ds, yellow as dt, malformedDriftResourcePropertiesWarning as ea, acceptedCreateOnlyDropsOf as ec, assertFlagRoleArn as ei, Synthesizer as el, replacementNeverSwapped as en, findActionableSilentDrops as eo, formatDestructiveChange as er, logOnlyValueCount as es, hasCdkAutoDeleteTag as et, conditionFingerprint as f, malformedOutputsWarning as fa, AssetPublisher as fc, recordedOutputReferenceRegions as fi, stateBucketExistenceConfirmed as fl, updatePartialReason as fn, WARM_THROUGHPUT_MEMBERS as fo, refuseMalformedDesiredTags as fr, snapshotPassProvenance as fs, computeParameterTaint as ft, isSecretBearingReferenceString as g, malformedResourcesWarning as ga, buildAssetRedirectMap as gc, s3BucketDualStackDomainName as gi, CFN_TEMPLATE_URL_LIMIT as gl, displayTextOrWithheld as gn, toFiniteNumber as go, stringifyIfAssigned as gr, withoutPhysicalNameCopies as gs, makeSiblingClaimReader as gt, readRecordedConditionVerdicts as h, malformedResourcePropertiesWarning as ha, WorkGraph as hc, s3BucketDomainName as hi, CFN_TEMPLATE_BODY_LIMIT as hl, WITHHELD_NAME_DISPLAY as hn, toCfnInteger as ho, definedAttributes as hr, withPhysicalNameCopies as hs, resourcesNamingDeclaredParameter as ht, crossStackOutputProvenanceSource as i, malformedLocalResourceEntriesWarning as ia, hasReasonlessBaselineRefusal as ic, sendableAssumeRoleCommand as ii, loadCdkJson as il, findNestedStackTypeChanges as in, NO_CC_HANDLERS_REASON as io, withCreateTokenLedger as ir, shareLogOnlyValues as is, formatResourceLine as it, noEchoAttributeNamesOf as j, refuseMalformedResourceEntriesForDeploy as ja, buildDockerImage as jc, keepsSecretReferenceToken as ji, hasPlainPrototype$1 as jl, DEFAULT_RESOURCE_WARN_AFTER_MS as jn, canonicalLambdaFunctionName as jo, slowCcOperationTimeoutMs as jr, recordMaskOnlyValue as js, deleteJournaledOrphans as jt, withResourceDeadline as k, refuseMalformedResourceAttributesForOrphan as ka, validateContainerRepoName as kc, carriesFetchableDynamicReference as ki, defineOwnKey as kl, bindingSkippedOutputs as kn, describeTypeWithThrottleRetry as ko, customResourceResponseExpirationWarning as kr, carriesSecretMask as ks, getCurrentNestedStackContext as kt, listNestedTemplateRows as l, malformedOrphansRefusalMessage as la, orphansAfterRollback as lc, isSettledInstanceState as li, resolveStateBucketWithDefault as ll, redactedDeleteAddressFields as ln, isStatefulRecreateTargetForReplace as lo, DBPROXY_TAG_OPTIONS as lr, maskSecretsInText as ls, green as lt, parentSuppliedValues as m, malformedResourceEntriesWarning as ma, stringifyValue as mc, s3BucketArn as mi, ssmResolvedValueType as ml, DeploymentEventsStore as mn, isWarmThroughputDecrease as mo, tagPlanWarning as mr, scrubResourceRecord as ms, reachableDivergentParameters as mt, IMPLICIT_DELETE_DEPENDENCIES as n, malformedExportSourceWarning as na, exportNamesCarriedFrom as nc, explicitRoleArnOrThrow as ni, getDefaultStateBucketName as nl, seedsDeleteFirstGuard as nn, unwrittenCreateOnlyReplacement as no, ledgerForStack as nr, recordLogOnlyParameterValue as ns, getPriorAttempts as nt, childTemplateLoader as o, malformedOrphanRecordsRefusalMessage as oa, importableOutputKeys as oc, applyCallerIdentityCredentials as oi, resolveAutoAssetStorage as ol, inheritProducerRegions as on, findReplacedReadersOfRecreateTargets as oo, isRefusedByName as or, createSecretMasker as os, bold as ot, conditionInputsFrom as p, malformedRenderedContainersWarning as pa, isSensitiveAttributeName as pc, recordedReferenceRegions as pi, warnDeprecatedNoPrefixCliFlag as pl, DeploymentEventsReader as pn, coerceWarmThroughput as po, tagMapAsList as pr, redactSecretsForState as ps, namesAnyDeclaredParameter as pt, resolveDynamoDbDeleteBudgetMs as q, repairMalformedResourceEntriesForReadOnly as qa, runDockerStreaming as qc, deployRefusesOrphanRowsReason as qi, effectiveDeletionPolicy as qn, readsNoEchoSource as qo, DiffCalculator as qr, CrossPrefixReadError as qs, demoteSupersededOrphans as qt, computeImplicitDeleteEdges as r, malformedLocalOutputsWarning as ra, hasReadableExportSet as rc, isIamRoleArn as ri, getLegacyStateBucketName as rl, orphanDeleteNeedsIdentity as rn, withoutSilentDropProperties as ro, reserveStackCreateToken as rr, recordLogOnlyValue as rs, markRefusedBeforeApplying as rt, findNestedTemplateTreeDefect as s, malformedOrphanRecordsWarning as sa, importableOutputs as sc, callerEnvCredentials as si, resolveCaptureObservedState as sl, REDACTED_DELETE_ADDRESS_SKIP_REASON as sn, shownType as so, markDeleteStarted as sr, errorCauseChain as ss, cyan as st, DeployEngine as t, malformedExportNamesWarning as ta, describeRegionValueKind as tc, assertSendableRoleArn as ti, synthesisStatusMessage as tl, resolveReplacementOldType as tn, findSilentDropProperties as to, earliestDefined as tr, printingCorpusOf as ts, isTruthyCfnBoolean as tt, renderNestedTemplateTreeDefect as u, malformedOrphansWarning as ua, orphansCarriedFrom as uc, keepHeldTokenProvenance as ui, resolveStateBucketWithDefaultAndSource as ul, redactedDeleteAddressSkip as un, isStatefulRecreateTargetSync as uo, planTagDiff as ur, markSameGenerationBag as us, red as ut, mergeNoChangeOutputs as v, malformedStateRefusalMessage as va, loadPublishableAssetManifest as vc, s3BucketWebsiteUrl as vi, findLargeInlineResources as vl, secretBearing as vn, coerceCfnInteger as vo, ProviderRegistry as vr, dynamicReferenceTokens as vs, NESTED_PENDING_PARENT_REASON as vt, keptForReadoption as w, refuseMalformedOrphans as wa, getBootstrapMarkerKey as wc, isUnboundTemplateParameter as wi, canonicalizeRegion as wl, isWholeDynamicReferenceValue as wn, requireConfigArray as wo, isCustomResourceType as wr, recoverMaskedOutput as ws, recordDisplacedSkips as wt, isAccessDeniedError as x, refuseMalformedNestedChildOutputs as xa, BOOTSTRAP_MARKER_PREFIX as xc, producerRegionsFromState as xi, decodeListingKey as xl, carriedExportAliasExposure as xn, configStringRefusal as xo, wouldReturnToSdkProvider as xr, identityKeyFor as xs, dropSettledNestedJournals as xt, makeCanonicalizePropertiesFn as y, previewableOrphanRecords as ya, rewriteTemplateAssetReferences as yc, classifyRecordedSecretRegion as yi, uploadCfnTemplate as yl, secretBearingStateKeyWarning as yn, configBooleanRefusal as yo, ccBrokenReason as yr, isUncertifiedBaselineMaskPosition as ys, displacedOpClause as yt, perType as z, refuseMalformedResourcePropertiesForOrphan as za, getDockerCmd as zc, passedParameterClassesOf as zi, injectAwsRegion as zl, stateSecretNameNeedles as zn, maskReadbackAtCoordinates as zo, isWaitAbandonedError as zr, STATE_SOURCED_READBACK_RULES as zs, replayRollback as zt };
|
|
47854
|
+
//# sourceMappingURL=deploy-engine-BK4gG_5A.js.map
|