@go-to-k/cdkd 0.296.3 → 0.296.5

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 (28) hide show
  1. package/dist/{asg-provider-CksS_6jO.js → asg-provider-DhyYUns2.js} +4 -4
  2. package/dist/{asg-provider-CksS_6jO.js.map → asg-provider-DhyYUns2.js.map} +1 -1
  3. package/dist/cli.js +2 -2
  4. package/dist/{deploy-engine-Dre6eDNJ.js → deploy-engine-Cm7z6aQk.js} +263 -84
  5. package/dist/deploy-engine-Cm7z6aQk.js.map +1 -0
  6. package/dist/{iam-policy-targets-DSDSdxXz.js → iam-policy-targets-td1X_kKN.js} +2 -2
  7. package/dist/{iam-policy-targets-DSDSdxXz.js.map → iam-policy-targets-td1X_kKN.js.map} +1 -1
  8. package/dist/{iam-role-provider-D9wk9Bnh.js → iam-role-provider-CXGJXY5J.js} +4 -4
  9. package/dist/{iam-role-provider-D9wk9Bnh.js.map → iam-role-provider-CXGJXY5J.js.map} +1 -1
  10. package/dist/index.d.ts +9 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +4 -4
  13. package/dist/{logger-Dvc7ddKe.js → logger-DAaB7GFO.js} +2 -2
  14. package/dist/{logger-Dvc7ddKe.js.map → logger-DAaB7GFO.js.map} +1 -1
  15. package/dist/{neptune-provider-B1GRQ6UO.js → neptune-provider-DCgJR2NX.js} +4 -4
  16. package/dist/{neptune-provider-B1GRQ6UO.js.map → neptune-provider-DCgJR2NX.js.map} +1 -1
  17. package/dist/{program-DFehMfoh.js → program-DPk5db_j.js} +43 -24
  18. package/dist/program-DPk5db_j.js.map +1 -0
  19. package/dist/{provider-classes-Ca6o5by0.js → provider-classes-oZ8a4BHE.js} +287 -17
  20. package/dist/provider-classes-oZ8a4BHE.js.map +1 -0
  21. package/dist/{rds-provider-Dl--9uQU.js → rds-provider-B0JrOskT.js} +4 -4
  22. package/dist/{rds-provider-Dl--9uQU.js.map → rds-provider-B0JrOskT.js.map} +1 -1
  23. package/dist/{version-B5LYpWJH.js → version-CjMP26Dj.js} +2 -2
  24. package/dist/{version-B5LYpWJH.js.map → version-CjMP26Dj.js.map} +1 -1
  25. package/package.json +1 -1
  26. package/dist/deploy-engine-Dre6eDNJ.js.map +0 -1
  27. package/dist/program-DFehMfoh.js.map +0 -1
  28. package/dist/provider-classes-Ca6o5by0.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { r as getAwsClients, s as __exportAll } from "./aws-clients-CnmtbrxD.js";
2
- import { A as displaySafe, E as UNRENDERABLE, F as safeMsg, L as truncateCodePoints, M as isPasteableIdent, O as displayAwsMessage, P as plainIdentOr, S as withoutGeneratedFallbackName, T as STACK_REF_MAX_CODE_POINTS, _ as getCurrentSkipPrefix, b as withSkipPrefix, c as getLiveRenderer, f as applyDefaultNameForFallback, g as generateResourceNameWithFallback, h as generateResourceName, j as displayStackName, k as displayIdent, m as explicitNamePropertyFor, n as getLogger, r as isStdoutReservedForPayload, s as installLogLineMaskerSource, v as getCurrentStackName, w as SECRET_REF_MAX_CODE_POINTS, x as withStackName, y as looksLikeCdkdGeneratedName } from "./logger-Dvc7ddKe.js";
3
- import { $n as markRedactedCause, $t as LockError, A as isTerminalDeleteFailure, At as CUSTOM_RESOURCE_RESPONSE_PREFIX, Bn as isAmbiguousCcHandlerErrorCode, Bt as clientDefaultsFor, C as refusalTypeShown, Cn as physicalIdShownBesideCommand, Ct as buildForceUnlockCommand, D as ProtectionFlipRegistry, Dn as shellQuote, Dt as formatLockOperation, En as shellBoundedDisplay, Et as formatLockExpiry, Fn as isRecreateRetryableError, Ft as producerRecordKey, Gn as retryClassificationText, H as pasteableAwsCommand, Hn as isIamPropagationError, Ht as AccountIdUnavailableError, In as isReplayedNameCollisionFrom, J as isInterruptedWaitError, Jn as safeStringify$1, Kn as describeAwsFailure, Kt as CrossAccountSecretRefusalError, Lt as withPasteableAwsProfile, M as observeThenDisableProtection, Mn as hasReplayMayCollide, Mt as injectiveKey, N as protectionFlipKey, Nn as isNameCollisionErrorFrom, O as compensateProtectionFlip, On as withheldTargetClause, Ot as formatLockOwner, Pn as isNameCooldownError, Q as canonicalizeRoute53QueryName, Qn as markNonRetryable, R as DELETION_PROTECTION_DOC_POINTER, Rn as markReplayMayCollide, Rt as ambientClientDefaults, S as quotedRemedyLogicalId, Sn as pasteableCommand, St as UNREPRODUCIBLE_LOCK_CLAUSE, T as resolveExplicitPhysicalId, Tn as quotedOrDescribed, U as protectedReplacementAdvice, Un as isRetryableTransientError, Ut as AssetError, Vn as isAmbiguousOutcomeError, Vt as credentialFingerprint, Wn as isTransientServerError, Wt as CdkdError, X as ElapsedBudgetRegistry, Xn as isMarkedNonRetryable, Xt as IntrinsicResolutionRefusalError, Y as startInterruptWatch, Yt as DynamicReferenceRegionAmbiguousError, Z as monotonicNowMs, Zn as isThrottlingError, _n as SHELL_ACTIVE_WHY, _t as hasCreatedBeforeFailure, an as ResourceTimeoutError, at as segmentAfterAnchor, b as isQuotableImportValue, bt as markAuxiliaryFailure, ct as createMaskedRetryLogger, d as prepareRemovalForUpdate, dt as maskerOrIdentity, en as MacroExpansionError, er as wrapMaskedAwsError, et as compositeIdSeparatorRefusal, f as removalWarning, ft as withDerivedNameMasks, g as assertRegionMatch, gn as SHELL_ACTIVE, gt as createdBeforeFailure, h as RESOURCE_NOT_FOUND, i as holdsSecretDerivedEntry, in as ProvisioningError, it as resourceTypeShown, jn as isUpdateUnsupportedError, jt as DEFAULT_STATE_PREFIX, k as deleteWithProtectionCompensation, kt as sanitizeRecoveryValue, l as withUnchangedSecretPrincipalLists, ln as StateError, lt as isSecretDerivedValue, m as withoutInjectedRemovals, mt as carryCreatedBeforeFailure, nt as logicalIdShown, on as ResourceUpdateNotSupportedError, ot as stateOrphanRecordRemedy, pn as normalizeAwsError, pt as RETRY_AUXILIARY_OWNER, qt as DependencyError, st as createMaskedLogSinks, tn as MalformedProducerRecordRefusalError, un as SynthesisError, ut as maskDeep, vn as UNSHOWABLE_VALUE, vt as isAuxiliaryFailure, wn as plainOrDescribed, x as normalizeAwsTagsToCfn, xn as isInertUnquoted, xt as markCreatedBeforeFailure, yn as commandHole, yt as isAuxiliaryMarkOf, zn as formatRetryClassificationSignals, zt as ambientCredentialConfig } from "./iam-policy-targets-DSDSdxXz.js";
2
+ import { A as displayIdent, C as withoutGeneratedFallbackName, D as UNRENDERABLE, E as STACK_REF_MAX_CODE_POINTS, F as plainIdentOr, I as safeMsg, M as displayStackName, N as isPasteableIdent, R as truncateCodePoints, S as withStackName, T as SECRET_REF_MAX_CODE_POINTS, _ as generateResourceNameWithFallback, b as looksLikeCdkdGeneratedName, c as installLogLineMaskerSource, g as generateResourceName, h as explicitNamePropertyFor, j as displaySafe, k as displayAwsMessage, l as getLiveRenderer, n as getLogger, p as applyDefaultNameForFallback, r as isStdoutReservedForPayload, s as currentLogLineMasker, v as getCurrentSkipPrefix, x as withSkipPrefix, y as getCurrentStackName } from "./logger-DAaB7GFO.js";
3
+ import { $n as markRedactedCause, $t as LockError, A as isTerminalDeleteFailure, At as CUSTOM_RESOURCE_RESPONSE_PREFIX, Bn as isAmbiguousCcHandlerErrorCode, Bt as clientDefaultsFor, C as refusalTypeShown, Cn as physicalIdShownBesideCommand, Ct as buildForceUnlockCommand, D as ProtectionFlipRegistry, Dn as shellQuote, Dt as formatLockOperation, En as shellBoundedDisplay, Et as formatLockExpiry, Fn as isRecreateRetryableError, Ft as producerRecordKey, Gn as retryClassificationText, H as pasteableAwsCommand, Hn as isIamPropagationError, Ht as AccountIdUnavailableError, In as isReplayedNameCollisionFrom, J as isInterruptedWaitError, Jn as safeStringify$1, Kn as describeAwsFailure, Kt as CrossAccountSecretRefusalError, Lt as withPasteableAwsProfile, M as observeThenDisableProtection, Mn as hasReplayMayCollide, Mt as injectiveKey, N as protectionFlipKey, Nn as isNameCollisionErrorFrom, O as compensateProtectionFlip, On as withheldTargetClause, Ot as formatLockOwner, Pn as isNameCooldownError, Q as canonicalizeRoute53QueryName, Qn as markNonRetryable, R as DELETION_PROTECTION_DOC_POINTER, Rn as markReplayMayCollide, Rt as ambientClientDefaults, S as quotedRemedyLogicalId, Sn as pasteableCommand, St as UNREPRODUCIBLE_LOCK_CLAUSE, T as resolveExplicitPhysicalId, Tn as quotedOrDescribed, U as protectedReplacementAdvice, Un as isRetryableTransientError, Ut as AssetError, Vn as isAmbiguousOutcomeError, Vt as credentialFingerprint, Wn as isTransientServerError, Wt as CdkdError, X as ElapsedBudgetRegistry, Xn as isMarkedNonRetryable, Xt as IntrinsicResolutionRefusalError, Y as startInterruptWatch, Yt as DynamicReferenceRegionAmbiguousError, Z as monotonicNowMs, Zn as isThrottlingError, _n as SHELL_ACTIVE_WHY, _t as hasCreatedBeforeFailure, an as ResourceTimeoutError, at as segmentAfterAnchor, b as isQuotableImportValue, bt as markAuxiliaryFailure, ct as createMaskedRetryLogger, d as prepareRemovalForUpdate, dt as maskerOrIdentity, en as MacroExpansionError, er as wrapMaskedAwsError, et as compositeIdSeparatorRefusal, f as removalWarning, ft as withDerivedNameMasks, g as assertRegionMatch, gn as SHELL_ACTIVE, gt as createdBeforeFailure, h as RESOURCE_NOT_FOUND, i as holdsSecretDerivedEntry, in as ProvisioningError, it as resourceTypeShown, jn as isUpdateUnsupportedError, jt as DEFAULT_STATE_PREFIX, k as deleteWithProtectionCompensation, kt as sanitizeRecoveryValue, l as withUnchangedSecretPrincipalLists, ln as StateError, lt as isSecretDerivedValue, m as withoutInjectedRemovals, mt as carryCreatedBeforeFailure, nt as logicalIdShown, on as ResourceUpdateNotSupportedError, ot as stateOrphanRecordRemedy, pn as normalizeAwsError, pt as RETRY_AUXILIARY_OWNER, qt as DependencyError, st as createMaskedLogSinks, tn as MalformedProducerRecordRefusalError, un as SynthesisError, ut as maskDeep, vn as UNSHOWABLE_VALUE, vt as isAuxiliaryFailure, wn as plainOrDescribed, x as normalizeAwsTagsToCfn, xn as isInertUnquoted, xt as markCreatedBeforeFailure, yn as commandHole, yt as isAuxiliaryMarkOf, zn as formatRetryClassificationSignals, zt as ambientCredentialConfig } from "./iam-policy-targets-td1X_kKN.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-B5LYpWJH.js";
5
+ import { t as getCdkdVersion } from "./version-CjMP26Dj.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";
@@ -15777,6 +15777,15 @@ function hasStringPhysicalId(entry) {
15777
15777
  const physicalId = entry.physicalId;
15778
15778
  return typeof physicalId === "string" && physicalId !== "";
15779
15779
  }
