@go-to-k/cdkd 0.296.15 → 0.296.17

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.
Files changed (24) hide show
  1. package/dist/{asg-provider-BbWC_1l5.js → asg-provider-Bgno8Vo9.js} +2 -2
  2. package/dist/{asg-provider-BbWC_1l5.js.map → asg-provider-Bgno8Vo9.js.map} +1 -1
  3. package/dist/cli.js +2 -2
  4. package/dist/{deploy-engine-CjLZZzyn.js → deploy-engine-C0tkSwvX.js} +1004 -631
  5. package/dist/deploy-engine-C0tkSwvX.js.map +1 -0
  6. package/dist/{iam-role-provider-DAqNwSNR.js → iam-role-provider-CNEGjqku.js} +2 -2
  7. package/dist/{iam-role-provider-DAqNwSNR.js.map → iam-role-provider-CNEGjqku.js.map} +1 -1
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -2
  11. package/dist/{neptune-provider-DlSon_pZ.js → neptune-provider-Dp8_fNO_.js} +65 -7
  12. package/dist/neptune-provider-Dp8_fNO_.js.map +1 -0
  13. package/dist/{program-CqKPsOUR.js → program-DE9gNxua.js} +36 -14
  14. package/dist/program-DE9gNxua.js.map +1 -0
  15. package/dist/{provider-classes-Drnm0GAz.js → provider-classes-D-kWS2oy.js} +7 -7
  16. package/dist/{provider-classes-Drnm0GAz.js.map → provider-classes-D-kWS2oy.js.map} +1 -1
  17. package/dist/{rds-provider-e6XtJAGl.js → rds-provider-iDLOVERv.js} +2 -2
  18. package/dist/{rds-provider-e6XtJAGl.js.map → rds-provider-iDLOVERv.js.map} +1 -1
  19. package/dist/{version-Bdg2mYAM.js → version-Bl_MI_r7.js} +2 -2
  20. package/dist/{version-Bdg2mYAM.js.map → version-Bl_MI_r7.js.map} +1 -1
  21. package/package.json +1 -1
  22. package/dist/deploy-engine-CjLZZzyn.js.map +0 -1
  23. package/dist/neptune-provider-DlSon_pZ.js.map +0 -1
  24. package/dist/program-CqKPsOUR.js.map +0 -1
@@ -2,7 +2,7 @@ import { r as getAwsClients, s as __exportAll } from "./aws-clients-CnmtbrxD.js"
2
2
  import { A as UNRENDERABLE, C as looksLikeCdkdGeneratedName, E as withoutGeneratedFallbackName, F as displayStackName, 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 truncateCodePoints, 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-BaWeCWRz.js";
3
3
  import { $ as protectedReplacementAdvice, $n as isIamPropagationError, $t as AccountIdUnavailableError, A as isQuotableImportValue, An as commandHole, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bt as sanitizeRecoveryValue, Ct as RETRY_AUXILIARY_OWNER, Dn as SHELL_ACTIVE, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as plainOrDescribed, G as runDeleteAttempt, Gn as isNameCooldownError, H as observeThenDisableProtection, Hn as isUpdateUnsupportedError, Ht as DEFAULT_STATE_PREFIX, In as quotedOrDescribed, J as DELETION_PROTECTION_DOC_POINTER, Jt as withPasteableAwsProfile, Kn as isRecreateRetryableError, Kt as producerRecordKey, L as ProtectionFlipRegistry, Ln as shellBoundedDisplay, Lt as formatLockExpiry, M as quotedRemedyLogicalId, Mn as isInertUnquoted, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as pasteableCommand, Nt as UNREPRODUCIBLE_LOCK_CLAUSE, On as SHELL_ACTIVE_WHY, Ot as hasCreatedBeforeFailure, Pn as physicalIdShownBesideCommand, Pt as buildForceUnlockCommand, Q as pasteableAwsCommand, Qn as isAmbiguousOutcomeError, Qt as credentialFingerprint, R as compensateProtectionFlip, Rn as shellQuote, Rt as formatLockOperation, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, U as protectionFlipKey, Un as hasReplayMayCollide, Ut as injectiveKey, Vt as CUSTOM_RESOURCE_RESPONSE_PREFIX, Wn as isNameCollisionErrorFrom, Xn as formatRetryClassificationSignals, Xt as ambientCredentialConfig, Yn as markReplayMayCollide, Yt as ambientClientDefaults, Zn as isAmbiguousCcHandlerErrorCode, Zt as clientDefaultsFor, _n as ResourceUpdateNotSupportedError, _t as createMaskedLogSinks, ar as isThrottlingError, at as startInterruptWatch, bn as StateError, bt as maskDeep, cr as wrapMaskedAwsError, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dn as MacroExpansionError, en as AssetError, er as isRetryableTransientError, f as removalWarning, fn as MalformedProducerRecordRefusalError, ft as logicalIdShown, gn as ResourceTimeoutError, gt as stateOrphanRecordRemedy, hn as ProvisioningError, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as DependencyError, ir as isMarkedNonRetryable, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jt as markAuxiliaryFailure, kn as UNSHOWABLE_VALUE, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, m as withoutInjectedRemovals, mt as resourceTypeShown, nr as retryClassificationText, on as DynamicReferenceRegionAmbiguousError, or as markNonRetryable, ot as ElapsedBudgetRegistry, qn as isReplayedNameCollisionFrom, rn as CrossAccountSecretRefusalError, sn as IntrinsicResolutionRefusalError, sr as markRedactedCause, st as monotonicNowMs, tn as CdkdError, tr as isTransientServerError, un as LockError, ut as compositeIdSeparatorRefusal, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wn as normalizeAwsError, wt as carryCreatedBeforeFailure, xn as SynthesisError, xt as maskerOrIdentity, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as withheldTargetClause, zt as formatLockOwner } from "./iam-policy-targets-BoZuWtxK.js";
4
4
  import { a as setAssumedRoleCredentials, i as getPreAssumeEnvCredentials, n as awsClientDefaults, o as setPreAssumeEnvCredentials, r as getAssumedRoleCredentials, s as ambientRegion, t as SECOND_ROLE_PUBLISH_REFUSAL } from "./aws-client-defaults-D0q0z4dG.js";
5
- import { t as getCdkdVersion } from "./version-Bdg2mYAM.js";
5
+ import { t as getCdkdVersion } from "./version-Bl_MI_r7.js";
6
6
  import { createHash, randomUUID } from "node:crypto";
7
7
  import { AsyncLocalStorage } from "node:async_hooks";
8
8
  import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
@@ -6659,217 +6659,6 @@ function positionByCrossStackSource(bag, source, secrets) {
6659
6659
  return certifiedExpressionForLeaf(secrets, association, bag);
6660
6660
  }
6661
6661
 
6662
- //#endregion
6663
- //#region src/deployment/secret-redaction/placeholder-positions.ts
6664
- function keyedPart(source) {
6665
- const key = crossStackSourceKey(source);
6666
- return key === void 0 ? UNKNOWN_PART : { key };
6667
- }
6668
- const MAX_PLACEHOLDER_DEPTH = 8;
6669
- function pushPlaceholderPart(out, part, budget) {
6670
- if (budget.remaining <= 0) {
6671
- budget.exhausted = true;
6672
- return;
6673
- }
6674
- budget.remaining -= 1;
6675
- out.push(part);
6676
- }
6677
- function appendValuePlaceholderParts(value, out, budget, depth) {
6678
- if (budget.exhausted) return;
6679
- const literal = joinPartLiteralText(value);
6680
- if (literal !== void 0) return pushPlaceholderPart(out, literal, budget);
6681
- if (isPlainObject$4(value) && Object.keys(value).length === 1) {
6682
- const ref = value["Ref"];
6683
- if (typeof ref === "string" && ref !== "") return pushPlaceholderPart(out, keyedPart({ Ref: ref }), budget);
6684
- if (depth >= MAX_PLACEHOLDER_DEPTH) {
6685
- budget.exhausted = true;
6686
- return;
6687
- }
6688
- if (appendParameterPlaceholderParts(value, out, budget, depth + 1)) return;
6689
- return pushPlaceholderPart(out, keyedPart(value), budget);
6690
- }
6691
- pushPlaceholderPart(out, UNKNOWN_PART, budget);
6692
- }
6693
- function appendParameterPlaceholderParts(source, out, budget, depth) {
6694
- const keys = Object.keys(source);
6695
- if (keys.length !== 1) return false;
6696
- const key = keys[0];
6697
- if (key === "Fn::Join") {
6698
- const args = source[key];
6699
- if (!Array.isArray(args) || args.length !== 2) return false;
6700
- const [delimiter, parts] = args;
6701
- if (typeof delimiter !== "string" || !Array.isArray(parts)) return false;
6702
- for (let index = 0; index < parts.length && !budget.exhausted; index++) {
6703
- if (index > 0) pushPlaceholderPart(out, delimiter, budget);
6704
- appendValuePlaceholderParts(parts[index], out, budget, depth);
6705
- }
6706
- return true;
6707
- }
6708
- if (key === "Fn::Sub") {
6709
- const args = source[key];
6710
- let template;
6711
- let variables = {};
6712
- if (typeof args === "string") template = args;
6713
- else if (Array.isArray(args) && args.length === 2 && isPlainObject$4(args[1])) {
6714
- template = args[0];
6715
- variables = args[1];
6716
- } else return false;
6717
- if (typeof template !== "string") return false;
6718
- let cursor = 0;
6719
- for (const hit of template.matchAll(/\$\{(!)?([^}]*)\}/g)) {
6720
- if (budget.exhausted) return true;
6721
- pushPlaceholderPart(out, template.slice(cursor, hit.index), budget);
6722
- cursor = hit.index + hit[0].length;
6723
- const name = hit[2] ?? "";
6724
- if (hit[1] === "!") pushPlaceholderPart(out, `\${${name}}`, budget);
6725
- else if (name === "") pushPlaceholderPart(out, hit[0], budget);
6726
- else if (Object.hasOwn(variables, name)) appendValuePlaceholderParts(variables[name], out, budget, depth);
6727
- else if (name.includes(".")) pushPlaceholderPart(out, keyedPart({ "Fn::GetAtt": name }), budget);
6728
- else pushPlaceholderPart(out, keyedPart({ Ref: name }), budget);
6729
- }
6730
- pushPlaceholderPart(out, template.slice(cursor), budget);
6731
- return true;
6732
- }
6733
- return false;
6734
- }
6735
- function parameterPlaceholderParts(source, bag) {
6736
- const budget = {
6737
- remaining: bag.length * 2 + 16,
6738
- exhausted: false
6739
- };
6740
- const out = [];
6741
- if (!appendParameterPlaceholderParts(source, out, budget, 0)) return void 0;
6742
- return budget.exhausted ? void 0 : out;
6743
- }
6744
- function positionByParameterPlaceholders(bag, source, secrets) {
6745
- const associations = crossStackAssociations.get(secrets);
6746
- if (associations === void 0) return void 0;
6747
- const spanned = positionByRecordedParameterSpans(bag, source, secrets, associations);
6748
- if (spanned !== void 0) return spanned;
6749
- const parts = parameterPlaceholderParts(source, bag);
6750
- if (parts === void 0) return void 0;
6751
- const before = ["", ""];
6752
- const after = ["", ""];
6753
- let side = before;
6754
- let unknown = false;
6755
- let certified = 0;
6756
- const spans = [];
6757
- for (const part of parts) {
6758
- let rendered;
6759
- let persisted;
6760
- if (typeof part === "string") {
6761
- rendered = part;
6762
- persisted = part;
6763
- } else {
6764
- let expression;
6765
- let plaintext = "";
6766
- if (part !== UNKNOWN_PART) {
6767
- const association = associations.get(part.key);
6768
- if (association !== void 0 && typeof association !== "symbol") {
6769
- plaintext = association.plaintext;
6770
- expression = certifiedExpressionForLeaf(secrets, association, plaintext);
6771
- }
6772
- }
6773
- if (expression === void 0) {
6774
- if (unknown) return void 0;
6775
- unknown = true;
6776
- side = after;
6777
- continue;
6778
- }
6779
- rendered = plaintext;
6780
- persisted = expression;
6781
- certified += 1;
6782
- spans.push([
6783
- side,
6784
- side[0].length,
6785
- plaintext.length
6786
- ]);
6787
- }
6788
- side[0] += rendered;
6789
- side[1] += persisted;
6790
- }
6791
- if (certified === 0) return void 0;
6792
- let persisted;
6793
- if (!unknown) {
6794
- if (before[0] !== bag) return void 0;
6795
- persisted = before[1];
6796
- } else {
6797
- if (bag.length < before[0].length + after[0].length) return void 0;
6798
- if (!bag.startsWith(before[0]) || !bag.endsWith(after[0])) return void 0;
6799
- const middle = bag.slice(before[0].length, bag.length - after[0].length);
6800
- if (redactSecretsForState(middle, secrets) !== middle) return void 0;
6801
- persisted = before[1] + middle + after[1];
6802
- }
6803
- const afterStart = bag.length - after[0].length;
6804
- return acceptedPlaceholderRendering(bag, persisted, spans.map(([side, offset, length]) => [(side === before ? 0 : afterStart) + offset, length]), secrets);
6805
- }
6806
- function acceptedPlaceholderRendering(bag, persisted, spans, secrets) {
6807
- for (const plaintext of secrets.keys()) {
6808
- if (plaintext.length < 4) continue;
6809
- for (let at = bag.indexOf(plaintext); at !== -1; at = bag.indexOf(plaintext, at + 1)) {
6810
- const end = at + plaintext.length;
6811
- for (const [start, length] of spans) if (at < start + length && end > start && (at < start || end > start + length)) return void 0;
6812
- }
6813
- }
6814
- if (redactSecretsForState(persisted, secrets) !== persisted) return void 0;
6815
- return persisted;
6816
- }
6817
- function positionByRecordedParameterSpans(bag, source, secrets, associations) {
6818
- const resolution = intrinsicLeafResolutionOf(secrets, source);
6819
- if (resolution === void 0 || resolution.output !== bag) return void 0;
6820
- const recorded = resolution.parameterSpans;
6821
- if (recorded === void 0) return void 0;
6822
- let previousEnd = 0;
6823
- let cursor = 0;
6824
- let persisted = "";
6825
- const gaps = [];
6826
- const certified = [];
6827
- for (const { start, length, key } of recorded) {
6828
- if (!(start >= previousEnd && length > 0 && start + length <= bag.length)) return void 0;
6829
- previousEnd = start + length;
6830
- const text = bag.slice(start, start + length);
6831
- const association = associations.get(key);
6832
- if (association === void 0 || typeof association === "symbol") continue;
6833
- const expression = certifiedExpressionForLeaf(secrets, association, text);
6834
- if (expression === void 0) continue;
6835
- const gap = bag.slice(cursor, start);
6836
- gaps.push(gap);
6837
- persisted += gap + expression;
6838
- certified.push([start, length]);
6839
- cursor = start + length;
6840
- }
6841
- if (certified.length === 0) return void 0;
6842
- const tail = bag.slice(cursor);
6843
- gaps.push(tail);
6844
- persisted += tail;
6845
- for (const gap of gaps) if (redactSecretsForState(gap, secrets) !== gap) return void 0;
6846
- return acceptedPlaceholderRendering(bag, persisted, certified, secrets);
6847
- }
6848
-
6849
- //#endregion
6850
- //#region src/deployment/secret-redaction/identity-keys.ts
6851
- const ARRAY_IDENTITY_KEYS = ["Name", "Key"];
6852
- function isUniquelyKeyedBy(items, key) {
6853
- if (items.length === 0) return false;
6854
- const seen = /* @__PURE__ */ new Set();
6855
- for (const item of items) {
6856
- if (!isPlainObject$4(item) || !Object.hasOwn(item, key)) return false;
6857
- const id = item[key];
6858
- if (typeof id !== "string" || id === "") return false;
6859
- if (seen.has(id)) return false;
6860
- seen.add(id);
6861
- }
6862
- return true;
6863
- }
6864
- function identityKeyFor(bag, source) {
6865
- for (const key of ARRAY_IDENTITY_KEYS) if (isUniquelyKeyedBy(bag, key) && isUniquelyKeyedBy(source, key)) return key;
6866
- }
6867
- function positionListByCrossStackSource(bag, source, secrets) {
6868
- const association = associationForSource(source, secrets);
6869
- if (association === void 0) return void 0;
6870
- return certifiedListForLeaf(secrets, association, bag);
6871
- }
6872
-
6873
6662
  //#endregion
6874
6663
  //#region src/deployment/secret-redaction/fresh-noecho.ts
