@go-to-k/cdkd 0.310.0 → 0.311.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/{asg-provider-I1bFHVsO.js → asg-provider-CIg_guZ-.js} +5 -3
  2. package/dist/asg-provider-CIg_guZ-.js.map +1 -0
  3. package/dist/cli.js +2 -2
  4. package/dist/{iam-policy-targets-D94wh05t.js → created-resource-sink-DlzoIY-1.js} +51 -2
  5. package/dist/created-resource-sink-DlzoIY-1.js.map +1 -0
  6. package/dist/{db-instance-modify-retry-BUG7NMWS.js → db-instance-modify-retry-1y0kIPCO.js} +2 -2
  7. package/dist/{db-instance-modify-retry-BUG7NMWS.js.map → db-instance-modify-retry-1y0kIPCO.js.map} +1 -1
  8. package/dist/{deploy-engine-DZO2SOQJ.js → deploy-engine-BF5exXUb.js} +617 -113
  9. package/dist/deploy-engine-BF5exXUb.js.map +1 -0
  10. package/dist/{iam-role-provider-BWw7I-SZ.js → iam-role-provider-qvhlVnrn.js} +5 -3
  11. package/dist/iam-role-provider-qvhlVnrn.js.map +1 -0
  12. package/dist/index.d.ts +9 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +3 -3
  15. package/dist/{neptune-provider-8kjFmR1l.js → neptune-provider-D9ac71Ca.js} +6 -4
  16. package/dist/neptune-provider-D9ac71Ca.js.map +1 -0
  17. package/dist/{program-CS420Kx9.js → program-DbnTHlwR.js} +26 -14
  18. package/dist/program-DbnTHlwR.js.map +1 -0
  19. package/dist/{provider-classes-KsrvwO_r.js → provider-classes-DktsDsTf.js} +1063 -146
  20. package/dist/provider-classes-DktsDsTf.js.map +1 -0
  21. package/dist/{rds-provider-BqwTQeS-.js → rds-provider-0LUsn9Wl.js} +7 -4
  22. package/dist/rds-provider-0LUsn9Wl.js.map +1 -0
  23. package/dist/{version-QOtLxcEo.js → version-BA4rBBLp.js} +2 -2
  24. package/dist/{version-QOtLxcEo.js.map → version-BA4rBBLp.js.map} +1 -1
  25. package/package.json +2 -2
  26. package/dist/asg-provider-I1bFHVsO.js.map +0 -1
  27. package/dist/deploy-engine-DZO2SOQJ.js.map +0 -1
  28. package/dist/iam-policy-targets-D94wh05t.js.map +0 -1
  29. package/dist/iam-role-provider-BWw7I-SZ.js.map +0 -1
  30. package/dist/neptune-provider-8kjFmR1l.js.map +0 -1
  31. package/dist/program-CS420Kx9.js.map +0 -1
  32. package/dist/provider-classes-KsrvwO_r.js.map +0 -1
  33. package/dist/rds-provider-BqwTQeS-.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { c as __exportAll, r as getAwsClients } from "./aws-clients-Bu9EMILF.js";
2
2
  import { A as isNameGeneration, B as SECRET_REF_MAX_CODE_POINTS, D as getCurrentStackInstanceId, E as getCurrentSkipPrefix, F as withSkipPrefix, G as displayAwsMessage, H as UNRENDERABLE, I as withStackScope, J as displayStackName, K as displayIdent, L as withStackScopeBeforeStateRead, N as stackInstanceNameSuffix, O as getCurrentStackName, P as withNameGeneration, Q as safeMsg, R as withoutGeneratedFallbackName, S as fallbackNamePropertyFor, T as generatedNameFor, U as asIsMessage, V as STACK_REF_MAX_CODE_POINTS, Y as isPasteableIdent, Z as plainIdentOr, a as safeStringify$1, c as isStdoutReservedForPayload, et as terminalSafe, f as currentLogLineMasker, j as looksLikeCdkdGeneratedName, m as getLiveRenderer, n as describeAwsFailure, p as installLogLineMaskerSource, q as displaySafe, s as getLogger, t as VERBOSE_POINTER, tt as truncateCodePoints, v as applyDefaultNameForFallback, w as generateResourceNameWithFallback, x as explicitNamePropertyFor, y as currentNameGeneration, z as SAFE_MSG_ALTERED_CHAR } from "./aws-failure-text-NSBdKPYK.js";
3
- import { $n as isUpdateUnsupportedError, An as StateError, At as carryCreatedBeforeFailure, B as compensateProtectionFlip, Bn as UNSHOWABLE_VALUE, Bt as replayMadeAnotherResource, Cr as markNonRetryable, Ct as createMaskedLogSinks, D as markNotGone, Dn as ResourceUpdateNotSupportedError, Dt as maskerOrIdentity, E as isMarkedNotGone, En as ResourceTimeoutError, Et as maskDeep, F as refusalTypeShown, Fn as normalizeAwsError, Ft as isAuxiliaryFailure, Gn as physicalIdShownBesideCommand, Gt as formatLockExpiry, H as deleteWithProtectionCompensation, Ht as buildForceUnlockCommand, It as isAuxiliaryMarkOf, J as observeThenDisableProtection, Jn as shellBoundedDisplay, Jt as recoveryCommandFlags, K as isTerminalDeleteFailure, Kn as plainOrDescribed, Kt as formatLockOperation, L as resolveExplicitPhysicalId, Lt as markAuxiliaryFailure, M as isQuotableImportValue, Mt as createdBeforeFailure, N as normalizeAwsTagsToCfn, Nt as createdResourceIdentityBeforeFailure, O as assertRegionMatch, Ot as withDerivedNameMasks, P as quotedRemedyLogicalId, Pn as isSoftAbort, Pt as hasCreatedBeforeFailure, Qt as injectiveKey, Rn as SHELL_ACTIVE, Rt as markCreatedBeforeFailure, Sn as MalformedProducerRecordRefusalError, Sr as isThrottlingError, St as stateOrphanRecordRemedy, T as RESOURCE_NOT_FOUND, Tn as ProvisioningError, Tr as wrapMaskedAwsError, Tt as isSecretDerivedValue, Un as isInertUnquoted, Vn as commandHole, Vt as UNREPRODUCIBLE_LOCK_CLAUSE, Wn as pasteableCommand, Xn as withheldTargetClause, Xt as CUSTOM_RESOURCE_RESPONSE_PREFIX, Y as protectionFlipKey, Yn as shellQuote, Yt as sanitizeRecoveryValue, Z as runDeleteAttempt, Zt as DEFAULT_STATE_PREFIX, _n as IntrinsicResolutionRefusalError, _r as isRetryableTransientError, an as ambientCredentialConfig, at as protectedReplacementAdvice, bn as LockError, bt as resourceTypeShown, cn as AccountIdUnavailableError, cr as escapeRegExp$3, ct as monotonicNowMs, d as prepareRemovalForUpdate, er as hasReplayMayCollide, et as DELETION_PROTECTION_DOC_POINTER, f as removalWarning, fn as CrossAccountSecretRefusalError, fr as formatRetryClassificationSignals, ft as isInterruptedWaitError, gn as DynamicReferenceRegionAmbiguousError, gr as isIamPropagationError, gt as compositeIdSeparatorRefusal, hn as DeploymentNotApprovedError, i as holdsSecretDerivedEntry, in as ambientClientDefaults, ir as isReplayedNameCollisionFrom, it as pasteableAwsCommand, jn as SynthesisError, kt as RETRY_AUXILIARY_OWNER, l as withUnchangedSecretPrincipalLists, ln as AssetError, lr as stripControlChars, m as withoutInjectedRemovals, mr as isAmbiguousOutcomeError, mt as canonicalizeRoute53QueryName, nr as isNameCooldownError, on as clientDefaultsFor, or as markReplayMayCollide, pn as DependencyError, pr as isAmbiguousCcHandlerErrorCode, pt as startInterruptWatch, qn as quotedOrDescribed, qt as formatLockOwner, rn as withPasteableAwsProfile, rr as isRecreateRetryableError, sn as credentialFingerprint, sr as relayedNameCollision, st as ElapsedBudgetRegistry, tn as producerRecordKey, tr as isNameCollisionErrorFrom, un as CdkdError, vr as isTransientServerError, vt as logicalIdShown, w as withoutServerErrorRetries, wr as markRedactedCause, wt as createMaskedRetryLogger, xn as MacroExpansionError, xr as isMarkedNonRetryable, xt as segmentAfterAnchor, yr as retryClassificationText, z as ProtectionFlipRegistry, zn as SHELL_ACTIVE_WHY } from "./iam-policy-targets-D94wh05t.js";
3
+ import { $ as observeThenDisableProtection, $n as shellBoundedDisplay, $t as recoveryCommandFlags, A as RESOURCE_NOT_FOUND, An as ProvisioningError, Ar as wrapMaskedAwsError, At as isSecretDerivedValue, B as refusalTypeShown, Bn as normalizeAwsError, Bt as isAuxiliaryFailure, Cr as isTransientServerError, Ct as logicalIdShown, Dn as MalformedProducerRecordRefusalError, Dr as isThrottlingError, Dt as stateOrphanRecordRemedy, En as MacroExpansionError, Er as isMarkedNonRetryable, Et as segmentAfterAnchor, Fn as StateError, Ft as carryCreatedBeforeFailure, G as compensateProtectionFlip, Gn as UNSHOWABLE_VALUE, Gt as replayMadeAnotherResource, H as resolveExplicitPhysicalId, Ht as markAuxiliaryFailure, In as SynthesisError, Jn as isInertUnquoted, Kn as commandHole, Kt as UNREPRODUCIBLE_LOCK_CLAUSE, L as isQuotableImportValue, Lt as createdBeforeFailure, M as markNotGone, Mn as ResourceUpdateNotSupportedError, Mt as maskerOrIdentity, N as assertRegionMatch, Nt as withDerivedNameMasks, Or as markNonRetryable, Ot as createMaskedLogSinks, Pt as RETRY_AUXILIARY_OWNER, Qn as quotedOrDescribed, Qt as formatLockOwner, R as normalizeAwsTagsToCfn, Rt as createdResourceIdentityBeforeFailure, Sn as IntrinsicResolutionRefusalError, Sr as isRetryableTransientError, Tn as LockError, Tt as resourceTypeShown, Un as SHELL_ACTIVE, Ut as markCreatedBeforeFailure, Vt as isAuxiliaryMarkOf, W as ProtectionFlipRegistry, Wn as SHELL_ACTIVE_WHY, Xn as physicalIdShownBesideCommand, Xt as formatLockExpiry, Yn as pasteableCommand, Z as isTerminalDeleteFailure, Zn as plainOrDescribed, Zt as formatLockOperation, _ as removalWarning, _n as CrossAccountSecretRefusalError, _r as formatRetryClassificationSignals, _t as isInterruptedWaitError, a as retractCreatedResource, ar as hasReplayMayCollide, at as DELETION_PROTECTION_DOC_POINTER, bn as DeploymentNotApprovedError, cn as withPasteableAwsProfile, cr as isRecreateRetryableError, dn as clientDefaultsFor, dr as markReplayMayCollide, en as sanitizeRecoveryValue, er as shellQuote, et as protectionFlipKey, fn as credentialFingerprint, fr as relayedNameCollision, ft as ElapsedBudgetRegistry, g as prepareRemovalForUpdate, hn as CdkdError, i as reportCreatedResource, ir as isUpdateUnsupportedError, j as isMarkedNotGone, jn as ResourceTimeoutError, jt as maskDeep, k as withoutServerErrorRetries, kr as markRedactedCause, kt as createMaskedRetryLogger, l as holdsSecretDerivedEntry, ln as ambientClientDefaults, lr as isReplayedNameCollisionFrom, lt as pasteableAwsCommand, m as withUnchangedSecretPrincipalLists, mn as AssetError, mr as stripControlChars, n as clearCreatedReport, nn as DEFAULT_STATE_PREFIX, nt as runDeleteAttempt, on as producerRecordKey, or as isNameCollisionErrorFrom, pn as AccountIdUnavailableError, pr as escapeRegExp$3, pt as monotonicNowMs, q as deleteWithProtectionCompensation, qt as buildForceUnlockCommand, r as collectCreatedResources, rn as injectiveKey, sr as isNameCooldownError, t as CreatedResourceSink, tn as CUSTOM_RESOURCE_RESPONSE_PREFIX, tr as withheldTargetClause, un as ambientCredentialConfig, ut as protectedReplacementAdvice, vn as DependencyError, vr as isAmbiguousCcHandlerErrorCode, vt as startInterruptWatch, wr as retryClassificationText, xn as DynamicReferenceRegionAmbiguousError, xr as isIamPropagationError, xt as compositeIdSeparatorRefusal, y as withoutInjectedRemovals, yr as isAmbiguousOutcomeError, yt as canonicalizeRoute53QueryName, z as quotedRemedyLogicalId, zn as isSoftAbort, zt as hasCreatedBeforeFailure } from "./created-resource-sink-DlzoIY-1.js";
4
4
  import { a as setAssumedRoleCredentials, c as ambientRegion, i as getPreAssumeEnvCredentials, n as awsClientDefaults, o as setPreAssumeEnvCredentials, r as getAssumedRoleCredentials, s as quietS3Logger, t as SECOND_ROLE_PUBLISH_REFUSAL } from "./aws-client-defaults-BX9Y_fKp.js";
5
- import { t as getCdkdVersion } from "./version-QOtLxcEo.js";
5
+ import { t as getCdkdVersion } from "./version-BA4rBBLp.js";
6
6
  import { createHash, randomUUID } from "node:crypto";
7
7
  import { AsyncLocalStorage } from "node:async_hooks";
8
8
  import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketLifecycleConfigurationCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
@@ -4987,7 +4987,8 @@ const STATE_SCHEMA_VERSIONS_READABLE = [
4987
4987
  11,
4988
4988
  12,
4989
4989
  13,
4990
- 14
4990
+ 14,
4991
+ 15
4991
4992
  ];
4992
4993
  function hasUnverifiableParameterRefusal(record) {
4993
4994
  return record?.observedBaselineRefused === true && record.observedBaselineRefusalReason === "unverifiable-parameter";
@@ -6047,7 +6048,7 @@ var S3StateBackend = class S3StateBackend {
6047
6048
  const body = {
6048
6049
  ...state,
6049
6050
  ...stackInstanceIdCarriedFrom(state),
6050
- version: 14,
6051
+ version: 15,
6051
6052
  stackName,
6052
6053
  region
6053
6054
  };
@@ -10278,6 +10279,11 @@ function scrubResourceRecord(record, secrets, sourceProperties, observedProvenan
10278
10279
  secrets
10279
10280
  });
10280
10281
  }
10282
+ const attemptedItems = record.unsettledItems;
10283
+ if (typeof attemptedItems === "object" && attemptedItems !== null && !Array.isArray(attemptedItems)) next.unsettledItems = redactForState(attemptedItems, {
10284
+ provenance: "value-scan",
10285
+ secrets
10286
+ });
10281
10287
  if (record.observedProperties) next.observedProperties = redactAtProvenance(record.observedProperties, secrets, sourceProperties ?? next.properties, observedProvenance ?? (sourceProperties !== void 0 ? "template-sourced" : secrets.size === 0 && observedClaimed ? "state-baseline" : "state-readback"), observedClaimed);
10282
10288
  return next;
10283
10289
  }
@@ -15233,6 +15239,7 @@ const STATEFUL_TYPES = /* @__PURE__ */ new Set([
15233
15239
  "AWS::MemoryDB::Snapshot",
15234
15240
  "AWS::Redshift::Snapshot",
15235
15241
  "AWS::Timestream::InfluxDBBackup",
15242
+ "AWS::EC2::Snapshot",
15236
15243
  "AWS::StorageGateway::Volume",
15237
15244
  "AWS::FSx::FileCache",
15238
15245
  "AWS::DirectoryService::MicrosoftAD",
@@ -16283,21 +16290,20 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
16283
16290
  "AgentRuntimeArtifact",
16284
16291
  "AgentRuntimeName",
16285
16292
  "AuthorizerConfiguration",
16293
+ "CapacityProviderConfiguration",
16286
16294
  "ClientToken",
16287
16295
  "Description",
16288
16296
  "EnvironmentVariables",
16297
+ "FilesystemConfigurations",
16289
16298
  "LifecycleConfiguration",
16290
16299
  "NetworkConfiguration",
16300
+ "PlatformVersion",
16291
16301
  "ProtocolConfiguration",
16292
- "RoleArn"
16293
- ]),
16294
- silentDrop: /* @__PURE__ */ new Map([
16295
- ["CapacityProviderConfiguration", "not yet implemented by cdkd"],
16296
- ["FilesystemConfigurations", "not yet implemented by cdkd"],
16297
- ["PlatformVersion", "not yet implemented by cdkd"],
16298
- ["RequestHeaderConfiguration", "not yet implemented by cdkd"],
16299
- ["Tags", "not yet implemented by cdkd"]
16302
+ "RequestHeaderConfiguration",
16303
+ "RoleArn",
16304
+ "Tags"
16300
16305
  ]),
16306
+ silentDrop: /* @__PURE__ */ new Map(),
16301
16307
  createOnlyDrops: /* @__PURE__ */ new Set(),
16302
16308
  readOnly: /* @__PURE__ */ new Set([
16303
16309
  "AgentRuntimeArn",
@@ -16424,6 +16430,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
16424
16430
  }],