15780
+ function hasAddressablePhysicalId(entry) {
15781
+ const physicalId = entry.physicalId;
15782
+ return typeof physicalId === "string" && physicalId.trim() !== "";
15783
+ }
15784
+ function unaddressableUpdateRefusalMessage(rawStackName, rawRegion, logicalId, resourceType) {
15785
+ const stackName = absentIfEmpty(rawStackName);
15786
+ const region = absentIfEmpty(rawRegion);
15787
+ return `${stackClause(stackName, region)} holds a record for ${displayIdent(logicalId)} (${displayIdent(resourceType)}) with no non-empty string 'physicalId', so cdkd cannot address that resource in AWS and did not try to update it. 'cdkd deploy' fails on it rather than skipping it, since a skipped update would end the deploy without the template's change. Nothing was sent for this resource. Repair the record's 'physicalId' and re-run. ${inspectClause(stackName, region)}Inspect the record with: ` + inspectCommand(stackName, region);
15788
+ }
15780
15789
  function unpreviewableOrphanRecords(state) {
15781
15790
  if (!Array.isArray(state.orphans)) return [];
15782
15791
  const rows = state.orphans;
@@ -18093,7 +18102,7 @@ function noteAttributeSecrecy(logicalId, attributeName, value, context) {
18093
18102
  return value;
18094
18103
  }
18095
18104
  function recordSecretNamedRead(logicalId, value, context) {
18096
- const bag = context.printingSecrets ?? context.recordedSecretValues;
18105
+ const bag = context.secretNameSink ?? context.printingSecrets ?? context.recordedSecretValues;
18097
18106
  if (bag === void 0 || context.secretNameNeedles === void 0) return;
18098
18107
  const needles = context.secretNameNeedles(logicalId);
18099
18108
  if (needles === void 0) return;
@@ -19395,6 +19404,7 @@ async function resolveSplit(splitArgs, context) {
19395
19404
  }
19396
19405
  }
19397
19406
  if (context.printingSecrets !== void 0 && hasLogOnlyValues(context.printingSecrets)) recordLogOnlySplitFragments([context.printingSecrets], context.printingSecrets, resolvedValue, String(delimiter));
19407
+ if (context.secretNameSink !== void 0 && hasLogOnlyValues(context.secretNameSink)) recordLogOnlySplitFragments([context.secretNameSink], context.secretNameSink, resolvedValue, String(delimiter));
19398
19408
  const pieceTwins = String(delimiter) === "" && this.maskRenderedNeedlesForLog(resolvedValue, lineContext) !== resolvedValue ? result.map(() => "***") : this.splitLogTwins(resolvedValue, delimiter, result, context);
19399
19409
  this.logger.debug(`Resolved Fn::Split: split by ${this.splitDelimiterRender(String(delimiter), lineContext)} resolved to ${this.logRender(JSON.stringify(this.maskValueLeaves(pieceTwins, lineContext)), lineContext, { structured: true })}`);
19400
19410
  return result;
@@ -19717,7 +19727,11 @@ async function resolveBase64(value, context) {
19717
19727
  }
19718
19728
  if (context.recordedSecretValues && this.hasLogOnlyNeedles(context) && this.maskPrintedNeedlesForLog(resolvedValue, context) !== this.maskNeedlesForLog(resolvedValue, context)) recordLogOnlyValue(context.recordedSecretValues, result);
19719
19729
  const printing = context.printingSecrets;
19720
- if (printing !== void 0 && hasMaskableValues(printing) && this.maskRenderedNeedlesForLog(resolvedValue, context) !== this.maskPrintedNeedlesForLog(resolvedValue, context)) recordLogOnlyValue(printing, result);
19730
+ let withPrinting;
19731
+ const maskedWithPrinting = () => withPrinting ??= this.maskNeedlesOfBags(resolvedValue, context, printing);
19732
+ if (printing !== void 0 && hasMaskableValues(printing) && maskedWithPrinting() !== this.maskPrintedNeedlesForLog(resolvedValue, context)) recordLogOnlyValue(printing, result);
19733
+ const sink = context.secretNameSink;
19734
+ if (sink !== void 0 && hasMaskableValues(sink) && this.maskNeedlesOfBags(resolvedValue, context, printing, sink) !== maskedWithPrinting()) recordLogOnlyValue(sink, result);
19721
19735
  this.logger.debug(`Resolved Fn::Base64: ${this.logRender(inputLogText, context)} resolved to ${this.logRender(inputLogText !== resolvedValue ? "***" : result, context)}`);
19722
19736
  return result;
19723
19737
  }
