@go-to-k/cdkd 0.309.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-DQoKGfKH.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-tQ0aqZMo.js → deploy-engine-BF5exXUb.js} +620 -114
  9. package/dist/deploy-engine-BF5exXUb.js.map +1 -0
  10. package/dist/{iam-role-provider-BI8Acvps.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-DmVmx69p.js → neptune-provider-D9ac71Ca.js} +6 -4
  16. package/dist/neptune-provider-D9ac71Ca.js.map +1 -0
  17. package/dist/{program-Bnt3Yt0k.js → program-DbnTHlwR.js} +27 -15
  18. package/dist/program-DbnTHlwR.js.map +1 -0
  19. package/dist/{provider-classes-DYke4HKr.js → provider-classes-DktsDsTf.js} +1277 -175
  20. package/dist/provider-classes-DktsDsTf.js.map +1 -0
  21. package/dist/{rds-provider-Qpf09VQv.js → rds-provider-0LUsn9Wl.js} +7 -4
  22. package/dist/rds-provider-0LUsn9Wl.js.map +1 -0
  23. package/dist/{version-9LVuCtBU.js → version-BA4rBBLp.js} +2 -2
  24. package/dist/{version-9LVuCtBU.js.map → version-BA4rBBLp.js.map} +1 -1
  25. package/package.json +8 -9
  26. package/dist/asg-provider-DQoKGfKH.js.map +0 -1
  27. package/dist/deploy-engine-tQ0aqZMo.js.map +0 -1
  28. package/dist/iam-policy-targets-D94wh05t.js.map +0 -1
  29. package/dist/iam-role-provider-BI8Acvps.js.map +0 -1
  30. package/dist/neptune-provider-DmVmx69p.js.map +0 -1
  31. package/dist/program-Bnt3Yt0k.js.map +0 -1
  32. package/dist/provider-classes-DYke4HKr.js.map +0 -1
  33. package/dist/rds-provider-Qpf09VQv.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-9LVuCtBU.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",
@@ -16399,6 +16405,8 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
16399
16405
  }],
16400
16406
  ["AWS::CloudTrail::Trail", {
16401
16407
  handled: /* @__PURE__ */ new Set([
16408
+ "AdvancedEventSelectors",
16409
+ "AggregationConfigurations",
16402
16410
  "CloudWatchLogsLogGroupArn",
16403
16411
  "CloudWatchLogsRoleArn",
16404
16412
  "EnableLogFileValidation",
@@ -16415,13 +16423,14 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
16415
16423
  "Tags",
16416
16424
  "TrailName"
16417
16425
  ]),
16418
- silentDrop: /* @__PURE__ */ new Map([["AdvancedEventSelectors", "not yet implemented by cdkd"], ["AggregationConfigurations", "not yet implemented by cdkd"]]),
16426
+ silentDrop: /* @__PURE__ */ new Map(),
16419
16427
  createOnlyDrops: /* @__PURE__ */ new Set(),
16420
16428
  readOnly: /* @__PURE__ */ new Set(["Arn", "SnsTopicArn"]),
16421
16429
  ccRouteUnavailable: false
16422
16430
  }],
16423
16431
  ["AWS::CloudWatch::Alarm", {
16424
16432
  handled: /* @__PURE__ */ new Set([
16433
+ "ActionConfiguration",
16425
16434
  "ActionsEnabled",
16426
16435
  "AlarmActions",
16427
16436
  "AlarmDescription",
@@ -16430,7 +16439,10 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
16430
16439
  "DatapointsToAlarm",
16431
16440
  "Dimensions",
16432
16441
  "EvaluateLowSampleCountPercentile",
16442
+ "EvaluationCriteria",
16443
+ "EvaluationInterval",
16433
16444
  "EvaluationPeriods",
16445
+ "EvaluationWindow",
16434
16446
  "ExtendedStatistic",
16435
16447
  "InsufficientDataActions",
16436
16448
  "MetricName",
@@ -16443,15 +16455,10 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
16443
16455
  "Threshold",
16444
16456
  "ThresholdMetricId",
16445
16457
  "TreatMissingData",
16446
- "Unit"
16447
- ]),
16448
- silentDrop: /* @__PURE__ */ new Map([
16449
- ["ActionConfiguration", "not yet implemented by cdkd"],
16450
- ["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."],
16451
- ["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."],
16452
- ["EvaluationWindow", "not yet implemented by cdkd"],
16453
- ["WarmUpConfiguration", "not yet implemented by cdkd"]
16458
+ "Unit",
16459
+ "WarmUpConfiguration"
16454
16460
  ]),
16461
+ silentDrop: /* @__PURE__ */ new Map(),
16455
16462
  createOnlyDrops: /* @__PURE__ */ new Set(),
16456
16463
  readOnly: /* @__PURE__ */ new Set(["Arn"]),
16457
16464
  ccRouteUnavailable: false
@@ -17993,7 +18000,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
17993
18000
  "RetentionInDays",
17994
18001
  "Tags"
17995
18002
  ]),
17996
- 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"]]),
17997
18004
  createOnlyDrops: /* @__PURE__ */ new Set(),
17998
18005
  readOnly: /* @__PURE__ */ new Set(["Arn"]),
17999
18006
  ccRouteUnavailable: false
@@ -18477,17 +18484,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
18477
18484
  }],
18478
18485
  ["AWS::S3Express::DirectoryBucket", {
18479
18486
  handled: /* @__PURE__ */ new Set([
18487
+ "BucketEncryption",
18480
18488
  "BucketName",
18481
18489
  "DataRedundancy",
18490
+ "InventoryConfigurations",
18491
+ "LifecycleConfiguration",
18482
18492
  "LocationName",
18493
+ "MetricsConfigurations",
18483
18494
  "Tags"
18484
18495
  ]),
18485
- silentDrop: /* @__PURE__ */ new Map([
18486
- ["BucketEncryption", "not yet implemented by cdkd"],
18487
- ["InventoryConfigurations", "not yet implemented by cdkd"],
18488
- ["LifecycleConfiguration", "not yet implemented by cdkd"],
18489
- ["MetricsConfigurations", "not yet implemented by cdkd"]
18490
- ]),
18496
+ silentDrop: /* @__PURE__ */ new Map(),
18491
18497
  createOnlyDrops: /* @__PURE__ */ new Set(),
18492
18498
  readOnly: /* @__PURE__ */ new Set(["Arn", "AvailabilityZoneName"]),
18493
18499
  ccRouteUnavailable: false
@@ -18768,25 +18774,24 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
18768
18774
  }],