16425
16431
  ["AWS::CloudWatch::Alarm", {
16426
16432
  handled: /* @__PURE__ */ new Set([
16433
+ "ActionConfiguration",
16427
16434
  "ActionsEnabled",
16428
16435
  "AlarmActions",
16429
16436
  "AlarmDescription",
@@ -16432,7 +16439,10 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
16432
16439
  "DatapointsToAlarm",
16433
16440
  "Dimensions",
16434
16441
  "EvaluateLowSampleCountPercentile",
16442
+ "EvaluationCriteria",
16443
+ "EvaluationInterval",
16435
16444
  "EvaluationPeriods",
16445
+ "EvaluationWindow",
16436
16446
  "ExtendedStatistic",
16437
16447
  "InsufficientDataActions",
16438
16448
  "MetricName",
@@ -16445,15 +16455,10 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
16445
16455
  "Threshold",
16446
16456
  "ThresholdMetricId",
16447
16457
  "TreatMissingData",
16448
- "Unit"
16449
- ]),
16450
- silentDrop: /* @__PURE__ */ new Map([
16451
- ["ActionConfiguration", "not yet implemented by cdkd"],
16452
- ["EvaluationCriteria", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."],
16453
- ["EvaluationInterval", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."],
16454
- ["EvaluationWindow", "not yet implemented by cdkd"],
16455
- ["WarmUpConfiguration", "not yet implemented by cdkd"]
16458
+ "Unit",
16459
+ "WarmUpConfiguration"
16456
16460
  ]),
16461
+ silentDrop: /* @__PURE__ */ new Map(),
16457
16462
  createOnlyDrops: /* @__PURE__ */ new Set(),
16458
16463
  readOnly: /* @__PURE__ */ new Set(["Arn"]),
16459
16464
  ccRouteUnavailable: false
@@ -17995,7 +18000,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
17995
18000
  "RetentionInDays",
17996
18001
  "Tags"
17997
18002
  ]),
17998
- silentDrop: /* @__PURE__ */ new Map([["ResourcePolicyDocument", "covered by the separate account-wide AWS::Logs::ResourcePolicy resource type; logs:PutResourcePolicy is account-scoped, not per-log-group, so it has no CreateLogGroup / PutRetentionPolicy counterpart — routed via Cloud Control instead"]]),
18003
+ silentDrop: /* @__PURE__ */ new Map([["ResourcePolicyDocument", "not driven by this provider by decision (issue #1412): no CreateLogGroup / PutRetentionPolicy member carries it, and both policy lifecycles — the account-scoped AWS::Logs::ResourcePolicy type and the log-group-scoped logs:PutResourcePolicy (resourceArn + policyScope RESOURCE) — are ones this provider does not take on — routed via Cloud Control, whose handler applies it"]]),
17999
18004
  createOnlyDrops: /* @__PURE__ */ new Set(),
18000
18005
  readOnly: /* @__PURE__ */ new Set(["Arn"]),
18001
18006
  ccRouteUnavailable: false
@@ -18479,17 +18484,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
18479
18484
  }],
18480
18485
  ["AWS::S3Express::DirectoryBucket", {
18481
18486
  handled: /* @__PURE__ */ new Set([
18487
+ "BucketEncryption",
18482
18488
  "BucketName",
18483
18489
  "DataRedundancy",
18490
+ "InventoryConfigurations",
18491
+ "LifecycleConfiguration",
18484
18492
  "LocationName",
18493
+ "MetricsConfigurations",
18485
18494
  "Tags"
18486
18495
  ]),
18487
- silentDrop: /* @__PURE__ */ new Map([
18488
- ["BucketEncryption", "not yet implemented by cdkd"],
18489
- ["InventoryConfigurations", "not yet implemented by cdkd"],
18490
- ["LifecycleConfiguration", "not yet implemented by cdkd"],
18491
- ["MetricsConfigurations", "not yet implemented by cdkd"]
18492
- ]),
18496
+ silentDrop: /* @__PURE__ */ new Map(),
18493
18497
  createOnlyDrops: /* @__PURE__ */ new Set(),
18494
18498
  readOnly: /* @__PURE__ */ new Set(["Arn", "AvailabilityZoneName"]),
18495
18499
  ccRouteUnavailable: false
@@ -18770,25 +18774,24 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
18770
18774
  }],