@@ -19851,7 +19865,7 @@ function bigIntToIPv6(n) {
19851
19865
  function maskSecretsRaw(text, context) {
19852
19866
  const registered = this.registeredLogTwin(text, context);
19853
19867
  const needled = this.maskNeedlesForLog(text, context);
19854
- if (this.hasLogOnlyNeedles(context) || hasMaskableValues(context?.printingSecrets)) {
19868
+ if (this.hasLogOnlyNeedles(context) || hasMaskableValues(context?.printingSecrets) || hasMaskableValues(context?.secretNameSink)) {
19855
19869
  const printed = this.maskRenderedNeedlesForLog(text, context);
19856
19870
  if (printed !== needled) return registered === void 0 ? printed : "***";
19857
19871
  }
@@ -19882,13 +19896,13 @@ function maskPrintedNeedlesForLog(text, context) {
19882
19896
  return this.maskNeedlesOfBags(text, context);
19883
19897
  }
19884
19898
  function maskRenderedNeedlesForLog(text, context) {
19885
- return this.maskNeedlesOfBags(text, context, context?.printingSecrets);
19899
+ return this.maskNeedlesOfBags(text, context, context?.printingSecrets, context?.secretNameSink);
19886
19900
  }
19887
- function maskNeedlesOfBags(text, context, printing) {
19901
+ function maskNeedlesOfBags(text, context, ...printing) {
19888
19902
  const union = unionOfSecretBags([
19889
19903
  context?.inheritedSecrets,
19890
19904
  context?.recordedSecretValues,
19891
- printing
19905
+ ...printing
19892
19906
  ]);
19893
19907
  return hasMaskableValues(union) ? maskSecretsInText(text, union) : text;
19894
19908
  }
@@ -21286,6 +21300,11 @@ function deleteSkipReason(result) {
21286
21300
  const trimmed = result.reason.trim();
21287
21301
  return trimmed === "" ? UNSPECIFIED_SKIP_REASON : trimmed;
21288
21302
  }
21303
+ function deleteLeftInPlace(result) {
21304
+ if (result === void 0 || result.outcome !== "deleted") return void 0;
21305
+ const left = result.leftInPlace;
21306
+ return typeof left === "string" && left.length > 0 ? left : void 0;
21307
+ }
21289
21308
  const UNSPECIFIED_SKIP_REASON = "no reason reported by the provider";
21290
21309
  function deleteSkippedMessage(logicalId, physicalId, reason, duringClause, opts) {
21291
21310
  return `cdkd did not confirm ${plainOrDescribed(logicalId, "logical id")} (${opts?.commandFreeLine === true ? displayIdent(physicalId, { maxCodePoints: 613 }) : skipPhysicalIdShown(physicalId)}) was deleted ${duringClause}, so it may still exist: ${skipReasonShown(reason)}`;
@@ -22031,7 +22050,7 @@ var CloudControlProvider = class {
22031
22050
  const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
22032
22051
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
22033
22052
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
22034
- const { ASGProvider } = await import("./asg-provider-CksS_6jO.js");
22053
+ const { ASGProvider } = await import("./asg-provider-DhyYUns2.js");
22035
22054
  const delegateRegion = ambientRegion();
22036
22055
  let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
22037
22056
  if (asgProvider === void 0) {
@@ -22137,7 +22156,7 @@ var CloudControlProvider = class {
22137
22156
  const family = SDK_DELETE_FAMILIES.get(resourceType);
22138
22157
  const cached = this.sdkDeleteDelegates.get(family);
22139
22158
  if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
22140
- const provider = family === "rds" ? new (await (import("./rds-provider-Dl--9uQU.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-B1GRQ6UO.js"))).NeptuneProvider({ region: ccRegion });
22159
+ const provider = family === "rds" ? new (await (import("./rds-provider-B0JrOskT.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-DCgJR2NX.js"))).NeptuneProvider({ region: ccRegion });
22141
22160
  this.sdkDeleteDelegates.set(family, {
22142
22161
  region: ccRegion,
22143
22162
  provider
@@ -23317,6 +23336,9 @@ function describeCfnResponseBody(body, parsed) {
23317
23336
  const line = `Status=${capForLog(status)} PhysicalResourceId=${capForLog(physicalId)} ${dataPart}`;
23318
23337
  return line.length > DESCRIBE_MAX_LINE_CHARS ? `${line.slice(0, DESCRIBE_MAX_LINE_CHARS)}...(${line.length} chars total)` : line;
23319
23338
  }
23339
+ function respondedPhysicalId(response) {
23340
+ return hasAddressablePhysicalId({ physicalId: response.PhysicalResourceId }) ? response.PhysicalResourceId : void 0;
23341
+ }
23320
23342
  var CustomResourceProvider = class CustomResourceProvider {
23321
23343
  lambdaClient;
23322
23344
  snsClient;
@@ -23423,7 +23445,7 @@ var CustomResourceProvider = class CustomResourceProvider {
23423
23445
  ResourceProperties: this.stringifyProperties(properties)
23424
23446
  }), maskerOrIdentity(context?.maskSecrets));
23425
23447
  if (cfnResponse.Status === "FAILED") throw new Error(`Custom resource handler returned FAILED: ${cfnResponse.Reason || "Unknown reason"}`);
23426
- const physicalId = cfnResponse.PhysicalResourceId || logicalId;
23448
+ const physicalId = respondedPhysicalId(cfnResponse) ?? logicalId;
23427
23449
  const attributes = cfnResponse.Data || {};
23428
23450
  this.logger.debug(`Successfully created custom resource ${logicalId}: ${physicalId}`);
23429
23451
  return {
@@ -23456,7 +23478,7 @@ var CustomResourceProvider = class CustomResourceProvider {
23456
23478
  OldResourceProperties: this.stringifyProperties(previousProperties)
23457
23479
  }), maskerOrIdentity(context?.maskSecrets));
23458
23480
  if (cfnResponse.Status === "FAILED") throw new Error(`Custom resource handler returned FAILED: ${cfnResponse.Reason || "Unknown reason"}`);
23459
- const newPhysicalId = cfnResponse.PhysicalResourceId || physicalId;
23481
+ const newPhysicalId = respondedPhysicalId(cfnResponse) ?? physicalId;
23460
23482
  const wasReplaced = newPhysicalId !== physicalId;
23461
23483
  const attributes = cfnResponse.Data || {};
23462
23484
  this.logger.debug(`Successfully updated custom resource ${logicalId}: ${newPhysicalId}${wasReplaced ? " (replaced)" : ""}`);
@@ -28239,7 +28261,8 @@ var ReplayResolvers = class {
28239
28261
  };
28240
28262
  function regionAmbiguousReplaySecretError(logicalId, propertyPath, secretName, foreignProducerRegions, consumerRegion, execCtx) {
28241
28263
  const where = propertyPath === "" ? "" : ` property ${quotedPlainOr(propertyPath, "property path")}`;
28242
- return new CdkdError(`Rollback of ${shownLogicalId(logicalId)}${where} cannot re-resolve the secret reference ${quotedPlainOr(secretName, "secret name")}: the reference carries no region of its own, and this stack read across a region boundary (producer region(s) on record: ${foreignProducerRegions.map((r) => plainOrDescribed(r, "region")).join(", ")}), so it may have been resolved in one of those rather than in ${quotedOrDescribed(consumerRegion, "region")}. A secret of the same name in two regions is two independent values, so replaying this would write the WRONG secret to a live resource. Refusing instead. Resolve the reference in its own region and set the property directly (or spell it as a full ARN, which names its region and is resolved there), then re-run ${rerunRollbackPhrase(execCtx, "'cdkd rollback'")}.`, "ROLLBACK_SECRET_REGION_AMBIGUOUS");
28264
+ const error = new CdkdError(`Rollback of ${shownLogicalId(logicalId)}${where} cannot re-resolve the secret reference ${quotedPlainOr(secretName, "secret name")}: the reference carries no region of its own, and this stack read across a region boundary (producer region(s) on record: ${foreignProducerRegions.map((r) => plainOrDescribed(r, "region")).join(", ")}), so it may have been resolved in one of those rather than in ${quotedOrDescribed(consumerRegion, "region")}. A secret of the same name in two regions is two independent values, so replaying this would write the WRONG secret to a live resource. Refusing instead. Resolve the reference in its own region and set the property directly (or spell it as a full ARN, which names its region and is resolved there), then re-run ${rerunRollbackPhrase(execCtx, "'cdkd rollback'")}.`, "ROLLBACK_SECRET_REGION_AMBIGUOUS");
28265
+ return markNonRetryable(error);
28243
28266
  }
28244
28267
  function refuseUnprovenReplaySecret(leaf, propertyPath, logicalId, execCtx) {
28245
28268
  if (execCtx.producerRegionsIncomplete !== true) return;
@@ -29324,7 +29347,8 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
29324
29347
  skipped: 0,
29325
29348
  interrupted: false,
29326
29349
  remainingFailedOps: [],
29327
- orphaned: []
29350
+ orphaned: [],
29351
+ leftInPlace: 0
29328
29352
  };
29329
29353
  const { logger } = ctx;
29330
29354
  const resolver = new ReplayResolvers(ctx.region);
@@ -29431,7 +29455,12 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
29431
29455
  ...finalSnapshotIdentifier !== void 0 && { finalSnapshotIdentifier },
29432
29456
  ...ctx.skipFinalSnapshot === true && { skipFinalSnapshot: true },
29433
29457
  deletionPolicy: snapshotPolicy ? "Snapshot" : "Delete",
29434
- recordedAttributes: failedCreateRecord?.attributes
29458
+ recordedAttributes: failedCreateRecord?.attributes,
29459
+ ...op.physicalIdRecoveredFromError === true && {
29460
+ failedCreateOrphan: true,
29461
+ resolveAttemptedProperties: () => resolveReplayProps(op.attemptedProperties, resolver, secrets, ctx, op.logicalId),
29462
+ ...ctx.writtenThisRun !== void 0 && { writtenThisRun: ctx.writtenThisRun }
29463
+ }
29435
29464
  });
29436
29465
  throwIfDeleteSkipped(failedCreateDelete, op.logicalId, op.physicalId, "while deleting the partially-created resource", {
29437
29466
  ctx,
@@ -29440,6 +29469,12 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
29440
29469
  provisionedBy: deleteRoutedVia,
29441
29470
  mask
29442
29471
  });
29472
+ const leftInPlace = deleteLeftInPlace(failedCreateDelete);
29473
+ if (leftInPlace !== void 0) {
29474
+ logger.warn(safeMsg` Rollback: deleted partially-created ${shownLogicalId(op.logicalId)} (${refusalResourceType(op.resourceType)}) only in part — ${leftInPlace}; manual attention may be required`);
29475
+ result.warnings++;
29476
+ result.leftInPlace++;
29477
+ }
29443
29478
  if (!isReplacementOrphan(op)) delete stateResources[op.logicalId];
29444
29479
  await options.afterOp?.(op.logicalId);
29445
29480
  ctx.recordEvent?.({
@@ -30018,6 +30053,105 @@ function makeSiblingClaimReader(params) {
30018
30053
  };
30019
30054
  }
30020
30055
 
30056
+ //#endregion
30057
+ //#region src/deployment/secret-name-needles.ts
30058
+ function secretNameNeedlesOf(logicalId, record, secrets, options) {
30059
+ const physicalId = typeof record?.physicalId === "string" && record.physicalId !== "" ? record.physicalId : void 0;
30060
+ const bag = secrets !== void 0 && hasMaskableValues(secrets) ? secrets : void 0;
30061
+ const mask = (text) => bag === void 0 ? text : maskSecretsInText(text, bag);
30062
+ const unresolved = (value) => value.includes("{{resolve:") || value === "***";
30063
+ const named = {
30064
+ resourceType: record?.resourceType,
30065
+ properties: record?.properties,
30066
+ logicalId
30067
+ };
30068
+ const needles = /* @__PURE__ */ new Set();
30069
+ const add = (needle) => {
30070
+ if (typeof needle === "string" && needle !== "") needles.add(needle);
30071
+ };
30072
+ for (const [raw, derived] of secretDerivedNamePairs({
30073
+ ...named,
30074
+ physicalIds: []
30075
+ })) if (typeof raw === "string" && !unresolved(raw) && isSecretDerivedValue(raw, mask)) add(derived);
30076
+ for (const [raw, spelling] of secretDerivedNamePairs({
30077
+ ...named,
30078
+ physicalIds: [physicalId ?? "cdkd-no-physical-id-yet"]
30079
+ })) {
30080
+ if (!isSecretDerivedValue(raw, mask)) continue;
30081
+ if (unresolved(raw)) {
30082
+ if (physicalId === void 0) continue;
30083
+ add(spelling);
30084
+ } else {
30085
+ add(raw);
30086
+ if (raw.toLowerCase() !== raw && raw.length >= 4) add(raw.toLowerCase());
30087
+ }
30088
+ }
30089
+ const properties = record?.properties;
30090
+ const path = properties !== null && typeof properties === "object" && Object.hasOwn(properties, "Path") ? properties["Path"] : void 0;
30091
+ if (physicalId !== void 0 && isSecretDerivedValue(path, mask)) add(physicalId);
30092
+ const embedded = options === void 0 ? secrets : options.embedded;
30093
+ const embeddedBag = embedded !== void 0 && hasMaskableValues(embedded) ? embedded : void 0;
30094
+ if (embeddedBag !== void 0 && physicalId !== void 0) {
30095
+ for (const needle of printingCorpusOf(embeddedBag).keys()) if (needle !== "" && (needle === physicalId || needle.length >= 4 && physicalId.includes(needle))) add(needle);
30096
+ }
30097
+ return needles.size > 0 ? needles : void 0;
30098
+ }
30099
+ function secretNamesReadBy(logicalId, record, resources, judge = () => ({
30100
+ secrets: void 0,
30101
+ embedded: void 0
30102
+ })) {
30103
+ const read = /* @__PURE__ */ new Set();
30104
+ const leaves = [...wholeStringLeavesOf(record?.properties)].filter((leaf) => leaf !== "");
30105
+ if (leaves.length === 0) return read;
30106
+ for (const [otherId, other] of Object.entries(resources)) {
30107
+ if (otherId === logicalId) continue;
30108
+ const bags = judge(otherId);
30109
+ const needles = secretNameNeedlesOf(otherId, other, bags.secrets, { embedded: bags.embedded });
30110
+ if (needles === void 0) continue;
30111
+ for (const needle of needles) if (leaves.some((leaf) => leaf === needle || needle.length >= 4 && leaf.includes(needle))) read.add(needle);
30112
+ }
30113
+ return read;
30114
+ }
30115
+ function stateSecretNameNeedles(resources, secrets) {
30116
+ return (logicalId) => secretNameNeedlesOf(logicalId, Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0, secrets, { embedded: void 0 });
30117
+ }
30118
+ function secretNamePrintingBag(logicalId, resources) {
30119
+ const bag = /* @__PURE__ */ new Map();
30120
+ const record = Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0;
30121
+ for (const needle of secretNameNeedlesOf(logicalId, record, void 0) ?? []) recordLogOnlyValue(bag, needle);
30122
+ for (const needle of secretNamesReadBy(logicalId, record, resources)) recordLogOnlyValue(bag, needle);
30123
+ return bag;
30124
+ }
30125
+ function journaledOrphanPrintingBag(ops, stateResources) {
30126
+ const bag = /* @__PURE__ */ new Map();
30127
+ for (const op of ops) {
30128
+ const record = {
30129
+ resourceType: op.resourceType,
30130
+ physicalId: op.physicalId,
30131
+ properties: op.attemptedProperties
30132
+ };
30133
+ const replaced = Object.hasOwn(stateResources, op.logicalId) ? stateResources[op.logicalId] : void 0;
30134
+ for (const needle of [
30135
+ ...secretNameNeedlesOf(op.logicalId, record, void 0) ?? [],
30136
+ ...secretNameNeedlesOf(op.logicalId, replaced, void 0) ?? [],
30137
+ ...secretNamesReadBy(op.logicalId, record, stateResources)
30138
+ ]) recordLogOnlyValue(bag, needle);
30139
+ }
30140
+ return bag;
30141
+ }
30142
+ function maskEventTextWithBoundBags(event) {
30143
+ if (event.reason === void 0 && event.error === void 0) return event;
30144
+ const mask = currentLogLineMasker();
30145
+ if (mask === void 0) return event;
30146
+ const masked = { ...event };
30147
+ if (masked.error?.message && masked.error.ownLines !== true) masked.error = {
30148
+ ...masked.error,
30149
+ message: mask(masked.error.message)
30150
+ };
30151
+ if (masked.reason) masked.reason = mask(masked.reason);
30152
+ return masked;
30153
+ }
30154
+
30021
30155
  //#endregion
30022
30156
  //#region src/deployment/rollback-executor/journaled-orphans.ts
30023
30157
  const NONE = {
@@ -30078,24 +30212,32 @@ async function deleteJournaledOrphans(orphans, stateResources, stackName, ctx, o
30078
30212
  failures: 0,
30079
30213
  warnings: 0,
30080
30214
  interrupted: false,
30081
- handled: []
30215
+ handled: [],
30216
+ leftInPlace: 0
30082
30217
  };
30083
30218
  const inlinePolicyWriters = new RollbackInlinePolicyWriters();
30219
+ const record = ctx.recordEvent;
30220
+ const printing = journaledOrphanPrintingBag(orphans.segments.flatMap(({ ops, companions }) => [...companions ?? [], ...ops]), stateResources);
30221
+ const maskedCtx = record === void 0 ? ctx : {
30222
+ ...ctx,
30223
+ recordEvent: (event) => record(maskEventTextWithBoundBags(event))
30224
+ };
30084
30225
  for (const { segment, ops: orphanOps, companions } of orphans.segments) {
30085
30226
  if (options.isInterrupted?.()) {
30086
30227
  total.interrupted = true;
30087
30228
  break;
30088
30229
  }
30089
30230
  const ops = [...companions ?? [], ...orphanOps];
30090
- const replay = () => withStackName(stackName, () => replayFailedOperations(ops, stateResources, stackName, ctx, {
30231
+ const replay = () => withPrintingSecrets(printing, () => withStackName(stackName, () => replayFailedOperations(ops, stateResources, stackName, maskedCtx, {
30091
30232
  emitEnvelope: false,
30092
30233
  inlinePolicyWriters,
30093
30234
  forDestroy: true,
30094
30235
  ...options.isInterrupted && { isInterrupted: options.isInterrupted }
30095
- }));
30236
+ })));
30096
30237
  const result = segment.skipPrefix === void 0 ? await replay() : await withSkipPrefix(segment.skipPrefix, replay);
30097
30238
  total.failures += result.failures;
30098
30239
  total.warnings += result.warnings;
30240
+ total.leftInPlace += result.leftInPlace;
30099
30241
  const pending = new Set(result.remainingFailedOps);
30100
30242
  for (const op of ops) if (!pending.has(op)) total.handled.push({
30101
30243
  segment,
@@ -30136,19 +30278,26 @@ async function settleJournaledOrphansOnSuccess(args) {
30136
30278
  op
30137
30279
  })));
30138
30280
  let kept = all;
30281
+ let leftInPlace = 0;
30139
30282
  if (stateResources === void 0) logger.warn(safeMsg`The rollback journal of stack ${stack} records ${all.length} resource(s) a failed deploy ` + `created, but the stack's state cannot be read, so whether a record now owns them is unknown: none is deleted.`);
30140
30283
  else {
30141
30284
  logger.info(safeMsg`The rollback journal of stack ${stack} records ${all.length} resource(s) a failed deploy ` + `created that no state record holds; acting on them per their DeletionPolicy before the journal is removed:`);
30142
30285
  for (const line of journaledOrphanLines(orphans, logger)) logger.info(line);
30143
30286
  try {
30144
30287
  const { unreadable, tracked } = await applySuccessRule(orphans, stateResources, orphans.deployLogicalIds ?? /* @__PURE__ */ new Set(), args.foreignHolder, stack, logger, args.isInterrupted);
30145
- const outcome = await deleteJournaledOrphans({
30288
+ const acting = {
30146
30289
  segments: orphans.segments.map(({ segment, ops }) => ({
30147
30290
  segment,
30148
30291
  ops: ops.filter((op) => !unreadable.has(op) && !tracked.has(op))
30149
30292
  })).filter(({ ops }) => ops.length > 0),
30150
30293
  count: orphans.count - unreadable.size - tracked.size
30151
- }, { ...stateResources }, stackName, ctx, args.isInterrupted ? { isInterrupted: args.isInterrupted } : {});
30294
+ };
30295
+ const writtenThisRun = [...orphans.deployLogicalIds ?? []].filter((id) => Object.prototype.hasOwnProperty.call(stateResources, id)).map((id) => stateResources[id]).filter((r) => r !== void 0 && r !== null && typeof r === "object");
30296
+ const outcome = await deleteJournaledOrphans(acting, { ...stateResources }, stackName, {
30297
+ ...ctx,
30298
+ writtenThisRun
30299
+ }, args.isInterrupted ? { isInterrupted: args.isInterrupted } : {});
30300
+ leftInPlace = outcome.leftInPlace;
30152
30301
  kept = all.filter(({ segment, op }) => unreadable.has(op) || !tracked.has(op) && !isHandledOrphan(outcome.handled, segment, op));
30153
30302
  } catch (err) {
30154
30303
  logger.warn(safeMsg`Acting on the journaled resources of stack ${stack} failed: ${errorDetail(err)}`);
@@ -30169,7 +30318,7 @@ async function settleJournaledOrphansOnSuccess(args) {
30169
30318
  }
30170
30319
  };
30171
30320
  if (kept.length === 0) return {
30172
- unaddressed: skipped,
30321
+ unaddressed: skipped + leftInPlace,
30173
30322
  keepJournal: false,
30174
30323
  ...stripCleared && { stripCleared }
30175
30324
  };
@@ -30190,7 +30339,7 @@ async function settleJournaledOrphansOnSuccess(args) {
30190
30339
  }
30191
30340
  logger.warn(safeMsg`${kept.length} resource(s) a failed deploy of stack ${stack} created were not deleted ` + (reduced ? "(see above). The rollback journal, their only record, is kept with just them; the next " : "(see above). The rollback journal, their only record, is kept; the next ") + "successful deploy retries.");
30192
30341
  return {
30193
- unaddressed: kept.length + skipped,
30342
+ unaddressed: kept.length + skipped + leftInPlace,
30194
30343
  keepJournal: true
30195
30344
  };
30196
30345
  }
@@ -30366,15 +30515,46 @@ async function adoptRollbackOrphans(currentState, effectiveTemplate) {
30366
30515
  }),
30367
30516
  logger: { debug: (m) => this.logger.debug(m) }
30368
30517
  });
30369
- for (const notice of plan.notices) this.logger.info(notice);
30370
- if (plan.refusals.length > 0) throw new Error(`Deploy refused — cdkd left ${plan.refusals.length} resource(s) in AWS that it cannot safely re-adopt:\n ${plan.refusals.join("\n ")}`);
30518
+ const named = /* @__PURE__ */ new Map();
30519
+ for (const entry of records) {
30520
+ if (entry === null || typeof entry !== "object") continue;
30521
+ const { logicalId, state } = entry;
30522
+ if (typeof logicalId !== "string" || state === null || typeof state !== "object") continue;
30523
+ for (const needle of secretNameNeedlesOf(logicalId, state, void 0) ?? []) recordLogOnlyValue(named, needle);
30524
+ }
30525
+ for (const notice of plan.notices) this.logger.info(maskSecretsInText(notice, named));
30526
+ if (plan.refusals.length > 0) throw new Error(`Deploy refused — cdkd left ${plan.refusals.length} resource(s) in AWS that it cannot safely re-adopt:\n ${plan.refusals.map((r) => maskSecretsInText(r, named)).join("\n ")}`);
30371
30527
  for (const [logicalId, record] of Object.entries(plan.adopted)) {
30372
30528
  currentState.resources[logicalId] = record;
30373
- this.logger.info(`Adopting ${displayIdent(logicalId)} (${displayIdent(record.resourceType)}) left in AWS by an earlier rollback as ${displaySafe(record.physicalId)}`);
30529
+ this.logger.info(`Adopting ${displayIdent(logicalId)} (${displayIdent(record.resourceType)}) left in AWS by an earlier rollback as ${displaySafe(maskSecretsInText(record.physicalId, named))}`);
30374
30530
  }
30375
30531
  if (records.length > 0) currentState.orphans = plan.remaining;
30376
30532
  return plan;
30377
30533
  }
30534
+ function orphanReplayPrintingBag(engine, orphanOps, stateResources) {
30535
+ const read = /* @__PURE__ */ new Map();
30536
+ for (const op of orphanOps) {
30537
+ const names = secretNamesReadBy(op.logicalId, { properties: op.attemptedProperties }, stateResources, (otherId) => ({
30538
+ secrets: engine.namingSecretsFor(otherId),
30539
+ embedded: engine.perResourceSecrets.get(otherId)
30540
+ }));
30541
+ for (const needle of names) recordLogOnlyValue(read, needle);
30542
+ }
30543
+ const own = /* @__PURE__ */ new Map();
30544
+ for (const op of orphanOps) {
30545
+ const needles = secretNameNeedlesOf(op.logicalId, {
30546
+ resourceType: op.resourceType,
30547
+ physicalId: op.physicalId,
30548
+ properties: op.attemptedProperties
30549
+ }, engine.namingSecretsFor(op.logicalId), { embedded: engine.perResourceSecrets.get(op.logicalId) });
30550
+ for (const needle of needles ?? []) recordLogOnlyValue(own, needle);
30551
+ }
30552
+ return unionOfSecretBags([
30553
+ ...orphanOps.map((op) => engine.printingSecretsFor(op.logicalId)),
30554
+ own,
30555
+ read
30556
+ ]);
30557
+ }
30378
30558
  async function performRollback(completedOperations, stateResources, stackName, previousState, failedOperations = [], priorOrphans = []) {
30379
30559
  const orphanIndexes = [];
30380
30560
  const orphanOps = [];
@@ -30392,10 +30572,10 @@ async function performRollback(completedOperations, stateResources, stackName, p
30392
30572
  const runId = this.options.eventRecorder?.runId;
30393
30573
  const { result, failed, run } = await withNestedRevertRun(runId, async (scope) => {
30394
30574
  return {
30395
- failed: orphanOps.length > 0 ? await replayFailedOperations(orphanOps, stateResources, stackName, ctx, {
30575
+ failed: orphanOps.length > 0 ? await withPrintingSecrets(orphanReplayPrintingBag(this, orphanOps, stateResources), () => replayFailedOperations(orphanOps, stateResources, stackName, ctx, {
30396
30576
  emitEnvelope: completedOperations.length === 0,
30397
30577
  inlinePolicyWriters
30398
- }) : void 0,
30578
+ })) : void 0,
30399
30579
  result: await replayRollback(completedOperations, stateResources, stackName, ctx, { inlinePolicyWriters }),
30400
30580
  run: scope
30401
30581
  };
@@ -30542,7 +30722,7 @@ function rollbackExecutorContext(previousState, stackName) {
30542
30722
  providerRegistry: this.providerRegistry,
30543
30723
  region: this.stackRegion,
30544
30724
  logger: this.logger,
30545
- recordEvent: (event) => this.recordEvent(event),
30725
+ recordEvent: (event) => this.recordEvent(maskEventTextWithBoundBags(event)),
30546
30726
  finalSnapshotClients: this.options.finalSnapshotClients,
30547
30727
  skipFinalSnapshot: this.options.skipFinalSnapshot,
30548
30728
  ...this.options.parentStackInfo && { nestedChildStack: stackName },
@@ -30980,6 +31160,7 @@ function kickOffAutoRefreshObservedProperties(stateResources, crossStackReads) {
30980
31160
  const candidates = [];
30981
31161
  const masked = [];
30982
31162
  for (const [logicalId, resource] of Object.entries(stateResources)) {
31163
+ if (!hasAddressablePhysicalId(resource)) continue;
30983
31164
  if (resource.observedProperties !== void 0) {
30984
31165
  if (isMaskedBaselineRecaptureCandidate(resource)) masked.push({
30985
31166
  logicalId,
@@ -31174,47 +31355,6 @@ async function readReaderForFreshNoEchoCeiling(logicalId, currentResource, secre
31174
31355
  function maskForResource(logicalId, text) {
31175
31356
  return maskSecretsInText(text, this.printingSecretsFor(logicalId) ?? EMPTY_SECRETS);
31176
31357
  }
31177
- function secretNameNeedlesOf(logicalId, record, secrets, options) {
31178
- const physicalId = typeof record?.physicalId === "string" && record.physicalId !== "" ? record.physicalId : void 0;
31179
- const bag = secrets !== void 0 && hasMaskableValues(secrets) ? secrets : void 0;
31180
- const mask = (text) => bag === void 0 ? text : maskSecretsInText(text, bag);
31181
- const unresolved = (value) => value.includes("{{resolve:") || value === "***";
31182
- const named = {
31183
- resourceType: record?.resourceType,
31184
- properties: record?.properties,
31185
- logicalId
31186
- };
31187
- const needles = /* @__PURE__ */ new Set();
31188
- const add = (needle) => {
31189
- if (typeof needle === "string" && needle !== "") needles.add(needle);
31190
- };
31191
- for (const [raw, derived] of secretDerivedNamePairs({
31192
- ...named,
31193
- physicalIds: []
31194
- })) if (typeof raw === "string" && !unresolved(raw) && isSecretDerivedValue(raw, mask)) add(derived);
31195
- for (const [raw, spelling] of secretDerivedNamePairs({
31196
- ...named,
31197
- physicalIds: [physicalId ?? "cdkd-no-physical-id-yet"]
31198
- })) {
31199
- if (!isSecretDerivedValue(raw, mask)) continue;
31200
- if (unresolved(raw)) {
31201
- if (physicalId === void 0) continue;
31202
- add(spelling);
31203
- } else {
31204
- add(raw);
31205
- if (raw.toLowerCase() !== raw && raw.length >= 4) add(raw.toLowerCase());
31206
- }
31207
- }
31208
- const properties = record?.properties;
31209
- const path = properties !== null && typeof properties === "object" && Object.hasOwn(properties, "Path") ? properties["Path"] : void 0;
31210
- if (physicalId !== void 0 && isSecretDerivedValue(path, mask)) add(physicalId);
31211
- const embedded = options === void 0 ? secrets : options.embedded;
31212
- const embeddedBag = embedded !== void 0 && hasMaskableValues(embedded) ? embedded : void 0;
31213
- if (embeddedBag !== void 0 && physicalId !== void 0) {
31214
- for (const needle of printingCorpusOf(embeddedBag).keys()) if (needle !== "" && (needle === physicalId || needle.length >= 4 && physicalId.includes(needle))) add(needle);
31215
- }
31216
- return needles.size > 0 ? needles : void 0;
31217
- }
31218
31358
  function secretNameBagFor(logicalId) {
31219
31359
  let bag = this.secretNameNeedles.get(logicalId);
31220
31360
  if (bag === void 0) {
@@ -31237,17 +31377,13 @@ function namingSecretsFor(logicalId) {
31237
31377
  return unionOfSecretBags([own, noEcho]);
31238
31378
  }
31239
31379
  function noteSecretNamedReads(logicalId, record, resources) {
31240
- const leaves = [...wholeStringLeavesOf(record?.properties)].filter((leaf) => leaf !== "");
31241
- if (leaves.length === 0) return;
31242
- for (const [otherId, other] of Object.entries(resources)) {
31243
- if (otherId === logicalId) continue;
31244
- const needles = secretNameNeedlesOf(otherId, other, this.namingSecretsFor(otherId), { embedded: this.perResourceSecrets.get(otherId) });
31245
- if (needles === void 0) continue;
31246
- const read = [...needles].filter((needle) => leaves.some((leaf) => leaf === needle || needle.length >= 4 && leaf.includes(needle)));
31247
- if (read.length === 0) continue;
31248
- const registry = this.secretNameBagFor(logicalId);
31249
- for (const needle of read) recordLogOnlyValue(registry, needle);
31250
- }
31380
+ const read = secretNamesReadBy(logicalId, record, resources, (otherId) => ({
31381
+ secrets: this.namingSecretsFor(otherId),
31382
+ embedded: this.perResourceSecrets.get(otherId)
31383
+ }));
31384
+ if (read.size === 0) return;
31385
+ const registry = this.secretNameBagFor(logicalId);
31386
+ for (const needle of read) recordLogOnlyValue(registry, needle);
31251
31387
  }
31252
31388
  function printingSecretsFor(logicalId) {
31253
31389
  const secrets = this.perResourceSecrets.get(logicalId);
@@ -31511,6 +31647,7 @@ async function deleteReplacedAfterCreate(logicalId, oldResourceType, currentReso
31511
31647
  async function readRecordAttributes(input) {
31512
31648
  const { provider, logicalId, resource, stackName, region } = input;
31513
31649
  if (!provider.import) return { kind: "not-attempted" };
31650
+ if (!hasAddressablePhysicalId(resource)) return { kind: "not-attempted" };
31514
31651
  const found = await provider.import({
31515
31652
  logicalId,
31516
31653
  resourceType: resource.resourceType,
@@ -34807,6 +34944,7 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
34807
34944
  return;
34808
34945
  }
34809
34946
  this.refuseRedactedAttributeReads(logicalId, resourceType, context);
34947
+ if (!(currentResource.resourceType === "AWS::CloudFormation::Stack" && currentResource.provisionedBy !== "cc-api") && !hasAddressablePhysicalId(currentResource)) throw markRefusedBeforeApplying(markNonRetryable(new CdkdError(unaddressableUpdateRefusalMessage(stackName, this.stackRegion, logicalId, oldResourceType), STATE_RESOURCES_MALFORMED)));
34810
34948
  this.attemptedResolvedProps.set(logicalId, resolvedProps);
34811
34949
  const noEchoHeldPaths = /* @__PURE__ */ new Set();
34812
34950
  if (change.propertyChanges?.some((pc) => pc.requiresReplacement) === true) {
@@ -35453,6 +35591,46 @@ async function provisionDelete(logicalId, change, stateResources, stackName, tem
35453
35591
  await noteRetainedResource(resourceType, logicalId);
35454
35592
  return;
35455
35593
  }
35594
+ if (!(currentResource.resourceType === "AWS::CloudFormation::Stack" && currentResource.provisionedBy !== "cc-api") && !hasAddressablePhysicalId(currentResource)) {
35595
+ const reason = "state record has no physical id";
35596
+ if (progress) progress.current++;
35597
+ const skipPrefix = progress ? `[${progress.current}/${progress.total}] ` : " ";
35598
+ renderer.removeTask(logicalId);
35599
+ const skipLine = formatResourceLine("skipped", logicalId, resourceType, `skipped (${reason})`);
35600
+ this.logger.info(safeMsg`${skipPrefix}${skipLine}`);
35601
+ const showCommand = pasteableCommand("cdkd state show", [{
35602
+ value: stackName,
35603
+ hole: "stack",
35604
+ opts: { plainIdent: true }
35605
+ }, {
35606
+ flag: "--stack-region",
35607
+ value: this.stackRegion,
35608
+ hole: "region"
35609
+ }]).command;
35610
+ const dropCommand = pasteableCommand("cdkd state orphan", [
35611
+ {
35612
+ value: stackName,
35613
+ hole: "stack",
35614
+ opts: { plainIdent: true }
35615
+ },
35616
+ {
35617
+ flag: "--stack-region",
35618
+ value: this.stackRegion,
35619
+ hole: "region"
35620
+ },
35621
+ {
35622
+ flag: "--resource",
35623
+ value: logicalId,
35624
+ hole: "logicalId",
35625
+ opts: { plainIdent: true }
35626
+ }
35627
+ ]).command;
35628
+ this.logger.warn(safeMsg`Resource ${displaySafe(logicalId)} (${displaySafe(resourceType)}) has no non-empty string 'physicalId' in its state record, so cdkd cannot address it in AWS and did not try to delete it while removing it from the template. Its cdkd state record was KEPT, so the next 'cdkd deploy' re-attempts the delete. Repair the record's 'physicalId', or delete the resource by hand and drop the record.
35629
+ Inspect it with: ${showCommand}
35630
+ Drop the record with: ${dropCommand}`);
35631
+ if (counts) counts.deleteSkipped++;
35632
+ return { deleteSkipped: reason };
35633
+ }
35456
35634
  const governingPolicy = effectiveDeletionPolicy(resourceType, deletionPolicy, currentResource.properties);
35457
35635
  const finalSnapshotIdentifier = await this.prepareFinalSnapshotForDelete(logicalId, resourceType, currentResource, governingPolicy);
35458
35636
  const deleteRoute = this.providerRegistry.getProviderFor({
@@ -35711,7 +35889,7 @@ async function provisionResource(logicalId, change, stateResources, stackName, t
35711
35889
  logicalId,
35712
35890
  resourceType,
35713
35891
  ...stateResources[logicalId]?.provisionedBy ? { provisionedBy: stateResources[logicalId]?.provisionedBy } : labelRouting && { provisionedBy: labelRouting },
35714
- ...stateResources[logicalId]?.physicalId && { physicalId: stateResources[logicalId]?.physicalId },
35892
+ ...stateResources[logicalId] !== void 0 && hasAddressablePhysicalId(stateResources[logicalId]) && { physicalId: stateResources[logicalId].physicalId },
35715
35893
  reason: deleteSkipped,
35716
35894
  durationMs: Date.now() - resourceStartedAt
35717
35895
  });
@@ -36966,6 +37144,7 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
36966
37144
  refuseMalformedOutputs(currentState, stackName, this.stackRegion);
36967
37145
  refuseMalformedResourcesForDeploy(currentState, stackName, this.stackRegion);
36968
37146
  refuseMalformedResourceEntriesForDeploy(currentState, stackName, this.stackRegion);
37147
+ refuseMalformedResourceProperties(currentState, stackName, this.stackRegion);
36969
37148
  refuseMalformedOrphans(currentState, stackName, this.stackRegion);
36970
37149
  refuseMalformedOrphanRecords(currentState, stackName, this.stackRegion);
36971
37150
  const migrationPending = currentStateData?.migrationPending ?? false;
@@ -37742,5 +37921,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
37742
37921
  DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
37743
37922
 
37744
37923
  //#endregion
37745
- export { resourcesNamingDeclaredParameter as $, recoverMaskedOutput as $a, findSilentDropProperties as $i, observeThenDisableInstanceApiTermination as $n, buildDenyExternalAccessPolicy as $o, malformedDriftResourcePropertiesWarning as $r, nullPrototypeRecord as $s, extractDeploymentEventError as $t, resolveDynamoDbDeleteBudgetClock as A, lambdaFunctionNameForMask as Aa, refuseMalformedResourceEntriesForDeploy as Ai, tagMapAsList as An, importableOutputs as Ao, carriesFetchableDynamicReference as Ar, resolveStateBucketWithDefault as As, planRollback as At, getPriorAttempts as B, literalSplitDelimitersOf as Ba, refuseMalformedResourcesForDestroy as Bi, CloudControlProvider as Bn, createAssetRedirectResolver as Bo, passedParameterClassesOf as Br, uploadCfnTemplate as Bs, createPreDeleteFinalSnapshot as Bt, perType as C, requireConfigObject as Ca, refuseMalformedOrphans as Ci, withCreateTokenLedger as Cn, acceptedCreateOnlyDropsOf as Co, s3BucketWebsiteUrl as Cr, getDefaultStateBucketName as Cs, getStackRecords as Ct, beginDeleteWait as D, describeTypeWithThrottleRetry as Da, refuseMalformedOutputsForDestroy as Di, planTagDiff as Dn, hasReasonlessBaselineRefusal as Do, getAccountInfo as Dr, resolveAutoAssetStorage as Ds, isJournaledOrphan as Dt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as E, templateResourceTypes as Ea, refuseMalformedOutputs as Ei, DBPROXY_TAG_OPTIONS as En, hasReadableExportSet as Eo, parameterTypeMayLoseSecretIdentity as Er, resolveApp as Es, demoteSupersededOrphans as Et, waitForIndexesSettled as F, inheritNestedStackParameterAssociations as Fa, refuseMalformedResourcePropertiesForDestroy as Fi, ProviderRegistry as Fn, AssetPublisher as Fo, isStalePlaceholderArnAttribute as Fr, ssmResolvedValueType as Fs, inheritProducerRegions as Ft, cyan as G, shareLogOnlyValues as Ga, repairMalformedOutputsForReadOnly as Gi, deleteIndeterminateGuards as Gn, assertAssetBucketRegion as Go, UNREADABLE_RESOURCES_MAP_ROW as Gr, canonicalizeRegion as Gs, REDACTED_DELETE_ADDRESS_SKIP_REASON as Gt, formatResourceLine as H, printingCorpusOf as Ha, refuseMalformedState as Hi, ccProtectionRegistryTypes as Hn, rewriteTemplateAssetReferences as Ho, STATE_REGION_DIVERGED as Hr, decodeListingKey as Hs, isFinalSnapshotError as Ht, ECR_AUTO_DELETE_IMAGES_TAG as I, recordNestedStackParameterExpressions as Ia, refuseMalformedResourcePropertiesForDrift as Ii, ccBrokenReason as In, isSensitiveAttributeName as Io, refStateLookupFromResource as Ir, CFN_TEMPLATE_BODY_LIMIT as Is, ATOMIC_FINAL_SNAPSHOT_TYPES as It, red as J, maskSecretsInError as Ja, repairMalformedResourcesForReadOnly as Ji, isWaitAbandonedError as Jn, isCrossRegionRedirect as Jo, hasReadableOrphans as Jr, StageLoadError as Js, redactedDeleteAddressSkip as Jt, gray as K, createSecretMasker as Ka, repairMalformedResourceEntriesForReadOnly as Ki, deleteSkipReason as Kn, ensureAssetStorage as Ko, deployRefusesOrphanRowsReason as Kr, derivePartitionAndUrlSuffix as Ks, isRedactedRecordedValue as Kt, S3_AUTO_DELETE_OBJECTS_TAG as L, carryLogOnlyValues as La, refuseMalformedResourcePropertiesForExport as Li, wouldReturnToSdkProvider as Ln, stringifyValue as Lo, parseWebACLArn as Lr, CFN_TEMPLATE_URL_LIMIT as Ls, PRE_DELETE_SNAPSHOT_TYPES as Lt, DELETE_INDEX_WAIT_PROCEED_NOTE as M, DagBuilder as Ma, refuseMalformedResourceEntriesForImport as Mi, definedAttributes as Mn, orphansAfterRollback as Mo, keepsSecretReferenceToken as Mr, resolveUseCdkBootstrapAssets as Ms, resolveReplacementOldType as Mt, INDEX_SETTLE_POLL_INTERVAL_MS as N, TemplateParser as Na, refuseMalformedResourceEntriesForImportSave as Ni, stringifyIfAssigned as Nn, orphansCarriedFrom as No, AWS_NO_VALUE as Nr, stateBucketExistenceConfirmed as Ns, findNestedStackTypeChanges as Nt, compensateRemovedDeletionProtection as O, withRetry as Oa, refuseMalformedResourceAttributesForOrphan as Oi, readTagList as On, hasUnverifiableParameterRefusal as Oo, isImpossibleEmptyStoredAttribute as Or, resolveCaptureObservedState as Os, isReplacementOrphan as Ot, deleteTableWithIndexBusyRetry as P, liveMatchesUnresolvedTokenFrame as Pa, refuseMalformedResourceEntriesForOrphan as Pi, CC_BROKEN_REASON as Pn, shouldRetainResource as Po, cfnRefValueFromPhysicalId as Pr, warnDeprecatedNoPrefixCliFlag as Ps, getCurrentProducerRegions as Pt, reachableDivergentParameters as Q, scrubResourceRecord as Qa, findActionableSilentDrops as Qi, isTerminationProtectionPropagationError as Qn, validateContainerRepoName as Qo, isReadableResourceEntry as Qr, hasPlainPrototype$1 as Qs, DeploymentEventsStore as Qt, hasCdkAutoDeleteTag as R, createUnionSecretMasker as Ra, refuseMalformedResourcePropertiesForOrphan as Ri, isCustomResourceType as Rn, WorkGraph as Ro, withSharedDrainBudget as Rr, MIGRATE_TMP_PREFIX as Rs, buildFinalSnapshotIdentifier as Rt, isProtectionValueActive as S, requireConfigArray as Sa, refuseMalformedOrphanRecordsForDestroy as Si, reserveStackCreateToken as Sn, splitImportedOps as So, s3BucketRegionalDomainName as Sr, synthesisStatusMessage as Ss, destroyStackRecordsView as St, DynamoDBGlobalTableProvider as T, prefetchCreateOnlyPropertyPaths as Ta, refuseMalformedOrphansForOrphan as Ti, DBPROXY_TAGS_WHAT as Tn, exportNamesCarriedFrom as To, isUnboundTemplateParameter as Tr, loadCdkJson as Ts, recordAfterRollbackUpdate as Tt, createReadOnlyAttributeHealerFactory as U, recordLogOnlyParameterValue as Ua, repairMalformedOrphanRecordsForReadOnly as Ui, unchangedBehindSecretReference as Un, AssetModeResolver as Uo, STATE_RESOURCES_MALFORMED as Ur, expectedOwnerParam as Us, refusesFinalSnapshot as Ut, markRefusedBeforeApplying as V, logOnlyValueCount as Va, refuseMalformedResourcesForExport as Vi, slowCcOperationTimeoutMs as Vn, loadPublishableAssetManifest as Vo, JSON_LISTING_HOLE_VALUE as Vr, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Vs, effectiveDeletionPolicy as Vt, bold as W, recordLogOnlyValue as Wa, repairMalformedOrphansForReadOnly as Wi, UNSPECIFIED_SKIP_REASON as Wn, BOOTSTRAP_MARKER_PREFIX as Wo, UNREADABLE_ORPHANS_CONTAINER_ROW as Wr, PARTITION_TABLE as Ws, unsupportedFinalSnapshotError as Wt, computeParameterTaint as X, markSameGenerationBag as Xa, unreadableOrphanRecords as Xi, disableInstanceApiTermination as Xn, readBootstrapMarkerBody as Xo, hasReadableResources as Xr, defineOwnKey as Xs, updatePartialReason as Xt, yellow as Y, maskSecretsInText as Ya, unpreviewableOrphanRecords as Yi, markWaitAbandoned as Yn, parseBootstrapMarker as Yo, hasReadableOutputs as Yr, processStackMessages as Ys, updatePartialMessage as Yt, namesAnyDeclaredParameter as Z, redactSecretsForState as Za, unreadableResourceEntries as Zi, ec2InstanceProtectionSite as Zn, validateAssetBucketName as Zo, isReadableOrphanRecord as Zr, hasOwnKey as Zs, DeploymentEventsReader as Zt, makeCanonicalizePropertiesFn as _, configBooleanRefusal as _a, malformedStateRefusalMessage as _i, findDestructiveChanges as _n, isSingleDynamicReferenceToken as _o, envCredentialsAreAssumedRole as _r, escapeRegExp$3 as _s, getCurrentNestedStackContext as _t, findNestedTemplateTreeDefect as a, shownType as aa, resolveAssemblyPath as ac, malformedOrphanRecordsRefusalMessage as ai, secretSafeKeyDisplay as an, carriesSecretMask as ao, classifyReplaySecretRegion as ar, dockerSpawnEnvWithSensitive as as, makeSiblingClaimReader as at, recordedProtectionNote as b, readConfigString as ba, refuseMalformedNestedChildOutputs as bi, earliestDefined as bn, S3StateBackend as bo, s3BucketDomainName as br, getDockerImageBySourceHash as bs, replayRollback as bt, renderNestedTemplateTreeDefect as c, isStatefulRecreateTargetSync as ca, malformedOrphansRefusalMessage as ci, noEchoParameterValueSeed as cn, recordMaskOnlyValuesIn as co, applyRoleArnIfSet as cr, getDockerCmd as cs, displacedOpClause as ct, conditionInputsFrom as d, coerceWarmThroughput as da, malformedOutputsWarning as di, isExportAliasCollision as dn, wholeStringLeavesOf as do, explicitRoleArnOrThrow as dr, partitionSensitiveEnv as ds, getNestedRevertRun as dt, unwrittenCreateOnlyReplacement as ea, ownValue as ec, malformedExportNamesWarning as ei, WITHHELD_NAME_DISPLAY as en, DYNAMIC_REFERENCE_TOKEN_SCAN as eo, reDisableInstanceApiTermination as er, buildDockerImage as es, deleteJournaledOrphans as et, parentSuppliedValues as f, isWarmThroughputDecrease as fa, malformedRenderedContainersWarning as fi, bindingSkippedOutputs as fn, STATE_SOURCED_BASELINE_RULES as fo, isIamRoleArn as fr, redactDockerArgvValues as fs, nestedChildStackName as ft, mergeNoChangeOutputs as g, coerceCfnInteger as ga, malformedScrubResourceEntriesRefusalMessage as gi, constructPathOf as gn, WHOLE_DYNAMIC_REFERENCE_PATTERN as go, callerEnvCredentials as gr, warnFinchArgvExposure as gs, withNestedRevertRun as gt, keptWholeReasonText as h, coerceCfnBoolean as ha, malformedResourcesWarning as hi, maskingRetryLogger as hn, TEMPLATE_SOURCED_RULES as ho, applyCallerIdentityCredentials as hr, runDockerStreaming as hs, revertedNestedRowIds as ht, childTemplateLoader as i, findReplacedReadersOfRecreateTargets as ia, renderAssemblyPathEscape as ic, malformedLocalResourcesWarning as ii, secretBearingStateKeyWarning as in, identityKeyFor as io, IntrinsicFunctionResolver as ir, describeDockerFailure as is, sameJournaledOrphans as it, resolveDynamoDbDeleteBudgetMs as j, sameLambdaFunctionAddress as ja, refuseMalformedResourceEntriesForDestroy as ji, tagPlanWarning as jn, isReadableBag as jo, isNamelessDynamicReferenceError as jr, resolveStateBucketWithDefaultAndSource as js, replacementNeverSwapped as jt, deleteBudgetKey as k, canonicalLambdaFunctionName as ka, refuseMalformedResourceEntries as ki, refuseMalformedDesiredTags as kn, importableOutputKeys as ko, carriesDynamicReference as kr, resolveSkipPrefix as ks, planFailedOps as kt, templateIdentity as l, renderStatefulReason as la, malformedOrphansWarning as li, collectDeclaredOutputNames as ln, recordNoEchoAttributeValues as lo, assertFlagRoleArn as lr, isDockerClientEnvKey as ls, displacedPhysicalIdShown as lt, isSecretBearingReferenceString as m, toFiniteNumber as ma, malformedResourcePropertiesWarning as mi, DEFAULT_RESOURCE_WARN_AFTER_MS as mn, STATE_SOURCED_READBACK_RULES as mo, AWS_CREDENTIAL_ENV_KEYS as mr, runDockerForeground as ms, revertNestedChildFromJournal as mt, IMPLICIT_DELETE_DEPENDENCIES as n, NO_CC_HANDLERS_REASON as na, describeFileReadFailure as nc, malformedLocalOutputsWarning as ni, exportAliasCollisionScrubWarning as nn, isUncertifiedBaselineMaskPosition as no, DiffCalculator as nr, describeDockerCapturedOutput as ns, journaledOrphanLines as nt, isAbsoluteAssetPath as o, MULTI_REGION_RECREATE_BLOCKED_TYPES as oa, clearBucketRegionCache as oc, malformedOrphanRecordsWarning as oi, exportNameSecretExposure as on, provenPublicValue as oo, producerRegionsFromState as or, finchSecretArgvRefusal as os, planOrphanAdoption as ot, readRecordedConditionVerdicts as p, toCfnInteger as pa, malformedResourceEntriesWarning as pi, DEFAULT_RESOURCE_TIMEOUT_MS as pn, STATE_SOURCED_CROSS_GENERATION_RULES as po, sendableAssumeRoleCommand as pr, redactedDockerCause as ps, recordDisplacedSkips as pt, green as q, errorCauseChain as qa, repairMalformedResourcePropertiesForReadOnly as qi, withIndeterminateGuard as qn, getBootstrapMarkerKey as qo, displayLogicalId as qr, AssemblyReader as qs, redactedDeleteAddressFields as qt, computeImplicitDeleteEdges as r, hasNoCloudControlHandlers as ra, displayAssemblyPath as rc, malformedLocalResourceEntriesWarning as ri, secretBearing as rn, pathCrossesDottedKey as ro, INTRINSIC_KEYS as rr, describeDockerExecFailure as rs, loadJournaledOrphans as rt, listNestedTemplateRows as s, isStatefulRecreateTargetForReplace as sa, resolveBucketRegion as sc, malformedOrphanRowsKeptWarning as si, isWholeDynamicReferenceValue as sn, recordMaskOnlyValue as so, regionLessSecretName as sr, formatDockerLoginError as ss, NESTED_PENDING_PARENT_REASON as st, DeployEngine as t, withoutSilentDropProperties as ta, absoluteAssemblyPathEscape as tc, malformedExportSourceWarning as ti, displayTextOrWithheld as tn, dynamicReferenceTokens as to, reEnableInstanceApiTermination as tr, resolveDockerContextDirectory as ts, isHandledOrphan as tt, conditionFingerprint as u, WARM_THROUGHPUT_MEMBERS as ua, malformedOutputsRefusalMessage as ui, collectPublishedOutputNames as un, recordProvenPublicExpression as uo, assertSendableRoleArn as ur, isMalformedEnvKey as us, dropSettledNestedJournals as ut, withResourceDeadline as v, configIntegerRefusal as va, previewableOrphanRecords as vi, formatDestructiveChange as vn, LockManager as vo, isSettledInstanceState as vr, stripControlChars as vs, withNestedStackContext as vt, readProtection as w, requireConfigString as wa, refuseMalformedOrphansForDestroy as wi, acquireIdempotencyToken as wn, describeRegionValueKind as wo, coerceParameterTypedValue as wr, getLegacyStateBucketName as ws, withStackRecords as wt, PROTECTION_PROPERTY_BY_TYPE as x, replayWarn as xa, refuseMalformedOrphanRecords as xi, ledgerForStack as xn, rebuildClientForBucketRegion as xo, s3BucketDualStackDomainName as xr, Synthesizer as xs, awaitInFlightSibling as xt, recordedProtectionEvidence as y, configStringRefusal as ya, refuseDivergentRecordRegionForDestroy as yi, RollbackInlinePolicyWriters as yn, isLockInfoExpired as yo, s3BucketArn as yr, AssetManifestLoader as ys, replayFailedOperations as yt, isTruthyCfnBoolean as z, hasMaskableValues as za, refuseMalformedResourcesForDeploy as zi, getCurrentResourceSecrets as zn, buildAssetRedirectMap as zo, parameterInputsFor as zr, findLargeInlineResources as zs, ccRoutedFinalSnapshotError as zt };
37746
- //# sourceMappingURL=deploy-engine-Dre6eDNJ.js.map
37924
+ export { resourcesNamingDeclaredParameter as $, maskSecretsInError as $a, repairMalformedResourcesForReadOnly as $i, isWaitAbandonedError as $n, isCrossRegionRedirect as $o, hasReadableOrphans as $r, StageLoadError as $s, updatePartialMessage as $t, resolveDynamoDbDeleteBudgetClock as A, prefetchCreateOnlyPropertyPaths as Aa, refuseMalformedOrphansForOrphan as Ai, DBPROXY_TAG_OPTIONS as An, exportNamesCarriedFrom as Ao, isUnboundTemplateParameter as Ar, loadCdkJson as As, demoteSupersededOrphans as At, getPriorAttempts as B, inheritNestedStackParameterAssociations as Ba, refuseMalformedResourcePropertiesForDestroy as Bi, ccBrokenReason as Bn, AssetPublisher as Bo, isStalePlaceholderArnAttribute as Br, ssmResolvedValueType as Bs, ATOMIC_FINAL_SNAPSHOT_TYPES as Bt, perType as C, configIntegerRefusal as Ca, previewableOrphanRecords as Ci, RollbackInlinePolicyWriters as Cn, LockManager as Co, isSettledInstanceState as Cr, stripControlChars as Cs, replayFailedOperations as Ct, beginDeleteWait as D, requireConfigArray as Da, refuseMalformedOrphanRecordsForDestroy as Di, withCreateTokenLedger as Dn, splitImportedOps as Do, s3BucketRegionalDomainName as Dr, synthesisStatusMessage as Ds, getStackRecords as Dt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as E, replayWarn as Ea, refuseMalformedOrphanRecords as Ei, reserveStackCreateToken as En, rebuildClientForBucketRegion as Eo, s3BucketDualStackDomainName as Er, Synthesizer as Es, destroyStackRecordsView as Et, waitForIndexesSettled as F, lambdaFunctionNameForMask as Fa, refuseMalformedResourceEntriesForDeploy as Fi, tagPlanWarning as Fn, importableOutputs as Fo, carriesFetchableDynamicReference as Fr, resolveStateBucketWithDefault as Fs, replacementNeverSwapped as Ft, cyan as G, literalSplitDelimitersOf as Ga, refuseMalformedResourcesForDestroy as Gi, CloudControlProvider as Gn, createAssetRedirectResolver as Go, passedParameterClassesOf as Gr, uploadCfnTemplate as Gs, effectiveDeletionPolicy as Gt, formatResourceLine as H, carryLogOnlyValues as Ha, refuseMalformedResourcePropertiesForExport as Hi, isCustomResourceType as Hn, stringifyValue as Ho, parseWebACLArn as Hr, CFN_TEMPLATE_URL_LIMIT as Hs, buildFinalSnapshotIdentifier as Ht, ECR_AUTO_DELETE_IMAGES_TAG as I, sameLambdaFunctionAddress as Ia, refuseMalformedResourceEntriesForDestroy as Ii, definedAttributes as In, isReadableBag as Io, isNamelessDynamicReferenceError as Ir, resolveStateBucketWithDefaultAndSource as Is, resolveReplacementOldType as It, red as J, recordLogOnlyParameterValue as Ja, repairMalformedOrphanRecordsForReadOnly as Ji, unchangedBehindSecretReference as Jn, AssetModeResolver as Jo, STATE_RESOURCES_MALFORMED as Jr, expectedOwnerParam as Js, unsupportedFinalSnapshotError as Jt, gray as K, logOnlyValueCount as Ka, refuseMalformedResourcesForExport as Ki, slowCcOperationTimeoutMs as Kn, loadPublishableAssetManifest as Ko, JSON_LISTING_HOLE_VALUE as Kr, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Ks, isFinalSnapshotError as Kt, S3_AUTO_DELETE_OBJECTS_TAG as L, DagBuilder as La, refuseMalformedResourceEntriesForImport as Li, stringifyIfAssigned as Ln, orphansAfterRollback as Lo, keepsSecretReferenceToken as Lr, resolveUseCdkBootstrapAssets as Ls, findNestedStackTypeChanges as Lt, DELETE_INDEX_WAIT_PROCEED_NOTE as M, describeTypeWithThrottleRetry as Ma, refuseMalformedOutputsForDestroy as Mi, readTagList as Mn, hasReasonlessBaselineRefusal as Mo, getAccountInfo as Mr, resolveAutoAssetStorage as Ms, isReplacementOrphan as Mt, INDEX_SETTLE_POLL_INTERVAL_MS as N, withRetry as Na, refuseMalformedResourceAttributesForOrphan as Ni, refuseMalformedDesiredTags as Nn, hasUnverifiableParameterRefusal as No, isImpossibleEmptyStoredAttribute as Nr, resolveCaptureObservedState as Ns, planFailedOps as Nt, compensateRemovedDeletionProtection as O, requireConfigObject as Oa, refuseMalformedOrphans as Oi, acquireIdempotencyToken as On, acceptedCreateOnlyDropsOf as Oo, s3BucketWebsiteUrl as Or, getDefaultStateBucketName as Os, withStackRecords as Ot, deleteTableWithIndexBusyRetry as P, canonicalLambdaFunctionName as Pa, refuseMalformedResourceEntries as Pi, tagMapAsList as Pn, importableOutputKeys as Po, carriesDynamicReference as Pr, resolveSkipPrefix as Ps, planRollback as Pt, reachableDivergentParameters as Q, errorCauseChain as Qa, repairMalformedResourcePropertiesForReadOnly as Qi, withIndeterminateGuard as Qn, getBootstrapMarkerKey as Qo, displayLogicalId as Qr, AssemblyReader as Qs, redactedDeleteAddressSkip as Qt, hasCdkAutoDeleteTag as R, TemplateParser as Ra, refuseMalformedResourceEntriesForImportSave as Ri, CC_BROKEN_REASON as Rn, orphansCarriedFrom as Ro, AWS_NO_VALUE as Rr, stateBucketExistenceConfirmed as Rs, getCurrentProducerRegions as Rt, isProtectionValueActive as S, configBooleanRefusal as Sa, malformedStateRefusalMessage as Si, formatDestructiveChange as Sn, isSingleDynamicReferenceToken as So, envCredentialsAreAssumedRole as Sr, escapeRegExp$3 as Ss, withNestedStackContext as St, DynamoDBGlobalTableProvider as T, readConfigString as Ta, refuseMalformedNestedChildOutputs as Ti, ledgerForStack as Tn, S3StateBackend as To, s3BucketDomainName as Tr, getDockerImageBySourceHash as Ts, awaitInFlightSibling as Tt, createReadOnlyAttributeHealerFactory as U, createUnionSecretMasker as Ua, refuseMalformedResourcePropertiesForOrphan as Ui, getCurrentResourceSecrets as Un, WorkGraph as Uo, withSharedDrainBudget as Ur, MIGRATE_TMP_PREFIX as Us, ccRoutedFinalSnapshotError as Ut, markRefusedBeforeApplying as V, recordNestedStackParameterExpressions as Va, refuseMalformedResourcePropertiesForDrift as Vi, wouldReturnToSdkProvider as Vn, isSensitiveAttributeName as Vo, refStateLookupFromResource as Vr, CFN_TEMPLATE_BODY_LIMIT as Vs, PRE_DELETE_SNAPSHOT_TYPES as Vt, bold as W, hasMaskableValues as Wa, refuseMalformedResourcesForDeploy as Wi, withPrintingSecrets as Wn, buildAssetRedirectMap as Wo, parameterInputsFor as Wr, findLargeInlineResources as Ws, createPreDeleteFinalSnapshot as Wt, computeParameterTaint as X, shareLogOnlyValues as Xa, repairMalformedOutputsForReadOnly as Xi, deleteIndeterminateGuards as Xn, assertAssetBucketRegion as Xo, UNREADABLE_RESOURCES_MAP_ROW as Xr, canonicalizeRegion as Xs, isRedactedRecordedValue as Xt, yellow as Y, recordLogOnlyValue as Ya, repairMalformedOrphansForReadOnly as Yi, UNSPECIFIED_SKIP_REASON as Yn, BOOTSTRAP_MARKER_PREFIX as Yo, UNREADABLE_ORPHANS_CONTAINER_ROW as Yr, PARTITION_TABLE as Ys, REDACTED_DELETE_ADDRESS_SKIP_REASON as Yt, namesAnyDeclaredParameter as Z, createSecretMasker as Za, repairMalformedResourceEntriesForReadOnly as Zi, deleteSkipReason as Zn, ensureAssetStorage as Zo, deployRefusesOrphanRowsReason as Zr, derivePartitionAndUrlSuffix as Zs, redactedDeleteAddressFields as Zt, makeCanonicalizePropertiesFn as _, isWarmThroughputDecrease as _a, malformedRenderedContainersWarning as _i, DEFAULT_RESOURCE_TIMEOUT_MS as _n, STATE_SOURCED_BASELINE_RULES as _o, isIamRoleArn as _r, redactDockerArgvValues as _s, recordDisplacedSkips as _t, findNestedTemplateTreeDefect as a, unwrittenCreateOnlyReplacement as aa, ownValue as ac, malformedExportNamesWarning as ai, displayTextOrWithheld as an, DYNAMIC_REFERENCE_TOKEN_SCAN as ao, reDisableInstanceApiTermination as ar, buildDockerImage as as, journaledOrphanPrintingBag as at, recordedProtectionNote as b, coerceCfnBoolean as ba, malformedResourcesWarning as bi, constructPathOf as bn, TEMPLATE_SOURCED_RULES as bo, applyCallerIdentityCredentials as br, runDockerStreaming as bs, withNestedRevertRun as bt, renderNestedTemplateTreeDefect as c, hasNoCloudControlHandlers as ca, displayAssemblyPath as cc, malformedLocalResourceEntriesWarning as ci, secretBearingStateKeyWarning as cn, pathCrossesDottedKey as co, INTRINSIC_KEYS as cr, describeDockerExecFailure as cs, stateSecretNameNeedles as ct, conditionInputsFrom as d, MULTI_REGION_RECREATE_BLOCKED_TYPES as da, clearBucketRegionCache as dc, malformedOrphanRecordsWarning as di, isWholeDynamicReferenceValue as dn, provenPublicValue as do, producerRegionsFromState as dr, finchSecretArgvRefusal as ds, NESTED_PENDING_PARENT_REASON as dt, unpreviewableOrphanRecords as ea, processStackMessages as ec, hasReadableOutputs as ei, updatePartialReason as en, maskSecretsInText as eo, markWaitAbandoned as er, parseBootstrapMarker as es, deleteJournaledOrphans as et, parentSuppliedValues as f, isStatefulRecreateTargetForReplace as fa, resolveBucketRegion as fc, malformedOrphanRowsKeptWarning as fi, noEchoParameterValueSeed as fn, recordMaskOnlyValue as fo, regionLessSecretName as fr, formatDockerLoginError as fs, displacedOpClause as ft, mergeNoChangeOutputs as g, coerceWarmThroughput as ga, malformedOutputsWarning as gi, bindingSkippedOutputs as gn, wholeStringLeavesOf as go, explicitRoleArnOrThrow as gr, partitionSensitiveEnv as gs, nestedChildStackName as gt, keptWholeReasonText as h, WARM_THROUGHPUT_MEMBERS as ha, malformedOutputsRefusalMessage as hi, isExportAliasCollision as hn, recordProvenPublicExpression as ho, assertSendableRoleArn as hr, isMalformedEnvKey as hs, getNestedRevertRun as ht, childTemplateLoader as i, findSilentDropProperties as ia, nullPrototypeRecord as ic, malformedDriftResourcePropertiesWarning as ii, WITHHELD_NAME_DISPLAY as in, recoverMaskedOutput as io, observeThenDisableInstanceApiTermination as ir, buildDenyExternalAccessPolicy as is, sameJournaledOrphans as it, resolveDynamoDbDeleteBudgetMs as j, templateResourceTypes as ja, refuseMalformedOutputs as ji, planTagDiff as jn, hasReadableExportSet as jo, parameterTypeMayLoseSecretIdentity as jr, resolveApp as js, isJournaledOrphan as jt, deleteBudgetKey as k, requireConfigString as ka, refuseMalformedOrphansForDestroy as ki, DBPROXY_TAGS_WHAT as kn, describeRegionValueKind as ko, coerceParameterTypedValue as kr, getLegacyStateBucketName as ks, recordAfterRollbackUpdate as kt, templateIdentity as l, findReplacedReadersOfRecreateTargets as la, renderAssemblyPathEscape as lc, malformedLocalResourcesWarning as li, secretSafeKeyDisplay as ln, identityKeyFor as lo, IntrinsicFunctionResolver as lr, describeDockerFailure as ls, makeSiblingClaimReader as lt, isSecretBearingReferenceString as m, renderStatefulReason as ma, malformedOrphansWarning as mi, collectPublishedOutputNames as mn, recordNoEchoAttributeValues as mo, assertFlagRoleArn as mr, isDockerClientEnvKey as ms, dropSettledNestedJournals as mt, IMPLICIT_DELETE_DEPENDENCIES as n, unreadableResourceEntries as na, hasOwnKey as nc, isReadableOrphanRecord as ni, DeploymentEventsStore as nn, redactSecretsForState as no, ec2InstanceProtectionSite as nr, validateAssetBucketName as ns, journaledOrphanLines as nt, isAbsoluteAssetPath as o, withoutSilentDropProperties as oa, absoluteAssemblyPathEscape as oc, malformedExportSourceWarning as oi, exportAliasCollisionScrubWarning as on, dynamicReferenceTokens as oo, reEnableInstanceApiTermination as or, resolveDockerContextDirectory as os, maskEventTextWithBoundBags as ot, readRecordedConditionVerdicts as p, isStatefulRecreateTargetSync as pa, malformedOrphansRefusalMessage as pi, collectDeclaredOutputNames as pn, recordMaskOnlyValuesIn as po, applyRoleArnIfSet as pr, getDockerCmd as ps, displacedPhysicalIdShown as pt, green as q, printingCorpusOf as qa, refuseMalformedState as qi, ccProtectionRegistryTypes as qn, rewriteTemplateAssetReferences as qo, STATE_REGION_DIVERGED as qr, decodeListingKey as qs, refusesFinalSnapshot as qt, computeImplicitDeleteEdges as r, findActionableSilentDrops as ra, hasPlainPrototype$1 as rc, isReadableResourceEntry as ri, extractDeploymentEventError as rn, scrubResourceRecord as ro, isTerminationProtectionPropagationError as rr, validateContainerRepoName as rs, loadJournaledOrphans as rt, listNestedTemplateRows as s, NO_CC_HANDLERS_REASON as sa, describeFileReadFailure as sc, malformedLocalOutputsWarning as si, secretBearing as sn, isUncertifiedBaselineMaskPosition as so, DiffCalculator as sr, describeDockerCapturedOutput as ss, secretNamePrintingBag as st, DeployEngine as t, unreadableOrphanRecords as ta, defineOwnKey as tc, hasReadableResources as ti, DeploymentEventsReader as tn, markSameGenerationBag as to, disableInstanceApiTermination as tr, readBootstrapMarkerBody as ts, isHandledOrphan as tt, conditionFingerprint as u, shownType as ua, resolveAssemblyPath as uc, malformedOrphanRecordsRefusalMessage as ui, exportNameSecretExposure as un, carriesSecretMask as uo, classifyReplaySecretRegion as ur, dockerSpawnEnvWithSensitive as us, planOrphanAdoption as ut, withResourceDeadline as v, toCfnInteger as va, malformedResourceEntriesWarning as vi, DEFAULT_RESOURCE_WARN_AFTER_MS as vn, STATE_SOURCED_CROSS_GENERATION_RULES as vo, sendableAssumeRoleCommand as vr, redactedDockerCause as vs, revertNestedChildFromJournal as vt, readProtection as w, configStringRefusal as wa, refuseDivergentRecordRegionForDestroy as wi, earliestDefined as wn, isLockInfoExpired as wo, s3BucketArn as wr, AssetManifestLoader as ws, replayRollback as wt, PROTECTION_PROPERTY_BY_TYPE as x, coerceCfnInteger as xa, malformedScrubResourceEntriesRefusalMessage as xi, findDestructiveChanges as xn, WHOLE_DYNAMIC_REFERENCE_PATTERN as xo, callerEnvCredentials as xr, warnFinchArgvExposure as xs, getCurrentNestedStackContext as xt, recordedProtectionEvidence as y, toFiniteNumber as ya, malformedResourcePropertiesWarning as yi, maskingRetryLogger as yn, STATE_SOURCED_READBACK_RULES as yo, AWS_CREDENTIAL_ENV_KEYS as yr, runDockerForeground as ys, revertedNestedRowIds as yt, isTruthyCfnBoolean as z, liveMatchesUnresolvedTokenFrame as za, refuseMalformedResourceEntriesForOrphan as zi, ProviderRegistry as zn, shouldRetainResource as zo, cfnRefValueFromPhysicalId as zr, warnDeprecatedNoPrefixCliFlag as zs, inheritProducerRegions as zt };
37925
+ //# sourceMappingURL=deploy-engine-Cm7z6aQk.js.map