18769
18775
  ["AWS::WAFv2::WebACL", {
18770
18776
  handled: /* @__PURE__ */ new Set([
18777
+ "ApplicationConfig",
18771
18778
  "AssociationConfig",
18772
18779
  "CaptchaConfig",
18773
18780
  "ChallengeConfig",
18774
18781
  "CustomResponseBodies",
18782
+ "DataProtectionConfig",
18775
18783
  "DefaultAction",
18776
18784
  "Description",
18785
+ "MonetizationConfig",
18777
18786
  "Name",
18787
+ "OnSourceDDoSProtectionConfig",
18778
18788
  "Rules",
18779
18789
  "Scope",
18780
18790
  "Tags",
18781
18791
  "TokenDomains",
18782
18792
  "VisibilityConfig"
18783
18793
  ]),
18784
- silentDrop: /* @__PURE__ */ new Map([
18785
- ["ApplicationConfig", "not yet implemented by cdkd"],
18786
- ["DataProtectionConfig", "not yet implemented by cdkd"],
18787
- ["MonetizationConfig", "not yet implemented by cdkd"],
18788
- ["OnSourceDDoSProtectionConfig", "not yet implemented by cdkd"]
18789
- ]),
18794
+ silentDrop: /* @__PURE__ */ new Map(),
18790
18795
  createOnlyDrops: /* @__PURE__ */ new Set(),
18791
18796
  readOnly: /* @__PURE__ */ new Set([
18792
18797
  "Arn",
@@ -26004,14 +26009,80 @@ function withUnsettledProperties(record, names) {
26004
26009
  };
26005
26010
  }
26006
26011
  function withoutUnsettledProperties(record) {
26007
- if (!Object.hasOwn(record, "unsettledProperties")) return record;
26008
- 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;
26009
26014
  return rest;
26010
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
+ }
26011
26070
  function unsettledContextOf(...records) {
26012
26071
  const names = /* @__PURE__ */ new Set();
26013
- for (const record of records) for (const name of unsettledPropertiesOf(record)) names.add(name);
26014
- 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
+ };
26015
26086
  }
26016
26087
 
26017
26088
  //#endregion
@@ -28669,7 +28740,7 @@ var CloudControlProvider = class {
28669
28740
  const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
28670
28741
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
28671
28742
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
28672
- const { ASGProvider } = await import("./asg-provider-DQoKGfKH.js");
28743
+ const { ASGProvider } = await import("./asg-provider-CIg_guZ-.js");
28673
28744
  const delegateRegion = ambientRegion();
28674
28745
  let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
28675
28746
  if (asgProvider === void 0) {
@@ -28778,7 +28849,7 @@ var CloudControlProvider = class {
28778
28849
  const family = SDK_DELETE_FAMILIES.get(resourceType);
28779
28850
  const cached = this.sdkDeleteDelegates.get(family);
28780
28851
  if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
28781
- const provider = family === "rds" ? new (await (import("./rds-provider-Qpf09VQv.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-DmVmx69p.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 });
28782
28853
  this.sdkDeleteDelegates.set(family, {
28783
28854
  region: ccRegion,
28784
28855
  provider
@@ -35756,7 +35827,50 @@ function noEchoAttributeNamesFor(run, logicalId, record, carried, leaves) {
35756
35827
  if (declared === void 0 && prior === void 0 && !echoed) return void 0;
35757
35828
  return [...names].sort();
35758
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
+ }
35759
35872
  function applyNoEchoPersist(run, deps, logicalId, record, scrubbed, templateProps, resources, secrets, carried = false) {
35873
+ scrubbed = withNoEchoItemsMasked(run, deps, logicalId, scrubbed);
35760
35874
  const sources = noEchoPositionSources(run, resources);
35761
35875
  if (sources === void 0) return scrubbed;
35762
35876
  const leaves = noEchoLeavesFor(run, deps, logicalId, record, templateProps, sources);
@@ -37256,6 +37370,10 @@ function maskingRetryLogger(logger, secrets) {
37256
37370
  //#region src/deployment/deploy-engine/options.ts
37257
37371
  const DEFAULT_RESOURCE_WARN_AFTER_MS = 3e5;
37258
37372
  const DEFAULT_RESOURCE_TIMEOUT_MS = 18e5;
37373
+ const DEFAULT_UNSETTLED_REVERT_WAIT = {
37374
+ timeoutMs: DEFAULT_RESOURCE_TIMEOUT_MS,
37375
+ pollMs: 1e4
37376
+ };
37259
37377
 
37260
37378
  //#endregion
37261
37379
  //#region src/analyzer/skipped-outputs.ts
@@ -39531,7 +39649,7 @@ const MERGE_SEMANTICS_KEYS = /* @__PURE__ */ new Set(["Tags"]);
39531
39649
  async function readLive(args, names) {
39532
39650
  const { provider, physicalId, logicalId, resourceType, recordedProperties } = args;
39533
39651
  let live;
39534
- 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);
39535
39653
  else if (provider.readCurrentState !== void 0) live = await provider.readCurrentState(physicalId, logicalId, resourceType, recordedProperties);
39536
39654
  else return;
39537
39655
  if (typeof live !== "object" || live === null || Array.isArray(live)) return "unreadable";
@@ -39549,23 +39667,55 @@ async function settleUnsettledPrevious(args) {
39549
39667
  if (moving.size > 0) throw refusal(args, moving, "AWS is still changing it or cdkd could not confirm it settled");
39550
39668
  }
39551
39669
  const substituted = new Set([...names].filter((name) => !MERGE_SEMANTICS_KEYS.has(name)));
39552
- 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;
39553
39673
  let live;
39554
39674
  try {
39555
- live = await readLive(args, substituted);
39675
+ live = await readLive(args, substituted.size > 0 ? substituted : /* @__PURE__ */ new Set(["Tags"]));
39556
39676
  } catch (error) {
39677
+ if (substituted.size === 0) return previous;
39557
39678
  if (error instanceof ProvisioningError) throw error;
39558
39679
  const wrapped = refusal(args, substituted, "the resource could not be read to converge it");
39559
39680
  if (error instanceof Error) wrapped.cause = error;
39560
39681
  throw wrapped;
39561
39682
  }
39562
39683
  if (live === void 0) return previous;
39563
- 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
+ }
39564
39688
  const out = { ...previous };
39565
39689
  for (const name of substituted) if (Object.hasOwn(live, name) && live[name] !== void 0) out[name] = live[name];
39566
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
+ }
39567
39695
  return out;
39568
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
+ }
39569
39719
  function tagsHeld(desired, live) {
39570
39720
  const asMap = (value) => {
39571
39721
  if (value === void 0 || value === null) return /* @__PURE__ */ new Map();
@@ -39622,7 +39772,42 @@ async function withUnprovenUnsettled(record, args, warn) {
39622
39772
  const kept = await unsettledAfterUpdate(args);
39623
39773
  if (kept.length === 0) return record;
39624
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.`);
39625
- 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
+ }
39626
39811
  }
39627
39812
  function splitUnhandledRemovals(unhandled, recordedPrevious, unsettled) {
39628
39813
  const addedByFailedUpdate = unhandled.filter((name) => unsettled.has(name) && !Object.hasOwn(recordedPrevious, name));
@@ -39653,7 +39838,8 @@ async function updateWithRollbackRetry(provider, args, logicalId, logger, isInte
39653
39838
  recordedProperties: recordedPrevious,
39654
39839
  names: context?.unsettledProperties ?? /* @__PURE__ */ new Set(),
39655
39840
  previous: recordedPrevious,
39656
- desired
39841
+ desired,
39842
+ ...context?.unsettledItems !== void 0 && { attemptedItems: context.unsettledItems }
39657
39843
  });
39658
39844
  const removal = prepareRemovalForUpdate(provider, resourceType, desired, previous);
39659
39845
  const revertArgs = [
@@ -40010,7 +40196,8 @@ async function replayRevert(s) {
40010
40196
  resourceType: op.resourceType,
40011
40197
  recordedProperties: current.properties ?? {},
40012
40198
  names: unsettledContextOf(current, previousState).unsettledProperties ?? /* @__PURE__ */ new Set(),
40013
- desired: desiredProps ?? {}
40199
+ desired: desiredProps ?? {},
40200
+ ...unsettledContextOf(current, previousState).unsettledItems !== void 0 && { attemptedItems: unsettledContextOf(current, previousState).unsettledItems }
40014
40201
  }, (message) => logger.warn(mask(message)));
40015
40202
  if (updatePartialReason(revertResult) === void 0) inlinePolicyWriters.record(op.logicalId, "update", stateResources[op.logicalId], !deepEqual$2(previousState.properties?.["Policies"], current.properties?.["Policies"]), revertVia);
40016
40203
  const rollbackPartial = updatePartialReason(revertResult);
@@ -40672,6 +40859,12 @@ async function replaySingle(op, stateResources, stackName, ctx, resolver, orphan
40672
40859
  function ownRecord(stateResources, logicalId) {
40673
40860
  return Object.hasOwn(stateResources, logicalId) ? stateResources[logicalId] : void 0;
40674
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
+ }
40675
40868
  async function replayFailedOperationsUnbound(failedOps, stateResources, stackName, ctx, options = {}) {
40676
40869
  const inlinePolicyWriters = options.inlinePolicyWriters ?? new RollbackInlinePolicyWriters();
40677
40870
  const result = {
@@ -40904,7 +41097,14 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
40904
41097
  skipUnaddressableReplay(skipScope, logger, op, "force-revert failed UPDATE of");
40905
41098
  break;
40906
41099
  }
40907
- 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`);
40908
41108
  const { provider, provisionedBy: revertVia } = ctx.providerRegistry.getProviderFor({
40909
41109
  resourceType: op.resourceType,
40910
41110
  provisionedBy: op.provisionedBy ?? current.provisionedBy
@@ -40921,7 +41121,13 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
40921
41121
  });
40922
41122
  const desiredProps = noEcho.desired;
40923
41123
  refuseMaskedReplayBaseline(desiredProps, op.logicalId, noEcho.inert);
40924
- 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
+ }
40925
41131
  recordNestedStackParameterExpressions(secrets, op.resourceType, desiredProps, prev.properties, "state-derived");
40926
41132
  opMasker.addNamed({
40927
41133
  resourceType: op.resourceType,
@@ -40955,7 +41161,7 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
40955
41161
  replayingState: true,
40956
41162
  recordedAttributes: current.attributes,
40957
41163
  ...revertFailedClaimed && { inlinePolicyClaimed: revertFailedClaimed },
40958
- ...unsettledContextOf(current, prev)
41164
+ ...revertUnsettled
40959
41165
  }
40960
41166
  ], op.logicalId, logger, options.isInterrupted, secrets, mask));
40961
41167
  if (revertFailedResult) recordNoEchoAttributeValues(revertFailedResult, secrets, desiredProps);
@@ -40966,10 +41172,12 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
40966
41172
  physicalId: current.physicalId,
40967
41173
  resourceType: op.resourceType,
40968
41174
  recordedProperties: current.properties ?? {},
40969
- names: unsettledContextOf(current, prev).unsettledProperties ?? /* @__PURE__ */ new Set(),
40970
- desired: desiredProps ?? {}
41175
+ names: revertUnsettled.unsettledProperties ?? /* @__PURE__ */ new Set(),
41176
+ desired: desiredProps ?? {},
41177
+ ...revertUnsettled.unsettledItems !== void 0 && { attemptedItems: revertUnsettled.unsettledItems }
40971
41178
  }, (message) => logger.warn(mask(message)));
40972
- 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);
40973
41181
  const revertFailedPartial = updatePartialReason(revertFailedResult);
40974
41182
  if (revertFailedPartial !== void 0) logger.warn(mask(` Rollback: ${safe(op.logicalId)} reverted, ${updatePartialMessage(revertFailedPartial)}`));
40975
41183
  else logger.info(` Rollback: ${safe(op.logicalId)} reverted successfully`);
@@ -42883,7 +43091,7 @@ async function revertNestedChildFromJournal(args) {
42883
43091
  ...carried,
42884
43092
  ...stackInstanceIdCarriedFrom(base),
42885
43093
  ...supersededAfterRollback(base, supersededHost),
42886
- version: 14,
43094
+ version: 15,
42887
43095
  region,
42888
43096
  resources: { ...stateResources },
42889
43097
  ...orphansAfterRollback(base, mintedOrphans),
@@ -43650,7 +43858,7 @@ function replayPrintingBag(deps, entries, stateResources) {
43650
43858
  read
43651
43859
  ]);
43652
43860
  }
43653
- async function performRollback(deps, completedOperations, stateResources, stackName, previousState, failedOperations = [], priorOrphans = []) {
43861
+ async function performRollback(deps, completedOperations, stateResources, stackName, previousState, failedOperations = [], priorOrphans = [], unsettledRevert) {
43654
43862
  const orphanIndexes = [];
43655
43863
  const orphanOps = [];
43656
43864
  failedOperations.forEach((op, i) => {
@@ -43675,7 +43883,7 @@ async function performRollback(deps, completedOperations, stateResources, stackN
43675
43883
  const inlinePolicyWriters = new RollbackInlinePolicyWriters();
43676
43884
  const supersededHost = {};
43677
43885
  const runId = deps.options.eventRecorder?.runId;
43678
- const { result, failed, run } = await withNestedRevertRun(runId, async (scope) => {
43886
+ const { result, failed, unsettled, run } = await withNestedRevertRun(runId, async (scope) => {
43679
43887
  return {
43680
43888
  failed: orphanOps.length > 0 ? await withPrintingSecrets(replayPrintingBag(deps, orphanOps.map((op) => ({
43681
43889
  ...op,
@@ -43684,6 +43892,11 @@ async function performRollback(deps, completedOperations, stateResources, stackN
43684
43892
  emitEnvelope: completedOperations.length === 0,
43685
43893
  inlinePolicyWriters
43686
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
+ }),
43687
43900
  result: await withPrintingSecrets(replayPrintingBag(deps, completedReplayEntries(completedOperations), stateResources), () => replayRollback(completedOperations, stateResources, stackName, ctx, {
43688
43901
  inlinePolicyWriters,
43689
43902
  failedOperations,
@@ -43696,11 +43909,12 @@ async function performRollback(deps, completedOperations, stateResources, stackN
43696
43909
  });
43697
43910
  const pendingOrphans = new Set(failed?.remainingFailedOps ?? []);
43698
43911
  const handled = new Set(orphanIndexes.filter((_, k) => !pendingOrphans.has(orphanOps[k])));
43912
+ for (const index of unsettled.handled) handled.add(index);
43699
43913
  return {
43700
43914
  failures: result.failures + (failed?.failures ?? 0),
43701
- warnings: result.warnings + run.warnings + (failed?.warnings ?? 0),
43915
+ warnings: result.warnings + run.warnings + (failed?.warnings ?? 0) + unsettled.warnings,
43702
43916
  skipped: result.skipped + (failed?.skipped ?? 0),
43703
- interrupted: result.interrupted,
43917
+ interrupted: result.interrupted || unsettled.interrupted,
43704
43918
  orphaned: [...failed?.orphaned ?? [], ...result.orphaned],
43705
43919
  rolledBackCreates: [...failed?.rolledBackCreates ?? [], ...result.rolledBackCreates],
43706
43920
  superseded: supersededHost.supersededResources ?? [],
@@ -43708,6 +43922,152 @@ async function performRollback(deps, completedOperations, stateResources, stackN
43708
43922
  remainingFailedOps: failedOperations.filter((_, i) => !handled.has(i))
43709
43923
  };
43710
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
+ }
43711
44071
  function foreignHolderResolver(deps) {
43712
44072
  const sameBucketHolderFor = makeForeignHolderScan(deps.stateBackend);
43713
44073
  const crossPrefixHolder = deps.options.crossPrefixHolder;
@@ -46602,6 +46962,7 @@ async function provisionCreate(engine, logicalId, change, stateResources, stackN
46602
46962
  ...templateAttrs,
46603
46963
  provisionedBy: createDecision.provisionedBy
46604
46964
  };
46965
+ clearCreatedReport();
46605
46966
  engine.recordInlinePolicyWrite(logicalId, "create");
46606
46967
  await establishNoEchoEchoFidelity(engine.noEchoRun, engine.noEchoDeps(), logicalId, stateResources[logicalId], resolvedProps, stateResources, createSecrets);
46607
46968
  const createCaptureSiblings = await buildObservedCaptureSiblings({
@@ -47943,7 +48304,8 @@ function identityKeyOf(...lists) {
47943
48304
  return entries.some((entry) => isPlainObject(entry) && IDENTITY_KEYS.some((candidate) => typeof entry[candidate] === "string")) ? "ambiguous" : void 0;
47944
48305
  }
47945
48306
  const POSITIONAL_LIST_KEYS = /* @__PURE__ */ new Set(["KeySchema"]);
47946
- 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));
47947
48309
  if (isPlainObject(live) && (isPlainObject(own) || isPlainObject(wanted))) {
47948
48310
  const ownBag = isPlainObject(own) ? own : void 0;
47949
48311
  const wantedBag = isPlainObject(wanted) ? wanted : void 0;
@@ -47954,10 +48316,12 @@ function projectNamed(live, own, wanted, path, unnamed) {
47954
48316
  if (IDENTITY_KEYS.includes(key)) continue;
47955
48317
  if (key === "Tags") {
47956
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;
47957
48321
  continue;
47958
48322
  }
47959
48323
  if (!Object.hasOwn(live, key) || live[key] === void 0) continue;
47960
- 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);
47961
48325
  }
47962
48326
  return out;
47963
48327
  }
@@ -47984,6 +48348,7 @@ function projectNamed(live, own, wanted, path, unnamed) {
47984
48348
  const ownEntry = ownById.get(value);
47985
48349
  const wantedEntry = wantedById.get(value);
47986
48350
  if (ownEntry === void 0 && wantedEntry === void 0) {
48351
+ if (attemptedAt(path).has(value)) return [entry];
47987
48352
  unnamed.push({
47988
48353
  identity: id,
47989
48354
  value,
@@ -47991,11 +48356,34 @@ function projectNamed(live, own, wanted, path, unnamed) {
47991
48356
  });
47992
48357
  return [];
47993
48358
  }
47994
- return [projectNamed(entry, ownEntry, wantedEntry, `${path}[${value}]`, unnamed)];
48359
+ return [projectNamed(entry, ownEntry, wantedEntry, `${path}[${value}]`, unnamed, attempted)];
47995
48360
  });
47996
48361
  }
47997
48362
  return live;
47998
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
+ }
47999
48387
  const strictReadScope = new AsyncLocalStorage();
48000
48388
  function strictFor(key) {
48001
48389
  return strictReadScope.getStore()?.has(key) === true;
@@ -48006,6 +48394,12 @@ function replicaStrictness(status) {
48006
48394
  return new Set([...current].filter((key) => key !== "Replicas"));
48007
48395
  }
48008
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
+ }
48009
48403
  function markUnsettled(...keys) {
48010
48404
  const scope = unsettledScope.getStore();
48011
48405
  if (scope === void 0) return;
@@ -48274,6 +48668,7 @@ var DynamoDBGlobalTableProvider = class {
48274
48668
  let createdTableId;
48275
48669
  try {
48276
48670
  createdTableId = (await (await this.getCreateClient()).send(new CreateTableCommand(createParams)))?.TableDescription?.TableId;
48671
+ reportCreatedResource(logicalId, resourceType, tableName, createdTableId);
48277
48672
  log.debug(`CreateTable initiated for ${log.value(tableName)}, waiting for ACTIVE`);
48278
48673
  } catch (error) {
48279
48674
  const cause = error instanceof Error ? error : void 0;
@@ -48345,6 +48740,7 @@ var DynamoDBGlobalTableProvider = class {
48345
48740
  }
48346
48741
  }
48347
48742
  await this.dynamoDBClient.send(new DeleteTableCommand({ TableName: tableName }));
48743
+ retractCreatedResource(logicalId, resourceType, tableName);
48348
48744
  } catch (cleanupErr) {
48349
48745
  tableLeftBehind = true;
48350
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());
@@ -48392,6 +48788,7 @@ var DynamoDBGlobalTableProvider = class {
48392
48788
  TableName: tableName,
48393
48789
  ReplicaUpdates: replicaUpdates
48394
48790
  }));
48791
+ markAttemptedItems("Replicas", [region]);
48395
48792
  break;
48396
48793
  } catch (error) {
48397
48794
  if (attempt >= 3 || !isReplicaCopyExistsRefusal(error)) throw error;
@@ -49045,7 +49442,8 @@ var DynamoDBGlobalTableProvider = class {
49045
49442
  async update(logicalId, physicalId, resourceType, properties, previousProperties, context) {
49046
49443
  return unsettledScope.run({
49047
49444
  mark: (key) => context?.markUnsettled?.(key),
49048
- unsettled: context?.unsettledProperties ?? /* @__PURE__ */ new Set()
49445
+ unsettled: context?.unsettledProperties ?? /* @__PURE__ */ new Set(),
49446
+ attempted: (path, items) => context?.markAttempted?.(path, items)
49049
49447
  }, () => this.updateInScope(logicalId, physicalId, resourceType, properties, previousProperties, context));
49050
49448
  }
49051
49449
  async updateInScope(logicalId, physicalId, resourceType, properties, previousProperties, context) {
@@ -49130,7 +49528,7 @@ var DynamoDBGlobalTableProvider = class {
49130
49528
  const extractLocalTags = (props) => {
49131
49529
  return localReplicaEntry(props, currentRegion)?.["Tags"];
49132
49530
  };
49133
- 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);
49134
49532
  const liveWarmByIndexName = /* @__PURE__ */ new Map();
49135
49533
  for (const liveGsi of describeResp.Table?.GlobalSecondaryIndexes ?? []) {
49136
49534
  const name = liveGsi.IndexName;
@@ -49504,6 +49902,7 @@ var DynamoDBGlobalTableProvider = class {
49504
49902
  AttributeDefinitions: newAttrs,
49505
49903
  GlobalSecondaryIndexUpdates: [gsiUpdate]
49506
49904
  }));
49905
+ markAttemptedItems("GlobalSecondaryIndexes", [gsi.IndexName]);
49507
49906
  await this.waitForTableActiveAfterUpdate(physicalId, logicalId, void 0, void 0, maskSecrets);
49508
49907
  }
49509
49908
  for (const gsi of gsiDiff.modified) {
@@ -49623,8 +50022,8 @@ var DynamoDBGlobalTableProvider = class {
49623
50022
  throw this.wrapMaskedError(log, error, (text) => new ProvisioningError(`Failed to update DynamoDB GlobalTable ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
49624
50023
  }
49625
50024
  }
49626
- async applyTagDiff(tableArn, resourceType, logicalId, oldTagsRaw, newTagsRaw, maskSecrets) {
49627
- 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);
49628
50027
  }
49629
50028
  async applyCrossRegionReplicaTagsDiff(tableArn, region, oldTags, newTags, resourceType, logicalId, physicalIdForLogs, maskSecrets = (text) => text) {
49630
50029
  const warn = (message) => this.logger.warn(maskSecrets(message));
@@ -49640,12 +50039,12 @@ var DynamoDBGlobalTableProvider = class {
49640
50039
  }
49641
50040
  try {
49642
50041
  const regionalClient = this.getRegionalClient(region);
49643
- 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);
49644
50043
  } catch (tagErr) {
49645
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.`);
49646
50045
  }
49647
50046
  }
49648
- async applyTagDiffOnClient(client, tableArn, resourceType, id, oldTagsRaw, newTagsRaw, maskSecrets = (text) => text) {
50047
+ async applyTagDiffOnClient(client, tableArn, resourceType, id, oldTagsRaw, newTagsRaw, maskSecrets = (text) => text, region) {
49649
50048
  const plan = planTagDiff(oldTagsRaw, newTagsRaw);
49650
50049
  const tagWarning = tagPlanWarning(plan, resourceType, id);
49651
50050
  if (tagWarning !== void 0) this.logger.warn(maskSecrets(tagWarning));
@@ -49667,6 +50066,15 @@ var DynamoDBGlobalTableProvider = class {
49667
50066
  ResourceArn: tableArn,
49668
50067
  Tags: tagsToAdd
49669
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
+ }
49670
50078
  this.logger.debug(maskSecrets(`Added/updated ${tagsToAdd.length} tag(s) on DynamoDB GlobalTable ${tableArn}`));
49671
50079
  }
49672
50080
  }
@@ -50086,7 +50494,7 @@ var DynamoDBGlobalTableProvider = class {
50086
50494
  throw err;
50087
50495
  }
50088
50496
  }
50089
- async readUnsettled(physicalId, logicalId, resourceType, names, recordedProperties, desiredProperties) {
50497
+ async readUnsettled(physicalId, logicalId, resourceType, names, recordedProperties, desiredProperties, attemptedItems) {
50090
50498
  const live = await strictReadScope.run(names, () => this.readCurrentState(physicalId, logicalId, resourceType, recordedProperties));
50091
50499
  if (typeof live !== "object" || live === null) return live;
50092
50500
  const out = { ...live };
@@ -50094,7 +50502,7 @@ var DynamoDBGlobalTableProvider = class {
50094
50502
  const unnamed = [];
50095
50503
  for (const name of names) {
50096
50504
  if (!Object.hasOwn(out, name)) continue;
50097
- out[name] = projectNamed(out[name], recordedProperties?.[name], desiredProperties?.[name], name, unnamed);
50505
+ out[name] = projectNamed(out[name], recordedProperties?.[name], desiredProperties?.[name], name, unnamed, attemptedItems);
50098
50506
  }
50099
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'.`);
50100
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).`);
@@ -51799,6 +52207,7 @@ async function updateByReplacement(engine, { change, counts, currentProps, curre
51799
52207
  ...extractTemplateAttributes(template, logicalId),
51800
52208
  provisionedBy: replaceDecision.provisionedBy
51801
52209
  };
52210
+ clearCreatedReport();
51802
52211
  engine.recordInlinePolicyWrite(logicalId, "create");
51803
52212
  await establishNoEchoEchoFidelity(engine.noEchoRun, engine.noEchoDeps(), logicalId, stateResources[logicalId], resolvedProps, stateResources, updateSecrets);
51804
52213
  engine.observedCapture.kickOffObservedCapture(replaceProvider, logicalId, createResult.physicalId, resourceType, resolvedProps, { afterOwnWrite: true }, updateSecrets);
@@ -51876,6 +52285,7 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
51876
52285
  const changedForProvider = new Set(changedProperties);
51877
52286
  for (const key of /* @__PURE__ */ new Set([...Object.keys(previousWithNoEchoHeld), ...Object.keys(previousForUpdate)])) if (keyOrderFreeJson(previousForUpdate[key]) !== keyOrderFreeJson(previousWithNoEchoHeld[key])) changedForProvider.add(key);
51878
52287
  const unsettled = unsettledPropertiesOf(currentResource);
52288
+ const unsettledItems = unsettledItemsOf(currentResource);
51879
52289
  if (changedForProvider.size === 0) for (const key of /* @__PURE__ */ new Set([...Object.keys(updateProps), ...Object.keys(previousForUpdate)])) changedForProvider.add(key);
51880
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`);
51881
52291
  if (droppedPrincipalKinds.length > 0) {
@@ -51893,7 +52303,8 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
51893
52303
  ...unsettledIdentity,
51894
52304
  names: unsettled,
51895
52305
  previous: previousForUpdate,
51896
- desired: updateProps
52306
+ desired: updateProps,
52307
+ attemptedItems: unsettledItems
51897
52308
  });
51898
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.`);
51899
52310
  const removal = prepareRemovalForUpdate(updateProvider, resourceType, updateProps, previousSettled);
@@ -51923,10 +52334,23 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
51923
52334
  }
51924
52335
  marks.add(propertyName);
51925
52336
  },
51926
- ...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 }
51927
52350
  })), logicalId, void 0, void 0, updateProvider);
51928
52351
  if (result.sentNothing === true) engine.replacementRun.updatesThatSentNothing.add(logicalId);
51929
52352
  engine.unsettledMarks.delete(logicalId);
52353
+ engine.unsettledItemMarks.delete(logicalId);
51930
52354
  if (result.wasReplaced === true && result.outcome === "partial") engine.replacementRun.replacedOldMaySurvive.set(logicalId, result.oldResourceSurvivor === "kept" ? "kept" : "unconfirmed");
51931
52355
  result = withoutInjectedRemovals(result, removal.injected);
51932
52356
  const unhandledByCause = splitUnhandledRemovals(removal.unhandled, previousForUpdate, unsettled);
@@ -52112,6 +52536,7 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
52112
52536
  generation: fallbackGeneration
52113
52537
  }, replaceFallback));
52114
52538
  engine.unsettledMarks.delete(logicalId);
52539
+ engine.unsettledItemMarks.delete(logicalId);
52115
52540
  result = fallbackOutcome.result;
52116
52541
  resultProvisionedBy = fallbackOutcome.provisionedBy;
52117
52542
  captureProvider = fallbackOutcome.captureProvider;
@@ -52135,7 +52560,8 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
52135
52560
  const stillUnsettled = result.wasReplaced ? [] : await unsettledAfterUpdate({
52136
52561
  ...unsettledIdentity,
52137
52562
  names: unsettled,
52138
- desired: updateProps
52563
+ desired: updateProps,
52564
+ attemptedItems: unsettledItems
52139
52565
  });
52140
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.`);
52141
52567
  engine.replacementRun.updateWasReplaced.set(logicalId, result.wasReplaced === true);
@@ -52174,12 +52600,16 @@ async function updateInPlace(engine, { changedProperties, conditions, counts, cu
52174
52600
  ...dependencies && dependencies.length > 0 && { dependencies },
52175
52601
  ...extractTemplateAttributes(template, logicalId),
52176
52602
  provisionedBy: resultProvisionedBy,
52177
- ...stillUnsettled.length > 0 && { unsettledProperties: stillUnsettled },
52603
+ ...stillUnsettled.length > 0 && {
52604
+ unsettledProperties: stillUnsettled,
52605
+ ...unsettledItemsField(currentResource, stillUnsettled)
52606
+ },
52178
52607
  ...keepsParameterRefusal && {
52179
52608
  observedBaselineRefused: true,
52180
52609
  observedBaselineRefusalReason: "unverifiable-parameter"
52181
52610
  }
52182
52611
  };
52612
+ clearCreatedReport();
52183
52613
  if (updatePartialReason(result) === void 0) engine.recordInlinePolicyWrite(logicalId, "update");
52184
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.`);
52185
52615
  const updateCaptureSiblings = keepsParameterRefusal ? void 0 : await buildObservedCaptureSiblings({
@@ -53036,7 +53466,7 @@ async function provisionResource(engine, logicalId, change, stateResources, stac
53036
53466
  let nestedChildUnaddressed;
53037
53467
  const deleteGuards = [];
53038
53468
  try {
53039
- await withPrintingSecrets(printingRegistry, () => withResourceDeadline(async () => {
53469
+ await withPrintingSecrets(printingRegistry, () => withResourceDeadline(trackInFlightBody(engine, logicalId, async () => {
53040
53470
  try {
53041
53471
  const { value: bodyResult, unaddressed } = await collectDeleteGuards(deleteGuards, () => collectNestedChildUnaddressed(() => provisionResourceBody(engine, logicalId, change, stateResources, stackName, template, parameterValues, conditions, counts, progress)));
53042
53472
  deleteSkipped = bodyResult?.deleteSkipped;
@@ -53068,7 +53498,7 @@ async function provisionResource(engine, logicalId, change, stateResources, stac
53068
53498
  reason: guard.reason
53069
53499
  });
53070
53500
  }
53071
- }, {
53501
+ }), {
53072
53502
  warnAfterMs,
53073
53503
  timeoutMs,
53074
53504
  onWarn: (elapsedMs) => {
@@ -53146,6 +53576,17 @@ async function provisionResource(engine, logicalId, change, stateResources, stac
53146
53576
  renderer.removeTask(logicalId);
53147
53577
  }
53148
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
+ }
53149
53590
  async function provisionResourceBody(engine, logicalId, change, stateResources, stackName, template, parameterValues, conditions, counts, progress) {
53150
53591
  const loadJournal = () => engine.stateBackend.loadRollbackJournal(stackName, engine.stackRegion);
53151
53592
  const priorAttempts = priorAttemptLookup(logicalId, async () => priorAttemptsInJournal(await loadJournal(), logicalId, change.resourceType), async () => provenOrphanIdsInJournal(await loadJournal(), logicalId, change.resourceType));
@@ -53181,6 +53622,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53181
53622
  };
53182
53623
  const completedOperations = [];
53183
53624
  const failedOperations = [];
53625
+ const reportedCreatesToSettle = [];
53184
53626
  let pendingMigration = migrationPending;
53185
53627
  const phaseScope = phaseScopeForStack(stackName, engine.stackRegion);
53186
53628
  let saveChain = Promise.resolve();
@@ -53198,7 +53640,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53198
53640
  const savedFor = savedIds.join(", ");
53199
53641
  try {
53200
53642
  const partialState = {
53201
- version: 14,
53643
+ version: 15,
53202
53644
  region: engine.stackRegion,
53203
53645
  stackName: currentState.stackName,
53204
53646
  resources: newResources,
@@ -53315,9 +53757,10 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53315
53757
  settle
53316
53758
  });
53317
53759
  let succeeded = false;
53760
+ const createdSink = new CreatedResourceSink(logicalId, change.resourceType);
53318
53761
  try {
53319
53762
  try {
53320
- 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}`);
53321
53764
  settledUpdates.add(logicalId);
53322
53765
  succeeded = true;
53323
53766
  } finally {
@@ -53332,10 +53775,11 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53332
53775
  const attemptedGeneration = change.changeType === "UPDATE" && !refused && !isReplacementNameRefusal(provisionError, logicalId) ? engine.replacementRun.attemptedNameGeneration.get(logicalId) : void 0;
53333
53776
  const statePhysicalId = newResources[logicalId]?.physicalId ?? previousState?.physicalId;
53334
53777
  if (refused && change.changeType === "CREATE" && statePhysicalId === void 0) throw provisionError;
53335
- 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;
53336
53780
  const heldRecord = newResources[logicalId] ?? previousState;
53337
53781
  const replaced = change.changeType === "UPDATE" && !NO_REPLACEMENT_ORPHAN_TYPES.has(change.resourceType) && statePhysicalId !== void 0 && statePhysicalId !== "" && heldRecord?.physicalId === statePhysicalId ? heldRecord : void 0;
53338
- const replacementCreatedId = replaced ? createdBeforeFailure(provisionError, logicalId, change.resourceType) : void 0;
53782
+ const replacementCreatedId = replaced ? markedCreatedId : void 0;
53339
53783
  const orphanedBy = replaced !== void 0 && replacementCreatedId !== void 0 && replacementCreatedId !== replaced.physicalId ? {
53340
53784
  record: replaced,
53341
53785
  createdId: replacementCreatedId
@@ -53371,34 +53815,17 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53371
53815
  if (attemptedGeneration !== void 0 && heldNow !== void 0) newResources[logicalId] = withNameGenerationReached(heldNow, logicalId, attemptedGeneration);
53372
53816
  let replacementOrphanOp;
53373
53817
  if (orphanedBy !== void 0) {
53374
- replacementOrphanOp = {
53375
- logicalId,
53376
- changeType: "CREATE",
53377
- resourceType: change.resourceType,
53378
- provisionedBy: "sdk",
53379
- physicalId: orphanedBy.createdId,
53380
- physicalIdRecoveredFromError: true,
53381
- deletionPolicy: journaledOrphanPolicy(extractTemplateAttributes(template, logicalId).deletionPolicy),
53382
- replacedPhysicalId: orphanedBy.record.physicalId,
53383
- replacedResourceType: orphanedBy.record.resourceType,
53384
- ...engine.replacementRun.oldDeletedBeforeCreate.has(logicalId) && { replacedResourceDeleted: true },
53385
- ...!refused && { attemptedProperties: engine.attemptedResolvedProps.get(logicalId) }
53386
- };
53818
+ replacementOrphanOp = replacementOrphanOpFor(engine, template, logicalId, change.resourceType, orphanedBy.record, orphanedBy.createdId, refused);
53387
53819
  failedOperations.push(replacementOrphanOp);
53388
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
+ });
53389
53827
  const orphanOp = createdId !== void 0 ? failedOp : replacementOrphanOp;
53390
- if (orphanOp?.physicalId !== void 0 && orphanOp.deletionPolicy !== "Retain" && orphanNeedsIdentity(orphanOp)) {
53391
- const markedIdentity = createdResourceIdentityBeforeFailure(provisionError, logicalId, change.resourceType);
53392
- if (markedIdentity !== void 0) orphanOp.createdResourceIdentity = markedIdentity;
53393
- else if (engine.interruptCause !== "user") {
53394
- const identity = await readResourceIdentity(engine.providerRegistry, {
53395
- resourceType: orphanOp.resourceType,
53396
- physicalId: orphanOp.physicalId,
53397
- provisionedBy: orphanOp.provisionedBy
53398
- }, engine.stackRegion);
53399
- if (typeof identity === "string") orphanOp.createdResourceIdentity = identity;
53400
- }
53401
- }
53828
+ if (orphanOp !== void 0) await journalOrphanIdentity(engine, orphanOp, createdResourceIdentityBeforeFailure(provisionError, logicalId, change.resourceType));
53402
53829
  throw provisionError;
53403
53830
  }
53404
53831
  completedOperations.push({
@@ -53549,9 +53976,10 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53549
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));
53550
53977
  }
53551
53978
  }
53979
+ await settleReportedCreates(engine, template, failedOperations, reportedCreatesToSettle);
53552
53980
  try {
53553
53981
  const preRollbackState = {
53554
- version: 14,
53982
+ version: 15,
53555
53983
  region: engine.stackRegion,
53556
53984
  stackName: currentState.stackName,
53557
53985
  resources: newResources,
@@ -53592,7 +54020,15 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53592
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.")}`);
53593
54021
  } else {
53594
54022
  autoRollbackJournaled = await writeRollbackJournalSegment(engine.rollbackDeps(), stackName, completedOperations, failedOperations, "auto-rollback-started", initialDeploy);
53595
- 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
+ });
53596
54032
  autoRollbackClean = autoRollbackJournaled && rollbackResult.failures === 0 && rollbackResult.skipped === 0 && !rollbackResult.interrupted;
53597
54033
  if (rollbackResult.interrupted && rollbackResult.failures === 0 && rollbackResult.skipped === 0) {
53598
54034
  const remedy = autoRollbackJournaled ? recoveryHint(engine.rollbackDeps(), "The rollback journal keeps them; finish the rollback with: " + pasteableCommand("cdkd rollback", [{
@@ -53617,7 +54053,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53617
54053
  recordUnsettledMarks(engine, newResources);
53618
54054
  try {
53619
54055
  const postRollbackState = {
53620
- version: 14,
54056
+ version: 15,
53621
54057
  region: engine.stackRegion,
53622
54058
  stackName: currentState.stackName,
53623
54059
  resources: newResources,
@@ -53640,7 +54076,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53640
54076
  const freshEtag = (await engine.stateBackend.getState(stackName, engine.stackRegion))?.etag;
53641
54077
  recordUnsettledMarks(engine, newResources);
53642
54078
  const postRollbackState = {
53643
- version: 14,
54079
+ version: 15,
53644
54080
  region: engine.stackRegion,
53645
54081
  stackName: currentState.stackName,
53646
54082
  resources: newResources,
@@ -53677,7 +54113,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53677
54113
  }
53678
54114
  return {
53679
54115
  state: {
53680
- version: 14,
54116
+ version: 15,
53681
54117
  region: engine.stackRegion,
53682
54118
  stackName: currentState.stackName,
53683
54119
  resources: newResources,
@@ -53696,7 +54132,7 @@ async function executeDeployment(engine, template, currentState, changes, dag, e
53696
54132
  }
53697
54133
  async function persistStateAfterOutputFailure(engine, stackName, currentState, newResources, currentEtag, pendingMigration) {
53698
54134
  const buildState = () => ({
53699
- version: 14,
54135
+ version: 15,
53700
54136
  region: engine.stackRegion,
53701
54137
  stackName: currentState.stackName,
53702
54138
  resources: newResources,
@@ -53735,6 +54171,73 @@ function recordUnsettledMarks(engine, newResources, only) {
53735
54171
  if (only !== void 0 && logicalId !== only) continue;
53736
54172
  if (marks.size === 0 || !Object.hasOwn(newResources, logicalId)) continue;
53737
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;
53738
54241
  }
53739
54242
  }
53740
54243
 
@@ -53778,7 +54281,7 @@ async function doDeployWithPrefetch(engine, stackName, template, createOnlyPrefe
53778
54281
  clock.lap("state load");
53779
54282
  noteDeployStateRecord(currentStateData?.state !== void 0);
53780
54283
  const currentState = currentStateData?.state ?? {
53781
- version: 14,
54284
+ version: 15,
53782
54285
  region: engine.stackRegion,
53783
54286
  stackName,
53784
54287
  resources: {},
@@ -54081,7 +54584,7 @@ async function doDeployWithPrefetch(engine, stackName, template, createOnlyPrefe
54081
54584
  await resolveStackInstanceId();
54082
54585
  try {
54083
54586
  const refreshedState = {
54084
- version: 14,
54587
+ version: 15,
54085
54588
  region: engine.stackRegion,
54086
54589
  stackName: currentState.stackName,
54087
54590
  resources: currentState.resources,
@@ -54370,6 +54873,8 @@ var DeployEngine = class {
54370
54873
  outputsRun = new OutputsRunState();
54371
54874
  attemptedResolvedProps = /* @__PURE__ */ new Map();
54372
54875
  unsettledMarks = /* @__PURE__ */ new Map();
54876
+ unsettledItemMarks = /* @__PURE__ */ new Map();
54877
+ inFlightBodies = /* @__PURE__ */ new Map();
54373
54878
  resumedCreates = /* @__PURE__ */ new Map();
54374
54879
  generatedNameGuard;
54375
54880
  liveTaskLabels = /* @__PURE__ */ new Map();
@@ -54563,6 +55068,7 @@ var DeployEngine = class {
54563
55068
  this.replacementRun = new ReplacementRunState();
54564
55069
  this.attemptedResolvedProps = /* @__PURE__ */ new Map();
54565
55070
  this.unsettledMarks = /* @__PURE__ */ new Map();
55071
+ this.unsettledItemMarks = /* @__PURE__ */ new Map();
54566
55072
  this.resumedCreates = /* @__PURE__ */ new Map();
54567
55073
  this.generatedNameGuard = void 0;
54568
55074
  this.liveTaskLabels = /* @__PURE__ */ new Map();
@@ -54767,5 +55273,5 @@ function sameGenerationClaimsOf(record) {
54767
55273
  }
54768
55274
 
54769
55275
  //#endregion
54770
- 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 };
54771
- //# sourceMappingURL=deploy-engine-tQ0aqZMo.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