@go-to-k/cdkd 0.300.0 → 0.300.2
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-COcKVcvZ.js → asg-provider-DJdNNqDe.js} +3 -3
- package/dist/{asg-provider-COcKVcvZ.js.map → asg-provider-DJdNNqDe.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-C-4ho8TJ.js → deploy-engine-DOBzE5TD.js} +702 -291
- package/dist/deploy-engine-DOBzE5TD.js.map +1 -0
- package/dist/{iam-policy-targets-BxP3yqlr.js → iam-policy-targets-DFk7zr0Q.js} +68 -2
- package/dist/iam-policy-targets-DFk7zr0Q.js.map +1 -0
- package/dist/{iam-role-provider-a-8z7Dpm.js → iam-role-provider-C8gNXG1G.js} +15 -10
- package/dist/iam-role-provider-C8gNXG1G.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/{neptune-provider-Bnr2VC6V.js → neptune-provider-UDy6HC5O.js} +3 -3
- package/dist/{neptune-provider-Bnr2VC6V.js.map → neptune-provider-UDy6HC5O.js.map} +1 -1
- package/dist/{program-BHjdsRtD.js → program-BDm58Wc8.js} +9 -9
- package/dist/{program-BHjdsRtD.js.map → program-BDm58Wc8.js.map} +1 -1
- package/dist/{provider-classes-CVC9_-km.js → provider-classes-DzoIZFZK.js} +315 -84
- package/dist/provider-classes-DzoIZFZK.js.map +1 -0
- package/dist/{rds-provider-QKN-WHF3.js → rds-provider-C-lGTdAb.js} +13 -7
- package/dist/rds-provider-C-lGTdAb.js.map +1 -0
- package/dist/{version-CXGQKplb.js → version-CZbKGFSS.js} +2 -2
- package/dist/{version-CXGQKplb.js.map → version-CZbKGFSS.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-C-4ho8TJ.js.map +0 -1
- package/dist/iam-policy-targets-BxP3yqlr.js.map +0 -1
- package/dist/iam-role-provider-a-8z7Dpm.js.map +0 -1
- package/dist/provider-classes-CVC9_-km.js.map +0 -1
- package/dist/rds-provider-QKN-WHF3.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
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, $
|
|
3
|
+
import { $ as protectedReplacementAdvice, $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 isRetryableTransientError, at as startInterruptWatch, bn as ResourceUpdateNotSupportedError, bt as maskDeep, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dr as markNonRetryable, en as clientDefaultsFor, er as formatRetryClassificationSignals, f as removalWarning, fr as markRedactedCause, ft as logicalIdShown, gt as stateOrphanRecordRemedy, hn as MalformedProducerRecordRefusalError, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CdkdError, ir as isIamPropagationError, 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 isMarkedNonRetryable, m as withoutInjectedRemovals, mn as MacroExpansionError, mt as resourceTypeShown, nn as AccountIdUnavailableError, nr as isAmbiguousOutcomeError, on as CrossAccountSecretRefusalError, or as isTransientServerError, ot as ElapsedBudgetRegistry, pn as LockError, pr as wrapMaskedAwsError, qn as isNameCollisionErrorFrom, rn as AssetError, sn as DependencyError, sr as retryClassificationText, st as monotonicNowMs, tn as credentialFingerprint, tr as isAmbiguousCcHandlerErrorCode, un as IntrinsicResolutionRefusalError, ur as isThrottlingError, 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-DFk7zr0Q.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-CZbKGFSS.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";
|
|
@@ -2888,6 +2888,12 @@ const DOCKER_CLIENT_ENV_KEYS = /* @__PURE__ */ new Set([
|
|
|
2888
2888
|
"USERPROFILE",
|
|
2889
2889
|
"HOMEDRIVE",
|
|
2890
2890
|
"HOMEPATH",
|
|
2891
|
+
"COMSPEC",
|
|
2892
|
+
"SYSTEMROOT",
|
|
2893
|
+
"WINDIR",
|
|
2894
|
+
"SYSTEMDRIVE",
|
|
2895
|
+
"PSMODULEPATH",
|
|
2896
|
+
"PSEXECUTIONPOLICYPREFERENCE",
|
|
2891
2897
|
"DOCKER_HOST",
|
|
2892
2898
|
"DOCKER_CONTEXT",
|
|
2893
2899
|
"DOCKER_CONFIG",
|
|
@@ -3016,10 +3022,13 @@ const WELL_FORMED_ENV_KEY = /^[^=\0]+$/;
|
|
|
3016
3022
|
function isMalformedEnvKey(key) {
|
|
3017
3023
|
return !WELL_FORMED_ENV_KEY.test(key);
|
|
3018
3024
|
}
|
|
3019
|
-
function partitionSensitiveEnv(env, sensitiveKeys) {
|
|
3025
|
+
function partitionSensitiveEnv(env, sensitiveKeys, options = {}) {
|
|
3026
|
+
const platform = options.platform ?? process.platform;
|
|
3020
3027
|
const flags = [];
|
|
3021
3028
|
const sensitiveEnv = {};
|
|
3022
3029
|
const collisions = [];
|
|
3030
|
+
const names = platform === "win32" ? new Win32EnvNames(Object.keys(process.env)) : void 0;
|
|
3031
|
+
const ambiguous = [];
|
|
3023
3032
|
for (const [k, v] of Object.entries(env)) {
|
|
3024
3033
|
if (!sensitiveKeys.has(k)) {
|
|
3025
3034
|
flags.push("-e", `${k}=${v}`);
|
|
@@ -3029,19 +3038,73 @@ function partitionSensitiveEnv(env, sensitiveKeys) {
|
|
|
3029
3038
|
collisions.push(k);
|
|
3030
3039
|
continue;
|
|
3031
3040
|
}
|
|
3041
|
+
if (names) {
|
|
3042
|
+
if (names.lookup(k).ambiguous) {
|
|
3043
|
+
ambiguous.push(k);
|
|
3044
|
+
continue;
|
|
3045
|
+
}
|
|
3046
|
+
names.replace(k);
|
|
3047
|
+
}
|
|
3032
3048
|
flags.push("-e", k);
|
|
3033
3049
|
defineOwnKey(sensitiveEnv, k, v);
|
|
3034
3050
|
}
|
|
3051
|
+
if (ambiguous.length > 0) getLogger().warn((options.subject === void 0 ? "" : safeMsg`${options.subject}: `) + safeMsg`Sensitive env var(s) ${ambiguous.map((k) => displayIdent(k)).join(", ")} ` + "were NOT passed to the container. On Windows each matches another variable's name (in your environment or another secret) only through a letter-case difference outside A-Z, which cdkd does not treat as the same variable. Rename the secret if the container needs it.");
|
|
3052
|
+
if (names) warnCaseVariantSensitiveKeys(Object.keys(sensitiveEnv), options.subject);
|
|
3035
3053
|
return {
|
|
3036
3054
|
flags,
|
|
3037
3055
|
sensitiveEnv,
|
|
3038
3056
|
collisions
|
|
3039
3057
|
};
|
|
3040
3058
|
}
|
|
3041
|
-
function
|
|
3059
|
+
function warnCaseVariantSensitiveKeys(keys, subject) {
|
|
3060
|
+
const byUpper = /* @__PURE__ */ new Map();
|
|
3061
|
+
for (const k of keys) {
|
|
3062
|
+
const upper = asciiUpper(k);
|
|
3063
|
+
const group = byUpper.get(upper);
|
|
3064
|
+
if (group) group.push(k);
|
|
3065
|
+
else byUpper.set(upper, [k]);
|
|
3066
|
+
}
|
|
3067
|
+
for (const group of byUpper.values()) {
|
|
3068
|
+
if (group.length < 2) continue;
|
|
3069
|
+
getLogger().warn((subject === void 0 ? "" : safeMsg`${subject}: `) + safeMsg`Sensitive env vars ${group.map((k) => displayIdent(k)).join(", ")} differ only by letter case. ` + safeMsg`Windows treats them as one variable, so the container receives the value of ` + safeMsg`${displayIdent(group[group.length - 1])} under every one of these names. ` + `Rename them to distinct names if the container needs each value.`);
|
|
3070
|
+
}
|
|
3071
|
+
}
|
|
3072
|
+
function asciiUpper(name) {
|
|
3073
|
+
return name.replace(/[a-z]/g, (c) => c.toUpperCase());
|
|
3074
|
+
}
|
|
3075
|
+
var Win32EnvNames = class {
|
|
3076
|
+
groups = /* @__PURE__ */ new Map();
|
|
3077
|
+
constructor(names) {
|
|
3078
|
+
for (const name of names) {
|
|
3079
|
+
const key = name.toUpperCase();
|
|
3080
|
+
const group = this.groups.get(key);
|
|
3081
|
+
if (group) group.push(name);
|
|
3082
|
+
else this.groups.set(key, [name]);
|
|
3083
|
+
}
|
|
3084
|
+
}
|
|
3085
|
+
lookup(name) {
|
|
3086
|
+
const others = (this.groups.get(name.toUpperCase()) ?? []).filter((n) => n !== name);
|
|
3087
|
+
const folded = asciiUpper(name);
|
|
3088
|
+
return {
|
|
3089
|
+
aliases: others,
|
|
3090
|
+
ambiguous: others.some((n) => asciiUpper(n) !== folded)
|
|
3091
|
+
};
|
|
3092
|
+
}
|
|
3093
|
+
replace(name) {
|
|
3094
|
+
this.groups.set(name.toUpperCase(), [name]);
|
|
3095
|
+
}
|
|
3096
|
+
};
|
|
3097
|
+
function dockerSpawnEnvWithSensitive(sensitiveEnv, platform = process.platform) {
|
|
3042
3098
|
const env = { ...process.env };
|
|
3099
|
+
const names = platform === "win32" ? new Win32EnvNames(Object.keys(env)) : void 0;
|
|
3043
3100
|
for (const [k, v] of Object.entries(sensitiveEnv)) {
|
|
3044
3101
|
if (isMalformedEnvKey(k) || isDockerClientEnvKey(k)) continue;
|
|
3102
|
+
if (names) {
|
|
3103
|
+
const { aliases, ambiguous } = names.lookup(k);
|
|
3104
|
+
if (ambiguous) continue;
|
|
3105
|
+
for (const alias of aliases) delete env[alias];
|
|
3106
|
+
names.replace(k);
|
|
3107
|
+
}
|
|
3045
3108
|
defineOwnKey(env, k, v);
|
|
3046
3109
|
}
|
|
3047
3110
|
return env;
|
|
@@ -7672,6 +7735,40 @@ function positionByCrossStackSource(bag, source, secrets) {
|
|
|
7672
7735
|
return certifiedExpressionForLeaf(secrets, association, bag);
|
|
7673
7736
|
}
|
|
7674
7737
|
|
|
7738
|
+
//#endregion
|
|
7739
|
+
//#region src/deployment/secret-redaction/resolver-outcomes.ts
|
|
7740
|
+
const CONFLICTING = Symbol("cdkd.resolver-outcome.conflicting");
|
|
7741
|
+
const takenBranches = /* @__PURE__ */ new WeakMap();
|
|
7742
|
+
function recordTakenIfBranch(secrets, source, tookTrueBranch) {
|
|
7743
|
+
let taken = takenBranches.get(secrets);
|
|
7744
|
+
if (taken === void 0) {
|
|
7745
|
+
taken = /* @__PURE__ */ new WeakMap();
|
|
7746
|
+
takenBranches.set(secrets, taken);
|
|
7747
|
+
}
|
|
7748
|
+
const previous = taken.get(source);
|
|
7749
|
+
if (previous === void 0) taken.set(source, tookTrueBranch);
|
|
7750
|
+
else if (previous !== tookTrueBranch) taken.set(source, CONFLICTING);
|
|
7751
|
+
}
|
|
7752
|
+
function takenIfBranchOf(secrets, source) {
|
|
7753
|
+
const taken = takenBranches.get(secrets)?.get(source);
|
|
7754
|
+
return taken === CONFLICTING ? void 0 : taken;
|
|
7755
|
+
}
|
|
7756
|
+
const droppedElements = /* @__PURE__ */ new WeakMap();
|
|
7757
|
+
function recordDroppedArrayElements(secrets, source, dropped) {
|
|
7758
|
+
let arrays = droppedElements.get(secrets);
|
|
7759
|
+
if (arrays === void 0) {
|
|
7760
|
+
arrays = /* @__PURE__ */ new WeakMap();
|
|
7761
|
+
droppedElements.set(secrets, arrays);
|
|
7762
|
+
}
|
|
7763
|
+
const previous = arrays.get(source);
|
|
7764
|
+
if (previous === void 0) arrays.set(source, [...dropped]);
|
|
7765
|
+
else if (previous !== CONFLICTING && (previous.length !== dropped.length || previous.some((index, i) => index !== dropped[i]))) arrays.set(source, CONFLICTING);
|
|
7766
|
+
}
|
|
7767
|
+
function droppedArrayElementsOf(secrets, source) {
|
|
7768
|
+
const dropped = droppedElements.get(secrets)?.get(source);
|
|
7769
|
+
return dropped === CONFLICTING ? void 0 : dropped;
|
|
7770
|
+
}
|
|
7771
|
+
|
|
7675
7772
|
//#endregion
|
|
7676
7773
|
//#region src/deployment/secret-redaction/physical-name-copies.ts
|
|
7677
7774
|
const physicalNameCopiesOf = /* @__PURE__ */ new WeakMap();
|
|
@@ -8051,9 +8148,16 @@ function parameterReadsFor(childSecrets, parentSecrets) {
|
|
|
8051
8148
|
}
|
|
8052
8149
|
return reads;
|
|
8053
8150
|
}
|
|
8054
|
-
function recordInheritedParameterValue(childSecrets, parentSecrets, parameterName, value) {
|
|
8151
|
+
function recordInheritedParameterValue(childSecrets, parentSecrets, parameterName, value, declared) {
|
|
8055
8152
|
const reads = parameterReadsFor(childSecrets, parentSecrets);
|
|
8056
8153
|
if (reads === void 0) return;
|
|
8154
|
+
if (declared !== void 0) {
|
|
8155
|
+
if (reads.declared === void 0) reads.declared = declared;
|
|
8156
|
+
else if (reads.declared.size !== declared.size || [...declared].some((name) => !reads.declared.has(name))) {
|
|
8157
|
+
inheritedParameterReads.set(childSecrets, POISONED_PARAMETER_READS);
|
|
8158
|
+
return;
|
|
8159
|
+
}
|
|
8160
|
+
}
|
|
8057
8161
|
if (reads.values.has(parameterName)) {
|
|
8058
8162
|
if (!deepEqualJsonValue(reads.values.get(parameterName), value)) inheritedParameterReads.set(childSecrets, POISONED_PARAMETER_READS);
|
|
8059
8163
|
return;
|
|
@@ -8079,8 +8183,14 @@ function positionByInheritedParameter(bag, source, secrets) {
|
|
|
8079
8183
|
if (!deepEqualJsonValue(redactSecretsForState(answer, secrets), answer)) return void 0;
|
|
8080
8184
|
return answer;
|
|
8081
8185
|
}
|
|
8082
|
-
const REREAD_TRIGGERS = /* @__PURE__ */ new Set([
|
|
8186
|
+
const REREAD_TRIGGERS = /* @__PURE__ */ new Set([
|
|
8187
|
+
"Fn::Select",
|
|
8188
|
+
"Fn::Split",
|
|
8189
|
+
"Fn::If"
|
|
8190
|
+
]);
|
|
8083
8191
|
const MAX_REREAD_DEPTH = 16;
|
|
8192
|
+
const MAX_REREAD_CONDITIONS = 4;
|
|
8193
|
+
const REREAD_NO_VALUE = Symbol("cdkd.reread.no-value");
|
|
8084
8194
|
function splitOutsideDynamicReferences(text, delimiter, standsForSecret) {
|
|
8085
8195
|
if (delimiter === "") return text.split(delimiter);
|
|
8086
8196
|
const spans = dynamicReferenceSpans(text).filter((span) => {
|
|
@@ -8111,14 +8221,15 @@ function standsForInheritedSecret(parentSecrets, token) {
|
|
|
8111
8221
|
return parentSecrets !== void 0 && resolvedPlaintextOf(parentSecrets, token) !== void 0;
|
|
8112
8222
|
}
|
|
8113
8223
|
const plainSplit = (text, delimiter) => text.split(delimiter);
|
|
8114
|
-
function evaluatePureRead(node, bind, split, depth = 0) {
|
|
8224
|
+
function evaluatePureRead(node, bind, split, choose, depth = 0) {
|
|
8115
8225
|
if (depth > MAX_REREAD_DEPTH) return void 0;
|
|
8226
|
+
const evaluate = (child) => evaluatePureRead(child, bind, split, choose, depth + 1);
|
|
8116
8227
|
if (typeof node === "string") return node.includes("{{resolve:") ? void 0 : { value: node };
|
|
8117
8228
|
if (Array.isArray(node)) {
|
|
8118
8229
|
const out = [];
|
|
8119
8230
|
for (const element of node) {
|
|
8120
|
-
const evaluated =
|
|
8121
|
-
if (evaluated === void 0) return void 0;
|
|
8231
|
+
const evaluated = evaluate(element);
|
|
8232
|
+
if (evaluated === void 0 || evaluated.value === REREAD_NO_VALUE) return void 0;
|
|
8122
8233
|
out.push(evaluated.value);
|
|
8123
8234
|
}
|
|
8124
8235
|
return { value: out };
|
|
@@ -8128,30 +8239,79 @@ function evaluatePureRead(node, bind, split, depth = 0) {
|
|
|
8128
8239
|
if (keys.length !== 1) return void 0;
|
|
8129
8240
|
const key = keys[0];
|
|
8130
8241
|
const args = node[key];
|
|
8131
|
-
if (key === "Ref")
|
|
8242
|
+
if (key === "Ref") {
|
|
8243
|
+
if (args === "AWS::NoValue") return { value: REREAD_NO_VALUE };
|
|
8244
|
+
return typeof args === "string" ? bind(args) : void 0;
|
|
8245
|
+
}
|
|
8246
|
+
if (key === "Fn::If") {
|
|
8247
|
+
if (!Array.isArray(args) || args.length !== 3 || typeof args[0] !== "string") return void 0;
|
|
8248
|
+
const tookTrue = choose(args[0], node);
|
|
8249
|
+
if (tookTrue === void 0) return void 0;
|
|
8250
|
+
return evaluate(tookTrue ? args[1] : args[2]);
|
|
8251
|
+
}
|
|
8252
|
+
if (key === "Fn::Sub") return evaluatePureSub(args, bind, evaluate);
|
|
8132
8253
|
if (!Array.isArray(args) || args.length !== 2) return void 0;
|
|
8133
8254
|
if (key === "Fn::Select") {
|
|
8134
8255
|
const index = args[0];
|
|
8135
8256
|
const position = typeof index === "number" ? index : typeof index === "string" && /^(0|[1-9][0-9]*)$/.test(index) ? Number(index) : void 0;
|
|
8136
8257
|
if (position === void 0 || !Number.isSafeInteger(position) || position < 0) return void 0;
|
|
8137
|
-
const list =
|
|
8258
|
+
const list = evaluate(args[1]);
|
|
8138
8259
|
if (list === void 0 || !Array.isArray(list.value) || position >= list.value.length) return;
|
|
8139
8260
|
return { value: list.value[position] };
|
|
8140
8261
|
}
|
|
8141
8262
|
const delimiter = args[0];
|
|
8142
8263
|
if (typeof delimiter !== "string") return void 0;
|
|
8143
8264
|
if (key === "Fn::Split") {
|
|
8144
|
-
const value =
|
|
8265
|
+
const value = evaluate(args[1]);
|
|
8145
8266
|
if (value === void 0 || typeof value.value !== "string") return void 0;
|
|
8146
8267
|
return { value: split(value.value, delimiter) };
|
|
8147
8268
|
}
|
|
8148
8269
|
if (key === "Fn::Join") {
|
|
8149
|
-
const parts =
|
|
8270
|
+
const parts = evaluate(args[1]);
|
|
8150
8271
|
if (parts === void 0 || !Array.isArray(parts.value)) return void 0;
|
|
8151
8272
|
if (!parts.value.every((part) => typeof part === "string")) return void 0;
|
|
8152
8273
|
return { value: parts.value.join(delimiter) };
|
|
8153
8274
|
}
|
|
8154
8275
|
}
|
|
8276
|
+
function evaluatePureSub(args, bind, evaluate) {
|
|
8277
|
+
const [text, variables] = typeof args === "string" ? [args, {}] : Array.isArray(args) && args.length === 2 ? [args[0], args[1]] : [void 0, void 0];
|
|
8278
|
+
if (typeof text !== "string" || text.includes("{{resolve:") || !isPlainObject$7(variables)) return;
|
|
8279
|
+
const bound = /* @__PURE__ */ new Map();
|
|
8280
|
+
for (const [name, variable] of Object.entries(variables)) {
|
|
8281
|
+
const evaluated = evaluate(variable);
|
|
8282
|
+
if (evaluated === void 0 || typeof evaluated.value !== "string") return void 0;
|
|
8283
|
+
bound.set(name, evaluated.value);
|
|
8284
|
+
}
|
|
8285
|
+
let out = "";
|
|
8286
|
+
let cursor = 0;
|
|
8287
|
+
for (const match of text.matchAll(/\$\{(!)?([^}]*)\}/g)) {
|
|
8288
|
+
const name = match[2] ?? "";
|
|
8289
|
+
let replacement;
|
|
8290
|
+
if (match[1] === "!") replacement = `\${${name}}`;
|
|
8291
|
+
else if (name === "") replacement = match[0];
|
|
8292
|
+
else if (bound.has(name)) replacement = bound.get(name);
|
|
8293
|
+
else {
|
|
8294
|
+
if (name.startsWith("AWS::") || name.includes(".")) return void 0;
|
|
8295
|
+
const value = bind(name);
|
|
8296
|
+
if (value === void 0 || typeof value.value !== "string") return void 0;
|
|
8297
|
+
replacement = value.value;
|
|
8298
|
+
}
|
|
8299
|
+
out += text.slice(cursor, match.index) + replacement;
|
|
8300
|
+
cursor = match.index + match[0].length;
|
|
8301
|
+
}
|
|
8302
|
+
return { value: out + text.slice(cursor) };
|
|
8303
|
+
}
|
|
8304
|
+
function collectRereadConditions(node, names, depth = 0) {
|
|
8305
|
+
if (depth > MAX_REREAD_DEPTH) return false;
|
|
8306
|
+
if (Array.isArray(node)) return node.every((element) => collectRereadConditions(element, names, depth + 1));
|
|
8307
|
+
if (!isPlainObject$7(node)) return true;
|
|
8308
|
+
if (Object.hasOwn(node, "Fn::If")) {
|
|
8309
|
+
const args = node["Fn::If"];
|
|
8310
|
+
if (!Array.isArray(args) || typeof args[0] !== "string") return false;
|
|
8311
|
+
names.add(args[0]);
|
|
8312
|
+
}
|
|
8313
|
+
return Object.values(node).every((child) => collectRereadConditions(child, names, depth + 1));
|
|
8314
|
+
}
|
|
8155
8315
|
function holdsRereadTrigger(node, depth = 0) {
|
|
8156
8316
|
if (depth > MAX_REREAD_DEPTH) return false;
|
|
8157
8317
|
if (Array.isArray(node)) return node.some((element) => holdsRereadTrigger(element, depth + 1));
|
|
@@ -8166,29 +8326,107 @@ function rendersReadTo(spelling, parentSecrets, value) {
|
|
|
8166
8326
|
if (Array.isArray(spelling) && Array.isArray(value) && spelling.length === value.length) return spelling.every((element, i) => rendersReadTo(element, parentSecrets, value[i]));
|
|
8167
8327
|
return false;
|
|
8168
8328
|
}
|
|
8169
|
-
|
|
8170
|
-
|
|
8171
|
-
|
|
8329
|
+
const REREAD_UNBOUND = Symbol("cdkd.reread.unbound");
|
|
8330
|
+
const REREAD_PARAMETER_FREE = Symbol("cdkd.reread.parameter-free");
|
|
8331
|
+
function diffSideReading(bind, parentSecrets) {
|
|
8332
|
+
return {
|
|
8333
|
+
bind: (name) => {
|
|
8334
|
+
const bound = bind(name);
|
|
8335
|
+
return bound && { value: redactInheritedParameterValue(parentSecrets, name, bound.value) };
|
|
8336
|
+
},
|
|
8337
|
+
split: (text, delimiter) => splitOutsideDynamicReferences(text, delimiter, (token) => standsForInheritedSecret(parentSecrets, token))
|
|
8338
|
+
};
|
|
8339
|
+
}
|
|
8340
|
+
function rereadUnder(source, bind, parentSecrets, choose) {
|
|
8341
|
+
const resolved = evaluatePureRead(source, bind, plainSplit, choose);
|
|
8172
8342
|
if (resolved === void 0) return void 0;
|
|
8173
|
-
const
|
|
8174
|
-
|
|
8175
|
-
return bound && { value: redactInheritedParameterValue(parentSecrets, name, bound.value) };
|
|
8176
|
-
}, (text, delimiter) => splitOutsideDynamicReferences(text, delimiter, (token) => standsForInheritedSecret(parentSecrets, token)));
|
|
8343
|
+
const diffSide = diffSideReading(bind, parentSecrets);
|
|
8344
|
+
const redacted = evaluatePureRead(source, diffSide.bind, diffSide.split, choose);
|
|
8177
8345
|
if (redacted === void 0) return void 0;
|
|
8346
|
+
if (resolved.value === REREAD_NO_VALUE || redacted.value === REREAD_NO_VALUE) return resolved.value === redacted.value ? REREAD_NO_VALUE : void 0;
|
|
8178
8347
|
if (!rendersReadTo(redacted.value, parentSecrets, resolved.value)) return void 0;
|
|
8179
8348
|
return {
|
|
8180
8349
|
resolved: resolved.value,
|
|
8181
8350
|
redacted: redacted.value
|
|
8182
8351
|
};
|
|
8183
8352
|
}
|
|
8353
|
+
function namesParameterOnBranches(node, choose, isParameter, depth = 0) {
|
|
8354
|
+
if (depth > MAX_REREAD_DEPTH) return true;
|
|
8355
|
+
if (typeof node === "string") return node.includes("{{resolve:");
|
|
8356
|
+
if (Array.isArray(node)) return node.some((element) => namesParameterOnBranches(element, choose, isParameter, depth + 1));
|
|
8357
|
+
if (!isPlainObject$7(node)) return false;
|
|
8358
|
+
if (Object.hasOwn(node, "Fn::If")) {
|
|
8359
|
+
const args = node["Fn::If"];
|
|
8360
|
+
if (Object.keys(node).length !== 1) return true;
|
|
8361
|
+
if (!Array.isArray(args) || args.length !== 3 || typeof args[0] !== "string") return true;
|
|
8362
|
+
const tookTrue = choose(args[0], node);
|
|
8363
|
+
if (tookTrue === void 0) return true;
|
|
8364
|
+
return namesParameterOnBranches(tookTrue ? args[1] : args[2], choose, isParameter, depth + 1);
|
|
8365
|
+
}
|
|
8366
|
+
if (typeof node["Ref"] === "string" && isParameter(node["Ref"])) return true;
|
|
8367
|
+
const sub = node["Fn::Sub"];
|
|
8368
|
+
const text = typeof sub === "string" ? sub : Array.isArray(sub) ? sub[0] : void 0;
|
|
8369
|
+
if (typeof text === "string") {
|
|
8370
|
+
for (const match of text.matchAll(/\$\{([^}!][^}]*)\}/g)) if (isParameter(match[1].trim()) || isParameter(match[1])) return true;
|
|
8371
|
+
}
|
|
8372
|
+
return Object.values(node).some((child) => namesParameterOnBranches(child, choose, isParameter, depth + 1));
|
|
8373
|
+
}
|
|
8374
|
+
function rereadAssignments(source, bind, parentSecrets, untakenWhenUnbound = () => false, parameterFree) {
|
|
8375
|
+
if (!holdsRereadTrigger(source)) return void 0;
|
|
8376
|
+
const conditions = /* @__PURE__ */ new Set();
|
|
8377
|
+
if (!collectRereadConditions(source, conditions)) return void 0;
|
|
8378
|
+
if (conditions.size > MAX_REREAD_CONDITIONS) return void 0;
|
|
8379
|
+
const names = [...conditions];
|
|
8380
|
+
const out = [];
|
|
8381
|
+
for (let assignment = 0; assignment < 2 ** names.length; assignment++) {
|
|
8382
|
+
const choose = (condition) => Math.floor(assignment / 2 ** names.indexOf(condition)) % 2 === 1;
|
|
8383
|
+
let unbound = false;
|
|
8384
|
+
const tracked = (name) => {
|
|
8385
|
+
const bound = bind(name);
|
|
8386
|
+
if (bound === void 0 && untakenWhenUnbound(name)) unbound = true;
|
|
8387
|
+
return bound;
|
|
8388
|
+
};
|
|
8389
|
+
const reread = rereadUnder(source, tracked, parentSecrets, choose);
|
|
8390
|
+
if (unbound) out.push(REREAD_UNBOUND);
|
|
8391
|
+
else if (reread !== void 0) out.push(reread);
|
|
8392
|
+
else if (parameterFree !== void 0 && !namesParameterOnBranches(source, choose, parameterFree)) out.push(REREAD_PARAMETER_FREE);
|
|
8393
|
+
else out.push(void 0);
|
|
8394
|
+
}
|
|
8395
|
+
return out;
|
|
8396
|
+
}
|
|
8397
|
+
function rereadParameterExpression(source, bind, parentSecrets) {
|
|
8398
|
+
const assignments = rereadAssignments(source, bind, parentSecrets, void 0, (name) => bind(name) !== void 0);
|
|
8399
|
+
if (assignments === void 0 || assignments.includes(void 0) || assignments.includes(REREAD_UNBOUND)) return;
|
|
8400
|
+
return assignments.find((entry) => entry !== void 0 && entry !== REREAD_NO_VALUE && entry !== REREAD_UNBOUND && entry !== REREAD_PARAMETER_FREE);
|
|
8401
|
+
}
|
|
8402
|
+
function ambiguousRereads(rereads) {
|
|
8403
|
+
return rereads.some((a, i) => rereads.slice(i + 1).some((b) => deepEqualJsonValue(a.resolved, b.resolved) && !deepEqualJsonValue(a.redacted, b.redacted)));
|
|
8404
|
+
}
|
|
8184
8405
|
function positionByParameterReread(bag, source, secrets) {
|
|
8185
8406
|
const reads = inheritedParameterReads.get(secrets);
|
|
8186
8407
|
if (reads === void 0 || typeof reads === "symbol") return void 0;
|
|
8187
8408
|
if (typeof bag !== "string" && !Array.isArray(bag)) return void 0;
|
|
8188
|
-
|
|
8189
|
-
|
|
8409
|
+
if (!holdsRereadTrigger(source)) return void 0;
|
|
8410
|
+
const bind = (name) => reads.values.has(name) ? { value: reads.values.get(name) } : void 0;
|
|
8411
|
+
let unrecorded = false;
|
|
8412
|
+
const recorded = rereadUnder(source, bind, reads.parent, (_, node) => {
|
|
8413
|
+
const taken = takenIfBranchOf(secrets, node);
|
|
8414
|
+
if (taken === void 0) unrecorded = true;
|
|
8415
|
+
return taken;
|
|
8416
|
+
});
|
|
8417
|
+
let answer;
|
|
8418
|
+
if (!unrecorded) {
|
|
8419
|
+
if (recorded === void 0 || recorded === REREAD_NO_VALUE || !deepEqualJsonValue(recorded.resolved, bag)) return;
|
|
8420
|
+
answer = recorded.redacted;
|
|
8421
|
+
} else {
|
|
8422
|
+
const declared = reads.declared;
|
|
8423
|
+
const assignments = rereadAssignments(source, bind, reads.parent, (name) => declared?.has(name) === true);
|
|
8424
|
+
if (assignments === void 0 || assignments.includes(void 0)) return void 0;
|
|
8425
|
+
const matching = assignments.filter((entry) => entry !== void 0 && entry !== REREAD_NO_VALUE && entry !== REREAD_UNBOUND && entry !== REREAD_PARAMETER_FREE && deepEqualJsonValue(entry.resolved, bag));
|
|
8426
|
+
if (matching.length === 0 || ambiguousRereads(matching)) return void 0;
|
|
8427
|
+
answer = matching[0].redacted;
|
|
8428
|
+
}
|
|
8190
8429
|
if (carriesChildOnlyPlaintext(bag, secrets, reads.parent)) return void 0;
|
|
8191
|
-
const answer = reread.redacted;
|
|
8192
8430
|
if (!deepEqualJsonValue(redactSecretsForState(answer, secrets), answer)) return void 0;
|
|
8193
8431
|
return answer;
|
|
8194
8432
|
}
|
|
@@ -8425,6 +8663,82 @@ function positionListByCrossStackSource(bag, source, secrets) {
|
|
|
8425
8663
|
|
|
8426
8664
|
//#endregion
|
|
8427
8665
|
//#region src/deployment/secret-redaction/redact-path.ts
|
|
8666
|
+
const NEVER_DROPPING_INTRINSICS = /* @__PURE__ */ new Set([
|
|
8667
|
+
"Fn::Join",
|
|
8668
|
+
"Fn::Sub",
|
|
8669
|
+
"Fn::Select",
|
|
8670
|
+
"Fn::Split",
|
|
8671
|
+
"Fn::GetAtt"
|
|
8672
|
+
]);
|
|
8673
|
+
function arrayElementDrop(element, depth = 0) {
|
|
8674
|
+
if (depth > 16) return "unknown";
|
|
8675
|
+
if (!isPlainObject$7(element)) return "never";
|
|
8676
|
+
if (Object.hasOwn(element, "Ref")) return element["Ref"] === "AWS::NoValue" ? "always" : "never";
|
|
8677
|
+
const keys = Object.keys(element);
|
|
8678
|
+
if (keys.filter((key) => key.startsWith("Fn::") || key === "Condition").length === 0) return "never";
|
|
8679
|
+
if (keys.length !== 1) return "unknown";
|
|
8680
|
+
if (NEVER_DROPPING_INTRINSICS.has(keys[0])) return "never";
|
|
8681
|
+
if (keys[0] !== "Fn::If") return "unknown";
|
|
8682
|
+
const args = element["Fn::If"];
|
|
8683
|
+
if (!Array.isArray(args) || args.length !== 3) return "unknown";
|
|
8684
|
+
const branches = [arrayElementDrop(args[1], depth + 1), arrayElementDrop(args[2], depth + 1)];
|
|
8685
|
+
if (branches.includes("unknown")) return "unknown";
|
|
8686
|
+
if (branches.every((branch) => branch === "never")) return "never";
|
|
8687
|
+
if (branches.every((branch) => branch === "always")) return "always";
|
|
8688
|
+
return "maybe";
|
|
8689
|
+
}
|
|
8690
|
+
function sourceElementsKeptFor(source, bagLength, secrets) {
|
|
8691
|
+
const recorded = secrets && droppedArrayElementsOf(secrets, source);
|
|
8692
|
+
if (recorded !== void 0) {
|
|
8693
|
+
if (source.length - recorded.length !== bagLength) return void 0;
|
|
8694
|
+
return source.filter((_, i) => !recorded.includes(i));
|
|
8695
|
+
}
|
|
8696
|
+
const drops = source.map((element) => arrayElementDrop(element));
|
|
8697
|
+
if (drops.includes("unknown")) return void 0;
|
|
8698
|
+
const always = drops.filter((drop) => drop === "always").length;
|
|
8699
|
+
const maybe = drops.filter((drop) => drop === "maybe").length;
|
|
8700
|
+
const dropped = source.length - bagLength;
|
|
8701
|
+
let dropMaybe;
|
|
8702
|
+
if (dropped === always) dropMaybe = false;
|
|
8703
|
+
else if (dropped === always + maybe) dropMaybe = true;
|
|
8704
|
+
else return void 0;
|
|
8705
|
+
return source.filter((_, i) => drops[i] === "never" || drops[i] === "maybe" && !dropMaybe);
|
|
8706
|
+
}
|
|
8707
|
+
function keptLiteralsCorroborate(kept, bag, secrets) {
|
|
8708
|
+
return kept.every((element, i) => keptElementCorroborates(element, bag[i], secrets));
|
|
8709
|
+
}
|
|
8710
|
+
function isIntrinsicNode(value) {
|
|
8711
|
+
if (!isPlainObject$7(value)) return false;
|
|
8712
|
+
const keys = Object.keys(value);
|
|
8713
|
+
return keys.length === 1 && (keys[0] === "Ref" || keys[0].startsWith("Fn::"));
|
|
8714
|
+
}
|
|
8715
|
+
function keptElementCorroborates(source, bag, secrets, depth = 0) {
|
|
8716
|
+
if (depth > 16) return false;
|
|
8717
|
+
if (typeof source === "string") {
|
|
8718
|
+
if (!source.includes("{{resolve:")) return source === bag;
|
|
8719
|
+
return isSingleDynamicReferenceToken(source) && resolvedPlaintextOf(secrets, source) === bag;
|
|
8720
|
+
}
|
|
8721
|
+
if (source === null || typeof source !== "object") return source === bag;
|
|
8722
|
+
if (isIntrinsicNode(source)) return true;
|
|
8723
|
+
if (Array.isArray(source)) return Array.isArray(bag) && bag.length === source.length && source.every((element, i) => keptElementCorroborates(element, bag[i], secrets, depth + 1));
|
|
8724
|
+
if (!isPlainObject$7(source) || !isPlainObject$7(bag)) return false;
|
|
8725
|
+
if (Object.keys(bag).some((key) => !Object.hasOwn(source, key))) return false;
|
|
8726
|
+
return Object.entries(source).every(([key, value]) => Object.hasOwn(bag, key) ? keptElementCorroborates(value, bag[key], secrets, depth + 1) : arrayElementDrop(value) === "always" || arrayElementDrop(value) === "maybe");
|
|
8727
|
+
}
|
|
8728
|
+
function corroboratesWhateverResolves(source, depth = 0) {
|
|
8729
|
+
if (depth > 16) return false;
|
|
8730
|
+
if (typeof source === "string") return !source.includes("{{resolve:");
|
|
8731
|
+
if (source === null || typeof source !== "object") return true;
|
|
8732
|
+
if (isIntrinsicNode(source)) return true;
|
|
8733
|
+
if (Array.isArray(source)) return source.every((element) => arrayElementDrop(element) === "never" && corroboratesWhateverResolves(element, depth + 1));
|
|
8734
|
+
if (!isPlainObject$7(source)) return false;
|
|
8735
|
+
if (Object.keys(source).some((key) => key === "Ref" || key.startsWith("Fn::"))) return false;
|
|
8736
|
+
return Object.values(source).every((value) => arrayElementDrop(value) !== "unknown" && corroboratesWhateverResolves(value, depth + 1));
|
|
8737
|
+
}
|
|
8738
|
+
function arrayPairsWhateverDrops(source) {
|
|
8739
|
+
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;
|
|
8740
|
+
return source.every((element) => corroboratesWhateverResolves(element));
|
|
8741
|
+
}
|
|
8428
8742
|
function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameGeneration) {
|
|
8429
8743
|
if (isDynamicReferenceString(source) && typeof bag === "string") {
|
|
8430
8744
|
if (isSingleDynamicReferenceToken(source) && (rules.trustAnyExpression || isKnownSecretExpression(source, secretExpressions))) {
|
|
@@ -8479,6 +8793,10 @@ function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameG
|
|
|
8479
8793
|
});
|
|
8480
8794
|
}
|
|
8481
8795
|
if (rules.descendArrays && bag.length === source.length) return bag.map((item, i) => redactByPath(item, source[i], secrets, rules, secretExpressions, bagIsSameGeneration));
|
|
8796
|
+
if (rules.descendArrays && bag.length < source.length) {
|
|
8797
|
+
const kept = sourceElementsKeptFor(source, bag.length, secrets);
|
|
8798
|
+
if (kept !== void 0 && keptLiteralsCorroborate(kept, bag, secrets)) return bag.map((item, i) => redactByPath(item, kept[i], secrets, rules, secretExpressions, bagIsSameGeneration));
|
|
8799
|
+
}
|
|
8482
8800
|
}
|
|
8483
8801
|
if (isPlainObject$7(bag) && hasPlainPrototype(bag) && isPlainObject$7(source)) {
|
|
8484
8802
|
const out = Object.create(null);
|
|
@@ -11332,12 +11650,19 @@ async function withRetry(operation, logicalId, opts = {}) {
|
|
|
11332
11650
|
return await operation();
|
|
11333
11651
|
} catch (error) {
|
|
11334
11652
|
lastError = error;
|
|
11653
|
+
const replayMadeAnother = replayMadeAnotherResource(previousError, error);
|
|
11335
11654
|
const carried = carryCreatedBeforeFailure(previousError, error);
|
|
11336
11655
|
if (hasCreatedBeforeFailure(carried) || !hasCreatedBeforeFailure(previousError)) previousError = carried;
|
|
11337
11656
|
if (isAuxiliaryFailure(error) || hasReplayMayCollide(error) || isAmbiguousOutcomeError(error)) replayMayCollide = true;
|
|
11338
11657
|
const message = describeAwsFailure(error).detail;
|
|
11339
11658
|
const classifyText = retryClassificationText(error);
|
|
11340
11659
|
if (isMarkedNonRetryable(error)) throw settle(error);
|
|
11660
|
+
if (replayMadeAnother) {
|
|
11661
|
+
try {
|
|
11662
|
+
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`);
|
|
11663
|
+
} catch {}
|
|
11664
|
+
throw settle(error);
|
|
11665
|
+
}
|
|
11341
11666
|
const retryable = opts.isRetryable ? opts.isRetryable(classifyText, error) : isRetryableTransientError(error, classifyText);
|
|
11342
11667
|
const propagation = defaultSchedule && isIamPropagationError(classifyText);
|
|
11343
11668
|
if (propagation) sawPropagation = true;
|
|
@@ -22749,6 +23074,271 @@ async function resolveSub(subArgs, context, source) {
|
|
|
22749
23074
|
return result;
|
|
22750
23075
|
}
|
|
22751
23076
|
|
|
23077
|
+
//#endregion
|
|
23078
|
+
//#region src/deployment/intrinsic-resolver/parameter-secrets.ts
|
|
23079
|
+
function recordInheritedParameterSecrets(parameterName, value, context) {
|
|
23080
|
+
const inherited = context.inheritedSecrets;
|
|
23081
|
+
const recorded = context.recordedSecretValues;
|
|
23082
|
+
if (inherited && recorded) carryLogOnlyValuesCarriedBy(inherited, recorded, value);
|
|
23083
|
+
if (recorded) carryPhysicalNameCopiesCarriedBy(context, recorded, value);
|
|
23084
|
+
if (inherited && recorded) recordInheritedNoEchoListElements(this, inherited, recorded, value, context);
|
|
23085
|
+
if (!inherited || inherited.size === 0 || !recorded) return;
|
|
23086
|
+
const mirror = parameterReadMirrors.get(recorded);
|
|
23087
|
+
const declared = declaredParameterNames(context);
|
|
23088
|
+
recordInheritedParameterValue(recorded, inherited, parameterName, value, declared);
|
|
23089
|
+
if (mirror) recordInheritedParameterValue(mirror, inherited, parameterName, value, declared);
|
|
23090
|
+
for (const [plaintext, expression] of inheritedSecretsCarriedBy(value, inherited)) {
|
|
23091
|
+
const carried = carriedExpressionFor(inherited, parameterName, value, plaintext, expression);
|
|
23092
|
+
recorded.set(plaintext, carried);
|
|
23093
|
+
const parentEntry = context.inheritedReferenceProvenance?.get(carried);
|
|
23094
|
+
if (parentEntry !== void 0) recordReferenceProvenanceEntry(recorded, carried, parentEntry, "read");
|
|
23095
|
+
recordInheritedParameterRead(recorded, inherited, parameterName);
|
|
23096
|
+
if (mirror) recordInheritedParameterRead(mirror, inherited, parameterName);
|
|
23097
|
+
carryFreshNoEchoMark(inherited, recorded, plaintext);
|
|
23098
|
+
}
|
|
23099
|
+
}
|
|
23100
|
+
function declaredParameterNames(context) {
|
|
23101
|
+
const declared = context.template?.Parameters;
|
|
23102
|
+
if (declared === null || typeof declared !== "object") return void 0;
|
|
23103
|
+
let names = declaredNamesCache.get(declared);
|
|
23104
|
+
if (names === void 0) {
|
|
23105
|
+
names = new Set(Object.keys(declared));
|
|
23106
|
+
declaredNamesCache.set(declared, names);
|
|
23107
|
+
}
|
|
23108
|
+
return names;
|
|
23109
|
+
}
|
|
23110
|
+
const declaredNamesCache = /* @__PURE__ */ new WeakMap();
|
|
23111
|
+
const parameterReadMirrors = /* @__PURE__ */ new WeakMap();
|
|
23112
|
+
function mirrorInheritedParameterReads(passSecrets, persistSecrets) {
|
|
23113
|
+
if (passSecrets !== persistSecrets) parameterReadMirrors.set(passSecrets, persistSecrets);
|
|
23114
|
+
}
|
|
23115
|
+
function recordTakenIfBranchIn(context, source, tookTrueBranch) {
|
|
23116
|
+
if (!context.inheritedSecrets || context.inheritedSecrets.size === 0) return;
|
|
23117
|
+
const recorded = context.recordedSecretValues;
|
|
23118
|
+
if (recorded === void 0) return;
|
|
23119
|
+
recordTakenIfBranch(recorded, source, tookTrueBranch);
|
|
23120
|
+
const mirror = parameterReadMirrors.get(recorded);
|
|
23121
|
+
if (mirror) recordTakenIfBranch(mirror, source, tookTrueBranch);
|
|
23122
|
+
}
|
|
23123
|
+
function recordDroppedArrayElementsIn(context, source, dropped) {
|
|
23124
|
+
const recorded = context.recordedSecretValues;
|
|
23125
|
+
if (recorded === void 0) return;
|
|
23126
|
+
recordDroppedArrayElements(recorded, source, dropped);
|
|
23127
|
+
const mirror = parameterReadMirrors.get(recorded);
|
|
23128
|
+
if (mirror) recordDroppedArrayElements(mirror, source, dropped);
|
|
23129
|
+
}
|
|
23130
|
+
function carryPhysicalNameCopiesCarriedBy(context, recorded, value) {
|
|
23131
|
+
const names = context.inheritedPhysicalNameCopies ?? (context.inheritedSecrets && physicalNameCopiesOf.get(context.inheritedSecrets));
|
|
23132
|
+
if (names === void 0 || names.size === 0) return;
|
|
23133
|
+
const leaves = [...wholeStringLeavesOf(value)];
|
|
23134
|
+
for (const name of names) if (leaves.some((leaf) => leaf.includes(name))) recordPhysicalNameCopy(recorded, name);
|
|
23135
|
+
}
|
|
23136
|
+
function carriedExpressionFor(inherited, parameterName, value, plaintext, survivor) {
|
|
23137
|
+
const own = inheritedParameterExpression(inherited, parameterName, plaintext);
|
|
23138
|
+
if (typeof own === "string") return own;
|
|
23139
|
+
return inheritedRenderedToken(inherited, parameterName, value, plaintext) ?? survivor;
|
|
23140
|
+
}
|
|
23141
|
+
function poisonRenderedSpellingsCollidingIn(template, parameterValues, inherited) {
|
|
23142
|
+
if (!inherited || inherited.size === 0 || template === void 0) return;
|
|
23143
|
+
const names = new Set(Object.keys(parameterValues));
|
|
23144
|
+
if (names.size < 2) return;
|
|
23145
|
+
const groups = [];
|
|
23146
|
+
if (template.Resources !== null && typeof template.Resources === "object") for (const resource of Object.values(template.Resources)) groups.push([{
|
|
23147
|
+
node: resource,
|
|
23148
|
+
mode: "resource"
|
|
23149
|
+
}]);
|
|
23150
|
+
if (template.Outputs !== void 0) groups.push(outputsGroupParts(template.Outputs));
|
|
23151
|
+
const bind = (name) => Object.hasOwn(parameterValues, name) ? { value: parameterValues[name] } : void 0;
|
|
23152
|
+
const withdrawn = /* @__PURE__ */ new Set();
|
|
23153
|
+
for (;;) {
|
|
23154
|
+
const fresh = [...collidingRenderedNames(groups.map((parts) => {
|
|
23155
|
+
const reads = /* @__PURE__ */ new Map();
|
|
23156
|
+
for (const { node, mode } of parts) {
|
|
23157
|
+
const reread = mode === "slot" ? void 0 : {
|
|
23158
|
+
bind,
|
|
23159
|
+
inherited
|
|
23160
|
+
};
|
|
23161
|
+
for (const [name, slotRead] of parameterReadsOf(node, names, reread, mode !== "output")) reads.set(name, slotRead || reads.get(name) === true);
|
|
23162
|
+
}
|
|
23163
|
+
return reads;
|
|
23164
|
+
}).filter((reads) => reads.size >= 2), parameterValues, inherited)].filter((name) => !withdrawn.has(name));
|
|
23165
|
+
if (fresh.length === 0) return;
|
|
23166
|
+
for (const name of fresh) {
|
|
23167
|
+
withdrawn.add(name);
|
|
23168
|
+
withdrawRenderedParameterSpelling(inherited, name);
|
|
23169
|
+
}
|
|
23170
|
+
}
|
|
23171
|
+
}
|
|
23172
|
+
function collidingRenderedNames(readsByGroup, parameterValues, inherited) {
|
|
23173
|
+
const withdraw = /* @__PURE__ */ new Set();
|
|
23174
|
+
for (const reads of readsByGroup) {
|
|
23175
|
+
const byPlaintext = /* @__PURE__ */ new Map();
|
|
23176
|
+
const slotReadPlaintexts = /* @__PURE__ */ new Set();
|
|
23177
|
+
for (const [name, slotRead] of reads) {
|
|
23178
|
+
if (!Object.hasOwn(parameterValues, name)) continue;
|
|
23179
|
+
const value = parameterValues[name];
|
|
23180
|
+
for (const [plaintext, survivor] of inheritedSecretsCarriedBy(value, inherited)) {
|
|
23181
|
+
const expression = carriedExpressionFor(inherited, name, value, plaintext, survivor);
|
|
23182
|
+
const rendered = typeof inheritedParameterExpression(inherited, name, plaintext) !== "string" && inheritedRenderedToken(inherited, name, value, plaintext) !== void 0;
|
|
23183
|
+
let byExpression = byPlaintext.get(plaintext);
|
|
23184
|
+
if (byExpression === void 0) {
|
|
23185
|
+
byExpression = /* @__PURE__ */ new Map();
|
|
23186
|
+
byPlaintext.set(plaintext, byExpression);
|
|
23187
|
+
}
|
|
23188
|
+
let renderedNames = byExpression.get(expression);
|
|
23189
|
+
if (renderedNames === void 0) {
|
|
23190
|
+
renderedNames = [];
|
|
23191
|
+
byExpression.set(expression, renderedNames);
|
|
23192
|
+
}
|
|
23193
|
+
if (rendered) renderedNames.push(name);
|
|
23194
|
+
if (slotRead) slotReadPlaintexts.add(plaintext);
|
|
23195
|
+
}
|
|
23196
|
+
}
|
|
23197
|
+
for (const [plaintext, byExpression] of byPlaintext) {
|
|
23198
|
+
if (byExpression.size < 2 || !slotReadPlaintexts.has(plaintext)) continue;
|
|
23199
|
+
for (const renderedNames of byExpression.values()) for (const name of renderedNames) withdraw.add(name);
|
|
23200
|
+
}
|
|
23201
|
+
}
|
|
23202
|
+
return withdraw;
|
|
23203
|
+
}
|
|
23204
|
+
const POSITIONED_INTRINSICS = /* @__PURE__ */ new Set(["Fn::Join", "Fn::Sub"]);
|
|
23205
|
+
function parameterReadsOf(node, names, reread, positionsArrays) {
|
|
23206
|
+
const reads = /* @__PURE__ */ new Map();
|
|
23207
|
+
const add = (name, slotRead) => {
|
|
23208
|
+
reads.set(name, slotRead || reads.get(name) === true);
|
|
23209
|
+
};
|
|
23210
|
+
const visit = (value, slotRead, atLeaf) => {
|
|
23211
|
+
if (Array.isArray(value)) {
|
|
23212
|
+
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"));
|
|
23213
|
+
for (const element of value) visit(element, slotRead || mayShrink, atLeaf && !mayShrink);
|
|
23214
|
+
return;
|
|
23215
|
+
}
|
|
23216
|
+
if (value === null || typeof value !== "object") return;
|
|
23217
|
+
const record = value;
|
|
23218
|
+
const intrinsic = Object.keys(record).some((key) => key === "Ref" || key.startsWith("Fn::"));
|
|
23219
|
+
if (intrinsic && atLeaf && reread !== void 0 && rereadParameterExpression(record, reread.bind, reread.inherited) !== void 0) {
|
|
23220
|
+
for (const name of refNamesIn(record, names)) add(name, false);
|
|
23221
|
+
return;
|
|
23222
|
+
}
|
|
23223
|
+
const ref = record["Ref"];
|
|
23224
|
+
if (typeof ref === "string" && names.has(ref)) add(ref, slotRead);
|
|
23225
|
+
const placeholderSlot = !positionsArrays && unkeyedPlaceholderParts(record, (name) => certifiesPlaceholder(name, reread)) > MAX_UNKEYED_PARTS;
|
|
23226
|
+
const sub = record["Fn::Sub"];
|
|
23227
|
+
const text = typeof sub === "string" ? sub : Array.isArray(sub) ? sub[0] : void 0;
|
|
23228
|
+
if (typeof text === "string") for (const match of text.matchAll(/\$\{([^}!][^}]*)\}/g)) {
|
|
23229
|
+
const name = match[1].trim();
|
|
23230
|
+
if (names.has(name)) add(name, slotRead || placeholderSlot);
|
|
23231
|
+
}
|
|
23232
|
+
for (const [key, child] of Object.entries(record)) visit(child, slotRead || placeholderSlot || key.startsWith("Fn::") && !POSITIONED_INTRINSICS.has(key), atLeaf && !intrinsic);
|
|
23233
|
+
};
|
|
23234
|
+
visit(node, reread === void 0, true);
|
|
23235
|
+
return reads;
|
|
23236
|
+
}
|
|
23237
|
+
const MAX_UNKEYED_PARTS = 1;
|
|
23238
|
+
function certifiesPlaceholder(name, reread) {
|
|
23239
|
+
if (reread === void 0) return false;
|
|
23240
|
+
const bound = reread.bind(name);
|
|
23241
|
+
if (bound === void 0) return false;
|
|
23242
|
+
if (inheritedSecretsCarriedBy(bound.value, reread.inherited).length === 0) return false;
|
|
23243
|
+
return typeof inheritedParameterExpression(reread.inherited, name, bound.value) === "string";
|
|
23244
|
+
}
|
|
23245
|
+
function unkeyedPlaceholderParts(record, certified) {
|
|
23246
|
+
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"]);
|
|
23247
|
+
if (Object.hasOwn(record, "Fn::Join")) {
|
|
23248
|
+
const args = record["Fn::Join"];
|
|
23249
|
+
if (!Array.isArray(args) || args.length !== 2 || !Array.isArray(args[1])) return Number.POSITIVE_INFINITY;
|
|
23250
|
+
return args[1].filter((part) => !keyed(part)).length;
|
|
23251
|
+
}
|
|
23252
|
+
if (Object.hasOwn(record, "Fn::Sub")) {
|
|
23253
|
+
const args = record["Fn::Sub"];
|
|
23254
|
+
const [template, variables] = typeof args === "string" ? [args, {}] : Array.isArray(args) ? [args[0], args[1]] : [];
|
|
23255
|
+
if (typeof template !== "string" || variables === null || typeof variables !== "object") return Number.POSITIVE_INFINITY;
|
|
23256
|
+
let unkeyed = 0;
|
|
23257
|
+
for (const hit of template.matchAll(/\$\{(!)?([^}]*)\}/g)) {
|
|
23258
|
+
const name = hit[2] ?? "";
|
|
23259
|
+
if (hit[1] === "!" || name === "") continue;
|
|
23260
|
+
if (!(Object.hasOwn(variables, name) ? keyed(variables[name]) : certified(name))) unkeyed += 1;
|
|
23261
|
+
}
|
|
23262
|
+
return unkeyed;
|
|
23263
|
+
}
|
|
23264
|
+
return 0;
|
|
23265
|
+
}
|
|
23266
|
+
function outputsGroupParts(outputs) {
|
|
23267
|
+
if (outputs === null || typeof outputs !== "object" || Array.isArray(outputs)) return [{
|
|
23268
|
+
node: outputs,
|
|
23269
|
+
mode: "slot"
|
|
23270
|
+
}];
|
|
23271
|
+
const parts = [];
|
|
23272
|
+
for (const output of Object.values(outputs)) {
|
|
23273
|
+
if (output === null || typeof output !== "object" || Array.isArray(output)) {
|
|
23274
|
+
parts.push({
|
|
23275
|
+
node: output,
|
|
23276
|
+
mode: "slot"
|
|
23277
|
+
});
|
|
23278
|
+
continue;
|
|
23279
|
+
}
|
|
23280
|
+
const { Value: value, ...rest } = output;
|
|
23281
|
+
parts.push({
|
|
23282
|
+
node: value,
|
|
23283
|
+
mode: "output"
|
|
23284
|
+
}, {
|
|
23285
|
+
node: rest,
|
|
23286
|
+
mode: "slot"
|
|
23287
|
+
});
|
|
23288
|
+
}
|
|
23289
|
+
return parts;
|
|
23290
|
+
}
|
|
23291
|
+
function refNamesIn(node, names) {
|
|
23292
|
+
const found = /* @__PURE__ */ new Set();
|
|
23293
|
+
const visit = (value) => {
|
|
23294
|
+
if (Array.isArray(value)) {
|
|
23295
|
+
for (const element of value) visit(element);
|
|
23296
|
+
return;
|
|
23297
|
+
}
|
|
23298
|
+
if (value === null || typeof value !== "object") return;
|
|
23299
|
+
const record = value;
|
|
23300
|
+
if (typeof record["Ref"] === "string" && names.has(record["Ref"])) found.add(record["Ref"]);
|
|
23301
|
+
const sub = record["Fn::Sub"];
|
|
23302
|
+
const text = typeof sub === "string" ? sub : Array.isArray(sub) ? sub[0] : void 0;
|
|
23303
|
+
if (typeof text === "string") for (const match of text.matchAll(/\$\{([^}!][^}]*)\}/g)) {
|
|
23304
|
+
const name = match[1].trim();
|
|
23305
|
+
if (names.has(name)) found.add(name);
|
|
23306
|
+
}
|
|
23307
|
+
for (const child of Object.values(record)) visit(child);
|
|
23308
|
+
};
|
|
23309
|
+
visit(node);
|
|
23310
|
+
return found;
|
|
23311
|
+
}
|
|
23312
|
+
function recordInheritedNoEchoListElements(resolver, inherited, recorded, value, context) {
|
|
23313
|
+
if (!Array.isArray(value)) return;
|
|
23314
|
+
const parameterValues = [...inherited.keys()].filter((plaintext) => isNoEchoParameterPlaintext(inherited, plaintext));
|
|
23315
|
+
if (parameterValues.length === 0) return;
|
|
23316
|
+
const joined = value.map((element) => String(element)).join(",");
|
|
23317
|
+
const normalized = (plaintext) => plaintext.split(",").map((piece) => piece.trim()).join(",");
|
|
23318
|
+
if (!parameterValues.some((plaintext) => `,${normalized(plaintext)},`.includes(`,${joined},`))) return;
|
|
23319
|
+
for (const element of value) {
|
|
23320
|
+
if (typeof element !== "string" || element.length < 4) continue;
|
|
23321
|
+
recordNoEchoParameterFreshValue(element, recorded, resolver.publicNoEchoTokens(context));
|
|
23322
|
+
}
|
|
23323
|
+
}
|
|
23324
|
+
function recordNoEchoParameterValue(paramDef, value, context) {
|
|
23325
|
+
const bag = context.recordedSecretValues;
|
|
23326
|
+
if (!declaresNoEcho(paramDef) || bag === void 0) return;
|
|
23327
|
+
recordLogOnlyParameterValue(bag, value);
|
|
23328
|
+
recordNoEchoParameterFreshValue(value, bag, this.publicNoEchoTokens(context));
|
|
23329
|
+
}
|
|
23330
|
+
function refuseCoercedInheritedSecret(name, paramDef, userValue, inherited) {
|
|
23331
|
+
if (!inherited || inherited.size === 0) return;
|
|
23332
|
+
const secretPairs = new Map([...inherited].filter(([plaintext]) => !isNoEchoParameterPlaintext(inherited, plaintext)));
|
|
23333
|
+
if (secretPairs.size === 0) return;
|
|
23334
|
+
const carriedBefore = inheritedSecretsCarriedBy(userValue, secretPairs).length;
|
|
23335
|
+
if (carriedBefore === 0) return;
|
|
23336
|
+
if (inheritedSecretsCarriedBy(this.coerceParameterValue(userValue, paramDef.Type), secretPairs).length >= carriedBefore) return;
|
|
23337
|
+
const loggedName = this.displayMasked(name);
|
|
23338
|
+
const loggedType = this.displayMasked(paramDef.Type);
|
|
23339
|
+
throw markNonRetryable(new IntrinsicResolutionRefusalError(`Nested-stack parameter ${quotedRender(loggedName, "'")} is declared ${QUOTABLE_RENDER.test(loggedType) ? `'Type: ${loggedType}'` : "with a Type that is not a plain identifier"}, but the parent stack resolved a SECRET dynamic reference into it. cdkd keeps a resolved secret out of persisted state by rewriting STRING leaves back to their {{resolve:...}} expression; coercing this value to ${quotedRender(loggedType, "'", "that Type")} destroys the plaintext cdkd would have matched on, so the DECRYPTED secret would be left in the child stack's state.json with nothing to redact it back to. Declare ${quotedRender(loggedName, "'", "the parameter")} as 'Type: String' in the nested stack's template (CDK does this by default for cross-stack references), or stop passing a secret reference into it.`, void 0, "NESTED_STACK_SECRET_PARAMETER_TYPE"));
|
|
23340
|
+
}
|
|
23341
|
+
|
|
22752
23342
|
//#endregion
|
|
22753
23343
|
//#region src/deployment/intrinsic-resolver/functions.ts
|
|
22754
23344
|
async function resolveIf(ifArgs, context, source) {
|
|
@@ -22770,11 +23360,13 @@ async function resolveIf(ifArgs, context, source) {
|
|
|
22770
23360
|
};
|
|
22771
23361
|
if (!context.conditions || !Object.hasOwn(context.conditions, conditionName)) {
|
|
22772
23362
|
this.logger.warn(`Condition ${this.displayMasked(String(conditionName), context)} not found in context, assuming false`);
|
|
23363
|
+
recordTakenIfBranchIn(context, source, false);
|
|
22773
23364
|
return await resolveBranch(valueIfFalse);
|
|
22774
23365
|
}
|
|
22775
23366
|
const conditionValue = context.conditions[conditionName];
|
|
22776
23367
|
const selectedValue = conditionValue ? valueIfTrue : valueIfFalse;
|
|
22777
23368
|
this.logger.debug(`Resolved Fn::If: condition ${this.logRender(String(conditionName), context)} = ${conditionValue}, selected ${conditionValue ? "true" : "false"} branch`);
|
|
23369
|
+
recordTakenIfBranchIn(context, source, Boolean(conditionValue));
|
|
22778
23370
|
return await resolveBranch(selectedValue);
|
|
22779
23371
|
}
|
|
22780
23372
|
async function resolveEquals(equalsArgs, context) {
|
|
@@ -23329,238 +23921,6 @@ async function resolveKeyUnit(key, val, context, abandoned) {
|
|
|
23329
23921
|
}
|
|
23330
23922
|
}
|
|
23331
23923
|
|
|
23332
|
-
//#endregion
|
|
23333
|
-
//#region src/deployment/intrinsic-resolver/parameter-secrets.ts
|
|
23334
|
-
function recordInheritedParameterSecrets(parameterName, value, context) {
|
|
23335
|
-
const inherited = context.inheritedSecrets;
|
|
23336
|
-
const recorded = context.recordedSecretValues;
|
|
23337
|
-
if (inherited && recorded) carryLogOnlyValuesCarriedBy(inherited, recorded, value);
|
|
23338
|
-
if (recorded) carryPhysicalNameCopiesCarriedBy(context, recorded, value);
|
|
23339
|
-
if (inherited && recorded) recordInheritedNoEchoListElements(this, inherited, recorded, value, context);
|
|
23340
|
-
if (!inherited || inherited.size === 0 || !recorded) return;
|
|
23341
|
-
const mirror = parameterReadMirrors.get(recorded);
|
|
23342
|
-
recordInheritedParameterValue(recorded, inherited, parameterName, value);
|
|
23343
|
-
if (mirror) recordInheritedParameterValue(mirror, inherited, parameterName, value);
|
|
23344
|
-
for (const [plaintext, expression] of inheritedSecretsCarriedBy(value, inherited)) {
|
|
23345
|
-
const carried = carriedExpressionFor(inherited, parameterName, value, plaintext, expression);
|
|
23346
|
-
recorded.set(plaintext, carried);
|
|
23347
|
-
const parentEntry = context.inheritedReferenceProvenance?.get(carried);
|
|
23348
|
-
if (parentEntry !== void 0) recordReferenceProvenanceEntry(recorded, carried, parentEntry, "read");
|
|
23349
|
-
recordInheritedParameterRead(recorded, inherited, parameterName);
|
|
23350
|
-
if (mirror) recordInheritedParameterRead(mirror, inherited, parameterName);
|
|
23351
|
-
carryFreshNoEchoMark(inherited, recorded, plaintext);
|
|
23352
|
-
}
|
|
23353
|
-
}
|
|
23354
|
-
const parameterReadMirrors = /* @__PURE__ */ new WeakMap();
|
|
23355
|
-
function mirrorInheritedParameterReads(passSecrets, persistSecrets) {
|
|
23356
|
-
if (passSecrets !== persistSecrets) parameterReadMirrors.set(passSecrets, persistSecrets);
|
|
23357
|
-
}
|
|
23358
|
-
function carryPhysicalNameCopiesCarriedBy(context, recorded, value) {
|
|
23359
|
-
const names = context.inheritedPhysicalNameCopies ?? (context.inheritedSecrets && physicalNameCopiesOf.get(context.inheritedSecrets));
|
|
23360
|
-
if (names === void 0 || names.size === 0) return;
|
|
23361
|
-
const leaves = [...wholeStringLeavesOf(value)];
|
|
23362
|
-
for (const name of names) if (leaves.some((leaf) => leaf.includes(name))) recordPhysicalNameCopy(recorded, name);
|
|
23363
|
-
}
|
|
23364
|
-
function carriedExpressionFor(inherited, parameterName, value, plaintext, survivor) {
|
|
23365
|
-
const own = inheritedParameterExpression(inherited, parameterName, plaintext);
|
|
23366
|
-
if (typeof own === "string") return own;
|
|
23367
|
-
return inheritedRenderedToken(inherited, parameterName, value, plaintext) ?? survivor;
|
|
23368
|
-
}
|
|
23369
|
-
function poisonRenderedSpellingsCollidingIn(template, parameterValues, inherited) {
|
|
23370
|
-
if (!inherited || inherited.size === 0 || template === void 0) return;
|
|
23371
|
-
const names = new Set(Object.keys(parameterValues));
|
|
23372
|
-
if (names.size < 2) return;
|
|
23373
|
-
const groups = [];
|
|
23374
|
-
if (template.Resources !== null && typeof template.Resources === "object") for (const resource of Object.values(template.Resources)) groups.push([{
|
|
23375
|
-
node: resource,
|
|
23376
|
-
mode: "resource"
|
|
23377
|
-
}]);
|
|
23378
|
-
if (template.Outputs !== void 0) groups.push(outputsGroupParts(template.Outputs));
|
|
23379
|
-
const bind = (name) => Object.hasOwn(parameterValues, name) ? { value: parameterValues[name] } : void 0;
|
|
23380
|
-
const withdrawn = /* @__PURE__ */ new Set();
|
|
23381
|
-
for (;;) {
|
|
23382
|
-
const fresh = [...collidingRenderedNames(groups.map((parts) => {
|
|
23383
|
-
const reads = /* @__PURE__ */ new Map();
|
|
23384
|
-
for (const { node, mode } of parts) {
|
|
23385
|
-
const reread = mode === "slot" ? void 0 : {
|
|
23386
|
-
bind,
|
|
23387
|
-
inherited
|
|
23388
|
-
};
|
|
23389
|
-
for (const [name, slotRead] of parameterReadsOf(node, names, reread, mode !== "output")) reads.set(name, slotRead || reads.get(name) === true);
|
|
23390
|
-
}
|
|
23391
|
-
return reads;
|
|
23392
|
-
}).filter((reads) => reads.size >= 2), parameterValues, inherited)].filter((name) => !withdrawn.has(name));
|
|
23393
|
-
if (fresh.length === 0) return;
|
|
23394
|
-
for (const name of fresh) {
|
|
23395
|
-
withdrawn.add(name);
|
|
23396
|
-
withdrawRenderedParameterSpelling(inherited, name);
|
|
23397
|
-
}
|
|
23398
|
-
}
|
|
23399
|
-
}
|
|
23400
|
-
function collidingRenderedNames(readsByGroup, parameterValues, inherited) {
|
|
23401
|
-
const withdraw = /* @__PURE__ */ new Set();
|
|
23402
|
-
for (const reads of readsByGroup) {
|
|
23403
|
-
const byPlaintext = /* @__PURE__ */ new Map();
|
|
23404
|
-
const slotReadPlaintexts = /* @__PURE__ */ new Set();
|
|
23405
|
-
for (const [name, slotRead] of reads) {
|
|
23406
|
-
if (!Object.hasOwn(parameterValues, name)) continue;
|
|
23407
|
-
const value = parameterValues[name];
|
|
23408
|
-
for (const [plaintext, survivor] of inheritedSecretsCarriedBy(value, inherited)) {
|
|
23409
|
-
const expression = carriedExpressionFor(inherited, name, value, plaintext, survivor);
|
|
23410
|
-
const rendered = typeof inheritedParameterExpression(inherited, name, plaintext) !== "string" && inheritedRenderedToken(inherited, name, value, plaintext) !== void 0;
|
|
23411
|
-
let byExpression = byPlaintext.get(plaintext);
|
|
23412
|
-
if (byExpression === void 0) {
|
|
23413
|
-
byExpression = /* @__PURE__ */ new Map();
|
|
23414
|
-
byPlaintext.set(plaintext, byExpression);
|
|
23415
|
-
}
|
|
23416
|
-
let renderedNames = byExpression.get(expression);
|
|
23417
|
-
if (renderedNames === void 0) {
|
|
23418
|
-
renderedNames = [];
|
|
23419
|
-
byExpression.set(expression, renderedNames);
|
|
23420
|
-
}
|
|
23421
|
-
if (rendered) renderedNames.push(name);
|
|
23422
|
-
if (slotRead) slotReadPlaintexts.add(plaintext);
|
|
23423
|
-
}
|
|
23424
|
-
}
|
|
23425
|
-
for (const [plaintext, byExpression] of byPlaintext) {
|
|
23426
|
-
if (byExpression.size < 2 || !slotReadPlaintexts.has(plaintext)) continue;
|
|
23427
|
-
for (const renderedNames of byExpression.values()) for (const name of renderedNames) withdraw.add(name);
|
|
23428
|
-
}
|
|
23429
|
-
}
|
|
23430
|
-
return withdraw;
|
|
23431
|
-
}
|
|
23432
|
-
const POSITIONED_INTRINSICS = /* @__PURE__ */ new Set(["Fn::Join", "Fn::Sub"]);
|
|
23433
|
-
function parameterReadsOf(node, names, reread, positionsArrays) {
|
|
23434
|
-
const reads = /* @__PURE__ */ new Map();
|
|
23435
|
-
const add = (name, slotRead) => {
|
|
23436
|
-
reads.set(name, slotRead || reads.get(name) === true);
|
|
23437
|
-
};
|
|
23438
|
-
const visit = (value, slotRead, atLeaf) => {
|
|
23439
|
-
if (Array.isArray(value)) {
|
|
23440
|
-
const mayShrink = atLeaf && !positionsArrays || value.some((element) => element !== null && typeof element === "object" && !Array.isArray(element) && (Object.hasOwn(element, "Fn::If") || element["Ref"] === "AWS::NoValue"));
|
|
23441
|
-
for (const element of value) visit(element, slotRead || mayShrink, atLeaf && !mayShrink);
|
|
23442
|
-
return;
|
|
23443
|
-
}
|
|
23444
|
-
if (value === null || typeof value !== "object") return;
|
|
23445
|
-
const record = value;
|
|
23446
|
-
const intrinsic = Object.keys(record).some((key) => key === "Ref" || key.startsWith("Fn::"));
|
|
23447
|
-
if (intrinsic && atLeaf && reread !== void 0 && rereadParameterExpression(record, reread.bind, reread.inherited) !== void 0) {
|
|
23448
|
-
for (const name of refNamesIn(record, names)) add(name, false);
|
|
23449
|
-
return;
|
|
23450
|
-
}
|
|
23451
|
-
const ref = record["Ref"];
|
|
23452
|
-
if (typeof ref === "string" && names.has(ref)) add(ref, slotRead);
|
|
23453
|
-
const placeholderSlot = !positionsArrays && unkeyedPlaceholderParts(record, (name) => certifiesPlaceholder(name, reread)) > MAX_UNKEYED_PARTS;
|
|
23454
|
-
const sub = record["Fn::Sub"];
|
|
23455
|
-
const text = typeof sub === "string" ? sub : Array.isArray(sub) ? sub[0] : void 0;
|
|
23456
|
-
if (typeof text === "string") for (const match of text.matchAll(/\$\{([^}!][^}]*)\}/g)) {
|
|
23457
|
-
const name = match[1].trim();
|
|
23458
|
-
if (names.has(name)) add(name, slotRead || placeholderSlot);
|
|
23459
|
-
}
|
|
23460
|
-
for (const [key, child] of Object.entries(record)) visit(child, slotRead || placeholderSlot || key.startsWith("Fn::") && !POSITIONED_INTRINSICS.has(key), atLeaf && !intrinsic);
|
|
23461
|
-
};
|
|
23462
|
-
visit(node, reread === void 0, true);
|
|
23463
|
-
return reads;
|
|
23464
|
-
}
|
|
23465
|
-
const MAX_UNKEYED_PARTS = 1;
|
|
23466
|
-
function certifiesPlaceholder(name, reread) {
|
|
23467
|
-
if (reread === void 0) return false;
|
|
23468
|
-
const bound = reread.bind(name);
|
|
23469
|
-
if (bound === void 0) return false;
|
|
23470
|
-
if (inheritedSecretsCarriedBy(bound.value, reread.inherited).length === 0) return false;
|
|
23471
|
-
return typeof inheritedParameterExpression(reread.inherited, name, bound.value) === "string";
|
|
23472
|
-
}
|
|
23473
|
-
function unkeyedPlaceholderParts(record, certified) {
|
|
23474
|
-
const keyed = (value) => typeof value === "string" || value !== null && typeof value === "object" && !Array.isArray(value) && Object.keys(value).length === 1 && typeof value["Ref"] === "string" && certified(value["Ref"]);
|
|
23475
|
-
if (Object.hasOwn(record, "Fn::Join")) {
|
|
23476
|
-
const args = record["Fn::Join"];
|
|
23477
|
-
if (!Array.isArray(args) || args.length !== 2 || !Array.isArray(args[1])) return Number.POSITIVE_INFINITY;
|
|
23478
|
-
return args[1].filter((part) => !keyed(part)).length;
|
|
23479
|
-
}
|
|
23480
|
-
if (Object.hasOwn(record, "Fn::Sub")) {
|
|
23481
|
-
const args = record["Fn::Sub"];
|
|
23482
|
-
const [template, variables] = typeof args === "string" ? [args, {}] : Array.isArray(args) ? [args[0], args[1]] : [];
|
|
23483
|
-
if (typeof template !== "string" || variables === null || typeof variables !== "object") return Number.POSITIVE_INFINITY;
|
|
23484
|
-
let unkeyed = 0;
|
|
23485
|
-
for (const hit of template.matchAll(/\$\{(!)?([^}]*)\}/g)) {
|
|
23486
|
-
const name = hit[2] ?? "";
|
|
23487
|
-
if (hit[1] === "!" || name === "") continue;
|
|
23488
|
-
if (!(Object.hasOwn(variables, name) ? keyed(variables[name]) : certified(name))) unkeyed += 1;
|
|
23489
|
-
}
|
|
23490
|
-
return unkeyed;
|
|
23491
|
-
}
|
|
23492
|
-
return 0;
|
|
23493
|
-
}
|
|
23494
|
-
function outputsGroupParts(outputs) {
|
|
23495
|
-
if (outputs === null || typeof outputs !== "object" || Array.isArray(outputs)) return [{
|
|
23496
|
-
node: outputs,
|
|
23497
|
-
mode: "slot"
|
|
23498
|
-
}];
|
|
23499
|
-
const parts = [];
|
|
23500
|
-
for (const output of Object.values(outputs)) {
|
|
23501
|
-
if (output === null || typeof output !== "object" || Array.isArray(output)) {
|
|
23502
|
-
parts.push({
|
|
23503
|
-
node: output,
|
|
23504
|
-
mode: "slot"
|
|
23505
|
-
});
|
|
23506
|
-
continue;
|
|
23507
|
-
}
|
|
23508
|
-
const { Value: value, ...rest } = output;
|
|
23509
|
-
parts.push({
|
|
23510
|
-
node: value,
|
|
23511
|
-
mode: "output"
|
|
23512
|
-
}, {
|
|
23513
|
-
node: rest,
|
|
23514
|
-
mode: "slot"
|
|
23515
|
-
});
|
|
23516
|
-
}
|
|
23517
|
-
return parts;
|
|
23518
|
-
}
|
|
23519
|
-
function refNamesIn(node, names) {
|
|
23520
|
-
const found = /* @__PURE__ */ new Set();
|
|
23521
|
-
const visit = (value) => {
|
|
23522
|
-
if (Array.isArray(value)) {
|
|
23523
|
-
for (const element of value) visit(element);
|
|
23524
|
-
return;
|
|
23525
|
-
}
|
|
23526
|
-
if (value === null || typeof value !== "object") return;
|
|
23527
|
-
const record = value;
|
|
23528
|
-
if (typeof record["Ref"] === "string" && names.has(record["Ref"])) found.add(record["Ref"]);
|
|
23529
|
-
for (const child of Object.values(record)) visit(child);
|
|
23530
|
-
};
|
|
23531
|
-
visit(node);
|
|
23532
|
-
return found;
|
|
23533
|
-
}
|
|
23534
|
-
function recordInheritedNoEchoListElements(resolver, inherited, recorded, value, context) {
|
|
23535
|
-
if (!Array.isArray(value)) return;
|
|
23536
|
-
const parameterValues = [...inherited.keys()].filter((plaintext) => isNoEchoParameterPlaintext(inherited, plaintext));
|
|
23537
|
-
if (parameterValues.length === 0) return;
|
|
23538
|
-
const joined = value.map((element) => String(element)).join(",");
|
|
23539
|
-
const normalized = (plaintext) => plaintext.split(",").map((piece) => piece.trim()).join(",");
|
|
23540
|
-
if (!parameterValues.some((plaintext) => `,${normalized(plaintext)},`.includes(`,${joined},`))) return;
|
|
23541
|
-
for (const element of value) {
|
|
23542
|
-
if (typeof element !== "string" || element.length < 4) continue;
|
|
23543
|
-
recordNoEchoParameterFreshValue(element, recorded, resolver.publicNoEchoTokens(context));
|
|
23544
|
-
}
|
|
23545
|
-
}
|
|
23546
|
-
function recordNoEchoParameterValue(paramDef, value, context) {
|
|
23547
|
-
const bag = context.recordedSecretValues;
|
|
23548
|
-
if (!declaresNoEcho(paramDef) || bag === void 0) return;
|
|
23549
|
-
recordLogOnlyParameterValue(bag, value);
|
|
23550
|
-
recordNoEchoParameterFreshValue(value, bag, this.publicNoEchoTokens(context));
|
|
23551
|
-
}
|
|
23552
|
-
function refuseCoercedInheritedSecret(name, paramDef, userValue, inherited) {
|
|
23553
|
-
if (!inherited || inherited.size === 0) return;
|
|
23554
|
-
const secretPairs = new Map([...inherited].filter(([plaintext]) => !isNoEchoParameterPlaintext(inherited, plaintext)));
|
|
23555
|
-
if (secretPairs.size === 0) return;
|
|
23556
|
-
const carriedBefore = inheritedSecretsCarriedBy(userValue, secretPairs).length;
|
|
23557
|
-
if (carriedBefore === 0) return;
|
|
23558
|
-
if (inheritedSecretsCarriedBy(this.coerceParameterValue(userValue, paramDef.Type), secretPairs).length >= carriedBefore) return;
|
|
23559
|
-
const loggedName = this.displayMasked(name);
|
|
23560
|
-
const loggedType = this.displayMasked(paramDef.Type);
|
|
23561
|
-
throw markNonRetryable(new IntrinsicResolutionRefusalError(`Nested-stack parameter ${quotedRender(loggedName, "'")} is declared ${QUOTABLE_RENDER.test(loggedType) ? `'Type: ${loggedType}'` : "with a Type that is not a plain identifier"}, but the parent stack resolved a SECRET dynamic reference into it. cdkd keeps a resolved secret out of persisted state by rewriting STRING leaves back to their {{resolve:...}} expression; coercing this value to ${quotedRender(loggedType, "'", "that Type")} destroys the plaintext cdkd would have matched on, so the DECRYPTED secret would be left in the child stack's state.json with nothing to redact it back to. Declare ${quotedRender(loggedName, "'", "the parameter")} as 'Type: String' in the nested stack's template (CDK does this by default for cross-stack references), or stop passing a secret reference into it.`, void 0, "NESTED_STACK_SECRET_PARAMETER_TYPE"));
|
|
23562
|
-
}
|
|
23563
|
-
|
|
23564
23924
|
//#endregion
|
|
23565
23925
|
//#region src/deployment/intrinsic-resolver/refs.ts
|
|
23566
23926
|
function nameIsNeverAResource(logicalId, context) {
|
|
@@ -23737,7 +24097,18 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
23737
24097
|
if (typeof value === "string" && value.includes("{{resolve:")) return await this.resolveTemplateLeafReferences(value, context);
|
|
23738
24098
|
return value;
|
|
23739
24099
|
}
|
|
23740
|
-
if (Array.isArray(value))
|
|
24100
|
+
if (Array.isArray(value)) {
|
|
24101
|
+
const resolved = await allSettledKeepingFirstRejection(() => value.map((v) => this.resolveValue(v, context)), (pending) => this.warnAbandonedParts(pending));
|
|
24102
|
+
const kept = resolved.filter((v) => v !== AWS_NO_VALUE);
|
|
24103
|
+
if (kept.length !== resolved.length) {
|
|
24104
|
+
const dropped = [];
|
|
24105
|
+
resolved.forEach((v, i) => {
|
|
24106
|
+
if (v === AWS_NO_VALUE) dropped.push(i);
|
|
24107
|
+
});
|
|
24108
|
+
recordDroppedArrayElementsIn(context, value, dropped);
|
|
24109
|
+
}
|
|
24110
|
+
return kept;
|
|
24111
|
+
}
|
|
23741
24112
|
const obj = value;
|
|
23742
24113
|
if ("Ref" in obj) {
|
|
23743
24114
|
const logicalId = obj["Ref"];
|
|
@@ -26331,7 +26702,7 @@ var CloudControlProvider = class {
|
|
|
26331
26702
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
26332
26703
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
26333
26704
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
26334
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
26705
|
+
const { ASGProvider } = await import("./asg-provider-DJdNNqDe.js");
|
|
26335
26706
|
const delegateRegion = ambientRegion();
|
|
26336
26707
|
let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
|
|
26337
26708
|
if (asgProvider === void 0) {
|
|
@@ -26437,7 +26808,7 @@ var CloudControlProvider = class {
|
|
|
26437
26808
|
const family = SDK_DELETE_FAMILIES.get(resourceType);
|
|
26438
26809
|
const cached = this.sdkDeleteDelegates.get(family);
|
|
26439
26810
|
if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
|
|
26440
|
-
const provider = family === "rds" ? new (await (import("./rds-provider-
|
|
26811
|
+
const provider = family === "rds" ? new (await (import("./rds-provider-C-lGTdAb.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-UDy6HC5O.js"))).NeptuneProvider({ region: ccRegion });
|
|
26441
26812
|
this.sdkDeleteDelegates.set(family, {
|
|
26442
26813
|
region: ccRegion,
|
|
26443
26814
|
provider
|
|
@@ -30914,6 +31285,58 @@ function recordedTagsUnreadableWarning(resourceType, id, applied) {
|
|
|
30914
31285
|
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.`;
|
|
30915
31286
|
}
|
|
30916
31287
|
|
|
31288
|
+
//#endregion
|
|
31289
|
+
//#region src/provisioning/delete-started.ts
|
|
31290
|
+
const DELETE_STARTED = Symbol.for("cdkd.deleteStarted");
|
|
31291
|
+
const MAX_DEPTH = 10;
|
|
31292
|
+
function markDeleteStarted(error) {
|
|
31293
|
+
try {
|
|
31294
|
+
if (typeof error !== "object" || error === null || !Object.isExtensible(error)) return error;
|
|
31295
|
+
Object.defineProperty(error, DELETE_STARTED, {
|
|
31296
|
+
value: true,
|
|
31297
|
+
enumerable: false,
|
|
31298
|
+
writable: false,
|
|
31299
|
+
configurable: true
|
|
31300
|
+
});
|
|
31301
|
+
} catch {}
|
|
31302
|
+
return error;
|
|
31303
|
+
}
|
|
31304
|
+
function isDeleteStarted(error) {
|
|
31305
|
+
try {
|
|
31306
|
+
let current = error;
|
|
31307
|
+
for (let depth = 0; depth < MAX_DEPTH && typeof current === "object" && current !== null; depth++) {
|
|
31308
|
+
if (current[DELETE_STARTED] === true) return true;
|
|
31309
|
+
current = current.cause;
|
|
31310
|
+
}
|
|
31311
|
+
} catch {}
|
|
31312
|
+
return false;
|
|
31313
|
+
}
|
|
31314
|
+
const REFUSAL_NAMES = /* @__PURE__ */ new Set([
|
|
31315
|
+
"AccessDenied",
|
|
31316
|
+
"AccessDeniedException",
|
|
31317
|
+
"UnauthorizedOperation",
|
|
31318
|
+
"AuthorizationError",
|
|
31319
|
+
"DependencyViolation",
|
|
31320
|
+
"DeleteConflict",
|
|
31321
|
+
"DeleteConflictException"
|
|
31322
|
+
]);
|
|
31323
|
+
function isRefusedByName(error) {
|
|
31324
|
+
try {
|
|
31325
|
+
let current = error;
|
|
31326
|
+
for (let depth = 0; depth < MAX_DEPTH && current != null; depth++) {
|
|
31327
|
+
if (typeof current !== "object") break;
|
|
31328
|
+
const link = current;
|
|
31329
|
+
for (const name of [
|
|
31330
|
+
link.name,
|
|
31331
|
+
link.Code,
|
|
31332
|
+
link.code
|
|
31333
|
+
]) if (typeof name === "string" && REFUSAL_NAMES.has(name)) return true;
|
|
31334
|
+
current = link.cause;
|
|
31335
|
+
}
|
|
31336
|
+
} catch {}
|
|
31337
|
+
return false;
|
|
31338
|
+
}
|
|
31339
|
+
|
|
30917
31340
|
//#endregion
|
|
30918
31341
|
//#region src/provisioning/providers/idempotency-token.ts
|
|
30919
31342
|
const PROCESS_NONCE = randomUUID();
|
|
@@ -34757,28 +35180,9 @@ async function replayRevert(s) {
|
|
|
34757
35180
|
|
|
34758
35181
|
//#endregion
|
|
34759
35182
|
//#region src/deployment/rollback-executor/replaced-survivor.ts
|
|
34760
|
-
const DELETE_REFUSAL_NAMES = /* @__PURE__ */ new Set([
|
|
34761
|
-
"AccessDenied",
|
|
34762
|
-
"AccessDeniedException",
|
|
34763
|
-
"UnauthorizedOperation",
|
|
34764
|
-
"AuthorizationError",
|
|
34765
|
-
"DependencyViolation",
|
|
34766
|
-
"DeleteConflict",
|
|
34767
|
-
"DeleteConflictException"
|
|
34768
|
-
]);
|
|
34769
35183
|
function replacedDeleteFailureVerdict(error) {
|
|
34770
|
-
|
|
34771
|
-
|
|
34772
|
-
if (typeof current !== "object") break;
|
|
34773
|
-
const link = current;
|
|
34774
|
-
for (const name of [
|
|
34775
|
-
link.name,
|
|
34776
|
-
link.Code,
|
|
34777
|
-
link.code
|
|
34778
|
-
]) if (typeof name === "string" && DELETE_REFUSAL_NAMES.has(name)) return "kept";
|
|
34779
|
-
current = link.cause;
|
|
34780
|
-
}
|
|
34781
|
-
return "unconfirmed";
|
|
35184
|
+
if (isDeleteStarted(error)) return "unconfirmed";
|
|
35185
|
+
return isRefusedByName(error) ? "kept" : "unconfirmed";
|
|
34782
35186
|
}
|
|
34783
35187
|
const REPLACED_SURVIVOR_PROBE_TIMEOUT_MS = 3e4;
|
|
34784
35188
|
const INTERRUPT_POLL_MS = 250;
|
|
@@ -35098,7 +35502,7 @@ function survivorUnprovenRefusal(s, oldType, verdict) {
|
|
|
35098
35502
|
const oldId = op.previousState?.physicalId;
|
|
35099
35503
|
const oldShown = hasAddressablePhysicalId({ physicalId: oldId }) ? refusalPhysicalId(mask(String(oldId))) : "no recorded id";
|
|
35100
35504
|
const rerun = rerunRollbackPhrase(ctx, "cdkd rollback");
|
|
35101
|
-
const why = verdict === "unreadable" ? "cdkd has no read for this resource type that can tell whether it does. Re-creating it could duplicate it or collide with it" : verdict === "interrupted" ? `the rollback was interrupted before cdkd could read whether it does; re-running ${rerun} reads it` : verdict === "unknown" ? `cdkd could not read whether it does (the read failed or did not answer in time); re-running ${rerun} reads it again. Re-creating it could duplicate it or collide with it` : `AWS still reports it, but its failed delete may have been accepted and still be running, or only partly ran. Re-adopting it could leave neither resource once a running delete finishes, or one that delete already stripped; once AWS reports it gone, re-running ${rerun} re-creates it`;
|
|
35505
|
+
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}`;
|
|
35102
35506
|
return ownRemedyError(markNonRetryable(new CdkdError(`Cannot reverse the replacement of ${refusalLogicalId(op.logicalId)} (${refusalResourceType(oldType)}): the deploy did not confirm that it deleted the old resource (${oldShown}), so it may still exist, and ${why}. Nothing was sent and the journal is kept.` + (remedy.offered ? " To keep the new resource in its place instead, re-run with the command below, then delete the old resource by hand if it still exists." : "") + `${remedy.clause}${describedPhysicalIdPointer(oldShown)}` + remedy.line, "REPLACED_SURVIVOR_UNPROVEN")));
|
|
35103
35507
|
}
|
|
35104
35508
|
|
|
@@ -39609,7 +40013,7 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39609
40013
|
this.logger.debug(maskSecrets(`Added/updated ${tagsToAdd.length} tag(s) on DynamoDB GlobalTable ${tableArn}`));
|
|
39610
40014
|
}
|
|
39611
40015
|
}
|
|
39612
|
-
async applyAutoScalingDiff(tableName, dimension, oldSettings, newSettings, client, indexName, budget, maskSecrets = (text) => text) {
|
|
40016
|
+
async applyAutoScalingDiff(tableName, dimension, oldSettings, newSettings, client, indexName, budget, maskSecrets = (text) => text, progress) {
|
|
39613
40017
|
const warn = (message) => this.logger.warn(maskSecrets(message));
|
|
39614
40018
|
const asMaxRetries = autoScalingRetriesWithinDeleteBudget(budget, 8);
|
|
39615
40019
|
const metricType = dimension.endsWith("WriteCapacityUnits") ? "DynamoDBWriteCapacityUtilization" : "DynamoDBReadCapacityUtilization";
|
|
@@ -39709,8 +40113,10 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39709
40113
|
onInterrupted: watch.onInterrupted,
|
|
39710
40114
|
...autoScalingRetryDelays.sleep ? { sleep: autoScalingRetryDelays.sleep } : {}
|
|
39711
40115
|
});
|
|
40116
|
+
if (progress) progress.stripped = true;
|
|
39712
40117
|
} catch (err) {
|
|
39713
40118
|
if (isInterruptedWaitError(err)) throw err;
|
|
40119
|
+
if (progress && !isObjectNotFound(err) && !isRefusedByName(err)) progress.stripped = true;
|
|
39714
40120
|
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()}`);
|
|
39715
40121
|
}
|
|
39716
40122
|
try {
|
|
@@ -39725,9 +40131,11 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39725
40131
|
onInterrupted: watch.onInterrupted,
|
|
39726
40132
|
...autoScalingRetryDelays.sleep ? { sleep: autoScalingRetryDelays.sleep } : {}
|
|
39727
40133
|
});
|
|
40134
|
+
if (progress) progress.stripped = true;
|
|
39728
40135
|
this.logger.debug(maskSecrets(`Deregistered auto-scaling target ${resourceId} (${dimension})`));
|
|
39729
40136
|
} catch (err) {
|
|
39730
40137
|
if (isInterruptedWaitError(err)) throw err;
|
|
40138
|
+
if (progress && !isObjectNotFound(err) && !isRefusedByName(err)) progress.stripped = true;
|
|
39731
40139
|
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()}`);
|
|
39732
40140
|
}
|
|
39733
40141
|
} finally {
|
|
@@ -39815,9 +40223,11 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39815
40223
|
}
|
|
39816
40224
|
async delete(logicalId, physicalId, resourceType, _properties, context) {
|
|
39817
40225
|
const flip = this.protectionFlips.acquire(deleteBudgetKey(physicalId, context?.expectedRegion), DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS, resolveDynamoDbDeleteBudgetClock());
|
|
40226
|
+
const progress = { stripped: false };
|
|
39818
40227
|
try {
|
|
39819
|
-
await this.deleteGlobalTableResource(logicalId, physicalId, resourceType, context, flip);
|
|
40228
|
+
await this.deleteGlobalTableResource(logicalId, physicalId, resourceType, context, flip, progress);
|
|
39820
40229
|
} catch (error) {
|
|
40230
|
+
if (progress.stripped) markDeleteStarted(error);
|
|
39821
40231
|
let outcome = "failed";
|
|
39822
40232
|
try {
|
|
39823
40233
|
outcome = await compensateRemovedDeletionProtection({
|
|
@@ -39840,7 +40250,7 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39840
40250
|
throw error;
|
|
39841
40251
|
}
|
|
39842
40252
|
}
|
|
39843
|
-
async deleteGlobalTableResource(logicalId, physicalId, resourceType, context, flip) {
|
|
40253
|
+
async deleteGlobalTableResource(logicalId, physicalId, resourceType, context, flip, progress) {
|
|
39844
40254
|
const deleteMask = context?.maskSecrets ?? ((text) => text);
|
|
39845
40255
|
const shownTable = deleteMask(physicalId);
|
|
39846
40256
|
this.logger.debug(deleteMask(`Deleting DynamoDB GlobalTable ${logicalId}: ${shownTable}`));
|
|
@@ -39883,23 +40293,24 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
39883
40293
|
const region = replica.RegionName;
|
|
39884
40294
|
if (!region || region === currentRegion) continue;
|
|
39885
40295
|
try {
|
|
39886
|
-
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:ReadCapacityUnits", {}, void 0, this.getRegionalAutoScalingClient(region), void 0, budget);
|
|
39887
|
-
for (const indexName of tableIndexNames) await this.applyAutoScalingDiff(physicalId, "dynamodb:index:ReadCapacityUnits", {}, void 0, this.getRegionalAutoScalingClient(region), indexName, budget);
|
|
40296
|
+
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:ReadCapacityUnits", {}, void 0, this.getRegionalAutoScalingClient(region), void 0, budget, void 0, progress);
|
|
40297
|
+
for (const indexName of tableIndexNames) await this.applyAutoScalingDiff(physicalId, "dynamodb:index:ReadCapacityUnits", {}, void 0, this.getRegionalAutoScalingClient(region), indexName, budget, void 0, progress);
|
|
39888
40298
|
await this.dynamoDBClient.send(new UpdateTableCommand({
|
|
39889
40299
|
TableName: physicalId,
|
|
39890
40300
|
ReplicaUpdates: [{ Delete: { RegionName: region } }]
|
|
39891
40301
|
}));
|
|
40302
|
+
progress.stripped = true;
|
|
39892
40303
|
await this.waitForReplicaGone(physicalId, region, logicalId, REPLICA_GONE_WAIT_ATTEMPTS, budget, context?.maskSecrets);
|
|
39893
40304
|
} catch (replicaErr) {
|
|
39894
40305
|
if (!(replicaErr instanceof ResourceNotFoundException$1)) throw replicaErr;
|
|
39895
40306
|
}
|
|
39896
40307
|
}
|
|
39897
40308
|
const localAsClient = await this.getLocalAutoScalingClient();
|
|
39898
|
-
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:ReadCapacityUnits", {}, void 0, localAsClient, void 0, budget);
|
|
39899
|
-
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:WriteCapacityUnits", {}, void 0, localAsClient, void 0, budget);
|
|
40309
|
+
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:ReadCapacityUnits", {}, void 0, localAsClient, void 0, budget, void 0, progress);
|
|
40310
|
+
await this.applyAutoScalingDiff(physicalId, "dynamodb:table:WriteCapacityUnits", {}, void 0, localAsClient, void 0, budget, void 0, progress);
|
|
39900
40311
|
for (const indexName of tableIndexNames) {
|
|
39901
|
-
await this.applyAutoScalingDiff(physicalId, "dynamodb:index:WriteCapacityUnits", {}, void 0, localAsClient, indexName, budget);
|
|
39902
|
-
await this.applyAutoScalingDiff(physicalId, "dynamodb:index:ReadCapacityUnits", {}, void 0, localAsClient, indexName, budget);
|
|
40312
|
+
await this.applyAutoScalingDiff(physicalId, "dynamodb:index:WriteCapacityUnits", {}, void 0, localAsClient, indexName, budget, void 0, progress);
|
|
40313
|
+
await this.applyAutoScalingDiff(physicalId, "dynamodb:index:ReadCapacityUnits", {}, void 0, localAsClient, indexName, budget, void 0, progress);
|
|
39903
40314
|
}
|
|
39904
40315
|
} catch (describeErr) {
|
|
39905
40316
|
if (describeErr instanceof ProvisioningError) throw describeErr;
|
|
@@ -47616,5 +48027,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
|
|
|
47616
48027
|
DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
|
|
47617
48028
|
|
|
47618
48029
|
//#endregion
|
|
47619
|
-
export { S3_AUTO_DELETE_OBJECTS_TAG as $, findSilentDropProperties as $a, synthesisStatusMessage as $c, malformedExportNamesWarning as $i, findDestructiveChanges as $n, printingCorpusOf as $o, assertSendableRoleArn as $r, describeRegionValueKind as $s, recordUnderIdIsNotOwn as $t, diffSecurity as A, refuseMalformedResourceEntriesForDestroy as Aa, resolveDockerContextDirectory as Ac, AWS_NO_VALUE as Ai, nullPrototypeRecord as Al, DEFAULT_RESOURCE_TIMEOUT_MS as An, lambdaFunctionNameForMask as Ao, unchangedBehindSecretReference as Ar, recordMaskOnlyValuesIn as As, withNestedStackContext as At, readProtection as B, refuseMalformedResourcesForExport as Ba, partitionSensitiveEnv as Bc, STATE_REGION_DIVERGED as Bi, resolveBucketRegion as Bl, storedSecretNameNeedles as Bn, noEchoCoordinatesOf as Bo, ec2InstanceProtectionSite as Br, isSingleDynamicReferenceToken as Bs, awaitInFlightSibling as Bt, withApiLimit as C, refuseMalformedOrphansForDestroy as Ca, isCrossRegionRedirect as Cc, parameterTypeMayLoseSecretIdentity as Ci, derivePartitionAndUrlSuffix as Cl, exportNameSecretExposure as Cn, requireConfigObject as Co, getCurrentResourceSecrets as Cr, physicalNameCopiesOf as Cs, nestedChildStackName as Ct, findServiceTokenRefusals as D, refuseMalformedResourceAttributesForOrphan as Da, validateContainerRepoName as Dc, carriesFetchableDynamicReference as Di, defineOwnKey as Dl, collectPublishedOutputNames as Dn, describeTypeWithThrottleRetry as Do, customResourceResponseExpirationWarning as Dr, carriesSecretMask as Ds, withNestedRevertRun as Dt, deferredServiceTokenWarning as E, refuseMalformedOutputsForDestroy as Ea, validateAssetBucketName as Ec, carriesDynamicReference as Ei, processStackMessages as El, collectDeclaredOutputNames as En, templateResourceTypes as Eo, applyCustomResourceResponseExpiration as Er, splitGetAttStringForm as Es, revertedNestedRowIds as Et, recordedProtectionEvidence as F, refuseMalformedResourcePropertiesForDrift as Fa, finchSecretArgvRefusal as Fc, withSharedDrainBudget as Fi, renderAssemblyPathEscape as Fl, orphanRecordsPrintingBag as Fn, isMarkedCoordinate as Fo, deleteSkipReason as Fr, STATE_SOURCED_BASELINE_RULES as Fs, loadJournaledOrphans as Ft, deleteBudgetKey as G, repairMalformedResourceEntriesForReadOnly as Ga, runDockerStreaming as Gc, deployRefusesOrphanRowsReason as Gi, ccRoutedFinalSnapshotError as Gn, readsNoEchoSource as Go, DiffCalculator as Gr, CrossPrefixReadError as Gs, replacedDeleteFailureVerdict as Gt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as H, repairMalformedOrphanRecordsForReadOnly as Ha, redactedCause as Hc, UNREADABLE_ORPHANS_CONTAINER_ROW as Hi, ATOMIC_FINAL_SNAPSHOT_TYPES as Hn, noEchoOutputsComparison as Ho, observeThenDisableInstanceApiTermination as Hr, isLockInfoExpired as Hs, getStackRecords as Ht, recordedProtectionNote as I, refuseMalformedResourcePropertiesForExport as Ia, formatDockerLoginError as Ic, parameterInputsFor as Ii, resolveAssemblyPath as Il, secretNamePrintingBag as In, maskAtCoordinates as Io, withIndeterminateGuard as Ir, STATE_SOURCED_CROSS_GENERATION_RULES as Is, makeForeignHolderScan as It, DELETE_INDEX_WAIT_PROCEED_NOTE as J, unpreviewableOrphanRecords as Ja, stripControlChars as Jc, hasReadableOutputs as Ji, isFinalSnapshotError as Jn, carryLogOnlyValues as Jo, poisonRenderedSpellingsCollidingIn as Jr, crossPrefixDeniedWarning as Js, isJournaledOrphan as Jt, resolveDynamoDbDeleteBudgetClock as K, repairMalformedResourcePropertiesForReadOnly as Ka, warnFinchArgvExposure as Kc, displayLogicalId as Ki, createPreDeleteFinalSnapshot as Kn, valueAtCoordinate as Ko, INTRINSIC_KEYS as Kr, CrossPrefixScanCache as Ks, recordAfterRollbackUpdate as Kt, PROTECTION_PROPERTY_BY_TYPE as L, refuseMalformedResourcePropertiesForOrphan as La, getDockerCmd as Lc, passedParameterClassesOf as Li, injectAwsRegion as Ll, secretNamePrintingBags as Ln, maskReadbackAtCoordinates as Lo, isWaitAbandonedError as Lr, STATE_SOURCED_READBACK_RULES as Ls, sameJournaledOrphans as Lt, noEchoComparisonForTemplate as M, refuseMalformedResourceEntriesForImportSave as Ma, describeDockerExecFailure as Mc, isStalePlaceholderArnAttribute as Mi, absoluteAssemblyPathEscape as Ml, completedReplayEntries as Mn, DagBuilder as Mo, UNSPECIFIED_SKIP_REASON as Mr, recordNoEchoParameterFreshValue as Ms, dropFailedHint as Mt, noEchoExactEchoLeavesOf as N, refuseMalformedResourceEntriesForOrphan as Na, describeDockerFailure as Nc, refStateLookupFromResource as Ni, describeFileReadFailure as Nl, journaledOrphanPrintingBag as Nn, TemplateParser as No, deleteIndeterminateGuards as Nr, recordProvenPublicExpression as Ns, isHandledOrphan as Nt, serviceTokenBlockingReason as O, refuseMalformedResourceEntries as Oa, buildDenyExternalAccessPolicy as Oc, isNamelessDynamicReferenceError as Oi, hasOwnKey as Ol, isExportAliasCollision as On, withRetry as Oo, CloudControlProvider as Or, provenPublicValue as Os, collectNestedChildUnaddressed as Ot, noEchoParameterNamesOf as P, refuseMalformedResourcePropertiesForDestroy as Pa, dockerSpawnEnvWithSensitive as Pc, parseWebACLArn as Pi, displayAssemblyPath as Pl, maskEventTextWithBoundBags as Pn, canonicalCoordinates as Po, deleteLeftInPlace as Pr, wholeStringLeavesOf as Ps, journaledOrphanLines as Pt, ECR_AUTO_DELETE_IMAGES_TAG as Q, findActionableSilentDrops as Qa, Synthesizer as Qc, malformedDriftResourcePropertiesWarning as Qi, constructPathOf as Qn, logOnlyValueCount as Qo, assertFlagRoleArn as Qr, acceptedCreateOnlyDropsOf as Qs, recheckFailedPlan as Qt, isProtectionValueActive as R, refuseMalformedResourcesForDeploy as Ra, isDockerClientEnvKey as Rc, declaresNoEcho as Ri, injectedAwsRegionValue as Rl, secretNamedRecordNeedles as Rn, maskWholeValue as Ro, markWaitAbandoned as Rr, TEMPLATE_SOURCED_RULES as Rs, replayFailedOperations as Rt, lookupEachName as S, refuseMalformedOrphans as Sa, getBootstrapMarkerKey as Sc, isUnboundTemplateParameter as Si, canonicalizeRegion as Sl, exportNameNoEchoParameters as Sn, requireConfigArray as So, isCustomResourceType as Sr, recoverMaskedOutput as Ss, getNestedRevertRun as St, recordRetainedForReadoption as T, refuseMalformedOutputs as Ta, readBootstrapMarkerBody as Tc, isImpossibleEmptyStoredAttribute as Ti, StageLoadError as Tl, noEchoParameterValueSeed as Tn, prefetchCreateOnlyPropertyPaths as To, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Tr, recordPhysicalNameCopy as Ts, revertNestedChildFromJournal as Tt, beginDeleteWait as U, repairMalformedOrphansForReadOnly as Ua, redactedDockerCause as Uc, UNREADABLE_RESOURCES_MAP_ROW as Ui, PRE_DELETE_SNAPSHOT_TYPES as Un, passedNoEchoParametersOf as Uo, reDisableInstanceApiTermination as Ur, S3StateBackend as Us, withStackRecords as Ut, DynamoDBGlobalTableProvider as V, refuseMalformedState as Va, redactDockerArgvValues as Vc, STATE_RESOURCES_MALFORMED as Vi, extractDeploymentEventError as Vn, noEchoLeavesOf as Vo, isTerminationProtectionPropagationError as Vr, LockManager as Vs, destroyStackRecordsView as Vt, compensateRemovedDeletionProtection as W, repairMalformedOutputsForReadOnly as Wa, runDockerForeground as Wc, accountArgs as Wi, buildFinalSnapshotIdentifier as Wn, readbackPathFor as Wo, reEnableInstanceApiTermination as Wr, rebuildClientForBucketRegion as Ws, removeProtectionTypeList as Wt, deleteTableWithIndexBusyRetry as X, unreadableResourceEntries as Xa, AssetManifestLoader as Xc, isReadableOrphanRecord as Xi, unsupportedFinalSnapshotError as Xn, hasMaskableValues as Xo, refuseUnreadableCdkCrossAccountRefs as Xr, isNotImplemented as Xs, planFailedOps as Xt, INDEX_SETTLE_POLL_INTERVAL_MS as Y, unreadableOrphanRecords as Ya, stripForDisplay as Yc, hasReadableResources as Yi, refusesFinalSnapshot as Yn, createUnionSecretMasker as Yo, producerLookupOver as Yr, isAccessDenied$1 as Ys, isReplacementOrphan as Yt, waitForIndexesSettled as Z, withheldAccountClause as Za, getDockerImageBySourceHash as Zc, isReadableResourceEntry as Zi, maskingRetryLogger as Zn, literalSplitDelimitersOf as Zo, applyRoleArnIfSet as Zr, splitImportedOps as Zs, planRollback as Zt, keptWholeReasonText as _, previewableOrphanRecords as _a, rewriteTemplateAssetReferences as _c, classifyRecordedSecretRegion as _i, uploadCfnTemplate as _l, exportAliasCollisionScrubWarning as _n, configBooleanRefusal as _o, ccBrokenReason as _r, isUncertifiedBaselineMaskPosition as _s, planOrphanAdoption as _t, inheritedProvenanceForChildDiff as a, malformedOrphanRecordsWarning as aa, importableOutputs as ac, callerEnvCredentials as ai, resolveCaptureObservedState as al, getCurrentProducerRegions as an, shownType as ao, acquireIdempotencyToken as ar, errorCauseChain as as, createReadOnlyAttributeHealerFactory as at, chunks as b, refuseMalformedOrphanRecords as ba, assertAssetBucketRegion as bc, regionLessSecretName as bi, expectedOwnerParam as bl, secretSafeKeyDisplay as bn, readConfigString as bo, TemplateNoEchoReresolver as br, inheritNestedStackParameterAssociations as bs, displacedPhysicalIdShown as bt, isAbsoluteAssetPath as c, malformedOrphansWarning as ca, orphansCarriedFrom as cc, keepHeldTokenProvenance as ci, resolveStateBucketWithDefaultAndSource as cl, isRedactedRecordedValue as cn, isStatefulRecreateTargetSync as co, planTagDiff as cr, markSameGenerationBag as cs, gray as ct, templateIdentity as d, malformedRenderedContainersWarning as da, isSensitiveAttributeName as dc, recordedReferenceRegions as di, warnDeprecatedNoPrefixCliFlag as dl, updatePartialMessage as dn, coerceWarmThroughput as do, tagMapAsList as dr, redactSecretsForState as ds, yellow as dt, malformedExportSourceWarning as ea, exportNamesCarriedFrom as ec, explicitRoleArnOrThrow as ei, getDefaultStateBucketName as el, replacementNeverSwapped as en, unwrittenCreateOnlyReplacement as eo, formatDestructiveChange as er, recordLogOnlyParameterValue as es, hasCdkAutoDeleteTag as et, conditionFingerprint as f, malformedResourceEntriesWarning as fa, stringifyValue as fc, s3BucketArn as fi, ssmResolvedValueType as fl, updatePartialReason as fn, isWarmThroughputDecrease as fo, tagPlanWarning as fr, scrubResourceRecord as fs, computeParameterTaint as ft, isSecretBearingReferenceString as g, malformedStateRefusalMessage as ga, loadPublishableAssetManifest as gc, s3BucketWebsiteUrl as gi, findLargeInlineResources as gl, displayTextOrWithheld as gn, coerceCfnInteger as go, ProviderRegistry as gr, dynamicReferenceTokens as gs, makeSiblingClaimReader as gt, readRecordedConditionVerdicts as h, malformedScrubResourceEntriesRefusalMessage as ha, createAssetRedirectResolver as hc, s3BucketRegionalDomainName as hi, MIGRATE_TMP_PREFIX as hl, WITHHELD_NAME_DISPLAY as hn, coerceCfnBoolean as ho, CC_BROKEN_REASON as hr, DYNAMIC_REFERENCE_TOKEN_SCAN as hs, resourcesNamingDeclaredParameter as ht, crossStackOutputProvenanceSource as i, malformedOrphanRecordsRefusalMessage as ia, importableOutputKeys as ic, applyCallerIdentityCredentials as ii, resolveAutoAssetStorage as il, findNestedStackTypeChanges as in, findReplacedReadersOfRecreateTargets as io, withCreateTokenLedger as ir, createSecretMasker as is, formatResourceLine as it, noEchoAttributeNamesOf as j, refuseMalformedResourceEntriesForImport as ja, describeDockerCapturedOutput as jc, cfnRefValueFromPhysicalId as ji, ownValue as jl, DEFAULT_RESOURCE_WARN_AFTER_MS as jn, sameLambdaFunctionAddress as jo, RollbackInlinePolicyWriters as jr, recordNoEchoAttributeValues as js, deleteJournaledOrphans as jt, withResourceDeadline as k, refuseMalformedResourceEntriesForDeploy as ka, buildDockerImage as kc, keepsSecretReferenceToken as ki, hasPlainPrototype$1 as kl, bindingSkippedOutputs as kn, canonicalLambdaFunctionName as ko, slowCcOperationTimeoutMs as kr, recordMaskOnlyValue as ks, getCurrentNestedStackContext as kt, listNestedTemplateRows as l, malformedOutputsRefusalMessage as la, shouldRetainResource as lc, outputReferenceProvenanceOf as li, resolveUseCdkBootstrapAssets as ll, redactedDeleteAddressFields as ln, renderStatefulReason as lo, readTagList as lr, recordReferenceProvenanceEntry as ls, green as lt, parentSuppliedValues as m, malformedResourcesWarning as ma, buildAssetRedirectMap as mc, s3BucketDualStackDomainName as mi, CFN_TEMPLATE_URL_LIMIT as ml, DeploymentEventsStore as mn, toFiniteNumber as mo, stringifyIfAssigned as mr, withoutPhysicalNameCopies as ms, reachableDivergentParameters as mt, IMPLICIT_DELETE_DEPENDENCIES as n, malformedLocalResourceEntriesWarning as na, hasReasonlessBaselineRefusal as nc, sendableAssumeRoleCommand as ni, loadCdkJson as nl, seedsDeleteFirstGuard as nn, NO_CC_HANDLERS_REASON as no, ledgerForStack as nr, shareLogOnlyValues as ns, getPriorAttempts as nt, childTemplateLoader as o, malformedOrphanRowsKeptWarning as oa, isReadableBag as oc, envCredentialsAreAssumedRole as oi, resolveSkipPrefix as ol, inheritProducerRegions as on, MULTI_REGION_RECREATE_BLOCKED_TYPES as oo, DBPROXY_TAGS_WHAT as or, maskSecretsInError as os, bold as ot, conditionInputsFrom as p, malformedResourcePropertiesWarning as pa, WorkGraph as pc, s3BucketDomainName as pi, CFN_TEMPLATE_BODY_LIMIT as pl, DeploymentEventsReader as pn, toCfnInteger as po, definedAttributes as pr, withPhysicalNameCopies as ps, namesAnyDeclaredParameter as pt, resolveDynamoDbDeleteBudgetMs as q, repairMalformedResourcesForReadOnly as qa, escapeRegExp$3 as qc, hasReadableOrphans as qi, effectiveDeletionPolicy as qn, liveMatchesUnresolvedTokenFrame as qo, IntrinsicFunctionResolver as qr, applyCrossPrefixScan as qs, demoteSupersededOrphans as qt, computeImplicitDeleteEdges as r, malformedLocalResourcesWarning as ra, hasUnverifiableParameterRefusal as rc, AWS_CREDENTIAL_ENV_KEYS as ri, resolveApp as rl, orphanDeleteNeedsIdentity as rn, hasNoCloudControlHandlers as ro, reserveStackCreateToken as rr, unionOfSecretBags as rs, markRefusedBeforeApplying as rt, findNestedTemplateTreeDefect as s, malformedOrphansRefusalMessage as sa, orphansAfterRollback as sc, isSettledInstanceState as si, resolveStateBucketWithDefault as sl, REDACTED_DELETE_ADDRESS_SKIP_REASON as sn, isStatefulRecreateTargetForReplace as so, DBPROXY_TAG_OPTIONS as sr, maskSecretsInText as ss, cyan as st, DeployEngine as t, malformedLocalOutputsWarning as ta, hasReadableExportSet as tc, isIamRoleArn as ti, getLegacyStateBucketName as tl, resolveReplacementOldType as tn, withoutSilentDropProperties as to, earliestDefined as tr, recordLogOnlyValue as ts, isTruthyCfnBoolean as tt, renderNestedTemplateTreeDefect as u, malformedOutputsWarning as ua, AssetPublisher as uc, recordedOutputReferenceRegions as ui, stateBucketExistenceConfirmed as ul, redactedDeleteAddressSkip as un, WARM_THROUGHPUT_MEMBERS as uo, refuseMalformedDesiredTags as ur, snapshotPassProvenance as us, red as ut, mergeNoChangeOutputs as v, refuseDivergentRecordRegionForDestroy as va, AssetModeResolver as vc, classifyReplaySecretRegion as vi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as vl, secretBearing as vn, configIntegerRefusal as vo, isCustomResource as vr, pathCrossesDottedKey as vs, NESTED_PENDING_PARENT_REASON as vt, keptForReadoption as w, refuseMalformedOrphansForOrphan as wa, parseBootstrapMarker as wc, getAccountInfo as wi, AssemblyReader as wl, isWholeDynamicReferenceValue as wn, requireConfigString as wo, withPrintingSecrets as wr, recordAttributeIdCopy as ws, recordDisplacedSkips as wt, isAccessDeniedError as x, refuseMalformedOrphanRecordsForDestroy as xa, ensureAssetStorage as xc, coerceParameterTypedValue as xi, PARTITION_TABLE as xl, carriedExportAliasExposure as xn, replayWarn as xo, readsNoEchoDeleteValues as xr, recordNestedStackParameterExpressions as xs, dropSettledNestedJournals as xt, makeCanonicalizePropertiesFn as y, refuseMalformedNestedChildOutputs as ya, BOOTSTRAP_MARKER_PREFIX as yc, producerRegionsFromState as yi, decodeListingKey as yl, secretBearingStateKeyWarning as yn, configStringRefusal as yo, wouldReturnToSdkProvider as yr, identityKeyFor as ys, displacedOpClause as yt, perType as z, refuseMalformedResourcesForDestroy as za, isMalformedEnvKey as zc, JSON_LISTING_HOLE_VALUE as zi, clearBucketRegionCache as zl, stateSecretNameNeedles as zn, maskedLeafCoordinatesOf as zo, disableInstanceApiTermination as zr, WHOLE_DYNAMIC_REFERENCE_PATTERN as zs, replayRollback as zt };
|
|
47620
|
-
//# sourceMappingURL=deploy-engine-
|
|
48030
|
+
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 };
|
|
48031
|
+
//# sourceMappingURL=deploy-engine-DOBzE5TD.js.map
|