18771
18775
  ["AWS::WAFv2::WebACL", {
18772
18776
  handled: /* @__PURE__ */ new Set([
18777
+ "ApplicationConfig",
18773
18778
  "AssociationConfig",
18774
18779
  "CaptchaConfig",
18775
18780
  "ChallengeConfig",
18776
18781
  "CustomResponseBodies",
18782
+ "DataProtectionConfig",
18777
18783
  "DefaultAction",
18778
18784
  "Description",
18785
+ "MonetizationConfig",
18779
18786
  "Name",
18787
+ "OnSourceDDoSProtectionConfig",
18780
18788
  "Rules",
18781
18789
  "Scope",
18782
18790
  "Tags",
18783
18791
  "TokenDomains",
18784
18792
  "VisibilityConfig"
18785
18793
  ]),
18786
- silentDrop: /* @__PURE__ */ new Map([
18787
- ["ApplicationConfig", "not yet implemented by cdkd"],
18788
- ["DataProtectionConfig", "not yet implemented by cdkd"],
18789
- ["MonetizationConfig", "not yet implemented by cdkd"],
18790
- ["OnSourceDDoSProtectionConfig", "not yet implemented by cdkd"]
18791
- ]),
18794
+ silentDrop: /* @__PURE__ */ new Map(),
18792
18795
  createOnlyDrops: /* @__PURE__ */ new Set(),
18793
18796
  readOnly: /* @__PURE__ */ new Set([
18794
18797
  "Arn",
@@ -26006,14 +26009,80 @@ function withUnsettledProperties(record, names) {
26006
26009
  };
26007
26010
  }
26008
26011
  function withoutUnsettledProperties(record) {
26009
- if (!Object.hasOwn(record, "unsettledProperties")) return record;
26010
- const { unsettledProperties: _cleared, ...rest } = record;
26012
+ if (!Object.hasOwn(record, "unsettledProperties") && !Object.hasOwn(record, "unsettledItems")) return record;
26013
+ const { unsettledProperties: _cleared, unsettledItems: _items, ...rest } = record;
26011
26014
  return rest;
26012
26015
  }
26016
+ const UNSETTLED_ITEMS_PER_PATH_CAP = 100;
26017
+ const UNSETTLED_ITEM_LENGTH_CAP = 255;
26018
+ function unsettledItemsTopKey(path) {
26019
+ const cut = path.search(/[.[]/);
26020
+ return cut === -1 ? path : path.slice(0, cut);
26021
+ }
26022
+ function unsettledItemsOf(record) {
26023
+ const out = /* @__PURE__ */ new Map();
26024
+ if (record === null || typeof record !== "object") return out;
26025
+ const value = record.unsettledItems;
26026
+ if (value === null || typeof value !== "object" || Array.isArray(value)) return out;
26027
+ const unsettled = unsettledPropertiesOf(record);
26028
+ for (const [path, entries] of Object.entries(value)) {
26029
+ if (!unsettled.has(unsettledItemsTopKey(path))) continue;
26030
+ if (!Array.isArray(entries) || entries.length > 100) continue;
26031
+ const names = entries.filter((entry) => typeof entry === "string" && entry !== "" && entry.length <= 255);
26032
+ if (names.length > 0) out.set(path, new Set(names));
26033
+ }
26034
+ return out;
26035
+ }
26036
+ function isUsableAttemptedName(name) {
26037
+ return !name.includes("{{resolve:") && !name.includes("***");
26038
+ }
26039
+ function withUnsettledItems(record, items) {
26040
+ const merged = /* @__PURE__ */ new Map();
26041
+ for (const [path, names] of unsettledItemsOf(record)) merged.set(path, new Set(names));
26042
+ const unsettled = unsettledPropertiesOf(record);
26043
+ let added = false;
26044
+ for (const [path, names] of items) {
26045
+ if (!unsettled.has(unsettledItemsTopKey(path))) continue;
26046
+ const set = merged.get(path) ?? /* @__PURE__ */ new Set();
26047
+ for (const name of names) {
26048
+ if (typeof name !== "string" || name === "" || name.length > 255) continue;
26049
+ if (!set.has(name)) {
26050
+ set.add(name);
26051
+ added = true;
26052
+ }
26053
+ }
26054
+ if (set.size > 0) merged.set(path, set);
26055
+ }
26056
+ if (!added) return record;
26057
+ const field = {};
26058
+ for (const [path, set] of [...merged].sort(([a], [b]) => a.localeCompare(b))) if (set.size <= 100) field[path] = [...set].sort();
26059
+ return {
26060
+ ...record,
26061
+ unsettledItems: field
26062
+ };
26063
+ }
26064
+ function unsettledItemsField(source, keys) {
26065
+ const allowed = new Set(keys);
26066
+ const field = {};
26067
+ for (const [path, names] of unsettledItemsOf(source)) if (allowed.has(unsettledItemsTopKey(path))) field[path] = [...names].sort();
26068
+ return Object.keys(field).length > 0 ? { unsettledItems: field } : {};
26069
+ }
26013
26070
  function unsettledContextOf(...records) {
26014
26071
  const names = /* @__PURE__ */ new Set();
26015
- for (const record of records) for (const name of unsettledPropertiesOf(record)) names.add(name);
26016
- return names.size > 0 ? { unsettledProperties: names } : {};
26072
+ const items = /* @__PURE__ */ new Map();
26073
+ for (const record of records) {
26074
+ for (const name of unsettledPropertiesOf(record)) names.add(name);
26075
+ for (const [path, set] of unsettledItemsOf(record)) {
26076
+ const merged = items.get(path) ?? /* @__PURE__ */ new Set();
26077
+ for (const name of set) merged.add(name);
26078
+ items.set(path, merged);
26079
+ }
26080
+ }
26081
+ if (names.size === 0) return {};
26082
+ return {
26083
+ unsettledProperties: names,
26084
+ ...items.size > 0 && { unsettledItems: items }
26085
+ };
26017
26086
  }
26018
26087
 
26019
26088
  //#endregion
@@ -28671,7 +28740,7 @@ var CloudControlProvider = class {
28671
28740
  const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
28672
28741
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
28673
28742
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
28674
- const { ASGProvider } = await import("./asg-provider-I1bFHVsO.js");
28743
+ const { ASGProvider } = await import("./asg-provider-CIg_guZ-.js");
28675
28744
  const delegateRegion = ambientRegion();
28676
28745
  let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
28677
28746
  if (asgProvider === void 0) {
@@ -28780,7 +28849,7 @@ var CloudControlProvider = class {
28780
28849
  const family = SDK_DELETE_FAMILIES.get(resourceType);
28781
28850
  const cached = this.sdkDeleteDelegates.get(family);
28782
28851
  if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
28783
- const provider = family === "rds" ? new (await (import("./rds-provider-BqwTQeS-.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-8kjFmR1l.js"))).NeptuneProvider({ region: ccRegion });
28852
+ const provider = family === "rds" ? new (await (import("./rds-provider-0LUsn9Wl.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-D9ac71Ca.js"))).NeptuneProvider({ region: ccRegion });
28784
28853
  this.sdkDeleteDelegates.set(family, {
28785
28854
  region: ccRegion,
28786
28855
  provider
@@ -35758,7 +35827,50 @@ function noEchoAttributeNamesFor(run, logicalId, record, carried, leaves) {
35758
35827
  if (declared === void 0 && prior === void 0 && !echoed) return void 0;
35759
35828
  return [...names].sort();
35760
35829
  }
35830
+ function withNoEchoItemsMasked(run, deps, logicalId, record) {
35831
+ const items = record.unsettledItems;
35832
+ if (typeof items !== "object" || items === null || Array.isArray(items)) return record;
35833
+ const secrets = deps.perResourceSecrets().get(logicalId);
35834
+ const plaintexts = secrets === void 0 ? [] : noEchoParameterPlaintextsOf(secrets).filter((plaintext) => plaintext !== "");
35835
+ const positioned = /* @__PURE__ */ new Set();
35836
+ for (const json of run.noEchoPositionedValues.get(logicalId) ?? []) {
35837
+ let value;
35838
+ try {
35839
+ value = JSON.parse(json);
35840
+ } catch {
35841
+ continue;
35842
+ }
35843
+ if (typeof value === "string" && value !== "") positioned.add(value);
35844
+ }
35845
+ if (plaintexts.length === 0 && positioned.size === 0) return record;
35846
+ return withAttemptedItemsMasked(record, [...positioned, ...plaintexts]);
35847
+ }
35848
+ function withAttemptedItemsMasked(record, needles) {
35849
+ const items = record.unsettledItems;
35850
+ if (typeof items !== "object" || items === null || Array.isArray(items)) return record;
35851
+ const usable = needles.filter((needle) => needle !== "" && needle !== "***");
35852
+ if (usable.length === 0) return record;
35853
+ let changed = false;
35854
+ const masked = {};
35855
+ for (const [path, entries] of Object.entries(items)) {
35856
+ if (!Array.isArray(entries)) {
35857
+ masked[path] = entries;
35858
+ continue;
35859
+ }
35860
+ masked[path] = [...new Set(entries.map((entry) => {
35861
+ if (typeof entry !== "string") return entry;
35862
+ const served = usable.some((needle) => entry.includes(needle));
35863
+ if (served) changed = true;
35864
+ return served ? "***" : entry;
35865
+ }))];
35866
+ }
35867
+ return changed ? {
35868
+ ...record,
35869
+ unsettledItems: masked
35870
+ } : record;
35871
+ }
35761
35872
  function applyNoEchoPersist(run, deps, logicalId, record, scrubbed, templateProps, resources, secrets, carried = false) {
35873
+ scrubbed = withNoEchoItemsMasked(run, deps, logicalId, scrubbed);
35762
35874
  const sources = noEchoPositionSources(run, resources);
35763
35875
  if (sources === void 0) return scrubbed;
35764
35876
  const leaves = noEchoLeavesFor(run, deps, logicalId, record, templateProps, sources);
@@ -37258,6 +37370,10 @@ function maskingRetryLogger(logger, secrets) {
37258
37370
  //#region src/deployment/deploy-engine/options.ts
37259
37371
  const DEFAULT_RESOURCE_WARN_AFTER_MS = 3e5;
37260
37372
  const DEFAULT_RESOURCE_TIMEOUT_MS = 18e5;
37373
+ const DEFAULT_UNSETTLED_REVERT_WAIT = {
37374
+ timeoutMs: DEFAULT_RESOURCE_TIMEOUT_MS,
37375
+ pollMs: 1e4
37376
+ };
37261
37377
 
37262
37378
  //#endregion
37263
37379
  //#region src/analyzer/skipped-outputs.ts
@@ -39533,7 +39649,7 @@ const MERGE_SEMANTICS_KEYS = /* @__PURE__ */ new Set(["Tags"]);
39533
39649
  async function readLive(args, names) {
39534
39650
  const { provider, physicalId, logicalId, resourceType, recordedProperties } = args;
39535
39651
  let live;
39536
- if (provider.readUnsettled !== void 0) live = await provider.readUnsettled(physicalId, logicalId, resourceType, names, recordedProperties, args.desired);
39652
+ if (provider.readUnsettled !== void 0) live = await provider.readUnsettled(physicalId, logicalId, resourceType, names, recordedProperties, args.desired, args.attemptedItems);
39537
39653
  else if (provider.readCurrentState !== void 0) live = await provider.readCurrentState(physicalId, logicalId, resourceType, recordedProperties);
39538
39654
  else return;
39539
39655
  if (typeof live !== "object" || live === null || Array.isArray(live)) return "unreadable";
@@ -39551,23 +39667,55 @@ async function settleUnsettledPrevious(args) {
39551
39667
  if (moving.size > 0) throw refusal(args, moving, "AWS is still changing it or cdkd could not confirm it settled");
39552
39668
  }
39553
39669
  const substituted = new Set([...names].filter((name) => !MERGE_SEMANTICS_KEYS.has(name)));
39554
- if (substituted.size === 0) return previous;
39670
+ const attemptedTags = [...args.attemptedItems?.get("Tags") ?? []].filter(isUsableAttemptedName);
39671
+ const mergeNeedsLive = names.has("Tags") && attemptedTags.length > 0;
39672
+ if (substituted.size === 0 && !mergeNeedsLive) return previous;
39555
39673
  let live;
39556
39674
  try {
39557
- live = await readLive(args, substituted);
39675
+ live = await readLive(args, substituted.size > 0 ? substituted : /* @__PURE__ */ new Set(["Tags"]));
39558
39676
  } catch (error) {
39677
+ if (substituted.size === 0) return previous;
39559
39678
  if (error instanceof ProvisioningError) throw error;
39560
39679
  const wrapped = refusal(args, substituted, "the resource could not be read to converge it");
39561
39680
  if (error instanceof Error) wrapped.cause = error;
39562
39681
  throw wrapped;
39563
39682
  }
39564
39683
  if (live === void 0) return previous;
39565
- if (live === "unreadable") throw refusal(args, substituted, "the resource could not be read to converge it");
39684
+ if (live === "unreadable") {
39685
+ if (substituted.size === 0) return previous;
39686
+ throw refusal(args, substituted, "the resource could not be read to converge it");
39687
+ }
39566
39688
  const out = { ...previous };
39567
39689
  for (const name of substituted) if (Object.hasOwn(live, name) && live[name] !== void 0) out[name] = live[name];
39568
39690
  else delete out[name];
39691
+ if (mergeNeedsLive) {
39692
+ const withAttempted = withAttemptedTags(out["Tags"], live["Tags"], args.desired?.["Tags"], attemptedTags);
39693
+ if (withAttempted !== void 0) out["Tags"] = withAttempted;
39694
+ }
39569
39695
  return out;
39570
39696
  }
39697
+ function withAttemptedTags(recorded, live, desired, attempted) {
39698
+ const keysOf = (value) => {
39699
+ if (value === void 0 || value === null) return /* @__PURE__ */ new Set();
39700
+ if (!Array.isArray(value)) return void 0;
39701
+ const keys = /* @__PURE__ */ new Set();
39702
+ for (const entry of value) {
39703
+ const key = entry?.Key;
39704
+ if (typeof key !== "string") return void 0;
39705
+ keys.add(key);
39706
+ }
39707
+ return keys;
39708
+ };
39709
+ const recordedKeys = keysOf(recorded);
39710
+ const desiredKeys = keysOf(desired);
39711
+ if (recordedKeys === void 0 || desiredKeys === void 0 || !Array.isArray(live)) return void 0;
39712
+ const removable = live.filter((entry) => {
39713
+ const key = entry?.Key;
39714
+ return typeof key === "string" && attempted.includes(key) && !recordedKeys.has(key) && !desiredKeys.has(key);
39715
+ });
39716
+ if (removable.length === 0) return void 0;
39717
+ return [...recorded ?? [], ...removable];
39718
+ }
39571
39719
  function tagsHeld(desired, live) {
39572
39720
  const asMap = (value) => {
39573
39721
  if (value === void 0 || value === null) return /* @__PURE__ */ new Map();
@@ -39624,7 +39772,42 @@ async function withUnprovenUnsettled(record, args, warn) {
39624
39772
  const kept = await unsettledAfterUpdate(args);
39625
39773
  if (kept.length === 0) return record;
39626
39774
  warn(safeMsg`${args.logicalId} (${args.resourceType}): the update succeeded, but AWS does not yet show the requested ${kept.join(", ")}; cdkd keeps ${kept.length === 1 ? "it" : "them"} unsettled and converges again on the next deploy.`);
39627
- return withUnsettledProperties(record, kept);
39775
+ const withNames = withUnsettledProperties(record, kept);
39776
+ return withUnsettledItems(withNames, args.attemptedItems ?? /* @__PURE__ */ new Map());
39777
+ }
39778
+ async function waitForUnsettledSettled(args) {
39779
+ const { provider, names } = args;
39780
+ const deadline = Date.now() + args.timeoutMs;
39781
+ if (args.running !== void 0) {
39782
+ let returned = false;
39783
+ const done = args.running.then(() => {
39784
+ returned = true;
39785
+ }, () => {
39786
+ returned = true;
39787
+ });
39788
+ while (!returned) {
39789
+ if (args.isInterrupted()) return "interrupted";
39790
+ const left = deadline - Date.now();
39791
+ if (left <= 0) return "moving";
39792
+ await Promise.race([done, new Promise((resolve) => setTimeout(resolve, Math.min(250, left)))]);
39793
+ }
39794
+ }
39795
+ if (provider.unsettledInTransition === void 0 || names.size === 0) return "settled";
39796
+ for (;;) {
39797
+ if (args.isInterrupted()) return "interrupted";
39798
+ let moving = true;
39799
+ try {
39800
+ moving = (await provider.unsettledInTransition(args.physicalId, args.logicalId, args.resourceType, names, args.recordedProperties)).size > 0;
39801
+ } catch {}
39802
+ if (!moving) return "settled";
39803
+ const left = deadline - Date.now();
39804
+ if (left <= 0) return "moving";
39805
+ const until = Date.now() + Math.min(args.pollMs, left);
39806
+ while (Date.now() < until) {
39807
+ if (args.isInterrupted()) return "interrupted";
39808
+ await new Promise((resolve) => setTimeout(resolve, Math.min(250, until - Date.now())));
39809
+ }
39810
+ }
39628
39811
  }
39629
39812
  function splitUnhandledRemovals(unhandled, recordedPrevious, unsettled) {
39630
39813
  const addedByFailedUpdate = unhandled.filter((name) => unsettled.has(name) && !Object.hasOwn(recordedPrevious, name));
@@ -39655,7 +39838,8 @@ async function updateWithRollbackRetry(provider, args, logicalId, logger, isInte
39655
39838
  recordedProperties: recordedPrevious,
39656
39839
  names: context?.unsettledProperties ?? /* @__PURE__ */ new Set(),
39657
39840
  previous: recordedPrevious,
39658
- desired
39841
+ desired,
39842
+ ...context?.unsettledItems !== void 0 && { attemptedItems: context.unsettledItems }
39659
39843
  });
39660
39844
  const removal = prepareRemovalForUpdate(provider, resourceType, desired, previous);
39661
39845
  const revertArgs = [
@@ -40012,7 +40196,8 @@ async function replayRevert(s) {
40012
40196
  resourceType: op.resourceType,
40013
40197
  recordedProperties: current.properties ?? {},
40014
40198
  names: unsettledContextOf(current, previousState).unsettledProperties ?? /* @__PURE__ */ new Set(),
40015
- desired: desiredProps ?? {}
40199
+ desired: desiredProps ?? {},
40200
+ ...unsettledContextOf(current, previousState).unsettledItems !== void 0 && { attemptedItems: unsettledContextOf(current, previousState).unsettledItems }
40016
40201
  }, (message) => logger.warn(mask(message)));
40017
40202
  if (updatePartialReason(revertResult) === void 0) inlinePolicyWriters.record(op.logicalId, "update", stateResources[op.logicalId], !deepEqual$2(previousState.properties?.["Policies"], current.properties?.["Policies"]), revertVia);
40018
40203
  const rollbackPartial = updatePartialReason(revertResult);
@@ -40674,6 +40859,12 @@ async function replaySingle(op, stateResources, stackName, ctx, resolver, orphan
40674
40859
  function ownRecord(stateResources, logicalId) {
40675
40860
  return Object.hasOwn(stateResources, logicalId) ? stateResources[logicalId] : void 0;
40676
40861
  }
40862
+ function withKeysFrom(bag, source, keys) {
40863
+ const out = { ...bag };
40864
+ for (const key of keys) if (source !== void 0 && Object.hasOwn(source, key)) out[key] = source[key];
40865
+ else delete out[key];
40866
+ return out;
40867
+ }
40677
40868
  async function replayFailedOperationsUnbound(failedOps, stateResources, stackName, ctx, options = {}) {
40678
40869
  const inlinePolicyWriters = options.inlinePolicyWriters ?? new RollbackInlinePolicyWriters();
40679
40870
  const result = {
@@ -40906,7 +41097,14 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
40906
41097
  skipUnaddressableReplay(skipScope, logger, op, "force-revert failed UPDATE of");
40907
41098
  break;
40908
41099
  }
40909
- logger.info(` Rollback: force-reverting failed UPDATE of ${safe(op.logicalId)} (${safe(op.resourceType)}) to its pre-deploy properties (--revert-failed; remote state is unknown)`);
41100
+ const own = options.previousFromRecord?.get(op.logicalId);
41101
+ const fromRecord = own !== void 0;
41102
+ const attemptedBag = fromRecord ? void 0 : op.attemptedProperties;
41103
+ const revertUnsettled = fromRecord ? own.names.size === 0 ? {} : {
41104
+ unsettledProperties: own.names,
41105
+ ...own.items.size > 0 && { unsettledItems: own.items }
41106
+ } : unsettledContextOf(current, prev);
41107
+ logger.info(!fromRecord ? ` Rollback: force-reverting failed UPDATE of ${safe(op.logicalId)} (${safe(op.resourceType)}) to its pre-deploy properties (--revert-failed; remote state is unknown)` : own.lateSuccess ? ` Rollback: reverting the failed UPDATE of ${safe(op.logicalId)} (${safe(op.resourceType)}), whose call completed after the deploy gave up on it, to its pre-deploy properties` : ` Rollback: reverting what the failed UPDATE of ${safe(op.logicalId)} (${safe(op.resourceType)}) left unsettled (${[...own.names].map(safe).join(", ")}) to its pre-deploy properties`);
40910
41108
  const { provider, provisionedBy: revertVia } = ctx.providerRegistry.getProviderFor({
40911
41109
  resourceType: op.resourceType,
40912
41110
  provisionedBy: op.provisionedBy ?? current.provisionedBy
@@ -40923,7 +41121,13 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
40923
41121
  });
40924
41122
  const desiredProps = noEcho.desired;
40925
41123
  refuseMaskedReplayBaseline(desiredProps, op.logicalId, noEcho.inert);
40926
- const attemptedProps = noEcho.onPreviousSide(await resolveReplayProps(op.attemptedProperties ?? current.properties, resolver, secrets, ctx, op.logicalId, op.attemptedProperties === void 0 ? current : void 0));
41124
+ const resolvedPrevious = noEcho.onPreviousSide(await resolveReplayProps(attemptedBag ?? current.properties, resolver, secrets, ctx, op.logicalId, attemptedBag === void 0 ? current : void 0));
41125
+ const excludedKeys = own?.lateSuccess === true ? [...unsettledPropertiesOf(prev)] : [];
41126
+ const attemptedProps = excludedKeys.length === 0 || resolvedPrevious === void 0 ? resolvedPrevious : withKeysFrom(resolvedPrevious, desiredProps, excludedKeys);
41127
+ if (excludedKeys.length > 0) {
41128
+ const one = excludedKeys.length === 1;
41129
+ logger.warn(safeMsg` Rollback: ${safe(op.logicalId)} (${safe(op.resourceType)}): ${excludedKeys.map(safe).join(", ")} ${one ? "was" : "were"} left unsettled by an earlier failed deploy, so this revert leaves ${one ? "it" : "them"} as AWS holds ${one ? "it" : "them"}; the next deploy converges ${one ? "it" : "them"}.`);
41130
+ }
40927
41131
  recordNestedStackParameterExpressions(secrets, op.resourceType, desiredProps, prev.properties, "state-derived");
40928
41132
  opMasker.addNamed({
40929
41133
  resourceType: op.resourceType,
@@ -40957,7 +41161,7 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
40957
41161
  replayingState: true,
40958
41162
  recordedAttributes: current.attributes,
40959
41163
  ...revertFailedClaimed && { inlinePolicyClaimed: revertFailedClaimed },
40960
- ...unsettledContextOf(current, prev)
41164
+ ...revertUnsettled
40961
41165
  }
40962
41166
  ], op.logicalId, logger, options.isInterrupted, secrets, mask));
40963
41167
  if (revertFailedResult) recordNoEchoAttributeValues(revertFailedResult, secrets, desiredProps);
@@ -40968,10 +41172,12 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
40968
41172
  physicalId: current.physicalId,
40969
41173
  resourceType: op.resourceType,
40970
41174
  recordedProperties: current.properties ?? {},
40971
- names: unsettledContextOf(current, prev).unsettledProperties ?? /* @__PURE__ */ new Set(),
40972
- desired: desiredProps ?? {}
41175
+ names: revertUnsettled.unsettledProperties ?? /* @__PURE__ */ new Set(),
41176
+ desired: desiredProps ?? {},
41177
+ ...revertUnsettled.unsettledItems !== void 0 && { attemptedItems: revertUnsettled.unsettledItems }
40973
41178
  }, (message) => logger.warn(mask(message)));
40974
- if (updatePartialReason(revertFailedResult) === void 0) inlinePolicyWriters.record(op.logicalId, "update", stateResources[op.logicalId], !deepEqual$2(prev.properties?.["Policies"], (op.attemptedProperties ?? current.properties)?.["Policies"]), revertVia);
41179
+ if (fromRecord) stateResources[op.logicalId] = withUnsettledItems(withUnsettledProperties(stateResources[op.logicalId], unsettledPropertiesOf(prev)), unsettledItemsOf(prev));
41180
+ if (updatePartialReason(revertFailedResult) === void 0) inlinePolicyWriters.record(op.logicalId, "update", stateResources[op.logicalId], !deepEqual$2(prev.properties?.["Policies"], (attemptedBag ?? current.properties)?.["Policies"]), revertVia);
40975
41181
  const revertFailedPartial = updatePartialReason(revertFailedResult);
40976
41182
  if (revertFailedPartial !== void 0) logger.warn(mask(` Rollback: ${safe(op.logicalId)} reverted, ${updatePartialMessage(revertFailedPartial)}`));
40977
41183
  else logger.info(` Rollback: ${safe(op.logicalId)} reverted successfully`);
@@ -42885,7 +43091,7 @@ async function revertNestedChildFromJournal(args) {
42885
43091
  ...carried,
42886
43092
  ...stackInstanceIdCarriedFrom(base),
42887
43093
  ...supersededAfterRollback(base, supersededHost),
42888
- version: 14,
43094
+ version: 15,
42889
43095
  region,
42890
43096
  resources: { ...stateResources },
42891
43097
  ...orphansAfterRollback(base, mintedOrphans),
@@ -43652,7 +43858,7 @@ function replayPrintingBag(deps, entries, stateResources) {
43652
43858
  read
43653
43859
  ]);
43654
43860
  }
43655
- async function performRollback(deps, completedOperations, stateResources, stackName, previousState, failedOperations = [], priorOrphans = []) {
43861
+ async function performRollback(deps, completedOperations, stateResources, stackName, previousState, failedOperations = [], priorOrphans = [], unsettledRevert) {
43656
43862
  const orphanIndexes = [];
43657
43863
  const orphanOps = [];
43658
43864
  failedOperations.forEach((op, i) => {
@@ -43677,7 +43883,7 @@ async function performRollback(deps, completedOperations, stateResources, stackN
43677
43883
  const inlinePolicyWriters = new RollbackInlinePolicyWriters();
43678
43884
  const supersededHost = {};
43679
43885
  const runId = deps.options.eventRecorder?.runId;
43680
- const { result, failed, run } = await withNestedRevertRun(runId, async (scope) => {
43886
+ const { result, failed, unsettled, run } = await withNestedRevertRun(runId, async (scope) => {
43681
43887
  return {
43682
43888
  failed: orphanOps.length > 0 ? await withPrintingSecrets(replayPrintingBag(deps, orphanOps.map((op) => ({
43683
43889
  ...op,
@@ -43686,6 +43892,11 @@ async function performRollback(deps, completedOperations, stateResources, stackN
43686
43892
  emitEnvelope: completedOperations.length === 0,
43687
43893
  inlinePolicyWriters
43688
43894
  })) : void 0,
43895
+ unsettled: await revertUnsettledFailedUpdates(deps, ctx, stackName, stateResources, failedOperations, new Set(orphanIndexes), {
43896
+ emitEnvelope: completedOperations.length === 0 && orphanOps.length === 0,
43897
+ inlinePolicyWriters,
43898
+ hooks: unsettledRevert
43899
+ }),
43689
43900
  result: await withPrintingSecrets(replayPrintingBag(deps, completedReplayEntries(completedOperations), stateResources), () => replayRollback(completedOperations, stateResources, stackName, ctx, {
43690
43901
  inlinePolicyWriters,
43691
43902
  failedOperations,
@@ -43698,11 +43909,12 @@ async function performRollback(deps, completedOperations, stateResources, stackN
43698
43909
  });
43699
43910
  const pendingOrphans = new Set(failed?.remainingFailedOps ?? []);
43700
43911
  const handled = new Set(orphanIndexes.filter((_, k) => !pendingOrphans.has(orphanOps[k])));
43912
+ for (const index of unsettled.handled) handled.add(index);
43701
43913
  return {
43702
43914
  failures: result.failures + (failed?.failures ?? 0),
43703
- warnings: result.warnings + run.warnings + (failed?.warnings ?? 0),
43915
+ warnings: result.warnings + run.warnings + (failed?.warnings ?? 0) + unsettled.warnings,
43704
43916
  skipped: result.skipped + (failed?.skipped ?? 0),
43705
- interrupted: result.interrupted,
43917
+ interrupted: result.interrupted || unsettled.interrupted,
43706
43918
  orphaned: [...failed?.orphaned ?? [], ...result.orphaned],
43707
43919
  rolledBackCreates: [...failed?.rolledBackCreates ?? [], ...result.rolledBackCreates],
43708
43920
  superseded: supersededHost.supersededResources ?? [],
@@ -43710,6 +43922,152 @@ async function performRollback(deps, completedOperations, stateResources, stackN
43710
43922
  remainingFailedOps: failedOperations.filter((_, i) => !handled.has(i))
43711
43923
  };
43712
43924
  }
43925
+ function waitText(ms) {
43926
+ return ms >= 6e4 ? `${Math.round(ms / 6e4)} min` : `${Math.max(1, Math.round(ms / 1e3))}s`;
43927
+ }
43928
+ async function revertUnsettledFailedUpdates(deps, ctx, stackName, stateResources, failedOperations, alreadyReplayed, options) {
43929
+ const out = {
43930
+ handled: [],
43931
+ warnings: 0,
43932
+ interrupted: false
43933
+ };
43934
+ const hooks = options.hooks;
43935
+ if (hooks === void 0) return out;
43936
+ const ownMarks = (logicalId) => {
43937
+ const onRecord = unsettledPropertiesOf(stateResources[logicalId]);
43938
+ const marks = hooks.runMarks(logicalId);
43939
+ const names = new Set([...marks.names].filter((name) => onRecord.has(name)));
43940
+ return {
43941
+ names,
43942
+ items: new Map([...marks.items].filter(([path]) => names.has(unsettledItemsTopKey(path)))),
43943
+ lateSuccess: false
43944
+ };
43945
+ };
43946
+ const candidates = [];
43947
+ failedOperations.forEach((op, index) => {
43948
+ if (alreadyReplayed.has(index) || op.changeType !== "UPDATE") return;
43949
+ if (failedOpOwnRecord(op, stateResources) === void 0) return;
43950
+ const own = ownMarks(op.logicalId);
43951
+ const running = hooks.stillRunning(op.logicalId);
43952
+ if (own.names.size === 0 && running === void 0) return;
43953
+ if (classifyFailedOp(op, stateResources, [...failedOperations]) !== "revert-failed-update") return;
43954
+ candidates.push({
43955
+ index,
43956
+ op,
43957
+ own,
43958
+ running
43959
+ });
43960
+ });
43961
+ if (candidates.length === 0) return out;
43962
+ const { logger } = deps;
43963
+ const isInterrupted = () => deps.userInterrupted();
43964
+ const fallback = (names) => {
43965
+ const one = names.size === 1;
43966
+ const retry = deps.options.parentStackInfo === void 0 ? `, or revert ${one ? "it" : "them"} now with: ${pasteableCommand("cdkd rollback", [{
43967
+ value: stackName,
43968
+ hole: "stack"
43969
+ }, { literal: "--revert-failed" }]).command}` : "";
43970
+ return `cdkd keeps ${one ? "it" : "them"} unsettled: the next deploy converges ${one ? "it" : "them"}${retry}`;
43971
+ };
43972
+ const wait = deps.options.unsettledRevertWait ?? DEFAULT_UNSETTLED_REVERT_WAIT;
43973
+ const verdicts = await Promise.all(candidates.map(async (candidate) => {
43974
+ const { op } = candidate;
43975
+ let provider;
43976
+ try {
43977
+ provider = ctx.providerRegistry.getProviderFor({
43978
+ resourceType: op.resourceType,
43979
+ provisionedBy: op.provisionedBy ?? stateResources[op.logicalId].provisionedBy
43980
+ }).provider;
43981
+ } catch {
43982
+ return "error";
43983
+ }
43984
+ logger.info(safeMsg` Rollback: waiting for ${op.logicalId} (${op.resourceType}) to settle before reverting the failed update`);
43985
+ const started = Date.now();
43986
+ const identity = () => {
43987
+ const record = stateResources[op.logicalId];
43988
+ return {
43989
+ provider,
43990
+ logicalId: op.logicalId,
43991
+ physicalId: record.physicalId,
43992
+ resourceType: op.resourceType,
43993
+ recordedProperties: record.properties ?? {},
43994
+ names: candidate.own.names,
43995
+ timeoutMs: Math.max(0, wait.timeoutMs - (Date.now() - started)),
43996
+ pollMs: wait.pollMs,
43997
+ isInterrupted
43998
+ };
43999
+ };
44000
+ if (candidate.running !== void 0) {
44001
+ let succeeded = false;
44002
+ const returned = await waitForUnsettledSettled({
44003
+ ...identity(),
44004
+ names: /* @__PURE__ */ new Set(),
44005
+ running: candidate.running.then((ok) => {
44006
+ succeeded = ok;
44007
+ })
44008
+ });
44009
+ if (returned === "moving") return "call-running";
44010
+ if (returned === "interrupted") return returned;
44011
+ hooks.recordMarks(op.logicalId);
44012
+ candidate.own = {
44013
+ ...ownMarks(op.logicalId),
44014
+ lateSuccess: succeeded
44015
+ };
44016
+ if (!succeeded && candidate.own.names.size === 0) return "none";
44017
+ }
44018
+ try {
44019
+ return await waitForUnsettledSettled(identity());
44020
+ } catch {
44021
+ return "error";
44022
+ }
44023
+ }));
44024
+ const ready = [];
44025
+ candidates.forEach((candidate, k) => {
44026
+ const verdict = verdicts[k];
44027
+ if (verdict === "settled") {
44028
+ ready.push(candidate);
44029
+ return;
44030
+ }
44031
+ if (verdict === "none") return;
44032
+ if (verdict === "interrupted") {
44033
+ out.interrupted = true;
44034
+ return;
44035
+ }
44036
+ const { op } = candidate;
44037
+ const names = candidate.own.names;
44038
+ const them = names.size === 1 ? "it" : "them";
44039
+ const subject = names.size > 0 ? `the failed update left ${[...names].join(", ")} unsettled` : "the failed update may have applied part of the template";
44040
+ const why = verdict === "call-running" ? `cdkd's own update call, abandoned at the per-resource deadline, had not returned after ${waitText(wait.timeoutMs)}` : verdict === "error" ? "cdkd could not reach its provider to wait for it" : `AWS had not settled ${them} after ${waitText(wait.timeoutMs)}`;
44041
+ logger.warn(safeMsg`${op.logicalId} (${op.resourceType}): ${subject}, and ${why}, so the automatic rollback did not revert ${names.size > 0 ? them : "it"}. ${fallback(names)}`);
44042
+ out.warnings++;
44043
+ });
44044
+ if (ready.length === 0 || out.interrupted) return out;
44045
+ const ops = ready.map(({ op }) => ({ ...op }));
44046
+ const own = new Map(ready.map(({ op, own: marks }) => [op.logicalId, marks]));
44047
+ const replay = await withPrintingSecrets(replayPrintingBag(deps, ops.map((op) => ({
44048
+ ...op,
44049
+ properties: op.attemptedProperties
44050
+ })), stateResources), () => replayFailedOperations(ops, stateResources, stackName, ctx, {
44051
+ emitEnvelope: options.emitEnvelope,
44052
+ inlinePolicyWriters: options.inlinePolicyWriters,
44053
+ isInterrupted,
44054
+ previousFromRecord: own
44055
+ }));
44056
+ out.warnings += replay.warnings + replay.failures;
44057
+ if (replay.interrupted) out.interrupted = true;
44058
+ const pending = new Set(replay.remainingFailedOps);
44059
+ const skipped = new Set(replay.skippedOps ?? []);
44060
+ ops.forEach((op, k) => {
44061
+ const { index, own: marks } = ready[k];
44062
+ if (pending.has(op) || skipped.has(op)) {
44063
+ if (!replay.interrupted) logger.warn(safeMsg`${op.logicalId} (${op.resourceType}): the automatic rollback could not revert ${marks.names.size > 0 ? `what the failed update left unsettled (${[...marks.names].join(", ")})` : "the failed update"} (see above). ${fallback(marks.names)}`);
44064
+ return;
44065
+ }
44066
+ out.handled.push(index);
44067
+ hooks.onReverted(op.logicalId, marks.names);
44068
+ });
44069
+ return out;
44070
+ }
43713
44071
  function foreignHolderResolver(deps) {
43714
44072
  const sameBucketHolderFor = makeForeignHolderScan(deps.stateBackend);
43715
44073
  const crossPrefixHolder = deps.options.crossPrefixHolder;
@@ -46604,6 +46962,7 @@ async function provisionCreate(engine, logicalId, change, stateResources, stackN
46604
46962
  ...templateAttrs,
46605
46963
  provisionedBy: createDecision.provisionedBy
46606
46964
  };
46965
+ clearCreatedReport();
46607
46966
  engine.recordInlinePolicyWrite(logicalId, "create");
46608
46967
  await establishNoEchoEchoFidelity(engine.noEchoRun, engine.noEchoDeps(), logicalId, stateResources[logicalId], resolvedProps, stateResources, createSecrets);
46609
46968
  const createCaptureSiblings = await buildObservedCaptureSiblings({
@@ -47945,7 +48304,8 @@ function identityKeyOf(...lists) {
47945
48304
  return entries.some((entry) => isPlainObject(entry) && IDENTITY_KEYS.some((candidate) => typeof entry[candidate] === "string")) ? "ambiguous" : void 0;
47946
48305
  }
47947
48306
  const POSITIONAL_LIST_KEYS = /* @__PURE__ */ new Set(["KeySchema"]);
47948
- function projectNamed(live, own, wanted, path, unnamed) {
48307
+ function projectNamed(live, own, wanted, path, unnamed, attempted = /* @__PURE__ */ new Map()) {
48308
+ const attemptedAt = (at) => new Set([...attempted.get(at) ?? []].filter(isUsableAttemptedName));
47949
48309
  if (isPlainObject(live) && (isPlainObject(own) || isPlainObject(wanted))) {
47950
48310
  const ownBag = isPlainObject(own) ? own : void 0;
47951
48311
  const wantedBag = isPlainObject(wanted) ? wanted : void 0;
@@ -47956,10 +48316,12 @@ function projectNamed(live, own, wanted, path, unnamed) {
47956
48316
  if (IDENTITY_KEYS.includes(key)) continue;
47957
48317
  if (key === "Tags") {
47958
48318
  if (ownBag !== void 0 && Object.hasOwn(ownBag, "Tags")) out["Tags"] = ownBag["Tags"];
48319
+ const withAttempted = withAttemptedReplicaTags(ownBag?.["Tags"], wantedBag?.["Tags"], live["Tags"], attemptedAt(`${path}.Tags`));
48320
+ if (withAttempted !== void 0) out["Tags"] = withAttempted;
47959
48321
  continue;
47960
48322
  }
47961
48323
  if (!Object.hasOwn(live, key) || live[key] === void 0) continue;
47962
- out[key] = POSITIONAL_LIST_KEYS.has(key) ? live[key] : projectNamed(live[key], ownBag?.[key], wantedBag?.[key], `${path}.${key}`, unnamed);
48324
+ out[key] = POSITIONAL_LIST_KEYS.has(key) ? live[key] : projectNamed(live[key], ownBag?.[key], wantedBag?.[key], `${path}.${key}`, unnamed, attempted);
47963
48325
  }
47964
48326
  return out;
47965
48327
  }
@@ -47986,6 +48348,7 @@ function projectNamed(live, own, wanted, path, unnamed) {
47986
48348
  const ownEntry = ownById.get(value);
47987
48349
  const wantedEntry = wantedById.get(value);
47988
48350
  if (ownEntry === void 0 && wantedEntry === void 0) {
48351
+ if (attemptedAt(path).has(value)) return [entry];
47989
48352
  unnamed.push({
47990
48353
  identity: id,
47991
48354
  value,
@@ -47993,11 +48356,34 @@ function projectNamed(live, own, wanted, path, unnamed) {
47993
48356
  });
47994
48357
  return [];
47995
48358
  }
47996
- return [projectNamed(entry, ownEntry, wantedEntry, `${path}[${value}]`, unnamed)];
48359
+ return [projectNamed(entry, ownEntry, wantedEntry, `${path}[${value}]`, unnamed, attempted)];
47997
48360
  });
47998
48361
  }
47999
48362
  return live;
48000
48363
  }
48364
+ function withAttemptedReplicaTags(recorded, desired, live, attempted) {
48365
+ if (attempted.size === 0 || !Array.isArray(live)) return void 0;
48366
+ const keysOf = (value) => {
48367
+ if (value === void 0 || value === null) return /* @__PURE__ */ new Set();
48368
+ if (!Array.isArray(value)) return void 0;
48369
+ const keys = /* @__PURE__ */ new Set();
48370
+ for (const entry of value) {
48371
+ const key = entry?.Key;
48372
+ if (typeof key !== "string") return void 0;
48373
+ keys.add(key);
48374
+ }
48375
+ return keys;
48376
+ };
48377
+ const recordedKeys = keysOf(recorded);
48378
+ const desiredKeys = keysOf(desired);
48379
+ if (recordedKeys === void 0 || desiredKeys === void 0) return void 0;
48380
+ const removable = live.filter((entry) => {
48381
+ const key = entry?.Key;
48382
+ return typeof key === "string" && attempted.has(key) && !recordedKeys.has(key) && !desiredKeys.has(key);
48383
+ });
48384
+ if (removable.length === 0) return void 0;
48385
+ return [...recorded ?? [], ...removable];
48386
+ }
48001
48387
  const strictReadScope = new AsyncLocalStorage();
48002
48388
  function strictFor(key) {
48003
48389
  return strictReadScope.getStore()?.has(key) === true;
@@ -48008,6 +48394,12 @@ function replicaStrictness(status) {
48008
48394
  return new Set([...current].filter((key) => key !== "Replicas"));
48009
48395
  }
48010
48396
  const unsettledScope = new AsyncLocalStorage();
48397
+ const REGION_SEGMENT = /^[a-z]{2}(-[a-z]+)+-\d+$/;
48398
+ function markAttemptedItems(path, items) {
48399
+ const scope = unsettledScope.getStore();
48400
+ if (scope?.attempted === void 0 || items.length === 0) return;
48401
+ scope.attempted(path, items);
48402
+ }
48011
48403
  function markUnsettled(...keys) {
48012
48404
  const scope = unsettledScope.getStore();
48013
48405
  if (scope === void 0) return;
@@ -48276,6 +48668,7 @@ var DynamoDBGlobalTableProvider = class {
48276
48668
  let createdTableId;
48277
48669
  try {
48278
48670
  createdTableId = (await (await this.getCreateClient()).send(new CreateTableCommand(createParams)))?.TableDescription?.TableId;
48671
+ reportCreatedResource(logicalId, resourceType, tableName, createdTableId);
48279
48672
  log.debug(`CreateTable initiated for ${log.value(tableName)}, waiting for ACTIVE`);
48280
48673
  } catch (error) {
48281
48674
  const cause = error instanceof Error ? error : void 0;
@@ -48347,6 +48740,7 @@ var DynamoDBGlobalTableProvider = class {
48347
48740
  }
48348
48741
  }
48349
48742
  await this.dynamoDBClient.send(new DeleteTableCommand({ TableName: tableName }));
48743
+ retractCreatedResource(logicalId, resourceType, tableName);
48350
48744
  } catch (cleanupErr) {
48351
48745
  tableLeftBehind = true;
48352
48746
  warn(`Partial-create cleanup failed for ${tableName}: ${this.cleanupFailureText(log, `Partial-create cleanup failed for ${tableName}: `, cleanupErr)} To remove the orphaned AWS-side table, run: ` + pasteableAwsCommand(maskSecrets)`aws dynamodb delete-table --table-name ${tableName}`.render());
@@ -48394,6 +48788,7 @@ var DynamoDBGlobalTableProvider = class {
48394
48788
  TableName: tableName,
48395
48789
  ReplicaUpdates: replicaUpdates
48396
48790
  }));
48791
+ markAttemptedItems("Replicas", [region]);
48397
48792
  break;
48398
48793
  } catch (error) {
48399
48794
  if (attempt >= 3 || !isReplicaCopyExistsRefusal(error)) throw error;
@@ -49047,7 +49442,8 @@ var DynamoDBGlobalTableProvider = class {
49047
49442
  async update(logicalId, physicalId, resourceType, properties, previousProperties, context) {
49048
49443
  return unsettledScope.run({
49049
49444
  mark: (key) => context?.markUnsettled?.(key),
49050
- unsettled: context?.unsettledProperties ?? /* @__PURE__ */ new Set()
49445
+ unsettled: context?.unsettledProperties ?? /* @__PURE__ */ new Set(),
49446
+ attempted: (path, items) => context?.markAttempted?.(path, items)
49051
49447
  }, () => this.updateInScope(logicalId, physicalId, resourceType, properties, previousProperties, context));
49052
49448
  }
49053
49449
  async updateInScope(logicalId, physicalId, resourceType, properties, previousProperties, context) {
@@ -49132,7 +49528,7 @@ var DynamoDBGlobalTableProvider = class {
49132
49528
  const extractLocalTags = (props) => {
49133
49529
  return localReplicaEntry(props, currentRegion)?.["Tags"];
49134
49530
  };
49135
- if (tableArn) await this.applyTagDiff(tableArn, resourceType, logicalId, extractLocalTags(previousProperties), extractLocalTags(properties), maskSecrets);
49531
+ if (tableArn) await this.applyTagDiff(tableArn, resourceType, logicalId, extractLocalTags(previousProperties), extractLocalTags(properties), maskSecrets, currentRegion);
49136
49532
  const liveWarmByIndexName = /* @__PURE__ */ new Map();
49137
49533
  for (const liveGsi of describeResp.Table?.GlobalSecondaryIndexes ?? []) {
49138
49534
  const name = liveGsi.IndexName;
@@ -49506,6 +49902,7 @@ var DynamoDBGlobalTableProvider = class {
49506
49902
  AttributeDefinitions: newAttrs,
49507
49903
  GlobalSecondaryIndexUpdates: [gsiUpdate]
49508
49904
  }));
49905
+ markAttemptedItems("GlobalSecondaryIndexes", [gsi.IndexName]);
49509
49906
  await this.waitForTableActiveAfterUpdate(physicalId, logicalId, void 0, void 0, maskSecrets);
49510
49907
  }
49511
49908
  for (const gsi of gsiDiff.modified) {
@@ -49625,8 +50022,8 @@ var DynamoDBGlobalTableProvider = class {
49625
50022
  throw this.wrapMaskedError(log, error, (text) => new ProvisioningError(`Failed to update DynamoDB GlobalTable ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
49626
50023
  }
49627
50024
  }
49628
- async applyTagDiff(tableArn, resourceType, logicalId, oldTagsRaw, newTagsRaw, maskSecrets) {
49629
- await this.applyTagDiffOnClient(this.dynamoDBClient, tableArn, resourceType, logicalId, oldTagsRaw, newTagsRaw, maskSecrets);
50025
+ async applyTagDiff(tableArn, resourceType, logicalId, oldTagsRaw, newTagsRaw, maskSecrets, region) {
50026
+ await this.applyTagDiffOnClient(this.dynamoDBClient, tableArn, resourceType, logicalId, oldTagsRaw, newTagsRaw, maskSecrets, region);
49630
50027
  }
49631
50028
  async applyCrossRegionReplicaTagsDiff(tableArn, region, oldTags, newTags, resourceType, logicalId, physicalIdForLogs, maskSecrets = (text) => text) {
49632
50029
  const warn = (message) => this.logger.warn(maskSecrets(message));
@@ -49642,12 +50039,12 @@ var DynamoDBGlobalTableProvider = class {
49642
50039
  }
49643
50040
  try {
49644
50041
  const regionalClient = this.getRegionalClient(region);
49645
- await this.applyTagDiffOnClient(regionalClient, replicaArn, resourceType, `${logicalId} (replica ${region})`, oldTags, newTags, maskSecrets);
50042
+ await this.applyTagDiffOnClient(regionalClient, replicaArn, resourceType, `${logicalId} (replica ${region})`, oldTags, newTags, maskSecrets, region);
49646
50043
  } catch (tagErr) {
49647
50044
  warn(`Could not apply Tags diff to cross-region replica ${region} of ${physicalIdForLogs}: ${describeAwsFailure(tagErr).detail}. The replica's Tags state will surface as drift until the next successful deploy.`);
49648
50045
  }
49649
50046
  }
49650
- async applyTagDiffOnClient(client, tableArn, resourceType, id, oldTagsRaw, newTagsRaw, maskSecrets = (text) => text) {
50047
+ async applyTagDiffOnClient(client, tableArn, resourceType, id, oldTagsRaw, newTagsRaw, maskSecrets = (text) => text, region) {
49651
50048
  const plan = planTagDiff(oldTagsRaw, newTagsRaw);
49652
50049
  const tagWarning = tagPlanWarning(plan, resourceType, id);
49653
50050
  if (tagWarning !== void 0) this.logger.warn(maskSecrets(tagWarning));
@@ -49669,6 +50066,15 @@ var DynamoDBGlobalTableProvider = class {
49669
50066
  ResourceArn: tableArn,
49670
50067
  Tags: tagsToAdd
49671
50068
  }));
50069
+ if (region !== void 0 && REGION_SEGMENT.test(region)) {
50070
+ let recordedKeys;
50071
+ try {
50072
+ recordedKeys = /* @__PURE__ */ new Set([...planTagDiff(void 0, oldTagsRaw).set.keys()]);
50073
+ } catch {
50074
+ recordedKeys = void 0;
50075
+ }
50076
+ if (recordedKeys !== void 0) markAttemptedItems(`Replicas[${region}].Tags`, tagsToAdd.map((t) => t.Key).filter((key) => !recordedKeys.has(key)));
50077
+ }
49672
50078
  this.logger.debug(maskSecrets(`Added/updated ${tagsToAdd.length} tag(s) on DynamoDB GlobalTable ${tableArn}`));
49673
50079
  }
49674
50080
  }
@@ -50088,7 +50494,7 @@ var DynamoDBGlobalTableProvider = class {
50088
50494
  throw err;
50089
50495
  }
50090
50496
  }
50091
- async readUnsettled(physicalId, logicalId, resourceType, names, recordedProperties, desiredProperties) {
50497
+ async readUnsettled(physicalId, logicalId, resourceType, names, recordedProperties, desiredProperties, attemptedItems) {
50092
50498
  const live = await strictReadScope.run(names, () => this.readCurrentState(physicalId, logicalId, resourceType, recordedProperties));
50093
50499
  if (typeof live !== "object" || live === null) return live;
50094
50500
  const out = { ...live };
@@ -50096,7 +50502,7 @@ var DynamoDBGlobalTableProvider = class {
50096
50502
  const unnamed = [];
50097
50503
  for (const name of names) {
50098
50504
  if (!Object.hasOwn(out, name)) continue;
50099
- out[name] = projectNamed(out[name], recordedProperties?.[name], desiredProperties?.[name], name, unnamed);
50505
+ out[name] = projectNamed(out[name], recordedProperties?.[name], desiredProperties?.[name], name, unnamed, attemptedItems);
50100
50506
  }
50101
50507
  for (const entry of unnamed.filter((e) => e.ambiguous === true)) this.logger.warn(safeMsg`${logicalId} (${resourceType}): ${entry.path} on AWS has entries cdkd cannot key by an identity, so convergence keeps the recorded ${entry.path} rather than risk removing an entry neither the record nor the template declares. Check it with 'cdkd drift'.`);
50102
50508
  for (const entry of unnamed.filter((e) => e.ambiguous !== true)) this.logger.warn(safeMsg`${logicalId} (${resourceType}): ${entry.path} on AWS holds ${entry.identity} ${entry.value}, which neither the record nor the template declares, so cdkd leaves it in place. If the failed update added it and it should not be there, remove it by hand (for a replica: aws dynamodb update-table --replica-updates Delete; for an index: --global-secondary-index-updates Delete).`);
@@ -51801,6 +52207,7 @@ async function updateByReplacement(engine, { change, counts, currentProps, curre
51801
52207
  ...extractTemplateAttributes(template, logicalId),
51802
52208
  provisionedBy: replaceDecision.provisionedBy
51803
52209
  };
52210
+ clearCreatedReport();
51804
52211
  engine.recordInlinePolicyWrite(logicalId, "create");
51805
52212
  await establishNoEchoEchoFidelity(engine.noEchoRun, engine.noEchoDeps(), logicalId, stateResources[logicalId], resolvedProps, stateResources, updateSecrets);
51806
52213
  engine.observedCapture.kickOffObservedCapture(replaceProvider, logicalId, createResult.physicalId, resourceType, resolvedProps, { afterOwnWrite: true }, updateSecrets);
@@ -51878,6 +52285,7 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
51878
52285
  const changedForProvider = new Set(changedProperties);
51879
52286
  for (const key of /* @__PURE__ */ new Set([...Object.keys(previousWithNoEchoHeld), ...Object.keys(previousForUpdate)])) if (keyOrderFreeJson(previousForUpdate[key]) !== keyOrderFreeJson(previousWithNoEchoHeld[key])) changedForProvider.add(key);
51880
52287
  const unsettled = unsettledPropertiesOf(currentResource);
52288
+ const unsettledItems = unsettledItemsOf(currentResource);
51881
52289
  if (changedForProvider.size === 0) for (const key of /* @__PURE__ */ new Set([...Object.keys(updateProps), ...Object.keys(previousForUpdate)])) changedForProvider.add(key);
51882
52290
  if (reattached !== void 0) engine.logger.info(safeMsg` ${logicalId} (${resourceType}) lost its attachment to ${reattached.parents.join(", ")}, which this deploy re-created under the same name: attaching it again`);
51883
52291
  if (droppedPrincipalKinds.length > 0) {
@@ -51895,7 +52303,8 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
51895
52303
  ...unsettledIdentity,
51896
52304
  names: unsettled,
51897
52305
  previous: previousForUpdate,
51898
- desired: updateProps
52306
+ desired: updateProps,
52307
+ attemptedItems: unsettledItems
51899
52308
  });
51900
52309
  if (unsettled.has("Tags")) engine.logger.warn(safeMsg`${logicalId} (${resourceType}): an earlier failed update left Tags unsettled. cdkd re-applies the template's tags and removes only the recorded ones the template dropped; a tag that failed update added and no template declares is left on the resource. Remove it by hand if it should not be there.`);
51901
52310
  const removal = prepareRemovalForUpdate(updateProvider, resourceType, updateProps, previousSettled);
@@ -51925,10 +52334,23 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
51925
52334
  }
51926
52335
  marks.add(propertyName);
51927
52336
  },
51928
- ...unsettled.size > 0 && { unsettledProperties: unsettled }
52337
+ markAttempted: (path, items) => {
52338
+ if (typeof path !== "string" || path === "") return;
52339
+ let byPath = engine.unsettledItemMarks.get(logicalId);
52340
+ if (byPath === void 0) {
52341
+ byPath = /* @__PURE__ */ new Map();
52342
+ engine.unsettledItemMarks.set(logicalId, byPath);
52343
+ }
52344
+ const names = byPath.get(path) ?? /* @__PURE__ */ new Set();
52345
+ for (const item of items) if (typeof item === "string" && item !== "") names.add(item);
52346
+ byPath.set(path, names);
52347
+ },
52348
+ ...unsettled.size > 0 && { unsettledProperties: unsettled },
52349
+ ...unsettledItems.size > 0 && { unsettledItems }
51929
52350
  })), logicalId, void 0, void 0, updateProvider);
51930
52351
  if (result.sentNothing === true) engine.replacementRun.updatesThatSentNothing.add(logicalId);
51931
52352
  engine.unsettledMarks.delete(logicalId);
52353
+ engine.unsettledItemMarks.delete(logicalId);
51932
52354
  if (result.wasReplaced === true && result.outcome === "partial") engine.replacementRun.replacedOldMaySurvive.set(logicalId, result.oldResourceSurvivor === "kept" ? "kept" : "unconfirmed");
51933
52355
  result = withoutInjectedRemovals(result, removal.injected);
51934
52356
  const unhandledByCause = splitUnhandledRemovals(removal.unhandled, previousForUpdate, unsettled);
@@ -52114,6 +52536,7 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
52114
52536
  generation: fallbackGeneration
52115
52537
  }, replaceFallback));
52116
52538
  engine.unsettledMarks.delete(logicalId);
52539
+ engine.unsettledItemMarks.delete(logicalId);
52117
52540
  result = fallbackOutcome.result;
52118
52541
  resultProvisionedBy = fallbackOutcome.provisionedBy;
52119
52542
  captureProvider = fallbackOutcome.captureProvider;
@@ -52137,7 +52560,8 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
52137
52560
  const stillUnsettled = result.wasReplaced ? [] : await unsettledAfterUpdate({
52138
52561
  ...unsettledIdentity,
52139
52562
  names: unsettled,
52140
- desired: updateProps
52563
+ desired: updateProps,
52564
+ attemptedItems: unsettledItems
52141
52565
  });
52142
52566
  if (stillUnsettled.length > 0) engine.logger.warn(safeMsg`${logicalId} (${resourceType}): the update succeeded, but AWS does not yet show the template's ${stillUnsettled.join(", ")}; cdkd keeps ${stillUnsettled.length === 1 ? "it" : "them"} unsettled and converges again on the next deploy.`);
52143
52567
  engine.replacementRun.updateWasReplaced.set(logicalId, result.wasReplaced === true);
@@ -52176,12 +52600,16 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
52176
52600
  ...dependencies && dependencies.length > 0 && { dependencies },
52177
52601
  ...extractTemplateAttributes(template, logicalId),
52178
52602
  provisionedBy: resultProvisionedBy,
52179
- ...stillUnsettled.length > 0 && { unsettledProperties: stillUnsettled },
52603
+ ...stillUnsettled.length > 0 && {
52604
+ unsettledProperties: stillUnsettled,
52605
+ ...unsettledItemsField(currentResource, stillUnsettled)
52606
+ },
52180
52607
  ...keepsParameterRefusal && {
52181
52608
  observedBaselineRefused: true,
52182
52609
  observedBaselineRefusalReason: "unverifiable-parameter"
52183
52610
  }
52184
52611
  };
52612
+ clearCreatedReport();
52185
52613
  if (updatePartialReason(result) === void 0) engine.recordInlinePolicyWrite(logicalId, "update");
52186
52614
  if (keepsParameterRefusal) engine.logger.debug(safeMsg`observedProperties capture SKIPPED for updated ${logicalId} (${resourceType}): 'cdkd import' refused its baseline because a template parameter was not provably deployed at its 'Default', and this deploy bound the same 'Default' — an in-place update cannot show that AWS no longer holds the deployed value. The refusal stands until the resource is replaced or re-imported against a CloudFormation stack that proves the parameter.`);
52187
52615
  const updateCaptureSiblings = keepsParameterRefusal ? void 0 : await buildObservedCaptureSiblings({
@@ -53038,7 +53466,7 @@ async function provisionResource(engine, logicalId, change, stateResources, stac
53038
53466
  let nestedChildUnaddressed;
53039
53467
  const deleteGuards = [];
53040
53468
  try {
53041
- await withPrintingSecrets(printingRegistry, () => withResourceDeadline(async () => {
53469
+ await withPrintingSecrets(printingRegistry, () => withResourceDeadline(trackInFlightBody(engine, logicalId, async () => {
53042
53470
  try {
53043
53471
  const { value: bodyResult, unaddressed } = await collectDeleteGuards(deleteGuards, () => collectNestedChildUnaddressed(() => provisionResourceBody(engine, logicalId, change, stateResources, stackName, template, parameterValues, conditions, counts, progress)));
53044
53472
  deleteSkipped = bodyResult?.deleteSkipped;
@@ -53070,7 +53498,7 @@ async function provisionResource(engine, logicalId, change, stateResources, stac
53070
53498
  reason: guard.reason
53071
53499
  });
53072
53500
  }
53073
- }, {
53501
+ }), {
53074
53502
  warnAfterMs,
53075
53503
  timeoutMs,
53076
53504
  onWarn: (elapsedMs) => {
@@ -53148,6 +53576,17 @@ async function provisionResource(engine, logicalId, change, stateResources, stac
53148
53576
  renderer.removeTask(logicalId);
53149
53577
  }
53150
53578
  }
53579
+ function trackInFlightBody(engine, logicalId, body) {
53580
+ return () => {
53581
+ const running = body();
53582
+ const entry = running.then(() => true, () => false);
53583
+ engine.inFlightBodies.set(logicalId, entry);
53584
+ entry.then(() => {
53585
+ if (engine.inFlightBodies.get(logicalId) === entry) engine.inFlightBodies.delete(logicalId);
53586
+ });
53587
+ return running;
53588
+ };
53589
+ }
53151
53590
  async function provisionResourceBody(engine, logicalId, change, stateResources, stackName, template, parameterValues, conditions, counts, progress) {
53152
53591
  const loadJournal = () => engine.stateBackend.loadRollbackJournal(stackName, engine.stackRegion);
53153
53592
  const priorAttempts = priorAttemptLookup(logicalId, async () => priorAttemptsInJournal(await loadJournal(), logicalId, change.resourceType), async () => provenOrphanIdsInJournal(await loadJournal(), logicalId, change.resourceType));
@@ -53183,6 +53622,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53183
53622
  };
53184
53623
  const completedOperations = [];
53185
53624
  const failedOperations = [];
53625
+ const reportedCreatesToSettle = [];
53186
53626
  let pendingMigration = migrationPending;
53187
53627
  const phaseScope = phaseScopeForStack(stackName, engine.stackRegion);
53188
53628
  let saveChain = Promise.resolve();
@@ -53200,7 +53640,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53200
53640
  const savedFor = savedIds.join(", ");
53201
53641
  try {
53202
53642
  const partialState = {
53203
- version: 14,
53643
+ version: 15,
53204
53644
  region: engine.stackRegion,
53205
53645
  stackName: currentState.stackName,
53206
53646
  resources: newResources,
@@ -53317,9 +53757,10 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53317
53757
  settle
53318
53758
  });
53319
53759
  let succeeded = false;
53760
+ const createdSink = new CreatedResourceSink(logicalId, change.resourceType);
53320
53761
  try {
53321
53762
  try {
53322
- await timePhase(phaseScope, `resource ${change.changeType.toLowerCase()}`, () => provisionResource(engine, logicalId, change, newResources, stackName, template, parameterValues, conditions, actualCounts, progress), `${logicalId} ${change.resourceType}`);
53763
+ await timePhase(phaseScope, `resource ${change.changeType.toLowerCase()}`, () => collectCreatedResources(createdSink, () => provisionResource(engine, logicalId, change, newResources, stackName, template, parameterValues, conditions, actualCounts, progress)), `${logicalId} ${change.resourceType}`);
53323
53764
  settledUpdates.add(logicalId);
53324
53765
  succeeded = true;
53325
53766
  } finally {
@@ -53334,10 +53775,11 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53334
53775
  const attemptedGeneration = change.changeType === "UPDATE" && !refused && !isReplacementNameRefusal(provisionError, logicalId) ? engine.replacementRun.attemptedNameGeneration.get(logicalId) : void 0;
53335
53776
  const statePhysicalId = newResources[logicalId]?.physicalId ?? previousState?.physicalId;
53336
53777
  if (refused && change.changeType === "CREATE" && statePhysicalId === void 0) throw provisionError;
53337
- const createdId = change.changeType === "CREATE" && statePhysicalId === void 0 ? createdBeforeFailure(provisionError, logicalId, change.resourceType) : void 0;
53778
+ const markedCreatedId = createdBeforeFailure(provisionError, logicalId, change.resourceType);
53779
+ const createdId = change.changeType === "CREATE" && statePhysicalId === void 0 ? markedCreatedId : void 0;
53338
53780
  const heldRecord = newResources[logicalId] ?? previousState;
53339
53781
  const replaced = change.changeType === "UPDATE" && !NO_REPLACEMENT_ORPHAN_TYPES.has(change.resourceType) && statePhysicalId !== void 0 && statePhysicalId !== "" && heldRecord?.physicalId === statePhysicalId ? heldRecord : void 0;
53340
- const replacementCreatedId = replaced ? createdBeforeFailure(provisionError, logicalId, change.resourceType) : void 0;
53782
+ const replacementCreatedId = replaced ? markedCreatedId : void 0;
53341
53783
  const orphanedBy = replaced !== void 0 && replacementCreatedId !== void 0 && replacementCreatedId !== replaced.physicalId ? {
53342
53784
  record: replaced,
53343
53785
  createdId: replacementCreatedId
@@ -53373,34 +53815,17 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53373
53815
  if (attemptedGeneration !== void 0 && heldNow !== void 0) newResources[logicalId] = withNameGenerationReached(heldNow, logicalId, attemptedGeneration);
53374
53816
  let replacementOrphanOp;
53375
53817
  if (orphanedBy !== void 0) {
53376
- replacementOrphanOp = {
53377
- logicalId,
53378
- changeType: "CREATE",
53379
- resourceType: change.resourceType,
53380
- provisionedBy: "sdk",
53381
- physicalId: orphanedBy.createdId,
53382
- physicalIdRecoveredFromError: true,
53383
- deletionPolicy: journaledOrphanPolicy(extractTemplateAttributes(template, logicalId).deletionPolicy),
53384
- replacedPhysicalId: orphanedBy.record.physicalId,
53385
- replacedResourceType: orphanedBy.record.resourceType,
53386
- ...engine.replacementRun.oldDeletedBeforeCreate.has(logicalId) && { replacedResourceDeleted: true },
53387
- ...!refused && { attemptedProperties: engine.attemptedResolvedProps.get(logicalId) }
53388
- };
53818
+ replacementOrphanOp = replacementOrphanOpFor(engine, template, logicalId, change.resourceType, orphanedBy.record, orphanedBy.createdId, refused);
53389
53819
  failedOperations.push(replacementOrphanOp);
53390
53820
  }
53821
+ if (markedCreatedId === void 0 && (change.changeType === "CREATE" && statePhysicalId === void 0 || replaced !== void 0) && deadlineFiredFor(provisionError, logicalId)) reportedCreatesToSettle.push({
53822
+ sink: createdSink,
53823
+ failedOp,
53824
+ ...replaced !== void 0 && { replaced },
53825
+ refused
53826
+ });
53391
53827
  const orphanOp = createdId !== void 0 ? failedOp : replacementOrphanOp;
53392
- if (orphanOp?.physicalId !== void 0 && orphanOp.deletionPolicy !== "Retain" && orphanNeedsIdentity(orphanOp)) {
53393
- const markedIdentity = createdResourceIdentityBeforeFailure(provisionError, logicalId, change.resourceType);
53394
- if (markedIdentity !== void 0) orphanOp.createdResourceIdentity = markedIdentity;
53395
- else if (engine.interruptCause !== "user") {
53396
- const identity = await readResourceIdentity(engine.providerRegistry, {
53397
- resourceType: orphanOp.resourceType,
53398
- physicalId: orphanOp.physicalId,
53399
- provisionedBy: orphanOp.provisionedBy
53400
- }, engine.stackRegion);
53401
- if (typeof identity === "string") orphanOp.createdResourceIdentity = identity;
53402
- }
53403
- }
53828
+ if (orphanOp !== void 0) await journalOrphanIdentity(engine, orphanOp, createdResourceIdentityBeforeFailure(provisionError, logicalId, change.resourceType));
53404
53829
  throw provisionError;
53405
53830
  }
53406
53831
  completedOperations.push({
@@ -53551,9 +53976,10 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53551
53976
  engine.logger.warn(safeMsg` ⚠ ${lost.logicalId} (${childType}) was removed from a resource this deploy re-created under the same id, and the deploy failed before writing it again: the next deploy writes it there again (its record keeps only the holders it is still on).`.concat(mayStillBeLive));
53552
53977
  }
53553
53978
  }
53979
+ await settleReportedCreates(engine, template, failedOperations, reportedCreatesToSettle);
53554
53980
  try {
53555
53981
  const preRollbackState = {
53556
- version: 14,
53982
+ version: 15,
53557
53983
  region: engine.stackRegion,
53558
53984
  stackName: currentState.stackName,
53559
53985
  resources: newResources,
@@ -53594,7 +54020,15 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53594
54020
  engine.logger.warn(safeMsg`Partial state has been saved. ${recoveryHint(engine.rollbackDeps(), "Run 'cdkd deploy' to resume, 'cdkd rollback' to revert, or destroy to clean up.")}`);
53595
54021
  } else {
53596
54022
  autoRollbackJournaled = await writeRollbackJournalSegment(engine.rollbackDeps(), stackName, completedOperations, failedOperations, "auto-rollback-started", initialDeploy);
53597
- const rollbackResult = await performRollback(engine.rollbackDeps(), completedOperations, newResources, stackName, currentState, failedOperations, currentState.orphans ?? []);
54023
+ const rollbackResult = await performRollback(engine.rollbackDeps(), completedOperations, newResources, stackName, currentState, failedOperations, currentState.orphans ?? [], {
54024
+ runMarks: (logicalId) => ({
54025
+ names: engine.unsettledMarks.get(logicalId) ?? /* @__PURE__ */ new Set(),
54026
+ items: engine.unsettledItemMarks.get(logicalId) ?? /* @__PURE__ */ new Map()
54027
+ }),
54028
+ stillRunning: (logicalId) => engine.inFlightBodies.get(logicalId),
54029
+ recordMarks: (logicalId) => recordUnsettledMarks(engine, newResources, logicalId),
54030
+ onReverted: (logicalId, settled) => dropUnsettledMarks(engine, logicalId, settled)
54031
+ });
53598
54032
  autoRollbackClean = autoRollbackJournaled && rollbackResult.failures === 0 && rollbackResult.skipped === 0 && !rollbackResult.interrupted;
53599
54033
  if (rollbackResult.interrupted && rollbackResult.failures === 0 && rollbackResult.skipped === 0) {
53600
54034
  const remedy = autoRollbackJournaled ? recoveryHint(engine.rollbackDeps(), "The rollback journal keeps them; finish the rollback with: " + pasteableCommand("cdkd rollback", [{
@@ -53619,7 +54053,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53619
54053
  recordUnsettledMarks(engine, newResources);
53620
54054
  try {
53621
54055
  const postRollbackState = {
53622
- version: 14,
54056
+ version: 15,
53623
54057
  region: engine.stackRegion,
53624
54058
  stackName: currentState.stackName,
53625
54059
  resources: newResources,
@@ -53642,7 +54076,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53642
54076
  const freshEtag = (await engine.stateBackend.getState(stackName, engine.stackRegion))?.etag;
53643
54077
  recordUnsettledMarks(engine, newResources);
53644
54078
  const postRollbackState = {
53645
- version: 14,
54079
+ version: 15,
53646
54080
  region: engine.stackRegion,
53647
54081
  stackName: currentState.stackName,
53648
54082
  resources: newResources,
@@ -53679,7 +54113,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53679
54113
  }
53680
54114
  return {
53681
54115
  state: {
53682
- version: 14,
54116
+ version: 15,
53683
54117
  region: engine.stackRegion,
53684
54118
  stackName: currentState.stackName,
53685
54119
  resources: newResources,
@@ -53698,7 +54132,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53698
54132
  }
53699
54133
  async function persistStateAfterOutputFailure(engine, stackName, currentState, newResources, currentEtag, pendingMigration) {
53700
54134
  const buildState = () => ({
53701
- version: 14,
54135
+ version: 15,
53702
54136
  region: engine.stackRegion,
53703
54137
  stackName: currentState.stackName,
53704
54138
  resources: newResources,
@@ -53737,6 +54171,73 @@ function recordUnsettledMarks(engine, newResources, only) {
53737
54171
  if (only !== void 0 && logicalId !== only) continue;
53738
54172
  if (marks.size === 0 || !Object.hasOwn(newResources, logicalId)) continue;
53739
54173
  newResources[logicalId] = withUnsettledProperties(newResources[logicalId], marks);
54174
+ const items = engine.unsettledItemMarks.get(logicalId);
54175
+ if (items !== void 0 && items.size > 0) newResources[logicalId] = withUnsettledItems(newResources[logicalId], items);
54176
+ }
54177
+ }
54178
+ function dropUnsettledMarks(engine, logicalId, names) {
54179
+ const marks = engine.unsettledMarks.get(logicalId);
54180
+ if (marks !== void 0) for (const name of names) marks.delete(name);
54181
+ const items = engine.unsettledItemMarks.get(logicalId);
54182
+ if (items !== void 0) {
54183
+ for (const path of [...items.keys()]) if (names.has(unsettledItemsTopKey(path))) items.delete(path);
54184
+ }
54185
+ }
54186
+ function deadlineFiredFor(error, logicalId) {
54187
+ try {
54188
+ let current = error;
54189
+ for (let depth = 0; depth < 5 && typeof current === "object" && current !== null; depth++) {
54190
+ if (current instanceof ResourceTimeoutError) return current.logicalId === logicalId;
54191
+ current = current.cause;
54192
+ }
54193
+ } catch {}
54194
+ return false;
54195
+ }
54196
+ async function settleReportedCreates(engine, template, failedOperations, pending) {
54197
+ for (const { sink, failedOp, replaced, refused } of pending) {
54198
+ const report = sink.report;
54199
+ if (report === void 0) continue;
54200
+ let orphanOp;
54201
+ if (replaced === void 0) {
54202
+ failedOp.provisionedBy = "sdk";
54203
+ failedOp.physicalId = report.physicalId;
54204
+ failedOp.physicalIdRecoveredFromError = true;
54205
+ failedOp.deletionPolicy = journaledOrphanPolicy(extractTemplateAttributes(template, failedOp.logicalId).deletionPolicy);
54206
+ orphanOp = failedOp;
54207
+ } else {
54208
+ if (report.physicalId === replaced.physicalId) continue;
54209
+ failedOp.replacementOrphaned = engine.replacementRun.oldDeletedBeforeCreate.has(failedOp.logicalId) ? "delete-first" : "create-first";
54210
+ orphanOp = replacementOrphanOpFor(engine, template, failedOp.logicalId, failedOp.resourceType, replaced, report.physicalId, refused);
54211
+ failedOperations.push(orphanOp);
54212
+ }
54213
+ await journalOrphanIdentity(engine, orphanOp, report.createdResourceIdentity);
54214
+ }
54215
+ }
54216
+ function replacementOrphanOpFor(engine, template, logicalId, resourceType, record, createdId, refused) {
54217
+ return {
54218
+ logicalId,
54219
+ changeType: "CREATE",
54220
+ resourceType,
54221
+ provisionedBy: "sdk",
54222
+ physicalId: createdId,
54223
+ physicalIdRecoveredFromError: true,
54224
+ deletionPolicy: journaledOrphanPolicy(extractTemplateAttributes(template, logicalId).deletionPolicy),
54225
+ replacedPhysicalId: record.physicalId,
54226
+ replacedResourceType: record.resourceType,
54227
+ ...engine.replacementRun.oldDeletedBeforeCreate.has(logicalId) && { replacedResourceDeleted: true },
54228
+ ...!refused && { attemptedProperties: engine.attemptedResolvedProps.get(logicalId) }
54229
+ };
54230
+ }
54231
+ async function journalOrphanIdentity(engine, orphanOp, carried) {
54232
+ if (orphanOp.physicalId === void 0 || orphanOp.deletionPolicy === "Retain" || !orphanNeedsIdentity(orphanOp)) return;
54233
+ if (carried !== void 0) orphanOp.createdResourceIdentity = carried;
54234
+ else if (engine.interruptCause !== "user") {
54235
+ const identity = await readResourceIdentity(engine.providerRegistry, {
54236
+ resourceType: orphanOp.resourceType,
54237
+ physicalId: orphanOp.physicalId,
54238
+ provisionedBy: orphanOp.provisionedBy
54239
+ }, engine.stackRegion);
54240
+ if (typeof identity === "string") orphanOp.createdResourceIdentity = identity;
53740
54241
  }
53741
54242
  }
53742
54243
 
@@ -53780,7 +54281,7 @@ async function doDeployWithPrefetch(engine, stackName, template, createOnlyPrefe
53780
54281
  clock.lap("state load");
53781
54282
  noteDeployStateRecord(currentStateData?.state !== void 0);
53782
54283
  const currentState = currentStateData?.state ?? {
53783
- version: 14,
54284
+ version: 15,
53784
54285
  region: engine.stackRegion,
53785
54286
  stackName,
53786
54287
  resources: {},
@@ -54083,7 +54584,7 @@ async function doDeployWithPrefetch(engine, stackName, template, createOnlyPrefe
54083
54584
  await resolveStackInstanceId();
54084
54585
  try {
54085
54586
  const refreshedState = {
54086
- version: 14,
54587
+ version: 15,
54087
54588
  region: engine.stackRegion,
54088
54589
  stackName: currentState.stackName,
54089
54590
  resources: currentState.resources,
@@ -54372,6 +54873,8 @@ var DeployEngine = class {
54372
54873
  outputsRun = new OutputsRunState();
54373
54874
  attemptedResolvedProps = /* @__PURE__ */ new Map();
54374
54875
  unsettledMarks = /* @__PURE__ */ new Map();
54876
+ unsettledItemMarks = /* @__PURE__ */ new Map();
54877
+ inFlightBodies = /* @__PURE__ */ new Map();
54375
54878
  resumedCreates = /* @__PURE__ */ new Map();
54376
54879
  generatedNameGuard;
54377
54880
  liveTaskLabels = /* @__PURE__ */ new Map();
@@ -54565,6 +55068,7 @@ var DeployEngine = class {
54565
55068
  this.replacementRun = new ReplacementRunState();
54566
55069
  this.attemptedResolvedProps = /* @__PURE__ */ new Map();
54567
55070
  this.unsettledMarks = /* @__PURE__ */ new Map();
55071
+ this.unsettledItemMarks = /* @__PURE__ */ new Map();
54568
55072
  this.resumedCreates = /* @__PURE__ */ new Map();
54569
55073
  this.generatedNameGuard = void 0;
54570
55074
  this.liveTaskLabels = /* @__PURE__ */ new Map();
@@ -54769,5 +55273,5 @@ function sameGenerationClaimsOf(record) {
54769
55273
  }
54770
55274
 
54771
55275
  //#endregion
54772
- export { computeImplicitDeleteEdges as $, coerceParameterTypedValue as $a, DYNAMIC_REFERENCE_TOKEN_SCAN as $c, applyCustomResourceResponseExpiration as $i, stringifyValue as $l, WITHHELD_NAME_DISPLAY as $n, refuseMalformedOrphanRecords as $o, noEchoExactEchoLeavesOf as $r, readConfigString as $s, lookupEachName as $t, MIGRATE_TMP_PREFIX as $u, beginDeleteWait as A, s3BucketRegionalDomainName as Aa, valueAtCoordinate as Ac, isRefusedByName as Ai, isAccessDenied$1 as Al, resolveReplacementOldType as An, isReadableResourceEntry as Ao, awaitInFlightSibling as Ar, withheldAccountClause as As, displacedOpClause as At, redactedDockerCause as Au, waitForIndexesSettled as B, assertFlagRoleArn as Ba, logOnlyValueCount as Bc, stringifyIfAssigned as Bi, hasUnverifiableParameterRefusal as Bl, updatePartialMessage as Bn, malformedOrphansRefusalMessage as Bo, yellow as Br, isStatefulRecreateTargetForReplace as Bs, getCurrentNestedStackContext as Bt, loadCdkJson as Bu, planContributorInsightsOp as C, withoutUnsettledProperties as Ca, noEchoCoordinatesOf as Cc, resolveAssemblyPath as Cd, ledgerForStack as Ci, isLockInfoExpired as Cl, isJournaledOrphan as Cn, accountArgs as Co, rollbackOrphanIds as Cr, repairMalformedOutputsForReadOnly as Cs, makeSiblingClaimReader as Ct, formatDockerLoginError as Cu, reverseMapTableContributorInsights as D, s3BucketArn as Da, readbackPathFor as Dc, resolveBucketRegion as Dd, DeploymentEventsReader as Di, CrossPrefixScanCache as Dl, recheckFailedPlan as Dn, hasReadableOutputs as Do, mappingPairs as Dr, unpreviewableOrphanRecords as Ds, keptForRetainedRecord as Dt, partitionSensitiveEnv as Du, reverseMapIndexContributorInsights as E, isSettledInstanceState as Ea, passedNoEchoParametersOf as Ec, clearBucketRegionCache as Ed, acquireIdempotencyToken as Ei, CrossPrefixReadError as El, planRollback as En, hasReadableOrphans as Eo, looselyEqual as Er, repairMalformedResourcesForReadOnly as Es, resolvePendingCloudControlRequests as Et, isMalformedEnvKey as Eu, DELETE_INDEX_WAIT_PROCEED_NOTE as F, keepHeldTokenProvenance as Fa, snapshotPassProvenance as Fc, readTagList as Fi, acceptedCreateOnlyDropsOf as Fl, inheritProducerRegions as Fn, malformedLocalResourceEntriesWarning as Fo, bold as Fr, NO_CC_HANDLERS_REASON as Fs, recordDisplacedSkips as Ft, getDockerImageBySourceHash as Fu, sendTtlWaitingOutRateLimit as G, AWS_CREDENTIAL_ENV_KEYS as Ga, unionOfSecretBags as Gc, wouldReturnToSdkProvider as Gi, orphansCarriedFrom as Gl, retiredAfterRollback as Gn, malformedResourceEntriesWarning as Go, removeSuperseded as Gr, isWarmThroughputDecrease as Gs, isHandledOrphan as Gt, resolveStateBucketWithDefault as Gu, isTtlRateLimited as H, explicitRoleArnOrThrow as Ha, recordLogOnlyParameterValue as Hc, ProviderRegistry as Hi, importableOutputs as Hl, nameGenerationCarriedFrom as Hn, malformedOutputsRefusalMessage as Ho, deleteSupersededEntry as Hr, renderStatefulReason as Hs, deleteJournaledOrphans as Ht, resolveAutoAssetStorage as Hu, INDEX_SETTLE_POLL_INTERVAL_MS as I, outputReferenceProvenanceOf as Ia, carryLogOnlyValues as Ic, refuseMalformedDesiredTags as Ii, describeRegionValueKind as Il, REDACTED_DELETE_ADDRESS_SKIP_REASON as In, malformedLocalResourcesWarning as Io, cyan as Ir, hasNoCloudControlHandlers as Is, revertNestedChildFromJournal as It, Synthesizer as Iu, hasCdkAutoDeleteTag as J, envCredentialsAreAssumedRole as Ja, maskSecretsInError as Jc, readsNoEchoDeleteValues as Ji, PhaseClock as Jl, withNameGenerationReached as Jn, malformedScrubResourceEntriesRefusalMessage as Jo, supersededHolderOf as Jr, coerceCfnBoolean as Js, makeForeignHolderScan as Jt, stateBucketExistenceConfirmed as Ju, ECR_AUTO_DELETE_IMAGES_TAG as K, applyCallerIdentityCredentials as Ka, createSecretMasker as Kc, waitForLambdaFunctionActive as Ki, shouldRetainResource as Kl, retiredNameGenerationsAfter as Kn, malformedResourcePropertiesWarning as Ko, supersededAfterRollback as Kr, toCfnInteger as Ks, journaledOrphanLines as Kt, resolveStateBucketWithDefaultAndSource as Ku, deleteTableWithIndexBusyRetry as L, recordedOutputReferenceRegions as La, createUnionSecretMasker as Lc, tagMapAsList as Li, exportNamesCarriedFrom as Ll, isRedactedRecordedValue as Ln, malformedOrphanRecordsRefusalMessage as Lo, gray as Lr, findReplacedReadersOfRecreateTargets as Ls, revertedNestedRowIds as Lt, synthesisStatusMessage as Lu, deleteBudgetKey as M, resolveDynamicReferences as Ma, markSameGenerationBag as Mc, DBPROXY_TAGS_WHAT as Mi, stackInstanceIdOf as Ml, orphanNeedsIdentity as Mn, malformedExportNamesWarning as Mo, getStackRecords as Mr, findSilentDropProperties as Ms, dropSettledNestedJournals as Mt, runDockerStreaming as Mu, resolveDynamoDbDeleteBudgetClock as N, producerLookupOver as Na, redactForState as Nc, DBPROXY_TAG_OPTIONS as Ni, withStackInstanceIdWithheld as Nl, findNestedStackTypeChanges as Nn, malformedExportSourceWarning as No, withStackRecords as Nr, unwrittenCreateOnlyReplacement as Ns, getNestedRevertRun as Nt, warnFinchArgvExposure as Nu, stripIndexContributorInsights as O, s3BucketDomainName as Oa, readsNoEchoSource as Oc, DeploymentEventsStore as Oi, applyCrossPrefixScan as Ol, recordUnderIdIsNotOwn as On, hasReadableResources as Oo, parseMappingFile as Or, unreadableOrphanRecords as Os, recordRetainedForReadoption as Ot, redactDockerArgvValues as Ou, resolveDynamoDbDeleteBudgetMs as P, refuseUnreadableCdkCrossAccountRefs as Pa, recordReferenceProvenanceEntry as Pc, planTagDiff as Pi, splitImportedOps as Pl, getCurrentProducerRegions as Pn, malformedLocalOutputsWarning as Po, replacedDeleteFailureVerdict as Pr, withoutSilentDropProperties as Ps, nestedChildStackName as Pt, AssetManifestLoader as Pu, IMPLICIT_DELETE_DEPENDENCIES as Q, regionLessSecretName as Qa, withoutPhysicalNameCopies as Qc, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Qi, isSensitiveAttributeName as Ql, resourcesNamingDeclaredParameter as Qn, refuseMalformedNestedChildOutputs as Qo, noEchoComparisonForTemplate as Qr, configStringRefusal as Qs, isAccessDeniedError as Qt, CFN_TEMPLATE_URL_LIMIT as Qu, maskedLogger as R, recordedReferenceRegions as Ra, hasMaskableValues as Rc, tagPlanWarning as Ri, hasReadableExportSet as Rl, redactedDeleteAddressFields as Rn, malformedOrphanRecordsWarning as Ro, green as Rr, shownType as Rs, withNestedRevertRun as Rt, getDefaultStateBucketName as Ru, indexDeclaresContributorInsights as S, withUnsettledProperties as Sa, maskedLeafCoordinatesOf as Sc, renderAssemblyPathEscape as Sd, earliestDefined as Si, LockManager as Sl, demoteSupersededOrphans as Sn, UNREADABLE_RESOURCES_MAP_ROW as So, movedToHint as Sr, repairMalformedOrphansForReadOnly as Ss, makeCanonicalizePropertiesFn as St, finchSecretArgvRefusal as Su, readContributorInsightsSpec as T, poisonRenderedSpellingsCollidingIn as Ta, noEchoOutputsComparison as Tc, injectedAwsRegionValue as Td, withCreateTokenLedger as Ti, rebuildClientForBucketRegion as Tl, planFailedOps as Tn, displayLogicalId as To, isPairableType as Tr, repairMalformedResourcePropertiesForReadOnly as Ts, pendingRequestCount as Tt, isDockerClientEnvKey as Tu, planTimeToLive as U, isIamRoleArn as Ua, recordLogOnlyValue as Uc, ccBrokenReason as Ui, isReadableBag as Ul, nameGenerationHighWaterOf as Un, malformedOutputsWarning as Uo, holdsSupersededResources as Ur, WARM_THROUGHPUT_MEMBERS as Us, dropFailedCommands as Ut, resolveCaptureObservedState as Uu, isTtlAlreadyDisabled as V, assertSendableRoleArn as Va, printingCorpusOf as Vc, CC_BROKEN_REASON as Vi, importableOutputKeys as Vl, updatePartialReason as Vn, malformedOrphansWarning as Vo, addSuperseded as Vr, isStatefulRecreateTargetSync as Vs, withNestedStackContext as Vt, resolveApp as Vu, readTtlSpec as W, sendableAssumeRoleCommand as Wa, shareLogOnlyValues as Wc, isCustomResource as Wi, orphansAfterRollback as Wl, nameScopeOf as Wn, malformedRenderedContainersWarning as Wo, isSupersededResourceRecord as Wr, coerceWarmThroughput as Ws, dropFailedHint as Wt, resolveSkipPrefix as Wu, getPriorAttempts as X, classifyReplaySecretRegion as Xa, scrubResourceRecord as Xc, getCurrentResourceSecrets as Xi, timePhase as Xl, namesAnyDeclaredParameter as Xn, previewableOrphanRecords as Xo, withoutSuperseded as Xr, configBooleanRefusal as Xs, formatResourceLine as Xt, ssmResolvedValueType as Xu, isTruthyCfnBoolean as Y, classifyRecordedSecretRegion as Ya, maskSecretsInText as Yc, isCustomResourceType as Yi, renderPhaseTimings as Yl, computeParameterTaint as Yn, malformedStateRefusalMessage as Yo, supersededResourcesOf as Yr, coerceCfnInteger as Ys, sameJournaledOrphans as Yt, warnDeprecatedNoPrefixCliFlag as Yu, markRefusedBeforeApplying as Z, producerRegionsFromState as Za, withPhysicalNameCopies as Zc, withPrintingSecrets as Zi, AssetPublisher as Zl, reachableDivergentParameters as Zn, refuseDivergentRecordRegionForDestroy as Zo, noEchoAttributeNamesOf as Zr, configIntegerRefusal as Zs, chunks as Zt, CFN_TEMPLATE_BODY_LIMIT as Zu, streamMemberRefusals as _, reDisableInstanceApiTermination as _a, canonicalCoordinates as _c, nullPrototypeRecord as _d, createPreDeleteFinalSnapshot as _i, recordNoEchoParameterFreshValue as _l, withUnprovenUnsettled as _n, declaresNoEcho as _o, constructPathOf as _r, refuseMalformedResourcesForDeploy as _s, withResourceDeadline as _t, resolveDockerContextDirectory as _u, isProtectionValueActive as a, RollbackInlinePolicyWriters as aa, templateResourceTypes as ac, PARTITION_TABLE as ad, namingSecretsWithRecordedNoEcho as ai, inheritNestedStackParameterAssociations as al, refuseRefactorMarker as an, carriesFetchableDynamicReference as ao, carriedExportAliasExposure as ar, refuseMalformedOutputsForDestroy as as, childTemplateLoader as at, AssetModeResolver as au, CONTRIBUTOR_INSIGHTS_KEY as b, INTRINSIC_KEYS as ba, maskReadbackAtCoordinates as bc, describeFileReadFailure as bd, refusesFinalSnapshot as bi, WHOLE_DYNAMIC_REFERENCE_PATTERN as bl, equalModuloMask as bn, STATE_RESOURCES_MALFORMED as bo, findRefactorHints as br, refuseMalformedState as bs, keptWholeReasonText as bt, describeDockerFailure as bu, DynamoDBGlobalTableProvider as c, deleteLeftInPlace as ca, blockDeviceMappingsDifferOnlyInDeleteOnTermination as cc, AssemblyReader as cd, secretNamePrintingBags as ci, physicalNameCopiesOf as cl, hasPendingMovesOut as cn, AWS_NO_VALUE as co, isWholeDynamicReferenceValue as cr, refuseMalformedResourceEntriesForDeploy as cs, listNestedTemplateRows as ct, ensureAssetStorage as cu, declaredStreamPolicyMember as d, isWaitAbandonedError as da, emrClusterInstancesReplaced as dc, describeJsonParseFailure as dd, stateSecretNameNeedles as di, splitGetAttStringForm as dl, refusePendingMovesOut as dn, lacksRecordedTableArn as do, collectPublishedOutputNames as dr, refuseMalformedResourceEntriesForImportSave as ds, conditionFingerprint as dt, parseBootstrapMarker as du, customResourceResponseExpirationWarning as ea, replayWarn as ec, findLargeInlineResources as ed, noEchoParameterNamesOf as ei, dynamicReferenceTokens as el, withApiLimit as en, isUnboundTemplateParameter as eo, displayTextOrWithheld as er, refuseMalformedOrphanRecordsForDestroy as es, crossStackOutputProvenanceSource as et, WorkGraph as eu, declaredStreamTagsMember as f, markWaitAbandoned as fa, canonicalLambdaFunctionName as fc, parseFailureDebugDetail as fd, storedSecretNameNeedles as fi, carriesSecretMask as fl, replayFailedOperations as fn, refStateLookupFromResource as fo, isExportAliasCollision as fr, refuseMalformedResourceEntriesForOrphan as fs, conditionInputsFrom as ft, readBootstrapMarkerBody as fu, streamDeclaresTags as g, observeThenDisableInstanceApiTermination as ga, TemplateParser as gc, hasPlainPrototype$1 as gd, ccRoutedFinalSnapshotError as gi, recordNoEchoAttributeValues as gl, settleUnsettledPrevious as gn, passedParameterClassesOf as go, maskingRetryLogger as gr, refuseMalformedResourcePropertiesForOrphan as gs, enclosingDeadlineRemainingMs as gt, buildDockerImage as gu, streamDeclaresPolicy as h, isTerminationProtectionPropagationError as ha, DagBuilder as hc, hasOwnKey as hd, buildFinalSnapshotIdentifier as hi, recordMaskOnlyValuesIn as hl, recordAfterRollbackUpdate as hn, parameterInputsFor as ho, DEFAULT_RESOURCE_WARN_AFTER_MS as hr, refuseMalformedResourcePropertiesForExport as hs, enclosingDeadlineExpired as ht, buildDenyExternalAccessPolicy as hu, PROTECTION_PROPERTY_BY_TYPE as i, unchangedBehindSecretReference as ia, prefetchCreateOnlyPropertyPaths as ic, expectedOwnerParam as id, maskEventTextWithBoundBags as ii, identityKeyFor as il, refactorMarkerRefusalMessage as in, carriesDynamicReference as io, secretSafeKeyDisplay as ir, refuseMalformedOutputs as is, serviceTokenBlockingReason as it, rewriteTemplateAssetReferences as iu, compensateRemovedDeletionProtection as j, s3BucketWebsiteUrl as ja, liveMatchesUnresolvedTokenFrame as jc, markDeleteStarted as ji, isNotImplemented as jl, seedsDeleteFirstGuard as jn, malformedDriftResourcePropertiesWarning as jo, destroyStackRecordsView as jr, findActionableSilentDrops as js, displacedPhysicalIdShown as jt, runDockerForeground as ju, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as k, s3BucketDualStackDomainName as ka, recordedNoEchoValuesOf as kc, extractDeploymentEventError as ki, crossPrefixDeniedWarning as kl, replacementNeverSwapped as kn, isReadableOrphanRecord as ko, proposeRenames as kr, unreadableResourceEntries as ks, NESTED_PENDING_PARENT_REASON as kt, redactedCause as ku, STREAM_POLICY_KEY as l, deleteSkipReason as la, dbInstanceEngineChangeIsInPlace as lc, StageLoadError as ld, secretNamedAttributeNamesOf as li, recordAttributeIdCopy as ll, pendingMovesOutOf as ln, cfnRefValueFromPhysicalId as lo, noEchoParameterValueSeed as lr, refuseMalformedResourceEntriesForDestroy as ls, renderNestedTemplateTreeDefect as lt, getBootstrapMarkerKey as lu, reverseMapStreamPolicy as m, ec2InstanceProtectionSite as ma, sameLambdaFunctionAddress as mc, defineOwnKey as md, PRE_DELETE_SNAPSHOT_TYPES as mi, recordMaskOnlyValue as ml, removeProtectionTypeList as mn, withSharedDrainBudget as mo, DEFAULT_RESOURCE_TIMEOUT_MS as mr, refuseMalformedResourcePropertiesForDrift as ms, readRecordedConditionVerdicts as mt, validateContainerRepoName as mu, recordedProtectionEvidence as n, slowCcOperationTimeoutMs as na, requireConfigObject as nc, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as nd, completedReplayEntries as ni, pathCrossesDottedKey as nl, readRefactorMarkerOnce as nn, getAccountInfo as no, secretBearing as nr, refuseMalformedOrphansForDestroy as ns, deferredServiceTokenWarning as nt, createAssetRedirectResolver as nu, perType as o, UNSPECIFIED_SKIP_REASON as oa, describeTypeWithThrottleRetry as oc, canonicalizeRegion as od, orphanRecordsPrintingBag as oi, recordNestedStackParameterExpressions as ol, sameMove as on, isNamelessDynamicReferenceError as oo, exportNameNoEchoParameters as or, refuseMalformedResourceAttributesForOrphan as os, findNestedTemplateTreeDefect as ot, BOOTSTRAP_MARKER_PREFIX as ou, planStreamMemberOps as p, disableInstanceApiTermination as pa, lambdaFunctionNameForMask as pc, utf8ByteLength as pd, ATOMIC_FINAL_SNAPSHOT_TYPES as pi, provenPublicValue as pl, replayRollback as pn, parseWebACLArn as po, bindingSkippedOutputs as pr, refuseMalformedResourcePropertiesForDestroy as ps, parentSuppliedValues as pt, validateAssetBucketName as pu, S3_AUTO_DELETE_OBJECTS_TAG as q, callerEnvCredentials as qa, errorCauseChain as qc, TemplateNoEchoReresolver as qi, stackInstanceIdCarriedFrom as ql, retiredNameGenerationsLeaving as qn, malformedResourcesWarning as qo, supersededHeldByOtherTypeWarning as qr, toFiniteNumber as qs, loadJournaledOrphans as qt, resolveUseCdkBootstrapAssets as qu, recordedProtectionNote as r, onlySecretReferencesDiffer as ra, requireConfigString as rc, decodeListingKey as rd, journaledOrphanPrintingBag as ri, spelledKeysOf as rl, refactorMarkerMovesOf as rn, isImpossibleEmptyStoredAttribute as ro, secretBearingStateKeyWarning as rr, refuseMalformedOrphansForOrphan as rs, findServiceTokenRefusals as rt, loadPublishableAssetManifest as ru, readProtection as s, deleteIndeterminateGuards as sa, withRetry as sc, derivePartitionAndUrlSuffix as sd, secretNamePrintingBag as si, recoverMaskedOutput as sl, updateRefactorMarker as sn, keepsSecretReferenceToken as so, exportNameSecretExposure as sr, refuseMalformedResourceEntries as ss, isAbsoluteAssetPath as st, assertAssetBucketRegion as su, DeployEngine as t, CloudControlProvider as ta, requireConfigArray as tc, uploadCfnTemplate as td, createReadOnlyAttributeHealerFactory as ti, isUncertifiedBaselineMaskPosition as tl, readRefactorMarker as tn, parameterTypeMayLoseSecretIdentity as to, exportAliasCollisionScrubWarning as tr, refuseMalformedOrphans as ts, inheritedProvenanceForChildDiff as tt, buildAssetRedirectMap as tu, STREAM_TAGS_KEY as u, withIndeterminateGuard as ua, ecsServiceLaunchTypeSetOrChanged as uc, processStackMessages as ud, secretNamedRecordNeedles as ui, recordPhysicalNameCopy as ul, pendingMovesRefusalMessage as un, isStalePlaceholderArnAttribute as uo, collectDeclaredOutputNames as ur, refuseMalformedResourceEntriesForImport as us, templateIdentity as ut, isCrossRegionRedirect as uu, streamPolicyMatchesDeclared as v, reEnableInstanceApiTermination as va, isMarkedCoordinate as vc, ownValue as vd, effectiveDeletionPolicy as vi, recordProvenPublicExpression as vl, calculateResourceDrift as vn, JSON_LISTING_HOLE_VALUE as vo, findDestructiveChanges as vr, refuseMalformedResourcesForDestroy as vs, diffSecurity as vt, describeDockerCapturedOutput as vu, planIndexContributorInsightsOps as w, IntrinsicFunctionResolver as wa, noEchoLeavesOf as wc, injectAwsRegion as wd, reserveStackCreateToken as wi, S3StateBackend as wl, isReplacementOrphan as wn, deployRefusesOrphanRowsReason as wo, withMovedTo as wr, repairMalformedResourceEntriesForReadOnly as ws, planOrphanAdoption as wt, getDockerCmd as wu, contributorInsightsRefusals as x, unsettledPropertiesOf as xa, maskWholeValue as xc, displayAssemblyPath as xd, unsupportedFinalSnapshotError as xi, isSingleDynamicReferenceToken as xl, undeclaredEmptyObservedKeys as xn, UNREADABLE_ORPHANS_CONTAINER_ROW as xo, hintSidesOf as xr, repairMalformedOrphanRecordsForReadOnly as xs, mergeNoChangeOutputs as xt, dockerSpawnEnvWithSensitive as xu, streamTagsMatchDeclared as y, DiffCalculator as ya, maskAtCoordinates as yc, absoluteAssemblyPathEscape as yd, isFinalSnapshotError as yi, wholeStringLeavesOf as yl, equalModuloMarkedMask as yn, STATE_REGION_DIVERGED as yo, formatDestructiveChange as yr, refuseMalformedResourcesForExport as ys, isSecretBearingReferenceString as yt, describeDockerExecFailure as yu, relayedIndexBusyDelete as z, applyRoleArnIfSet as za, literalSplitDelimitersOf as zc, definedAttributes as zi, hasReasonlessBaselineRefusal as zl, redactedDeleteAddressSkip as zn, malformedOrphanRowsKeptWarning as zo, red as zr, MULTI_REGION_RECREATE_BLOCKED_TYPES as zs, collectNestedChildUnaddressed as zt, getLegacyStateBucketName as zu };
54773
- //# sourceMappingURL=deploy-engine-DZO2SOQJ.js.map
55276
+ export { IMPLICIT_DELETE_DEPENDENCIES as $, envCredentialsAreAssumedRole as $a, maskSecretsInError as $c, withPrintingSecrets as $i, PhaseClock as $l, resourcesNamingDeclaredParameter as $n, malformedScrubResourceEntriesRefusalMessage as $o, noEchoComparisonForTemplate as $r, coerceCfnBoolean as $s, isAccessDeniedError as $t, stateBucketExistenceConfirmed as $u, DYNAMODB_DELETE_POLL_COST_MS as A, poisonRenderedSpellingsCollidingIn as Aa, noEchoOutputsComparison as Ac, injectedAwsRegionValue as Ad, DeploymentEventsStore as Ai, rebuildClientForBucketRegion as Al, replacementNeverSwapped as An, displayLogicalId as Ao, proposeRenames as Ar, repairMalformedResourcePropertiesForReadOnly as As, NESTED_PENDING_PARENT_REASON as At, isDockerClientEnvKey as Au, relayedIndexBusyDelete as B, keepHeldTokenProvenance as Ba, snapshotPassProvenance as Bc, tagPlanWarning as Bi, acceptedCreateOnlyDropsOf as Bl, redactedDeleteAddressSkip as Bn, malformedLocalResourceEntriesWarning as Bo, red as Br, NO_CC_HANDLERS_REASON as Bs, collectNestedChildUnaddressed as Bt, getDockerImageBySourceHash as Bu, planContributorInsightsOp as C, isUsableAttemptedName as Ca, isMarkedCoordinate as Cc, ownValue as Cd, unsupportedFinalSnapshotError as Ci, recordProvenPublicExpression as Cl, demoteSupersededOrphans as Cn, JSON_LISTING_HOLE_VALUE as Co, movedToHint as Cr, refuseMalformedResourcesForDestroy as Cs, makeCanonicalizePropertiesFn as Ct, describeDockerCapturedOutput as Cu, reverseMapTableContributorInsights as D, withUnsettledProperties as Da, maskedLeafCoordinatesOf as Dc, renderAssemblyPathEscape as Dd, withCreateTokenLedger as Di, LockManager as Dl, planRollback as Dn, UNREADABLE_RESOURCES_MAP_ROW as Do, looselyEqual as Dr, repairMalformedOrphansForReadOnly as Ds, resolvePendingCloudControlRequests as Dt, finchSecretArgvRefusal as Du, reverseMapIndexContributorInsights as E, unsettledPropertiesOf as Ea, maskWholeValue as Ec, displayAssemblyPath as Ed, reserveStackCreateToken as Ei, isSingleDynamicReferenceToken as El, planFailedOps as En, UNREADABLE_ORPHANS_CONTAINER_ROW as Eo, isPairableType as Er, repairMalformedOrphanRecordsForReadOnly as Es, pendingRequestCount as Et, dockerSpawnEnvWithSensitive as Eu, resolveDynamoDbDeleteBudgetMs as F, s3BucketRegionalDomainName as Fa, valueAtCoordinate as Fc, DBPROXY_TAG_OPTIONS as Fi, isAccessDenied$1 as Fl, getCurrentProducerRegions as Fn, isReadableResourceEntry as Fo, replacedDeleteFailureVerdict as Fr, withheldAccountClause as Fs, nestedChildStackName as Ft, redactedDockerCause as Fu, readTtlSpec as G, assertFlagRoleArn as Ga, logOnlyValueCount as Gc, ccBrokenReason as Gi, hasUnverifiableParameterRefusal as Gl, nameScopeOf as Gn, malformedOrphansRefusalMessage as Go, isSupersededResourceRecord as Gr, isStatefulRecreateTargetForReplace as Gs, dropFailedHint as Gt, loadCdkJson as Gu, isTtlAlreadyDisabled as H, recordedOutputReferenceRegions as Ha, createUnionSecretMasker as Hc, stringifyIfAssigned as Hi, exportNamesCarriedFrom as Hl, updatePartialReason as Hn, malformedOrphanRecordsRefusalMessage as Ho, addSuperseded as Hr, findReplacedReadersOfRecreateTargets as Hs, withNestedStackContext as Ht, synthesisStatusMessage as Hu, DELETE_INDEX_WAIT_PROCEED_NOTE as I, s3BucketWebsiteUrl as Ia, liveMatchesUnresolvedTokenFrame as Ic, planTagDiff as Ii, isNotImplemented as Il, inheritProducerRegions as In, malformedDriftResourcePropertiesWarning as Io, bold as Ir, findActionableSilentDrops as Is, recordDisplacedSkips as It, runDockerForeground as Iu, S3_AUTO_DELETE_OBJECTS_TAG as J, isIamRoleArn as Ja, recordLogOnlyValue as Jc, waitForLambdaFunctionActive as Ji, isReadableBag as Jl, retiredNameGenerationsLeaving as Jn, malformedOutputsWarning as Jo, supersededHeldByOtherTypeWarning as Jr, WARM_THROUGHPUT_MEMBERS as Js, loadJournaledOrphans as Jt, resolveCaptureObservedState as Ju, sendTtlWaitingOutRateLimit as K, assertSendableRoleArn as Ka, printingCorpusOf as Kc, isCustomResource as Ki, importableOutputKeys as Kl, retiredAfterRollback as Kn, malformedOrphansWarning as Ko, removeSuperseded as Kr, isStatefulRecreateTargetSync as Ks, isHandledOrphan as Kt, resolveApp as Ku, INDEX_SETTLE_POLL_INTERVAL_MS as L, resolveDynamicReferences as La, markSameGenerationBag as Lc, readTagList as Li, stackInstanceIdOf as Ll, REDACTED_DELETE_ADDRESS_SKIP_REASON as Ln, malformedExportNamesWarning as Lo, cyan as Lr, findSilentDropProperties as Ls, revertNestedChildFromJournal as Lt, runDockerStreaming as Lu, compensateRemovedDeletionProtection as M, s3BucketArn as Ma, readbackPathFor as Mc, resolveBucketRegion as Md, isRefusedByName as Mi, CrossPrefixScanCache as Ml, seedsDeleteFirstGuard as Mn, hasReadableOutputs as Mo, destroyStackRecordsView as Mr, unpreviewableOrphanRecords as Ms, displacedPhysicalIdShown as Mt, partitionSensitiveEnv as Mu, deleteBudgetKey as N, s3BucketDomainName as Na, readsNoEchoSource as Nc, markDeleteStarted as Ni, applyCrossPrefixScan as Nl, orphanNeedsIdentity as Nn, hasReadableResources as No, getStackRecords as Nr, unreadableOrphanRecords as Ns, dropSettledNestedJournals as Nt, redactDockerArgvValues as Nu, stripIndexContributorInsights as O, withoutUnsettledProperties as Oa, noEchoCoordinatesOf as Oc, resolveAssemblyPath as Od, acquireIdempotencyToken as Oi, isLockInfoExpired as Ol, recheckFailedPlan as On, accountArgs as Oo, mappingPairs as Or, repairMalformedOutputsForReadOnly as Os, keptForRetainedRecord as Ot, formatDockerLoginError as Ou, resolveDynamoDbDeleteBudgetClock as P, s3BucketDualStackDomainName as Pa, recordedNoEchoValuesOf as Pc, DBPROXY_TAGS_WHAT as Pi, crossPrefixDeniedWarning as Pl, findNestedStackTypeChanges as Pn, isReadableOrphanRecord as Po, withStackRecords as Pr, unreadableResourceEntries as Ps, getNestedRevertRun as Pt, redactedCause as Pu, markRefusedBeforeApplying as Q, callerEnvCredentials as Qa, errorCauseChain as Qc, getCurrentResourceSecrets as Qi, stackInstanceIdCarriedFrom as Ql, reachableDivergentParameters as Qn, malformedResourcesWarning as Qo, noEchoAttributeNamesOf as Qr, toFiniteNumber as Qs, chunks as Qt, resolveUseCdkBootstrapAssets as Qu, deleteTableWithIndexBusyRetry as R, producerLookupOver as Ra, redactForState as Rc, refuseMalformedDesiredTags as Ri, withStackInstanceIdWithheld as Rl, isRedactedRecordedValue as Rn, malformedExportSourceWarning as Ro, gray as Rr, unwrittenCreateOnlyReplacement as Rs, revertedNestedRowIds as Rt, warnFinchArgvExposure as Ru, indexDeclaresContributorInsights as S, INTRINSIC_KEYS as Sa, canonicalCoordinates as Sc, nullPrototypeRecord as Sd, refusesFinalSnapshot as Si, recordNoEchoParameterFreshValue as Sl, undeclaredEmptyObservedKeys as Sn, declaresNoEcho as So, hintSidesOf as Sr, refuseMalformedResourcesForDeploy as Ss, mergeNoChangeOutputs as St, resolveDockerContextDirectory as Su, readContributorInsightsSpec as T, unsettledItemsOf as Ta, maskReadbackAtCoordinates as Tc, describeFileReadFailure as Td, ledgerForStack as Ti, WHOLE_DYNAMIC_REFERENCE_PATTERN as Tl, isReplacementOrphan as Tn, STATE_RESOURCES_MALFORMED as To, withMovedTo as Tr, refuseMalformedState as Ts, planOrphanAdoption as Tt, describeDockerFailure as Tu, isTtlRateLimited as U, recordedReferenceRegions as Ua, hasMaskableValues as Uc, CC_BROKEN_REASON as Ui, hasReadableExportSet as Ul, nameGenerationCarriedFrom as Un, malformedOrphanRecordsWarning as Uo, deleteSupersededEntry as Ur, shownType as Us, deleteJournaledOrphans as Ut, getDefaultStateBucketName as Uu, waitForIndexesSettled as V, outputReferenceProvenanceOf as Va, carryLogOnlyValues as Vc, definedAttributes as Vi, describeRegionValueKind as Vl, updatePartialMessage as Vn, malformedLocalResourcesWarning as Vo, yellow as Vr, hasNoCloudControlHandlers as Vs, getCurrentNestedStackContext as Vt, Synthesizer as Vu, planTimeToLive as W, applyRoleArnIfSet as Wa, literalSplitDelimitersOf as Wc, ProviderRegistry as Wi, hasReasonlessBaselineRefusal as Wl, nameGenerationHighWaterOf as Wn, malformedOrphanRowsKeptWarning as Wo, holdsSupersededResources as Wr, MULTI_REGION_RECREATE_BLOCKED_TYPES as Ws, dropFailedCommands as Wt, getLegacyStateBucketName as Wu, isTruthyCfnBoolean as X, AWS_CREDENTIAL_ENV_KEYS as Xa, unionOfSecretBags as Xc, readsNoEchoDeleteValues as Xi, orphansCarriedFrom as Xl, computeParameterTaint as Xn, malformedResourceEntriesWarning as Xo, supersededResourcesOf as Xr, isWarmThroughputDecrease as Xs, sameJournaledOrphans as Xt, resolveStateBucketWithDefault as Xu, hasCdkAutoDeleteTag as Y, sendableAssumeRoleCommand as Ya, shareLogOnlyValues as Yc, TemplateNoEchoReresolver as Yi, orphansAfterRollback as Yl, withNameGenerationReached as Yn, malformedRenderedContainersWarning as Yo, supersededHolderOf as Yr, coerceWarmThroughput as Ys, makeForeignHolderScan as Yt, resolveSkipPrefix as Yu, getPriorAttempts as Z, applyCallerIdentityCredentials as Za, createSecretMasker as Zc, isCustomResourceType as Zi, shouldRetainResource as Zl, namesAnyDeclaredParameter as Zn, malformedResourcePropertiesWarning as Zo, withoutSuperseded as Zr, toCfnInteger as Zs, formatResourceLine as Zt, resolveStateBucketWithDefaultAndSource as Zu, streamMemberRefusals as _, isTerminationProtectionPropagationError as _a, canonicalLambdaFunctionName as _c, parseFailureDebugDetail as _d, buildFinalSnapshotIdentifier as _i, carriesSecretMask as _l, settleUnsettledPrevious as _n, refStateLookupFromResource as _o, maskingRetryLogger as _r, refuseMalformedResourceEntriesForOrphan as _s, enclosingDeadlineRemainingMs as _t, readBootstrapMarkerBody as _u, isProtectionValueActive as a, onlySecretReferencesDiffer as aa, replayWarn as ac, findLargeInlineResources as ad, journaledOrphanPrintingBag as ai, dynamicReferenceTokens as al, refactorMarkerRefusalMessage as an, isUnboundTemplateParameter as ao, secretSafeKeyDisplay as ar, refuseMalformedOrphanRecordsForDestroy as as, serviceTokenBlockingReason as at, WorkGraph as au, CONTRIBUTOR_INSIGHTS_KEY as b, reEnableInstanceApiTermination as ba, DagBuilder as bc, hasOwnKey as bd, effectiveDeletionPolicy as bi, recordMaskOnlyValuesIn as bl, equalModuloMarkedMask as bn, parameterInputsFor as bo, formatDestructiveChange as br, refuseMalformedResourcePropertiesForExport as bs, isSecretBearingReferenceString as bt, buildDenyExternalAccessPolicy as bu, DynamoDBGlobalTableProvider as c, UNSPECIFIED_SKIP_REASON as ca, requireConfigString as cc, decodeListingKey as cd, orphanRecordsPrintingBag as ci, spelledKeysOf as cl, updateRefactorMarker as cn, isImpossibleEmptyStoredAttribute as co, exportNameSecretExposure as cr, refuseMalformedOrphansForOrphan as cs, isAbsoluteAssetPath as ct, loadPublishableAssetManifest as cu, declaredStreamPolicyMember as d, deleteSkipReason as da, describeTypeWithThrottleRetry as dc, canonicalizeRegion as dd, secretNamedAttributeNamesOf as di, recordNestedStackParameterExpressions as dl, pendingMovesRefusalMessage as dn, isNamelessDynamicReferenceError as do, collectDeclaredOutputNames as dr, refuseMalformedResourceAttributesForOrphan as ds, templateIdentity as dt, BOOTSTRAP_MARKER_PREFIX as du, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as ea, coerceCfnInteger as ec, warnDeprecatedNoPrefixCliFlag as ed, noEchoExactEchoLeavesOf as ei, maskSecretsInText as el, lookupEachName as en, classifyRecordedSecretRegion as eo, WITHHELD_NAME_DISPLAY as er, malformedStateRefusalMessage as es, computeImplicitDeleteEdges as et, renderPhaseTimings as eu, declaredStreamTagsMember as f, withIndeterminateGuard as fa, withRetry as fc, derivePartitionAndUrlSuffix as fd, secretNamedRecordNeedles as fi, recoverMaskedOutput as fl, refusePendingMovesOut as fn, keepsSecretReferenceToken as fo, collectPublishedOutputNames as fr, refuseMalformedResourceEntries as fs, conditionFingerprint as ft, assertAssetBucketRegion as fu, streamDeclaresTags as g, ec2InstanceProtectionSite as ga, emrClusterInstancesReplaced as gc, describeJsonParseFailure as gd, PRE_DELETE_SNAPSHOT_TYPES as gi, splitGetAttStringForm as gl, recordAfterRollbackUpdate as gn, lacksRecordedTableArn as go, DEFAULT_RESOURCE_WARN_AFTER_MS as gr, refuseMalformedResourceEntriesForImportSave as gs, enclosingDeadlineExpired as gt, parseBootstrapMarker as gu, streamDeclaresPolicy as h, disableInstanceApiTermination as ha, ecsServiceLaunchTypeSetOrChanged as hc, processStackMessages as hd, ATOMIC_FINAL_SNAPSHOT_TYPES as hi, recordPhysicalNameCopy as hl, removeProtectionTypeList as hn, isStalePlaceholderArnAttribute as ho, DEFAULT_RESOURCE_TIMEOUT_MS as hr, refuseMalformedResourceEntriesForImport as hs, readRecordedConditionVerdicts as ht, isCrossRegionRedirect as hu, PROTECTION_PROPERTY_BY_TYPE as i, slowCcOperationTimeoutMs as ia, readConfigString as ic, MIGRATE_TMP_PREFIX as id, completedReplayEntries as ii, DYNAMIC_REFERENCE_TOKEN_SCAN as il, refactorMarkerMovesOf as in, coerceParameterTypedValue as io, secretBearingStateKeyWarning as ir, refuseMalformedOrphanRecords as is, findServiceTokenRefusals as it, stringifyValue as iu, beginDeleteWait as j, isSettledInstanceState as ja, passedNoEchoParametersOf as jc, clearBucketRegionCache as jd, extractDeploymentEventError as ji, CrossPrefixReadError as jl, resolveReplacementOldType as jn, hasReadableOrphans as jo, awaitInFlightSibling as jr, repairMalformedResourcesForReadOnly as js, displacedOpClause as jt, isMalformedEnvKey as ju, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as k, IntrinsicFunctionResolver as ka, noEchoLeavesOf as kc, injectAwsRegion as kd, DeploymentEventsReader as ki, S3StateBackend as kl, recordUnderIdIsNotOwn as kn, deployRefusesOrphanRowsReason as ko, parseMappingFile as kr, repairMalformedResourceEntriesForReadOnly as ks, recordRetainedForReadoption as kt, getDockerCmd as ku, STREAM_POLICY_KEY as l, deleteIndeterminateGuards as la, prefetchCreateOnlyPropertyPaths as lc, expectedOwnerParam as ld, secretNamePrintingBag as li, identityKeyFor as ll, hasPendingMovesOut as ln, carriesDynamicReference as lo, isWholeDynamicReferenceValue as lr, refuseMalformedOutputs as ls, listNestedTemplateRows as lt, rewriteTemplateAssetReferences as lu, reverseMapStreamPolicy as m, markWaitAbandoned as ma, dbInstanceEngineChangeIsInPlace as mc, StageLoadError as md, storedSecretNameNeedles as mi, recordAttributeIdCopy as ml, replayRollback as mn, cfnRefValueFromPhysicalId as mo, bindingSkippedOutputs as mr, refuseMalformedResourceEntriesForDestroy as ms, parentSuppliedValues as mt, getBootstrapMarkerKey as mu, recordedProtectionEvidence as n, customResourceResponseExpirationWarning as na, configIntegerRefusal as nc, CFN_TEMPLATE_BODY_LIMIT as nd, withAttemptedItemsMasked as ni, withPhysicalNameCopies as nl, readRefactorMarker as nn, producerRegionsFromState as no, exportAliasCollisionScrubWarning as nr, refuseDivergentRecordRegionForDestroy as ns, inheritedProvenanceForChildDiff as nt, AssetPublisher as nu, perType as o, unchangedBehindSecretReference as oa, requireConfigArray as oc, uploadCfnTemplate as od, maskEventTextWithBoundBags as oi, isUncertifiedBaselineMaskPosition as ol, refuseRefactorMarker as on, parameterTypeMayLoseSecretIdentity as oo, carriedExportAliasExposure as or, refuseMalformedOrphans as os, childTemplateLoader as ot, buildAssetRedirectMap as ou, planStreamMemberOps as p, isWaitAbandonedError as pa, blockDeviceMappingsDifferOnlyInDeleteOnTermination as pc, AssemblyReader as pd, stateSecretNameNeedles as pi, physicalNameCopiesOf as pl, replayFailedOperations as pn, AWS_NO_VALUE as po, isExportAliasCollision as pr, refuseMalformedResourceEntriesForDeploy as ps, conditionInputsFrom as pt, ensureAssetStorage as pu, ECR_AUTO_DELETE_IMAGES_TAG as q, explicitRoleArnOrThrow as qa, recordLogOnlyParameterValue as qc, wouldReturnToSdkProvider as qi, importableOutputs as ql, retiredNameGenerationsAfter as qn, malformedOutputsRefusalMessage as qo, supersededAfterRollback as qr, renderStatefulReason as qs, journaledOrphanLines as qt, resolveAutoAssetStorage as qu, recordedProtectionNote as r, CloudControlProvider as ra, configStringRefusal as rc, CFN_TEMPLATE_URL_LIMIT as rd, createReadOnlyAttributeHealerFactory as ri, withoutPhysicalNameCopies as rl, readRefactorMarkerOnce as rn, regionLessSecretName as ro, secretBearing as rr, refuseMalformedNestedChildOutputs as rs, deferredServiceTokenWarning as rt, isSensitiveAttributeName as ru, readProtection as s, RollbackInlinePolicyWriters as sa, requireConfigObject as sc, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as sd, namingSecretsWithRecordedNoEcho as si, pathCrossesDottedKey as sl, sameMove as sn, getAccountInfo as so, exportNameNoEchoParameters as sr, refuseMalformedOrphansForDestroy as ss, findNestedTemplateTreeDefect as st, createAssetRedirectResolver as su, DeployEngine as t, applyCustomResourceResponseExpiration as ta, configBooleanRefusal as tc, ssmResolvedValueType as td, noEchoParameterNamesOf as ti, scrubResourceRecord as tl, withApiLimit as tn, classifyReplaySecretRegion as to, displayTextOrWithheld as tr, previewableOrphanRecords as ts, crossStackOutputProvenanceSource as tt, timePhase as tu, STREAM_TAGS_KEY as u, deleteLeftInPlace as ua, templateResourceTypes as uc, PARTITION_TABLE as ud, secretNamePrintingBags as ui, inheritNestedStackParameterAssociations as ul, pendingMovesOutOf as un, carriesFetchableDynamicReference as uo, noEchoParameterValueSeed as ur, refuseMalformedOutputsForDestroy as us, renderNestedTemplateTreeDefect as ut, AssetModeResolver as uu, streamPolicyMatchesDeclared as v, observeThenDisableInstanceApiTermination as va, lambdaFunctionNameForMask as vc, utf8ByteLength as vd, ccRoutedFinalSnapshotError as vi, provenPublicValue as vl, withUnprovenUnsettled as vn, parseWebACLArn as vo, constructPathOf as vr, refuseMalformedResourcePropertiesForDestroy as vs, withResourceDeadline as vt, validateAssetBucketName as vu, planIndexContributorInsightsOps as w, unsettledItemsField as wa, maskAtCoordinates as wc, absoluteAssemblyPathEscape as wd, earliestDefined as wi, wholeStringLeavesOf as wl, isJournaledOrphan as wn, STATE_REGION_DIVERGED as wo, rollbackOrphanIds as wr, refuseMalformedResourcesForExport as ws, makeSiblingClaimReader as wt, describeDockerExecFailure as wu, contributorInsightsRefusals as x, DiffCalculator as xa, TemplateParser as xc, hasPlainPrototype$1 as xd, isFinalSnapshotError as xi, recordNoEchoAttributeValues as xl, equalModuloMask as xn, passedParameterClassesOf as xo, findRefactorHints as xr, refuseMalformedResourcePropertiesForOrphan as xs, keptWholeReasonText as xt, buildDockerImage as xu, streamTagsMatchDeclared as y, reDisableInstanceApiTermination as ya, sameLambdaFunctionAddress as yc, defineOwnKey as yd, createPreDeleteFinalSnapshot as yi, recordMaskOnlyValue as yl, calculateResourceDrift as yn, withSharedDrainBudget as yo, findDestructiveChanges as yr, refuseMalformedResourcePropertiesForDrift as ys, diffSecurity as yt, validateContainerRepoName as yu, maskedLogger as z, refuseUnreadableCdkCrossAccountRefs as za, recordReferenceProvenanceEntry as zc, tagMapAsList as zi, splitImportedOps as zl, redactedDeleteAddressFields as zn, malformedLocalOutputsWarning as zo, green as zr, withoutSilentDropProperties as zs, withNestedRevertRun as zt, AssetManifestLoader as zu };
55277
+ //# sourceMappingURL=deploy-engine-BF5exXUb.js.map