6875
6664
  function embedsFreshNoEchoValue(text, secrets, freshClass) {
@@ -7000,6 +6789,7 @@ function recoverMaskedOutput(identity, stackName, region, outputKey) {
7000
6789
  //#region src/deployment/secret-redaction/nested-stack.ts
7001
6790
  const NESTED_STACK_RESOURCE_TYPE$4 = "AWS::CloudFormation::Stack";
7002
6791
  const nestedStackParameterExpressions = /* @__PURE__ */ new WeakMap();
6792
+ const renderedParameterSpellings = /* @__PURE__ */ new WeakMap();
7003
6793
  const UNFRAMED_SPELLING = Symbol("cdkd.nested-parameter.unframed-spelling");
7004
6794
  function recordNestedStackParameterExpressions(secrets, resourceType, resolvedProperties, sourceProperties, rules = TEMPLATE_DERIVED_RULES) {
7005
6795
  if (resourceType !== NESTED_STACK_RESOURCE_TYPE$4) return;
@@ -7012,6 +6802,23 @@ function recordNestedStackParameterExpressions(secrets, resourceType, resolvedPr
7012
6802
  if (!isPlainObject$4(resolvedParameters) || !isPlainObject$4(sourceParameters)) return;
7013
6803
  const positioned = redactSecretsForState(markSameGenerationBag({ ...resolvedParameters }), secrets, sourceParameters, rules);
7014
6804
  let table = nestedStackParameterExpressions.get(secrets);
6805
+ for (const [name, resolvedValue] of Object.entries(resolvedParameters)) {
6806
+ const sourceLeaf = sourceParameters[name];
6807
+ if (typeof resolvedValue !== "string" || typeof sourceLeaf !== "string") continue;
6808
+ if (isSingleDynamicReferenceToken(sourceLeaf) || positioned[name] !== sourceLeaf) continue;
6809
+ if (!rendersLiteralTo(sourceLeaf, secrets, resolvedValue)) continue;
6810
+ let rendered = renderedParameterSpellings.get(secrets);
6811
+ if (rendered === void 0) {
6812
+ rendered = /* @__PURE__ */ new Map();
6813
+ renderedParameterSpellings.set(secrets, rendered);
6814
+ }
6815
+ const previous = rendered.get(name);
6816
+ if (previous === void 0) rendered.set(name, {
6817
+ spelling: sourceLeaf,
6818
+ value: resolvedValue
6819
+ });
6820
+ else if (previous?.spelling !== sourceLeaf || previous.value !== resolvedValue) rendered.set(name, null);
6821
+ }
7015
6822
  for (const [name, resolvedValue] of Object.entries(resolvedParameters)) {
7016
6823
  if (typeof resolvedValue !== "string" || !secrets.has(resolvedValue)) continue;
7017
6824
  const expression = positioned[name];
@@ -7146,10 +6953,44 @@ function inheritNestedStackParameterAssociations(childSecrets, parentSecrets) {
7146
6953
  }
7147
6954
  function inheritedParameterExpression(parentSecrets, parameterName, resolvedValue) {
7148
6955
  const association = nestedStackParameterExpressions.get(parentSecrets)?.get(parameterName);
7149
- if (association === void 0 || typeof association === "symbol") return void 0;
6956
+ if (association === void 0) return renderedParameterSpelling(parentSecrets, parameterName, resolvedValue);
6957
+ if (typeof association === "symbol") return void 0;
7150
6958
  if (Array.isArray(resolvedValue)) return certifiedListForLeaf(parentSecrets, association, resolvedValue);
7151
6959
  return certifiedExpressionForLeaf(parentSecrets, association, resolvedValue);
7152
6960
  }
6961
+ function renderedParameterSpelling(parentSecrets, parameterName, resolvedValue) {
6962
+ if (typeof resolvedValue !== "string" || parentSecrets.has(resolvedValue)) return void 0;
6963
+ const rendered = renderedParameterSpellings.get(parentSecrets)?.get(parameterName);
6964
+ if (rendered == null || rendered.value !== resolvedValue) return void 0;
6965
+ if (!rendersLiteralTo(rendered.spelling, parentSecrets, resolvedValue)) return void 0;
6966
+ return rendered.spelling;
6967
+ }
6968
+ function inheritedRenderedToken(parentSecrets, parameterName, value, plaintext) {
6969
+ const spelling = inheritedParameterExpression(parentSecrets, parameterName, value);
6970
+ if (typeof spelling !== "string" || isSingleDynamicReferenceToken(spelling)) return void 0;
6971
+ return renderedTokenOf(spelling, parentSecrets, plaintext);
6972
+ }
6973
+ function withdrawRenderedParameterSpelling(parentSecrets, parameterName) {
6974
+ const rendered = renderedParameterSpellings.get(parentSecrets);
6975
+ if (rendered?.has(parameterName)) rendered.set(parameterName, null);
6976
+ }
6977
+ function inheritedRenderedSpan(childSecrets, key, text) {
6978
+ const reads = inheritedParameterReads.get(childSecrets);
6979
+ if (reads === void 0 || typeof reads === "symbol") return void 0;
6980
+ for (const name of reads.names) {
6981
+ if (crossStackSourceKey({ Ref: name }) !== key) continue;
6982
+ const value = renderedParameterSpellings.get(reads.parent)?.get(name)?.value;
6983
+ if (value === void 0 || text !== void 0 && text !== value) return void 0;
6984
+ if (carriesChildOnlyPlaintext(value, childSecrets, reads.parent)) return void 0;
6985
+ const spelling = inheritedParameterExpression(reads.parent, name, value);
6986
+ if (typeof spelling !== "string") return void 0;
6987
+ if (redactSecretsForState(spelling, childSecrets) !== spelling) return void 0;
6988
+ return {
6989
+ value,
6990
+ spelling
6991
+ };
6992
+ }
6993
+ }
7153
6994
  const inheritedParameterReads = /* @__PURE__ */ new WeakMap();
7154
6995
  const POISONED_PARAMETER_READS = Symbol("cdkd.inherited-parameter-reads.poisoned");
7155
6996
  function recordInheritedParameterRead(childSecrets, parentSecrets, parameterName) {
@@ -7199,6 +7040,222 @@ function carriesChildOnlyPlaintext(value, childSecrets, parentSecrets) {
7199
7040
  return visit(value);
7200
7041
  }
7201
7042
 
7043
+ //#endregion
7044
+ //#region src/deployment/secret-redaction/placeholder-positions.ts
7045
+ function keyedPart(source) {
7046
+ const key = crossStackSourceKey(source);
7047
+ return key === void 0 ? UNKNOWN_PART : { key };
7048
+ }
7049
+ const MAX_PLACEHOLDER_DEPTH = 8;
7050
+ function pushPlaceholderPart(out, part, budget) {
7051
+ if (budget.remaining <= 0) {
7052
+ budget.exhausted = true;
7053
+ return;
7054
+ }
7055
+ budget.remaining -= 1;
7056
+ out.push(part);
7057
+ }
7058
+ function appendValuePlaceholderParts(value, out, budget, depth) {
7059
+ if (budget.exhausted) return;
7060
+ const literal = joinPartLiteralText(value);
7061
+ if (literal !== void 0) return pushPlaceholderPart(out, literal, budget);
7062
+ if (isPlainObject$4(value) && Object.keys(value).length === 1) {
7063
+ const ref = value["Ref"];
7064
+ if (typeof ref === "string" && ref !== "") return pushPlaceholderPart(out, keyedPart({ Ref: ref }), budget);
7065
+ if (depth >= MAX_PLACEHOLDER_DEPTH) {
7066
+ budget.exhausted = true;
7067
+ return;
7068
+ }
7069
+ if (appendParameterPlaceholderParts(value, out, budget, depth + 1)) return;
7070
+ return pushPlaceholderPart(out, keyedPart(value), budget);
7071
+ }
7072
+ pushPlaceholderPart(out, UNKNOWN_PART, budget);
7073
+ }
7074
+ function appendParameterPlaceholderParts(source, out, budget, depth) {
7075
+ const keys = Object.keys(source);
7076
+ if (keys.length !== 1) return false;
7077
+ const key = keys[0];
7078
+ if (key === "Fn::Join") {
7079
+ const args = source[key];
7080
+ if (!Array.isArray(args) || args.length !== 2) return false;
7081
+ const [delimiter, parts] = args;
7082
+ if (typeof delimiter !== "string" || !Array.isArray(parts)) return false;
7083
+ for (let index = 0; index < parts.length && !budget.exhausted; index++) {
7084
+ if (index > 0) pushPlaceholderPart(out, delimiter, budget);
7085
+ appendValuePlaceholderParts(parts[index], out, budget, depth);
7086
+ }
7087
+ return true;
7088
+ }
7089
+ if (key === "Fn::Sub") {
7090
+ const args = source[key];
7091
+ let template;
7092
+ let variables = {};
7093
+ if (typeof args === "string") template = args;
7094
+ else if (Array.isArray(args) && args.length === 2 && isPlainObject$4(args[1])) {
7095
+ template = args[0];
7096
+ variables = args[1];
7097
+ } else return false;
7098
+ if (typeof template !== "string") return false;
7099
+ let cursor = 0;
7100
+ for (const hit of template.matchAll(/\$\{(!)?([^}]*)\}/g)) {
7101
+ if (budget.exhausted) return true;
7102
+ pushPlaceholderPart(out, template.slice(cursor, hit.index), budget);
7103
+ cursor = hit.index + hit[0].length;
7104
+ const name = hit[2] ?? "";
7105
+ if (hit[1] === "!") pushPlaceholderPart(out, `\${${name}}`, budget);
7106
+ else if (name === "") pushPlaceholderPart(out, hit[0], budget);
7107
+ else if (Object.hasOwn(variables, name)) appendValuePlaceholderParts(variables[name], out, budget, depth);
7108
+ else if (name.includes(".")) pushPlaceholderPart(out, keyedPart({ "Fn::GetAtt": name }), budget);
7109
+ else pushPlaceholderPart(out, keyedPart({ Ref: name }), budget);
7110
+ }
7111
+ pushPlaceholderPart(out, template.slice(cursor), budget);
7112
+ return true;
7113
+ }
7114
+ return false;
7115
+ }
7116
+ function parameterPlaceholderParts(source, bag) {
7117
+ const budget = {
7118
+ remaining: bag.length * 2 + 16,
7119
+ exhausted: false
7120
+ };
7121
+ const out = [];
7122
+ if (!appendParameterPlaceholderParts(source, out, budget, 0)) return void 0;
7123
+ return budget.exhausted ? void 0 : out;
7124
+ }
7125
+ function positionByParameterPlaceholders(bag, source, secrets) {
7126
+ const associations = crossStackAssociations.get(secrets);
7127
+ const spanned = positionByRecordedParameterSpans(bag, source, secrets, associations);
7128
+ if (spanned !== void 0) return spanned;
7129
+ const parts = parameterPlaceholderParts(source, bag);
7130
+ if (parts === void 0) return void 0;
7131
+ const before = ["", ""];
7132
+ const after = ["", ""];
7133
+ let side = before;
7134
+ let unknown = false;
7135
+ let certified = 0;
7136
+ const spans = [];
7137
+ for (const part of parts) {
7138
+ let rendered;
7139
+ let persisted;
7140
+ if (typeof part === "string") {
7141
+ rendered = part;
7142
+ persisted = part;
7143
+ } else {
7144
+ let expression;
7145
+ let plaintext = "";
7146
+ if (part !== UNKNOWN_PART) {
7147
+ const association = associations?.get(part.key);
7148
+ if (association !== void 0 && typeof association !== "symbol") {
7149
+ plaintext = association.plaintext;
7150
+ expression = certifiedExpressionForLeaf(secrets, association, plaintext);
7151
+ }
7152
+ if (expression === void 0) {
7153
+ const inherited = inheritedRenderedSpan(secrets, part.key);
7154
+ if (inherited !== void 0) {
7155
+ plaintext = inherited.value;
7156
+ expression = inherited.spelling;
7157
+ }
7158
+ }
7159
+ }
7160
+ if (expression === void 0) {
7161
+ if (unknown) return void 0;
7162
+ unknown = true;
7163
+ side = after;
7164
+ continue;
7165
+ }
7166
+ rendered = plaintext;
7167
+ persisted = expression;
7168
+ certified += 1;
7169
+ spans.push([
7170
+ side,
7171
+ side[0].length,
7172
+ plaintext.length
7173
+ ]);
7174
+ }
7175
+ side[0] += rendered;
7176
+ side[1] += persisted;
7177
+ }
7178
+ if (certified === 0) return void 0;
7179
+ let persisted;
7180
+ if (!unknown) {
7181
+ if (before[0] !== bag) return void 0;
7182
+ persisted = before[1];
7183
+ } else {
7184
+ if (bag.length < before[0].length + after[0].length) return void 0;
7185
+ if (!bag.startsWith(before[0]) || !bag.endsWith(after[0])) return void 0;
7186
+ const middle = bag.slice(before[0].length, bag.length - after[0].length);
7187
+ if (redactSecretsForState(middle, secrets) !== middle) return void 0;
7188
+ persisted = before[1] + middle + after[1];
7189
+ }
7190
+ const afterStart = bag.length - after[0].length;
7191
+ return acceptedPlaceholderRendering(bag, persisted, spans.map(([side, offset, length]) => [(side === before ? 0 : afterStart) + offset, length]), secrets);
7192
+ }
7193
+ function acceptedPlaceholderRendering(bag, persisted, spans, secrets) {
7194
+ for (const plaintext of secrets.keys()) {
7195
+ if (plaintext.length < 4) continue;
7196
+ for (let at = bag.indexOf(plaintext); at !== -1; at = bag.indexOf(plaintext, at + 1)) {
7197
+ const end = at + plaintext.length;
7198
+ for (const [start, length] of spans) if (at < start + length && end > start && (at < start || end > start + length)) return void 0;
7199
+ }
7200
+ }
7201
+ if (redactSecretsForState(persisted, secrets) !== persisted) return void 0;
7202
+ return persisted;
7203
+ }
7204
+ function positionByRecordedParameterSpans(bag, source, secrets, associations) {
7205
+ const resolution = intrinsicLeafResolutionOf(secrets, source);
7206
+ if (resolution === void 0 || resolution.output !== bag) return void 0;
7207
+ const recorded = resolution.parameterSpans;
7208
+ if (recorded === void 0) return void 0;
7209
+ let previousEnd = 0;
7210
+ let cursor = 0;
7211
+ let persisted = "";
7212
+ const gaps = [];
7213
+ const certified = [];
7214
+ for (const { start, length, key } of recorded) {
7215
+ if (!(start >= previousEnd && length > 0 && start + length <= bag.length)) return void 0;
7216
+ previousEnd = start + length;
7217
+ const text = bag.slice(start, start + length);
7218
+ const association = associations?.get(key);
7219
+ const expression = (association !== void 0 && typeof association !== "symbol" ? certifiedExpressionForLeaf(secrets, association, text) : void 0) ?? inheritedRenderedSpan(secrets, key, text)?.spelling;
7220
+ if (expression === void 0) continue;
7221
+ const gap = bag.slice(cursor, start);
7222
+ gaps.push(gap);
7223
+ persisted += gap + expression;
7224
+ certified.push([start, length]);
7225
+ cursor = start + length;
7226
+ }
7227
+ if (certified.length === 0) return void 0;
7228
+ const tail = bag.slice(cursor);
7229
+ gaps.push(tail);
7230
+ persisted += tail;
7231
+ for (const gap of gaps) if (redactSecretsForState(gap, secrets) !== gap) return void 0;
7232
+ return acceptedPlaceholderRendering(bag, persisted, certified, secrets);
7233
+ }
7234
+
7235
+ //#endregion
7236
+ //#region src/deployment/secret-redaction/identity-keys.ts
7237
+ const ARRAY_IDENTITY_KEYS = ["Name", "Key"];
7238
+ function isUniquelyKeyedBy(items, key) {
7239
+ if (items.length === 0) return false;
7240
+ const seen = /* @__PURE__ */ new Set();
7241
+ for (const item of items) {
7242
+ if (!isPlainObject$4(item) || !Object.hasOwn(item, key)) return false;
7243
+ const id = item[key];
7244
+ if (typeof id !== "string" || id === "") return false;
7245
+ if (seen.has(id)) return false;
7246
+ seen.add(id);
7247
+ }
7248
+ return true;
7249
+ }
7250
+ function identityKeyFor(bag, source) {
7251
+ for (const key of ARRAY_IDENTITY_KEYS) if (isUniquelyKeyedBy(bag, key) && isUniquelyKeyedBy(source, key)) return key;
7252
+ }
7253
+ function positionListByCrossStackSource(bag, source, secrets) {
7254
+ const association = associationForSource(source, secrets);
7255
+ if (association === void 0) return void 0;
7256
+ return certifiedListForLeaf(secrets, association, bag);
7257
+ }
7258
+
7202
7259
  //#endregion
7203
7260
  //#region src/deployment/secret-redaction/redact-path.ts
7204
7261
  function redactByPath(bag, source, secrets, rules, secretExpressions, bagIsSameGeneration) {
@@ -7737,11 +7794,67 @@ function singleSpanFrame(bag, source) {
7737
7794
  }
7738
7795
  function positionByEmbeddedSpan(bag, source, secrets, bagIsSameGeneration) {
7739
7796
  const frame = singleSpanFrame(bag, source);
7740
- if (frame === void 0) return redactSecretsForState(bag, secrets);
7797
+ if (frame === void 0) {
7798
+ if (dynamicReferenceSpans(source).length >= 2 && certifiesRenderedLiteral(bag, source, secrets, bagIsSameGeneration)) return source;
7799
+ return redactSecretsForState(bag, secrets);
7800
+ }
7741
7801
  const recorded = resolvedPlaintextOf(secrets, frame.token);
7742
7802
  if (recorded === void 0 || recorded !== frame.middle) return redactSecretsForState(bag, secrets);
7743
7803
  return writeFramedTokenWithinScanBound(bag, secrets, frame, bagIsSameGeneration);
7744
7804
  }
7805
+ function pairedSpans(source, secrets) {
7806
+ const spans = dynamicReferenceSpans(source);
7807
+ if (spans.length === 0) return void 0;
7808
+ const out = [];
7809
+ for (const span of spans) {
7810
+ const plaintext = resolvedPlaintextOf(secrets, source.slice(span.start, span.end));
7811
+ if (plaintext === void 0 || plaintext === "") return void 0;
7812
+ if (isSingleDynamicReferenceToken(plaintext)) return void 0;
7813
+ out.push({
7814
+ ...span,
7815
+ plaintext
7816
+ });
7817
+ }
7818
+ return out;
7819
+ }
7820
+ function renderedTokenOf(spelling, secrets, plaintext) {
7821
+ const spans = pairedSpans(spelling, secrets);
7822
+ if (spans === void 0) return void 0;
7823
+ const tokens = new Set(spans.filter((span) => span.plaintext === plaintext).map((span) => spelling.slice(span.start, span.end)));
7824
+ return tokens.size === 1 ? [...tokens][0] : void 0;
7825
+ }
7826
+ function renderSpans(source, spans, textOf) {
7827
+ let out = "";
7828
+ let cursor = 0;
7829
+ spans.forEach((span, index) => {
7830
+ out += source.slice(cursor, span.start) + textOf(index);
7831
+ cursor = span.end;
7832
+ });
7833
+ return out + source.slice(cursor);
7834
+ }
7835
+ function rendersLiteralTo(spelling, secrets, value) {
7836
+ return renderedLiteralSpans(spelling, secrets, value) !== void 0;
7837
+ }
7838
+ function renderedLiteralSpans(spelling, secrets, value) {
7839
+ const spans = pairedSpans(spelling, secrets);
7840
+ if (spans === void 0) return void 0;
7841
+ if (renderSpans(spelling, spans, (i) => spans[i].plaintext) !== value) return void 0;
7842
+ return redactSecretsForState(spelling, secrets) === spelling ? spans : void 0;
7843
+ }
7844
+ function certifiesRenderedLiteral(bag, source, secrets, bagIsSameGeneration) {
7845
+ const spans = renderedLiteralSpans(source, secrets, bag);
7846
+ if (spans === void 0) return false;
7847
+ const survivors = [];
7848
+ for (const span of spans) {
7849
+ const survivor = secrets.get(span.plaintext);
7850
+ if (survivor === void 0) return false;
7851
+ survivors.push(survivor);
7852
+ }
7853
+ const scanned = redactSecretsForState(bag, secrets);
7854
+ if (scanned === renderSpans(source, spans, (i) => survivors[i])) return true;
7855
+ if (!bagIsSameGeneration) return false;
7856
+ return scanned === renderSpans(source, spans, (i) => spans[i].plaintext.length >= 4 ? survivors[i] : spans[i].plaintext);
7857
+ }
7745
7858
  function writeFramedTokenWithinScanBound(bag, secrets, frame, bagIsSameGeneration) {
7746
7859
  const scanned = redactSecretsForState(bag, secrets);
7747
7860
  const { token, prefix, suffix, middle } = frame;
@@ -10060,7 +10173,11 @@ const CREATE_ONLY_PATHS_SNAPSHOT = /* @__PURE__ */ new Map([
10060
10173
  ["AWS::AutoScaling::AutoScalingGroup", [["AutoScalingGroupName"], ["InstanceId"]]],
10061
10174
  ["AWS::BedrockAgentCore::Browser", []],
10062
10175
  ["AWS::BedrockAgentCore::CodeInterpreter", []],
10063
- ["AWS::BedrockAgentCore::Evaluator", [["EvaluatorName"]]],
10176
+ ["AWS::BedrockAgentCore::Evaluator", [[
10177
+ "EvaluatorConfig",
10178
+ "Derived",
10179
+ "BaseEvaluatorId"
10180
+ ], ["EvaluatorName"]]],
10064
10181
  ["AWS::BedrockAgentCore::Runtime", [["AgentRuntimeName"]]],
10065
10182
  ["AWS::Budgets::Budget", [["NotificationsWithSubscribers"]]],
10066
10183
  ["AWS::CertificateManager::Certificate", [
@@ -10338,7 +10455,8 @@ const CREATE_ONLY_PATHS_SNAPSHOT = /* @__PURE__ */ new Map([
10338
10455
  ["AWS::Glue::Table", [
10339
10456
  ["CatalogId"],
10340
10457
  ["DatabaseName"],
10341
- ["Name"]
10458
+ ["Name"],
10459
+ ["TableInput", "Name"]
10342
10460
  ]],
10343
10461
  ["AWS::Glue::Trigger", [
10344
10462
  ["Name"],
@@ -12807,6 +12925,8 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
12807
12925
  "CreatedAt",
12808
12926
  "EvaluatorArn",
12809
12927
  "EvaluatorId",
12928
+ "EvaluatorType",
12929
+ "Provider",
12810
12930
  "Status",
12811
12931
  "UpdatedAt"
12812
12932
  ]),
@@ -14052,7 +14172,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
14052
14172
  ]),
14053
14173
  silentDrop: /* @__PURE__ */ new Map(),
14054
14174
  createOnlyDrops: /* @__PURE__ */ new Set(),
14055
- readOnly: /* @__PURE__ */ new Set(["Id"]),
14175
+ readOnly: /* @__PURE__ */ new Set(),
14056
14176
  ccRouteUnavailable: true
14057
14177
  }],
14058
14178
  ["AWS::Glue::Trigger", {
@@ -20823,12 +20943,92 @@ function recordInheritedParameterSecrets(parameterName, value, context) {
20823
20943
  if (inherited && recorded) recordInheritedNoEchoListElements(this, inherited, recorded, value, context);
20824
20944
  if (!inherited || inherited.size === 0 || !recorded) return;
20825
20945
  for (const [plaintext, expression] of inheritedSecretsCarriedBy(value, inherited)) {
20826
- const own = inheritedParameterExpression(inherited, parameterName, plaintext);
20827
- recorded.set(plaintext, typeof own === "string" ? own : expression);
20946
+ recorded.set(plaintext, carriedExpressionFor(inherited, parameterName, value, plaintext, expression));
20828
20947
  recordInheritedParameterRead(recorded, inherited, parameterName);
20829
20948
  carryFreshNoEchoMark(inherited, recorded, plaintext);
20830
20949
  }
20831
20950
  }
20951
+ function carriedExpressionFor(inherited, parameterName, value, plaintext, survivor) {
20952
+ const own = inheritedParameterExpression(inherited, parameterName, plaintext);
20953
+ if (typeof own === "string") return own;
20954
+ return inheritedRenderedToken(inherited, parameterName, value, plaintext) ?? survivor;
20955
+ }
20956
+ function poisonRenderedSpellingsCollidingIn(template, parameterValues, inherited) {
20957
+ if (!inherited || inherited.size === 0 || template === void 0) return;
20958
+ const names = new Set(Object.keys(parameterValues));
20959
+ if (names.size < 2) return;
20960
+ const groups = [];
20961
+ if (template.Resources !== null && typeof template.Resources === "object") for (const resource of Object.values(template.Resources)) groups.push([resource, false]);
20962
+ if (template.Outputs !== void 0) groups.push([template.Outputs, true]);
20963
+ const readsByGroup = groups.map(([group, countBareRefs]) => parameterReadsOf(group, names, countBareRefs)).filter((reads) => reads.size >= 2);
20964
+ const withdrawn = /* @__PURE__ */ new Set();
20965
+ for (;;) {
20966
+ const fresh = [...collidingRenderedNames(readsByGroup, parameterValues, inherited)].filter((name) => !withdrawn.has(name));
20967
+ if (fresh.length === 0) return;
20968
+ for (const name of fresh) {
20969
+ withdrawn.add(name);
20970
+ withdrawRenderedParameterSpelling(inherited, name);
20971
+ }
20972
+ }
20973
+ }
20974
+ function collidingRenderedNames(readsByGroup, parameterValues, inherited) {
20975
+ const withdraw = /* @__PURE__ */ new Set();
20976
+ for (const reads of readsByGroup) {
20977
+ const byPlaintext = /* @__PURE__ */ new Map();
20978
+ const slotReadPlaintexts = /* @__PURE__ */ new Set();
20979
+ for (const [name, slotRead] of reads) {
20980
+ if (!Object.hasOwn(parameterValues, name)) continue;
20981
+ const value = parameterValues[name];
20982
+ for (const [plaintext, survivor] of inheritedSecretsCarriedBy(value, inherited)) {
20983
+ const expression = carriedExpressionFor(inherited, name, value, plaintext, survivor);
20984
+ const rendered = typeof inheritedParameterExpression(inherited, name, plaintext) !== "string" && inheritedRenderedToken(inherited, name, value, plaintext) !== void 0;
20985
+ let byExpression = byPlaintext.get(plaintext);
20986
+ if (byExpression === void 0) {
20987
+ byExpression = /* @__PURE__ */ new Map();
20988
+ byPlaintext.set(plaintext, byExpression);
20989
+ }
20990
+ let renderedNames = byExpression.get(expression);
20991
+ if (renderedNames === void 0) {
20992
+ renderedNames = [];
20993
+ byExpression.set(expression, renderedNames);
20994
+ }
20995
+ if (rendered) renderedNames.push(name);
20996
+ if (slotRead) slotReadPlaintexts.add(plaintext);
20997
+ }
20998
+ }
20999
+ for (const [plaintext, byExpression] of byPlaintext) {
21000
+ if (byExpression.size < 2 || !slotReadPlaintexts.has(plaintext)) continue;
21001
+ for (const renderedNames of byExpression.values()) for (const name of renderedNames) withdraw.add(name);
21002
+ }
21003
+ }
21004
+ return withdraw;
21005
+ }
21006
+ const POSITIONED_INTRINSICS = /* @__PURE__ */ new Set(["Fn::Join", "Fn::Sub"]);
21007
+ function parameterReadsOf(node, names, countBareRefs) {
21008
+ const reads = /* @__PURE__ */ new Map();
21009
+ const add = (name, slotRead) => {
21010
+ reads.set(name, slotRead || reads.get(name) === true);
21011
+ };
21012
+ const visit = (value, slotRead) => {
21013
+ if (Array.isArray(value)) {
21014
+ for (const element of value) visit(element, slotRead);
21015
+ return;
21016
+ }
21017
+ if (value === null || typeof value !== "object") return;
21018
+ const record = value;
21019
+ const ref = record["Ref"];
21020
+ if (typeof ref === "string" && names.has(ref)) add(ref, slotRead);
21021
+ const sub = record["Fn::Sub"];
21022
+ const text = typeof sub === "string" ? sub : Array.isArray(sub) ? sub[0] : void 0;
21023
+ if (typeof text === "string") for (const match of text.matchAll(/\$\{([^}!][^}]*)\}/g)) {
21024
+ const name = match[1].trim();
21025
+ if (names.has(name)) add(name, slotRead);
21026
+ }
21027
+ for (const [key, child] of Object.entries(record)) visit(child, slotRead || key.startsWith("Fn::") && !POSITIONED_INTRINSICS.has(key));
21028
+ };
21029
+ visit(node, countBareRefs);
21030
+ return reads;
21031
+ }
20832
21032
  function recordInheritedNoEchoListElements(resolver, inherited, recorded, value, context) {
20833
21033
  if (!Array.isArray(value)) return;
20834
21034
  const parameterValues = [...inherited.keys()].filter((plaintext) => isNoEchoParameterPlaintext(inherited, plaintext));
@@ -22716,7 +22916,7 @@ var CloudControlProvider = class {
22716
22916
  const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
22717
22917
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
22718
22918
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
22719
- const { ASGProvider } = await import("./asg-provider-BbWC_1l5.js");
22919
+ const { ASGProvider } = await import("./asg-provider-Bgno8Vo9.js");
22720
22920
  const delegateRegion = ambientRegion();
22721
22921
  let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
22722
22922
  if (asgProvider === void 0) {
@@ -22822,7 +23022,7 @@ var CloudControlProvider = class {
22822
23022
  const family = SDK_DELETE_FAMILIES.get(resourceType);
22823
23023
  const cached = this.sdkDeleteDelegates.get(family);
22824
23024
  if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
22825
- const provider = family === "rds" ? new (await (import("./rds-provider-e6XtJAGl.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-DlSon_pZ.js"))).NeptuneProvider({ region: ccRegion });
23025
+ const provider = family === "rds" ? new (await (import("./rds-provider-iDLOVERv.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-Dp8_fNO_.js"))).NeptuneProvider({ region: ccRegion });
22826
23026
  this.sdkDeleteDelegates.set(family, {
22827
23027
  region: ccRegion,
22828
23028
  provider
@@ -24715,6 +24915,9 @@ const NESTED_REQUIRED = /* @__PURE__ */ new Map([
24715
24915
  ["AWS::BedrockAgentCore::Evaluator", /* @__PURE__ */ new Map([
24716
24916
  ["EvaluatorConfig.CodeBased", ["LambdaConfig"]],
24717
24917
  ["EvaluatorConfig.CodeBased.LambdaConfig", ["LambdaArn"]],
24918
+ ["EvaluatorConfig.Derived", ["BaseEvaluatorId", "ModelConfig"]],
24919
+ ["EvaluatorConfig.Derived.ModelConfig.BedrockEvaluatorModelConfig", ["ModelId"]],
24920
+ ["EvaluatorConfig.Derived.ModelConfig.ResponsesEvaluatorModelConfig", ["ModelId"]],
24718
24921
  ["EvaluatorConfig.LlmAsAJudge", [
24719
24922
  "Instructions",
24720
24923
  "ModelConfig",
@@ -26139,7 +26342,7 @@ const PROPERTY_SHAPES = /* @__PURE__ */ new Map([
26139
26342
  ["AWS::AppSync::GraphQLApi", "{\"AdditionalAuthenticationProviders\":\"array\",\"AdditionalAuthenticationProviders[]\":\"object\",\"AdditionalAuthenticationProviders[].LambdaAuthorizerConfig\":\"object\",\"AdditionalAuthenticationProviders[].OpenIDConnectConfig\":\"object\",\"AdditionalAuthenticationProviders[].UserPoolConfig\":\"object\",\"EnhancedMetricsConfig\":\"object\",\"EnvironmentVariables\":\"object\",\"LambdaAuthorizerConfig\":\"object\",\"LogConfig\":\"object\",\"OpenIDConnectConfig\":\"object\",\"Tags\":\"array\",\"Tags[]\":\"object\",\"UserPoolConfig\":\"object\"}"],
26140
26343
  ["AWS::AppSync::Resolver", "{\"CachingConfig\":\"object\",\"CachingConfig.CachingKeys\":\"array\",\"PipelineConfig\":\"object\",\"PipelineConfig.Functions\":\"array\",\"Runtime\":\"object\",\"SyncConfig\":\"object\",\"SyncConfig.LambdaConflictHandlerConfig\":\"object\"}"],
26141
26344
  ["AWS::AutoScaling::AutoScalingGroup", "{\"AvailabilityZoneDistribution\":\"object\",\"AvailabilityZoneIds\":\"array\",\"AvailabilityZoneImpairmentPolicy\":\"object\",\"AvailabilityZones\":\"array\",\"CapacityReservationSpecification\":\"object\",\"CapacityReservationSpecification.CapacityReservationTarget\":\"object\",\"CapacityReservationSpecification.CapacityReservationTarget.CapacityReservationIds\":\"array\",\"CapacityReservationSpecification.CapacityReservationTarget.CapacityReservationResourceGroupArns\":\"array\",\"InstanceLifecyclePolicy\":\"object\",\"InstanceLifecyclePolicy.RetentionTriggers\":\"object\",\"InstanceMaintenancePolicy\":\"object\",\"LaunchTemplate\":\"object\",\"LifecycleHookSpecificationList\":\"array\",\"LifecycleHookSpecificationList[]\":\"object\",\"LoadBalancerNames\":\"array\",\"MetricsCollection\":\"array\",\"MetricsCollection[]\":\"object\",\"MetricsCollection[].Metrics\":\"array\",\"MixedInstancesPolicy\":\"object\",\"MixedInstancesPolicy.InstancesDistribution\":\"object\",\"MixedInstancesPolicy.InstancesDistribution.DistributionSegments\":\"array\",\"MixedInstancesPolicy.InstancesDistribution.DistributionSegments[]\":\"object\",\"MixedInstancesPolicy.InstancesDistribution.DistributionSegments[].TargetCapacityTypes\":\"array\",\"MixedInstancesPolicy.LaunchTemplate\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.LaunchTemplateSpecification\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides\":\"array\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[]\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.AcceleratorCount\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.AcceleratorManufacturers\":\"array\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.AcceleratorNames\":\"array\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.AcceleratorTotalMemoryMiB\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.AcceleratorTypes\":\"array\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.AllowedInstanceTypes\":\"array\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.BaselineEbsBandwidthMbps\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.BaselinePerformanceFactors\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.BaselinePerformanceFactors.Cpu\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.BaselinePerformanceFactors.Cpu.References\":\"array\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.BaselinePerformanceFactors.Cpu.References[]\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.CpuManufacturers\":\"array\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.ExcludedInstanceTypes\":\"array\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.InstanceGenerations\":\"array\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.LocalStorageTypes\":\"array\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.MemoryGiBPerVCpu\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.MemoryMiB\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.NetworkBandwidthGbps\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.NetworkInterfaceCount\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.TotalLocalStorageGB\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].InstanceRequirements.VCpuCount\":\"object\",\"MixedInstancesPolicy.LaunchTemplate.Overrides[].LaunchTemplateSpecification\":\"object\",\"NotificationConfiguration\":\"object\",\"NotificationConfiguration.NotificationTypes\":\"array\",\"NotificationConfigurations\":\"array\",\"NotificationConfigurations[]\":\"object\",\"NotificationConfigurations[].NotificationTypes\":\"array\",\"Tags\":\"array\",\"Tags[]\":\"object\",\"TargetGroupARNs\":\"array\",\"TerminationPolicies\":\"array\",\"TrafficSources\":\"array\",\"TrafficSources[]\":\"object\",\"VPCZoneIdentifier\":\"array\"}"],
26142
- ["AWS::BedrockAgentCore::Evaluator", "{\"EvaluatorConfig\":\"object\",\"EvaluatorConfig.CodeBased\":\"object\",\"EvaluatorConfig.CodeBased.LambdaConfig\":\"object\",\"EvaluatorConfig.LlmAsAJudge\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig.BedrockEvaluatorModelConfig\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig.BedrockEvaluatorModelConfig.AdditionalModelRequestFields\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig.BedrockEvaluatorModelConfig.InferenceConfig\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig.ResponsesEvaluatorModelConfig\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig.ResponsesEvaluatorModelConfig.Reasoning\":\"object\",\"EvaluatorConfig.LlmAsAJudge.RatingScale\":\"object\",\"EvaluatorConfig.LlmAsAJudge.RatingScale.Categorical\":\"array\",\"EvaluatorConfig.LlmAsAJudge.RatingScale.Categorical[]\":\"object\",\"EvaluatorConfig.LlmAsAJudge.RatingScale.Numerical\":\"array\",\"EvaluatorConfig.LlmAsAJudge.RatingScale.Numerical[]\":\"object\",\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
26345
+ ["AWS::BedrockAgentCore::Evaluator", "{\"EvaluatorConfig\":\"object\",\"EvaluatorConfig.CodeBased\":\"object\",\"EvaluatorConfig.CodeBased.LambdaConfig\":\"object\",\"EvaluatorConfig.Derived\":\"object\",\"EvaluatorConfig.Derived.ModelConfig\":\"object\",\"EvaluatorConfig.Derived.ModelConfig.BedrockEvaluatorModelConfig\":\"object\",\"EvaluatorConfig.Derived.ModelConfig.BedrockEvaluatorModelConfig.AdditionalModelRequestFields\":\"object\",\"EvaluatorConfig.Derived.ModelConfig.BedrockEvaluatorModelConfig.InferenceConfig\":\"object\",\"EvaluatorConfig.Derived.ModelConfig.ResponsesEvaluatorModelConfig\":\"object\",\"EvaluatorConfig.Derived.ModelConfig.ResponsesEvaluatorModelConfig.Reasoning\":\"object\",\"EvaluatorConfig.LlmAsAJudge\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig.BedrockEvaluatorModelConfig\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig.BedrockEvaluatorModelConfig.AdditionalModelRequestFields\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig.BedrockEvaluatorModelConfig.InferenceConfig\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig.ResponsesEvaluatorModelConfig\":\"object\",\"EvaluatorConfig.LlmAsAJudge.ModelConfig.ResponsesEvaluatorModelConfig.Reasoning\":\"object\",\"EvaluatorConfig.LlmAsAJudge.RatingScale\":\"object\",\"EvaluatorConfig.LlmAsAJudge.RatingScale.Categorical\":\"array\",\"EvaluatorConfig.LlmAsAJudge.RatingScale.Categorical[]\":\"object\",\"EvaluatorConfig.LlmAsAJudge.RatingScale.Numerical\":\"array\",\"EvaluatorConfig.LlmAsAJudge.RatingScale.Numerical[]\":\"object\",\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
26143
26346
  ["AWS::BedrockAgentCore::Runtime", "{\"AgentRuntimeArtifact\":\"object\",\"AgentRuntimeArtifact.CodeConfiguration\":\"object\",\"AgentRuntimeArtifact.CodeConfiguration.Code\":\"object\",\"AgentRuntimeArtifact.CodeConfiguration.Code.S3\":\"object\",\"AgentRuntimeArtifact.CodeConfiguration.EntryPoint\":\"array\",\"AgentRuntimeArtifact.ContainerConfiguration\":\"object\",\"AuthorizerConfiguration\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.AllowedAudience\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.AllowedClients\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.AllowedScopes\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.AllowedWorkloadConfiguration\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.AllowedWorkloadConfiguration.HostingEnvironments\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.AllowedWorkloadConfiguration.HostingEnvironments[]\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.AllowedWorkloadConfiguration.WorkloadIdentities\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.CustomClaims\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.CustomClaims[]\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.CustomClaims[].AuthorizingClaimMatchValue\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.CustomClaims[].AuthorizingClaimMatchValue.ClaimMatchValue\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.CustomClaims[].AuthorizingClaimMatchValue.ClaimMatchValue.MatchValueStringList\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpoint\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpoint.ManagedVpcResource\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpoint.ManagedVpcResource.SecurityGroupIds\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpoint.ManagedVpcResource.SubnetIds\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpoint.ManagedVpcResource.Tags\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpoint.SelfManagedLatticeResource\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpointOverrides\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpointOverrides[]\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpointOverrides[].PrivateEndpoint\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpointOverrides[].PrivateEndpoint.ManagedVpcResource\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpointOverrides[].PrivateEndpoint.ManagedVpcResource.SecurityGroupIds\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpointOverrides[].PrivateEndpoint.ManagedVpcResource.SubnetIds\":\"array\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpointOverrides[].PrivateEndpoint.ManagedVpcResource.Tags\":\"object\",\"AuthorizerConfiguration.CustomJWTAuthorizer.PrivateEndpointOverrides[].PrivateEndpoint.SelfManagedLatticeResource\":\"object\",\"CapacityProviderConfiguration\":\"object\",\"EnvironmentVariables\":\"object\",\"FilesystemConfigurations\":\"array\",\"FilesystemConfigurations[]\":\"object\",\"FilesystemConfigurations[].CapacityProviderVolume\":\"object\",\"FilesystemConfigurations[].EfsAccessPoint\":\"object\",\"FilesystemConfigurations[].S3FilesAccessPoint\":\"object\",\"FilesystemConfigurations[].SessionStorage\":\"object\",\"LifecycleConfiguration\":\"object\",\"NetworkConfiguration\":\"object\",\"NetworkConfiguration.NetworkModeConfig\":\"object\",\"NetworkConfiguration.NetworkModeConfig.SecurityGroups\":\"array\",\"NetworkConfiguration.NetworkModeConfig.Subnets\":\"array\",\"RequestHeaderConfiguration\":\"object\",\"RequestHeaderConfiguration.RequestHeaderAllowlist\":\"array\",\"Tags\":\"object\",\"WorkloadIdentityDetails\":\"object\"}"],
26144
26347
  ["AWS::CertificateManager::Certificate", "{\"DomainValidationOptions\":\"array\",\"DomainValidationOptions[]\":\"object\",\"SubjectAlternativeNames\":\"array\",\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
26145
26348
  ["AWS::CloudFormation::Stack", "{\"Capabilities\":\"array\",\"NotificationARNs\":\"array\",\"Outputs\":\"array\",\"Outputs[]\":\"object\",\"Parameters\":\"object\",\"StackPolicyBody\":\"object\",\"Tags\":\"array\",\"Tags[]\":\"object\"}"],
@@ -26185,6 +26388,7 @@ const PROPERTY_SHAPES = /* @__PURE__ */ new Map([
26185
26388
  ["AWS::Glue::Database", "{\"DatabaseInput\":\"object\",\"DatabaseInput.CreateTableDefaultPermissions\":\"array\",\"DatabaseInput.CreateTableDefaultPermissions[]\":\"object\",\"DatabaseInput.CreateTableDefaultPermissions[].Permissions\":\"array\",\"DatabaseInput.CreateTableDefaultPermissions[].Principal\":\"object\",\"DatabaseInput.FederatedDatabase\":\"object\",\"DatabaseInput.Parameters\":\"object\",\"DatabaseInput.TargetDatabase\":\"object\"}"],
26186
26389
  ["AWS::Glue::Job", "{\"Command\":\"object\",\"Connections\":\"object\",\"Connections.Connections\":\"array\",\"DefaultArguments\":\"object\",\"ExecutionProperty\":\"object\",\"NonOverridableArguments\":\"object\",\"NotificationProperty\":\"object\",\"Tags\":\"object\"}"],
26187
26390
  ["AWS::Glue::SecurityConfiguration", "{\"EncryptionConfiguration\":\"object\",\"EncryptionConfiguration.CloudWatchEncryption\":\"object\",\"EncryptionConfiguration.JobBookmarksEncryption\":\"object\",\"EncryptionConfiguration.S3Encryptions\":\"array\",\"EncryptionConfiguration.S3Encryptions[]\":\"object\"}"],
26391
+ ["AWS::Glue::Table", "{\"OpenTableFormatInput\":\"object\",\"OpenTableFormatInput.IcebergInput\":\"object\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput\":\"object\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.PartitionSpec\":\"object\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.PartitionSpec.Fields\":\"array\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.PartitionSpec.Fields[]\":\"object\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.Properties\":\"object\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.Schema\":\"object\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.Schema.Fields\":\"array\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.Schema.Fields[]\":\"object\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.Schema.IdentifierFieldIds\":\"array\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.WriteOrder\":\"object\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.WriteOrder.Fields\":\"array\",\"OpenTableFormatInput.IcebergInput.IcebergTableInput.WriteOrder.Fields[]\":\"object\",\"TableInput\":\"object\",\"TableInput.Parameters\":\"object\",\"TableInput.PartitionKeys\":\"array\",\"TableInput.PartitionKeys[]\":\"object\",\"TableInput.StorageDescriptor\":\"object\",\"TableInput.StorageDescriptor.BucketColumns\":\"array\",\"TableInput.StorageDescriptor.Columns\":\"array\",\"TableInput.StorageDescriptor.Columns[]\":\"object\",\"TableInput.StorageDescriptor.Parameters\":\"object\",\"TableInput.StorageDescriptor.SchemaReference\":\"object\",\"TableInput.StorageDescriptor.SchemaReference.SchemaId\":\"object\",\"TableInput.StorageDescriptor.SerdeInfo\":\"object\",\"TableInput.StorageDescriptor.SerdeInfo.Parameters\":\"object\",\"TableInput.StorageDescriptor.SkewedInfo\":\"object\",\"TableInput.StorageDescriptor.SkewedInfo.SkewedColumnNames\":\"array\",\"TableInput.StorageDescriptor.SkewedInfo.SkewedColumnValueLocationMaps\":\"object\",\"TableInput.StorageDescriptor.SkewedInfo.SkewedColumnValues\":\"array\",\"TableInput.StorageDescriptor.SortColumns\":\"array\",\"TableInput.StorageDescriptor.SortColumns[]\":\"object\",\"TableInput.TargetTable\":\"object\",\"TableInput.ViewDefinition\":\"object\",\"TableInput.ViewDefinition.Representations\":\"array\",\"TableInput.ViewDefinition.Representations[]\":\"object\",\"TableInput.ViewDefinition.SubObjects\":\"array\"}"],
26188
26392
  ["AWS::Glue::Trigger", "{\"Actions\":\"array\",\"Actions[]\":\"object\",\"Actions[].Arguments\":\"object\",\"Actions[].NotificationProperty\":\"object\",\"EventBatchingCondition\":\"object\",\"Predicate\":\"object\",\"Predicate.Conditions\":\"array\",\"Predicate.Conditions[]\":\"object\",\"Tags\":\"object\"}"],
26189
26393
  ["AWS::Glue::Workflow", "{\"DefaultRunProperties\":\"object\",\"Tags\":\"object\"}"],
26190
26394
  ["AWS::IAM::Group", "{\"ManagedPolicyArns\":\"array\",\"Policies\":\"array\",\"Policies[]\":\"object\"}"],
@@ -35934,6 +36138,7 @@ async function provisionCreate(logicalId, change, stateResources, stackName, tem
35934
36138
  provisionedBy: createDecision.provisionedBy
35935
36139
  };
35936
36140
  this.recordInlinePolicyWrite(logicalId, "create");
36141
+ await this.establishNoEchoEchoFidelity(logicalId, stateResources[logicalId], resolvedProps, stateResources, createSecrets);
35937
36142
  const createCaptureSiblings = await this.buildObservedCaptureSiblings(resourceType, logicalId, result.physicalId, template, stateResources, stackName, parameterValues, conditions);
35938
36143
  this.kickOffObservedCapture(createProvider, logicalId, result.physicalId, resourceType, resolvedProps, {
35939
36144
  ...createCaptureSiblings,
@@ -36041,6 +36246,509 @@ function recordedProtectionNote(evidence, flags) {
36041
36246
  return `${evidence}. AWS refuses to delete the resource while that protection is on, and cdkd deploy has no --remove-protection flag to clear it (only cdkd destroy and cdkd state destroy act on one), so ${flags} alone does not remove the old resource: depending on the replacement order, the deploy either fails at that delete or completes leaving the old resource, and its data, in AWS and no longer tracked by cdkd. Read ${DELETION_PROTECTION_DOC_POINTER} before you disable anything, then turn the protection off out of band (the console, or the service's own API) and re-run with ${flags}.`;
36042
36247
  }
36043
36248
 
36249
+ //#endregion
36250
+ //#region src/deployment/deploy-engine/noecho.ts
36251
+ function noEchoExactEchoLeavesOf(record) {
36252
+ const field = record?.noEchoExactEchoLeaves;
36253
+ if (!Array.isArray(field)) return void 0;
36254
+ const out = [];
36255
+ for (const entry of field) {
36256
+ if (!Array.isArray(entry) || entry.length === 0) return void 0;
36257
+ if (!entry.every((segment) => typeof segment === "string")) return void 0;
36258
+ out.push([...entry]);
36259
+ }
36260
+ return out;
36261
+ }
36262
+ function echoFidelityCandidates(coordinates, resolved, createOnly) {
36263
+ const out = [];
36264
+ for (const coordinate of coordinates) {
36265
+ if (!coordinate.every((segment) => typeof segment === "string")) continue;
36266
+ const keys = coordinate;
36267
+ if (!createOnly.some((path) => path.length <= keys.length && path.every((s, i) => s === keys[i]))) continue;
36268
+ const plaintext = valueAtCoordinate(resolved, keys);
36269
+ if (typeof plaintext !== "string" || carriesSecretMask(plaintext)) continue;
36270
+ out.push({
36271
+ coordinate: keys,
36272
+ plaintext
36273
+ });
36274
+ }
36275
+ return out;
36276
+ }
36277
+ function reportedLeafAt(live, handed, candidate) {
36278
+ if (valueAtCoordinate(handed, candidate.coordinate) !== "***") return void 0;
36279
+ const leaf = valueAtCoordinate(live, candidate.coordinate);
36280
+ return typeof leaf === "string" && !carriesSecretMask(leaf) ? leaf : void 0;
36281
+ }
36282
+ function echoesExactlyAt(live, handed, candidate) {
36283
+ return reportedLeafAt(live, handed, candidate) === candidate.plaintext;
36284
+ }
36285
+ function provesEchoChangeAt(live, handed, candidate) {
36286
+ const reported = reportedLeafAt(live, handed, candidate);
36287
+ return reported !== void 0 && reported !== candidate.plaintext;
36288
+ }
36289
+ function noteNoEchoExactEchoes(logicalId, physicalId, read, handed, candidates, mode) {
36290
+ const exact = "failure" in read ? [] : candidates.filter((candidate) => echoesExactlyAt(read.live, handed, candidate)).map((candidate) => [...candidate.coordinate]);
36291
+ const noted = this.noEchoExactEchoes.get(logicalId);
36292
+ const previous = mode === "add" && noted?.physicalId === physicalId ? noted.coordinates : [];
36293
+ this.noEchoExactEchoes.set(logicalId, {
36294
+ physicalId,
36295
+ coordinates: sortedCoordinates([...previous, ...exact])
36296
+ });
36297
+ }
36298
+ function sortedCoordinates(coordinates) {
36299
+ const keyed = /* @__PURE__ */ new Map();
36300
+ for (const coordinate of coordinates) keyed.set(JSON.stringify(coordinate), [...coordinate]);
36301
+ return [...keyed.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([, c]) => c);
36302
+ }
36303
+ async function establishNoEchoEchoFidelity(logicalId, record, resolvedProps, stateResources, secrets) {
36304
+ this.noEchoExactEchoes.delete(logicalId);
36305
+ const templateProps = this.perResourceTemplateProps.get(logicalId);
36306
+ const sources = this.noEchoPositionSources(stateResources);
36307
+ if (templateProps === void 0 || sources === void 0 || sources.parameters.size === 0) return;
36308
+ const coordinates = canonicalCoordinates(noEchoCoordinatesOf(templateProps, resolvedProps, {
36309
+ parameters: sources.parameters,
36310
+ ...sources.conditions !== void 0 && { conditions: sources.conditions }
36311
+ }));
36312
+ if (coordinates.length === 0) return;
36313
+ const candidates = echoFidelityCandidates(coordinates, resolvedProps, await getCreateOnlyPropertyPaths(record.resourceType).catch(() => []));
36314
+ if (candidates.length === 0) return;
36315
+ const handed = {
36316
+ ...record,
36317
+ properties: maskAtCoordinates(record.properties, coordinates)
36318
+ };
36319
+ const read = await this.readReaderForFreshNoEchoCeiling(logicalId, handed, secrets);
36320
+ this.noteNoEchoExactEchoes(logicalId, record.physicalId, read, handed.properties, candidates, "set");
36321
+ }
36322
+ function withNoEchoExactEchoes(logicalId, record) {
36323
+ const noted = this.noEchoExactEchoes.get(logicalId);
36324
+ if (noted === void 0 || noted.coordinates.length === 0) return record;
36325
+ if (noted.physicalId !== record.physicalId) return record;
36326
+ const merged = sortedCoordinates([...noEchoExactEchoLeavesOf(record) ?? [], ...noted.coordinates]);
36327
+ return {
36328
+ ...record,
36329
+ noEchoExactEchoLeaves: merged
36330
+ };
36331
+ }
36332
+ function noEchoParameterNamesOf(template) {
36333
+ const names = /* @__PURE__ */ new Set();
36334
+ const declared = template?.Parameters;
36335
+ if (declared === null || typeof declared !== "object") return names;
36336
+ for (const [name, definition] of Object.entries(declared)) {
36337
+ const noEcho = definition?.NoEcho;
36338
+ if (noEcho === true || noEcho === "true") names.add(name);
36339
+ }
36340
+ return names;
36341
+ }
36342
+ function noEchoAttributeNamesOf(record) {
36343
+ const field = record?.noEchoAttributeNames;
36344
+ if (!Array.isArray(field) || !field.every((name) => typeof name === "string")) return void 0;
36345
+ return field;
36346
+ }
36347
+ function noEchoPositionSources(resources = {}, template = this.constructPathTemplate, conditions = this.noEchoConditions) {
36348
+ if (template === void 0) return void 0;
36349
+ const declared = this.noEchoAttributeResources;
36350
+ return {
36351
+ parameters: /* @__PURE__ */ new Set([...noEchoParameterNamesOf(template), ...this.inheritedNoEchoParameters]),
36352
+ attributeIsNoEcho: (logicalId, attribute) => {
36353
+ const live = declared.get(logicalId);
36354
+ if (live === true || live !== void 0 && live.has(attribute)) return true;
36355
+ if (noEchoAttributeNamesOf(Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0)?.includes(attribute) === true) return true;
36356
+ return this.persistedNoEchoAttributes.get(logicalId)?.has(attribute) === true;
36357
+ },
36358
+ ...conditions !== void 0 && { conditions }
36359
+ };
36360
+ }
36361
+ function noEchoLeavesFor(logicalId, record, templateProps, sources) {
36362
+ if (templateProps !== void 0 && isWrittenFromDeployedTemplate(record.properties)) return canonicalCoordinates(noEchoCoordinatesOf(templateProps, record.properties, sources));
36363
+ const existing = noEchoLeavesOf(record);
36364
+ if (existing !== void 0) return canonicalCoordinates(existing);
36365
+ const resolvedAsSame = this.perResourceResolvedType.get(logicalId) === record.resourceType;
36366
+ const source = (templateProps !== void 0 && resolvedAsSame ? templateProps : void 0) ?? templatePropertiesFor(this, logicalId, record.resourceType);
36367
+ if (source === void 0) return void 0;
36368
+ return canonicalCoordinates(noEchoCoordinatesOf(source, record.properties, sources));
36369
+ }
36370
+ function templatePropertiesFor(engine, logicalId, resourceType) {
36371
+ const resources = engine.constructPathTemplate?.Resources;
36372
+ if (resources === void 0 || !Object.hasOwn(resources, logicalId)) return void 0;
36373
+ const definition = resources[logicalId];
36374
+ if (definition?.Type !== resourceType) return void 0;
36375
+ const properties = definition.Properties;
36376
+ return properties !== null && typeof properties === "object" && !Array.isArray(properties) ? properties : void 0;
36377
+ }
36378
+ function noEchoAttributeNamesFor(engine, logicalId, record, carried, leaves) {
36379
+ const attributes = record.attributes ?? {};
36380
+ const names = /* @__PURE__ */ new Set();
36381
+ let echoed = false;
36382
+ for (const coordinate of leaves ?? []) {
36383
+ const value = valueAtCoordinate(record.properties, coordinate);
36384
+ if (value === void 0 || carriesSecretMask(value)) continue;
36385
+ for (const [name, attribute] of Object.entries(attributes)) {
36386
+ if (carriesSecretMask(attribute)) continue;
36387
+ if (typeof attribute === "string" && attribute === record.physicalId) continue;
36388
+ const sameName = coordinate[0] === name && keyOrderFreeJson(attribute) === keyOrderFreeJson(value);
36389
+ const embeds = typeof value === "string" && typeof attribute === "string" && !attribute.startsWith("arn:") && value.length >= 4 && typeof attribute === "string" && attribute.includes(value);
36390
+ if (sameName || embeds) {
36391
+ names.add(name);
36392
+ echoed = true;
36393
+ }
36394
+ }
36395
+ }
36396
+ const declared = carried ? void 0 : engine.noEchoAttributeResources.get(logicalId);
36397
+ if (declared === true) for (const name of Object.keys(attributes)) names.add(name);
36398
+ else if (declared !== void 0) {
36399
+ for (const name of declared) if (Object.hasOwn(attributes, name)) names.add(name);
36400
+ }
36401
+ const prior = noEchoAttributeNamesOf(record);
36402
+ for (const name of prior ?? []) if (Object.hasOwn(attributes, name) && carriesSecretMask(attributes[name])) names.add(name);
36403
+ if (declared === void 0 && prior === void 0 && !echoed) return void 0;
36404
+ return [...names].sort();
36405
+ }
36406
+ function applyNoEchoPersist(logicalId, record, scrubbed, templateProps, resources, secrets, carried = false) {
36407
+ const sources = this.noEchoPositionSources(resources);
36408
+ if (sources === void 0) return scrubbed;
36409
+ const leaves = this.noEchoLeavesFor(logicalId, record, templateProps, sources);
36410
+ const names = noEchoAttributeNamesFor(this, logicalId, record, carried, leaves);
36411
+ if (leaves === void 0 && names === void 0) return scrubbed;
36412
+ const next = { ...scrubbed };
36413
+ if (leaves !== void 0) {
36414
+ next.properties = maskAtCoordinates(scrubbed.properties, leaves);
36415
+ if (scrubbed.observedProperties !== void 0 && leaves.length > 0) Object.assign(next, { observedProperties: maskReadbackAtCoordinates(scrubbed.observedProperties, record.properties, leaves) });
36416
+ if (leaves.length > 0) next.noEchoLeaves = leaves;
36417
+ else delete next.noEchoLeaves;
36418
+ const marked = new Set(leaves.map((coordinate) => JSON.stringify(coordinate)));
36419
+ const exact = (noEchoExactEchoLeavesOf(scrubbed) ?? []).filter((coordinate) => marked.has(JSON.stringify(coordinate)));
36420
+ if (exact.length > 0) next.noEchoExactEchoLeaves = exact;
36421
+ else delete next.noEchoExactEchoLeaves;
36422
+ }
36423
+ if (names !== void 0) {
36424
+ if (scrubbed.attributes !== void 0 && names.length > 0) {
36425
+ const attributes = { ...scrubbed.attributes };
36426
+ for (const name of names) if (Object.hasOwn(attributes, name)) attributes[name] = maskWholeValue(attributes[name]);
36427
+ next.attributes = attributes;
36428
+ }
36429
+ if (names.length > 0) next.noEchoAttributeNames = names;
36430
+ else delete next.noEchoAttributeNames;
36431
+ }
36432
+ this.warnNoEchoPhysicalId(logicalId, record, secrets);
36433
+ return next;
36434
+ }
36435
+ function warnNoEchoPhysicalId(logicalId, record, secrets) {
36436
+ if (secrets === void 0 || this.noEchoPhysicalIdWarned.has(logicalId)) return;
36437
+ const values = noEchoParameterPlaintextsOf(secrets);
36438
+ if (values.length === 0 || typeof record.physicalId !== "string") return;
36439
+ if (!values.some((value) => record.physicalId.includes(value))) return;
36440
+ this.noEchoPhysicalIdWarned.add(logicalId);
36441
+ this.logger.warn(this.maskForResource(logicalId, safeMsg`${logicalId}: its physical id contains a NoEcho parameter value. AWS publishes a resource's name, so cdkd keeps the physical id in state as AWS returns it.`));
36442
+ }
36443
+ function seedPersistedNoEchoAttributes(resources) {
36444
+ this.persistedNoEchoAttributes = /* @__PURE__ */ new Map();
36445
+ for (const [logicalId, record] of Object.entries(resources)) {
36446
+ const names = noEchoAttributeNamesOf(record);
36447
+ if (names !== void 0 && names.length > 0) this.persistedNoEchoAttributes.set(logicalId, new Set(names));
36448
+ }
36449
+ }
36450
+ function maskOutputsByPosition(outputs) {
36451
+ const sources = this.noEchoPositionSources();
36452
+ if (sources === void 0) return outputs;
36453
+ const templateValues = Object.create(null);
36454
+ for (const [name, definition] of Object.entries(this.constructPathTemplate?.Outputs ?? {})) templateValues[name] = definition?.Value;
36455
+ if (this.outputsSourceUsable) for (const [name, value] of Object.entries(this.outputsTemplateSource)) templateValues[name] = value;
36456
+ const coordinates = noEchoCoordinatesOf(templateValues, outputs, sources);
36457
+ if (coordinates.length === 0) return outputs;
36458
+ const maskedValues = new Set(coordinates.filter((coordinate) => coordinate.length === 1 && typeof coordinate[0] === "string").map((coordinate) => keyOrderFreeJson(outputs[coordinate[0]])));
36459
+ const aliasCoordinates = Object.keys(outputs).filter((key) => !Object.hasOwn(templateValues, key) && outputs[key] !== void 0 && !carriesSecretMask(outputs[key]) && maskedValues.has(keyOrderFreeJson(outputs[key]))).map((key) => [key]);
36460
+ return maskAtCoordinates(outputs, [...coordinates, ...aliasCoordinates]);
36461
+ }
36462
+ function getAttTargetsOf(node) {
36463
+ const targets = [];
36464
+ const seen = /* @__PURE__ */ new Set();
36465
+ const subVariable = /\$\{([^}!][^}]*)\}/g;
36466
+ const walk = (value) => {
36467
+ if (value === null || typeof value !== "object" || seen.has(value)) return;
36468
+ seen.add(value);
36469
+ if (Array.isArray(value)) {
36470
+ for (const item of value) walk(item);
36471
+ return;
36472
+ }
36473
+ const record = value;
36474
+ const getAtt = record["Fn::GetAtt"];
36475
+ if (typeof getAtt === "string" && getAtt.indexOf(".") > 0) {
36476
+ const dot = getAtt.indexOf(".");
36477
+ targets.push([getAtt.slice(0, dot), getAtt.slice(dot + 1)]);
36478
+ } else if (Array.isArray(getAtt) && typeof getAtt[0] === "string" && typeof getAtt[1] === "string") targets.push([getAtt[0], getAtt[1]]);
36479
+ const sub = record["Fn::Sub"];
36480
+ const text = typeof sub === "string" ? sub : Array.isArray(sub) ? sub[0] : void 0;
36481
+ if (typeof text === "string") for (const match of text.matchAll(subVariable)) {
36482
+ const name = match[1].trim();
36483
+ const dot = name.indexOf(".");
36484
+ if (dot > 0) targets.push([name.slice(0, dot), name.slice(dot + 1)]);
36485
+ }
36486
+ for (const child of Object.values(record)) walk(child);
36487
+ };
36488
+ walk(node);
36489
+ return targets;
36490
+ }
36491
+ async function noEchoAttributeOverridesFor(desiredProps, stateResources, stackName) {
36492
+ const wanted = /* @__PURE__ */ new Map();
36493
+ for (const [logicalId, attribute] of getAttTargetsOf(desiredProps)) {
36494
+ const record = Object.hasOwn(stateResources, logicalId) ? stateResources[logicalId] : void 0;
36495
+ if (record === void 0) continue;
36496
+ if (noEchoAttributeNamesOf(record)?.includes(attribute) !== true) continue;
36497
+ if (!carriesSecretMask(record.attributes?.[attribute])) continue;
36498
+ if (!this.perResourceSecrets.has(logicalId)) continue;
36499
+ const set = wanted.get(logicalId) ?? /* @__PURE__ */ new Set();
36500
+ set.add(attribute);
36501
+ wanted.set(logicalId, set);
36502
+ }
36503
+ if (wanted.size === 0) return void 0;
36504
+ const overrides = /* @__PURE__ */ new Map();
36505
+ for (const [logicalId, attributes] of wanted) {
36506
+ const record = stateResources[logicalId];
36507
+ let read = this.noEchoAttributeReads.get(logicalId);
36508
+ if (read === void 0) {
36509
+ read = (async () => {
36510
+ try {
36511
+ const { provider } = this.providerRegistry.getProviderFor({
36512
+ resourceType: record.resourceType,
36513
+ properties: record.properties,
36514
+ provisionedBy: record.provisionedBy,
36515
+ previousProperties: record.properties
36516
+ });
36517
+ const outcome = await readRecordAttributes({
36518
+ provider,
36519
+ logicalId,
36520
+ resource: record,
36521
+ stackName,
36522
+ region: this.stackRegion
36523
+ });
36524
+ return outcome.kind === "read" ? outcome.attributes : void 0;
36525
+ } catch {
36526
+ return;
36527
+ }
36528
+ })();
36529
+ this.noEchoAttributeReads.set(logicalId, read);
36530
+ }
36531
+ const live = await read;
36532
+ if (live === void 0) continue;
36533
+ const secrets = this.perResourceSecrets.get(logicalId);
36534
+ const fresh = noEchoParameterPlaintextsOf(secrets);
36535
+ const positioned = this.noEchoPositionedValues.get(logicalId) ?? /* @__PURE__ */ new Set();
36536
+ const served = {};
36537
+ for (const attribute of attributes) {
36538
+ if (!Object.hasOwn(live, attribute)) continue;
36539
+ const value = live[attribute];
36540
+ if (typeof value === "string" && fresh.some((needle) => value === needle || value.includes(needle)) || value !== void 0 && positioned.has(keyOrderFreeJson(value))) served[attribute] = value;
36541
+ }
36542
+ if (Object.keys(served).length > 0) overrides.set(logicalId, served);
36543
+ }
36544
+ return overrides.size > 0 ? overrides : void 0;
36545
+ }
36546
+ function noEchoDiffComparison(resources, template, conditions, parameterValues, stackName) {
36547
+ const sources = this.noEchoPositionSources(resources, template, conditions);
36548
+ if (sources === void 0) return void 0;
36549
+ const compare = noEchoComparison({
36550
+ sources,
36551
+ values: parameterValues,
36552
+ minNeedleLength: 4,
36553
+ publicTokens: /* @__PURE__ */ new Set([this.stackRegion, ...stackName === void 0 ? [] : [stackName]])
36554
+ });
36555
+ return (input) => compare(input);
36556
+ }
36557
+ function freshNoEchoParametersWithDeclared(inherited, template) {
36558
+ const all = /* @__PURE__ */ new Set([...inherited ?? [], ...noEchoParameterNamesOf(template)]);
36559
+ return all.size > 0 ? all : void 0;
36560
+ }
36561
+ function noEchoComparisonForTemplate(template, knownConditions, values, resources, publicTokens, inheritedNoEchoParameters) {
36562
+ const sources = {
36563
+ parameters: /* @__PURE__ */ new Set([...noEchoParameterNamesOf(template), ...inheritedNoEchoParameters ?? []]),
36564
+ attributeIsNoEcho: (logicalId, attribute) => noEchoAttributeNamesOf(Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0)?.includes(attribute) === true,
36565
+ ...knownConditions !== void 0 && { conditions: knownConditions }
36566
+ };
36567
+ const compare = noEchoComparison({
36568
+ sources,
36569
+ values: values ?? {},
36570
+ minNeedleLength: 4,
36571
+ ...publicTokens !== void 0 && { publicTokens }
36572
+ });
36573
+ return (input) => compare(input);
36574
+ }
36575
+
36576
+ //#endregion
36577
+ //#region src/deployment/resource-deadline.ts
36578
+ var InvalidResourceDeadlineError = class extends Error {
36579
+ constructor(message) {
36580
+ super(message);
36581
+ this.name = "InvalidResourceDeadlineError";
36582
+ }
36583
+ };
36584
+ function validateOptions(opts) {
36585
+ const { warnAfterMs, timeoutMs } = opts;
36586
+ if (!Number.isFinite(warnAfterMs) || !Number.isFinite(timeoutMs) || warnAfterMs <= 0 || timeoutMs <= 0) throw new InvalidResourceDeadlineError(`withResourceDeadline: warnAfterMs and timeoutMs must be positive finite numbers (got warnAfterMs=${warnAfterMs}, timeoutMs=${timeoutMs})`);
36587
+ if (warnAfterMs >= timeoutMs) throw new InvalidResourceDeadlineError(`withResourceDeadline: warnAfterMs (${warnAfterMs}ms) must be less than timeoutMs (${timeoutMs}ms)`);
36588
+ }
36589
+ async function withResourceDeadline(operation, opts) {
36590
+ validateOptions(opts);
36591
+ return new Promise((resolve, reject) => {
36592
+ let settled = false;
36593
+ let timedOut = false;
36594
+ let warned = false;
36595
+ let warnTimer;
36596
+ let timeoutTimer;
36597
+ let elapsedBeforePause = 0;
36598
+ let runningSince = Date.now();
36599
+ let pauses = 0;
36600
+ const elapsed = () => elapsedBeforePause + (pauses > 0 ? 0 : Date.now() - runningSince);
36601
+ const cleanup = () => {
36602
+ if (warnTimer !== void 0) clearTimeout(warnTimer);
36603
+ if (timeoutTimer !== void 0) clearTimeout(timeoutTimer);
36604
+ warnTimer = void 0;
36605
+ timeoutTimer = void 0;
36606
+ };
36607
+ const arm = () => {
36608
+ if (opts.onWarn && !warned) warnTimer = setTimeout(() => {
36609
+ if (settled) return;
36610
+ warned = true;
36611
+ try {
36612
+ opts.onWarn(elapsed());
36613
+ } catch {}
36614
+ }, Math.max(0, opts.warnAfterMs - elapsed()));
36615
+ timeoutTimer = setTimeout(() => {
36616
+ if (settled) return;
36617
+ settled = true;
36618
+ timedOut = true;
36619
+ cleanup();
36620
+ reject(opts.onTimeout(elapsed()));
36621
+ }, Math.max(0, opts.timeoutMs - elapsed()));
36622
+ };
36623
+ arm();
36624
+ const outer = deadlineScope.getStore();
36625
+ const control = {
36626
+ pause: () => {
36627
+ pauses += 1;
36628
+ if (pauses === 1) {
36629
+ elapsedBeforePause += Date.now() - runningSince;
36630
+ cleanup();
36631
+ }
36632
+ outer?.pause();
36633
+ },
36634
+ resume: () => {
36635
+ if (pauses === 0) return;
36636
+ pauses -= 1;
36637
+ if (pauses === 0) {
36638
+ runningSince = Date.now();
36639
+ if (!settled) arm();
36640
+ }
36641
+ outer?.resume();
36642
+ },
36643
+ expired: () => timedOut || (outer?.expired() ?? false)
36644
+ };
36645
+ Promise.resolve().then(() => deadlineScope.run(control, operation)).then((value) => {
36646
+ if (settled) return;
36647
+ settled = true;
36648
+ cleanup();
36649
+ resolve(value);
36650
+ }, (err) => {
36651
+ if (settled) return;
36652
+ settled = true;
36653
+ cleanup();
36654
+ reject(err);
36655
+ });
36656
+ });
36657
+ }
36658
+ const deadlineScope = new AsyncLocalStorage();
36659
+ async function whileEnclosingDeadlinesPaused(fn) {
36660
+ const control = deadlineScope.getStore();
36661
+ if (control === void 0) return fn();
36662
+ control.pause();
36663
+ try {
36664
+ return await fn();
36665
+ } finally {
36666
+ control.resume();
36667
+ }
36668
+ }
36669
+ function enclosingDeadlineExpired() {
36670
+ return deadlineScope.getStore()?.expired() ?? false;
36671
+ }
36672
+
36673
+ //#endregion
36674
+ //#region src/deployment/deployment-approval.ts
36675
+ const NESTED_STACK_TYPE$1 = "AWS::CloudFormation::Stack";
36676
+ async function requireDeploymentApproval(args) {
36677
+ const level = args.options.requireApproval ?? "never";
36678
+ const approve = args.options.approveDeployment;
36679
+ if (level === "never" || approve === void 0) return;
36680
+ const changes = [...args.changes].filter((c) => c.changeType !== "NO_CHANGE" && !isNoEchoPromotionOnly(c));
36681
+ const destructiveChanges = findDestructiveChanges(args.stackName, changes, args.records, args.template, new Set(args.recreateTargetIds ?? []));
36682
+ const onlyNestedUpdates = changes.every((c) => c.changeType === "UPDATE" && c.resourceType === NESTED_STACK_TYPE$1);
36683
+ if (!(level === "destructive" ? destructiveChanges.length > 0 : changes.length > 0 && !onlyNestedUpdates)) return;
36684
+ const count = (type) => changes.filter((c) => c.changeType === type).length;
36685
+ if (enclosingDeadlineExpired()) throw approvalAfterTimeout(args.stackName);
36686
+ let approved;
36687
+ try {
36688
+ approved = await whileEnclosingDeadlinesPaused(() => approve({
36689
+ stackName: args.stackName,
36690
+ level,
36691
+ counts: {
36692
+ create: count("CREATE"),
36693
+ update: count("UPDATE"),
36694
+ delete: count("DELETE")
36695
+ },
36696
+ destructiveChanges
36697
+ }));
36698
+ } catch (error) {
36699
+ throw error instanceof Error ? markNonRetryable(error) : error;
36700
+ }
36701
+ if (!approved) throw markNonRetryable(new CdkdError(safeMsg`Deployment of stack ${args.stackName} was not approved (--require-approval=${level}). Nothing was changed.`, "DEPLOY_NOT_APPROVED"));
36702
+ }
36703
+ async function approveLateReplacement(args) {
36704
+ const level = args.options.requireApproval ?? "never";
36705
+ const approve = args.options.approveDeployment;
36706
+ if (level === "never" || approve === void 0) return true;
36707
+ if (enclosingDeadlineExpired()) return false;
36708
+ try {
36709
+ return await whileEnclosingDeadlinesPaused(() => approve({
36710
+ stackName: args.stackName,
36711
+ level,
36712
+ counts: {
36713
+ create: 0,
36714
+ update: 1,
36715
+ delete: 0
36716
+ },
36717
+ destructiveChanges: findDestructiveChanges(args.stackName, [args.change], args.records, args.template)
36718
+ }));
36719
+ } catch {
36720
+ return false;
36721
+ }
36722
+ }
36723
+ function approvalAfterTimeout(stackName) {
36724
+ return markNonRetryable(new CdkdError(safeMsg`Deployment of stack ${stackName} was not started: its parent's nested-stack row already timed out (--resource-timeout). Nothing was changed.`, "DEPLOY_APPROVAL_AFTER_TIMEOUT"));
36725
+ }
36726
+ async function requireOutputsOnlyApproval(args) {
36727
+ const approve = args.options.approveDeployment;
36728
+ if (args.options.requireApproval !== "any-change" || approve === void 0) return;
36729
+ if (enclosingDeadlineExpired()) throw approvalAfterTimeout(args.stackName);
36730
+ let approved;
36731
+ try {
36732
+ approved = await whileEnclosingDeadlinesPaused(() => approve({
36733
+ stackName: args.stackName,
36734
+ level: "any-change",
36735
+ counts: {
36736
+ create: 0,
36737
+ update: 0,
36738
+ delete: 0
36739
+ },
36740
+ destructiveChanges: [],
36741
+ outputsOnly: true
36742
+ }));
36743
+ } catch (error) {
36744
+ throw error instanceof Error ? markNonRetryable(error) : error;
36745
+ }
36746
+ if (!approved) throw markNonRetryable(new CdkdError(safeMsg`Deployment of stack ${args.stackName} was not approved (--require-approval=any-change). Nothing was changed.`, "DEPLOY_NOT_APPROVED"));
36747
+ }
36748
+ function isNoEchoPromotionOnly(change) {
36749
+ return change.changeType === "UPDATE" && (change.attributeChanges?.length ?? 0) === 0 && (change.propertyChanges?.length ?? 0) > 0 && change.propertyChanges.every((pc) => pc.noEchoPromoted === true);
36750
+ }
36751
+
36044
36752
  //#endregion
36045
36753
  //#region src/deployment/deploy-engine/update.ts
36046
36754
  function isWhollyMask(value) {
@@ -36148,7 +36856,8 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
36148
36856
  const allowedForRecord = allowedSilentDrops ?? /* @__PURE__ */ new Set();
36149
36857
  const createOnlyEvidence = acceptedCreateOnlyDropsOf(currentResource);
36150
36858
  const recordedAsWritten = currentResource.provisionedBy === "cc-api" ? currentProps : withoutUnwrittenSilentDropProperties(resourceType, currentProps, desiredForSkipCheck, allowedForRecord, createOnlyEvidence);
36151
- const todayAsWritten = noEchoLeavesOf(currentResource) === void 0 ? redactSecretsForState(markSameGenerationBag({ ...resolvedProps }), withoutNoEchoParameterEntries(updateSecrets), desiredProps) : void 0;
36859
+ const unmarkedRecord = noEchoLeavesOf(currentResource) === void 0;
36860
+ const todayAsWritten = unmarkedRecord ? redactSecretsForState(markSameGenerationBag({ ...resolvedProps }), withoutNoEchoParameterEntries(updateSecrets), desiredProps) : void 0;
36152
36861
  const witness = todayAsWritten === void 0 ? void 0 : witnessNormalize(recordedAsWritten, todayAsWritten, desiredForSkipCheckAsWritten);
36153
36862
  const currentPropsAsWritten = witness === void 0 ? recordedAsWritten : witness.current;
36154
36863
  const positionalLeavesAt = (coordinates, key) => coordinates.filter((coordinate) => coordinate[0] === key).flatMap((coordinate) => {
@@ -36217,6 +36926,51 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
36217
36926
  renderer.removeTask(logicalId);
36218
36927
  this.logger.info(safeMsg`${attrPrefix}${formatResourceLine("updated", logicalId, resourceType, "updated (metadata)")}`);
36219
36928
  };
36929
+ const schemaCreateOnly = pendingParameterLeaves.size === 0 && parameterCoordinates.length === 0 ? [] : await getCreateOnlyPropertyPaths(resourceType).catch(() => []);
36930
+ const echoCandidates = echoFidelityCandidates(parameterCoordinates, resolvedProps, schemaCreateOnly);
36931
+ const readbackRecord = unmarkedRecord && parameterCoordinates.length > 0 ? {
36932
+ ...currentResource,
36933
+ properties: maskAtCoordinates(currentResource.properties, parameterCoordinates)
36934
+ } : currentResource;
36935
+ let readback;
36936
+ const readOnce = () => readback ??= this.readReaderForFreshNoEchoCeiling(logicalId, readbackRecord, updateSecrets).then((read) => {
36937
+ this.noteNoEchoExactEchoes(logicalId, currentResource.physicalId, read, readbackRecord.properties, echoCandidates, "add");
36938
+ return read;
36939
+ });
36940
+ const exactEchoCoordinates = new Set((noEchoExactEchoLeavesOf(currentResource) ?? []).map((c) => JSON.stringify(c)));
36941
+ const provenChangedAt = (key, read) => {
36942
+ if (exactEchoCoordinates.size === 0 || read === void 0 || "failure" in read) return false;
36943
+ return (pendingParameterLeaves.get(key) ?? []).some((leaf) => {
36944
+ const full = [key, ...leaf.path];
36945
+ if (!exactEchoCoordinates.has(JSON.stringify(full))) return false;
36946
+ const [candidate] = echoFidelityCandidates([full], resolvedProps, schemaCreateOnly);
36947
+ return candidate !== void 0 && provesEchoChangeAt(read.live, readbackRecord.properties, candidate);
36948
+ });
36949
+ };
36950
+ let replacedAnyway = false;
36951
+ let lateApproval;
36952
+ const approveReplacementOf = (pc) => {
36953
+ if (replacedAnyway) return Promise.resolve(true);
36954
+ const { noEchoPromoted: _promoted, ...asReplacement } = pc;
36955
+ lateApproval ??= approveLateReplacement({
36956
+ options: this.options,
36957
+ stackName,
36958
+ change: {
36959
+ ...change,
36960
+ changeType: "UPDATE",
36961
+ propertyChanges: [{
36962
+ ...asReplacement,
36963
+ requiresReplacement: true
36964
+ }]
36965
+ },
36966
+ records: stateResources,
36967
+ template
36968
+ });
36969
+ return lateApproval;
36970
+ };
36971
+ const lateReplacementDeclined = /* @__PURE__ */ new Set();
36972
+ const differsWhy = (key) => lateReplacementDeclined.has(key) ? `differs; the replacement was not approved (--require-approval=${this.options.requireApproval ?? "never"})` : "differs; the provider is not known to report this property exactly, so the difference may be its normalization";
36973
+ if (unmarkedRecord && !typeChanged && echoCandidates.length > 0 && hasAddressablePhysicalId(currentResource)) await readOnce();
36220
36974
  if (!typeChanged && !suppliesFreshMaskOnlyValue && lostChild === void 0 && this.recreateDirectionFor(stackName, logicalId) === void 0 && recordMatchesDesired) {
36221
36975
  if (change.attributeChanges && change.attributeChanges.length > 0) {
36222
36976
  applyAttributeOnlyUpdate(change.attributeChanges);
@@ -36230,8 +36984,6 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
36230
36984
  if (!(currentResource.resourceType === "AWS::CloudFormation::Stack" && currentResource.provisionedBy !== "cc-api") && !hasAddressablePhysicalId(currentResource)) throw markRefusedBeforeApplying(markNonRetryable(new CdkdError(unaddressableUpdateRefusalMessage(stackName, this.stackRegion, logicalId, oldResourceType, this.options.refusalRecovery), STATE_RESOURCES_MALFORMED)));
36231
36985
  this.attemptedResolvedProps.set(logicalId, resolvedProps);
36232
36986
  const noEchoHeldPaths = /* @__PURE__ */ new Set();
36233
- let readback;
36234
- const schemaCreateOnly = pendingParameterLeaves.size === 0 ? [] : await getCreateOnlyPropertyPaths(resourceType).catch(() => []);
36235
36987
  const isSchemaCreateOnly = (key) => (pendingParameterLeaves.get(key) ?? []).some((leaf) => {
36236
36988
  const full = [key, ...leaf.path.map(String)];
36237
36989
  return schemaCreateOnly.some((path) => path.length <= full.length && path.every((segment, i) => segment === full[i]));
@@ -36261,8 +37013,7 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
36261
37013
  lowered.push(pc);
36262
37014
  continue;
36263
37015
  }
36264
- readback ??= this.readReaderForFreshNoEchoCeiling(logicalId, currentResource, updateSecrets);
36265
- const read = await readback;
37016
+ const read = await readOnce();
36266
37017
  let verdict;
36267
37018
  if ("failure" in read) verdict = read.failure;
36268
37019
  else if (!Object.prototype.hasOwnProperty.call(read.live, pc.path)) verdict = "not-readable";
@@ -36296,7 +37047,7 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
36296
37047
  const parameterHeldKeys = /* @__PURE__ */ new Set();
36297
37048
  const parameterUnreadablePaths = [];
36298
37049
  if (pendingParameterLeaves.size > 0 && !typeChanged) {
36299
- const read = parameterCreateOnlyPaths.size > 0 || recordMatchesDesired ? await (readback ??= this.readReaderForFreshNoEchoCeiling(logicalId, currentResource, updateSecrets)) : void 0;
37050
+ const read = parameterCreateOnlyPaths.size > 0 || recordMatchesDesired ? await readOnce() : void 0;
36300
37051
  const verdictAt = (key) => {
36301
37052
  if (read === void 0) return "not-readable";
36302
37053
  if ("failure" in read) return read.failure;
@@ -36304,12 +37055,14 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
36304
37055
  return liveHoldsFreshLeaves(read.live[key], pendingParameterLeaves.get(key) ?? []) ? "held" : "differs";
36305
37056
  };
36306
37057
  const lowered = [];
37058
+ const movedAt = (path) => movedMasked.has(path) || keyOrderFreeJson(desiredForSkipCheckAsWritten[path]) !== keyOrderFreeJson(currentPropsAsWritten[path]);
37059
+ replacedAnyway = this.recreateDirectionFor(stackName, logicalId) !== void 0 || lostWithParent !== void 0 || (change.propertyChanges ?? []).some((other) => other.requiresReplacement && (!parameterCreateOnlyPaths.has(other.path) || movedAt(other.path)));
36307
37060
  for (const pc of change.propertyChanges ?? []) {
36308
37061
  if (!parameterCreateOnlyPaths.has(pc.path)) {
36309
37062
  lowered.push(pc);
36310
37063
  continue;
36311
37064
  }
36312
- if (movedMasked.has(pc.path) || keyOrderFreeJson(desiredForSkipCheckAsWritten[pc.path]) !== keyOrderFreeJson(currentPropsAsWritten[pc.path])) {
37065
+ if (movedAt(pc.path)) {
36313
37066
  warnWitnessReplacement(pc.path);
36314
37067
  lowered.push(pc);
36315
37068
  continue;
@@ -36319,9 +37072,18 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
36319
37072
  if (verdict === "held") {
36320
37073
  parameterHeldKeys.add(pc.path);
36321
37074
  this.logger.debug(safeMsg`${logicalId}.${pc.path} carries a NoEcho parameter value AWS already holds: not replaced.`);
37075
+ } else if (verdict === "differs" && provenChangedAt(pc.path, read) && await approveReplacementOf(pc)) {
37076
+ this.logger.warn(safeMsg`${logicalId}.${pc.path} is a create-only property fed by a NoEcho parameter, and AWS, which reports it exactly, holds a different value: ${logicalId} is replaced.`);
37077
+ lowered.push({
37078
+ ...pc,
37079
+ requiresReplacement: true
37080
+ });
37081
+ continue;
36322
37082
  } else {
36323
37083
  const staleOnly = staleCoordinates.some((coordinate) => coordinate[0] === pc.path);
36324
- this.logger.warn(staleOnly ? safeMsg`${logicalId}.${pc.path} is a create-only property whose recorded value is only the NoEcho mask, and cdkd cannot confirm AWS holds its current value (${verdict}). It is not replaced, so a change to that value is not applied: to apply one, deploy with --recreate-via-cc-api ${logicalId} or --recreate-via-sdk-provider ${logicalId}.` : safeMsg`${logicalId}.${pc.path} is a create-only property fed by a NoEcho parameter, and cdkd cannot confirm AWS holds its current value (${verdict}). It is not replaced, so a change to that value is not applied: to apply one, deploy with --recreate-via-cc-api ${logicalId} or --recreate-via-sdk-provider ${logicalId}.`);
37084
+ if (verdict === "differs" && provenChangedAt(pc.path, read)) lateReplacementDeclined.add(pc.path);
37085
+ const why = verdict === "differs" ? differsWhy(pc.path) : verdict;
37086
+ this.logger.warn(staleOnly ? safeMsg`${logicalId}.${pc.path} is a create-only property whose recorded value is only the NoEcho mask, and cdkd cannot confirm AWS holds its current value (${why}). It is not replaced, so a change to that value is not applied: to apply one, deploy with --recreate-via-cc-api ${logicalId} or --recreate-via-sdk-provider ${logicalId}.` : safeMsg`${logicalId}.${pc.path} is a create-only property fed by a NoEcho parameter, and cdkd cannot confirm AWS holds its current value (${why}). It is not replaced, so a change to that value is not applied: to apply one, deploy with --recreate-via-cc-api ${logicalId} or --recreate-via-sdk-provider ${logicalId}.`);
36325
37087
  }
36326
37088
  parameterSettledPaths.add(pc.path);
36327
37089
  lowered.push({
@@ -36679,6 +37441,7 @@ async function updateByReplacement({ change, counts, currentProps, currentResour
36679
37441
  provisionedBy: replaceDecision.provisionedBy
36680
37442
  };
36681
37443
  this.recordInlinePolicyWrite(logicalId, "create");
37444
+ await this.establishNoEchoEchoFidelity(logicalId, stateResources[logicalId], resolvedProps, stateResources, updateSecrets);
36682
37445
  this.kickOffObservedCapture(replaceProvider, logicalId, createResult.physicalId, resourceType, resolvedProps, { afterOwnWrite: true }, updateSecrets);
36683
37446
  if (counts) counts.updated++;
36684
37447
  if (progress) progress.current++;
@@ -36910,6 +37673,7 @@ async function updateInPlace({ conditions, counts, currentProps, currentPropsAsW
36910
37673
  ...result.noEchoAttributeNames && { noEchoAttributeNames: result.noEchoAttributeNames }
36911
37674
  }, updateSecrets, resolvedProps);
36912
37675
  const recordedProperties = this.propertiesToRecord(resolvedProps, result, resourceType, resultProvisionedBy);
37676
+ if (result.wasReplaced) this.noEchoExactEchoes.delete(logicalId);
36913
37677
  stateResources[logicalId] = {
36914
37678
  physicalId: result.physicalId,
36915
37679
  resourceType,
@@ -36917,6 +37681,7 @@ async function updateInPlace({ conditions, counts, currentProps, currentPropsAsW
36917
37681
  ...acceptedCreateOnlyDropsField(recordedProperties, resourceType, resultProvisionedBy, dischargedByReplacement ? "new-resource" : "in-place", currentResource),
36918
37682
  ...carriedAttributes && { attributes: carriedAttributes },
36919
37683
  ...!result.wasReplaced && currentResource.noEchoAttributeNames !== void 0 && { noEchoAttributeNames: currentResource.noEchoAttributeNames },
37684
+ ...!result.wasReplaced && currentResource.noEchoExactEchoLeaves !== void 0 && { noEchoExactEchoLeaves: currentResource.noEchoExactEchoLeaves },
36920
37685
  ...dependencies && dependencies.length > 0 && { dependencies },
36921
37686
  ...this.extractTemplateAttributes(template, logicalId),
36922
37687
  provisionedBy: resultProvisionedBy,
@@ -37094,103 +37859,6 @@ Drop the record with: ${dropCommand}`);
37094
37859
  this.logger.info(`${deletePrefix}${formatResourceLine("deleted", logicalId, resourceType)}`);
37095
37860
  }
37096
37861
 
37097
- //#endregion
37098
- //#region src/deployment/resource-deadline.ts
37099
- var InvalidResourceDeadlineError = class extends Error {
37100
- constructor(message) {
37101
- super(message);
37102
- this.name = "InvalidResourceDeadlineError";
37103
- }
37104
- };
37105
- function validateOptions(opts) {
37106
- const { warnAfterMs, timeoutMs } = opts;
37107
- if (!Number.isFinite(warnAfterMs) || !Number.isFinite(timeoutMs) || warnAfterMs <= 0 || timeoutMs <= 0) throw new InvalidResourceDeadlineError(`withResourceDeadline: warnAfterMs and timeoutMs must be positive finite numbers (got warnAfterMs=${warnAfterMs}, timeoutMs=${timeoutMs})`);
37108
- if (warnAfterMs >= timeoutMs) throw new InvalidResourceDeadlineError(`withResourceDeadline: warnAfterMs (${warnAfterMs}ms) must be less than timeoutMs (${timeoutMs}ms)`);
37109
- }
37110
- async function withResourceDeadline(operation, opts) {
37111
- validateOptions(opts);
37112
- return new Promise((resolve, reject) => {
37113
- let settled = false;
37114
- let timedOut = false;
37115
- let warned = false;
37116
- let warnTimer;
37117
- let timeoutTimer;
37118
- let elapsedBeforePause = 0;
37119
- let runningSince = Date.now();
37120
- let pauses = 0;
37121
- const elapsed = () => elapsedBeforePause + (pauses > 0 ? 0 : Date.now() - runningSince);
37122
- const cleanup = () => {
37123
- if (warnTimer !== void 0) clearTimeout(warnTimer);
37124
- if (timeoutTimer !== void 0) clearTimeout(timeoutTimer);
37125
- warnTimer = void 0;
37126
- timeoutTimer = void 0;
37127
- };
37128
- const arm = () => {
37129
- if (opts.onWarn && !warned) warnTimer = setTimeout(() => {
37130
- if (settled) return;
37131
- warned = true;
37132
- try {
37133
- opts.onWarn(elapsed());
37134
- } catch {}
37135
- }, Math.max(0, opts.warnAfterMs - elapsed()));
37136
- timeoutTimer = setTimeout(() => {
37137
- if (settled) return;
37138
- settled = true;
37139
- timedOut = true;
37140
- cleanup();
37141
- reject(opts.onTimeout(elapsed()));
37142
- }, Math.max(0, opts.timeoutMs - elapsed()));
37143
- };
37144
- arm();
37145
- const outer = deadlineScope.getStore();
37146
- const control = {
37147
- pause: () => {
37148
- pauses += 1;
37149
- if (pauses === 1) {
37150
- elapsedBeforePause += Date.now() - runningSince;
37151
- cleanup();
37152
- }
37153
- outer?.pause();
37154
- },
37155
- resume: () => {
37156
- if (pauses === 0) return;
37157
- pauses -= 1;
37158
- if (pauses === 0) {
37159
- runningSince = Date.now();
37160
- if (!settled) arm();
37161
- }
37162
- outer?.resume();
37163
- },
37164
- expired: () => timedOut || (outer?.expired() ?? false)
37165
- };
37166
- Promise.resolve().then(() => deadlineScope.run(control, operation)).then((value) => {
37167
- if (settled) return;
37168
- settled = true;
37169
- cleanup();
37170
- resolve(value);
37171
- }, (err) => {
37172
- if (settled) return;
37173
- settled = true;
37174
- cleanup();
37175
- reject(err);
37176
- });
37177
- });
37178
- }
37179
- const deadlineScope = new AsyncLocalStorage();
37180
- async function whileEnclosingDeadlinesPaused(fn) {
37181
- const control = deadlineScope.getStore();
37182
- if (control === void 0) return fn();
37183
- control.pause();
37184
- try {
37185
- return await fn();
37186
- } finally {
37187
- control.resume();
37188
- }
37189
- }
37190
- function enclosingDeadlineExpired() {
37191
- return deadlineScope.getStore()?.expired() ?? false;
37192
- }
37193
-
37194
37862
  //#endregion
37195
37863
  //#region src/deployment/deploy-engine/provision.ts
37196
37864
  async function provisionResource(logicalId, change, stateResources, stackName, template, parameterValues, conditions, counts, progress) {
@@ -37942,248 +38610,6 @@ function journaledOrphanPolicy(policy) {
37942
38610
  return policy === "Delete" || policy === "Retain" || policy === "Snapshot" || policy === "RetainExceptOnCreate" ? policy : "Retain";
37943
38611
  }
37944
38612
 
37945
- //#endregion
37946
- //#region src/deployment/deploy-engine/noecho.ts
37947
- function noEchoParameterNamesOf(template) {
37948
- const names = /* @__PURE__ */ new Set();
37949
- const declared = template?.Parameters;
37950
- if (declared === null || typeof declared !== "object") return names;
37951
- for (const [name, definition] of Object.entries(declared)) {
37952
- const noEcho = definition?.NoEcho;
37953
- if (noEcho === true || noEcho === "true") names.add(name);
37954
- }
37955
- return names;
37956
- }
37957
- function noEchoAttributeNamesOf(record) {
37958
- const field = record?.noEchoAttributeNames;
37959
- if (!Array.isArray(field) || !field.every((name) => typeof name === "string")) return void 0;
37960
- return field;
37961
- }
37962
- function noEchoPositionSources(resources = {}, template = this.constructPathTemplate, conditions = this.noEchoConditions) {
37963
- if (template === void 0) return void 0;
37964
- const declared = this.noEchoAttributeResources;
37965
- return {
37966
- parameters: /* @__PURE__ */ new Set([...noEchoParameterNamesOf(template), ...this.inheritedNoEchoParameters]),
37967
- attributeIsNoEcho: (logicalId, attribute) => {
37968
- const live = declared.get(logicalId);
37969
- if (live === true || live !== void 0 && live.has(attribute)) return true;
37970
- if (noEchoAttributeNamesOf(Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0)?.includes(attribute) === true) return true;
37971
- return this.persistedNoEchoAttributes.get(logicalId)?.has(attribute) === true;
37972
- },
37973
- ...conditions !== void 0 && { conditions }
37974
- };
37975
- }
37976
- function noEchoLeavesFor(logicalId, record, templateProps, sources) {
37977
- if (templateProps !== void 0 && isWrittenFromDeployedTemplate(record.properties)) return canonicalCoordinates(noEchoCoordinatesOf(templateProps, record.properties, sources));
37978
- const existing = noEchoLeavesOf(record);
37979
- if (existing !== void 0) return canonicalCoordinates(existing);
37980
- const resolvedAsSame = this.perResourceResolvedType.get(logicalId) === record.resourceType;
37981
- const source = (templateProps !== void 0 && resolvedAsSame ? templateProps : void 0) ?? templatePropertiesFor(this, logicalId, record.resourceType);
37982
- if (source === void 0) return void 0;
37983
- return canonicalCoordinates(noEchoCoordinatesOf(source, record.properties, sources));
37984
- }
37985
- function templatePropertiesFor(engine, logicalId, resourceType) {
37986
- const resources = engine.constructPathTemplate?.Resources;
37987
- if (resources === void 0 || !Object.hasOwn(resources, logicalId)) return void 0;
37988
- const definition = resources[logicalId];
37989
- if (definition?.Type !== resourceType) return void 0;
37990
- const properties = definition.Properties;
37991
- return properties !== null && typeof properties === "object" && !Array.isArray(properties) ? properties : void 0;
37992
- }
37993
- function noEchoAttributeNamesFor(engine, logicalId, record, carried, leaves) {
37994
- const attributes = record.attributes ?? {};
37995
- const names = /* @__PURE__ */ new Set();
37996
- let echoed = false;
37997
- for (const coordinate of leaves ?? []) {
37998
- const value = valueAtCoordinate(record.properties, coordinate);
37999
- if (value === void 0 || carriesSecretMask(value)) continue;
38000
- for (const [name, attribute] of Object.entries(attributes)) {
38001
- if (carriesSecretMask(attribute)) continue;
38002
- if (typeof attribute === "string" && attribute === record.physicalId) continue;
38003
- const sameName = coordinate[0] === name && keyOrderFreeJson(attribute) === keyOrderFreeJson(value);
38004
- const embeds = typeof value === "string" && typeof attribute === "string" && !attribute.startsWith("arn:") && value.length >= 4 && typeof attribute === "string" && attribute.includes(value);
38005
- if (sameName || embeds) {
38006
- names.add(name);
38007
- echoed = true;
38008
- }
38009
- }
38010
- }
38011
- const declared = carried ? void 0 : engine.noEchoAttributeResources.get(logicalId);
38012
- if (declared === true) for (const name of Object.keys(attributes)) names.add(name);
38013
- else if (declared !== void 0) {
38014
- for (const name of declared) if (Object.hasOwn(attributes, name)) names.add(name);
38015
- }
38016
- const prior = noEchoAttributeNamesOf(record);
38017
- for (const name of prior ?? []) if (Object.hasOwn(attributes, name) && carriesSecretMask(attributes[name])) names.add(name);
38018
- if (declared === void 0 && prior === void 0 && !echoed) return void 0;
38019
- return [...names].sort();
38020
- }
38021
- function applyNoEchoPersist(logicalId, record, scrubbed, templateProps, resources, secrets, carried = false) {
38022
- const sources = this.noEchoPositionSources(resources);
38023
- if (sources === void 0) return scrubbed;
38024
- const leaves = this.noEchoLeavesFor(logicalId, record, templateProps, sources);
38025
- const names = noEchoAttributeNamesFor(this, logicalId, record, carried, leaves);
38026
- if (leaves === void 0 && names === void 0) return scrubbed;
38027
- const next = { ...scrubbed };
38028
- if (leaves !== void 0) {
38029
- next.properties = maskAtCoordinates(scrubbed.properties, leaves);
38030
- if (scrubbed.observedProperties !== void 0 && leaves.length > 0) Object.assign(next, { observedProperties: maskReadbackAtCoordinates(scrubbed.observedProperties, record.properties, leaves) });
38031
- if (leaves.length > 0) next.noEchoLeaves = leaves;
38032
- else delete next.noEchoLeaves;
38033
- }
38034
- if (names !== void 0) {
38035
- if (scrubbed.attributes !== void 0 && names.length > 0) {
38036
- const attributes = { ...scrubbed.attributes };
38037
- for (const name of names) if (Object.hasOwn(attributes, name)) attributes[name] = maskWholeValue(attributes[name]);
38038
- next.attributes = attributes;
38039
- }
38040
- if (names.length > 0) next.noEchoAttributeNames = names;
38041
- else delete next.noEchoAttributeNames;
38042
- }
38043
- this.warnNoEchoPhysicalId(logicalId, record, secrets);
38044
- return next;
38045
- }
38046
- function warnNoEchoPhysicalId(logicalId, record, secrets) {
38047
- if (secrets === void 0 || this.noEchoPhysicalIdWarned.has(logicalId)) return;
38048
- const values = noEchoParameterPlaintextsOf(secrets);
38049
- if (values.length === 0 || typeof record.physicalId !== "string") return;
38050
- if (!values.some((value) => record.physicalId.includes(value))) return;
38051
- this.noEchoPhysicalIdWarned.add(logicalId);
38052
- this.logger.warn(this.maskForResource(logicalId, safeMsg`${logicalId}: its physical id contains a NoEcho parameter value. AWS publishes a resource's name, so cdkd keeps the physical id in state as AWS returns it.`));
38053
- }
38054
- function seedPersistedNoEchoAttributes(resources) {
38055
- this.persistedNoEchoAttributes = /* @__PURE__ */ new Map();
38056
- for (const [logicalId, record] of Object.entries(resources)) {
38057
- const names = noEchoAttributeNamesOf(record);
38058
- if (names !== void 0 && names.length > 0) this.persistedNoEchoAttributes.set(logicalId, new Set(names));
38059
- }
38060
- }
38061
- function maskOutputsByPosition(outputs) {
38062
- const sources = this.noEchoPositionSources();
38063
- if (sources === void 0) return outputs;
38064
- const templateValues = Object.create(null);
38065
- for (const [name, definition] of Object.entries(this.constructPathTemplate?.Outputs ?? {})) templateValues[name] = definition?.Value;
38066
- if (this.outputsSourceUsable) for (const [name, value] of Object.entries(this.outputsTemplateSource)) templateValues[name] = value;
38067
- const coordinates = noEchoCoordinatesOf(templateValues, outputs, sources);
38068
- if (coordinates.length === 0) return outputs;
38069
- const maskedValues = new Set(coordinates.filter((coordinate) => coordinate.length === 1 && typeof coordinate[0] === "string").map((coordinate) => keyOrderFreeJson(outputs[coordinate[0]])));
38070
- const aliasCoordinates = Object.keys(outputs).filter((key) => !Object.hasOwn(templateValues, key) && outputs[key] !== void 0 && !carriesSecretMask(outputs[key]) && maskedValues.has(keyOrderFreeJson(outputs[key]))).map((key) => [key]);
38071
- return maskAtCoordinates(outputs, [...coordinates, ...aliasCoordinates]);
38072
- }
38073
- function getAttTargetsOf(node) {
38074
- const targets = [];
38075
- const seen = /* @__PURE__ */ new Set();
38076
- const subVariable = /\$\{([^}!][^}]*)\}/g;
38077
- const walk = (value) => {
38078
- if (value === null || typeof value !== "object" || seen.has(value)) return;
38079
- seen.add(value);
38080
- if (Array.isArray(value)) {
38081
- for (const item of value) walk(item);
38082
- return;
38083
- }
38084
- const record = value;
38085
- const getAtt = record["Fn::GetAtt"];
38086
- if (typeof getAtt === "string" && getAtt.indexOf(".") > 0) {
38087
- const dot = getAtt.indexOf(".");
38088
- targets.push([getAtt.slice(0, dot), getAtt.slice(dot + 1)]);
38089
- } else if (Array.isArray(getAtt) && typeof getAtt[0] === "string" && typeof getAtt[1] === "string") targets.push([getAtt[0], getAtt[1]]);
38090
- const sub = record["Fn::Sub"];
38091
- const text = typeof sub === "string" ? sub : Array.isArray(sub) ? sub[0] : void 0;
38092
- if (typeof text === "string") for (const match of text.matchAll(subVariable)) {
38093
- const name = match[1].trim();
38094
- const dot = name.indexOf(".");
38095
- if (dot > 0) targets.push([name.slice(0, dot), name.slice(dot + 1)]);
38096
- }
38097
- for (const child of Object.values(record)) walk(child);
38098
- };
38099
- walk(node);
38100
- return targets;
38101
- }
38102
- async function noEchoAttributeOverridesFor(desiredProps, stateResources, stackName) {
38103
- const wanted = /* @__PURE__ */ new Map();
38104
- for (const [logicalId, attribute] of getAttTargetsOf(desiredProps)) {
38105
- const record = Object.hasOwn(stateResources, logicalId) ? stateResources[logicalId] : void 0;
38106
- if (record === void 0) continue;
38107
- if (noEchoAttributeNamesOf(record)?.includes(attribute) !== true) continue;
38108
- if (!carriesSecretMask(record.attributes?.[attribute])) continue;
38109
- if (!this.perResourceSecrets.has(logicalId)) continue;
38110
- const set = wanted.get(logicalId) ?? /* @__PURE__ */ new Set();
38111
- set.add(attribute);
38112
- wanted.set(logicalId, set);
38113
- }
38114
- if (wanted.size === 0) return void 0;
38115
- const overrides = /* @__PURE__ */ new Map();
38116
- for (const [logicalId, attributes] of wanted) {
38117
- const record = stateResources[logicalId];
38118
- let read = this.noEchoAttributeReads.get(logicalId);
38119
- if (read === void 0) {
38120
- read = (async () => {
38121
- try {
38122
- const { provider } = this.providerRegistry.getProviderFor({
38123
- resourceType: record.resourceType,
38124
- properties: record.properties,
38125
- provisionedBy: record.provisionedBy,
38126
- previousProperties: record.properties
38127
- });
38128
- const outcome = await readRecordAttributes({
38129
- provider,
38130
- logicalId,
38131
- resource: record,
38132
- stackName,
38133
- region: this.stackRegion
38134
- });
38135
- return outcome.kind === "read" ? outcome.attributes : void 0;
38136
- } catch {
38137
- return;
38138
- }
38139
- })();
38140
- this.noEchoAttributeReads.set(logicalId, read);
38141
- }
38142
- const live = await read;
38143
- if (live === void 0) continue;
38144
- const secrets = this.perResourceSecrets.get(logicalId);
38145
- const fresh = noEchoParameterPlaintextsOf(secrets);
38146
- const positioned = this.noEchoPositionedValues.get(logicalId) ?? /* @__PURE__ */ new Set();
38147
- const served = {};
38148
- for (const attribute of attributes) {
38149
- if (!Object.hasOwn(live, attribute)) continue;
38150
- const value = live[attribute];
38151
- if (typeof value === "string" && fresh.some((needle) => value === needle || value.includes(needle)) || value !== void 0 && positioned.has(keyOrderFreeJson(value))) served[attribute] = value;
38152
- }
38153
- if (Object.keys(served).length > 0) overrides.set(logicalId, served);
38154
- }
38155
- return overrides.size > 0 ? overrides : void 0;
38156
- }
38157
- function noEchoDiffComparison(resources, template, conditions, parameterValues, stackName) {
38158
- const sources = this.noEchoPositionSources(resources, template, conditions);
38159
- if (sources === void 0) return void 0;
38160
- const compare = noEchoComparison({
38161
- sources,
38162
- values: parameterValues,
38163
- minNeedleLength: 4,
38164
- publicTokens: /* @__PURE__ */ new Set([this.stackRegion, ...stackName === void 0 ? [] : [stackName]])
38165
- });
38166
- return (input) => compare(input);
38167
- }
38168
- function freshNoEchoParametersWithDeclared(inherited, template) {
38169
- const all = /* @__PURE__ */ new Set([...inherited ?? [], ...noEchoParameterNamesOf(template)]);
38170
- return all.size > 0 ? all : void 0;
38171
- }
38172
- function noEchoComparisonForTemplate(template, knownConditions, values, resources, publicTokens, inheritedNoEchoParameters) {
38173
- const sources = {
38174
- parameters: /* @__PURE__ */ new Set([...noEchoParameterNamesOf(template), ...inheritedNoEchoParameters ?? []]),
38175
- attributeIsNoEcho: (logicalId, attribute) => noEchoAttributeNamesOf(Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0)?.includes(attribute) === true,
38176
- ...knownConditions !== void 0 && { conditions: knownConditions }
38177
- };
38178
- const compare = noEchoComparison({
38179
- sources,
38180
- values: values ?? {},
38181
- minNeedleLength: 4,
38182
- ...publicTokens !== void 0 && { publicTokens }
38183
- });
38184
- return (input) => compare(input);
38185
- }
38186
-
38187
38613
  //#endregion
38188
38614
  //#region src/provisioning/canonicalize-properties.ts
38189
38615
  function makeCanonicalizePropertiesFn(registry) {
@@ -38296,65 +38722,6 @@ function refuseNoValueOutputs(outputs, conditions) {
38296
38722
  throw markNonRetryable(/* @__PURE__ */ new Error(`Output ${offending.join(", ")} evaluates to AWS::NoValue, and CloudFormation rejects the template for it ("The Value field of every Outputs member must evaluate to a String") before creating anything. To publish an Output only sometimes, give it a Condition instead of selecting AWS::NoValue in its Value.`));
38297
38723
  }
38298
38724
 
38299
- //#endregion
38300
- //#region src/deployment/deployment-approval.ts
38301
- const NESTED_STACK_TYPE$1 = "AWS::CloudFormation::Stack";
38302
- async function requireDeploymentApproval(args) {
38303
- const level = args.options.requireApproval ?? "never";
38304
- const approve = args.options.approveDeployment;
38305
- if (level === "never" || approve === void 0) return;
38306
- const changes = [...args.changes].filter((c) => c.changeType !== "NO_CHANGE" && !isNoEchoPromotionOnly(c));
38307
- const destructiveChanges = findDestructiveChanges(args.stackName, changes, args.records, args.template, new Set(args.recreateTargetIds ?? []));
38308
- const onlyNestedUpdates = changes.every((c) => c.changeType === "UPDATE" && c.resourceType === NESTED_STACK_TYPE$1);
38309
- if (!(level === "destructive" ? destructiveChanges.length > 0 : changes.length > 0 && !onlyNestedUpdates)) return;
38310
- const count = (type) => changes.filter((c) => c.changeType === type).length;
38311
- if (enclosingDeadlineExpired()) throw approvalAfterTimeout(args.stackName);
38312
- let approved;
38313
- try {
38314
- approved = await whileEnclosingDeadlinesPaused(() => approve({
38315
- stackName: args.stackName,
38316
- level,
38317
- counts: {
38318
- create: count("CREATE"),
38319
- update: count("UPDATE"),
38320
- delete: count("DELETE")
38321
- },
38322
- destructiveChanges
38323
- }));
38324
- } catch (error) {
38325
- throw error instanceof Error ? markNonRetryable(error) : error;
38326
- }
38327
- if (!approved) throw markNonRetryable(new CdkdError(safeMsg`Deployment of stack ${args.stackName} was not approved (--require-approval=${level}). Nothing was changed.`, "DEPLOY_NOT_APPROVED"));
38328
- }
38329
- function approvalAfterTimeout(stackName) {
38330
- return markNonRetryable(new CdkdError(safeMsg`Deployment of stack ${stackName} was not started: its parent's nested-stack row already timed out (--resource-timeout). Nothing was changed.`, "DEPLOY_APPROVAL_AFTER_TIMEOUT"));
38331
- }
38332
- async function requireOutputsOnlyApproval(args) {
38333
- const approve = args.options.approveDeployment;
38334
- if (args.options.requireApproval !== "any-change" || approve === void 0) return;
38335
- if (enclosingDeadlineExpired()) throw approvalAfterTimeout(args.stackName);
38336
- let approved;
38337
- try {
38338
- approved = await whileEnclosingDeadlinesPaused(() => approve({
38339
- stackName: args.stackName,
38340
- level: "any-change",
38341
- counts: {
38342
- create: 0,
38343
- update: 0,
38344
- delete: 0
38345
- },
38346
- destructiveChanges: [],
38347
- outputsOnly: true
38348
- }));
38349
- } catch (error) {
38350
- throw error instanceof Error ? markNonRetryable(error) : error;
38351
- }
38352
- if (!approved) throw markNonRetryable(new CdkdError(safeMsg`Deployment of stack ${args.stackName} was not approved (--require-approval=any-change). Nothing was changed.`, "DEPLOY_NOT_APPROVED"));
38353
- }
38354
- function isNoEchoPromotionOnly(change) {
38355
- return change.changeType === "UPDATE" && (change.attributeChanges?.length ?? 0) === 0 && (change.propertyChanges?.length ?? 0) > 0 && change.propertyChanges.every((pc) => pc.noEchoPromoted === true);
38356
- }
38357
-
38358
38725
  //#endregion
38359
38726
  //#region src/deployment/condition-verdicts.ts
38360
38727
  function conditionInputsFrom(args) {
@@ -38853,6 +39220,7 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
38853
39220
  });
38854
39221
  const parameterValues = await this.resolver.resolveParameters(template, this.options.parameters, { ...this.options.inheritedSecrets && hasMaskableValues(this.options.inheritedSecrets) && { inheritedSecrets: this.options.inheritedSecrets } });
38855
39222
  this.logger.debug(`Resolved ${Object.keys(parameterValues).length} parameters: ${Object.keys(parameterValues).join(", ")}`);
39223
+ poisonRenderedSpellingsCollidingIn(template, parameterValues, this.options.inheritedSecrets);
38856
39224
  this.inheritedNoEchoParameters = /* @__PURE__ */ new Set([...this.freshNoEchoParameters(parameterValues) ?? [], ...this.options.passedNoEchoParameters ?? []]);
38857
39225
  const backfillNoEchoValues = noEchoParameterValueSeed(template.Parameters, parameterValues, this.options.inheritedSecrets, this.options.parameters);
38858
39226
  this.fingerprintNoEchoValues = backfillNoEchoValues;
@@ -39334,6 +39702,7 @@ var DeployEngine = class {
39334
39702
  inheritedNoEchoParameters = /* @__PURE__ */ new Set();
39335
39703
  noEchoPhysicalIdWarned = /* @__PURE__ */ new Set();
39336
39704
  noEchoPositionedValues = /* @__PURE__ */ new Map();
39705
+ noEchoExactEchoes = /* @__PURE__ */ new Map();
39337
39706
  noEchoAttributeReads = /* @__PURE__ */ new Map();
39338
39707
  replacedDeleteSkips = /* @__PURE__ */ new Map();
39339
39708
  secretNameNeedles = /* @__PURE__ */ new Map();
@@ -39397,6 +39766,7 @@ var DeployEngine = class {
39397
39766
  this.inheritedNoEchoParameters = /* @__PURE__ */ new Set();
39398
39767
  this.noEchoPhysicalIdWarned = /* @__PURE__ */ new Set();
39399
39768
  this.noEchoPositionedValues = /* @__PURE__ */ new Map();
39769
+ this.noEchoExactEchoes = /* @__PURE__ */ new Map();
39400
39770
  this.noEchoAttributeReads = /* @__PURE__ */ new Map();
39401
39771
  this.replacedDeleteSkips = /* @__PURE__ */ new Map();
39402
39772
  this.secretNameNeedles = /* @__PURE__ */ new Map();
@@ -39436,7 +39806,7 @@ var DeployEngine = class {
39436
39806
  const secrets = this.perResourceSecrets.get(logicalId);
39437
39807
  const templateProps = this.perResourceTemplateProps.get(logicalId);
39438
39808
  const scrubbed = scrubResourceRecord(this.withHealedAttributes(logicalId, record), secrets ?? /* @__PURE__ */ new Map(), templateProps);
39439
- const noEchoScrubbed = this.applyNoEchoPersist(logicalId, record, scrubbed, templateProps, state.resources, secrets);
39809
+ const noEchoScrubbed = this.applyNoEchoPersist(logicalId, record, this.withNoEchoExactEchoes(logicalId, scrubbed), templateProps, state.resources, secrets);
39440
39810
  resources[logicalId] = withConstructPath(withMaskedPropertyFingerprints(noEchoScrubbed, record.properties, templateProps, secrets, this.fingerprintNoEchoValues, this.perResourceInputFingerprints.get(logicalId)), constructPathOf(this.constructPathTemplate, logicalId));
39441
39811
  }
39442
39812
  const orphans = state.orphans?.map((entry) => {
@@ -39624,6 +39994,9 @@ DeployEngine.prototype.warnNoEchoPhysicalId = warnNoEchoPhysicalId;
39624
39994
  DeployEngine.prototype.seedPersistedNoEchoAttributes = seedPersistedNoEchoAttributes;
39625
39995
  DeployEngine.prototype.noEchoAttributeOverridesFor = noEchoAttributeOverridesFor;
39626
39996
  DeployEngine.prototype.noEchoDiffComparison = noEchoDiffComparison;
39997
+ DeployEngine.prototype.noteNoEchoExactEchoes = noteNoEchoExactEchoes;
39998
+ DeployEngine.prototype.establishNoEchoEchoFidelity = establishNoEchoEchoFidelity;
39999
+ DeployEngine.prototype.withNoEchoExactEchoes = withNoEchoExactEchoes;
39627
40000
  DeployEngine.prototype.handleOutputResolutionFailure = handleOutputResolutionFailure;
39628
40001
  DeployEngine.prototype.resolveOutputs = resolveOutputs;
39629
40002
  DeployEngine.prototype.buildDisplayOutputs = buildDisplayOutputs;
@@ -39631,5 +40004,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
39631
40004
  DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
39632
40005
 
39633
40006
  //#endregion
39634
- export { dropFailedHint as $, maskReadbackAtCoordinates as $a, refuseMalformedResourcePropertiesForDrift as $i, wouldReturnToSdkProvider as $n, hasReasonlessBaselineRefusal as $o, parseWebACLArn as $r, resolveAutoAssetStorage as $s, secretNamePrintingBag as $t, gray as A, isWarmThroughputDecrease as Aa, renderAssemblyPathEscape as Ac, malformedResourceEntriesWarning as Ai, maskingRetryLogger as An, identityKeyFor as Ao, AWS_CREDENTIAL_ENV_KEYS as Ar, describeDockerFailure as As, removeProtectionTypeList as At, NESTED_PENDING_PARENT_REASON as B, requireConfigArray as Ba, refuseMalformedOrphans as Bi, DBPROXY_TAGS_WHAT as Bn, STATE_SOURCED_READBACK_RULES as Bo, coerceParameterTypedValue as Br, runDockerForeground as Bs, findNestedStackTypeChanges as Bt, recordedProtectionNote as C, shownType as Ca, hasOwnKey as Cc, malformedOrphanRecordsWarning as Ci, noEchoParameterValueSeed as Cn, DYNAMIC_REFERENCE_TOKEN_SCAN as Co, regionLessSecretName as Cr, validateAssetBucketName as Cs, INDEX_SETTLE_POLL_INTERVAL_MS as Ct, createReadOnlyAttributeHealerFactory as D, renderStatefulReason as Da, absoluteAssemblyPathEscape as Dc, malformedOutputsRefusalMessage as Di, bindingSkippedOutputs as Dn, inheritNestedStackParameterAssociations as Do, explicitRoleArnOrThrow as Dr, resolveDockerContextDirectory as Ds, S3_AUTO_DELETE_OBJECTS_TAG as Dt, formatResourceLine as E, isStatefulRecreateTargetSync as Ea, ownValue as Ec, malformedOrphansWarning as Ei, isExportAliasCollision as En, pathCrossesDottedKey as Eo, assertSendableRoleArn as Er, buildDockerImage as Es, ECR_AUTO_DELETE_IMAGES_TAG as Et, namesAnyDeclaredParameter as F, configBooleanRefusal as Fa, previewableOrphanRecords as Fi, earliestDefined as Fn, recordNoEchoAttributeValues as Fo, s3BucketArn as Fr, isDockerClientEnvKey as Fs, isReplacementOrphan as Ft, nestedChildStackName as G, describeTypeWithThrottleRetry as Ga, refuseMalformedResourceAttributesForOrphan as Gi, tagMapAsList as Gn, isLockInfoExpired as Go, carriesDynamicReference as Gr, AssetManifestLoader as Gs, redactedDeleteAddressFields as Gt, displacedPhysicalIdShown as H, requireConfigString as Ha, refuseMalformedOrphansForOrphan as Hi, planTagDiff as Hn, WHOLE_DYNAMIC_REFERENCE_PATTERN as Ho, parameterTypeMayLoseSecretIdentity as Hr, warnFinchArgvExposure as Hs, inheritProducerRegions as Ht, reachableDivergentParameters as I, configIntegerRefusal as Ia, refuseDivergentRecordRegionForDestroy as Ii, ledgerForStack as In, recordProvenPublicExpression as Io, s3BucketDomainName as Ir, isMalformedEnvKey as Is, planFailedOps as It, revertedNestedRowIds as J, lambdaFunctionNameForMask as Ja, refuseMalformedResourceEntriesForDestroy as Ji, stringifyIfAssigned as Jn, splitImportedOps as Jo, keepsSecretReferenceToken as Jr, synthesisStatusMessage as Js, updatePartialReason as Jt, recordDisplacedSkips as K, withRetry as Ka, refuseMalformedResourceEntries as Ki, tagPlanWarning as Kn, S3StateBackend as Ko, carriesFetchableDynamicReference as Kr, getDockerImageBySourceHash as Ks, redactedDeleteAddressSkip as Kt, resourcesNamingDeclaredParameter as L, configStringRefusal as La, refuseMalformedNestedChildOutputs as Li, reserveStackCreateToken as Ln, wholeStringLeavesOf as Lo, s3BucketDualStackDomainName as Lr, partitionSensitiveEnv as Ls, planRollback as Lt, red as M, toFiniteNumber as Ma, clearBucketRegionCache as Mc, malformedResourcesWarning as Mi, findDestructiveChanges as Mn, provenPublicValue as Mo, callerEnvCredentials as Mr, finchSecretArgvRefusal as Ms, recordAfterRollbackUpdate as Mt, yellow as N, coerceCfnBoolean as Na, resolveBucketRegion as Nc, malformedScrubResourceEntriesRefusalMessage as Ni, formatDestructiveChange as Nn, recordMaskOnlyValue as No, envCredentialsAreAssumedRole as Nr, formatDockerLoginError as Ns, demoteSupersededOrphans as Nt, bold as O, WARM_THROUGHPUT_MEMBERS as Oa, describeFileReadFailure as Oc, malformedOutputsWarning as Oi, DEFAULT_RESOURCE_TIMEOUT_MS as On, recordNestedStackParameterExpressions as Oo, isIamRoleArn as Or, describeDockerCapturedOutput as Os, hasCdkAutoDeleteTag as Ot, computeParameterTaint as P, coerceCfnInteger as Pa, malformedStateRefusalMessage as Pi, RollbackInlinePolicyWriters as Pn, recordMaskOnlyValuesIn as Po, isSettledInstanceState as Pr, getDockerCmd as Ps, isJournaledOrphan as Pt, deleteJournaledOrphans as Q, isMarkedCoordinate as Qa, refuseMalformedResourcePropertiesForDestroy as Qi, isCustomResource as Qn, hasReadableExportSet as Qo, refStateLookupFromResource as Qr, resolveApp as Qs, orphanRecordsPrintingBag as Qt, makeSiblingClaimReader as R, readConfigString as Ra, refuseMalformedOrphanRecords as Ri, withCreateTokenLedger as Rn, STATE_SOURCED_BASELINE_RULES as Ro, s3BucketRegionalDomainName as Rr, redactDockerArgvValues as Rs, replacementNeverSwapped as Rt, recordedProtectionEvidence as S, findReplacedReadersOfRecreateTargets as Sa, defineOwnKey as Sc, malformedOrphanRecordsRefusalMessage as Si, isWholeDynamicReferenceValue as Sn, scrubResourceRecord as So, producerRegionsFromState as Sr, readBootstrapMarkerBody as Ss, DELETE_INDEX_WAIT_PROCEED_NOTE as St, markRefusedBeforeApplying as T, isStatefulRecreateTargetForReplace as Ta, nullPrototypeRecord as Tc, malformedOrphansRefusalMessage as Ti, collectPublishedOutputNames as Tn, isUncertifiedBaselineMaskPosition as To, assertFlagRoleArn as Tr, buildDenyExternalAccessPolicy as Ts, waitForIndexesSettled as Tt, dropSettledNestedJournals as U, prefetchCreateOnlyPropertyPaths as Ua, refuseMalformedOutputs as Ui, readTagList as Un, isSingleDynamicReferenceToken as Uo, getAccountInfo as Ur, escapeRegExp$3 as Us, REDACTED_DELETE_ADDRESS_SKIP_REASON as Ut, displacedOpClause as V, requireConfigObject as Va, refuseMalformedOrphansForDestroy as Vi, DBPROXY_TAG_OPTIONS as Vn, TEMPLATE_SOURCED_RULES as Vo, isUnboundTemplateParameter as Vr, runDockerStreaming as Vs, getCurrentProducerRegions as Vt, getNestedRevertRun as W, templateResourceTypes as Wa, refuseMalformedOutputsForDestroy as Wi, refuseMalformedDesiredTags as Wn, LockManager as Wo, isImpossibleEmptyStoredAttribute as Wr, stripControlChars as Ws, isRedactedRecordedValue as Wt, getCurrentNestedStackContext as X, DagBuilder as Xa, refuseMalformedResourceEntriesForImportSave as Xi, ProviderRegistry as Xn, describeRegionValueKind as Xo, cfnRefValueFromPhysicalId as Xr, getLegacyStateBucketName as Xs, journaledOrphanPrintingBag as Xt, withNestedRevertRun as Y, sameLambdaFunctionAddress as Ya, refuseMalformedResourceEntriesForImport as Yi, CC_BROKEN_REASON as Yn, acceptedCreateOnlyDropsOf as Yo, AWS_NO_VALUE as Yr, getDefaultStateBucketName as Ys, completedReplayEntries as Yt, withNestedStackContext as Z, TemplateParser as Za, refuseMalformedResourceEntriesForOrphan as Zi, ccBrokenReason as Zn, exportNamesCarriedFrom as Zo, isStalePlaceholderArnAttribute as Zr, loadCdkJson as Zs, maskEventTextWithBoundBags as Zt, makeCanonicalizePropertiesFn as _, findSilentDropProperties as _a, canonicalizeRegion as _c, malformedExportNamesWarning as _i, secretBearingStateKeyWarning as _n, errorCauseChain as _o, reEnableInstanceApiTermination as _r, assertAssetBucketRegion as _s, beginDeleteWait as _t, findNestedTemplateTreeDefect as a, refuseMalformedState as aa, stateBucketExistenceConfirmed as ac, STATE_RESOURCES_MALFORMED as ai, createPreDeleteFinalSnapshot as an, readsNoEchoSource as ao, unchangedBehindSecretReference as ar, orphansCarriedFrom as as, replayFailedOperations as at, noEchoParameterNamesOf as b, NO_CC_HANDLERS_REASON as ba, StageLoadError as bc, malformedLocalResourceEntriesWarning as bi, exportNameNoEchoParameters as bn, markSameGenerationBag as bo, IntrinsicFunctionResolver as br, isCrossRegionRedirect as bs, resolveDynamoDbDeleteBudgetClock as bt, renderNestedTemplateTreeDefect as c, repairMalformedOutputsForReadOnly as ca, CFN_TEMPLATE_BODY_LIMIT as cc, accountArgs as ci, refusesFinalSnapshot as cn, createUnionSecretMasker as co, deleteSkipReason as cr, isSensitiveAttributeName as cs, destroyStackRecordsView as ct, conditionInputsFrom as d, repairMalformedResourcesForReadOnly as da, findLargeInlineResources as dc, hasReadableOrphans as di, DeploymentEventsStore as dn, logOnlyValueCount as do, markWaitAbandoned as dr, buildAssetRedirectMap as ds, PROTECTION_PROPERTY_BY_TYPE as dt, refuseMalformedResourcePropertiesForExport as ea, resolveCaptureObservedState as ec, withSharedDrainBudget as ei, stateSecretNameNeedles as en, maskWholeValue as eo, isCustomResourceType as er, hasUnverifiableParameterRefusal as es, isHandledOrphan as et, parentSuppliedValues as f, unpreviewableOrphanRecords as fa, uploadCfnTemplate as fc, hasReadableOutputs as fi, extractDeploymentEventError as fn, printingCorpusOf as fo, disableInstanceApiTermination as fr, createAssetRedirectResolver as fs, isProtectionValueActive as ft, mergeNoChangeOutputs as g, findActionableSilentDrops as ga, PARTITION_TABLE as gc, malformedDriftResourcePropertiesWarning as gi, secretBearing as gn, createSecretMasker as go, reDisableInstanceApiTermination as gr, BOOTSTRAP_MARKER_PREFIX as gs, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as gt, keptWholeReasonText as h, withheldAccountClause as ha, expectedOwnerParam as hc, isReadableResourceEntry as hi, exportAliasCollisionScrubWarning as hn, shareLogOnlyValues as ho, observeThenDisableInstanceApiTermination as hr, AssetModeResolver as hs, DynamoDBGlobalTableProvider as ht, childTemplateLoader as i, refuseMalformedResourcesForExport as ia, resolveUseCdkBootstrapAssets as ic, STATE_REGION_DIVERGED as ii, ccRoutedFinalSnapshotError as in, passedNoEchoParametersOf as io, slowCcOperationTimeoutMs as ir, orphansAfterRollback as is, sameJournaledOrphans as it, green as j, toCfnInteger as ja, resolveAssemblyPath as jc, malformedResourcePropertiesWarning as ji, constructPathOf as jn, carriesSecretMask as jo, applyCallerIdentityCredentials as jr, dockerSpawnEnvWithSensitive as js, orphanDeleteNeedsIdentity as jt, cyan as k, coerceWarmThroughput as ka, displayAssemblyPath as kc, malformedRenderedContainersWarning as ki, DEFAULT_RESOURCE_WARN_AFTER_MS as kn, recoverMaskedOutput as ko, sendableAssumeRoleCommand as kr, describeDockerExecFailure as ks, isTruthyCfnBoolean as kt, templateIdentity as l, repairMalformedResourceEntriesForReadOnly as la, CFN_TEMPLATE_URL_LIMIT as lc, deployRefusesOrphanRowsReason as li, unsupportedFinalSnapshotError as ln, hasMaskableValues as lo, withIndeterminateGuard as lr, stringifyValue as ls, getStackRecords as lt, isSecretBearingReferenceString as m, unreadableResourceEntries as ma, decodeListingKey as mc, isReadableOrphanRecord as mi, displayTextOrWithheld as mn, recordLogOnlyValue as mo, isTerminationProtectionPropagationError as mr, rewriteTemplateAssetReferences as ms, readProtection as mt, IMPLICIT_DELETE_DEPENDENCIES as n, refuseMalformedResourcesForDeploy as na, resolveStateBucketWithDefault as nc, passedParameterClassesOf as ni, PRE_DELETE_SNAPSHOT_TYPES as nn, noEchoLeavesOf as no, withPrintingSecrets as nr, importableOutputs as ns, loadJournaledOrphans as nt, isAbsoluteAssetPath as o, repairMalformedOrphanRecordsForReadOnly as oa, warnDeprecatedNoPrefixCliFlag as oc, UNREADABLE_ORPHANS_CONTAINER_ROW as oi, effectiveDeletionPolicy as on, liveMatchesUnresolvedTokenFrame as oo, UNSPECIFIED_SKIP_REASON as or, shouldRetainResource as os, replayRollback as ot, readRecordedConditionVerdicts as p, unreadableOrphanRecords as pa, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as pc, hasReadableResources as pi, WITHHELD_NAME_DISPLAY as pn, recordLogOnlyParameterValue as po, ec2InstanceProtectionSite as pr, loadPublishableAssetManifest as ps, perType as pt, revertNestedChildFromJournal as q, canonicalLambdaFunctionName as qa, refuseMalformedResourceEntriesForDeploy as qi, definedAttributes as qn, rebuildClientForBucketRegion as qo, isNamelessDynamicReferenceError as qr, Synthesizer as qs, updatePartialMessage as qt, computeImplicitDeleteEdges as r, refuseMalformedResourcesForDestroy as ra, resolveStateBucketWithDefaultAndSource as rc, JSON_LISTING_HOLE_VALUE as ri, buildFinalSnapshotIdentifier as rn, noEchoOutputsComparison as ro, CloudControlProvider as rr, isReadableBag as rs, makeForeignHolderScan as rt, listNestedTemplateRows as s, repairMalformedOrphansForReadOnly as sa, ssmResolvedValueType as sc, UNREADABLE_RESOURCES_MAP_ROW as si, isFinalSnapshotError as sn, carryLogOnlyValues as so, deleteIndeterminateGuards as sr, AssetPublisher as ss, awaitInFlightSibling as st, DeployEngine as t, refuseMalformedResourcePropertiesForOrphan as ta, resolveSkipPrefix as tc, parameterInputsFor as ti, ATOMIC_FINAL_SNAPSHOT_TYPES as tn, maskedLeafCoordinatesOf as to, getCurrentResourceSecrets as tr, importableOutputKeys as ts, journaledOrphanLines as tt, conditionFingerprint as u, repairMalformedResourcePropertiesForReadOnly as ua, MIGRATE_TMP_PREFIX as uc, displayLogicalId as ui, DeploymentEventsReader as un, literalSplitDelimitersOf as uo, isWaitAbandonedError as ur, WorkGraph as us, withStackRecords as ut, noEchoAttributeNamesOf as v, unwrittenCreateOnlyReplacement as va, derivePartitionAndUrlSuffix as vc, malformedExportSourceWarning as vi, secretSafeKeyDisplay as vn, maskSecretsInError as vo, DiffCalculator as vr, ensureAssetStorage as vs, compensateRemovedDeletionProtection as vt, getPriorAttempts as w, MULTI_REGION_RECREATE_BLOCKED_TYPES as wa, hasPlainPrototype$1 as wc, malformedOrphanRowsKeptWarning as wi, collectDeclaredOutputNames as wn, dynamicReferenceTokens as wo, applyRoleArnIfSet as wr, validateContainerRepoName as ws, deleteTableWithIndexBusyRetry as wt, withResourceDeadline as x, hasNoCloudControlHandlers as xa, processStackMessages as xc, malformedLocalResourcesWarning as xi, exportNameSecretExposure as xn, redactSecretsForState as xo, classifyReplaySecretRegion as xr, parseBootstrapMarker as xs, resolveDynamoDbDeleteBudgetMs as xt, noEchoComparisonForTemplate as y, withoutSilentDropProperties as ya, AssemblyReader as yc, malformedLocalOutputsWarning as yi, carriedExportAliasExposure as yn, maskSecretsInText as yo, INTRINSIC_KEYS as yr, getBootstrapMarkerKey as ys, deleteBudgetKey as yt, planOrphanAdoption as z, replayWarn as za, refuseMalformedOrphanRecordsForDestroy as zi, acquireIdempotencyToken as zn, STATE_SOURCED_CROSS_GENERATION_RULES as zo, s3BucketWebsiteUrl as zr, redactedDockerCause as zs, resolveReplacementOldType as zt };
39635
- //# sourceMappingURL=deploy-engine-CjLZZzyn.js.map
40007
+ export { dropFailedHint as $, isMarkedCoordinate as $a, refuseMalformedResourcePropertiesForDestroy as $i, wouldReturnToSdkProvider as $n, hasReadableExportSet as $o, refStateLookupFromResource as $r, resolveApp as $s, secretNamePrintingBag as $t, gray as A, coerceWarmThroughput as Aa, displayAssemblyPath as Ac, malformedRenderedContainersWarning as Ai, maskingRetryLogger as An, recordNestedStackParameterExpressions as Ao, sendableAssumeRoleCommand as Ar, describeDockerExecFailure as As, removeProtectionTypeList as At, NESTED_PENDING_PARENT_REASON as B, replayWarn as Ba, refuseMalformedOrphanRecordsForDestroy as Bi, DBPROXY_TAGS_WHAT as Bn, STATE_SOURCED_CROSS_GENERATION_RULES as Bo, s3BucketWebsiteUrl as Br, redactedDockerCause as Bs, findNestedStackTypeChanges as Bt, recordedProtectionNote as C, findReplacedReadersOfRecreateTargets as Ca, defineOwnKey as Cc, malformedOrphanRecordsRefusalMessage as Ci, noEchoParameterValueSeed as Cn, scrubResourceRecord as Co, producerRegionsFromState as Cr, readBootstrapMarkerBody as Cs, INDEX_SETTLE_POLL_INTERVAL_MS as Ct, createReadOnlyAttributeHealerFactory as D, isStatefulRecreateTargetSync as Da, ownValue as Dc, malformedOrphansWarning as Di, bindingSkippedOutputs as Dn, pathCrossesDottedKey as Do, assertSendableRoleArn as Dr, buildDockerImage as Ds, S3_AUTO_DELETE_OBJECTS_TAG as Dt, formatResourceLine as E, isStatefulRecreateTargetForReplace as Ea, nullPrototypeRecord as Ec, malformedOrphansRefusalMessage as Ei, isExportAliasCollision as En, isUncertifiedBaselineMaskPosition as Eo, assertFlagRoleArn as Er, buildDenyExternalAccessPolicy as Es, ECR_AUTO_DELETE_IMAGES_TAG as Et, namesAnyDeclaredParameter as F, coerceCfnInteger as Fa, malformedStateRefusalMessage as Fi, earliestDefined as Fn, recordMaskOnlyValuesIn as Fo, isSettledInstanceState as Fr, getDockerCmd as Fs, isReplacementOrphan as Ft, nestedChildStackName as G, templateResourceTypes as Ga, refuseMalformedOutputsForDestroy as Gi, tagMapAsList as Gn, LockManager as Go, isImpossibleEmptyStoredAttribute as Gr, stripControlChars as Gs, redactedDeleteAddressFields as Gt, displacedPhysicalIdShown as H, requireConfigObject as Ha, refuseMalformedOrphansForDestroy as Hi, planTagDiff as Hn, TEMPLATE_SOURCED_RULES as Ho, isUnboundTemplateParameter as Hr, runDockerStreaming as Hs, inheritProducerRegions as Ht, reachableDivergentParameters as I, configBooleanRefusal as Ia, previewableOrphanRecords as Ii, ledgerForStack as In, recordNoEchoAttributeValues as Io, s3BucketArn as Ir, isDockerClientEnvKey as Is, planFailedOps as It, revertedNestedRowIds as J, canonicalLambdaFunctionName as Ja, refuseMalformedResourceEntriesForDeploy as Ji, stringifyIfAssigned as Jn, rebuildClientForBucketRegion as Jo, isNamelessDynamicReferenceError as Jr, Synthesizer as Js, updatePartialReason as Jt, recordDisplacedSkips as K, describeTypeWithThrottleRetry as Ka, refuseMalformedResourceAttributesForOrphan as Ki, tagPlanWarning as Kn, isLockInfoExpired as Ko, carriesDynamicReference as Kr, AssetManifestLoader as Ks, redactedDeleteAddressSkip as Kt, resourcesNamingDeclaredParameter as L, configIntegerRefusal as La, refuseDivergentRecordRegionForDestroy as Li, reserveStackCreateToken as Ln, recordProvenPublicExpression as Lo, s3BucketDomainName as Lr, isMalformedEnvKey as Ls, planRollback as Lt, red as M, toCfnInteger as Ma, resolveAssemblyPath as Mc, malformedResourcePropertiesWarning as Mi, findDestructiveChanges as Mn, carriesSecretMask as Mo, applyCallerIdentityCredentials as Mr, dockerSpawnEnvWithSensitive as Ms, recordAfterRollbackUpdate as Mt, yellow as N, toFiniteNumber as Na, clearBucketRegionCache as Nc, malformedResourcesWarning as Ni, formatDestructiveChange as Nn, provenPublicValue as No, callerEnvCredentials as Nr, finchSecretArgvRefusal as Ns, demoteSupersededOrphans as Nt, bold as O, renderStatefulReason as Oa, absoluteAssemblyPathEscape as Oc, malformedOutputsRefusalMessage as Oi, DEFAULT_RESOURCE_TIMEOUT_MS as On, identityKeyFor as Oo, explicitRoleArnOrThrow as Or, resolveDockerContextDirectory as Os, hasCdkAutoDeleteTag as Ot, computeParameterTaint as P, coerceCfnBoolean as Pa, resolveBucketRegion as Pc, malformedScrubResourceEntriesRefusalMessage as Pi, RollbackInlinePolicyWriters as Pn, recordMaskOnlyValue as Po, envCredentialsAreAssumedRole as Pr, formatDockerLoginError as Ps, isJournaledOrphan as Pt, deleteJournaledOrphans as Q, TemplateParser as Qa, refuseMalformedResourceEntriesForOrphan as Qi, isCustomResource as Qn, exportNamesCarriedFrom as Qo, isStalePlaceholderArnAttribute as Qr, loadCdkJson as Qs, orphanRecordsPrintingBag as Qt, makeSiblingClaimReader as R, configStringRefusal as Ra, refuseMalformedNestedChildOutputs as Ri, withCreateTokenLedger as Rn, wholeStringLeavesOf as Ro, s3BucketDualStackDomainName as Rr, partitionSensitiveEnv as Rs, replacementNeverSwapped as Rt, recordedProtectionEvidence as S, hasNoCloudControlHandlers as Sa, processStackMessages as Sc, malformedLocalResourcesWarning as Si, isWholeDynamicReferenceValue as Sn, redactSecretsForState as So, classifyReplaySecretRegion as Sr, parseBootstrapMarker as Ss, DELETE_INDEX_WAIT_PROCEED_NOTE as St, markRefusedBeforeApplying as T, MULTI_REGION_RECREATE_BLOCKED_TYPES as Ta, hasPlainPrototype$1 as Tc, malformedOrphanRowsKeptWarning as Ti, collectPublishedOutputNames as Tn, dynamicReferenceTokens as To, applyRoleArnIfSet as Tr, validateContainerRepoName as Ts, waitForIndexesSettled as Tt, dropSettledNestedJournals as U, requireConfigString as Ua, refuseMalformedOrphansForOrphan as Ui, readTagList as Un, WHOLE_DYNAMIC_REFERENCE_PATTERN as Uo, parameterTypeMayLoseSecretIdentity as Ur, warnFinchArgvExposure as Us, REDACTED_DELETE_ADDRESS_SKIP_REASON as Ut, displacedOpClause as V, requireConfigArray as Va, refuseMalformedOrphans as Vi, DBPROXY_TAG_OPTIONS as Vn, STATE_SOURCED_READBACK_RULES as Vo, coerceParameterTypedValue as Vr, runDockerForeground as Vs, getCurrentProducerRegions as Vt, getNestedRevertRun as W, prefetchCreateOnlyPropertyPaths as Wa, refuseMalformedOutputs as Wi, refuseMalformedDesiredTags as Wn, isSingleDynamicReferenceToken as Wo, getAccountInfo as Wr, escapeRegExp$3 as Ws, isRedactedRecordedValue as Wt, getCurrentNestedStackContext as X, sameLambdaFunctionAddress as Xa, refuseMalformedResourceEntriesForImport as Xi, ProviderRegistry as Xn, acceptedCreateOnlyDropsOf as Xo, AWS_NO_VALUE as Xr, getDefaultStateBucketName as Xs, journaledOrphanPrintingBag as Xt, withNestedRevertRun as Y, lambdaFunctionNameForMask as Ya, refuseMalformedResourceEntriesForDestroy as Yi, CC_BROKEN_REASON as Yn, splitImportedOps as Yo, keepsSecretReferenceToken as Yr, synthesisStatusMessage as Ys, completedReplayEntries as Yt, withNestedStackContext as Z, DagBuilder as Za, refuseMalformedResourceEntriesForImportSave as Zi, ccBrokenReason as Zn, describeRegionValueKind as Zo, cfnRefValueFromPhysicalId as Zr, getLegacyStateBucketName as Zs, maskEventTextWithBoundBags as Zt, makeCanonicalizePropertiesFn as _, findActionableSilentDrops as _a, PARTITION_TABLE as _c, malformedDriftResourcePropertiesWarning as _i, secretBearingStateKeyWarning as _n, createSecretMasker as _o, reEnableInstanceApiTermination as _r, BOOTSTRAP_MARKER_PREFIX as _s, beginDeleteWait as _t, findNestedTemplateTreeDefect as a, refuseMalformedResourcesForExport as aa, resolveUseCdkBootstrapAssets as ac, STATE_REGION_DIVERGED as ai, createPreDeleteFinalSnapshot as an, passedNoEchoParametersOf as ao, unchangedBehindSecretReference as ar, orphansAfterRollback as as, replayFailedOperations as at, noEchoComparisonForTemplate as b, withoutSilentDropProperties as ba, AssemblyReader as bc, malformedLocalOutputsWarning as bi, exportNameNoEchoParameters as bn, maskSecretsInText as bo, IntrinsicFunctionResolver as br, getBootstrapMarkerKey as bs, resolveDynamoDbDeleteBudgetClock as bt, renderNestedTemplateTreeDefect as c, repairMalformedOrphansForReadOnly as ca, ssmResolvedValueType as cc, UNREADABLE_RESOURCES_MAP_ROW as ci, refusesFinalSnapshot as cn, carryLogOnlyValues as co, deleteSkipReason as cr, AssetPublisher as cs, destroyStackRecordsView as ct, conditionInputsFrom as d, repairMalformedResourcePropertiesForReadOnly as da, MIGRATE_TMP_PREFIX as dc, displayLogicalId as di, DeploymentEventsStore as dn, literalSplitDelimitersOf as do, markWaitAbandoned as dr, WorkGraph as ds, PROTECTION_PROPERTY_BY_TYPE as dt, refuseMalformedResourcePropertiesForDrift as ea, resolveAutoAssetStorage as ec, parseWebACLArn as ei, stateSecretNameNeedles as en, maskReadbackAtCoordinates as eo, isCustomResourceType as er, hasReasonlessBaselineRefusal as es, isHandledOrphan as et, parentSuppliedValues as f, repairMalformedResourcesForReadOnly as fa, findLargeInlineResources as fc, hasReadableOrphans as fi, extractDeploymentEventError as fn, logOnlyValueCount as fo, disableInstanceApiTermination as fr, buildAssetRedirectMap as fs, isProtectionValueActive as ft, mergeNoChangeOutputs as g, withheldAccountClause as ga, expectedOwnerParam as gc, isReadableResourceEntry as gi, secretBearing as gn, shareLogOnlyValues as go, reDisableInstanceApiTermination as gr, AssetModeResolver as gs, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as gt, keptWholeReasonText as h, unreadableResourceEntries as ha, decodeListingKey as hc, isReadableOrphanRecord as hi, exportAliasCollisionScrubWarning as hn, recordLogOnlyValue as ho, observeThenDisableInstanceApiTermination as hr, rewriteTemplateAssetReferences as hs, DynamoDBGlobalTableProvider as ht, childTemplateLoader as i, refuseMalformedResourcesForDestroy as ia, resolveStateBucketWithDefaultAndSource as ic, JSON_LISTING_HOLE_VALUE as ii, ccRoutedFinalSnapshotError as in, noEchoOutputsComparison as io, slowCcOperationTimeoutMs as ir, isReadableBag as is, sameJournaledOrphans as it, green as j, isWarmThroughputDecrease as ja, renderAssemblyPathEscape as jc, malformedResourceEntriesWarning as ji, constructPathOf as jn, recoverMaskedOutput as jo, AWS_CREDENTIAL_ENV_KEYS as jr, describeDockerFailure as js, orphanDeleteNeedsIdentity as jt, cyan as k, WARM_THROUGHPUT_MEMBERS as ka, describeFileReadFailure as kc, malformedOutputsWarning as ki, DEFAULT_RESOURCE_WARN_AFTER_MS as kn, inheritNestedStackParameterAssociations as ko, isIamRoleArn as kr, describeDockerCapturedOutput as ks, isTruthyCfnBoolean as kt, templateIdentity as l, repairMalformedOutputsForReadOnly as la, CFN_TEMPLATE_BODY_LIMIT as lc, accountArgs as li, unsupportedFinalSnapshotError as ln, createUnionSecretMasker as lo, withIndeterminateGuard as lr, isSensitiveAttributeName as ls, getStackRecords as lt, isSecretBearingReferenceString as m, unreadableOrphanRecords as ma, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as mc, hasReadableResources as mi, displayTextOrWithheld as mn, recordLogOnlyParameterValue as mo, isTerminationProtectionPropagationError as mr, loadPublishableAssetManifest as ms, readProtection as mt, IMPLICIT_DELETE_DEPENDENCIES as n, refuseMalformedResourcePropertiesForOrphan as na, resolveSkipPrefix as nc, parameterInputsFor as ni, PRE_DELETE_SNAPSHOT_TYPES as nn, maskedLeafCoordinatesOf as no, withPrintingSecrets as nr, importableOutputKeys as ns, loadJournaledOrphans as nt, isAbsoluteAssetPath as o, refuseMalformedState as oa, stateBucketExistenceConfirmed as oc, STATE_RESOURCES_MALFORMED as oi, effectiveDeletionPolicy as on, readsNoEchoSource as oo, UNSPECIFIED_SKIP_REASON as or, orphansCarriedFrom as os, replayRollback as ot, readRecordedConditionVerdicts as p, unpreviewableOrphanRecords as pa, uploadCfnTemplate as pc, hasReadableOutputs as pi, WITHHELD_NAME_DISPLAY as pn, printingCorpusOf as po, ec2InstanceProtectionSite as pr, createAssetRedirectResolver as ps, perType as pt, revertNestedChildFromJournal as q, withRetry as qa, refuseMalformedResourceEntries as qi, definedAttributes as qn, S3StateBackend as qo, carriesFetchableDynamicReference as qr, getDockerImageBySourceHash as qs, updatePartialMessage as qt, computeImplicitDeleteEdges as r, refuseMalformedResourcesForDeploy as ra, resolveStateBucketWithDefault as rc, passedParameterClassesOf as ri, buildFinalSnapshotIdentifier as rn, noEchoLeavesOf as ro, CloudControlProvider as rr, importableOutputs as rs, makeForeignHolderScan as rt, listNestedTemplateRows as s, repairMalformedOrphanRecordsForReadOnly as sa, warnDeprecatedNoPrefixCliFlag as sc, UNREADABLE_ORPHANS_CONTAINER_ROW as si, isFinalSnapshotError as sn, liveMatchesUnresolvedTokenFrame as so, deleteIndeterminateGuards as sr, shouldRetainResource as ss, awaitInFlightSibling as st, DeployEngine as t, refuseMalformedResourcePropertiesForExport as ta, resolveCaptureObservedState as tc, withSharedDrainBudget as ti, ATOMIC_FINAL_SNAPSHOT_TYPES as tn, maskWholeValue as to, getCurrentResourceSecrets as tr, hasUnverifiableParameterRefusal as ts, journaledOrphanLines as tt, conditionFingerprint as u, repairMalformedResourceEntriesForReadOnly as ua, CFN_TEMPLATE_URL_LIMIT as uc, deployRefusesOrphanRowsReason as ui, DeploymentEventsReader as un, hasMaskableValues as uo, isWaitAbandonedError as ur, stringifyValue as us, withStackRecords as ut, withResourceDeadline as v, findSilentDropProperties as va, canonicalizeRegion as vc, malformedExportNamesWarning as vi, secretSafeKeyDisplay as vn, errorCauseChain as vo, DiffCalculator as vr, assertAssetBucketRegion as vs, compensateRemovedDeletionProtection as vt, getPriorAttempts as w, shownType as wa, hasOwnKey as wc, malformedOrphanRecordsWarning as wi, collectDeclaredOutputNames as wn, DYNAMIC_REFERENCE_TOKEN_SCAN as wo, regionLessSecretName as wr, validateAssetBucketName as ws, deleteTableWithIndexBusyRetry as wt, noEchoParameterNamesOf as x, NO_CC_HANDLERS_REASON as xa, StageLoadError as xc, malformedLocalResourceEntriesWarning as xi, exportNameSecretExposure as xn, markSameGenerationBag as xo, poisonRenderedSpellingsCollidingIn as xr, isCrossRegionRedirect as xs, resolveDynamoDbDeleteBudgetMs as xt, noEchoAttributeNamesOf as y, unwrittenCreateOnlyReplacement as ya, derivePartitionAndUrlSuffix as yc, malformedExportSourceWarning as yi, carriedExportAliasExposure as yn, maskSecretsInError as yo, INTRINSIC_KEYS as yr, ensureAssetStorage as ys, deleteBudgetKey as yt, planOrphanAdoption as z, readConfigString as za, refuseMalformedOrphanRecords as zi, acquireIdempotencyToken as zn, STATE_SOURCED_BASELINE_RULES as zo, s3BucketRegionalDomainName as zr, redactDockerArgvValues as zs, resolveReplacementOldType as zt };
40008
+ //# sourceMappingURL=deploy-engine-C0tkSwvX.js.map