@go-to-k/cdkd 0.298.7 → 0.299.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{asg-provider-zprmW9pl.js → asg-provider-CGN1a3d3.js} +4 -4
- package/dist/{asg-provider-zprmW9pl.js.map → asg-provider-CGN1a3d3.js.map} +1 -1
- package/dist/{aws-client-defaults-D0q0z4dG.js → aws-client-defaults-DBXBcg0J.js} +79 -3
- package/dist/aws-client-defaults-DBXBcg0J.js.map +1 -0
- package/dist/{aws-clients-CnmtbrxD.js → aws-clients-Bj7qH5Ph.js} +2 -2
- package/dist/{aws-clients-CnmtbrxD.js.map → aws-clients-Bj7qH5Ph.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-CO0EOAem.js → deploy-engine-4K_B3N08.js} +685 -178
- package/dist/deploy-engine-4K_B3N08.js.map +1 -0
- package/dist/{iam-policy-targets-CwKiK9nS.js → iam-policy-targets-Pn2m0R67.js} +3 -3
- package/dist/{iam-policy-targets-CwKiK9nS.js.map → iam-policy-targets-Pn2m0R67.js.map} +1 -1
- package/dist/{iam-role-provider-B0v-Lm_f.js → iam-role-provider-BKnf387o.js} +47 -7
- package/dist/iam-role-provider-BKnf387o.js.map +1 -0
- package/dist/index.d.ts +24 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/{neptune-provider-Bq25rRgt.js → neptune-provider-CR19ID_J.js} +4 -4
- package/dist/{neptune-provider-Bq25rRgt.js.map → neptune-provider-CR19ID_J.js.map} +1 -1
- package/dist/{program-BgDt3OZh.js → program-BgsCaZFy.js} +300 -100
- package/dist/program-BgsCaZFy.js.map +1 -0
- package/dist/{provider-classes-BEIwSimv.js → provider-classes-DxHQcC1K.js} +79 -14
- package/dist/provider-classes-DxHQcC1K.js.map +1 -0
- package/dist/{rds-provider-Cyb9LwFv.js → rds-provider-BO3U39K0.js} +4 -4
- package/dist/{rds-provider-Cyb9LwFv.js.map → rds-provider-BO3U39K0.js.map} +1 -1
- package/dist/{version-B3Ymd4cN.js → version-DUCWZskc.js} +2 -2
- package/dist/{version-B3Ymd4cN.js.map → version-DUCWZskc.js.map} +1 -1
- package/package.json +1 -1
- package/dist/aws-client-defaults-D0q0z4dG.js.map +0 -1
- package/dist/deploy-engine-CO0EOAem.js.map +0 -1
- package/dist/iam-role-provider-B0v-Lm_f.js.map +0 -1
- package/dist/program-BgDt3OZh.js.map +0 -1
- package/dist/provider-classes-BEIwSimv.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { r as getAwsClients, s as __exportAll } from "./aws-clients-
|
|
1
|
+
import { r as getAwsClients, s as __exportAll } from "./aws-clients-Bj7qH5Ph.js";
|
|
2
2
|
import { A as UNRENDERABLE, C as looksLikeCdkdGeneratedName, E as withoutGeneratedFallbackName, F as displayStackName, H as truncateCodePoints, I as isPasteableIdent, M as displayAwsMessage, N as displayIdent, O as SECRET_REF_MAX_CODE_POINTS, P as displaySafe, R as plainIdentOr, S as getCurrentStackName, T as withStackName, V as terminalSafe, a as getLogger, b as generateResourceNameWithFallback, d as installLogLineMaskerSource, f as getLiveRenderer, g as applyDefaultNameForFallback, k as STACK_REF_MAX_CODE_POINTS, o as isStdoutReservedForPayload, r as safeStringify$1, t as describeAwsFailure, u as currentLogLineMasker, v as explicitNamePropertyFor, w as withSkipPrefix, x as getCurrentSkipPrefix, y as generateResourceName, z as safeMsg } from "./aws-failure-text-DtvlUugx.js";
|
|
3
|
-
import { $ as protectedReplacementAdvice, $n as isAmbiguousOutcomeError, $t as credentialFingerprint, A as isQuotableImportValue, An as UNSHOWABLE_VALUE, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bn as withheldTargetClause, Bt as recoveryCommandFlags, Ct as RETRY_AUXILIARY_OWNER, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as physicalIdShownBesideCommand, G as runDeleteAttempt, Gn as isNameCollisionErrorFrom, H as observeThenDisableProtection, Ht as CUSTOM_RESOURCE_RESPONSE_PREFIX, In as plainOrDescribed, J as DELETION_PROTECTION_DOC_POINTER, Jn as isReplayedNameCollisionFrom, Kn as isNameCooldownError, L as ProtectionFlipRegistry, Ln as quotedOrDescribed, Lt as formatLockExpiry, M as quotedRemedyLogicalId, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as isInertUnquoted, Nt as UNREPRODUCIBLE_LOCK_CLAUSE, On as SHELL_ACTIVE, Ot as hasCreatedBeforeFailure, Pn as pasteableCommand, Pt as buildForceUnlockCommand, Q as pasteableAwsCommand, Qn as isAmbiguousCcHandlerErrorCode, Qt as clientDefaultsFor, R as compensateProtectionFlip, Rn as shellBoundedDisplay, Rt as formatLockOperation, Sn as SynthesisError, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, Tn as normalizeAwsError, U as protectionFlipKey, Un as isUpdateUnsupportedError, Ut as DEFAULT_STATE_PREFIX, Vt as sanitizeRecoveryValue, Wn as hasReplayMayCollide, Wt as injectiveKey, Xn as markReplayMayCollide, Xt as ambientClientDefaults, Yt as withPasteableAwsProfile, Zn as formatRetryClassificationSignals, Zt as ambientCredentialConfig, _n as ResourceTimeoutError, _t as createMaskedLogSinks, an as DependencyError, ar as isMarkedNonRetryable, at as startInterruptWatch, bt as maskDeep, cn as IntrinsicResolutionRefusalError, cr as markRedactedCause, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dn as LockError, en as AccountIdUnavailableError, er as isIamPropagationError, f as removalWarning, fn as MacroExpansionError, ft as logicalIdShown, gn as ProvisioningError, gt as stateOrphanRecordRemedy, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CrossAccountSecretRefusalError, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jn as commandHole, jt as markAuxiliaryFailure, kn as SHELL_ACTIVE_WHY, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, lr as wrapMaskedAwsError, m as withoutInjectedRemovals, mt as resourceTypeShown, nn as CdkdError, nr as isTransientServerError, or as isThrottlingError, ot as ElapsedBudgetRegistry, pn as MalformedProducerRecordRefusalError, qn as isRecreateRetryableError, qt as producerRecordKey, rr as retryClassificationText, sn as DynamicReferenceRegionAmbiguousError, sr as markNonRetryable, st as monotonicNowMs, tn as AssetError, tr as isRetryableTransientError, ut as compositeIdSeparatorRefusal, vn as ResourceUpdateNotSupportedError, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wt as carryCreatedBeforeFailure, xn as StateError, xt as maskerOrIdentity, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as shellQuote, zt as formatLockOwner } from "./iam-policy-targets-
|
|
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-
|
|
5
|
-
import { t as getCdkdVersion } from "./version-
|
|
3
|
+
import { $ as protectedReplacementAdvice, $n as isAmbiguousOutcomeError, $t as credentialFingerprint, A as isQuotableImportValue, An as UNSHOWABLE_VALUE, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bn as withheldTargetClause, Bt as recoveryCommandFlags, Ct as RETRY_AUXILIARY_OWNER, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as physicalIdShownBesideCommand, G as runDeleteAttempt, Gn as isNameCollisionErrorFrom, H as observeThenDisableProtection, Ht as CUSTOM_RESOURCE_RESPONSE_PREFIX, In as plainOrDescribed, J as DELETION_PROTECTION_DOC_POINTER, Jn as isReplayedNameCollisionFrom, Kn as isNameCooldownError, L as ProtectionFlipRegistry, Ln as quotedOrDescribed, Lt as formatLockExpiry, M as quotedRemedyLogicalId, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as isInertUnquoted, Nt as UNREPRODUCIBLE_LOCK_CLAUSE, On as SHELL_ACTIVE, Ot as hasCreatedBeforeFailure, Pn as pasteableCommand, Pt as buildForceUnlockCommand, Q as pasteableAwsCommand, Qn as isAmbiguousCcHandlerErrorCode, Qt as clientDefaultsFor, R as compensateProtectionFlip, Rn as shellBoundedDisplay, Rt as formatLockOperation, Sn as SynthesisError, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, Tn as normalizeAwsError, U as protectionFlipKey, Un as isUpdateUnsupportedError, Ut as DEFAULT_STATE_PREFIX, Vt as sanitizeRecoveryValue, Wn as hasReplayMayCollide, Wt as injectiveKey, Xn as markReplayMayCollide, Xt as ambientClientDefaults, Yt as withPasteableAwsProfile, Zn as formatRetryClassificationSignals, Zt as ambientCredentialConfig, _n as ResourceTimeoutError, _t as createMaskedLogSinks, an as DependencyError, ar as isMarkedNonRetryable, at as startInterruptWatch, bt as maskDeep, cn as IntrinsicResolutionRefusalError, cr as markRedactedCause, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dn as LockError, en as AccountIdUnavailableError, er as isIamPropagationError, f as removalWarning, fn as MacroExpansionError, ft as logicalIdShown, gn as ProvisioningError, gt as stateOrphanRecordRemedy, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CrossAccountSecretRefusalError, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jn as commandHole, jt as markAuxiliaryFailure, kn as SHELL_ACTIVE_WHY, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, lr as wrapMaskedAwsError, m as withoutInjectedRemovals, mt as resourceTypeShown, nn as CdkdError, nr as isTransientServerError, or as isThrottlingError, ot as ElapsedBudgetRegistry, pn as MalformedProducerRecordRefusalError, qn as isRecreateRetryableError, qt as producerRecordKey, rr as retryClassificationText, sn as DynamicReferenceRegionAmbiguousError, sr as markNonRetryable, st as monotonicNowMs, tn as AssetError, tr as isRetryableTransientError, ut as compositeIdSeparatorRefusal, vn as ResourceUpdateNotSupportedError, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wt as carryCreatedBeforeFailure, xn as StateError, xt as maskerOrIdentity, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as shellQuote, zt as formatLockOwner } from "./iam-policy-targets-Pn2m0R67.js";
|
|
4
|
+
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-DUCWZskc.js";
|
|
6
6
|
import { createHash, randomUUID } from "node:crypto";
|
|
7
7
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
8
8
|
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketLifecycleConfigurationCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -2308,7 +2308,7 @@ async function resolveStateBucketWithDefaultAndSource(cliBucket, region, legacyF
|
|
|
2308
2308
|
logger.debug("No state bucket specified, resolving default from account...");
|
|
2309
2309
|
const { GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
|
|
2310
2310
|
const { S3Client, HeadBucketCommand, ListObjectsV2Command } = await import("@aws-sdk/client-s3");
|
|
2311
|
-
const { getAwsClients } = await import("./aws-clients-
|
|
2311
|
+
const { getAwsClients } = await import("./aws-clients-Bj7qH5Ph.js").then((n) => n.n);
|
|
2312
2312
|
const { expectedOwnerParam, recordResolvedAccountId } = await Promise.resolve().then(() => expected_bucket_owner_exports);
|
|
2313
2313
|
const probeDeps = {
|
|
2314
2314
|
HeadBucketCommand,
|
|
@@ -2383,7 +2383,7 @@ async function resolveStateBucketWithDefaultAndSource(cliBucket, region, legacyF
|
|
|
2383
2383
|
probe: legacyProbe
|
|
2384
2384
|
};
|
|
2385
2385
|
}
|
|
2386
|
-
throw new
|
|
2386
|
+
throw new StateError(`No cdkd state bucket found for account ${accountId}. Looked for '${newName}' (current default) and '${legacyName}'` + (fallbackName === void 0 ? "" : ` / '${fallbackName}'`) + ` (legacy default). Run 'cdkd bootstrap' to create '${newName}'.`);
|
|
2387
2387
|
} finally {
|
|
2388
2388
|
probe.destroy();
|
|
2389
2389
|
}
|
|
@@ -3330,11 +3330,15 @@ const CLASSIFICATION_FIELDS = [
|
|
|
3330
3330
|
"statusCode",
|
|
3331
3331
|
"$metadata",
|
|
3332
3332
|
"$fault",
|
|
3333
|
+
"$retryable",
|
|
3333
3334
|
"__type"
|
|
3334
3335
|
];
|
|
3335
3336
|
function redactedDockerCause(error, args) {
|
|
3336
3337
|
if (!(error instanceof Error)) return void 0;
|
|
3337
|
-
|
|
3338
|
+
return redactedCause(error, describeDockerFailure(error, args));
|
|
3339
|
+
}
|
|
3340
|
+
function redactedCause(error, message) {
|
|
3341
|
+
const cause = new Error(message);
|
|
3338
3342
|
try {
|
|
3339
3343
|
cause.name = error.name;
|
|
3340
3344
|
} catch {}
|
|
@@ -4747,7 +4751,8 @@ const STATE_SCHEMA_VERSIONS_READABLE = [
|
|
|
4747
4751
|
8,
|
|
4748
4752
|
9,
|
|
4749
4753
|
10,
|
|
4750
|
-
11
|
|
4754
|
+
11,
|
|
4755
|
+
12
|
|
4751
4756
|
];
|
|
4752
4757
|
function hasUnverifiableParameterRefusal(record) {
|
|
4753
4758
|
return record?.observedBaselineRefused === true && record.observedBaselineRefusalReason === "unverifiable-parameter";
|
|
@@ -5478,6 +5483,19 @@ async function rebuildClientForBucketRegion(client, bucket, opts = {}) {
|
|
|
5478
5483
|
return replacement;
|
|
5479
5484
|
}
|
|
5480
5485
|
|
|
5486
|
+
//#endregion
|
|
5487
|
+
//#region src/state/token-free-state.ts
|
|
5488
|
+
const tokenFreeStates = /* @__PURE__ */ new WeakSet();
|
|
5489
|
+
function bodyMayCarryReferences(body) {
|
|
5490
|
+
return body.includes("{{resolve:") || body.includes("\"referenceProvenance\"") || body.includes("\"outputReferenceProvenance\"");
|
|
5491
|
+
}
|
|
5492
|
+
function markTokenFreeState(state) {
|
|
5493
|
+
tokenFreeStates.add(state);
|
|
5494
|
+
}
|
|
5495
|
+
function isKnownTokenFreeState(state) {
|
|
5496
|
+
return state !== void 0 && tokenFreeStates.has(state);
|
|
5497
|
+
}
|
|
5498
|
+
|
|
5481
5499
|
//#endregion
|
|
5482
5500
|
//#region src/state/s3-state-backend.ts
|
|
5483
5501
|
function errorDetail$2(error) {
|
|
@@ -5645,6 +5663,7 @@ var S3StateBackend = class S3StateBackend {
|
|
|
5645
5663
|
const bodyString = await response.Body.transformToString();
|
|
5646
5664
|
const parsed = this.parseStateBody(bodyString, stackName);
|
|
5647
5665
|
const { state, divergentBodyRegion } = this.adoptKeyRegion(parsed, region, shownStackName, shownRegionName);
|
|
5666
|
+
if (!bodyMayCarryReferences(bodyString)) markTokenFreeState(state);
|
|
5648
5667
|
this.logger.debug(`Retrieved state: ${shownStackName} (${shownRegionName}), ETag: ${response.ETag}`);
|
|
5649
5668
|
return {
|
|
5650
5669
|
state,
|
|
@@ -5675,7 +5694,7 @@ var S3StateBackend = class S3StateBackend {
|
|
|
5675
5694
|
const { expectedEtag, migrateLegacy } = options;
|
|
5676
5695
|
const body = {
|
|
5677
5696
|
...state,
|
|
5678
|
-
version:
|
|
5697
|
+
version: 12,
|
|
5679
5698
|
stackName,
|
|
5680
5699
|
region
|
|
5681
5700
|
};
|
|
@@ -7170,7 +7189,7 @@ const WHOLE_DYNAMIC_REFERENCE_PATTERN = new RegExp(`^\\{\\{resolve:${DYNAMIC_REF
|
|
|
7170
7189
|
function isSingleDynamicReferenceToken(value) {
|
|
7171
7190
|
return WHOLE_DYNAMIC_REFERENCE_PATTERN.test(value);
|
|
7172
7191
|
}
|
|
7173
|
-
function isPlainObject$
|
|
7192
|
+
function isPlainObject$5(value) {
|
|
7174
7193
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
7175
7194
|
}
|
|
7176
7195
|
|
|
@@ -7419,7 +7438,7 @@ function crossStackSourceKey(source) {
|
|
|
7419
7438
|
}
|
|
7420
7439
|
if (key === "Fn::GetStackOutput") {
|
|
7421
7440
|
const args = source[key];
|
|
7422
|
-
if (!isPlainObject$
|
|
7441
|
+
if (!isPlainObject$5(args)) return void 0;
|
|
7423
7442
|
const stackName = Object.hasOwn(args, "StackName") ? literalStringOrUndefined(args["StackName"]) : void 0;
|
|
7424
7443
|
const outputName = Object.hasOwn(args, "OutputName") ? literalStringOrUndefined(args["OutputName"]) : void 0;
|
|
7425
7444
|
if (stackName === void 0 || outputName === void 0) return void 0;
|
|
@@ -7465,7 +7484,7 @@ function crossStackSourceKey(source) {
|
|
|
7465
7484
|
let template;
|
|
7466
7485
|
let variables;
|
|
7467
7486
|
if (typeof raw === "string") template = raw;
|
|
7468
|
-
else if (Array.isArray(raw) && raw.length === 2 && isPlainObject$
|
|
7487
|
+
else if (Array.isArray(raw) && raw.length === 2 && isPlainObject$5(raw[1])) {
|
|
7469
7488
|
if (typeof raw[0] !== "string") return void 0;
|
|
7470
7489
|
template = raw[0];
|
|
7471
7490
|
variables = raw[1];
|
|
@@ -7708,12 +7727,12 @@ const UNFRAMED_SPELLING = Symbol("cdkd.nested-parameter.unframed-spelling");
|
|
|
7708
7727
|
function recordNestedStackParameterExpressions(secrets, resourceType, resolvedProperties, sourceProperties, rules = TEMPLATE_DERIVED_RULES) {
|
|
7709
7728
|
if (resourceType !== NESTED_STACK_RESOURCE_TYPE$4) return;
|
|
7710
7729
|
if (secrets.size === 0) return;
|
|
7711
|
-
if (!isPlainObject$
|
|
7730
|
+
if (!isPlainObject$5(resolvedProperties) || !isPlainObject$5(sourceProperties)) return;
|
|
7712
7731
|
if (!Object.hasOwn(resolvedProperties, "Parameters")) return;
|
|
7713
7732
|
if (!Object.hasOwn(sourceProperties, "Parameters")) return;
|
|
7714
7733
|
const resolvedParameters = resolvedProperties["Parameters"];
|
|
7715
7734
|
const sourceParameters = sourceProperties["Parameters"];
|
|
7716
|
-
if (!isPlainObject$
|
|
7735
|
+
if (!isPlainObject$5(resolvedParameters) || !isPlainObject$5(sourceParameters)) return;
|
|
7717
7736
|
const positioned = redactSecretsForState(markSameGenerationBag({ ...resolvedParameters }), secrets, sourceParameters, rules);
|
|
7718
7737
|
let table = nestedStackParameterExpressions.get(secrets);
|
|
7719
7738
|
for (const [name, resolvedValue] of Object.entries(resolvedParameters)) {
|
|
@@ -7762,7 +7781,7 @@ function recordNestedStackParameterExpressions(secrets, resourceType, resolvedPr
|
|
|
7762
7781
|
if (typeof resolvedValue !== "string") return void 0;
|
|
7763
7782
|
const sourceLeaf = sourceParameters[name];
|
|
7764
7783
|
if (typeof sourceLeaf === "string") return sourceLeaf;
|
|
7765
|
-
if (!isPlainObject$
|
|
7784
|
+
if (!isPlainObject$5(sourceLeaf)) return void 0;
|
|
7766
7785
|
const written = positioned[name];
|
|
7767
7786
|
if (typeof written !== "string") return void 0;
|
|
7768
7787
|
const rendered = intrinsicSkeletonSegments(sourceLeaf)?.map((s) => s === UNKNOWN_PART ? "\0" : s).join("");
|
|
@@ -7973,7 +7992,7 @@ function appendValuePlaceholderParts(value, out, budget, depth) {
|
|
|
7973
7992
|
if (budget.exhausted) return;
|
|
7974
7993
|
const literal = joinPartLiteralText(value);
|
|
7975
7994
|
if (literal !== void 0) return pushPlaceholderPart(out, literal, budget);
|
|
7976
|
-
if (isPlainObject$
|
|
7995
|
+
if (isPlainObject$5(value) && Object.keys(value).length === 1) {
|
|
7977
7996
|
const ref = value["Ref"];
|
|
7978
7997
|
if (typeof ref === "string" && ref !== "") return pushPlaceholderPart(out, keyedPart({ Ref: ref }), budget);
|
|
7979
7998
|
if (depth >= MAX_PLACEHOLDER_DEPTH) {
|
|
@@ -8005,7 +8024,7 @@ function appendParameterPlaceholderParts(source, out, budget, depth) {
|
|
|
8005
8024
|
let template;
|
|
8006
8025
|
let variables = {};
|
|
8007
8026
|
if (typeof args === "string") template = args;
|
|
8008
|
-
else if (Array.isArray(args) && args.length === 2 && isPlainObject$
|
|
8027
|
+
else if (Array.isArray(args) && args.length === 2 && isPlainObject$5(args[1])) {
|
|
8009
8028
|
template = args[0];
|
|
8010
8029
|
variables = args[1];
|
|
8011
8030
|
} else return false;
|
|
@@ -8153,7 +8172,7 @@ function isUniquelyKeyedBy(items, key) {
|
|
|
8153
8172
|
if (items.length === 0) return false;
|
|
8154
8173
|
const seen = /* @__PURE__ */ new Set();
|
|
8155
8174
|
for (const item of items) {
|
|
8156
|
-
if (!isPlainObject$
|
|
8175
|
+
if (!isPlainObject$5(item) || !Object.hasOwn(item, key)) return false;
|
|
8157
8176
|
const id = item[key];
|
|
8158
8177
|
if (typeof id !== "string" || id === "") return false;
|
|
8159
8178
|
if (seen.has(id)) return false;
|
|
@@ -8183,11 +8202,11 @@ function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameG
|
|
|
8183
8202
|
}
|
|
8184
8203
|
return positionByEmbeddedSpan(bag, source, secrets, bagIsSameGeneration);
|
|
8185
8204
|
}
|
|
8186
|
-
if ((typeof bag === "string" || Array.isArray(bag)) && isPlainObject$
|
|
8205
|
+
if ((typeof bag === "string" || Array.isArray(bag)) && isPlainObject$5(source)) {
|
|
8187
8206
|
const inherited = positionByInheritedParameter(bag, source, secrets);
|
|
8188
8207
|
if (inherited !== void 0) return inherited;
|
|
8189
8208
|
}
|
|
8190
|
-
if (typeof bag === "string" && isPlainObject$
|
|
8209
|
+
if (typeof bag === "string" && isPlainObject$5(source)) {
|
|
8191
8210
|
const certified = positionByCrossStackSource(bag, source, secrets);
|
|
8192
8211
|
if (certified !== void 0) return certified;
|
|
8193
8212
|
const placeheld = positionByParameterPlaceholders(bag, source, secrets);
|
|
@@ -8197,7 +8216,7 @@ function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameG
|
|
|
8197
8216
|
const framed = positionByIntrinsicFrame(bag, source, secrets, secretExpressions, bagIsSameGeneration);
|
|
8198
8217
|
if (framed !== void 0) return framed;
|
|
8199
8218
|
}
|
|
8200
|
-
if (Array.isArray(bag) && isPlainObject$
|
|
8219
|
+
if (Array.isArray(bag) && isPlainObject$5(source)) {
|
|
8201
8220
|
const positionedList = positionListByCrossStackSource(bag, source, secrets);
|
|
8202
8221
|
if (positionedList !== void 0) return positionedList;
|
|
8203
8222
|
}
|
|
@@ -8225,7 +8244,7 @@ function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameG
|
|
|
8225
8244
|
}
|
|
8226
8245
|
if (rules.descendArrays && bag.length === source.length) return bag.map((item, i) => redactByPath(item, source[i], secrets, rules, secretExpressions, bagIsSameGeneration));
|
|
8227
8246
|
}
|
|
8228
|
-
if (isPlainObject$
|
|
8247
|
+
if (isPlainObject$5(bag) && hasPlainPrototype(bag) && isPlainObject$5(source)) {
|
|
8229
8248
|
const out = Object.create(null);
|
|
8230
8249
|
for (const [k, v] of Object.entries(bag)) out[k] = Object.hasOwn(source, k) ? redactByPath(v, source[k], secrets, rules, secretExpressions, bagIsSameGeneration) : redactSecretsForState(v, secrets);
|
|
8231
8250
|
return out;
|
|
@@ -8238,7 +8257,7 @@ function isReadbackProjectedFromState(rules) {
|
|
|
8238
8257
|
function subtreeHasDynamicReference(value) {
|
|
8239
8258
|
if (isDynamicReferenceString(value)) return true;
|
|
8240
8259
|
if (Array.isArray(value)) return value.some(subtreeHasDynamicReference);
|
|
8241
|
-
if (isPlainObject$
|
|
8260
|
+
if (isPlainObject$5(value)) return Object.values(value).some(subtreeHasDynamicReference);
|
|
8242
8261
|
return false;
|
|
8243
8262
|
}
|
|
8244
8263
|
function pathCrossesDottedKey(bag, path) {
|
|
@@ -8313,8 +8332,8 @@ function deepEqualJsonValue(a, b) {
|
|
|
8313
8332
|
if (!Array.isArray(b) || a.length !== b.length) return false;
|
|
8314
8333
|
return a.every((item, i) => deepEqualJsonValue(item, b[i]));
|
|
8315
8334
|
}
|
|
8316
|
-
if (isPlainObject$
|
|
8317
|
-
if (!isPlainObject$
|
|
8335
|
+
if (isPlainObject$5(a)) {
|
|
8336
|
+
if (!isPlainObject$5(b)) return false;
|
|
8318
8337
|
if (!hasPlainPrototype(a) || !hasPlainPrototype(b)) return false;
|
|
8319
8338
|
const keys = Object.keys(a);
|
|
8320
8339
|
if (keys.length !== Object.keys(b).length) return false;
|
|
@@ -8340,7 +8359,7 @@ function refuseUncertifiedSubtree(value, sourceLiterals, mark, seen = /* @__PURE
|
|
|
8340
8359
|
for (const item of value) out.push(refuseUncertifiedSubtree(item, sourceLiterals, mark, seen));
|
|
8341
8360
|
return out;
|
|
8342
8361
|
}
|
|
8343
|
-
if (isPlainObject$
|
|
8362
|
+
if (isPlainObject$5(value) && hasPlainPrototype(value)) {
|
|
8344
8363
|
const out = Object.create(null);
|
|
8345
8364
|
seen.set(value, out);
|
|
8346
8365
|
for (const [k, v] of Object.entries(value)) out[k] = refuseUncertifiedSubtree(v, sourceLiterals, mark, seen);
|
|
@@ -8368,7 +8387,7 @@ function refuseUncertifiedReadbackPositions(bag, source, secrets, failClosed, le
|
|
|
8368
8387
|
return mark ? POSITION_DECIDED : source;
|
|
8369
8388
|
}
|
|
8370
8389
|
if (!subtreeHasDynamicReference(source)) return bag;
|
|
8371
|
-
if (isPlainObject$
|
|
8390
|
+
if (isPlainObject$5(bag) && hasPlainPrototype(bag) && isPlainObject$5(source)) {
|
|
8372
8391
|
const out = Object.create(null);
|
|
8373
8392
|
for (const [k, v] of Object.entries(bag)) out[k] = Object.hasOwn(source, k) ? refuseUncertifiedReadbackPositions(v, source[k], secrets, failClosed, learn, mark) : v;
|
|
8374
8393
|
return out;
|
|
@@ -8395,14 +8414,14 @@ function refuseUncertifiedReadbackPositions(bag, source, secrets, failClosed, le
|
|
|
8395
8414
|
function isDistinguishingAnchor(value) {
|
|
8396
8415
|
if (typeof value === "string") return value !== "";
|
|
8397
8416
|
if (Array.isArray(value)) return value.some(isDistinguishingAnchor);
|
|
8398
|
-
if (isPlainObject$
|
|
8417
|
+
if (isPlainObject$5(value)) return Object.values(value).some(isDistinguishingAnchor);
|
|
8399
8418
|
return false;
|
|
8400
8419
|
}
|
|
8401
8420
|
const ANCHOR_REFERENCE_MASK = "<ref>";
|
|
8402
8421
|
function anchorSignature(source) {
|
|
8403
8422
|
if (isDynamicReferenceString(source)) return ANCHOR_REFERENCE_MASK;
|
|
8404
8423
|
if (Array.isArray(source)) return `[${source.map(anchorSignature).sort().join(",")}]`;
|
|
8405
|
-
if (isPlainObject$
|
|
8424
|
+
if (isPlainObject$5(source)) return `{${Object.keys(source).sort().map((k) => `${JSON.stringify(k)}:${anchorSignature(source[k])}`).join(",")}}`;
|
|
8406
8425
|
return JSON.stringify(source) ?? "undefined";
|
|
8407
8426
|
}
|
|
8408
8427
|
function anchorsCorroboratePairing(bag, source, anchors) {
|
|
@@ -8412,8 +8431,8 @@ function anchorsCorroboratePairing(bag, source, anchors) {
|
|
|
8412
8431
|
return true;
|
|
8413
8432
|
}
|
|
8414
8433
|
if (isDynamicReferenceString(source)) return typeof bag === "string";
|
|
8415
|
-
if (isPlainObject$
|
|
8416
|
-
if (!isPlainObject$
|
|
8434
|
+
if (isPlainObject$5(source)) {
|
|
8435
|
+
if (!isPlainObject$5(bag)) return false;
|
|
8417
8436
|
return Object.keys(source).every((k) => Object.hasOwn(bag, k) && anchorsCorroboratePairing(bag[k], source[k], anchors));
|
|
8418
8437
|
}
|
|
8419
8438
|
if (Array.isArray(source)) {
|
|
@@ -8504,13 +8523,13 @@ function learnMixedLeafNeedle(collector, bag, source) {
|
|
|
8504
8523
|
learnNeedle(collector, plaintext, token);
|
|
8505
8524
|
}
|
|
8506
8525
|
function asChild(marks, key) {
|
|
8507
|
-
return isPlainObject$
|
|
8526
|
+
return isPlainObject$5(marks) && hasPlainPrototype(marks) ? marks[key] : void 0;
|
|
8508
8527
|
}
|
|
8509
8528
|
function asIndex(marks, index) {
|
|
8510
8529
|
return Array.isArray(marks) ? marks[index] : void 0;
|
|
8511
8530
|
}
|
|
8512
8531
|
function preferPositionDecisions(scanned, refused, bag, marks, inferred) {
|
|
8513
|
-
if (isPlainObject$
|
|
8532
|
+
if (isPlainObject$5(bag) && hasPlainPrototype(bag) && isPlainObject$5(refused) && isPlainObject$5(scanned)) {
|
|
8514
8533
|
const out = Object.create(null);
|
|
8515
8534
|
for (const [k, v] of Object.entries(refused)) out[k] = preferPositionDecisions(scanned[k], v, bag[k], asChild(marks, k), inferred);
|
|
8516
8535
|
return out;
|
|
@@ -8949,6 +8968,95 @@ function positionByIntrinsicFrame(bag, source, secrets, secretExpressions, bagIs
|
|
|
8949
8968
|
}, bagIsSameGeneration);
|
|
8950
8969
|
}
|
|
8951
8970
|
|
|
8971
|
+
//#endregion
|
|
8972
|
+
//#region src/deployment/secret-redaction/reference-provenance.ts
|
|
8973
|
+
const passProvenanceOf = /* @__PURE__ */ new WeakMap();
|
|
8974
|
+
const MAX_REFERENCE_VERSIONS = 8;
|
|
8975
|
+
function entryFor(secrets, token) {
|
|
8976
|
+
let table = passProvenanceOf.get(secrets);
|
|
8977
|
+
if (table === void 0) {
|
|
8978
|
+
table = /* @__PURE__ */ new Map();
|
|
8979
|
+
passProvenanceOf.set(secrets, table);
|
|
8980
|
+
}
|
|
8981
|
+
let entry = table.get(token);
|
|
8982
|
+
if (entry === void 0) {
|
|
8983
|
+
entry = {
|
|
8984
|
+
regions: /* @__PURE__ */ new Set(),
|
|
8985
|
+
regionUnknown: false,
|
|
8986
|
+
versions: /* @__PURE__ */ new Set(),
|
|
8987
|
+
versionUnknown: false,
|
|
8988
|
+
readVersions: /* @__PURE__ */ new Set()
|
|
8989
|
+
};
|
|
8990
|
+
table.set(token, entry);
|
|
8991
|
+
}
|
|
8992
|
+
return entry;
|
|
8993
|
+
}
|
|
8994
|
+
function recordReferenceResolution(secrets, token, resolution) {
|
|
8995
|
+
const entry = entryFor(secrets, token);
|
|
8996
|
+
if (resolution.region === void 0) entry.regionUnknown = true;
|
|
8997
|
+
else entry.regions.add(resolution.region);
|
|
8998
|
+
if (resolution.version === void 0) {
|
|
8999
|
+
entry.versionUnknown = true;
|
|
9000
|
+
return;
|
|
9001
|
+
}
|
|
9002
|
+
entry.versions.add(resolution.version);
|
|
9003
|
+
if (resolution.route === "read") entry.readVersions.add(resolution.version);
|
|
9004
|
+
}
|
|
9005
|
+
function recordReferenceProvenanceEntry(secrets, token, provenance, route) {
|
|
9006
|
+
const entry = entryFor(secrets, token);
|
|
9007
|
+
if (provenance.region === void 0) entry.regionUnknown = true;
|
|
9008
|
+
else entry.regions.add(provenance.region);
|
|
9009
|
+
if (provenance.versions === void 0 || provenance.versions.length === 0) {
|
|
9010
|
+
entry.versionUnknown = true;
|
|
9011
|
+
return;
|
|
9012
|
+
}
|
|
9013
|
+
for (const version of provenance.versions) {
|
|
9014
|
+
entry.versions.add(version);
|
|
9015
|
+
if (route === "read") entry.readVersions.add(version);
|
|
9016
|
+
}
|
|
9017
|
+
if (route === "literal") for (const version of provenance.readVersions ?? []) entry.readVersions.add(version);
|
|
9018
|
+
}
|
|
9019
|
+
function mergeReferenceProvenance(from, to) {
|
|
9020
|
+
const source = passProvenanceOf.get(from);
|
|
9021
|
+
if (source === void 0 || from === to) return;
|
|
9022
|
+
for (const [token, entry] of source) {
|
|
9023
|
+
const target = entryFor(to, token);
|
|
9024
|
+
for (const region of entry.regions) target.regions.add(region);
|
|
9025
|
+
target.regionUnknown ||= entry.regionUnknown;
|
|
9026
|
+
for (const version of entry.versions) target.versions.add(version);
|
|
9027
|
+
target.versionUnknown ||= entry.versionUnknown;
|
|
9028
|
+
for (const version of entry.readVersions) target.readVersions.add(version);
|
|
9029
|
+
}
|
|
9030
|
+
}
|
|
9031
|
+
function hasPassProvenance(secrets) {
|
|
9032
|
+
if (secrets === void 0) return false;
|
|
9033
|
+
const table = passProvenanceOf.get(secrets);
|
|
9034
|
+
return table !== void 0 && table.size > 0;
|
|
9035
|
+
}
|
|
9036
|
+
function passProvenanceFor(secrets, token) {
|
|
9037
|
+
if (secrets === void 0) return void 0;
|
|
9038
|
+
const entry = passProvenanceOf.get(secrets)?.get(token);
|
|
9039
|
+
if (entry === void 0) return void 0;
|
|
9040
|
+
return finalize(entry);
|
|
9041
|
+
}
|
|
9042
|
+
function finalize(entry) {
|
|
9043
|
+
const out = {};
|
|
9044
|
+
if (!entry.regionUnknown && entry.regions.size === 1) out.region = [...entry.regions][0];
|
|
9045
|
+
if (!entry.versionUnknown && entry.versions.size > 0 && entry.versions.size <= 8) {
|
|
9046
|
+
out.versions = [...entry.versions].sort();
|
|
9047
|
+
if (entry.readVersions.size > 0) out.readVersions = [...entry.readVersions].sort();
|
|
9048
|
+
}
|
|
9049
|
+
return out;
|
|
9050
|
+
}
|
|
9051
|
+
function snapshotPassProvenance(secrets) {
|
|
9052
|
+
if (secrets === void 0) return void 0;
|
|
9053
|
+
const table = passProvenanceOf.get(secrets);
|
|
9054
|
+
if (table === void 0 || table.size === 0) return void 0;
|
|
9055
|
+
const out = /* @__PURE__ */ new Map();
|
|
9056
|
+
for (const [token, entry] of table) out.set(token, finalize(entry));
|
|
9057
|
+
return out;
|
|
9058
|
+
}
|
|
9059
|
+
|
|
8952
9060
|
//#endregion
|
|
8953
9061
|
//#region src/deployment/secret-redaction/pairs.ts
|
|
8954
9062
|
const resolvedPairsOf = /* @__PURE__ */ new WeakMap();
|
|
@@ -8969,6 +9077,7 @@ function recordResolvedPair(secrets, expression, plaintext) {
|
|
|
8969
9077
|
}
|
|
8970
9078
|
function mergeResolvedPairs(from, to) {
|
|
8971
9079
|
carryMaskOnlyMarks(from, to);
|
|
9080
|
+
mergeReferenceProvenance(from, to);
|
|
8972
9081
|
const pairs = resolvedPairsOf.get(from);
|
|
8973
9082
|
if (pairs === void 0) return;
|
|
8974
9083
|
for (const [expression, plaintext] of pairs) if (typeof plaintext === "string") recordResolvedPair(to, expression, plaintext);
|
|
@@ -9539,7 +9648,7 @@ function readsNoEchoSource(node, sources) {
|
|
|
9539
9648
|
if (typeof argument === "string") return subStringReadsNoEcho(argument, void 0, sources);
|
|
9540
9649
|
if (Array.isArray(argument)) {
|
|
9541
9650
|
const [text, variables] = argument;
|
|
9542
|
-
const vars = isPlainObject$
|
|
9651
|
+
const vars = isPlainObject$5(variables) ? variables : void 0;
|
|
9543
9652
|
if (typeof text === "string" && subStringReadsNoEcho(text, vars, sources)) return true;
|
|
9544
9653
|
return vars !== void 0 && Object.values(vars).some(walk);
|
|
9545
9654
|
}
|
|
@@ -9573,7 +9682,7 @@ function noEchoCoordinatesOf(template, resolved, sources, onCoordinate) {
|
|
|
9573
9682
|
parameters: sources.parameters,
|
|
9574
9683
|
...sources.conditions !== void 0 && { conditions: sources.conditions }
|
|
9575
9684
|
};
|
|
9576
|
-
const isBareDeclaredGetAtt = (node) => isPlainObject$
|
|
9685
|
+
const isBareDeclaredGetAtt = (node) => isPlainObject$5(node) && intrinsicKeyOf(node) === "Fn::GetAtt" && getAttReadsNoEcho(node["Fn::GetAtt"], sources);
|
|
9577
9686
|
const walk = (source, value, path) => {
|
|
9578
9687
|
if (value === void 0) return;
|
|
9579
9688
|
if (source === null || typeof source !== "object") return;
|
|
@@ -9589,7 +9698,7 @@ function noEchoCoordinatesOf(template, resolved, sources, onCoordinate) {
|
|
|
9589
9698
|
const record = source;
|
|
9590
9699
|
const intrinsic = intrinsicKeyOf(record);
|
|
9591
9700
|
if (intrinsic === void 0) {
|
|
9592
|
-
if (!isPlainObject$
|
|
9701
|
+
if (!isPlainObject$5(value)) {
|
|
9593
9702
|
if (readsNoEchoSource(record, parametersOnly)) push(path, source);
|
|
9594
9703
|
return;
|
|
9595
9704
|
}
|
|
@@ -9637,7 +9746,7 @@ function maskWholeValue(value) {
|
|
|
9637
9746
|
if (value === null || value === void 0) return value;
|
|
9638
9747
|
if (typeof value === "string" && isSingleDynamicReferenceToken(value)) return value;
|
|
9639
9748
|
if (Array.isArray(value)) return value.map(maskWholeValue);
|
|
9640
|
-
if (isPlainObject$
|
|
9749
|
+
if (isPlainObject$5(value)) {
|
|
9641
9750
|
const out = {};
|
|
9642
9751
|
for (const [key, child] of Object.entries(value)) Object.defineProperty(out, key, {
|
|
9643
9752
|
value: maskWholeValue(child),
|
|
@@ -9660,7 +9769,7 @@ function readAt(bag, coordinate) {
|
|
|
9660
9769
|
node = node[segment];
|
|
9661
9770
|
continue;
|
|
9662
9771
|
}
|
|
9663
|
-
if (!isPlainObject$
|
|
9772
|
+
if (!isPlainObject$5(node) || !Object.hasOwn(node, segment)) return {
|
|
9664
9773
|
found: false,
|
|
9665
9774
|
value: void 0
|
|
9666
9775
|
};
|
|
@@ -9676,7 +9785,7 @@ function valueAtCoordinate(bag, coordinate) {
|
|
|
9676
9785
|
}
|
|
9677
9786
|
function cloneContainer(node) {
|
|
9678
9787
|
if (Array.isArray(node)) return [...node];
|
|
9679
|
-
if (isPlainObject$
|
|
9788
|
+
if (isPlainObject$5(node)) return { ...node };
|
|
9680
9789
|
return node;
|
|
9681
9790
|
}
|
|
9682
9791
|
function maskAtCoordinates(bag, coordinates) {
|
|
@@ -9743,20 +9852,20 @@ function readbackPathFor(readback, properties, coordinate) {
|
|
|
9743
9852
|
if (!Array.isArray(live)) return path.length === 0 ? void 0 : path;
|
|
9744
9853
|
const key = Array.isArray(desired) ? identityKeyFor(live, desired) : void 0;
|
|
9745
9854
|
const element = Array.isArray(desired) ? desired[segment] : void 0;
|
|
9746
|
-
if (key === void 0 || !isPlainObject$
|
|
9855
|
+
if (key === void 0 || !isPlainObject$5(element)) return path;
|
|
9747
9856
|
const identity = element[key];
|
|
9748
|
-
const index = live.findIndex((item) => isPlainObject$
|
|
9857
|
+
const index = live.findIndex((item) => isPlainObject$5(item) && item[key] === identity);
|
|
9749
9858
|
if (index < 0) return path;
|
|
9750
9859
|
path.push(index);
|
|
9751
9860
|
live = live[index];
|
|
9752
9861
|
desired = element;
|
|
9753
9862
|
continue;
|
|
9754
9863
|
}
|
|
9755
|
-
if (!isPlainObject$
|
|
9864
|
+
if (!isPlainObject$5(live)) return path.length === 0 ? void 0 : path;
|
|
9756
9865
|
if (!Object.hasOwn(live, segment)) return void 0;
|
|
9757
9866
|
path.push(segment);
|
|
9758
9867
|
live = live[segment];
|
|
9759
|
-
desired = isPlainObject$
|
|
9868
|
+
desired = isPlainObject$5(desired) ? desired[segment] : void 0;
|
|
9760
9869
|
}
|
|
9761
9870
|
return path;
|
|
9762
9871
|
}
|
|
@@ -9785,7 +9894,7 @@ function witnessNormalize(stored, today, v11) {
|
|
|
9785
9894
|
const confirmed = [];
|
|
9786
9895
|
const differing = [];
|
|
9787
9896
|
const walk = (s, t, v, path) => {
|
|
9788
|
-
if (v !== "***" && containsMask(v) && (Array.isArray(v) ? !Array.isArray(s) || s.length !== v.length : isPlainObject$
|
|
9897
|
+
if (v !== "***" && containsMask(v) && (Array.isArray(v) ? !Array.isArray(s) || s.length !== v.length : isPlainObject$5(v) ? !isPlainObject$5(s) : false)) {
|
|
9789
9898
|
if (s === void 0 || containsMask(s)) return s;
|
|
9790
9899
|
if (jsonEqual(s, t)) {
|
|
9791
9900
|
confirmed.push(path);
|
|
@@ -9814,8 +9923,8 @@ function witnessNormalize(stored, today, v11) {
|
|
|
9814
9923
|
});
|
|
9815
9924
|
return changed ? out : s;
|
|
9816
9925
|
}
|
|
9817
|
-
if (isPlainObject$
|
|
9818
|
-
const tt = isPlainObject$
|
|
9926
|
+
if (isPlainObject$5(v) && isPlainObject$5(s)) {
|
|
9927
|
+
const tt = isPlainObject$5(t) ? t : {};
|
|
9819
9928
|
let out;
|
|
9820
9929
|
for (const key of Object.keys(v)) {
|
|
9821
9930
|
if (!Object.hasOwn(s, key)) continue;
|
|
@@ -9838,7 +9947,7 @@ function witnessNormalize(stored, today, v11) {
|
|
|
9838
9947
|
function containsMask(value) {
|
|
9839
9948
|
if (value === "***") return true;
|
|
9840
9949
|
if (Array.isArray(value)) return value.some(containsMask);
|
|
9841
|
-
if (isPlainObject$
|
|
9950
|
+
if (isPlainObject$5(value)) return Object.values(value).some(containsMask);
|
|
9842
9951
|
return false;
|
|
9843
9952
|
}
|
|
9844
9953
|
function jsonEqual(a, b) {
|
|
@@ -9882,7 +9991,7 @@ function noEchoComparison(options) {
|
|
|
9882
9991
|
const out = node.map(walk);
|
|
9883
9992
|
return out.some((item, i) => item !== node[i]) ? out : node;
|
|
9884
9993
|
}
|
|
9885
|
-
if (isPlainObject$
|
|
9994
|
+
if (isPlainObject$5(node)) {
|
|
9886
9995
|
let out;
|
|
9887
9996
|
for (const [key, child] of Object.entries(node)) {
|
|
9888
9997
|
const next = walk(child);
|
|
@@ -11809,6 +11918,14 @@ const inFlightLookups = /* @__PURE__ */ new Map();
|
|
|
11809
11918
|
function getCreateOnlyPropertyPaths(resourceType) {
|
|
11810
11919
|
return lookupCreateOnlyPropertyPaths(resourceType, false);
|
|
11811
11920
|
}
|
|
11921
|
+
function cachedCreateOnlyPropertyPaths(resourceType) {
|
|
11922
|
+
if (hasNoRegistrySchema(resourceType)) return Promise.resolve([]);
|
|
11923
|
+
if (inFlightLookups.has(resourceType)) return void 0;
|
|
11924
|
+
const cached = createOnlyPropertiesCache.get(resourceType);
|
|
11925
|
+
if (cached !== void 0) return cached;
|
|
11926
|
+
const snapshot = CREATE_ONLY_PATHS_SNAPSHOT.get(resourceType);
|
|
11927
|
+
return snapshot === void 0 ? void 0 : Promise.resolve(snapshot);
|
|
11928
|
+
}
|
|
11812
11929
|
function prefetchCreateOnlyPropertyPaths(resourceTypes) {
|
|
11813
11930
|
const started = [];
|
|
11814
11931
|
for (const type of new Set(resourceTypes)) {
|
|
@@ -12761,7 +12878,7 @@ function probeFoundSameId(resourceType, a, b) {
|
|
|
12761
12878
|
//#region src/provisioning/config-shape.ts
|
|
12762
12879
|
function readConfigString(container, key, fallback, containerPath, options) {
|
|
12763
12880
|
if (container === void 0 || container === null) return fallback;
|
|
12764
|
-
if (!isPlainObject$
|
|
12881
|
+
if (!isPlainObject$4(container) || isUnresolvedIntrinsicContainer(container)) {
|
|
12765
12882
|
const detail = malformedShapeDetail(container);
|
|
12766
12883
|
if (options?.onUnusable) {
|
|
12767
12884
|
const named = fallback === "" ? "" : ` (${fallback})`;
|
|
@@ -12801,7 +12918,7 @@ function requireConfigArray(value, path, options) {
|
|
|
12801
12918
|
return value;
|
|
12802
12919
|
}
|
|
12803
12920
|
function requireConfigObject(value, path, options) {
|
|
12804
|
-
if (!isPlainObject$
|
|
12921
|
+
if (!isPlainObject$4(value) || isUnresolvedIntrinsicContainer(value)) {
|
|
12805
12922
|
const detail = malformedShapeDetail(value);
|
|
12806
12923
|
if (options?.onUnusable) {
|
|
12807
12924
|
options.onUnusable(`${path} must be an object ${detail}. Leaving this configuration unapplied here; the same value is REFUSED on a template-path create.`);
|
|
@@ -12813,7 +12930,7 @@ function requireConfigObject(value, path, options) {
|
|
|
12813
12930
|
}
|
|
12814
12931
|
function configStringRefusal(container, key, fallback, containerPath, options) {
|
|
12815
12932
|
if (container === void 0 || container === null) return void 0;
|
|
12816
|
-
if (!isPlainObject$
|
|
12933
|
+
if (!isPlainObject$4(container) || isUnresolvedIntrinsicContainer(container)) return `${containerPath} must be an object ${malformedShapeDetail(container)}`;
|
|
12817
12934
|
return configValueRefusal(container[key], fallback, `${containerPath}.${key}`, options);
|
|
12818
12935
|
}
|
|
12819
12936
|
function coerceCfnBoolean(value) {
|
|
@@ -12826,7 +12943,7 @@ function coerceCfnBoolean(value) {
|
|
|
12826
12943
|
}
|
|
12827
12944
|
function configBooleanRefusal(container, key, containerPath) {
|
|
12828
12945
|
if (container === void 0 || container === null) return void 0;
|
|
12829
|
-
if (!isPlainObject$
|
|
12946
|
+
if (!isPlainObject$4(container) || isUnresolvedIntrinsicContainer(container)) return `${containerPath} must be an object ${malformedShapeDetail(container)}`;
|
|
12830
12947
|
const value = container[key];
|
|
12831
12948
|
if (value === void 0) return void 0;
|
|
12832
12949
|
if (coerceCfnBoolean(value) !== void 0) return void 0;
|
|
@@ -12840,7 +12957,7 @@ function coerceCfnInteger(value) {
|
|
|
12840
12957
|
}
|
|
12841
12958
|
function configIntegerRefusal(container, key, containerPath, min, max) {
|
|
12842
12959
|
if (container === void 0 || container === null) return void 0;
|
|
12843
|
-
if (!isPlainObject$
|
|
12960
|
+
if (!isPlainObject$4(container) || isUnresolvedIntrinsicContainer(container)) return `${containerPath} must be an object ${malformedShapeDetail(container)}`;
|
|
12844
12961
|
const value = container[key];
|
|
12845
12962
|
if (value === void 0) return void 0;
|
|
12846
12963
|
const n = coerceCfnInteger(value);
|
|
@@ -12854,10 +12971,10 @@ function configValueRefusal(value, fallback, path, options) {
|
|
|
12854
12971
|
if (typeof value !== "string" || value.trim() === "") return `${path} must be a non-empty string ${malformedShapeDetail(value)}`;
|
|
12855
12972
|
}
|
|
12856
12973
|
function malformedShapeDetail(value) {
|
|
12857
|
-
if (isPlainObject$
|
|
12974
|
+
if (isPlainObject$4(value) && isUnresolvedIntrinsicContainer(value)) return `(got ${describe(value)} — nothing substituted it before this call)`;
|
|
12858
12975
|
return `(got ${describe(value)}) — check for an unresolved intrinsic or a mis-nested template value`;
|
|
12859
12976
|
}
|
|
12860
|
-
function isPlainObject$
|
|
12977
|
+
function isPlainObject$4(value) {
|
|
12861
12978
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
12862
12979
|
}
|
|
12863
12980
|
const NAMEABLE_INTRINSIC_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -12884,7 +13001,7 @@ function describe(value) {
|
|
|
12884
13001
|
if (value === null) return "null";
|
|
12885
13002
|
if (Array.isArray(value)) return "an array";
|
|
12886
13003
|
if (typeof value === "string") return value.trim() === "" ? "a blank string" : "a string";
|
|
12887
|
-
if (isPlainObject$
|
|
13004
|
+
if (isPlainObject$4(value) && isUnresolvedIntrinsicContainer(value)) {
|
|
12888
13005
|
const key = Object.keys(value)[0];
|
|
12889
13006
|
return NAMEABLE_INTRINSIC_KEYS.has(key) ? `an unresolved ${key} intrinsic` : "an unresolved intrinsic";
|
|
12890
13007
|
}
|
|
@@ -17774,7 +17891,7 @@ function maskedPropertyFingerprint(templateValue) {
|
|
|
17774
17891
|
return `${FINGERPRINT_PREFIX}${digest}`;
|
|
17775
17892
|
}
|
|
17776
17893
|
var UnknownInput = class extends Error {};
|
|
17777
|
-
function isPlainObject$
|
|
17894
|
+
function isPlainObject$3(value) {
|
|
17778
17895
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
17779
17896
|
}
|
|
17780
17897
|
const DYNAMIC_REFERENCE_OPEN = "{{resolve:";
|
|
@@ -17794,7 +17911,7 @@ function carriesSecretValue(value, corpora) {
|
|
|
17794
17911
|
return false;
|
|
17795
17912
|
}
|
|
17796
17913
|
function parameterInputsFor(args) {
|
|
17797
|
-
const declared = isPlainObject$
|
|
17914
|
+
const declared = isPlainObject$3(args.template.Parameters) ? args.template.Parameters : {};
|
|
17798
17915
|
const values = args.values ?? {};
|
|
17799
17916
|
const inputs = /* @__PURE__ */ new Map();
|
|
17800
17917
|
const bound = {};
|
|
@@ -17805,7 +17922,7 @@ function parameterInputsFor(args) {
|
|
|
17805
17922
|
continue;
|
|
17806
17923
|
}
|
|
17807
17924
|
const value = values[name];
|
|
17808
|
-
let secret = isPlainObject$
|
|
17925
|
+
let secret = isPlainObject$3(definition) && declaresNoEcho(definition) || carriesSecretValue(value, []);
|
|
17809
17926
|
if (!secret && args.nestedChild === true && args.supplied !== void 0) {
|
|
17810
17927
|
if (Object.hasOwn(args.supplied, name)) {
|
|
17811
17928
|
const passed = args.passedClasses?.get(name);
|
|
@@ -17856,7 +17973,7 @@ function intrinsicKey(value) {
|
|
|
17856
17973
|
const OPAQUE_ATTRIBUTE_TYPES = /* @__PURE__ */ new Set(["AWS::CloudFormation::CustomResource", NESTED_STACK_TYPE$4]);
|
|
17857
17974
|
function hasOpaqueAttributes(logicalId, walk) {
|
|
17858
17975
|
const definition = walk.resources[logicalId];
|
|
17859
|
-
const type = isPlainObject$
|
|
17976
|
+
const type = isPlainObject$3(definition) ? definition["Type"] : void 0;
|
|
17860
17977
|
return typeof type === "string" && (type.startsWith("Custom::") || OPAQUE_ATTRIBUTE_TYPES.has(type));
|
|
17861
17978
|
}
|
|
17862
17979
|
function getAttTarget(operand) {
|
|
@@ -17881,7 +17998,7 @@ function taintOf(logicalId, walk) {
|
|
|
17881
17998
|
const visit = (value) => {
|
|
17882
17999
|
if (typeof value === "string") return value.includes(DYNAMIC_REFERENCE_OPEN);
|
|
17883
18000
|
if (Array.isArray(value)) return value.some(visit);
|
|
17884
|
-
if (!isPlainObject$
|
|
18001
|
+
if (!isPlainObject$3(value)) return false;
|
|
17885
18002
|
const key = intrinsicKey(value);
|
|
17886
18003
|
const operand = key === void 0 ? void 0 : value[key];
|
|
17887
18004
|
let verdict = "clean";
|
|
@@ -17893,7 +18010,7 @@ function taintOf(logicalId, walk) {
|
|
|
17893
18010
|
else if (key === "Fn::FindInMap" && mapReadClass(operand, walk.sources.template) !== "clean") verdict = "tainted";
|
|
17894
18011
|
else if (key === "Fn::Sub") {
|
|
17895
18012
|
const text = Array.isArray(operand) ? operand[0] : operand;
|
|
17896
|
-
const vars = Array.isArray(operand) && isPlainObject$
|
|
18013
|
+
const vars = Array.isArray(operand) && isPlainObject$3(operand[1]) ? operand[1] : {};
|
|
17897
18014
|
if (typeof text === "string") for (const name of subPlaceholders(text)) {
|
|
17898
18015
|
if (Object.hasOwn(vars, name)) continue;
|
|
17899
18016
|
const owner = name.includes(".") ? name.split(".")[0] : name;
|
|
@@ -17907,7 +18024,7 @@ function taintOf(logicalId, walk) {
|
|
|
17907
18024
|
return Object.values(value).some(visit);
|
|
17908
18025
|
};
|
|
17909
18026
|
const definition = walk.resources[logicalId];
|
|
17910
|
-
const result = visit(isPlainObject$
|
|
18027
|
+
const result = visit(isPlainObject$3(definition) ? definition["Properties"] : void 0) ? "tainted" : unknown ? "unknown" : "clean";
|
|
17911
18028
|
walk.inProgress.delete(logicalId);
|
|
17912
18029
|
walk.taint.set(logicalId, result);
|
|
17913
18030
|
return result;
|
|
@@ -17923,7 +18040,7 @@ function conditionInput(name, walk) {
|
|
|
17923
18040
|
return typeof verdict === "boolean" ? verdict : "unknown";
|
|
17924
18041
|
}
|
|
17925
18042
|
function conditionClosure(name, walk) {
|
|
17926
|
-
const definitions = isPlainObject$
|
|
18043
|
+
const definitions = isPlainObject$3(walk.sources.template.Conditions) ? walk.sources.template.Conditions : {};
|
|
17927
18044
|
let secret = false;
|
|
17928
18045
|
let unknown = false;
|
|
17929
18046
|
let unread = false;
|
|
@@ -17938,7 +18055,7 @@ function conditionClosure(name, walk) {
|
|
|
17938
18055
|
value.forEach(visit);
|
|
17939
18056
|
return;
|
|
17940
18057
|
}
|
|
17941
|
-
if (!isPlainObject$
|
|
18058
|
+
if (!isPlainObject$3(value)) return;
|
|
17942
18059
|
const keys = Object.keys(value);
|
|
17943
18060
|
if (keys.length === 1 && keys[0] === "Condition" && typeof value["Condition"] === "string") {
|
|
17944
18061
|
pending.push(value["Condition"]);
|
|
@@ -17971,7 +18088,7 @@ function conditionClosure(name, walk) {
|
|
|
17971
18088
|
if (key === "Fn::Sub") {
|
|
17972
18089
|
const operand = value["Fn::Sub"];
|
|
17973
18090
|
const text = Array.isArray(operand) ? operand[0] : operand;
|
|
17974
|
-
const vars = Array.isArray(operand) && isPlainObject$
|
|
18091
|
+
const vars = Array.isArray(operand) && isPlainObject$3(operand[1]) ? operand[1] : {};
|
|
17975
18092
|
if (typeof text === "string") for (const name of subPlaceholders(text)) {
|
|
17976
18093
|
if (Object.hasOwn(vars, name)) continue;
|
|
17977
18094
|
if (name.includes(".") && !name.startsWith("AWS::")) secret = true;
|
|
@@ -18000,8 +18117,8 @@ function mapReadClass(operand, template) {
|
|
|
18000
18117
|
const mapName = Array.isArray(operand) ? operand[0] : void 0;
|
|
18001
18118
|
if (typeof mapName !== "string") return "unknown";
|
|
18002
18119
|
const mappings = template.Mappings;
|
|
18003
|
-
const map = isPlainObject$
|
|
18004
|
-
if (!isPlainObject$
|
|
18120
|
+
const map = isPlainObject$3(mappings) && Object.hasOwn(mappings, mapName) ? mappings[mapName] : void 0;
|
|
18121
|
+
if (!isPlainObject$3(map)) return "unknown";
|
|
18005
18122
|
return carriesSecretValue(map, []) ? "secret" : "clean";
|
|
18006
18123
|
}
|
|
18007
18124
|
async function resolvedInput(node, walk) {
|
|
@@ -18069,7 +18186,7 @@ async function inputForm(value, walk) {
|
|
|
18069
18186
|
concrete: parts.every((p) => p.concrete)
|
|
18070
18187
|
};
|
|
18071
18188
|
}
|
|
18072
|
-
if (!isPlainObject$
|
|
18189
|
+
if (!isPlainObject$3(value)) return {
|
|
18073
18190
|
form: value,
|
|
18074
18191
|
concrete: true
|
|
18075
18192
|
};
|
|
@@ -18132,7 +18249,7 @@ async function inputForm(value, walk) {
|
|
|
18132
18249
|
concrete: false
|
|
18133
18250
|
};
|
|
18134
18251
|
}
|
|
18135
|
-
const explicit = Array.isArray(operand) && isPlainObject$
|
|
18252
|
+
const explicit = Array.isArray(operand) && isPlainObject$3(operand[1]) ? operand[1] : {};
|
|
18136
18253
|
const vars = await inputForm(explicit, walk);
|
|
18137
18254
|
const placeholders = [];
|
|
18138
18255
|
let concrete = vars.concrete && !text.includes(DYNAMIC_REFERENCE_OPEN);
|
|
@@ -18185,8 +18302,8 @@ function newWalk(sources, nested = {
|
|
|
18185
18302
|
}) {
|
|
18186
18303
|
return {
|
|
18187
18304
|
sources,
|
|
18188
|
-
resources: isPlainObject$
|
|
18189
|
-
parameters: isPlainObject$
|
|
18305
|
+
resources: isPlainObject$3(sources.template.Resources) ? sources.template.Resources : {},
|
|
18306
|
+
parameters: isPlainObject$3(sources.template.Parameters) ? sources.template.Parameters : {},
|
|
18190
18307
|
taint: /* @__PURE__ */ new Map(),
|
|
18191
18308
|
inProgress: /* @__PURE__ */ new Set(),
|
|
18192
18309
|
stackChain: nested.stackChain,
|
|
@@ -18210,34 +18327,34 @@ function passedKey(passed) {
|
|
|
18210
18327
|
function isNestedStackRow(logicalId, walk) {
|
|
18211
18328
|
if (!Object.hasOwn(walk.resources, logicalId)) return false;
|
|
18212
18329
|
const definition = walk.resources[logicalId];
|
|
18213
|
-
return isPlainObject$
|
|
18330
|
+
return isPlainObject$3(definition) && definition["Type"] === NESTED_STACK_TYPE$4;
|
|
18214
18331
|
}
|
|
18215
18332
|
function getAttAttribute(operand, target) {
|
|
18216
18333
|
if (Array.isArray(operand)) return operand.length === 2 && typeof operand[1] === "string" ? operand[1] : void 0;
|
|
18217
18334
|
return typeof operand === "string" ? operand.slice(target.length + 1) : void 0;
|
|
18218
18335
|
}
|
|
18219
18336
|
function rowParameters(definition) {
|
|
18220
|
-
const properties = isPlainObject$
|
|
18337
|
+
const properties = isPlainObject$3(definition) ? definition["Properties"] : void 0;
|
|
18221
18338
|
if (properties === void 0) return {};
|
|
18222
|
-
if (!isPlainObject$
|
|
18339
|
+
if (!isPlainObject$3(properties)) return "unknown";
|
|
18223
18340
|
const parameters = properties["Parameters"];
|
|
18224
18341
|
if (parameters === void 0) return {};
|
|
18225
|
-
if (!isPlainObject$
|
|
18342
|
+
if (!isPlainObject$3(parameters) || intrinsicKey(parameters) !== void 0) return "unknown";
|
|
18226
18343
|
return parameters;
|
|
18227
18344
|
}
|
|
18228
18345
|
function childParameterInputs(template, passed) {
|
|
18229
|
-
const declared = isPlainObject$
|
|
18346
|
+
const declared = isPlainObject$3(template.Parameters) ? template.Parameters : {};
|
|
18230
18347
|
const inputs = /* @__PURE__ */ new Map();
|
|
18231
18348
|
for (const name of Object.keys(declared)) {
|
|
18232
18349
|
const definition = declared[name];
|
|
18233
|
-
if (isPlainObject$
|
|
18350
|
+
if (isPlainObject$3(definition) && declaresNoEcho(definition)) inputs.set(name, { kind: "secret" });
|
|
18234
18351
|
else if (passed.has(name)) {
|
|
18235
18352
|
const passedClass = passed.get(name);
|
|
18236
18353
|
inputs.set(name, passedClass === "clean" ? {
|
|
18237
18354
|
kind: "value",
|
|
18238
18355
|
value: void 0
|
|
18239
18356
|
} : passedClass === "unknown" ? { kind: "unknown" } : { kind: "secret" });
|
|
18240
|
-
} else if (isPlainObject$
|
|
18357
|
+
} else if (isPlainObject$3(definition) && Object.hasOwn(definition, "Default") && !carriesSecretValue(definition["Default"], [])) inputs.set(name, {
|
|
18241
18358
|
kind: "value",
|
|
18242
18359
|
value: definition["Default"]
|
|
18243
18360
|
});
|
|
@@ -18254,7 +18371,7 @@ function closureClass(closure) {
|
|
|
18254
18371
|
return closure.unread ? "unread" : "clean";
|
|
18255
18372
|
}
|
|
18256
18373
|
async function childOutputClass(loaded, outputName, passed, chain, shared) {
|
|
18257
|
-
if (loaded === void 0 || !isPlainObject$
|
|
18374
|
+
if (loaded === void 0 || !isPlainObject$3(loaded.template)) return "unknown";
|
|
18258
18375
|
const scopeKey = JSON.stringify([loaded.identity, passedKey(passed)]);
|
|
18259
18376
|
const memoKey = JSON.stringify([scopeKey, outputName]);
|
|
18260
18377
|
const memo = shared.outputs.get(memoKey);
|
|
@@ -18267,8 +18384,8 @@ async function classifyChildOutput(loaded, outputName, passed, chain, shared, sc
|
|
|
18267
18384
|
if (++shared.steps > MAX_NESTED_OUTPUT_STEPS) return "unknown";
|
|
18268
18385
|
if (chain.includes(loaded.identity) || chain.length >= MAX_NESTED_OUTPUT_DEPTH) return "unknown";
|
|
18269
18386
|
const template = loaded.template;
|
|
18270
|
-
const output = (isPlainObject$
|
|
18271
|
-
if (!isPlainObject$
|
|
18387
|
+
const output = (isPlainObject$3(template.Outputs) ? template.Outputs : {})[outputName];
|
|
18388
|
+
if (!isPlainObject$3(output) || !Object.hasOwn(output, "Value")) return "unknown";
|
|
18272
18389
|
const scope = {
|
|
18273
18390
|
walk: newWalk({
|
|
18274
18391
|
template,
|
|
@@ -18340,7 +18457,7 @@ async function expressionClass(value, scope) {
|
|
|
18340
18457
|
return result;
|
|
18341
18458
|
};
|
|
18342
18459
|
if (Array.isArray(value)) return all(value);
|
|
18343
|
-
if (!isPlainObject$
|
|
18460
|
+
if (!isPlainObject$3(value)) return "clean";
|
|
18344
18461
|
const key = intrinsicKey(value);
|
|
18345
18462
|
if (key === void 0) return all(Object.values(value));
|
|
18346
18463
|
const operand = value[key];
|
|
@@ -18355,7 +18472,7 @@ async function expressionClass(value, scope) {
|
|
|
18355
18472
|
case "Fn::Sub": {
|
|
18356
18473
|
const text = Array.isArray(operand) ? operand[0] : operand;
|
|
18357
18474
|
if (typeof text !== "string") return worseOf("unknown", await expressionClass(operand, scope));
|
|
18358
|
-
const vars = Array.isArray(operand) && isPlainObject$
|
|
18475
|
+
const vars = Array.isArray(operand) && isPlainObject$3(operand[1]) ? operand[1] : {};
|
|
18359
18476
|
let result = text.includes(DYNAMIC_REFERENCE_OPEN) ? "secret" : "clean";
|
|
18360
18477
|
result = worseOf(result, await all(Object.values(vars)));
|
|
18361
18478
|
for (const name of subPlaceholders(text)) {
|
|
@@ -18433,7 +18550,7 @@ async function classifyPassedParameters(parameters, sources) {
|
|
|
18433
18550
|
}
|
|
18434
18551
|
async function classifyPassed(parameters, sources, nested) {
|
|
18435
18552
|
const classes = /* @__PURE__ */ new Map();
|
|
18436
|
-
if (!isPlainObject$
|
|
18553
|
+
if (!isPlainObject$3(parameters)) return classes;
|
|
18437
18554
|
for (const [name, expression] of Object.entries(parameters)) {
|
|
18438
18555
|
let passedClass;
|
|
18439
18556
|
try {
|
|
@@ -18474,7 +18591,7 @@ function possiblyMaskedKeys(resolvedProps, corpora) {
|
|
|
18474
18591
|
const wholeShortLeaf = (value) => {
|
|
18475
18592
|
if (typeof value === "string") return short.includes(value);
|
|
18476
18593
|
if (Array.isArray(value)) return value.some(wholeShortLeaf);
|
|
18477
|
-
if (isPlainObject$
|
|
18594
|
+
if (isPlainObject$3(value)) return Object.values(value).some(wholeShortLeaf);
|
|
18478
18595
|
return false;
|
|
18479
18596
|
};
|
|
18480
18597
|
return Object.keys(resolvedProps).filter((key) => {
|
|
@@ -18505,7 +18622,7 @@ function maskedPropertyFingerprintsOf(record) {
|
|
|
18505
18622
|
const read = /* @__PURE__ */ new Map();
|
|
18506
18623
|
if (record === null || typeof record !== "object") return read;
|
|
18507
18624
|
const field = record.maskedPropertyFingerprints;
|
|
18508
|
-
if (!isPlainObject$
|
|
18625
|
+
if (!isPlainObject$3(field)) return read;
|
|
18509
18626
|
for (const [key, value] of Object.entries(field)) if (typeof value === "string" && value.startsWith(FINGERPRINT_PREFIX)) read.set(key, value);
|
|
18510
18627
|
return read;
|
|
18511
18628
|
}
|
|
@@ -18513,7 +18630,7 @@ function maskedPropertyInputFingerprintsOf(record) {
|
|
|
18513
18630
|
const read = /* @__PURE__ */ new Map();
|
|
18514
18631
|
if (record === null || typeof record !== "object") return read;
|
|
18515
18632
|
const field = record.maskedPropertyInputFingerprints;
|
|
18516
|
-
if (!isPlainObject$
|
|
18633
|
+
if (!isPlainObject$3(field)) return read;
|
|
18517
18634
|
const text = maskedPropertyFingerprintsOf(record);
|
|
18518
18635
|
for (const [key, value] of Object.entries(field)) {
|
|
18519
18636
|
if (typeof value !== "string" || !value.startsWith(INPUT_FINGERPRINT_PREFIX)) continue;
|
|
@@ -18560,7 +18677,7 @@ async function movedMaskedProperties(record, templateProps, fingerprinter, onReb
|
|
|
18560
18677
|
function withRebaselinedFingerprints(record, fingerprints) {
|
|
18561
18678
|
const text = maskedPropertyFingerprintsOf(record);
|
|
18562
18679
|
const field = record.maskedPropertyInputFingerprints;
|
|
18563
|
-
const next = isPlainObject$
|
|
18680
|
+
const next = isPlainObject$3(field) ? Object.entries(field) : [];
|
|
18564
18681
|
let changed = false;
|
|
18565
18682
|
for (const [key, value] of Object.entries(fingerprints)) {
|
|
18566
18683
|
if (text.get(key) !== splitInputFingerprint(value).text) continue;
|
|
@@ -18593,10 +18710,10 @@ function withMaskedPropertyFingerprints(scrubbed, writtenBag, templateProps, sec
|
|
|
18593
18710
|
fingerprints = maskedPropertyFingerprintsFor(scrubbed.properties, templateProps);
|
|
18594
18711
|
inputs = boundInputFingerprints(fingerprints, inputFingerprints);
|
|
18595
18712
|
} else {
|
|
18596
|
-
if (!isPlainObject$
|
|
18713
|
+
if (!isPlainObject$3(previous)) return scrubbed;
|
|
18597
18714
|
if (corpora.length === 0) return scrubbed;
|
|
18598
18715
|
fingerprints = { ...previous };
|
|
18599
|
-
inputs = isPlainObject$
|
|
18716
|
+
inputs = isPlainObject$3(previousInputs) ? { ...previousInputs } : void 0;
|
|
18600
18717
|
}
|
|
18601
18718
|
if (fingerprints !== void 0 && corpora.length > 0) {
|
|
18602
18719
|
const refused = Object.keys(fingerprints).filter((key) => Object.hasOwn(templateProps, key) && corpora.some((corpus) => templateCarriesNeedle(templateProps[key], corpus)));
|
|
@@ -20022,6 +20139,17 @@ function recordProducerSecretPairs(logicalId, value, context) {
|
|
|
20022
20139
|
if (bag === void 0 || context.producerSecrets === void 0) return;
|
|
20023
20140
|
const producer = context.producerSecrets(logicalId);
|
|
20024
20141
|
if (producer === void 0 || producer === bag || producer.size === 0) return;
|
|
20142
|
+
if (hasPassProvenance(producer)) {
|
|
20143
|
+
const served = [...wholeStringLeavesOf(value)];
|
|
20144
|
+
for (const [plaintext, expression] of producer) {
|
|
20145
|
+
if (plaintext.length < 4 || !expression.startsWith("{{resolve:")) continue;
|
|
20146
|
+
if (!served.some((leaf) => leaf.includes(plaintext))) continue;
|
|
20147
|
+
const entry = passProvenanceFor(producer, expression);
|
|
20148
|
+
if (entry === void 0) continue;
|
|
20149
|
+
recordReferenceProvenanceEntry(bag, expression, entry, "read");
|
|
20150
|
+
if (context.provenanceSink !== void 0) recordReferenceProvenanceEntry(context.provenanceSink, expression, entry, "read");
|
|
20151
|
+
}
|
|
20152
|
+
}
|
|
20025
20153
|
const preRun = context.producerPreRunPhysicalId?.(logicalId);
|
|
20026
20154
|
const record = Object.hasOwn(context.resources, logicalId) ? context.resources[logicalId] : void 0;
|
|
20027
20155
|
if (typeof preRun !== "string" || record?.physicalId !== preRun) return;
|
|
@@ -20054,6 +20182,7 @@ async function reresolveRecordedReferences(value, logicalId, context, origin, so
|
|
|
20054
20182
|
return value;
|
|
20055
20183
|
}
|
|
20056
20184
|
if (!await this.referencesMatchPhysicalId(value, logicalId, context)) {
|
|
20185
|
+
if (context.provenanceCapture) return value;
|
|
20057
20186
|
this.logger.warn(safeMsg`Serving ${this.displayMasked(origin, context)} as recorded, with its {{resolve:...}} reference(s) unresolved: cdkd cannot confirm the secret still holds the value ${this.displayMasked(logicalId, context)} was deployed with, because its physical id does not contain it. Either the secret changed since then (update ${this.displayMasked(logicalId, context)} so cdkd deploys it with the new value), or the value is not part of its name (a custom resource's Data, a name shorter than four characters), and cdkd sends the recorded reference as before.`);
|
|
20058
20187
|
return value;
|
|
20059
20188
|
}
|
|
@@ -20341,7 +20470,10 @@ async function reresolveCrossStackValue(value, producerRegion, context, origin,
|
|
|
20341
20470
|
}
|
|
20342
20471
|
if (!carriesDynamicReference(value)) return value;
|
|
20343
20472
|
const resolver = this.resolverForProducerRegion(producerRegion, context, producerRegionLogText);
|
|
20344
|
-
const pinnedContext =
|
|
20473
|
+
const pinnedContext = {
|
|
20474
|
+
...producerRegion ? withoutProducerRegions(context) : context,
|
|
20475
|
+
provenanceRoute: "read"
|
|
20476
|
+
};
|
|
20345
20477
|
const walk = async (v) => {
|
|
20346
20478
|
if (typeof v === "string") return v.includes("{{resolve:") ? await resolver.resolveDynamicReferences(v, pinnedContext) : v;
|
|
20347
20479
|
if (Array.isArray(v)) {
|
|
@@ -21143,6 +21275,16 @@ async function getCrossAccountStackState(roleArn, stackName, region, context) {
|
|
|
21143
21275
|
function secretVerdictScope(resolver) {
|
|
21144
21276
|
return injectiveKey(credentialFingerprint(ambientCredentialConfig()), canonicalizeRegion(resolver.explicitRegion) ?? "");
|
|
21145
21277
|
}
|
|
21278
|
+
function recordProvenanceOfResolution(resolver, context, token, version) {
|
|
21279
|
+
if (context === void 0) return;
|
|
21280
|
+
const resolution = {
|
|
21281
|
+
region: canonicalizeRegion(resolver.explicitRegion),
|
|
21282
|
+
version,
|
|
21283
|
+
route: context.provenanceRoute ?? "literal"
|
|
21284
|
+
};
|
|
21285
|
+
if (context.recordedSecretValues !== void 0) recordReferenceResolution(context.recordedSecretValues, token, resolution);
|
|
21286
|
+
if (context.provenanceSink !== void 0) recordReferenceResolution(context.provenanceSink, token, resolution);
|
|
21287
|
+
}
|
|
21146
21288
|
async function resolveDynamicReferences(value, context) {
|
|
21147
21289
|
return (await this.resolveDynamicReferencesWithLogTwin(value, value, context, void 0, true)).result;
|
|
21148
21290
|
}
|
|
@@ -21210,6 +21352,7 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21210
21352
|
recorded.set(cached.value, fullMatch);
|
|
21211
21353
|
recordResolvedPair(recorded, fullMatch, cached.value);
|
|
21212
21354
|
}
|
|
21355
|
+
if (cached.secret && cached.value) recordProvenanceOfResolution(this, context, fullMatch, cached.version);
|
|
21213
21356
|
if (service === "ssm" && !cached.secret && recorded && !this.producerRegionGuest) recordProvenPublicExpression(recorded, fullMatch, cached.value);
|
|
21214
21357
|
result = result.replace(fullMatch, () => cached.value);
|
|
21215
21358
|
twin = twin.replace(fullMatch, () => cached.secret && cached.value ? "***" : cached.value);
|
|
@@ -21225,8 +21368,12 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21225
21368
|
let isSecret = isKnownSecret;
|
|
21226
21369
|
let cacheable = true;
|
|
21227
21370
|
let pinSecureVerdict = false;
|
|
21228
|
-
|
|
21229
|
-
|
|
21371
|
+
let resolvedVersion;
|
|
21372
|
+
if (service === "secretsmanager") {
|
|
21373
|
+
const versionOut = {};
|
|
21374
|
+
resolved = await this.resolveSecretsManagerReference(inner, context, nameLogText, versionOut);
|
|
21375
|
+
resolvedVersion = versionOut.version;
|
|
21376
|
+
} else if (service === "ssm") {
|
|
21230
21377
|
const decrypt = context?.skipDynamicReferences !== true;
|
|
21231
21378
|
const param = await this.resolveSSMReference(parts, decrypt, "ssm", context, nameLogText);
|
|
21232
21379
|
const proofBag = context?.recordedSecretValues;
|
|
@@ -21249,11 +21396,13 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21249
21396
|
}
|
|
21250
21397
|
}
|
|
21251
21398
|
resolved = param.value;
|
|
21399
|
+
resolvedVersion = param.version;
|
|
21252
21400
|
} else if (service === "ssm-secure") {
|
|
21253
21401
|
const param = await this.resolveSSMReference(parts, true, "ssm-secure", context, nameLogText);
|
|
21254
21402
|
if (!param.secure) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Refusing to resolve ${this.displayMasked(tokenLogText, context)}: the parameter is a ${param.type} parameter, and the ssm-secure spelling is defined for SecureString parameters only. Reference it as {{resolve:ssm:...}} if it is public configuration.`));
|
|
21255
21403
|
isSecret = true;
|
|
21256
21404
|
resolved = param.value;
|
|
21405
|
+
resolvedVersion = param.version;
|
|
21257
21406
|
} else {
|
|
21258
21407
|
if (!persistedText && this.tokenAssembledFromSecret(fullMatch, tokenLogText, context)) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Refusing to resolve ${this.displayMasked(tokenLogText, context)}: its service is not one cdkd resolves (secretsmanager, ssm, ssm-secure), and the reference was assembled from a secret value, so leaving it as written would send that value to AWS and record it in state in the clear.`));
|
|
21259
21408
|
this.logger.warn(this.displayMasked(`Unsupported dynamic reference service: ${this.displayMasked(nameLogText(String(service)), context)}`, context));
|
|
@@ -21264,7 +21413,8 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21264
21413
|
if (pinSecureVerdict) this.pinSecretVerdict(fullMatch, true, verdictScope);
|
|
21265
21414
|
if (cacheable) this.cachedDynamicReferences.set(dynamicReferenceCacheKey, {
|
|
21266
21415
|
value: resolved,
|
|
21267
|
-
secret: isSecret
|
|
21416
|
+
secret: isSecret,
|
|
21417
|
+
...resolvedVersion !== void 0 && { version: resolvedVersion }
|
|
21268
21418
|
});
|
|
21269
21419
|
if (isSecret && resolved) {
|
|
21270
21420
|
const recorded = context?.recordedSecretValues;
|
|
@@ -21272,6 +21422,7 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21272
21422
|
recorded.set(resolved, fullMatch);
|
|
21273
21423
|
recordResolvedPair(recorded, fullMatch, resolved);
|
|
21274
21424
|
}
|
|
21425
|
+
recordProvenanceOfResolution(this, context, fullMatch, resolvedVersion);
|
|
21275
21426
|
if (service === "secretsmanager" || service === "ssm-secure") this.pinSecretVerdict(fullMatch, true, verdictScope);
|
|
21276
21427
|
}
|
|
21277
21428
|
result = result.replace(fullMatch, () => resolved);
|
|
@@ -21308,7 +21459,7 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21308
21459
|
|
|
21309
21460
|
//#endregion
|
|
21310
21461
|
//#region src/deployment/intrinsic-resolver/dynamic-ref-lookups.ts
|
|
21311
|
-
async function resolveSecretsManagerReference(inner, context, nameLogText) {
|
|
21462
|
+
async function resolveSecretsManagerReference(inner, context, nameLogText, versionOut) {
|
|
21312
21463
|
const afterService = inner.substring(15);
|
|
21313
21464
|
let secretId;
|
|
21314
21465
|
let jsonKey = "";
|
|
@@ -21346,11 +21497,13 @@ async function resolveSecretsManagerReference(inner, context, nameLogText) {
|
|
|
21346
21497
|
...versionStage && versionStage !== "" && { VersionStage: versionStage },
|
|
21347
21498
|
...versionId && versionId !== "" && { VersionId: versionId }
|
|
21348
21499
|
});
|
|
21349
|
-
const
|
|
21500
|
+
const response = await this.sendWithThrottleRetry(() => client.send(command), `secretsmanager:${loggedSecretId}`, this.namedRequestMasks([
|
|
21350
21501
|
[secretId, loggedSecretId],
|
|
21351
21502
|
[versionStage, this.displayMasked(nameLogText(versionStage), context)],
|
|
21352
21503
|
[versionId, this.displayMasked(nameLogText(versionId), context)]
|
|
21353
|
-
], context))
|
|
21504
|
+
], context));
|
|
21505
|
+
const secretString = response.SecretString;
|
|
21506
|
+
if (versionOut !== void 0 && typeof response.VersionId === "string") versionOut.version = response.VersionId;
|
|
21354
21507
|
if (!secretString) throw markNonRetryable(/* @__PURE__ */ new Error(`Dynamic reference: secret ${quotedRender(loggedSecretId, "'")} does not contain a SecretString value`));
|
|
21355
21508
|
if (jsonKey) try {
|
|
21356
21509
|
const parsed = JSON.parse(secretString);
|
|
@@ -21395,10 +21548,12 @@ async function resolveSSMReference(parts, decrypt, service, context, nameLogText
|
|
|
21395
21548
|
const reported = paramType === void 0 ? "(absent)" : quotedRender(this.displayMasked(String(paramType), context), "'");
|
|
21396
21549
|
this.logger.warn(`SSM parameter ${quotedRender(loggedParameterName, "'")} reported an unrecognized Type ${reported} — treating its value as a secret, so cdkd will persist the {{resolve:${service}:...}} expression rather than the resolved value. Declare the parameter as String / StringList if it is public config.`);
|
|
21397
21550
|
}
|
|
21551
|
+
const paramVersion = response.Parameter?.Version;
|
|
21398
21552
|
return {
|
|
21399
21553
|
value: paramValue,
|
|
21400
21554
|
secure,
|
|
21401
|
-
type: paramType
|
|
21555
|
+
type: paramType,
|
|
21556
|
+
...typeof paramVersion === "number" && Number.isSafeInteger(paramVersion) && { version: String(paramVersion) }
|
|
21402
21557
|
};
|
|
21403
21558
|
}
|
|
21404
21559
|
|
|
@@ -22397,7 +22552,10 @@ function recordInheritedParameterSecrets(parameterName, value, context) {
|
|
|
22397
22552
|
if (inherited && recorded) recordInheritedNoEchoListElements(this, inherited, recorded, value, context);
|
|
22398
22553
|
if (!inherited || inherited.size === 0 || !recorded) return;
|
|
22399
22554
|
for (const [plaintext, expression] of inheritedSecretsCarriedBy(value, inherited)) {
|
|
22400
|
-
|
|
22555
|
+
const carried = carriedExpressionFor(inherited, parameterName, value, plaintext, expression);
|
|
22556
|
+
recorded.set(plaintext, carried);
|
|
22557
|
+
const parentEntry = context.inheritedReferenceProvenance?.get(carried);
|
|
22558
|
+
if (parentEntry !== void 0) recordReferenceProvenanceEntry(recorded, carried, parentEntry, "read");
|
|
22401
22559
|
recordInheritedParameterRead(recorded, inherited, parameterName);
|
|
22402
22560
|
carryFreshNoEchoMark(inherited, recorded, plaintext);
|
|
22403
22561
|
}
|
|
@@ -24270,8 +24428,8 @@ function compare(desired, previous, mask) {
|
|
|
24270
24428
|
if (!Array.isArray(desired) || desired.length !== previous.length) return "differs";
|
|
24271
24429
|
return combine(previous.map((item, i) => compare(desired[i], item, mask)));
|
|
24272
24430
|
}
|
|
24273
|
-
if (isPlainObject$
|
|
24274
|
-
if (!isPlainObject$
|
|
24431
|
+
if (isPlainObject$2(previous)) {
|
|
24432
|
+
if (!isPlainObject$2(desired)) return "differs";
|
|
24275
24433
|
if (!Object.keys(desired).every((k) => Object.prototype.hasOwnProperty.call(previous, k))) return "differs";
|
|
24276
24434
|
return combine(Object.keys(previous).map((k) => compare(desired[k], previous[k], mask)));
|
|
24277
24435
|
}
|
|
@@ -24297,7 +24455,7 @@ function resolvesReference(desired, previous, mask) {
|
|
|
24297
24455
|
const pattern = literals.map(escapeRegExp$1).join("[\\s\\S]*");
|
|
24298
24456
|
return new RegExp(`^${pattern}$`).test(desired);
|
|
24299
24457
|
}
|
|
24300
|
-
function isPlainObject$
|
|
24458
|
+
function isPlainObject$2(value) {
|
|
24301
24459
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
24302
24460
|
}
|
|
24303
24461
|
function escapeRegExp$1(text) {
|
|
@@ -25088,7 +25246,7 @@ var CloudControlProvider = class {
|
|
|
25088
25246
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
25089
25247
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
25090
25248
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
25091
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
25249
|
+
const { ASGProvider } = await import("./asg-provider-CGN1a3d3.js");
|
|
25092
25250
|
const delegateRegion = ambientRegion();
|
|
25093
25251
|
let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
|
|
25094
25252
|
if (asgProvider === void 0) {
|
|
@@ -25194,7 +25352,7 @@ var CloudControlProvider = class {
|
|
|
25194
25352
|
const family = SDK_DELETE_FAMILIES.get(resourceType);
|
|
25195
25353
|
const cached = this.sdkDeleteDelegates.get(family);
|
|
25196
25354
|
if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
|
|
25197
|
-
const provider = family === "rds" ? new (await (import("./rds-provider-
|
|
25355
|
+
const provider = family === "rds" ? new (await (import("./rds-provider-BO3U39K0.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-CR19ID_J.js"))).NeptuneProvider({ region: ccRegion });
|
|
25198
25356
|
this.sdkDeleteDelegates.set(family, {
|
|
25199
25357
|
region: ccRegion,
|
|
25200
25358
|
provider
|
|
@@ -30001,6 +30159,325 @@ async function reserveStackCreateToken(options) {
|
|
|
30001
30159
|
};
|
|
30002
30160
|
}
|
|
30003
30161
|
|
|
30162
|
+
//#endregion
|
|
30163
|
+
//#region src/deployment/deploy-value-equality.ts
|
|
30164
|
+
function isReplacementCeiling(pc) {
|
|
30165
|
+
return pc.requiresReplacement && (pc.inPlacePropagated === true || pc.replacementPropagated === true);
|
|
30166
|
+
}
|
|
30167
|
+
function keyOrderFreeJson(value) {
|
|
30168
|
+
return JSON.stringify(value, (_key, node) => {
|
|
30169
|
+
if (node === null || typeof node !== "object" || Array.isArray(node)) return node;
|
|
30170
|
+
const sorted = Object.create(null);
|
|
30171
|
+
for (const key of Object.keys(node).sort()) sorted[key] = node[key];
|
|
30172
|
+
return sorted;
|
|
30173
|
+
});
|
|
30174
|
+
}
|
|
30175
|
+
function liveHoldsFreshLeaves(live, leaves) {
|
|
30176
|
+
for (const leaf of leaves) {
|
|
30177
|
+
let node = live;
|
|
30178
|
+
for (const segment of leaf.path) {
|
|
30179
|
+
if (typeof segment === "number") {
|
|
30180
|
+
if (!Array.isArray(node) || segment >= node.length) return false;
|
|
30181
|
+
node = node[segment];
|
|
30182
|
+
continue;
|
|
30183
|
+
}
|
|
30184
|
+
if (node === null || typeof node !== "object" || Array.isArray(node)) return false;
|
|
30185
|
+
if (!Object.prototype.hasOwnProperty.call(node, segment)) return false;
|
|
30186
|
+
node = node[segment];
|
|
30187
|
+
}
|
|
30188
|
+
if (typeof leaf.plaintext === "string") {
|
|
30189
|
+
if (typeof node !== "string" || node !== leaf.plaintext) return false;
|
|
30190
|
+
} else if (node === void 0 || keyOrderFreeJson(node) !== keyOrderFreeJson(leaf.plaintext)) return false;
|
|
30191
|
+
}
|
|
30192
|
+
return true;
|
|
30193
|
+
}
|
|
30194
|
+
function outputMapsEqual(a, b) {
|
|
30195
|
+
return deepEqualValue(a, b);
|
|
30196
|
+
}
|
|
30197
|
+
function deepEqualValue(a, b) {
|
|
30198
|
+
if (a === b) return true;
|
|
30199
|
+
if (a == null || b == null) return a === b;
|
|
30200
|
+
if (typeof a !== typeof b) return false;
|
|
30201
|
+
if (typeof a !== "object") return false;
|
|
30202
|
+
if (Array.isArray(a) || Array.isArray(b)) {
|
|
30203
|
+
if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
|
|
30204
|
+
return a.every((v, i) => deepEqualValue(v, b[i]));
|
|
30205
|
+
}
|
|
30206
|
+
const ao = a;
|
|
30207
|
+
const bo = b;
|
|
30208
|
+
const ak = Object.keys(ao);
|
|
30209
|
+
if (ak.length !== Object.keys(bo).length) return false;
|
|
30210
|
+
for (const k of ak) {
|
|
30211
|
+
if (!Object.prototype.hasOwnProperty.call(bo, k)) return false;
|
|
30212
|
+
if (!deepEqualValue(ao[k], bo[k])) return false;
|
|
30213
|
+
}
|
|
30214
|
+
return true;
|
|
30215
|
+
}
|
|
30216
|
+
|
|
30217
|
+
//#endregion
|
|
30218
|
+
//#region src/deployment/reference-provenance-record.ts
|
|
30219
|
+
const SSM_VERSION = /^[0-9]{1,10}$/;
|
|
30220
|
+
const SECRETS_MANAGER_VERSION = /^[A-Za-z0-9_+=.@/-]{32,64}$/;
|
|
30221
|
+
function referenceTokensIn(value, into = /* @__PURE__ */ new Set()) {
|
|
30222
|
+
const walk = (v) => {
|
|
30223
|
+
if (typeof v === "string") {
|
|
30224
|
+
if (!v.includes("{{resolve:")) return;
|
|
30225
|
+
for (const token of dynamicReferenceTokens(v)) into.add(token);
|
|
30226
|
+
return;
|
|
30227
|
+
}
|
|
30228
|
+
if (Array.isArray(v)) {
|
|
30229
|
+
for (const item of v) walk(item);
|
|
30230
|
+
return;
|
|
30231
|
+
}
|
|
30232
|
+
if (v !== null && typeof v === "object") for (const item of Object.values(v)) walk(item);
|
|
30233
|
+
};
|
|
30234
|
+
walk(value);
|
|
30235
|
+
return into;
|
|
30236
|
+
}
|
|
30237
|
+
function recordReferenceTokens(record) {
|
|
30238
|
+
const tokens = referenceTokensIn(record.properties);
|
|
30239
|
+
referenceTokensIn(record.attributes, tokens);
|
|
30240
|
+
referenceTokensIn(record.observedProperties, tokens);
|
|
30241
|
+
return tokens;
|
|
30242
|
+
}
|
|
30243
|
+
function versionShapeOf(token) {
|
|
30244
|
+
if (token.startsWith("{{resolve:secretsmanager:")) return SECRETS_MANAGER_VERSION;
|
|
30245
|
+
if (token.startsWith("{{resolve:ssm:") || token.startsWith("{{resolve:ssm-secure:")) return SSM_VERSION;
|
|
30246
|
+
}
|
|
30247
|
+
function isValidReferenceVersion(token, version) {
|
|
30248
|
+
const shape = versionShapeOf(token);
|
|
30249
|
+
return shape !== void 0 && typeof version === "string" && shape.test(version);
|
|
30250
|
+
}
|
|
30251
|
+
function validReferenceRegion(region) {
|
|
30252
|
+
if (typeof region !== "string") return void 0;
|
|
30253
|
+
return canonicalizeRegion(region) === region && isClientSafeRegion(region) ? region : void 0;
|
|
30254
|
+
}
|
|
30255
|
+
function isPlainObject$1(value) {
|
|
30256
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
30257
|
+
}
|
|
30258
|
+
function validateReferenceProvenance(token, raw) {
|
|
30259
|
+
if (!isSingleDynamicReferenceToken(token) || !isPlainObject$1(raw)) return void 0;
|
|
30260
|
+
const versionsRaw = Object.hasOwn(raw, "versions") ? raw["versions"] : void 0;
|
|
30261
|
+
const readRaw = Object.hasOwn(raw, "readVersions") ? raw["readVersions"] : void 0;
|
|
30262
|
+
if (readRaw !== void 0) {
|
|
30263
|
+
if (!Array.isArray(readRaw)) return void 0;
|
|
30264
|
+
const all = Array.isArray(versionsRaw) ? versionsRaw : [];
|
|
30265
|
+
if (!readRaw.every((v) => all.includes(v))) return void 0;
|
|
30266
|
+
}
|
|
30267
|
+
const out = {};
|
|
30268
|
+
const region = validReferenceRegion(Object.hasOwn(raw, "region") ? raw["region"] : void 0);
|
|
30269
|
+
if (region !== void 0) out.region = region;
|
|
30270
|
+
if (Array.isArray(versionsRaw) && versionsRaw.length > 0 && versionsRaw.length <= 8 && versionsRaw.every((v) => isValidReferenceVersion(token, v)) && (readRaw === void 0 || readRaw.every((v) => typeof v === "string"))) {
|
|
30271
|
+
out.versions = [...new Set(versionsRaw)].sort();
|
|
30272
|
+
if (readRaw !== void 0 && readRaw.length > 0) out.readVersions = [...new Set(readRaw)].sort();
|
|
30273
|
+
}
|
|
30274
|
+
return out;
|
|
30275
|
+
}
|
|
30276
|
+
function referenceProvenanceOf(record) {
|
|
30277
|
+
if (!isPlainObject$1(record) || !Object.hasOwn(record, "referenceProvenance")) return void 0;
|
|
30278
|
+
return validatedBag(record["referenceProvenance"]);
|
|
30279
|
+
}
|
|
30280
|
+
function validatedBag(field) {
|
|
30281
|
+
if (!isPlainObject$1(field)) return void 0;
|
|
30282
|
+
const out = Object.create(null);
|
|
30283
|
+
for (const [token, raw] of Object.entries(field)) {
|
|
30284
|
+
const entry = validateReferenceProvenance(token, raw);
|
|
30285
|
+
if (entry !== void 0) out[token] = entry;
|
|
30286
|
+
}
|
|
30287
|
+
return { ...out };
|
|
30288
|
+
}
|
|
30289
|
+
function hasReferenceProvenanceField(record) {
|
|
30290
|
+
return isPlainObject$1(record) && Object.hasOwn(record, "referenceProvenance") && record["referenceProvenance"] !== void 0;
|
|
30291
|
+
}
|
|
30292
|
+
function outputReferenceProvenanceOf(state, outputKey) {
|
|
30293
|
+
if (!isPlainObject$1(state) || !Object.hasOwn(state, "outputReferenceProvenance")) return;
|
|
30294
|
+
const field = state["outputReferenceProvenance"];
|
|
30295
|
+
if (!isPlainObject$1(field) || !Object.hasOwn(field, outputKey)) return void 0;
|
|
30296
|
+
return validatedBag(field[outputKey]);
|
|
30297
|
+
}
|
|
30298
|
+
function persistable(token, entry) {
|
|
30299
|
+
return (entry === void 0 ? void 0 : validateReferenceProvenance(token, entry)) ?? {};
|
|
30300
|
+
}
|
|
30301
|
+
function tokensUnderPaths(properties, paths) {
|
|
30302
|
+
const out = /* @__PURE__ */ new Set();
|
|
30303
|
+
const descend = (value, path, at) => {
|
|
30304
|
+
if (at === path.length) {
|
|
30305
|
+
referenceTokensIn(value, out);
|
|
30306
|
+
return;
|
|
30307
|
+
}
|
|
30308
|
+
if (Array.isArray(value)) {
|
|
30309
|
+
const next = path[at] === "*" ? at + 1 : at;
|
|
30310
|
+
for (const item of value) descend(item, path, next);
|
|
30311
|
+
return;
|
|
30312
|
+
}
|
|
30313
|
+
if (isPlainObject$1(value) && Object.hasOwn(value, path[at])) descend(value[path[at]], path, at + 1);
|
|
30314
|
+
};
|
|
30315
|
+
for (const path of paths) descend(properties, path, 0);
|
|
30316
|
+
return out;
|
|
30317
|
+
}
|
|
30318
|
+
function provenanceForWrittenRecord(args) {
|
|
30319
|
+
const { record, secrets, previous, inPlace } = args;
|
|
30320
|
+
const previousField = inPlace === void 0 ? void 0 : referenceProvenanceOf(previous);
|
|
30321
|
+
if (!hasPassProvenance(secrets) && previousField === void 0 && args.walkWithoutPassProvenance !== true) return;
|
|
30322
|
+
const tokens = recordReferenceTokens(record);
|
|
30323
|
+
if (tokens.size === 0) return void 0;
|
|
30324
|
+
let kept;
|
|
30325
|
+
if (inPlace !== void 0) {
|
|
30326
|
+
kept = inPlace.createOnly === "all" ? tokens : tokensUnderPaths(record.properties, inPlace.createOnly);
|
|
30327
|
+
if (inPlace.attributesCarried) referenceTokensIn(record.attributes, kept);
|
|
30328
|
+
}
|
|
30329
|
+
const out = {};
|
|
30330
|
+
for (const token of [...tokens].sort()) {
|
|
30331
|
+
const pass = passProvenanceFor(secrets, token);
|
|
30332
|
+
if (kept === void 0 || !kept.has(token)) {
|
|
30333
|
+
out[token] = persistable(token, pass);
|
|
30334
|
+
continue;
|
|
30335
|
+
}
|
|
30336
|
+
const before = previousField !== void 0 && Object.hasOwn(previousField, token) ? previousField[token] : void 0;
|
|
30337
|
+
if (pass === void 0) {
|
|
30338
|
+
out[token] = before === void 0 ? {} : { ...before };
|
|
30339
|
+
continue;
|
|
30340
|
+
}
|
|
30341
|
+
out[token] = persistable(token, unionWithPrevious(pass, before));
|
|
30342
|
+
}
|
|
30343
|
+
return out;
|
|
30344
|
+
}
|
|
30345
|
+
function unionWithPrevious(pass, before) {
|
|
30346
|
+
const out = {};
|
|
30347
|
+
if (pass.region !== void 0 && (before?.region === void 0 || before.region === pass.region)) out.region = pass.region;
|
|
30348
|
+
if (pass.versions !== void 0 && before?.versions !== void 0) {
|
|
30349
|
+
out.versions = [.../* @__PURE__ */ new Set([...before.versions, ...pass.versions])].sort();
|
|
30350
|
+
if (pass.readVersions !== void 0) out.readVersions = [...pass.readVersions];
|
|
30351
|
+
}
|
|
30352
|
+
return out;
|
|
30353
|
+
}
|
|
30354
|
+
function outputProvenanceForPersist(args) {
|
|
30355
|
+
const { outputs, resolvedThisRun, carriedFrom, sinkOf } = args;
|
|
30356
|
+
if (!resolvedThisRun) return carriedFrom !== void 0 && isPlainObject$1(carriedFrom.outputReferenceProvenance) ? carriedFrom.outputReferenceProvenance : void 0;
|
|
30357
|
+
let out;
|
|
30358
|
+
for (const [outputKey, value] of Object.entries(outputs)) {
|
|
30359
|
+
const sink = sinkOf(outputKey);
|
|
30360
|
+
if (!hasPassProvenance(sink)) continue;
|
|
30361
|
+
const tokens = referenceTokensIn(value);
|
|
30362
|
+
if (tokens.size === 0) continue;
|
|
30363
|
+
const entries = {};
|
|
30364
|
+
for (const token of [...tokens].sort()) entries[token] = persistable(token, passProvenanceFor(sink, token));
|
|
30365
|
+
out ??= Object.create(null);
|
|
30366
|
+
out[outputKey] = entries;
|
|
30367
|
+
}
|
|
30368
|
+
return out === void 0 ? void 0 : { ...out };
|
|
30369
|
+
}
|
|
30370
|
+
const KEEP_REFERENCE_PROVENANCE = Symbol("keep reference provenance");
|
|
30371
|
+
function withReferenceProvenance(record, field) {
|
|
30372
|
+
if (field === KEEP_REFERENCE_PROVENANCE) return record;
|
|
30373
|
+
if (field === void 0 && !Object.hasOwn(record, "referenceProvenance")) return record;
|
|
30374
|
+
const { referenceProvenance: _previous, ...rest } = record;
|
|
30375
|
+
return field === void 0 ? rest : {
|
|
30376
|
+
...rest,
|
|
30377
|
+
referenceProvenance: field
|
|
30378
|
+
};
|
|
30379
|
+
}
|
|
30380
|
+
|
|
30381
|
+
//#endregion
|
|
30382
|
+
//#region src/deployment/deploy-engine/provenance-capture.ts
|
|
30383
|
+
function kickOffProvenanceCapture(args) {
|
|
30384
|
+
const { noChange, resources, template } = args;
|
|
30385
|
+
let chain = Promise.resolve();
|
|
30386
|
+
for (const logicalId of noChange) {
|
|
30387
|
+
const record = Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0;
|
|
30388
|
+
if (record === void 0 || hasReferenceProvenanceField(record)) continue;
|
|
30389
|
+
const tokens = recordReferenceTokens(record);
|
|
30390
|
+
if (tokens.size === 0) continue;
|
|
30391
|
+
const properties = (Object.hasOwn(template.Resources, logicalId) ? template.Resources[logicalId] : void 0)?.Properties ?? {};
|
|
30392
|
+
const task = chain.then(() => captureOne(this, logicalId, record, tokens, properties, args)).catch(() => ({
|
|
30393
|
+
record,
|
|
30394
|
+
field: void 0
|
|
30395
|
+
}));
|
|
30396
|
+
chain = task;
|
|
30397
|
+
this.provenanceCaptureTasks.set(logicalId, task);
|
|
30398
|
+
}
|
|
30399
|
+
}
|
|
30400
|
+
function warnUnattributed(engine, logicalId) {
|
|
30401
|
+
engine.logger.warn(safeMsg`Could not record where the secret reference(s) in ${logicalId} were resolved (state schema v12 migration). cdkd keeps its previous handling of them; update ${logicalId} to record it.`);
|
|
30402
|
+
}
|
|
30403
|
+
async function captureOne(engine, logicalId, record, tokens, properties, args) {
|
|
30404
|
+
const bag = /* @__PURE__ */ new Map();
|
|
30405
|
+
const { attributeHealer: _healer, ...base } = engine.buildResolverContext({
|
|
30406
|
+
template: args.template,
|
|
30407
|
+
resources: { ...args.resources },
|
|
30408
|
+
...args.parameters && { parameters: args.parameters },
|
|
30409
|
+
...args.conditions && { conditions: args.conditions }
|
|
30410
|
+
}, args.stackName);
|
|
30411
|
+
const { producerSecrets: _producer, ...withoutRecorders } = base;
|
|
30412
|
+
const context = {
|
|
30413
|
+
...withoutRecorders,
|
|
30414
|
+
recordedSecretValues: bag,
|
|
30415
|
+
recordedImports: [],
|
|
30416
|
+
recordedOutputReads: [],
|
|
30417
|
+
staleAttributeHeal: { phase: "probe" },
|
|
30418
|
+
printingSecrets: /* @__PURE__ */ new Map(),
|
|
30419
|
+
provenanceCapture: true
|
|
30420
|
+
};
|
|
30421
|
+
const stored = record.properties ?? {};
|
|
30422
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
30423
|
+
if (!Object.hasOwn(stored, key) || recordReferenceTokens({ properties: stored[key] }).size === 0) continue;
|
|
30424
|
+
try {
|
|
30425
|
+
await engine.resolver.resolve(structuredClone(value), context);
|
|
30426
|
+
} catch (error) {
|
|
30427
|
+
if (isThrottlingError(error)) return {
|
|
30428
|
+
record,
|
|
30429
|
+
field: void 0
|
|
30430
|
+
};
|
|
30431
|
+
}
|
|
30432
|
+
}
|
|
30433
|
+
const physicalId = typeof record.physicalId === "string" ? record.physicalId.toLowerCase() : "";
|
|
30434
|
+
const field = {};
|
|
30435
|
+
let unattributed = false;
|
|
30436
|
+
for (const token of [...tokens].sort()) {
|
|
30437
|
+
const pass = passProvenanceFor(bag, token);
|
|
30438
|
+
const plaintext = resolvedPlaintextOf(bag, token);
|
|
30439
|
+
const named = plaintext !== void 0 && plaintext.length >= 4 && physicalId.includes(plaintext.toLowerCase());
|
|
30440
|
+
const entry = validateReferenceProvenance(token, {
|
|
30441
|
+
...pass?.region !== void 0 && { region: pass.region },
|
|
30442
|
+
...named && pass?.versions !== void 0 && { versions: pass.versions }
|
|
30443
|
+
}) ?? {};
|
|
30444
|
+
if (entry.region === void 0 && entry.versions === void 0) unattributed = true;
|
|
30445
|
+
field[token] = entry;
|
|
30446
|
+
}
|
|
30447
|
+
if (unattributed) warnUnattributed(engine, logicalId);
|
|
30448
|
+
return {
|
|
30449
|
+
record,
|
|
30450
|
+
field
|
|
30451
|
+
};
|
|
30452
|
+
}
|
|
30453
|
+
async function drainProvenanceCaptures(stateResources) {
|
|
30454
|
+
if (this.provenanceCaptureTasks.size === 0) return 0;
|
|
30455
|
+
const entries = [...this.provenanceCaptureTasks.entries()];
|
|
30456
|
+
this.provenanceCaptureTasks.clear();
|
|
30457
|
+
const outcomes = await Promise.all(entries.map(([, task]) => task));
|
|
30458
|
+
let installed = 0;
|
|
30459
|
+
for (let i = 0; i < entries.length; i++) {
|
|
30460
|
+
const logicalId = entries[i][0];
|
|
30461
|
+
const { record, field } = outcomes[i];
|
|
30462
|
+
if (field === void 0) continue;
|
|
30463
|
+
const target = Object.hasOwn(stateResources, logicalId) ? stateResources[logicalId] : void 0;
|
|
30464
|
+
if (target === void 0 || target.physicalId !== record.physicalId || target.resourceType !== record.resourceType) continue;
|
|
30465
|
+
stateResources[logicalId] = {
|
|
30466
|
+
...target,
|
|
30467
|
+
referenceProvenance: field
|
|
30468
|
+
};
|
|
30469
|
+
installed++;
|
|
30470
|
+
}
|
|
30471
|
+
return installed;
|
|
30472
|
+
}
|
|
30473
|
+
function provenanceBaselineOf(state, tokenFree) {
|
|
30474
|
+
return {
|
|
30475
|
+
outputs: state.outputs,
|
|
30476
|
+
...state.outputReferenceProvenance !== void 0 && { outputReferenceProvenance: state.outputReferenceProvenance },
|
|
30477
|
+
tokenFree
|
|
30478
|
+
};
|
|
30479
|
+
}
|
|
30480
|
+
|
|
30004
30481
|
//#endregion
|
|
30005
30482
|
//#region src/analyzer/destructive-changes.ts
|
|
30006
30483
|
const IGNORED_RESOURCE_TYPES = /* @__PURE__ */ new Set(["AWS::CDK::Metadata"]);
|
|
@@ -31478,10 +31955,13 @@ async function resolveOutputs(template, resources, stackName, digestSource, para
|
|
|
31478
31955
|
continue;
|
|
31479
31956
|
}
|
|
31480
31957
|
const ownReads = [];
|
|
31958
|
+
const provenanceSink = /* @__PURE__ */ new Map();
|
|
31959
|
+
this.outputProvenanceSinks.set(outputKey, provenanceSink);
|
|
31481
31960
|
try {
|
|
31482
31961
|
const resolved = await this.resolver.resolve(output.Value, {
|
|
31483
31962
|
...context,
|
|
31484
|
-
redactedAttributeReads: ownReads
|
|
31963
|
+
redactedAttributeReads: ownReads,
|
|
31964
|
+
provenanceSink
|
|
31485
31965
|
});
|
|
31486
31966
|
refuseMaskedOutputReads(outputKey, ownReads);
|
|
31487
31967
|
if (resolved === void 0 && this.options.strictGetAtt) throw markNonRetryable(/* @__PURE__ */ new Error("the value resolved to nothing"));
|
|
@@ -31536,6 +32016,8 @@ async function resolveOutputs(template, resources, stackName, digestSource, para
|
|
|
31536
32016
|
else if (isExportAliasCollision(exportName, outputKey, publishedOutputNames)) this.logger.warn(exportAliasCollisionWarning(outputKey, exportName, outputsPassSecrets));
|
|
31537
32017
|
else {
|
|
31538
32018
|
outputs[exportName] = value;
|
|
32019
|
+
const aliasedSink = this.outputProvenanceSinks.get(outputKey);
|
|
32020
|
+
if (aliasedSink !== void 0) this.outputProvenanceSinks.set(exportName, aliasedSink);
|
|
31539
32021
|
if (!this.resolvedExportNames.includes(exportName)) this.resolvedExportNames.push(exportName);
|
|
31540
32022
|
this.outputsTemplateSource[exportName] = outputValue;
|
|
31541
32023
|
}
|
|
@@ -31549,6 +32031,8 @@ async function resolveOutputs(template, resources, stackName, digestSource, para
|
|
|
31549
32031
|
this.outputsTemplateSource[outputKey] = output.Value;
|
|
31550
32032
|
}
|
|
31551
32033
|
this.skippedOutputs = collectSkippedOutputs(digestSource, outputs);
|
|
32034
|
+
this.outputsResolvedThisRun.add(outputs);
|
|
32035
|
+
this.resolvedOutputsBag = outputs;
|
|
31552
32036
|
return markSameGenerationBag(outputs);
|
|
31553
32037
|
}
|
|
31554
32038
|
function buildDisplayOutputs(template, resolvedOutputs) {
|
|
@@ -34696,7 +35180,7 @@ async function revertNestedChildFromJournal(args) {
|
|
|
34696
35180
|
const { skippedOutputs: _dropped, ...carried } = base;
|
|
34697
35181
|
const next = () => ({
|
|
34698
35182
|
...carried,
|
|
34699
|
-
version:
|
|
35183
|
+
version: 12,
|
|
34700
35184
|
region,
|
|
34701
35185
|
resources: { ...stateResources },
|
|
34702
35186
|
...orphansAfterRollback(base, mintedOrphans),
|
|
@@ -34712,6 +35196,7 @@ async function revertNestedChildFromJournal(args) {
|
|
|
34712
35196
|
const state = next();
|
|
34713
35197
|
if (!restoring) return state;
|
|
34714
35198
|
if (restoredOutputs && !restoredOutputs.exportNames) delete state.exportNames;
|
|
35199
|
+
if (restoredOutputs) delete state.outputReferenceProvenance;
|
|
34715
35200
|
if (restoredReads && !restoredReads.imports) delete state.imports;
|
|
34716
35201
|
if (restoredReads && !restoredReads.outputReads) delete state.outputReads;
|
|
34717
35202
|
return state;
|
|
@@ -35592,7 +36077,8 @@ function kickOffObservedCapture(provider, logicalId, physicalId, resourceType, r
|
|
|
35592
36077
|
this.observedCaptureTasks.set(logicalId, promise);
|
|
35593
36078
|
}
|
|
35594
36079
|
async function drainObservedCaptures(stateResources) {
|
|
35595
|
-
|
|
36080
|
+
const captured = await this.drainProvenanceCaptures(stateResources);
|
|
36081
|
+
if (this.observedCaptureTasks.size === 0) return captured;
|
|
35596
36082
|
const entries = Array.from(this.observedCaptureTasks.entries());
|
|
35597
36083
|
this.observedCaptureTasks.clear();
|
|
35598
36084
|
const resolved = await Promise.all(entries.map(([, p]) => p));
|
|
@@ -35608,7 +36094,7 @@ async function drainObservedCaptures(stateResources) {
|
|
|
35608
36094
|
target.observedProperties = recapturedFrom !== void 0 ? observed : markSameGenerationBag({ ...observed });
|
|
35609
36095
|
}
|
|
35610
36096
|
}
|
|
35611
|
-
return installed;
|
|
36097
|
+
return installed + captured;
|
|
35612
36098
|
}
|
|
35613
36099
|
const STANDALONE_SIBLING = {
|
|
35614
36100
|
Roles: {
|
|
@@ -35791,61 +36277,6 @@ function kickOffMaskedBaselineRecapture(provider, logicalId, resource, producerR
|
|
|
35791
36277
|
this.observedCaptureTasks.set(logicalId, task);
|
|
35792
36278
|
}
|
|
35793
36279
|
|
|
35794
|
-
//#endregion
|
|
35795
|
-
//#region src/deployment/deploy-value-equality.ts
|
|
35796
|
-
function isReplacementCeiling(pc) {
|
|
35797
|
-
return pc.requiresReplacement && (pc.inPlacePropagated === true || pc.replacementPropagated === true);
|
|
35798
|
-
}
|
|
35799
|
-
function keyOrderFreeJson(value) {
|
|
35800
|
-
return JSON.stringify(value, (_key, node) => {
|
|
35801
|
-
if (node === null || typeof node !== "object" || Array.isArray(node)) return node;
|
|
35802
|
-
const sorted = Object.create(null);
|
|
35803
|
-
for (const key of Object.keys(node).sort()) sorted[key] = node[key];
|
|
35804
|
-
return sorted;
|
|
35805
|
-
});
|
|
35806
|
-
}
|
|
35807
|
-
function liveHoldsFreshLeaves(live, leaves) {
|
|
35808
|
-
for (const leaf of leaves) {
|
|
35809
|
-
let node = live;
|
|
35810
|
-
for (const segment of leaf.path) {
|
|
35811
|
-
if (typeof segment === "number") {
|
|
35812
|
-
if (!Array.isArray(node) || segment >= node.length) return false;
|
|
35813
|
-
node = node[segment];
|
|
35814
|
-
continue;
|
|
35815
|
-
}
|
|
35816
|
-
if (node === null || typeof node !== "object" || Array.isArray(node)) return false;
|
|
35817
|
-
if (!Object.prototype.hasOwnProperty.call(node, segment)) return false;
|
|
35818
|
-
node = node[segment];
|
|
35819
|
-
}
|
|
35820
|
-
if (typeof leaf.plaintext === "string") {
|
|
35821
|
-
if (typeof node !== "string" || node !== leaf.plaintext) return false;
|
|
35822
|
-
} else if (node === void 0 || keyOrderFreeJson(node) !== keyOrderFreeJson(leaf.plaintext)) return false;
|
|
35823
|
-
}
|
|
35824
|
-
return true;
|
|
35825
|
-
}
|
|
35826
|
-
function outputMapsEqual(a, b) {
|
|
35827
|
-
return deepEqualValue(a, b);
|
|
35828
|
-
}
|
|
35829
|
-
function deepEqualValue(a, b) {
|
|
35830
|
-
if (a === b) return true;
|
|
35831
|
-
if (a == null || b == null) return a === b;
|
|
35832
|
-
if (typeof a !== typeof b) return false;
|
|
35833
|
-
if (typeof a !== "object") return false;
|
|
35834
|
-
if (Array.isArray(a) || Array.isArray(b)) {
|
|
35835
|
-
if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
|
|
35836
|
-
return a.every((v, i) => deepEqualValue(v, b[i]));
|
|
35837
|
-
}
|
|
35838
|
-
const ao = a;
|
|
35839
|
-
const bo = b;
|
|
35840
|
-
const ak = Object.keys(ao);
|
|
35841
|
-
if (ak.length !== Object.keys(bo).length) return false;
|
|
35842
|
-
for (const k of ak) {
|
|
35843
|
-
if (!Object.prototype.hasOwnProperty.call(bo, k)) return false;
|
|
35844
|
-
if (!deepEqualValue(ao[k], bo[k])) return false;
|
|
35845
|
-
}
|
|
35846
|
-
return true;
|
|
35847
|
-
}
|
|
35848
|
-
|
|
35849
36280
|
//#endregion
|
|
35850
36281
|
//#region src/deployment/deploy-engine/masking.ts
|
|
35851
36282
|
function diffLogMasker(diffSecrets, template, parameterValues, resources) {
|
|
@@ -35902,6 +36333,11 @@ function absorbOutputsPassSecrets() {
|
|
|
35902
36333
|
}
|
|
35903
36334
|
}
|
|
35904
36335
|
function redactOutputs(outputs) {
|
|
36336
|
+
const redacted = redactOutputsBag.call(this, outputs);
|
|
36337
|
+
if (this.outputsResolvedThisRun.has(outputs)) this.outputsResolvedThisRun.add(redacted);
|
|
36338
|
+
return redacted;
|
|
36339
|
+
}
|
|
36340
|
+
function redactOutputsBag(outputs) {
|
|
35905
36341
|
this.absorbOutputsPassSecrets();
|
|
35906
36342
|
if (this.outputSecrets.size === 0) return this.maskOutputsByPosition(outputs);
|
|
35907
36343
|
return this.maskOutputsByPosition(redactSecretsForState(outputs, this.outputSecrets, this.outputsSourceUsable ? this.outputsTemplateSource : void 0, TEMPLATE_SOURCED_RULES));
|
|
@@ -36553,6 +36989,7 @@ function buildResolverContext(base, stackName) {
|
|
|
36553
36989
|
attributeHealer: (logicalId, resource) => this.healStaleAttributes(logicalId, resource, stackName),
|
|
36554
36990
|
...this.options.inheritedSecrets && hasMaskableValues(this.options.inheritedSecrets) && { inheritedSecrets: this.options.inheritedSecrets },
|
|
36555
36991
|
...this.options.inheritedPhysicalNameCopies && { inheritedPhysicalNameCopies: this.options.inheritedPhysicalNameCopies },
|
|
36992
|
+
...this.options.inheritedReferenceProvenance && { inheritedReferenceProvenance: this.options.inheritedReferenceProvenance },
|
|
36556
36993
|
recordedSecretValues,
|
|
36557
36994
|
noEchoAttributeResources: this.noEchoAttributeResources,
|
|
36558
36995
|
secretNameNeedles: (logicalId) => this.noteSecretNamedRecord(logicalId, Object.hasOwn(base.resources, logicalId) ? base.resources[logicalId] : void 0),
|
|
@@ -42365,6 +42802,10 @@ async function updateInPlace({ conditions, counts, currentProps, currentPropsAsW
|
|
|
42365
42802
|
} else throw updateError;
|
|
42366
42803
|
}
|
|
42367
42804
|
this.updateWasReplaced.set(logicalId, result.wasReplaced === true);
|
|
42805
|
+
if (result.wasReplaced !== true && (hasPassProvenance(updateSecrets) || referenceProvenanceOf(currentResource) !== void 0)) {
|
|
42806
|
+
const cached = cachedCreateOnlyPropertyPaths(resourceType);
|
|
42807
|
+
this.inPlaceCreateOnlyPaths.set(logicalId, cached === void 0 ? "all" : await cached.catch(() => "all"));
|
|
42808
|
+
}
|
|
42368
42809
|
if (result.wasReplaced) {
|
|
42369
42810
|
this.noteSecretNamedRecord(logicalId, {
|
|
42370
42811
|
resourceType,
|
|
@@ -42968,7 +43409,7 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
42968
43409
|
saveChain = saveChain.then(async () => {
|
|
42969
43410
|
try {
|
|
42970
43411
|
const partialState = {
|
|
42971
|
-
version:
|
|
43412
|
+
version: 12,
|
|
42972
43413
|
region: this.stackRegion,
|
|
42973
43414
|
stackName: currentState.stackName,
|
|
42974
43415
|
resources: newResources,
|
|
@@ -43275,7 +43716,7 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
43275
43716
|
}
|
|
43276
43717
|
try {
|
|
43277
43718
|
const preRollbackState = {
|
|
43278
|
-
version:
|
|
43719
|
+
version: 12,
|
|
43279
43720
|
region: this.stackRegion,
|
|
43280
43721
|
stackName: currentState.stackName,
|
|
43281
43722
|
resources: newResources,
|
|
@@ -43328,7 +43769,7 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
43328
43769
|
}
|
|
43329
43770
|
try {
|
|
43330
43771
|
const postRollbackState = {
|
|
43331
|
-
version:
|
|
43772
|
+
version: 12,
|
|
43332
43773
|
region: this.stackRegion,
|
|
43333
43774
|
stackName: currentState.stackName,
|
|
43334
43775
|
resources: newResources,
|
|
@@ -43347,7 +43788,7 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
43347
43788
|
try {
|
|
43348
43789
|
const freshEtag = (await this.stateBackend.getState(stackName, this.stackRegion))?.etag;
|
|
43349
43790
|
const postRollbackState = {
|
|
43350
|
-
version:
|
|
43791
|
+
version: 12,
|
|
43351
43792
|
region: this.stackRegion,
|
|
43352
43793
|
stackName: currentState.stackName,
|
|
43353
43794
|
resources: newResources,
|
|
@@ -43380,7 +43821,7 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
43380
43821
|
}
|
|
43381
43822
|
return {
|
|
43382
43823
|
state: {
|
|
43383
|
-
version:
|
|
43824
|
+
version: 12,
|
|
43384
43825
|
region: this.stackRegion,
|
|
43385
43826
|
stackName: currentState.stackName,
|
|
43386
43827
|
resources: newResources,
|
|
@@ -43398,7 +43839,7 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
43398
43839
|
}
|
|
43399
43840
|
async function persistStateAfterOutputFailure(stackName, currentState, newResources, currentEtag, pendingMigration) {
|
|
43400
43841
|
const buildState = () => ({
|
|
43401
|
-
version:
|
|
43842
|
+
version: 12,
|
|
43402
43843
|
region: this.stackRegion,
|
|
43403
43844
|
stackName: currentState.stackName,
|
|
43404
43845
|
resources: newResources,
|
|
@@ -44703,7 +45144,7 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
|
|
|
44703
45144
|
const currentStateData = await this.stateBackend.getState(stackName, this.stackRegion);
|
|
44704
45145
|
noteDeployStateRecord(currentStateData?.state !== void 0);
|
|
44705
45146
|
const currentState = currentStateData?.state ?? {
|
|
44706
|
-
version:
|
|
45147
|
+
version: 12,
|
|
44707
45148
|
region: this.stackRegion,
|
|
44708
45149
|
stackName,
|
|
44709
45150
|
resources: {},
|
|
@@ -44720,6 +45161,7 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
|
|
|
44720
45161
|
refuseMalformedResourceProperties(currentState, stackName, this.stackRegion, this.options.refusalRecovery);
|
|
44721
45162
|
refuseMalformedOrphans(currentState, stackName, this.stackRegion, this.options.refusalRecovery);
|
|
44722
45163
|
refuseMalformedOrphanRecords(currentState, stackName, this.stackRegion, this.options.refusalRecovery);
|
|
45164
|
+
this.provenanceBaseline = provenanceBaselineOf(currentState, isKnownTokenFreeState(currentStateData?.state));
|
|
44723
45165
|
const migrationPending = currentStateData?.migrationPending ?? false;
|
|
44724
45166
|
this.logger.debug(`Loaded current state: ${Object.keys(currentState.resources).length} resources`);
|
|
44725
45167
|
if (this.options.onCurrentStateLoaded) {
|
|
@@ -44875,8 +45317,20 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
|
|
|
44875
45317
|
firstDeployStateGate = void 0;
|
|
44876
45318
|
await gate;
|
|
44877
45319
|
}
|
|
45320
|
+
const startProvenanceCapture = () => {
|
|
45321
|
+
if (this.options.dryRun || isKnownTokenFreeState(currentStateData?.state)) return;
|
|
45322
|
+
this.kickOffProvenanceCapture({
|
|
45323
|
+
noChange: this.diffCalculator.filterByType(changes, "NO_CHANGE").map((change) => change.logicalId),
|
|
45324
|
+
resources: currentState.resources,
|
|
45325
|
+
template: effectiveTemplate,
|
|
45326
|
+
parameters: parameterValues,
|
|
45327
|
+
conditions,
|
|
45328
|
+
stackName
|
|
45329
|
+
});
|
|
45330
|
+
};
|
|
44878
45331
|
if (!this.diffCalculator.hasChanges(changes)) {
|
|
44879
45332
|
this.logger.info("No changes detected. Stack is up to date.");
|
|
45333
|
+
startProvenanceCapture();
|
|
44880
45334
|
let persistedOutputs = currentState.outputs ?? {};
|
|
44881
45335
|
if (!this.options.dryRun) {
|
|
44882
45336
|
const resolvedOutputs = this.redactOutputs(await withSharedDrainBudget(() => this.resolveOutputs(effectiveTemplate, currentState.resources, stackName, outputsDigestSource, parameterValues, conditions)));
|
|
@@ -44914,9 +45368,10 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
|
|
|
44914
45368
|
options: this.options,
|
|
44915
45369
|
stackName
|
|
44916
45370
|
});
|
|
44917
|
-
|
|
45371
|
+
const outputProvenanceBackfill = !outputsChanged && currentState.outputReferenceProvenance === void 0 && this.provenanceBaseline?.tokenFree === false && this.outputReferenceProvenanceFor(persistedOutputs, this.redactOutputs(persistedOutputs)) !== void 0;
|
|
45372
|
+
if (observedRefresh || outputProvenanceBackfill || maskedFingerprintsBackfilled || conditionVerdictsChanged || outputsChanged || exportSetChanged || skippedOutputsChanged || orphansChanged || healedAttributesPending) try {
|
|
44918
45373
|
const refreshedState = {
|
|
44919
|
-
version:
|
|
45374
|
+
version: 12,
|
|
44920
45375
|
region: this.stackRegion,
|
|
44921
45376
|
stackName: currentState.stackName,
|
|
44922
45377
|
resources: currentState.resources,
|
|
@@ -45026,6 +45481,7 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
|
|
|
45026
45481
|
recreateTargetIds: recreateTargetIdsFor(this.options.recreateTargets, stackName),
|
|
45027
45482
|
secretMask: () => this.diffLogMasker(diffResolverContext.recordedSecretValues, effectiveTemplate, parameterValues, currentState.resources)
|
|
45028
45483
|
})) this.generatedNameGuard?.noteApprovalPrompted();
|
|
45484
|
+
startProvenanceCapture();
|
|
45029
45485
|
this.generatedNameGuard?.recordPlannedIntents();
|
|
45030
45486
|
this.resolver.resetPhysicalIdFallbackCount();
|
|
45031
45487
|
const progress = {
|
|
@@ -45361,6 +45817,12 @@ var DeployEngine = class {
|
|
|
45361
45817
|
restoredLostChildren = /* @__PURE__ */ new Set();
|
|
45362
45818
|
updatesThatSentNothing = /* @__PURE__ */ new Set();
|
|
45363
45819
|
updateWasReplaced = /* @__PURE__ */ new Map();
|
|
45820
|
+
inPlaceCreateOnlyPaths = /* @__PURE__ */ new Map();
|
|
45821
|
+
outputProvenanceSinks = /* @__PURE__ */ new Map();
|
|
45822
|
+
outputsResolvedThisRun = /* @__PURE__ */ new WeakSet();
|
|
45823
|
+
provenanceBaseline = void 0;
|
|
45824
|
+
resolvedOutputsBag = void 0;
|
|
45825
|
+
provenanceCaptureTasks = /* @__PURE__ */ new Map();
|
|
45364
45826
|
oldDeletedBeforeCreate = /* @__PURE__ */ new Set();
|
|
45365
45827
|
healBaseline = {};
|
|
45366
45828
|
runProducerRegionEvidence = void 0;
|
|
@@ -45430,6 +45892,12 @@ var DeployEngine = class {
|
|
|
45430
45892
|
this.restoredLostChildren = /* @__PURE__ */ new Set();
|
|
45431
45893
|
this.updatesThatSentNothing = /* @__PURE__ */ new Set();
|
|
45432
45894
|
this.updateWasReplaced = /* @__PURE__ */ new Map();
|
|
45895
|
+
this.inPlaceCreateOnlyPaths = /* @__PURE__ */ new Map();
|
|
45896
|
+
this.outputProvenanceSinks = /* @__PURE__ */ new Map();
|
|
45897
|
+
this.outputsResolvedThisRun = /* @__PURE__ */ new WeakSet();
|
|
45898
|
+
this.provenanceBaseline = void 0;
|
|
45899
|
+
this.resolvedOutputsBag = void 0;
|
|
45900
|
+
this.provenanceCaptureTasks = /* @__PURE__ */ new Map();
|
|
45433
45901
|
this.oldDeletedBeforeCreate = /* @__PURE__ */ new Set();
|
|
45434
45902
|
this.healBaseline = {};
|
|
45435
45903
|
this.runProducerRegionEvidence = void 0;
|
|
@@ -45450,7 +45918,7 @@ var DeployEngine = class {
|
|
|
45450
45918
|
const templateProps = this.perResourceTemplateProps.get(logicalId);
|
|
45451
45919
|
const scrubbed = scrubResourceRecord(this.withHealedAttributes(logicalId, record), secrets ?? /* @__PURE__ */ new Map(), templateProps);
|
|
45452
45920
|
const noEchoScrubbed = this.applyNoEchoPersist(logicalId, record, this.withNoEchoExactEchoes(logicalId, scrubbed), templateProps, state.resources, secrets);
|
|
45453
|
-
resources[logicalId] = withConstructPath(withMaskedPropertyFingerprints(noEchoScrubbed, record.properties, templateProps, secrets, this.fingerprintNoEchoValues, this.perResourceInputFingerprints.get(logicalId)), constructPathOf(this.constructPathTemplate, logicalId));
|
|
45921
|
+
resources[logicalId] = withReferenceProvenance(withConstructPath(withMaskedPropertyFingerprints(noEchoScrubbed, record.properties, templateProps, secrets, this.fingerprintNoEchoValues, this.perResourceInputFingerprints.get(logicalId)), constructPathOf(this.constructPathTemplate, logicalId)), this.referenceProvenanceToPersist(logicalId, record, noEchoScrubbed, secrets));
|
|
45454
45922
|
}
|
|
45455
45923
|
const orphans = state.orphans?.map((entry) => {
|
|
45456
45924
|
const sameResource = this.perResourceResolvedType.get(entry.logicalId) === entry.state.resourceType;
|
|
@@ -45462,14 +45930,51 @@ var DeployEngine = class {
|
|
|
45462
45930
|
});
|
|
45463
45931
|
const outputs = this.redactOutputs(state.outputs);
|
|
45464
45932
|
const crossStackReads = this.redactCrossStackReads(state);
|
|
45933
|
+
const { outputReferenceProvenance: _incoming, ...rest } = state;
|
|
45934
|
+
const outputReferenceProvenance = this.outputReferenceProvenanceFor(state.outputs, outputs);
|
|
45465
45935
|
return {
|
|
45466
|
-
...
|
|
45936
|
+
...rest,
|
|
45467
45937
|
resources,
|
|
45468
45938
|
outputs,
|
|
45469
45939
|
...orphans === void 0 ? {} : { orphans },
|
|
45470
|
-
...crossStackReads
|
|
45940
|
+
...crossStackReads,
|
|
45941
|
+
...outputReferenceProvenance !== void 0 && { outputReferenceProvenance }
|
|
45471
45942
|
};
|
|
45472
45943
|
}
|
|
45944
|
+
outputReferenceProvenanceFor(outputs, redacted) {
|
|
45945
|
+
const sinkOf = (outputKey) => this.outputProvenanceSinks.get(outputKey);
|
|
45946
|
+
const baseline = this.provenanceBaseline;
|
|
45947
|
+
if (!this.outputsResolvedThisRun.has(outputs) && baseline !== void 0 && outputs === baseline.outputs && baseline.outputReferenceProvenance === void 0 && !baseline.tokenFree && this.resolvedOutputsBag !== void 0 && outputMapsEqual(this.redactOutputs(this.resolvedOutputsBag), redacted)) return outputProvenanceForPersist({
|
|
45948
|
+
outputs: redacted,
|
|
45949
|
+
resolvedThisRun: true,
|
|
45950
|
+
carriedFrom: void 0,
|
|
45951
|
+
sinkOf
|
|
45952
|
+
});
|
|
45953
|
+
return outputProvenanceForPersist({
|
|
45954
|
+
outputs: redacted,
|
|
45955
|
+
resolvedThisRun: this.outputsResolvedThisRun.has(outputs),
|
|
45956
|
+
carriedFrom: baseline !== void 0 && outputs === baseline.outputs ? baseline : void 0,
|
|
45957
|
+
sinkOf
|
|
45958
|
+
});
|
|
45959
|
+
}
|
|
45960
|
+
referenceProvenanceToPersist(logicalId, record, scrubbed, secrets) {
|
|
45961
|
+
const sameGeneration = isSameGenerationBag(record.properties);
|
|
45962
|
+
if (!sameGeneration && !isWrittenFromDeployedTemplate(record.properties)) return KEEP_REFERENCE_PROVENANCE;
|
|
45963
|
+
const previous = Object.hasOwn(this.healBaseline, logicalId) ? this.healBaseline[logicalId] : void 0;
|
|
45964
|
+
if (this.updatesThatSentNothing.has(logicalId) && previous !== void 0) return previous.referenceProvenance;
|
|
45965
|
+
const createOnly = sameGeneration ? this.inPlaceCreateOnlyPaths.get(logicalId) : "all";
|
|
45966
|
+
const inPlace = this.updateWasReplaced.get(logicalId) === false && previous !== void 0 ? {
|
|
45967
|
+
createOnly: createOnly ?? "all",
|
|
45968
|
+
attributesCarried: record.attributes !== void 0 && record.attributes === previous.attributes
|
|
45969
|
+
} : void 0;
|
|
45970
|
+
return provenanceForWrittenRecord({
|
|
45971
|
+
record: scrubbed,
|
|
45972
|
+
secrets,
|
|
45973
|
+
previous,
|
|
45974
|
+
inPlace,
|
|
45975
|
+
walkWithoutPassProvenance: this.provenanceBaseline?.tokenFree !== true
|
|
45976
|
+
});
|
|
45977
|
+
}
|
|
45473
45978
|
redactCrossStackReads(state) {
|
|
45474
45979
|
if (state.imports === void 0 && state.outputReads === void 0) return {};
|
|
45475
45980
|
const secrets = this.allRecordedSecrets();
|
|
@@ -45618,6 +46123,8 @@ DeployEngine.prototype.namingSecretsFor = namingSecretsFor;
|
|
|
45618
46123
|
DeployEngine.prototype.noteSecretNamedReads = noteSecretNamedReads;
|
|
45619
46124
|
DeployEngine.prototype.kickOffObservedCapture = kickOffObservedCapture;
|
|
45620
46125
|
DeployEngine.prototype.drainObservedCaptures = drainObservedCaptures;
|
|
46126
|
+
DeployEngine.prototype.kickOffProvenanceCapture = kickOffProvenanceCapture;
|
|
46127
|
+
DeployEngine.prototype.drainProvenanceCaptures = drainProvenanceCaptures;
|
|
45621
46128
|
DeployEngine.prototype.buildObservedCaptureSiblings = buildObservedCaptureSiblings;
|
|
45622
46129
|
DeployEngine.prototype.stampReasonlessParameterRefusals = stampReasonlessParameterRefusals;
|
|
45623
46130
|
DeployEngine.prototype.kickOffAutoRefreshObservedProperties = kickOffAutoRefreshObservedProperties;
|
|
@@ -45651,5 +46158,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
|
|
|
45651
46158
|
DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
|
|
45652
46159
|
|
|
45653
46160
|
//#endregion
|
|
45654
|
-
export { isTruthyCfnBoolean as $, isStatefulRecreateTargetForReplace as $a, warnDeprecatedNoPrefixCliFlag as $c, malformedOrphansRefusalMessage as $i, ledgerForStack as $n, markSameGenerationBag as $o, sendableAssumeRoleCommand as $r, AssetPublisher as $s, seedsDeleteFirstGuard as $t, noEchoComparisonForTemplate as A, refuseMalformedResourcesForDeploy as Aa, redactDockerArgvValues as Ac, declaresNoEcho as Ai, journaledOrphanPrintingBag as An, maskWholeValue as Ao, deleteIndeterminateGuards as Ar, LockManager as As, dropFailedHint as At, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as B, unpreviewableOrphanRecords as Ba, Synthesizer as Bc, hasReadableOutputs as Bi, PRE_DELETE_SNAPSHOT_TYPES as Bn, carryLogOnlyValues as Bo, reDisableInstanceApiTermination as Br, splitImportedOps as Bs, getStackRecords as Bt, recordRetainedForReadoption as C, refuseMalformedResourceEntriesForImport as Ca, dockerSpawnEnvWithSensitive as Cc, cfnRefValueFromPhysicalId as Ci, renderAssemblyPathEscape as Cl, collectDeclaredOutputNames as Cn, sameLambdaFunctionAddress as Co, applyCustomResourceResponseExpiration as Cr, wholeStringLeavesOf as Cs, revertNestedChildFromJournal as Ct, withResourceDeadline as D, refuseMalformedResourcePropertiesForDrift as Da, isDockerClientEnvKey as Dc, withSharedDrainBudget as Di, clearBucketRegionCache as Dl, DEFAULT_RESOURCE_TIMEOUT_MS as Dn, isMarkedCoordinate as Do, unchangedBehindSecretReference as Dr, TEMPLATE_SOURCED_RULES as Ds, getCurrentNestedStackContext as Dt, serviceTokenBlockingReason as E, refuseMalformedResourcePropertiesForDestroy as Ea, getDockerCmd as Ec, parseWebACLArn as Ei, injectedAwsRegionValue as El, bindingSkippedOutputs as En, canonicalCoordinates as Eo, slowCcOperationTimeoutMs as Er, STATE_SOURCED_READBACK_RULES as Es, collectNestedChildUnaddressed as Et, PROTECTION_PROPERTY_BY_TYPE as F, repairMalformedOrphansForReadOnly as Fa, escapeRegExp$3 as Fc, UNREADABLE_RESOURCES_MAP_ROW as Fi, secretNamedRecordNeedles as Fn, passedNoEchoParametersOf as Fo, markWaitAbandoned as Fr, CrossPrefixScanCache as Fs, sameJournaledOrphans as Ft, resolveDynamoDbDeleteBudgetMs as G, findSilentDropProperties as Ga, resolveApp as Gc, malformedExportNamesWarning as Gi, isFinalSnapshotError as Gn, printingCorpusOf as Go, poisonRenderedSpellingsCollidingIn as Gr, hasReasonlessBaselineRefusal as Gs, isJournaledOrphan as Gt, compensateRemovedDeletionProtection as H, unreadableResourceEntries as Ha, getDefaultStateBucketName as Hc, isReadableOrphanRecord as Hi, ccRoutedFinalSnapshotError as Hn, hasMaskableValues as Ho, DiffCalculator as Hr, describeRegionValueKind as Hs, removeProtectionTypeList as Ht, isProtectionValueActive as I, repairMalformedOutputsForReadOnly as Ia, stripControlChars as Ic, accountArgs as Ii, stateSecretNameNeedles as In, readbackPathFor as Io, disableInstanceApiTermination as Ir, applyCrossPrefixScan as Is, replayFailedOperations as It, deleteTableWithIndexBusyRetry as J, NO_CC_HANDLERS_REASON as Ja, resolveSkipPrefix as Jc, malformedLocalResourceEntriesWarning as Ji, maskingRetryLogger as Jn, shareLogOnlyValues as Jo, applyRoleArnIfSet as Jr, importableOutputs as Js, planRollback as Jt, DELETE_INDEX_WAIT_PROCEED_NOTE as K, unwrittenCreateOnlyReplacement as Ka, resolveAutoAssetStorage as Kc, malformedExportSourceWarning as Ki, refusesFinalSnapshot as Kn, recordLogOnlyParameterValue as Ko, producerLookupOver as Kr, hasUnverifiableParameterRefusal as Ks, isReplacementOrphan as Kt, perType as L, repairMalformedResourceEntriesForReadOnly as La, stripForDisplay as Lc, deployRefusesOrphanRowsReason as Li, storedSecretNameNeedles as Ln, readsNoEchoSource as Lo, ec2InstanceProtectionSite as Lr, crossPrefixDeniedWarning as Ls, replayRollback as Lt, noEchoParameterNamesOf as M, refuseMalformedResourcesForExport as Ma, runDockerForeground as Mc, STATE_REGION_DIVERGED as Mi, orphanRecordsPrintingBag as Mn, noEchoCoordinatesOf as Mo, deleteSkipReason as Mr, S3StateBackend as Ms, journaledOrphanLines as Mt, recordedProtectionEvidence as N, refuseMalformedState as Na, runDockerStreaming as Nc, STATE_RESOURCES_MALFORMED as Ni, secretNamePrintingBag as Nn, noEchoLeavesOf as No, withIndeterminateGuard as Nr, rebuildClientForBucketRegion as Ns, loadJournaledOrphans as Nt, diffSecurity as O, refuseMalformedResourcePropertiesForExport as Oa, isMalformedEnvKey as Oc, parameterInputsFor as Oi, resolveBucketRegion as Ol, DEFAULT_RESOURCE_WARN_AFTER_MS as On, maskAtCoordinates as Oo, RollbackInlinePolicyWriters as Or, WHOLE_DYNAMIC_REFERENCE_PATTERN as Os, withNestedStackContext as Ot, recordedProtectionNote as P, repairMalformedOrphanRecordsForReadOnly as Pa, warnFinchArgvExposure as Pc, UNREADABLE_ORPHANS_CONTAINER_ROW as Pi, secretNamePrintingBags as Pn, noEchoOutputsComparison as Po, isWaitAbandonedError as Pr, CrossPrefixReadError as Ps, makeForeignHolderScan as Pt, hasCdkAutoDeleteTag as Q, MULTI_REGION_RECREATE_BLOCKED_TYPES as Qa, stateBucketExistenceConfirmed as Qc, malformedOrphanRowsKeptWarning as Qi, earliestDefined as Qn, maskSecretsInText as Qo, isIamRoleArn as Qr, shouldRetainResource as Qs, resolveReplacementOldType as Qt, readProtection as R, repairMalformedResourcePropertiesForReadOnly as Ra, AssetManifestLoader as Rc, displayLogicalId as Ri, extractDeploymentEventError as Rn, valueAtCoordinate as Ro, isTerminationProtectionPropagationError as Rr, isAccessDenied$1 as Rs, awaitInFlightSibling as Rt, keptForReadoption as S, refuseMalformedResourceEntriesForDestroy as Sa, describeDockerFailure as Sc, AWS_NO_VALUE as Si, displayAssemblyPath as Sl, noEchoParameterValueSeed as Sn, lambdaFunctionNameForMask as So, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Sr, recordProvenPublicExpression as Ss, recordDisplacedSkips as St, findServiceTokenRefusals as T, refuseMalformedResourceEntriesForOrphan as Ta, formatDockerLoginError as Tc, refStateLookupFromResource as Ti, injectAwsRegion as Tl, isExportAliasCollision as Tn, TemplateParser as To, CloudControlProvider as Tr, STATE_SOURCED_CROSS_GENERATION_RULES as Ts, withNestedRevertRun as Tt, deleteBudgetKey as U, withheldAccountClause as Ua, getLegacyStateBucketName as Uc, isReadableResourceEntry as Ui, createPreDeleteFinalSnapshot as Un, literalSplitDelimitersOf as Uo, INTRINSIC_KEYS as Ur, exportNamesCarriedFrom as Us, recordAfterRollbackUpdate as Ut, beginDeleteWait as V, unreadableOrphanRecords as Va, synthesisStatusMessage as Vc, hasReadableResources as Vi, buildFinalSnapshotIdentifier as Vn, createUnionSecretMasker as Vo, reEnableInstanceApiTermination as Vr, acceptedCreateOnlyDropsOf as Vs, withStackRecords as Vt, resolveDynamoDbDeleteBudgetClock as W, findActionableSilentDrops as Wa, loadCdkJson as Wc, malformedDriftResourcePropertiesWarning as Wi, effectiveDeletionPolicy as Wn, logOnlyValueCount as Wo, IntrinsicFunctionResolver as Wr, hasReadableExportSet as Ws, demoteSupersededOrphans as Wt, ECR_AUTO_DELETE_IMAGES_TAG as X, findReplacedReadersOfRecreateTargets as Xa, resolveStateBucketWithDefaultAndSource as Xc, malformedOrphanRecordsRefusalMessage as Xi, findDestructiveChanges as Xn, errorCauseChain as Xo, assertSendableRoleArn as Xr, orphansAfterRollback as Xs, recordUnderIdIsNotOwn as Xt, waitForIndexesSettled as Y, hasNoCloudControlHandlers as Ya, resolveStateBucketWithDefault as Yc, malformedLocalResourcesWarning as Yi, constructPathOf as Yn, createSecretMasker as Yo, assertFlagRoleArn as Yr, isReadableBag as Ys, recheckFailedPlan as Yt, S3_AUTO_DELETE_OBJECTS_TAG as Z, shownType as Za, resolveUseCdkBootstrapAssets as Zc, malformedOrphanRecordsWarning as Zi, formatDestructiveChange as Zn, maskSecretsInError as Zo, explicitRoleArnOrThrow as Zr, orphansCarriedFrom as Zs, replacementNeverSwapped as Zt, makeCanonicalizePropertiesFn as _, refuseMalformedOutputs as _a, buildDenyExternalAccessPolicy as _c, isImpossibleEmptyStoredAttribute as _i, hasPlainPrototype$1 as _l, secretSafeKeyDisplay as _n, prefetchCreateOnlyPropertyPaths as _o, TemplateNoEchoReresolver as _r, provenPublicValue as _s, displacedOpClause as _t, findNestedTemplateTreeDefect as a, malformedResourcePropertiesWarning as aa, loadPublishableAssetManifest as ac, s3BucketArn as ai, uploadCfnTemplate as al, isRedactedRecordedValue as an, toCfnInteger as ao, planTagDiff as ar, dynamicReferenceTokens as as, cyan as at, lookupEachName as b, refuseMalformedResourceEntries as ba, describeDockerCapturedOutput as bc, isNamelessDynamicReferenceError as bi, absoluteAssemblyPathEscape as bl, exportNameSecretExposure as bn, withRetry as bo, getCurrentResourceSecrets as br, recordNoEchoAttributeValues as bs, getNestedRevertRun as bt, renderNestedTemplateTreeDefect as c, malformedStateRefusalMessage as ca, BOOTSTRAP_MARKER_PREFIX as cc, s3BucketRegionalDomainName as ci, expectedOwnerParam as cl, updatePartialMessage as cn, coerceCfnInteger as co, tagMapAsList as cr, identityKeyFor as cs, red as ct, conditionInputsFrom as d, refuseMalformedNestedChildOutputs as da, getBootstrapMarkerKey as dc, producerRegionsFromState as di, derivePartitionAndUrlSuffix as dl, DeploymentEventsStore as dn, configStringRefusal as do, stringifyIfAssigned as dr, recoverMaskedOutput as ds, namesAnyDeclaredParameter as dt, malformedOrphansWarning as ea, isSensitiveAttributeName as ec, AWS_CREDENTIAL_ENV_KEYS as ei, ssmResolvedValueType as el, orphanDeleteNeedsIdentity as en, isStatefulRecreateTargetSync as eo, reserveStackCreateToken as er, redactSecretsForState as es, getPriorAttempts as et, parentSuppliedValues as f, refuseMalformedOrphanRecords as fa, isCrossRegionRedirect as fc, regionLessSecretName as fi, AssemblyReader as fl, WITHHELD_NAME_DISPLAY as fn, readConfigString as fo, CC_BROKEN_REASON as fr, physicalNameCopiesOf as fs, reachableDivergentParameters as ft, mergeNoChangeOutputs as g, refuseMalformedOrphansForOrphan as ga, validateContainerRepoName as gc, getAccountInfo as gi, hasOwnKey as gl, secretBearingStateKeyWarning as gn, requireConfigString as go, wouldReturnToSdkProvider as gr, carriesSecretMask as gs, NESTED_PENDING_PARENT_REASON as gt, keptWholeReasonText as h, refuseMalformedOrphansForDestroy as ha, validateAssetBucketName as hc, parameterTypeMayLoseSecretIdentity as hi, defineOwnKey as hl, secretBearing as hn, requireConfigObject as ho, isCustomResource as hr, splitGetAttStringForm as hs, planOrphanAdoption as ht, childTemplateLoader as i, malformedResourceEntriesWarning as ia, createAssetRedirectResolver as ic, isSettledInstanceState as ii, findLargeInlineResources as il, REDACTED_DELETE_ADDRESS_SKIP_REASON as in, isWarmThroughputDecrease as io, DBPROXY_TAG_OPTIONS as ir, DYNAMIC_REFERENCE_TOKEN_SCAN as is, bold as it, noEchoExactEchoLeavesOf as j, refuseMalformedResourcesForDestroy as ja, redactedDockerCause as jc, JSON_LISTING_HOLE_VALUE as ji, maskEventTextWithBoundBags as jn, maskedLeafCoordinatesOf as jo, deleteLeftInPlace as jr, isLockInfoExpired as js, isHandledOrphan as jt, noEchoAttributeNamesOf as k, refuseMalformedResourcePropertiesForOrphan as ka, partitionSensitiveEnv as kc, passedParameterClassesOf as ki, completedReplayEntries as kn, maskReadbackAtCoordinates as ko, UNSPECIFIED_SKIP_REASON as kr, isSingleDynamicReferenceToken as ks, deleteJournaledOrphans as kt, templateIdentity as l, previewableOrphanRecords as la, assertAssetBucketRegion as lc, s3BucketWebsiteUrl as li, PARTITION_TABLE as ll, updatePartialReason as ln, configBooleanRefusal as lo, tagPlanWarning as lr, inheritNestedStackParameterAssociations as ls, yellow as lt, isSecretBearingReferenceString as m, refuseMalformedOrphans as ma, readBootstrapMarkerBody as mc, isUnboundTemplateParameter as mi, processStackMessages as ml, exportAliasCollisionScrubWarning as mn, requireConfigArray as mo, ccBrokenReason as mr, recordPhysicalNameCopy as ms, makeSiblingClaimReader as mt, IMPLICIT_DELETE_DEPENDENCIES as n, malformedOutputsWarning as na, WorkGraph as nc, callerEnvCredentials as ni, CFN_TEMPLATE_URL_LIMIT as nl, getCurrentProducerRegions as nn, WARM_THROUGHPUT_MEMBERS as no, acquireIdempotencyToken as nr, withPhysicalNameCopies as ns, formatResourceLine as nt, isAbsoluteAssetPath as o, malformedResourcesWarning as oa, rewriteTemplateAssetReferences as oc, s3BucketDomainName as oi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as ol, redactedDeleteAddressFields as on, toFiniteNumber as oo, readTagList as or, isUncertifiedBaselineMaskPosition as os, gray as ot, readRecordedConditionVerdicts as p, refuseMalformedOrphanRecordsForDestroy as pa, parseBootstrapMarker as pc, coerceParameterTypedValue as pi, StageLoadError as pl, displayTextOrWithheld as pn, replayWarn as po, ProviderRegistry as pr, recordAttributeIdCopy as ps, resourcesNamingDeclaredParameter as pt, INDEX_SETTLE_POLL_INTERVAL_MS as q, withoutSilentDropProperties as qa, resolveCaptureObservedState as qc, malformedLocalOutputsWarning as qi, unsupportedFinalSnapshotError as qn, recordLogOnlyValue as qo, refuseUnreadableCdkCrossAccountRefs as qr, importableOutputKeys as qs, planFailedOps as qt, computeImplicitDeleteEdges as r, malformedRenderedContainersWarning as ra, buildAssetRedirectMap as rc, envCredentialsAreAssumedRole as ri, MIGRATE_TMP_PREFIX as rl, inheritProducerRegions as rn, coerceWarmThroughput as ro, DBPROXY_TAGS_WHAT as rr, withoutPhysicalNameCopies as rs, createReadOnlyAttributeHealerFactory as rt, listNestedTemplateRows as s, malformedScrubResourceEntriesRefusalMessage as sa, AssetModeResolver as sc, s3BucketDualStackDomainName as si, decodeListingKey as sl, redactedDeleteAddressSkip as sn, coerceCfnBoolean as so, refuseMalformedDesiredTags as sr, pathCrossesDottedKey as ss, green as st, DeployEngine as t, malformedOutputsRefusalMessage as ta, stringifyValue as tc, applyCallerIdentityCredentials as ti, CFN_TEMPLATE_BODY_LIMIT as tl, findNestedStackTypeChanges as tn, renderStatefulReason as to, withCreateTokenLedger as tr, scrubResourceRecord as ts, markRefusedBeforeApplying as tt, conditionFingerprint as u, refuseDivergentRecordRegionForDestroy as ua, ensureAssetStorage as uc, classifyReplaySecretRegion as ui, canonicalizeRegion as ul, DeploymentEventsReader as un, configIntegerRefusal as uo, definedAttributes as ur, recordNestedStackParameterExpressions as us, computeParameterTaint as ut, chunks as v, refuseMalformedOutputsForDestroy as va, buildDockerImage as vc, carriesDynamicReference as vi, nullPrototypeRecord as vl, carriedExportAliasExposure as vn, templateResourceTypes as vo, readsNoEchoDeleteValues as vr, recordMaskOnlyValue as vs, displacedPhysicalIdShown as vt, deferredServiceTokenWarning as w, refuseMalformedResourceEntriesForImportSave as wa, finchSecretArgvRefusal as wc, isStalePlaceholderArnAttribute as wi, resolveAssemblyPath as wl, collectPublishedOutputNames as wn, DagBuilder as wo, customResourceResponseExpirationWarning as wr, STATE_SOURCED_BASELINE_RULES as ws, revertedNestedRowIds as wt, withApiLimit as x, refuseMalformedResourceEntriesForDeploy as xa, describeDockerExecFailure as xc, keepsSecretReferenceToken as xi, describeFileReadFailure as xl, isWholeDynamicReferenceValue as xn, canonicalLambdaFunctionName as xo, withPrintingSecrets as xr, recordNoEchoParameterFreshValue as xs, nestedChildStackName as xt, isAccessDeniedError as y, refuseMalformedResourceAttributesForOrphan as ya, resolveDockerContextDirectory as yc, carriesFetchableDynamicReference as yi, ownValue as yl, exportNameNoEchoParameters as yn, describeTypeWithThrottleRetry as yo, isCustomResourceType as yr, recordMaskOnlyValuesIn as ys, dropSettledNestedJournals as yt, DynamoDBGlobalTableProvider as z, repairMalformedResourcesForReadOnly as za, getDockerImageBySourceHash as zc, hasReadableOrphans as zi, ATOMIC_FINAL_SNAPSHOT_TYPES as zn, liveMatchesUnresolvedTokenFrame as zo, observeThenDisableInstanceApiTermination as zr, isNotImplemented as zs, destroyStackRecordsView as zt };
|
|
45655
|
-
//# sourceMappingURL=deploy-engine-
|
|
46161
|
+
export { isTruthyCfnBoolean as $, MULTI_REGION_RECREATE_BLOCKED_TYPES as $a, resolveStateBucketWithDefault as $c, malformedOrphanRowsKeptWarning as $i, earliestDefined as $n, maskSecretsInText as $o, isIamRoleArn as $r, orphansAfterRollback as $s, seedsDeleteFirstGuard as $t, noEchoComparisonForTemplate as A, refuseMalformedResourcePropertiesForOrphan as Aa, isDockerClientEnvKey as Ac, passedParameterClassesOf as Ai, injectedAwsRegionValue as Al, journaledOrphanPrintingBag as An, maskReadbackAtCoordinates as Ao, UNSPECIFIED_SKIP_REASON as Ar, TEMPLATE_SOURCED_RULES as As, dropFailedHint as At, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as B, repairMalformedResourcesForReadOnly as Ba, stripControlChars as Bc, hasReadableOrphans as Bi, PRE_DELETE_SNAPSHOT_TYPES as Bn, liveMatchesUnresolvedTokenFrame as Bo, observeThenDisableInstanceApiTermination as Br, crossPrefixDeniedWarning as Bs, getStackRecords as Bt, recordRetainedForReadoption as C, refuseMalformedResourceEntriesForDestroy as Ca, describeDockerCapturedOutput as Cc, AWS_NO_VALUE as Ci, ownValue as Cl, collectDeclaredOutputNames as Cn, lambdaFunctionNameForMask as Co, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Cr, recordNoEchoAttributeValues as Cs, revertNestedChildFromJournal as Ct, withResourceDeadline as D, refuseMalformedResourcePropertiesForDestroy as Da, finchSecretArgvRefusal as Dc, parseWebACLArn as Di, renderAssemblyPathEscape as Dl, DEFAULT_RESOURCE_TIMEOUT_MS as Dn, canonicalCoordinates as Do, slowCcOperationTimeoutMs as Dr, STATE_SOURCED_BASELINE_RULES as Ds, getCurrentNestedStackContext as Dt, serviceTokenBlockingReason as E, refuseMalformedResourceEntriesForOrphan as Ea, dockerSpawnEnvWithSensitive as Ec, refStateLookupFromResource as Ei, displayAssemblyPath as El, bindingSkippedOutputs as En, TemplateParser as Eo, CloudControlProvider as Er, wholeStringLeavesOf as Es, collectNestedChildUnaddressed as Et, PROTECTION_PROPERTY_BY_TYPE as F, repairMalformedOrphanRecordsForReadOnly as Fa, redactedDockerCause as Fc, UNREADABLE_ORPHANS_CONTAINER_ROW as Fi, secretNamedRecordNeedles as Fn, noEchoOutputsComparison as Fo, isWaitAbandonedError as Fr, S3StateBackend as Fs, sameJournaledOrphans as Ft, resolveDynamoDbDeleteBudgetMs as G, findActionableSilentDrops as Ga, synthesisStatusMessage as Gc, malformedDriftResourcePropertiesWarning as Gi, isFinalSnapshotError as Gn, logOnlyValueCount as Go, IntrinsicFunctionResolver as Gr, describeRegionValueKind as Gs, isJournaledOrphan as Gt, compensateRemovedDeletionProtection as H, unreadableOrphanRecords as Ha, AssetManifestLoader as Hc, hasReadableResources as Hi, ccRoutedFinalSnapshotError as Hn, createUnionSecretMasker as Ho, reEnableInstanceApiTermination as Hr, isNotImplemented as Hs, removeProtectionTypeList as Ht, isProtectionValueActive as I, repairMalformedOrphansForReadOnly as Ia, runDockerForeground as Ic, UNREADABLE_RESOURCES_MAP_ROW as Ii, stateSecretNameNeedles as In, passedNoEchoParametersOf as Io, markWaitAbandoned as Ir, rebuildClientForBucketRegion as Is, replayFailedOperations as It, deleteTableWithIndexBusyRetry as J, withoutSilentDropProperties as Ja, loadCdkJson as Jc, malformedLocalOutputsWarning as Ji, maskingRetryLogger as Jn, recordLogOnlyValue as Jo, refuseUnreadableCdkCrossAccountRefs as Jr, hasReasonlessBaselineRefusal as Js, planRollback as Jt, DELETE_INDEX_WAIT_PROCEED_NOTE as K, findSilentDropProperties as Ka, getDefaultStateBucketName as Kc, malformedExportNamesWarning as Ki, refusesFinalSnapshot as Kn, printingCorpusOf as Ko, poisonRenderedSpellingsCollidingIn as Kr, exportNamesCarriedFrom as Ks, isReplacementOrphan as Kt, perType as L, repairMalformedOutputsForReadOnly as La, runDockerStreaming as Lc, accountArgs as Li, storedSecretNameNeedles as Ln, readbackPathFor as Lo, disableInstanceApiTermination as Lr, CrossPrefixReadError as Ls, replayRollback as Lt, noEchoParameterNamesOf as M, refuseMalformedResourcesForDestroy as Ma, partitionSensitiveEnv as Mc, JSON_LISTING_HOLE_VALUE as Mi, resolveBucketRegion as Ml, orphanRecordsPrintingBag as Mn, maskedLeafCoordinatesOf as Mo, deleteLeftInPlace as Mr, isSingleDynamicReferenceToken as Ms, journaledOrphanLines as Mt, recordedProtectionEvidence as N, refuseMalformedResourcesForExport as Na, redactDockerArgvValues as Nc, STATE_REGION_DIVERGED as Ni, secretNamePrintingBag as Nn, noEchoCoordinatesOf as No, deleteSkipReason as Nr, LockManager as Ns, loadJournaledOrphans as Nt, diffSecurity as O, refuseMalformedResourcePropertiesForDrift as Oa, formatDockerLoginError as Oc, withSharedDrainBudget as Oi, resolveAssemblyPath as Ol, DEFAULT_RESOURCE_WARN_AFTER_MS as On, isMarkedCoordinate as Oo, unchangedBehindSecretReference as Or, STATE_SOURCED_CROSS_GENERATION_RULES as Os, withNestedStackContext as Ot, recordedProtectionNote as P, refuseMalformedState as Pa, redactedCause as Pc, STATE_RESOURCES_MALFORMED as Pi, secretNamePrintingBags as Pn, noEchoLeavesOf as Po, withIndeterminateGuard as Pr, isLockInfoExpired as Ps, makeForeignHolderScan as Pt, hasCdkAutoDeleteTag as Q, shownType as Qa, resolveSkipPrefix as Qc, malformedOrphanRecordsWarning as Qi, outputReferenceProvenanceOf as Qn, maskSecretsInError as Qo, explicitRoleArnOrThrow as Qr, isReadableBag as Qs, resolveReplacementOldType as Qt, readProtection as R, repairMalformedResourceEntriesForReadOnly as Ra, warnFinchArgvExposure as Rc, deployRefusesOrphanRowsReason as Ri, extractDeploymentEventError as Rn, readsNoEchoSource as Ro, ec2InstanceProtectionSite as Rr, CrossPrefixScanCache as Rs, awaitInFlightSibling as Rt, keptForReadoption as S, refuseMalformedResourceEntriesForDeploy as Sa, resolveDockerContextDirectory as Sc, keepsSecretReferenceToken as Si, nullPrototypeRecord as Sl, noEchoParameterValueSeed as Sn, canonicalLambdaFunctionName as So, withPrintingSecrets as Sr, recordMaskOnlyValuesIn as Ss, recordDisplacedSkips as St, findServiceTokenRefusals as T, refuseMalformedResourceEntriesForImportSave as Ta, describeDockerFailure as Tc, isStalePlaceholderArnAttribute as Ti, describeFileReadFailure as Tl, isExportAliasCollision as Tn, DagBuilder as To, customResourceResponseExpirationWarning as Tr, recordProvenPublicExpression as Ts, withNestedRevertRun as Tt, deleteBudgetKey as U, unreadableResourceEntries as Ua, getDockerImageBySourceHash as Uc, isReadableOrphanRecord as Ui, createPreDeleteFinalSnapshot as Un, hasMaskableValues as Uo, DiffCalculator as Ur, splitImportedOps as Us, recordAfterRollbackUpdate as Ut, beginDeleteWait as V, unpreviewableOrphanRecords as Va, stripForDisplay as Vc, hasReadableOutputs as Vi, buildFinalSnapshotIdentifier as Vn, carryLogOnlyValues as Vo, reDisableInstanceApiTermination as Vr, isAccessDenied$1 as Vs, withStackRecords as Vt, resolveDynamoDbDeleteBudgetClock as W, withheldAccountClause as Wa, Synthesizer as Wc, isReadableResourceEntry as Wi, effectiveDeletionPolicy as Wn, literalSplitDelimitersOf as Wo, INTRINSIC_KEYS as Wr, acceptedCreateOnlyDropsOf as Ws, demoteSupersededOrphans as Wt, ECR_AUTO_DELETE_IMAGES_TAG as X, hasNoCloudControlHandlers as Xa, resolveAutoAssetStorage as Xc, malformedLocalResourcesWarning as Xi, findDestructiveChanges as Xn, createSecretMasker as Xo, assertFlagRoleArn as Xr, importableOutputKeys as Xs, recordUnderIdIsNotOwn as Xt, waitForIndexesSettled as Y, NO_CC_HANDLERS_REASON as Ya, resolveApp as Yc, malformedLocalResourceEntriesWarning as Yi, constructPathOf as Yn, shareLogOnlyValues as Yo, applyRoleArnIfSet as Yr, hasUnverifiableParameterRefusal as Ys, recheckFailedPlan as Yt, S3_AUTO_DELETE_OBJECTS_TAG as Z, findReplacedReadersOfRecreateTargets as Za, resolveCaptureObservedState as Zc, malformedOrphanRecordsRefusalMessage as Zi, formatDestructiveChange as Zn, errorCauseChain as Zo, assertSendableRoleArn as Zr, importableOutputs as Zs, replacementNeverSwapped as Zt, makeCanonicalizePropertiesFn as _, refuseMalformedOrphansForOrphan as _a, readBootstrapMarkerBody as _c, getAccountInfo as _i, StageLoadError as _l, secretSafeKeyDisplay as _n, requireConfigString as _o, wouldReturnToSdkProvider as _r, recordPhysicalNameCopy as _s, displacedOpClause as _t, findNestedTemplateTreeDefect as a, malformedResourceEntriesWarning as aa, WorkGraph as ac, isSettledInstanceState as ai, CFN_TEMPLATE_BODY_LIMIT as al, isRedactedRecordedValue as an, isWarmThroughputDecrease as ao, DBPROXY_TAG_OPTIONS as ar, withPhysicalNameCopies as as, cyan as at, lookupEachName as b, refuseMalformedResourceAttributesForOrphan as ba, buildDenyExternalAccessPolicy as bc, carriesFetchableDynamicReference as bi, hasOwnKey as bl, exportNameSecretExposure as bn, describeTypeWithThrottleRetry as bo, isCustomResourceType as br, provenPublicValue as bs, getNestedRevertRun as bt, renderNestedTemplateTreeDefect as c, malformedScrubResourceEntriesRefusalMessage as ca, loadPublishableAssetManifest as cc, s3BucketDualStackDomainName as ci, findLargeInlineResources as cl, updatePartialMessage as cn, coerceCfnBoolean as co, refuseMalformedDesiredTags as cr, dynamicReferenceTokens as cs, red as ct, conditionInputsFrom as d, refuseDivergentRecordRegionForDestroy as da, BOOTSTRAP_MARKER_PREFIX as dc, classifyReplaySecretRegion as di, decodeListingKey as dl, DeploymentEventsStore as dn, configIntegerRefusal as do, definedAttributes as dr, identityKeyFor as ds, namesAnyDeclaredParameter as dt, malformedOrphansRefusalMessage as ea, orphansCarriedFrom as ec, sendableAssumeRoleCommand as ei, resolveStateBucketWithDefaultAndSource as el, orphanDeleteNeedsIdentity as en, isStatefulRecreateTargetForReplace as eo, ledgerForStack as er, markSameGenerationBag as es, getPriorAttempts as et, parentSuppliedValues as f, refuseMalformedNestedChildOutputs as fa, assertAssetBucketRegion as fc, producerRegionsFromState as fi, expectedOwnerParam as fl, WITHHELD_NAME_DISPLAY as fn, configStringRefusal as fo, stringifyIfAssigned as fr, inheritNestedStackParameterAssociations as fs, reachableDivergentParameters as ft, mergeNoChangeOutputs as g, refuseMalformedOrphansForDestroy as ga, parseBootstrapMarker as gc, parameterTypeMayLoseSecretIdentity as gi, AssemblyReader as gl, secretBearingStateKeyWarning as gn, requireConfigObject as go, isCustomResource as gr, recordAttributeIdCopy as gs, NESTED_PENDING_PARENT_REASON as gt, keptWholeReasonText as h, refuseMalformedOrphans as ha, isCrossRegionRedirect as hc, isUnboundTemplateParameter as hi, derivePartitionAndUrlSuffix as hl, secretBearing as hn, requireConfigArray as ho, ccBrokenReason as hr, physicalNameCopiesOf as hs, planOrphanAdoption as ht, childTemplateLoader as i, malformedRenderedContainersWarning as ia, stringifyValue as ic, envCredentialsAreAssumedRole as ii, ssmResolvedValueType as il, REDACTED_DELETE_ADDRESS_SKIP_REASON as in, coerceWarmThroughput as io, DBPROXY_TAGS_WHAT as ir, scrubResourceRecord as is, bold as it, noEchoExactEchoLeavesOf as j, refuseMalformedResourcesForDeploy as ja, isMalformedEnvKey as jc, declaresNoEcho as ji, clearBucketRegionCache as jl, maskEventTextWithBoundBags as jn, maskWholeValue as jo, deleteIndeterminateGuards as jr, WHOLE_DYNAMIC_REFERENCE_PATTERN as js, isHandledOrphan as jt, noEchoAttributeNamesOf as k, refuseMalformedResourcePropertiesForExport as ka, getDockerCmd as kc, parameterInputsFor as ki, injectAwsRegion as kl, completedReplayEntries as kn, maskAtCoordinates as ko, RollbackInlinePolicyWriters as kr, STATE_SOURCED_READBACK_RULES as ks, deleteJournaledOrphans as kt, templateIdentity as l, malformedStateRefusalMessage as la, rewriteTemplateAssetReferences as lc, s3BucketRegionalDomainName as li, uploadCfnTemplate as ll, updatePartialReason as ln, coerceCfnInteger as lo, tagMapAsList as lr, isUncertifiedBaselineMaskPosition as ls, yellow as lt, isSecretBearingReferenceString as m, refuseMalformedOrphanRecordsForDestroy as ma, getBootstrapMarkerKey as mc, coerceParameterTypedValue as mi, canonicalizeRegion as ml, exportAliasCollisionScrubWarning as mn, replayWarn as mo, ProviderRegistry as mr, recoverMaskedOutput as ms, makeSiblingClaimReader as mt, IMPLICIT_DELETE_DEPENDENCIES as n, malformedOutputsRefusalMessage as na, AssetPublisher as nc, applyCallerIdentityCredentials as ni, stateBucketExistenceConfirmed as nl, getCurrentProducerRegions as nn, renderStatefulReason as no, withCreateTokenLedger as nr, snapshotPassProvenance as ns, formatResourceLine as nt, isAbsoluteAssetPath as o, malformedResourcePropertiesWarning as oa, buildAssetRedirectMap as oc, s3BucketArn as oi, CFN_TEMPLATE_URL_LIMIT as ol, redactedDeleteAddressFields as on, toCfnInteger as oo, planTagDiff as or, withoutPhysicalNameCopies as os, gray as ot, readRecordedConditionVerdicts as p, refuseMalformedOrphanRecords as pa, ensureAssetStorage as pc, regionLessSecretName as pi, PARTITION_TABLE as pl, displayTextOrWithheld as pn, readConfigString as po, CC_BROKEN_REASON as pr, recordNestedStackParameterExpressions as ps, resourcesNamingDeclaredParameter as pt, INDEX_SETTLE_POLL_INTERVAL_MS as q, unwrittenCreateOnlyReplacement as qa, getLegacyStateBucketName as qc, malformedExportSourceWarning as qi, unsupportedFinalSnapshotError as qn, recordLogOnlyParameterValue as qo, producerLookupOver as qr, hasReadableExportSet as qs, planFailedOps as qt, computeImplicitDeleteEdges as r, malformedOutputsWarning as ra, isSensitiveAttributeName as rc, callerEnvCredentials as ri, warnDeprecatedNoPrefixCliFlag as rl, inheritProducerRegions as rn, WARM_THROUGHPUT_MEMBERS as ro, acquireIdempotencyToken as rr, redactSecretsForState as rs, createReadOnlyAttributeHealerFactory as rt, listNestedTemplateRows as s, malformedResourcesWarning as sa, createAssetRedirectResolver as sc, s3BucketDomainName as si, MIGRATE_TMP_PREFIX as sl, redactedDeleteAddressSkip as sn, toFiniteNumber as so, readTagList as sr, DYNAMIC_REFERENCE_TOKEN_SCAN as ss, green as st, DeployEngine as t, malformedOrphansWarning as ta, shouldRetainResource as tc, AWS_CREDENTIAL_ENV_KEYS as ti, resolveUseCdkBootstrapAssets as tl, findNestedStackTypeChanges as tn, isStatefulRecreateTargetSync as to, reserveStackCreateToken as tr, recordReferenceProvenanceEntry as ts, markRefusedBeforeApplying as tt, conditionFingerprint as u, previewableOrphanRecords as ua, AssetModeResolver as uc, s3BucketWebsiteUrl as ui, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as ul, DeploymentEventsReader as un, configBooleanRefusal as uo, tagPlanWarning as ur, pathCrossesDottedKey as us, computeParameterTaint as ut, chunks as v, refuseMalformedOutputs as va, validateAssetBucketName as vc, isImpossibleEmptyStoredAttribute as vi, processStackMessages as vl, carriedExportAliasExposure as vn, prefetchCreateOnlyPropertyPaths as vo, TemplateNoEchoReresolver as vr, splitGetAttStringForm as vs, displacedPhysicalIdShown as vt, deferredServiceTokenWarning as w, refuseMalformedResourceEntriesForImport as wa, describeDockerExecFailure as wc, cfnRefValueFromPhysicalId as wi, absoluteAssemblyPathEscape as wl, collectPublishedOutputNames as wn, sameLambdaFunctionAddress as wo, applyCustomResourceResponseExpiration as wr, recordNoEchoParameterFreshValue as ws, revertedNestedRowIds as wt, withApiLimit as x, refuseMalformedResourceEntries as xa, buildDockerImage as xc, isNamelessDynamicReferenceError as xi, hasPlainPrototype$1 as xl, isWholeDynamicReferenceValue as xn, withRetry as xo, getCurrentResourceSecrets as xr, recordMaskOnlyValue as xs, nestedChildStackName as xt, isAccessDeniedError as y, refuseMalformedOutputsForDestroy as ya, validateContainerRepoName as yc, carriesDynamicReference as yi, defineOwnKey as yl, exportNameNoEchoParameters as yn, templateResourceTypes as yo, readsNoEchoDeleteValues as yr, carriesSecretMask as ys, dropSettledNestedJournals as yt, DynamoDBGlobalTableProvider as z, repairMalformedResourcePropertiesForReadOnly as za, escapeRegExp$3 as zc, displayLogicalId as zi, ATOMIC_FINAL_SNAPSHOT_TYPES as zn, valueAtCoordinate as zo, isTerminationProtectionPropagationError as zr, applyCrossPrefixScan as zs, destroyStackRecordsView as zt };
|
|
46162
|
+
//# sourceMappingURL=deploy-engine-4K_B3N08.js.map
|