@go-to-k/cdkd 0.298.1 → 0.298.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/dist/{asg-provider-semUK44T.js → asg-provider-CvJsMScM.js} +2 -2
  2. package/dist/{asg-provider-semUK44T.js.map → asg-provider-CvJsMScM.js.map} +1 -1
  3. package/dist/cli.js +2 -2
  4. package/dist/{deploy-engine-A-Ys_mhE.js → deploy-engine-DLGCuN4i.js} +131 -12
  5. package/dist/deploy-engine-DLGCuN4i.js.map +1 -0
  6. package/dist/{iam-role-provider-CpqTal4K.js → iam-role-provider-B020NDGS.js} +2 -2
  7. package/dist/{iam-role-provider-CpqTal4K.js.map → iam-role-provider-B020NDGS.js.map} +1 -1
  8. package/dist/index.d.ts +11 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -2
  11. package/dist/{neptune-provider-C4A86Y7P.js → neptune-provider-DDFjTv9k.js} +2 -2
  12. package/dist/{neptune-provider-C4A86Y7P.js.map → neptune-provider-DDFjTv9k.js.map} +1 -1
  13. package/dist/{program-D5gcmWad.js → program-BQnReLnG.js} +105 -51
  14. package/dist/program-BQnReLnG.js.map +1 -0
  15. package/dist/{provider-classes-CuZ-P4gB.js → provider-classes-BTP4rLU6.js} +228 -91
  16. package/dist/provider-classes-BTP4rLU6.js.map +1 -0
  17. package/dist/{rds-provider-X4mc-nGw.js → rds-provider-DcfF-k86.js} +2 -2
  18. package/dist/{rds-provider-X4mc-nGw.js.map → rds-provider-DcfF-k86.js.map} +1 -1
  19. package/dist/{version-CItAaDXu.js → version-CWATUXWX.js} +2 -2
  20. package/dist/{version-CItAaDXu.js.map → version-CWATUXWX.js.map} +1 -1
  21. package/package.json +2 -2
  22. package/dist/deploy-engine-A-Ys_mhE.js.map +0 -1
  23. package/dist/program-D5gcmWad.js.map +0 -1
  24. package/dist/provider-classes-CuZ-P4gB.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { a as runWithStackAwsClients, i as resetAwsClients, o as setAwsClients, t as AwsClients } from "./aws-clients-CnmtbrxD.js";
2
2
  import { A as UNRENDERABLE, B as stringifyJsonPayload, D as SAFE_MSG_ALTERED_CHAR, F as displayStackName, H as truncateCodePoints, I as isPasteableIdent, M as displayAwsMessage, N as displayIdent, O as SECRET_REF_MAX_CODE_POINTS, P as displaySafe, R as plainIdentOr, T as withStackName, _ as derivesPatternBName, a as getLogger, f as getLiveRenderer, h as PATTERN_B_RESOURCE_TYPES, j as cutMarker, k as STACK_REF_MAX_CODE_POINTS, l as runStackBuffered, m as PATTERN_B_NAME_PROPERTIES, o as isStdoutReservedForPayload, p as PATTERN_B_NAME_OPTIONS, r as safeStringify, s as reserveStdoutForPayload, t as describeAwsFailure, v as explicitNamePropertyFor, w as withSkipPrefix, y as generateResourceName, z as safeMsg } from "./aws-failure-text-DtvlUugx.js";
3
3
  import { $n as isAmbiguousOutcomeError, $t as credentialFingerprint, Bn as withheldTargetClause, D as VALUE_NOT_SHOWN, Dn as TIMEOUT_FLAG_RESOURCE_TYPE, E as assertRegionMatch, En as withErrorHandling, Ft as buildLockContentionMessage, G as runDeleteAttempt, Hn as setPasteableVerbFlags, Ht as CUSTOM_RESOURCE_RESPONSE_PREFIX, In as plainOrDescribed, It as forceQuitRecoveryClause, Jt as setPasteableAwsProfile, Kt as producerCoordinateKey, Ln as quotedOrDescribed, Lt as formatLockExpiry, Nn as isInertUnquoted, Nt as UNREPRODUCIBLE_LOCK_CLAUSE, P as remedyLogicalId, Pn as pasteableCommand, Pt as buildForceUnlockCommand, Qt as clientDefaultsFor, Rn as shellBoundedDisplay, Rt as formatLockOperation, Sn as SynthesisError, T as RESOURCE_NOT_FOUND, Tn as normalizeAwsError, Ut as DEFAULT_STATE_PREFIX, Vn as setPasteableRunFlags, Wt as injectiveKey, Xt as ambientClientDefaults, Yt as withPasteableAwsProfile, Z as isAwsCliLiteral, Zt as ambientCredentialConfig, _n as ResourceTimeoutError, ar as isMarkedNonRetryable, bn as StackTerminationProtectionError, cn as IntrinsicResolutionRefusalError, en as AccountIdUnavailableError, ft as logicalIdShown, gn as ProvisioningError, hn as PartialFailureError, in as CrossAccountSecretRefusalError, it as isInterruptedWaitError, jn as commandHole, kn as SHELL_ACTIVE_WHY, ln as LocalInvokeBuildError$1, mn as NestedStackChildDirectDestroyError, mt as resourceTypeShown, n as RESOLVED_PREVIOUS_PRINCIPAL_KEYS, nn as CdkdError, nr as isTransientServerError, nt as endCommandInterruptScope, on as DeployCancelledError, or as isThrottlingError, pn as MalformedProducerRecordRefusalError, qt as producerRecordKey, rr as retryClassificationText, rt as interruptWatchListenerCount, s as readRecordedPrincipals, sn as DynamicReferenceRegionAmbiguousError, sr as markNonRetryable, t as IAM_PRINCIPAL_NAME, tr as isRetryableTransientError, tt as beginCommandInterruptScope, un as LocalStartServiceError, vn as ResourceUpdateNotSupportedError, yn as StackHasActiveImportsError, zn as shellQuote, zt as formatLockOwner } from "./iam-policy-targets-CwKiK9nS.js";
4
- import { n as awsClientDefaults, r as getAssumedRoleCredentials, u as formatAuthority } from "./aws-client-defaults-D0q0z4dG.js";
5
- import { $a as isStatefulRecreateTargetForReplace, $c as CFN_TEMPLATE_BODY_LIMIT, $i as malformedOrphansRefusalMessage, $n as ledgerForStack, $o as markSameGenerationBag, $r as sendableAssumeRoleCommand, $s as isSensitiveAttributeName, $t as seedsDeleteFirstGuard, A as noEchoComparisonForTemplate, Aa as refuseMalformedResourcesForDeploy, Ac as redactedDockerCause, Ai as declaresNoEcho, An as journaledOrphanPrintingBag, Ao as maskWholeValue, Ar as deleteIndeterminateGuards, As as isLockInfoExpired, At as dropFailedHint, Ba as unpreviewableOrphanRecords, Bc as getDefaultStateBucketName, Bi as hasReadableOutputs, Bn as PRE_DELETE_SNAPSHOT_TYPES, Bo as carryLogOnlyValues, Bs as acceptedCreateOnlyDropsOf, C as recordRetainedForReadoption, Ca as refuseMalformedResourceEntriesForImport, Cc as finchSecretArgvRefusal, Ci as cfnRefValueFromPhysicalId, Cn as collectDeclaredOutputNames, Cr as applyCustomResourceResponseExpiration, Cs as STATE_SOURCED_BASELINE_RULES, D as withResourceDeadline, Da as refuseMalformedResourcePropertiesForDrift, Dc as isMalformedEnvKey, Di as withSharedDrainBudget, Dn as DEFAULT_RESOURCE_TIMEOUT_MS, Do as isMarkedCoordinate, Ds as WHOLE_DYNAMIC_REFERENCE_PATTERN, E as serviceTokenBlockingReason, Ea as refuseMalformedResourcePropertiesForDestroy, Ec as isDockerClientEnvKey, En as bindingSkippedOutputs, Eo as canonicalCoordinates, Er as slowCcOperationTimeoutMs, Es as TEMPLATE_SOURCED_RULES, Et as collectNestedChildUnaddressed, F as PROTECTION_PROPERTY_BY_TYPE, Fa as repairMalformedOrphansForReadOnly, Fc as stripControlChars, Fi as UNREADABLE_RESOURCES_MAP_ROW, Fn as secretNamedRecordNeedles, Fs as applyCrossPrefixScan, Ft as sameJournaledOrphans, Gc as resolveCaptureObservedState, Gi as malformedExportNamesWarning, Gn as isFinalSnapshotError, Go as printingCorpusOf, Gr as poisonRenderedSpellingsCollidingIn, Gs as hasUnverifiableParameterRefusal, Gt as isJournaledOrphan, Ha as unreadableResourceEntries, Hc as loadCdkJson, Hi as isReadableOrphanRecord, Hn as ccRoutedFinalSnapshotError, Ho as hasMaskableValues, Hr as DiffCalculator, Hs as exportNamesCarriedFrom, Ht as removeProtectionTypeList, I as isProtectionValueActive, Ia as repairMalformedOutputsForReadOnly, Ic as AssetManifestLoader, Ii as accountArgs, In as stateSecretNameNeedles, Io as readbackPathFor, Is as crossPrefixDeniedWarning, It as replayFailedOperations, Ja as NO_CC_HANDLERS_REASON, Jc as resolveStateBucketWithDefaultAndSource, Ji as malformedLocalResourceEntriesWarning, Jn as maskingRetryLogger, Jo as shareLogOnlyValues, Jr as applyRoleArnIfSet, Js as isReadableBag, Jt as planRollback, Ka as unwrittenCreateOnlyReplacement, Kc as resolveSkipPrefix, Ki as malformedExportSourceWarning, Kn as refusesFinalSnapshot, Ko as recordLogOnlyParameterValue, Kr as producerLookupOver, Ks as importableOutputKeys, Kt as isReplacementOrphan, L as perType, La as repairMalformedResourceEntriesForReadOnly, Lc as getDockerImageBySourceHash, Li as deployRefusesOrphanRowsReason, Ln as storedSecretNameNeedles, Lo as readsNoEchoSource, Ls as isAccessDenied, Lt as replayRollback, M as noEchoParameterNamesOf, Ma as refuseMalformedResourcesForExport, Mc as runDockerStreaming, Mi as STATE_REGION_DIVERGED, Mn as orphanRecordsPrintingBag, Mo as noEchoCoordinatesOf, Mr as deleteSkipReason, Ms as rebuildClientForBucketRegion, Mt as journaledOrphanLines, N as recordedProtectionEvidence, Na as refuseMalformedState, Nc as warnFinchArgvExposure, Ni as STATE_RESOURCES_MALFORMED, Nn as secretNamePrintingBag, No as noEchoLeavesOf, Ns as CrossPrefixReadError, Nt as loadJournaledOrphans, O as diffSecurity, Oa as refuseMalformedResourcePropertiesForExport, Oc as partitionSensitiveEnv, Oi as parameterInputsFor, On as DEFAULT_RESOURCE_WARN_AFTER_MS, Oo as maskAtCoordinates, Or as RollbackInlinePolicyWriters, Os as isSingleDynamicReferenceToken, Ot as withNestedStackContext, P as recordedProtectionNote, Pa as repairMalformedOrphanRecordsForReadOnly, Pc as escapeRegExp, Pi as UNREADABLE_ORPHANS_CONTAINER_ROW, Pn as secretNamePrintingBags, Po as noEchoOutputsComparison, Pr as isWaitAbandonedError, Ps as CrossPrefixScanCache, Pt as makeForeignHolderScan, Qa as MULTI_REGION_RECREATE_BLOCKED_TYPES, Qc as ssmResolvedValueType, Qi as malformedOrphanRowsKeptWarning, Qo as maskSecretsInText, Qr as isIamRoleArn, Qs as AssetPublisher, Qt as resolveReplacementOldType, R as readProtection, Ra as repairMalformedResourcePropertiesForReadOnly, Rc as Synthesizer, Ri as displayLogicalId, Rn as extractDeploymentEventError, Ro as valueAtCoordinate, Rs as isNotImplemented, S as keptForReadoption, Sa as refuseMalformedResourceEntriesForDestroy, Sc as dockerSpawnEnvWithSensitive, Si as AWS_NO_VALUE, Sl as resolveAssemblyPath, Sn as noEchoParameterValueSeed, Sr as CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID, Ss as wholeStringLeavesOf, St as recordDisplacedSkips, T as findServiceTokenRefusals, Ta as refuseMalformedResourceEntriesForOrphan, Tc as getDockerCmd, Ti as refStateLookupFromResource, Tn as isExportAliasCollision, To as TemplateParser, Tr as CloudControlProvider, Ts as STATE_SOURCED_READBACK_RULES, Tt as withNestedRevertRun, Ua as withheldAccountClause, Uc as resolveApp, Ui as isReadableResourceEntry, Un as createPreDeleteFinalSnapshot, Uo as literalSplitDelimitersOf, Ur as INTRINSIC_KEYS, Us as hasReadableExportSet, Ut as recordAfterRollbackUpdate, Va as unreadableOrphanRecords, Vc as getLegacyStateBucketName, Vi as hasReadableResources, Vn as buildFinalSnapshotIdentifier, Vo as createUnionSecretMasker, Vs as describeRegionValueKind, Vt as withStackRecords, Wa as findActionableSilentDrops, Wc as resolveAutoAssetStorage, Wi as malformedDriftResourcePropertiesWarning, Wn as effectiveDeletionPolicy, Wo as logOnlyValueCount, Wr as IntrinsicFunctionResolver, Ws as hasReasonlessBaselineRefusal, Wt as demoteSupersededOrphans, Xa as findReplacedReadersOfRecreateTargets, Xc as stateBucketExistenceConfirmed, Xi as malformedOrphanRecordsRefusalMessage, Xn as findDestructiveChanges, Xo as errorCauseChain, Xr as assertSendableRoleArn, Xs as orphansCarriedFrom, Xt as recordUnderIdIsNotOwn, Ya as hasNoCloudControlHandlers, Yc as resolveUseCdkBootstrapAssets, Yi as malformedLocalResourcesWarning, Yn as constructPathOf, Yo as createSecretMasker, Yr as assertFlagRoleArn, Ys as orphansAfterRollback, Yt as recheckFailedPlan, Za as shownType, Zc as warnDeprecatedNoPrefixCliFlag, Zi as malformedOrphanRecordsWarning, Zn as formatDestructiveChange, Zo as maskSecretsInError, Zr as explicitRoleArnOrThrow, Zs as shouldRetainResource, Zt as replacementNeverSwapped, _ as makeCanonicalizePropertiesFn, _a as refuseMalformedOutputs, _c as buildDockerImage, _i as isImpossibleEmptyStoredAttribute, _l as ownValue, _n as secretSafeKeyDisplay, _o as prefetchCreateOnlyPropertyPaths, _r as TemplateNoEchoReresolver, _s as recordMaskOnlyValue, _t as displacedOpClause, a as findNestedTemplateTreeDefect, aa as malformedResourcePropertiesWarning, ac as rewriteTemplateAssetReferences, al as decodeListingKey, as as dynamicReferenceTokens, at as cyan, ba as refuseMalformedResourceEntries, bc as describeDockerExecFailure, bi as isNamelessDynamicReferenceError, bl as displayAssemblyPath, bn as exportNameSecretExposure, bo as withRetry, bs as recordNoEchoParameterFreshValue, c as renderNestedTemplateTreeDefect, ca as malformedStateRefusalMessage, cc as assertAssetBucketRegion, cl as canonicalizeRegion, cn as updatePartialMessage, cs as identityKeyFor, ct as red, d as conditionInputsFrom, dc as isCrossRegionRedirect, di as producerRegionsFromState, dl as StageLoadError, dn as DeploymentEventsStore, dt as namesAnyDeclaredParameter, ea as malformedOrphansWarning, ec as stringifyValue, ei as AWS_CREDENTIAL_ENV_KEYS, el as CFN_TEMPLATE_URL_LIMIT, en as orphanDeleteNeedsIdentity, eo as isStatefulRecreateTargetSync, es as redactSecretsForState, f as parentSuppliedValues, fa as refuseMalformedOrphanRecords, fc as parseBootstrapMarker, fi as regionLessSecretName, fl as processStackMessages, fn as WITHHELD_NAME_DISPLAY, fr as CC_BROKEN_REASON, fs as physicalNameCopiesOf, ft as reachableDivergentParameters, g as mergeNoChangeOutputs, ga as refuseMalformedOrphansForOrphan, gc as buildDenyExternalAccessPolicy, gi as getAccountInfo, gl as nullPrototypeRecord, gn as secretBearingStateKeyWarning, gr as wouldReturnToSdkProvider, gs as provenPublicValue, gt as NESTED_PENDING_PARENT_REASON, h as keptWholeReasonText, ha as refuseMalformedOrphansForDestroy, hc as validateContainerRepoName, hi as parameterTypeMayLoseSecretIdentity, hl as hasPlainPrototype, hn as secretBearing, hr as isCustomResource, hs as carriesSecretMask, ht as planOrphanAdoption, i as childTemplateLoader, ia as malformedResourceEntriesWarning, ic as loadPublishableAssetManifest, il as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, is as DYNAMIC_REFERENCE_TOKEN_SCAN, it as bold, j as noEchoExactEchoLeavesOf, ja as refuseMalformedResourcesForDestroy, jc as runDockerForeground, ji as JSON_LISTING_HOLE_VALUE, jn as maskEventTextWithBoundBags, jo as maskedLeafCoordinatesOf, jr as deleteLeftInPlace, js as S3StateBackend, jt as isHandledOrphan, k as noEchoAttributeNamesOf, ka as refuseMalformedResourcePropertiesForOrphan, kc as redactDockerArgvValues, kn as completedReplayEntries, ko as maskReadbackAtCoordinates, kr as UNSPECIFIED_SKIP_REASON, ks as LockManager, kt as deleteJournaledOrphans, l as templateIdentity, la as previewableOrphanRecords, lc as ensureAssetStorage, ll as derivePartitionAndUrlSuffix, ln as updatePartialReason, ls as inheritNestedStackParameterAssociations, lt as yellow, m as isSecretBearingReferenceString, ma as refuseMalformedOrphans, mc as validateAssetBucketName, mi as isUnboundTemplateParameter, ml as hasOwnKey, mn as exportAliasCollisionScrubWarning, mr as ccBrokenReason, ms as splitGetAttStringForm, mt as makeSiblingClaimReader, n as IMPLICIT_DELETE_DEPENDENCIES, na as malformedOutputsWarning, nc as buildAssetRedirectMap, ni as callerEnvCredentials, nl as findLargeInlineResources, ns as withPhysicalNameCopies, nt as formatResourceLine, o as isAbsoluteAssetPath, oa as malformedResourcesWarning, oc as AssetModeResolver, ol as expectedOwnerParam, os as isUncertifiedBaselineMaskPosition, ot as gray, p as readRecordedConditionVerdicts, pa as refuseMalformedOrphanRecordsForDestroy, pc as readBootstrapMarkerBody, pi as coerceParameterTypedValue, pl as defineOwnKey, pn as displayTextOrWithheld, pr as ProviderRegistry, ps as recordPhysicalNameCopy, pt as resourcesNamingDeclaredParameter, qc as resolveStateBucketWithDefault, qi as malformedLocalOutputsWarning, qn as unsupportedFinalSnapshotError, qo as recordLogOnlyValue, qr as refuseUnreadableCdkCrossAccountRefs, qs as importableOutputs, qt as planFailedOps, r as computeImplicitDeleteEdges, ra as malformedRenderedContainersWarning, rc as createAssetRedirectResolver, ri as envCredentialsAreAssumedRole, rl as uploadCfnTemplate, rn as inheritProducerRegions, rt as createReadOnlyAttributeHealerFactory, s as listNestedTemplateRows, sa as malformedScrubResourceEntriesRefusalMessage, sc as BOOTSTRAP_MARKER_PREFIX, sl as PARTITION_TABLE, ss as pathCrossesDottedKey, st as green, t as DeployEngine, ta as malformedOutputsRefusalMessage, tc as WorkGraph, ti as applyCallerIdentityCredentials, tl as MIGRATE_TMP_PREFIX, tn as findNestedStackTypeChanges, to as renderStatefulReason, tr as withCreateTokenLedger, ts as scrubResourceRecord, u as conditionFingerprint, ua as refuseDivergentRecordRegionForDestroy, uc as getBootstrapMarkerKey, ui as classifyReplaySecretRegion, ul as AssemblyReader, un as DeploymentEventsReader, us as recordNestedStackParameterExpressions, ut as computeParameterTaint, va as refuseMalformedOutputsForDestroy, vc as resolveDockerContextDirectory, vi as carriesDynamicReference, vl as absoluteAssemblyPathEscape, vn as carriedExportAliasExposure, vo as templateResourceTypes, vr as readsNoEchoDeleteValues, vs as recordMaskOnlyValuesIn, vt as displacedPhysicalIdShown, w as deferredServiceTokenWarning, wa as refuseMalformedResourceEntriesForImportSave, wc as formatDockerLoginError, wi as isStalePlaceholderArnAttribute, wl as resolveBucketRegion, wn as collectPublishedOutputNames, wo as DagBuilder, wr as customResourceResponseExpirationWarning, ws as STATE_SOURCED_CROSS_GENERATION_RULES, wt as revertedNestedRowIds, xa as refuseMalformedResourceEntriesForDeploy, xc as describeDockerFailure, xi as keepsSecretReferenceToken, xl as renderAssemblyPathEscape, xn as isWholeDynamicReferenceValue, xr as withPrintingSecrets, xs as recordProvenPublicExpression, xt as nestedChildStackName$1, ya as refuseMalformedResourceAttributesForOrphan, yc as describeDockerCapturedOutput, yi as carriesFetchableDynamicReference, yl as describeFileReadFailure, yn as exportNameNoEchoParameters, yo as describeTypeWithThrottleRetry, yr as isCustomResourceType$1, ys as recordNoEchoAttributeValues, yt as dropSettledNestedJournals, za as repairMalformedResourcesForReadOnly, zc as synthesisStatusMessage, zi as hasReadableOrphans, zn as ATOMIC_FINAL_SNAPSHOT_TYPES, zo as liveMatchesUnresolvedTokenFrame, zs as splitImportedOps, zt as destroyStackRecordsView } from "./deploy-engine-A-Ys_mhE.js";
6
- import { t as getCdkdVersion } from "./version-CItAaDXu.js";
4
+ import { a as setAssumedRoleCredentials, n as awsClientDefaults, r as getAssumedRoleCredentials, u as formatAuthority } from "./aws-client-defaults-D0q0z4dG.js";
5
+ import { $a as isStatefulRecreateTargetForReplace, $c as warnDeprecatedNoPrefixCliFlag, $i as malformedOrphansRefusalMessage, $n as ledgerForStack, $o as markSameGenerationBag, $r as sendableAssumeRoleCommand, $s as AssetPublisher, $t as seedsDeleteFirstGuard, A as noEchoComparisonForTemplate, Aa as refuseMalformedResourcesForDeploy, Ac as redactDockerArgvValues, Ai as declaresNoEcho, An as journaledOrphanPrintingBag, Ao as maskWholeValue, Ar as deleteIndeterminateGuards, As as LockManager, At as dropFailedHint, Ba as unpreviewableOrphanRecords, Bc as Synthesizer, Bi as hasReadableOutputs, Bn as PRE_DELETE_SNAPSHOT_TYPES, Bo as carryLogOnlyValues, Bs as splitImportedOps, C as recordRetainedForReadoption, Ca as refuseMalformedResourceEntriesForImport, Cc as dockerSpawnEnvWithSensitive, Ci as cfnRefValueFromPhysicalId, Cl as renderAssemblyPathEscape, Cn as collectDeclaredOutputNames, Cr as applyCustomResourceResponseExpiration, Cs as wholeStringLeavesOf, D as withResourceDeadline, Da as refuseMalformedResourcePropertiesForDrift, Dc as isDockerClientEnvKey, Di as withSharedDrainBudget, Dn as DEFAULT_RESOURCE_TIMEOUT_MS, Do as isMarkedCoordinate, Ds as TEMPLATE_SOURCED_RULES, E as serviceTokenBlockingReason, Ea as refuseMalformedResourcePropertiesForDestroy, Ec as getDockerCmd, El as resolveBucketRegion, En as bindingSkippedOutputs, Eo as canonicalCoordinates, Er as slowCcOperationTimeoutMs, Es as STATE_SOURCED_READBACK_RULES, Et as collectNestedChildUnaddressed, F as PROTECTION_PROPERTY_BY_TYPE, Fa as repairMalformedOrphansForReadOnly, Fc as escapeRegExp, Fi as UNREADABLE_RESOURCES_MAP_ROW, Fn as secretNamedRecordNeedles, Fs as CrossPrefixScanCache, Ft as sameJournaledOrphans, Gc as resolveApp, Gi as malformedExportNamesWarning, Gn as isFinalSnapshotError, Go as printingCorpusOf, Gr as poisonRenderedSpellingsCollidingIn, Gs as hasReasonlessBaselineRefusal, Gt as isJournaledOrphan, Ha as unreadableResourceEntries, Hc as getDefaultStateBucketName, Hi as isReadableOrphanRecord, Hn as ccRoutedFinalSnapshotError, Ho as hasMaskableValues, Hr as DiffCalculator, Hs as describeRegionValueKind, Ht as removeProtectionTypeList, I as isProtectionValueActive, Ia as repairMalformedOutputsForReadOnly, Ic as stripControlChars, Ii as accountArgs, In as stateSecretNameNeedles, Io as readbackPathFor, Is as applyCrossPrefixScan, It as replayFailedOperations, Ja as NO_CC_HANDLERS_REASON, Jc as resolveSkipPrefix, Ji as malformedLocalResourceEntriesWarning, Jn as maskingRetryLogger, Jo as shareLogOnlyValues, Jr as applyRoleArnIfSet, Js as importableOutputs, Jt as planRollback, Ka as unwrittenCreateOnlyReplacement, Kc as resolveAutoAssetStorage, Ki as malformedExportSourceWarning, Kn as refusesFinalSnapshot, Ko as recordLogOnlyParameterValue, Kr as producerLookupOver, Ks as hasUnverifiableParameterRefusal, Kt as isReplacementOrphan, L as perType, La as repairMalformedResourceEntriesForReadOnly, Lc as stripForDisplay, Li as deployRefusesOrphanRowsReason, Ln as storedSecretNameNeedles, Lo as readsNoEchoSource, Ls as crossPrefixDeniedWarning, Lt as replayRollback, M as noEchoParameterNamesOf, Ma as refuseMalformedResourcesForExport, Mc as runDockerForeground, Mi as STATE_REGION_DIVERGED, Mn as orphanRecordsPrintingBag, Mo as noEchoCoordinatesOf, Mr as deleteSkipReason, Ms as S3StateBackend, Mt as journaledOrphanLines, N as recordedProtectionEvidence, Na as refuseMalformedState, Nc as runDockerStreaming, Ni as STATE_RESOURCES_MALFORMED, Nn as secretNamePrintingBag, No as noEchoLeavesOf, Ns as rebuildClientForBucketRegion, Nt as loadJournaledOrphans, O as diffSecurity, Oa as refuseMalformedResourcePropertiesForExport, Oc as isMalformedEnvKey, Oi as parameterInputsFor, On as DEFAULT_RESOURCE_WARN_AFTER_MS, Oo as maskAtCoordinates, Or as RollbackInlinePolicyWriters, Os as WHOLE_DYNAMIC_REFERENCE_PATTERN, Ot as withNestedStackContext, P as recordedProtectionNote, Pa as repairMalformedOrphanRecordsForReadOnly, Pc as warnFinchArgvExposure, Pi as UNREADABLE_ORPHANS_CONTAINER_ROW, Pn as secretNamePrintingBags, Po as noEchoOutputsComparison, Pr as isWaitAbandonedError, Ps as CrossPrefixReadError, Pt as makeForeignHolderScan, Qa as MULTI_REGION_RECREATE_BLOCKED_TYPES, Qc as stateBucketExistenceConfirmed, Qi as malformedOrphanRowsKeptWarning, Qo as maskSecretsInText, Qr as isIamRoleArn, Qs as shouldRetainResource, Qt as resolveReplacementOldType, R as readProtection, Ra as repairMalformedResourcePropertiesForReadOnly, Rc as AssetManifestLoader, Ri as displayLogicalId, Rn as extractDeploymentEventError, Ro as valueAtCoordinate, Rs as isAccessDenied, S as keptForReadoption, Sa as refuseMalformedResourceEntriesForDestroy, Sc as describeDockerFailure, Si as AWS_NO_VALUE, Sl as displayAssemblyPath, Sn as noEchoParameterValueSeed, Sr as CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID, Ss as recordProvenPublicExpression, St as recordDisplacedSkips, T as findServiceTokenRefusals, Ta as refuseMalformedResourceEntriesForOrphan, Tc as formatDockerLoginError, Ti as refStateLookupFromResource, Tn as isExportAliasCollision, To as TemplateParser, Tr as CloudControlProvider, Ts as STATE_SOURCED_CROSS_GENERATION_RULES, Tt as withNestedRevertRun, Ua as withheldAccountClause, Uc as getLegacyStateBucketName, Ui as isReadableResourceEntry, Un as createPreDeleteFinalSnapshot, Uo as literalSplitDelimitersOf, Ur as INTRINSIC_KEYS, Us as exportNamesCarriedFrom, Ut as recordAfterRollbackUpdate, Va as unreadableOrphanRecords, Vc as synthesisStatusMessage, Vi as hasReadableResources, Vn as buildFinalSnapshotIdentifier, Vo as createUnionSecretMasker, Vs as acceptedCreateOnlyDropsOf, Vt as withStackRecords, Wa as findActionableSilentDrops, Wc as loadCdkJson, Wi as malformedDriftResourcePropertiesWarning, Wn as effectiveDeletionPolicy, Wo as logOnlyValueCount, Wr as IntrinsicFunctionResolver, Ws as hasReadableExportSet, Wt as demoteSupersededOrphans, Xa as findReplacedReadersOfRecreateTargets, Xc as resolveStateBucketWithDefaultAndSource, Xi as malformedOrphanRecordsRefusalMessage, Xn as findDestructiveChanges, Xo as errorCauseChain, Xr as assertSendableRoleArn, Xs as orphansAfterRollback, Xt as recordUnderIdIsNotOwn, Ya as hasNoCloudControlHandlers, Yc as resolveStateBucketWithDefault, Yi as malformedLocalResourcesWarning, Yn as constructPathOf, Yo as createSecretMasker, Yr as assertFlagRoleArn, Ys as isReadableBag, Yt as recheckFailedPlan, Za as shownType, Zc as resolveUseCdkBootstrapAssets, Zi as malformedOrphanRecordsWarning, Zn as formatDestructiveChange, Zo as maskSecretsInError, Zr as explicitRoleArnOrThrow, Zs as orphansCarriedFrom, Zt as replacementNeverSwapped, _ as makeCanonicalizePropertiesFn, _a as refuseMalformedOutputs, _c as buildDenyExternalAccessPolicy, _i as isImpossibleEmptyStoredAttribute, _l as hasPlainPrototype, _n as secretSafeKeyDisplay, _o as prefetchCreateOnlyPropertyPaths, _r as TemplateNoEchoReresolver, _s as provenPublicValue, _t as displacedOpClause, a as findNestedTemplateTreeDefect, aa as malformedResourcePropertiesWarning, ac as loadPublishableAssetManifest, al as uploadCfnTemplate, as as dynamicReferenceTokens, at as cyan, ba as refuseMalformedResourceEntries, bc as describeDockerCapturedOutput, bi as isNamelessDynamicReferenceError, bl as absoluteAssemblyPathEscape, bn as exportNameSecretExposure, bo as withRetry, bs as recordNoEchoAttributeValues, c as renderNestedTemplateTreeDefect, ca as malformedStateRefusalMessage, cc as BOOTSTRAP_MARKER_PREFIX, cl as expectedOwnerParam, cn as updatePartialMessage, cs as identityKeyFor, ct as red, d as conditionInputsFrom, dc as getBootstrapMarkerKey, di as producerRegionsFromState, dl as derivePartitionAndUrlSuffix, dn as DeploymentEventsStore, dt as namesAnyDeclaredParameter, ea as malformedOrphansWarning, ec as isSensitiveAttributeName, ei as AWS_CREDENTIAL_ENV_KEYS, el as ssmResolvedValueType, en as orphanDeleteNeedsIdentity, eo as isStatefulRecreateTargetSync, es as redactSecretsForState, f as parentSuppliedValues, fa as refuseMalformedOrphanRecords, fc as isCrossRegionRedirect, fi as regionLessSecretName, fl as AssemblyReader, fn as WITHHELD_NAME_DISPLAY, fr as CC_BROKEN_REASON, fs as physicalNameCopiesOf, ft as reachableDivergentParameters, g as mergeNoChangeOutputs, ga as refuseMalformedOrphansForOrphan, gc as validateContainerRepoName, gi as getAccountInfo, gl as hasOwnKey, gn as secretBearingStateKeyWarning, gr as wouldReturnToSdkProvider, gs as carriesSecretMask, gt as NESTED_PENDING_PARENT_REASON, h as keptWholeReasonText, ha as refuseMalformedOrphansForDestroy, hc as validateAssetBucketName, hi as parameterTypeMayLoseSecretIdentity, hl as defineOwnKey, hn as secretBearing, hr as isCustomResource, hs as splitGetAttStringForm, ht as planOrphanAdoption, i as childTemplateLoader, ia as malformedResourceEntriesWarning, ic as createAssetRedirectResolver, il as findLargeInlineResources, is as DYNAMIC_REFERENCE_TOKEN_SCAN, it as bold, j as noEchoExactEchoLeavesOf, ja as refuseMalformedResourcesForDestroy, jc as redactedDockerCause, ji as JSON_LISTING_HOLE_VALUE, jn as maskEventTextWithBoundBags, jo as maskedLeafCoordinatesOf, jr as deleteLeftInPlace, js as isLockInfoExpired, jt as isHandledOrphan, k as noEchoAttributeNamesOf, ka as refuseMalformedResourcePropertiesForOrphan, kc as partitionSensitiveEnv, kn as completedReplayEntries, ko as maskReadbackAtCoordinates, kr as UNSPECIFIED_SKIP_REASON, ks as isSingleDynamicReferenceToken, kt as deleteJournaledOrphans, l as templateIdentity, la as previewableOrphanRecords, lc as assertAssetBucketRegion, ll as PARTITION_TABLE, ln as updatePartialReason, ls as inheritNestedStackParameterAssociations, lt as yellow, m as isSecretBearingReferenceString, ma as refuseMalformedOrphans, mc as readBootstrapMarkerBody, mi as isUnboundTemplateParameter, ml as processStackMessages, mn as exportAliasCollisionScrubWarning, mr as ccBrokenReason, ms as recordPhysicalNameCopy, mt as makeSiblingClaimReader, n as IMPLICIT_DELETE_DEPENDENCIES, na as malformedOutputsWarning, nc as WorkGraph, ni as callerEnvCredentials, nl as CFN_TEMPLATE_URL_LIMIT, ns as withPhysicalNameCopies, nt as formatResourceLine, o as isAbsoluteAssetPath, oa as malformedResourcesWarning, oc as rewriteTemplateAssetReferences, ol as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, os as isUncertifiedBaselineMaskPosition, ot as gray, p as readRecordedConditionVerdicts, pa as refuseMalformedOrphanRecordsForDestroy, pc as parseBootstrapMarker, pi as coerceParameterTypedValue, pl as StageLoadError, pn as displayTextOrWithheld, pr as ProviderRegistry, pt as resourcesNamingDeclaredParameter, qc as resolveCaptureObservedState, qi as malformedLocalOutputsWarning, qn as unsupportedFinalSnapshotError, qo as recordLogOnlyValue, qr as refuseUnreadableCdkCrossAccountRefs, qs as importableOutputKeys, qt as planFailedOps, r as computeImplicitDeleteEdges, ra as malformedRenderedContainersWarning, rc as buildAssetRedirectMap, ri as envCredentialsAreAssumedRole, rl as MIGRATE_TMP_PREFIX, rn as inheritProducerRegions, rt as createReadOnlyAttributeHealerFactory, s as listNestedTemplateRows, sa as malformedScrubResourceEntriesRefusalMessage, sc as AssetModeResolver, sl as decodeListingKey, ss as pathCrossesDottedKey, st as green, t as DeployEngine, ta as malformedOutputsRefusalMessage, tc as stringifyValue, ti as applyCallerIdentityCredentials, tl as CFN_TEMPLATE_BODY_LIMIT, tn as findNestedStackTypeChanges, to as renderStatefulReason, tr as withCreateTokenLedger, ts as scrubResourceRecord, u as conditionFingerprint, ua as refuseDivergentRecordRegionForDestroy, uc as ensureAssetStorage, ui as classifyReplaySecretRegion, ul as canonicalizeRegion, un as DeploymentEventsReader, us as recordNestedStackParameterExpressions, ut as computeParameterTaint, va as refuseMalformedOutputsForDestroy, vc as buildDockerImage, vi as carriesDynamicReference, vl as nullPrototypeRecord, vn as carriedExportAliasExposure, vo as templateResourceTypes, vr as readsNoEchoDeleteValues, vs as recordMaskOnlyValue, vt as displacedPhysicalIdShown, w as deferredServiceTokenWarning, wa as refuseMalformedResourceEntriesForImportSave, wc as finchSecretArgvRefusal, wi as isStalePlaceholderArnAttribute, wl as resolveAssemblyPath, wn as collectPublishedOutputNames, wo as DagBuilder, wr as customResourceResponseExpirationWarning, ws as STATE_SOURCED_BASELINE_RULES, wt as revertedNestedRowIds, xa as refuseMalformedResourceEntriesForDeploy, xc as describeDockerExecFailure, xi as keepsSecretReferenceToken, xl as describeFileReadFailure, xn as isWholeDynamicReferenceValue, xr as withPrintingSecrets, xs as recordNoEchoParameterFreshValue, xt as nestedChildStackName$1, ya as refuseMalformedResourceAttributesForOrphan, yc as resolveDockerContextDirectory, yi as carriesFetchableDynamicReference, yl as ownValue, yn as exportNameNoEchoParameters, yo as describeTypeWithThrottleRetry, yr as isCustomResourceType$1, ys as recordMaskOnlyValuesIn, yt as dropSettledNestedJournals, za as repairMalformedResourcesForReadOnly, zc as getDockerImageBySourceHash, zi as hasReadableOrphans, zn as ATOMIC_FINAL_SNAPSHOT_TYPES, zo as liveMatchesUnresolvedTokenFrame, zs as isNotImplemented, zt as destroyStackRecordsView } from "./deploy-engine-DLGCuN4i.js";
6
+ import { t as getCdkdVersion } from "./version-CWATUXWX.js";
7
7
  import { randomBytes, randomUUID } from "node:crypto";
8
8
  import { CopyObjectCommand, CreateBucketCommand, DeleteBucketCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetObjectCommand, HeadBucketCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, NotFound, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutBucketVersioningCommand, PutObjectCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
9
9
  import { GetRoleCommand, GetUserCommand } from "@aws-sdk/client-iam";
@@ -28,8 +28,8 @@ import { Command, InvalidArgumentError, Option } from "commander";
28
28
  import * as readline$1 from "node:readline/promises";
29
29
  import readline from "node:readline/promises";
30
30
  import { Document, Pair, Scalar, YAMLMap, YAMLSeq, isScalar, parse, stringify, visit } from "yaml";
31
+ import { A2A_CONTAINER_PORT, A2A_PATH, AGENTCORE_A2A_PROTOCOL, AGENTCORE_AGUI_PROTOCOL, AGENTCORE_MCP_PROTOCOL, ConnectionRegistry, DynamicReferenceResolver, EcsTaskResolutionError, HOST_GATEWAY_MIN_VERSION, LocalInvokeBuildError, MCP_CONTAINER_PORT, MCP_PATH, a2aInvokeOnce, addAlbSpecificOptions, addCommonEcsServiceOptions, addStartServiceSpecificOptions, albStrategy, architectureToPlatform, attachAuthorizers, attachStageContext, availableApiIdentifiers, bufferToBody, buildAgentCoreCodeImage, buildCognitoJwksUrl, buildConnectEvent, buildContainerImage, buildCorsConfigByApiId, buildCorsConfigFromCloudFrontChain, buildDisconnectEvent, buildJwksUrlFromIssuer, buildMessageEvent, buildMgmtEndpointEnvUrl, buildStageMap, classifySourceChange, containsDynamicReference, createAuthorizerCache, createFileWatcher, createFileWatcher as createFileWatcher$1, createJwksCache, createWatchPredicates, defaultCredentialsLoader, derivePseudoParametersFromRegion, describeAwsFailureForWarn, describeCredentialLoadFailure, discoverRoutes, discoverWebSocketApis, downloadAndExtractS3Bundle, filterRoutesByApiIdentifier, firstUsableRegion, groupRoutesByServer, handleConnectionsRequest, invokeAgentCore, invokeAgentCoreWs, keysNotFromTemplate, keysOverriddenBy, materializeLayerFromArn, mcpInvokeOnce, parseConnectionsPath, parseSelectionExpressionPath, pickAgentCoreCandidateStack, pickAgentCoreCandidateStack as pickAgentCoreCandidateStack$1, probeHostGatewaySupport, readMtlsMaterialsFromDisk, resolveAgentCoreTarget, resolveDynamicReferencesInEnv, resolveEnvVars, resolveHostGatewayExtraHosts, resolveRuntimeCodeMountPath, resolveRuntimeFileExtension, resolveRuntimeImage, resolveSingleTarget, resolveWatchConfig, runEcsServiceEmulator, signAgentCoreInvocation, startApiServer, substituteImagePlaceholders, tryResolveImageFnJoin, verifyJwtViaDiscovery, waitForAgentCorePing, withoutKeys } from "cdk-local/internal";
31
32
  import { CfnLocalStateProvider, createLocalStartAgentCoreCommand, createLocalStartCloudFrontCommand, createLocalStateProvider, getEmbedConfig, isCfnFlagPresent, isCfnFlagPresent as isCfnFlagPresent$1, listTargets, rejectExplicitCfnStackWithMultipleStacks, resolveCfnFallbackRegion, setEmbedConfig, substituteAgainstState, substituteAgainstStateAsync, substituteEnvVarsFromState, substituteEnvVarsFromStateAsync } from "cdk-local";
32
- import { A2A_CONTAINER_PORT, A2A_PATH, AGENTCORE_A2A_PROTOCOL, AGENTCORE_AGUI_PROTOCOL, AGENTCORE_MCP_PROTOCOL, ConnectionRegistry, DynamicReferenceResolver, EcsTaskResolutionError, HOST_GATEWAY_MIN_VERSION, LocalInvokeBuildError, MCP_CONTAINER_PORT, MCP_PATH, a2aInvokeOnce, addAlbSpecificOptions, addCommonEcsServiceOptions, addStartServiceSpecificOptions, albStrategy, architectureToPlatform, attachAuthorizers, attachStageContext, availableApiIdentifiers, bufferToBody, buildAgentCoreCodeImage, buildCognitoJwksUrl, buildConnectEvent, buildContainerImage, buildCorsConfigByApiId, buildCorsConfigFromCloudFrontChain, buildDisconnectEvent, buildJwksUrlFromIssuer, buildMessageEvent, buildMgmtEndpointEnvUrl, buildStageMap, classifySourceChange, containsDynamicReference, createAuthorizerCache, createFileWatcher, createFileWatcher as createFileWatcher$1, createJwksCache, createWatchPredicates, defaultCredentialsLoader, derivePseudoParametersFromRegion, discoverRoutes, discoverWebSocketApis, downloadAndExtractS3Bundle, filterRoutesByApiIdentifier, firstUsableRegion, groupRoutesByServer, handleConnectionsRequest, invokeAgentCore, invokeAgentCoreWs, keysNotFromTemplate, keysOverriddenBy, materializeLayerFromArn, mcpInvokeOnce, parseConnectionsPath, parseSelectionExpressionPath, pickAgentCoreCandidateStack, pickAgentCoreCandidateStack as pickAgentCoreCandidateStack$1, probeHostGatewaySupport, readMtlsMaterialsFromDisk, resolveAgentCoreTarget, resolveDynamicReferencesInEnv, resolveEnvVars, resolveHostGatewayExtraHosts, resolveRuntimeCodeMountPath, resolveRuntimeFileExtension, resolveRuntimeImage, resolveSingleTarget, resolveWatchConfig, runEcsServiceEmulator, signAgentCoreInvocation, startApiServer, substituteImagePlaceholders, tryResolveImageFnJoin, verifyJwtViaDiscovery, waitForAgentCorePing, withoutKeys } from "cdk-local/internal";
33
33
  import { createServer } from "node:net";
34
34
  import { setTimeout as setTimeout$1 } from "node:timers/promises";
35
35
  import { mkdtemp, rm, writeFile } from "node:fs/promises";
@@ -2088,6 +2088,11 @@ var ExportIndexStore = class {
2088
2088
  if (this.loadState.kind !== "loaded") return;
2089
2089
  return this.loadState.entries.get(exportName);
2090
2090
  }
2091
+ async prefetch() {
2092
+ try {
2093
+ await this.ensureLoaded();
2094
+ } catch {}
2095
+ }
2091
2096
  async updateForStack(stackName, producerRegion, outputs) {
2092
2097
  await this.enqueueWrite("update", () => this.applyStackUpdate(stackName, producerRegion, outputs));
2093
2098
  }
@@ -2433,7 +2438,7 @@ function collectCrossStackRefs(node, onRef, unconditional) {
2433
2438
  //#region src/provisioning/register-providers.ts
2434
2439
  let providerClasses;
2435
2440
  function loadProviderClasses() {
2436
- providerClasses ??= import("./provider-classes-CuZ-P4gB.js");
2441
+ providerClasses ??= import("./provider-classes-BTP4rLU6.js");
2437
2442
  return providerClasses;
2438
2443
  }
2439
2444
  function registerAllProviders(registry, classes) {
@@ -3196,7 +3201,7 @@ Force-quit: stack locks may not be released. If the next run reports a lock, run
3196
3201
  region: baseRegion,
3197
3202
  ...options.profile && { profile: options.profile }
3198
3203
  });
3199
- const stackLockManager = new LockManager(stateS3Client.s3, stateConfig);
3204
+ const stackLockManager = new LockManager(stateS3Client.s3, stateConfig, { deferReleasePurge: true });
3200
3205
  const stackProviderRegistry = new ProviderRegistry();
3201
3206
  registerAllProviders(stackProviderRegistry, providerClasses);
3202
3207
  stackProviderRegistry.setCustomResourceResponseBucket(stateBucket);
@@ -3395,7 +3400,7 @@ Force-quit: stack locks may not be released. If the next run reports a lock, run
3395
3400
  recordRunFailed(eventRecorder, stackInfo.stackName, deployError);
3396
3401
  throw deployError;
3397
3402
  } finally {
3398
- if (eventRecorder) await eventRecorder.finalize(runResult);
3403
+ await Promise.all([eventRecorder?.finalize(runResult), stackLockManager.settleDeferredPurges()]);
3399
3404
  stackAwsClients.destroy();
3400
3405
  stateS3Client.destroy();
3401
3406
  }
@@ -3656,12 +3661,12 @@ async function resolveTemplateOutputs(template, resolveFn, conditions, storedOut
3656
3661
  };
3657
3662
  for (const [outputKey, output] of Object.entries(template.Outputs)) {
3658
3663
  if (output.Condition !== void 0 && conditions?.[output.Condition] === false) {
3659
- logger.debug(`Skipping output ${stripControlChars(outputKey)} — condition ${stripControlChars(String(output.Condition))} is false`);
3664
+ logger.debug(`Skipping output ${stripForDisplay(outputKey)} — condition ${stripForDisplay(String(output.Condition))} is false`);
3660
3665
  await recordSkippedSecretExportName(output);
3661
3666
  continue;
3662
3667
  }
3663
3668
  if (skippedOutputKeys?.has(outputKey) && !(storedOutputs !== void 0 && Object.prototype.hasOwnProperty.call(storedOutputs, outputKey))) {
3664
- logger.debug(`Diff previewing output ${stripControlChars(outputKey)} as absent — the last deploy could not resolve it and its template inputs are unchanged`);
3669
+ logger.debug(`Diff previewing output ${stripForDisplay(outputKey)} as absent — the last deploy could not resolve it and its template inputs are unchanged`);
3665
3670
  if (outputsPass !== void 0) try {
3666
3671
  await resolveValue(structuredClone(output.Value));
3667
3672
  } catch {}
@@ -3673,7 +3678,7 @@ async function resolveTemplateOutputs(template, resolveFn, conditions, storedOut
3673
3678
  try {
3674
3679
  value = await resolveValue(structuredClone(output.Value));
3675
3680
  } catch (error) {
3676
- logger.debug(`Diff could not resolve output ${stripControlChars(outputKey)}: ${stripControlChars(String(error))}`);
3681
+ logger.debug(`Diff could not resolve output ${stripForDisplay(outputKey)}: ${stripForDisplay(String(error))}`);
3677
3682
  resolutionFailed = true;
3678
3683
  recordFailure(outputKey, output);
3679
3684
  failedOutputKeys.add(outputKey);
@@ -3681,7 +3686,7 @@ async function resolveTemplateOutputs(template, resolveFn, conditions, storedOut
3681
3686
  continue;
3682
3687
  }
3683
3688
  if (isUnresolvedValue(value, sourceUsedSub)) {
3684
- logger.debug(`Diff left output ${stripControlChars(outputKey)} unresolved (references a pending resource)`);
3689
+ logger.debug(`Diff left output ${stripForDisplay(outputKey)} unresolved (references a pending resource)`);
3685
3690
  resolutionFailed = true;
3686
3691
  recordFailure(outputKey, output);
3687
3692
  if (value === void 0) failedOutputKeys.add(outputKey);
@@ -3708,7 +3713,7 @@ async function resolveTemplateOutputs(template, resolveFn, conditions, storedOut
3708
3713
  if (typeof exportName !== "string") try {
3709
3714
  exportName = await (outputsPass?.resolveInto(nameBag) ?? resolveFn)(structuredClone(exportName));
3710
3715
  } catch (error) {
3711
- logger.debug(`Diff could not resolve Export.Name of ${stripControlChars(outputKey)}: ${stripControlChars(String(error))}`);
3716
+ logger.debug(`Diff could not resolve Export.Name of ${stripForDisplay(outputKey)}: ${stripForDisplay(String(error))}`);
3712
3717
  resolutionFailed = true;
3713
3718
  failuresMirrorDeploy = false;
3714
3719
  continue;
@@ -3737,8 +3742,8 @@ async function resolveTemplateOutputs(template, resolveFn, conditions, storedOut
3737
3742
  } else if (refusesNoEchoName(exportName, nameBag)) {
3738
3743
  refusedNoEchoExportNames.push(exportName);
3739
3744
  logger.debug(safeMsg`Diff skipping export alias of ${ownerDisplay(outputKey)} — the name carries a value this pass recorded as secret`);
3740
- } else if (declaredExportIsIntrinsic && keepsSecretReferenceToken(exportName)) logger.debug(`Diff skipping export alias of ${stripControlChars(outputKey)} — the name carries a secret reference`);
3741
- else if (isExportAliasCollision(exportName, outputKey, publishedOutputNames)) logger.debug(`Diff skipping export alias ${stripControlChars(exportName)} of ${stripControlChars(outputKey)} — collides with an output name`);
3745
+ } else if (declaredExportIsIntrinsic && keepsSecretReferenceToken(exportName)) logger.debug(`Diff skipping export alias of ${stripForDisplay(outputKey)} — the name carries a secret reference`);
3746
+ else if (isExportAliasCollision(exportName, outputKey, publishedOutputNames)) logger.debug(`Diff skipping export alias ${stripForDisplay(exportName)} of ${stripForDisplay(outputKey)} — collides with an output name`);
3742
3747
  else pendingAliases.push({
3743
3748
  outputKey,
3744
3749
  exportName,
@@ -3756,7 +3761,7 @@ async function resolveTemplateOutputs(template, resolveFn, conditions, storedOut
3756
3761
  outputs[exportName] = value;
3757
3762
  exportNames.add(exportName);
3758
3763
  } else {
3759
- logger.debug(`Diff cannot decide the export alias of ${stripControlChars(outputKey)} — a literal name may contain a resolved secret and state does not hold that key`);
3764
+ logger.debug(`Diff cannot decide the export alias of ${stripForDisplay(outputKey)} — a literal name may contain a resolved secret and state does not hold that key`);
3760
3765
  failedKeys.add(exportName);
3761
3766
  resolutionFailed = true;
3762
3767
  failuresMirrorDeploy = false;
@@ -5018,10 +5023,10 @@ async function computeStackDiff(currentState, template, region, stackName, state
5018
5023
  const isStored = (key) => Object.prototype.hasOwnProperty.call(storedOutputs, key);
5019
5024
  const compared = failed.filter(isStored);
5020
5025
  const unstored = failed.filter((key) => !isStored(key));
5021
- const names = (keys) => keys.map(stripControlChars).join(", ");
5026
+ const names = (keys) => keys.map(stripForDisplay).join(", ");
5022
5027
  const explainWithheld = withheld && outputChanges.some((change) => change.oldValueRedacted === true);
5023
- logger.warn(`Outputs of stack ${stripControlChars(stackName)}: ${failed.length} output(s) could not be resolved for this diff.` + (compared.length > 0 ? ` Compared at their stored values: ${names(compared)}.` : "") + (unstored.length > 0 ? ` No stored value under their own names: ${names(unstored)}.` : "") + ` The next deploy may write a value for any of them it can resolve.` + (explainWithheld ? ` Previous values in this Outputs section are withheld because a value carried from state for a failed output is not a secret reference, so this diff cannot rule out legacy plaintext in state. That reason no longer applies once every failed output resolves, though other legacy-plaintext checks still can withhold them.` : ""));
5024
- } else if (diffOutputsAgainst(resolved.outputs, resolved.exportNames).filter((change) => !resolved.failedKeys.has(change.name)).length > 0) logger.warn(`Outputs of stack ${stripControlChars(stackName)} may have changed, but one or more could not be resolved against current state — omitting the Outputs section from this diff. ` + (merge?.kind === "kept" ? keptWholeReasonText(merge.reason) : resourcesChange ? `It is usually an output referencing a resource this deploy has yet to create.` : `The stack has no resource change; this diff cannot preview what the deploy does with the outputs that failed here.`));
5028
+ logger.warn(`Outputs of stack ${stripForDisplay(stackName)}: ${failed.length} output(s) could not be resolved for this diff.` + (compared.length > 0 ? ` Compared at their stored values: ${names(compared)}.` : "") + (unstored.length > 0 ? ` No stored value under their own names: ${names(unstored)}.` : "") + ` The next deploy may write a value for any of them it can resolve.` + (explainWithheld ? ` Previous values in this Outputs section are withheld because a value carried from state for a failed output is not a secret reference, so this diff cannot rule out legacy plaintext in state. That reason no longer applies once every failed output resolves, though other legacy-plaintext checks still can withhold them.` : ""));
5029
+ } else if (diffOutputsAgainst(resolved.outputs, resolved.exportNames).filter((change) => !resolved.failedKeys.has(change.name)).length > 0) logger.warn(`Outputs of stack ${stripForDisplay(stackName)} may have changed, but one or more could not be resolved against current state — omitting the Outputs section from this diff. ` + (merge?.kind === "kept" ? keptWholeReasonText(merge.reason) : resourcesChange ? `It is usually an output referencing a resource this deploy has yet to create.` : `The stack has no resource change; this diff cannot preview what the deploy does with the outputs that failed here.`));
5025
5030
  }
5026
5031
  const printingSecrets = printing.corpus();
5027
5032
  let shownChanges = changes;
@@ -5030,7 +5035,7 @@ async function computeStackDiff(currentState, template, region, stackName, state
5030
5035
  let shownDeployRefusals = deployRefusals;
5031
5036
  if (hasMaskableValues(printing.maskCorpus())) {
5032
5037
  const mask = printing.mask;
5033
- const maskReason = (reason) => mask(stripControlChars(mask(reason)));
5038
+ const maskReason = (reason) => mask(stripForDisplay(mask(stripControlChars(mask(reason)))));
5034
5039
  shownBlocking = blocking.map(maskReason);
5035
5040
  shownDeployRefusals = deployRefusals.map(maskReason);
5036
5041
  shownChanges = new Map([...changes].map(([logicalId, change]) => [logicalId, maskResourceChangeForDisplay(change, mask)]));
@@ -5632,7 +5637,7 @@ function renderChangeLines(changes, logFn, ccApiRoutes, adoptedOrphans) {
5632
5637
  }
5633
5638
  const REDACTED_LEGACY_PLAINTEXT = "<redacted: may be legacy plaintext in state — run `cdkd scrub`>";
5634
5639
  function stripDisplayOnlyChars(value) {
5635
- return value.replace(/[\u007f-\u009f\u200e\u200f\u202a-\u202e\u2066-\u2069]/g, "");
5640
+ return value.replace(/[\u007f-\u009f\u200e\u200f\u202a-\u202e\u2066-\u2069]/g, "").replace(/[\u2028\u2029]/g, " ");
5636
5641
  }
5637
5642
  function renderOutputChangeLines(outputChanges, logFn) {
5638
5643
  const counts = {
@@ -5684,7 +5689,7 @@ function unreadableRowNames(node, limit) {
5684
5689
  }
5685
5690
  function renderDiffTree(node, isRoot, logFn) {
5686
5691
  const hasChanges = nodeHasChanges(node);
5687
- if (hasChanges || node.blocking.length > 0) logFn(isRoot ? `\nStack ${stripControlChars(node.stackName)}:` : `\nNested stack: ${stripControlChars(node.displayName)}`);
5692
+ if (hasChanges || node.blocking.length > 0) logFn(isRoot ? `\nStack ${stripForDisplay(node.stackName)}:` : `\nNested stack: ${stripForDisplay(node.displayName)}`);
5688
5693
  if (hasChanges) {
5689
5694
  const { create, update, delete: del } = renderChangeLines(node.changes, logFn, node.ccApiRoutes, node.adoptedOrphans);
5690
5695
  const outputs = renderOutputChangeLines(node.outputChanges, logFn);
@@ -5701,7 +5706,7 @@ function renderDiffTree(node, isRoot, logFn) {
5701
5706
  }
5702
5707
  if (node.blocking.length > 0) {
5703
5708
  logFn("\n Blocking (cdkd deploy will refuse):");
5704
- for (const reason of node.blocking) logFn(` ! ${stripControlChars(reason)}`);
5709
+ for (const reason of node.blocking) logFn(` ! ${stripForDisplay(reason)}`);
5705
5710
  }
5706
5711
  for (const child of node.children) renderDiffTree(child, false, logFn);
5707
5712
  }
@@ -17235,7 +17240,7 @@ async function stateResourcesCommand(stackName, options) {
17235
17240
  if (options.long) {
17236
17241
  const lines = [];
17237
17242
  for (const detail of details) {
17238
- lines.push(stripControlChars(detail.logicalId));
17243
+ lines.push(stripForDisplay(detail.logicalId));
17239
17244
  lines.push(` Type: ${formatAttributeValue(detail.resourceType)}`);
17240
17245
  lines.push(` PhysicalID: ${formatAttributeValue(detail.physicalId)}`);
17241
17246
  lines.push(` Dependencies: ${formatDependencyList(detail.dependencies)}`);
@@ -17243,7 +17248,7 @@ async function stateResourcesCommand(stackName, options) {
17243
17248
  if (attrEntries.length === 0) lines.push(" Attributes: (none)");
17244
17249
  else {
17245
17250
  lines.push(" Attributes:");
17246
- for (const [k, v] of attrEntries) lines.push(` ${stripControlChars(k)}: ${formatAttributeValue(v)}`);
17251
+ for (const [k, v] of attrEntries) lines.push(` ${stripForDisplay(k)}: ${formatAttributeValue(v)}`);
17247
17252
  }
17248
17253
  lines.push("");
17249
17254
  }
@@ -17252,7 +17257,7 @@ async function stateResourcesCommand(stackName, options) {
17252
17257
  return;
17253
17258
  }
17254
17259
  const rows = details.map((d) => ({
17255
- logicalId: stripControlChars(d.logicalId),
17260
+ logicalId: stripForDisplay(d.logicalId),
17256
17261
  resourceType: formatAttributeValue(d.resourceType),
17257
17262
  physicalId: formatAttributeValue(d.physicalId)
17258
17263
  }));
@@ -17266,14 +17271,14 @@ async function stateResourcesCommand(stackName, options) {
17266
17271
  function formatAttributeValue(value) {
17267
17272
  if (value === null) return "null";
17268
17273
  if (value === void 0) return "undefined";
17269
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return stripControlChars(String(value));
17274
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return stripForDisplay(String(value));
17270
17275
  let json;
17271
17276
  try {
17272
17277
  json = JSON.stringify(value);
17273
17278
  } catch {
17274
17279
  json = void 0;
17275
17280
  }
17276
- return json === void 0 ? UNSERIALIZABLE : stripControlChars(json);
17281
+ return json === void 0 ? UNSERIALIZABLE : stripForDisplay(json);
17277
17282
  }
17278
17283
  function formatIdentField(value, maxCodePoints) {
17279
17284
  if (typeof value !== "string") return formatAttributeValue(value);
@@ -17415,7 +17420,7 @@ function renderStateBlock(state, lockInfo, withLegend) {
17415
17420
  if (outputEntries.length > 0) {
17416
17421
  lines.push("");
17417
17422
  lines.push("Outputs:");
17418
- for (const [k, v] of outputEntries) lines.push(` ${stripControlChars(k)}: ${formatAttributeValue(v)}`);
17423
+ for (const [k, v] of outputEntries) lines.push(` ${stripForDisplay(k)}: ${formatAttributeValue(v)}`);
17419
17424
  }
17420
17425
  if (rendersSkippedBlock(state)) {
17421
17426
  lines.push("");
@@ -17424,7 +17429,7 @@ function renderStateBlock(state, lockInfo, withLegend) {
17424
17429
  const fullDigest = formatAttributeValue(digest);
17425
17430
  const cut = truncateCodePoints(fullDigest, SKIPPED_DIGEST_PREVIEW_LEN);
17426
17431
  const shownDigest = cut.truncated && fullDigest !== UNSERIALIZABLE ? `${cut.text}…` : fullDigest;
17427
- lines.push(` ${stripControlChars(k)}: ${shownDigest}`);
17432
+ lines.push(` ${stripForDisplay(k)}: ${shownDigest}`);
17428
17433
  }
17429
17434
  if (withLegend) lines.push(...skippedOutputsLegend());
17430
17435
  }
@@ -17433,7 +17438,7 @@ function renderStateBlock(state, lockInfo, withLegend) {
17433
17438
  lines.push(`Resources (${resourceEntries.length}):`);
17434
17439
  for (const [logicalId, resource] of resourceEntries) {
17435
17440
  lines.push("");
17436
- lines.push(stripControlChars(logicalId));
17441
+ lines.push(stripForDisplay(logicalId));
17437
17442
  lines.push(` Type: ${formatAttributeValue(resource.resourceType)}`);
17438
17443
  lines.push(` PhysicalID: ${formatAttributeValue(resource.physicalId)}`);
17439
17444
  const provisionedBy = resource.provisionedBy ?? "(sdk, legacy default)";
@@ -17447,13 +17452,13 @@ function renderStateBlock(state, lockInfo, withLegend) {
17447
17452
  if (attrEntries.length === 0) lines.push(" Attributes: (none)");
17448
17453
  else {
17449
17454
  lines.push(" Attributes:");
17450
- for (const [k, v] of attrEntries) lines.push(` ${stripControlChars(k)}: ${formatAttributeValue(v)}`);
17455
+ for (const [k, v] of attrEntries) lines.push(` ${stripForDisplay(k)}: ${formatAttributeValue(v)}`);
17451
17456
  }
17452
17457
  const propEntries = Object.entries(resource.properties ?? {});
17453
17458
  if (propEntries.length === 0) lines.push(" Properties: (none)");
17454
17459
  else {
17455
17460
  lines.push(" Properties:");
17456
- for (const [k, v] of propEntries) lines.push(` ${stripControlChars(k)}: ${formatAttributeValue(v)}`);
17461
+ for (const [k, v] of propEntries) lines.push(` ${stripForDisplay(k)}: ${formatAttributeValue(v)}`);
17457
17462
  }
17458
17463
  }
17459
17464
  return lines;
@@ -21381,6 +21386,22 @@ function constructPathField(path) {
21381
21386
  return path === void 0 ? {} : { constructPath: path };
21382
21387
  }
21383
21388
 
21389
+ //#endregion
21390
+ //#region src/cli/commands/local-aws-failure.ts
21391
+ function describeLocalAwsFailureForWarn(err, operation) {
21392
+ if (err instanceof CdkdError) return displaySafe(err.message);
21393
+ const rendered = describeAwsFailureForWarn(err, operation);
21394
+ if (rendered === describeCredentialLoadFailure(err)) getLogger().debug(safeMsg`${operation}: the AWS SDK's own failure message was: ${thrownText(err)}`);
21395
+ return displaySafe(rendered);
21396
+ }
21397
+ function thrownText(err) {
21398
+ try {
21399
+ return err instanceof Error ? String(err.message) : String(err);
21400
+ } catch {
21401
+ return "[unstringifiable throw]";
21402
+ }
21403
+ }
21404
+
21384
21405
  //#endregion
21385
21406
  //#region src/cli/commands/local-state-loader.ts
21386
21407
  async function loadStateForStack(stackName, synthRegion, opts) {
@@ -25426,7 +25447,7 @@ async function resolvePseudoParametersForStartApi(stateRegion, options) {
25426
25447
  sts.destroy();
25427
25448
  }
25428
25449
  } catch (err) {
25429
- logger.warn(`${sourceFlag}: resolver needs \${AWS::AccountId} but STS GetCallerIdentity failed: ${err instanceof Error ? err.message : String(err)}. Substitution will be skipped for AWS::AccountId; affected env entries will be dropped with per-key warnings.`);
25450
+ logger.warn(`${sourceFlag}: resolver needs \${AWS::AccountId} but STS GetCallerIdentity failed: ${describeLocalAwsFailureForWarn(err, "STS GetCallerIdentity")}. Substitution will be skipped for AWS::AccountId; affected env entries will be dropped with per-key warnings.`);
25430
25451
  }
25431
25452
  const partitionAndSuffix = region ? derivePartitionAndUrlSuffix(region) : void 0;
25432
25453
  const bag = {
@@ -26618,7 +26639,7 @@ async function buildEcsImageResolutionContext$1(candidate, stateProvider, option
26618
26639
  fromState: options.fromState
26619
26640
  });
26620
26641
  } catch (err) {
26621
- logger.warn(`Resolver needs \${AWS::AccountId} but STS GetCallerIdentity failed: ${err instanceof Error ? err.message : String(err)}. Substitution will be skipped; affected env / secret entries will be dropped with per-key warnings.`);
26642
+ logger.warn(`Resolver needs \${AWS::AccountId} but STS GetCallerIdentity failed: ${describeLocalAwsFailureForWarn(err, "STS GetCallerIdentity")}. Substitution will be skipped; affected env / secret entries will be dropped with per-key warnings.`);
26622
26643
  }
26623
26644
  const partitionAndSuffix = region ? derivePartitionAndUrlSuffix(region) : void 0;
26624
26645
  ctx.pseudoParameters = {
@@ -26759,6 +26780,32 @@ function createLocalRunTaskCommand() {
26759
26780
  return cmd;
26760
26781
  }
26761
26782
 
26783
+ //#endregion
26784
+ //#region src/cli/commands/local-host-synthesizer.ts
26785
+ function cdkdHostSynthesizer(readOptions) {
26786
+ return { synthesize: async (opts) => {
26787
+ const { stateBucket, verbose, roleArn } = readOptions();
26788
+ if (verbose === true) getLogger().setLevel("debug");
26789
+ if ((roleArn || process.env["CDKD_ROLE_ARN"]) && getAssumedRoleCredentials() === void 0) publishAssumedRoleFromEnv();
26790
+ return new Synthesizer().synthesize({
26791
+ ...opts,
26792
+ ...stateBucket !== void 0 && { stateBucket },
26793
+ ...opts.profile !== void 0 && { macroExpandS3ClientOpts: { profile: opts.profile } }
26794
+ });
26795
+ } };
26796
+ }
26797
+ function publishAssumedRoleFromEnv() {
26798
+ const accessKeyId = process.env["AWS_ACCESS_KEY_ID"];
26799
+ const secretAccessKey = process.env["AWS_SECRET_ACCESS_KEY"];
26800
+ const sessionToken = process.env["AWS_SESSION_TOKEN"];
26801
+ if (!accessKeyId || !secretAccessKey || !sessionToken) throw new Error("--role-arn was given, but the assumed role left no session credentials in the environment; refusing to synthesize as another identity.");
26802
+ setAssumedRoleCredentials({
26803
+ accessKeyId,
26804
+ secretAccessKey,
26805
+ sessionToken
26806
+ });
26807
+ }
26808
+
26762
26809
  //#endregion
26763
26810
  //#region src/cli/commands/local-start-service.ts
26764
26811
  function serviceStrategy() {
@@ -26776,8 +26823,8 @@ function serviceStrategy() {
26776
26823
  };
26777
26824
  }
26778
26825
  function createLocalStartServiceCommand() {
26779
- const cmd = new Command("start-service").description("Run one or more AWS::ECS::Service resources locally as a long-running emulator. Spins up DesiredCount task replicas per service (clamped by --max-tasks) using the same per-task docker network + metadata sidecar pattern as `cdkd local run-task`, then keeps each replica running and restarts it on exit per --restart-policy. ^C tears every replica + sidecar + network down. Each <target> accepts a CDK display path (MyStack/MyService) or stack-qualified logical ID (MyStack:MyServiceXYZ); single-stack apps may omit the stack prefix. When two or more <target>s are supplied, every service is booted into a shared Cloud Map / Service Connect registry so peer services discover each other via docker --add-host overlay. Omit <targets> in an interactive terminal to multi-select the ECS services from a list.").argument("[targets...]", "One or more CDK display paths or stack-qualified logical IDs of the AWS::ECS::Service resources to run (omit to multi-select interactively in a TTY)").addOption(new Option("--from-state", "Read cdkd's S3 state for the target stack and substitute Ref / Fn::GetAtt / Fn::Sub / Fn::ImportValue / Fn::GetStackOutput intrinsics in container images, environment variables, secrets, role ARNs, and volumes. Mutually exclusive with --from-cfn-stack.").default(false)).addOption(new Option("--state-bucket <bucket>", "S3 bucket for --from-state. Falls back to CDKD_STATE_BUCKET env or cdk.json context.cdkd.stateBucket.")).addOption(new Option("--state-prefix <prefix>", "S3 key prefix for --from-state state files.").default("cdkd")).action(withErrorHandling(async (targets, options) => {
26780
- await runEcsServiceEmulator(targets, options, serviceStrategy(), cdkdExtraStateProviders);
26826
+ const cmd = new Command("start-service").description("Run one or more AWS::ECS::Service resources locally as a long-running emulator. Spins up DesiredCount task replicas per service (clamped by --max-tasks) using the same per-task docker network + metadata sidecar pattern as `cdkd local run-task`, then keeps each replica running and restarts it on exit per --restart-policy. ^C tears every replica + sidecar + network down. Each <target> accepts a CDK display path (MyStack/MyService) or stack-qualified logical ID (MyStack:MyServiceXYZ); single-stack apps may omit the stack prefix. When two or more <target>s are supplied, every service is booted into a shared Cloud Map / Service Connect registry so peer services discover each other via docker --add-host overlay. Omit <targets> in an interactive terminal to multi-select the ECS services from a list.").argument("[targets...]", "One or more CDK display paths or stack-qualified logical IDs of the AWS::ECS::Service resources to run (omit to multi-select interactively in a TTY)").addOption(new Option("--from-state", "Read cdkd's S3 state for the target stack and substitute Ref / Fn::GetAtt / Fn::Sub / Fn::ImportValue / Fn::GetStackOutput intrinsics in container images, environment variables, secrets, role ARNs, and volumes. Mutually exclusive with --from-cfn-stack.").default(false)).addOption(new Option("--state-bucket <bucket>", "S3 bucket for --from-state. Falls back to CDKD_STATE_BUCKET env or cdk.json context.cdkd.stateBucket. Also receives the transient upload of a CloudFormation-macro template too large to expand inline.")).addOption(new Option("--state-prefix <prefix>", "S3 key prefix for --from-state state files.").default("cdkd")).action(withErrorHandling(async (targets, options) => {
26827
+ await runEcsServiceEmulator(targets, options, serviceStrategy(), cdkdExtraStateProviders, cdkdHostSynthesizer(() => options));
26781
26828
  }));
26782
26829
  addStartServiceSpecificOptions(cmd);
26783
26830
  warnEngineRoleExposure(cmd, "start-service", [
@@ -27696,7 +27743,7 @@ async function buildAgentCoreImageContext(candidate, stateProvider, options) {
27696
27743
  try {
27697
27744
  accountId = await resolveStackAccountId(region, options.profile, options.fromState);
27698
27745
  } catch (err) {
27699
- logger.warn(safeMsg`${stateProvider.label}: STS GetCallerIdentity failed: ${err instanceof Error ? err.message : String(err)}. ` + "A same-stack ECR image URI referencing ${AWS::AccountId} may not resolve.");
27746
+ logger.warn(safeMsg`${stateProvider.label}: STS GetCallerIdentity failed: ${describeLocalAwsFailureForWarn(err, "STS GetCallerIdentity")}. ` + "A same-stack ECR image URI referencing ${AWS::AccountId} may not resolve.");
27700
27747
  }
27701
27748
  const context = {};
27702
27749
  const pseudo = derivePseudoParametersFromRegion$1(region, accountId);
@@ -27750,7 +27797,7 @@ async function applyAgentCoreCredentialEnv(dockerEnv, args) {
27750
27797
  if (stsRegion) dockerEnv["AWS_REGION"] = stsRegion;
27751
27798
  assumeSucceeded = true;
27752
27799
  } catch (err) {
27753
- logger.warn(`--assume-role: STS AssumeRole(${displayIdent(args.assumeRoleArn, { maxCodePoints: 613 })}) failed: ${displaySafe(err instanceof Error ? err.message : String(err))}. Falling back to the developer's shell credentials.`);
27800
+ logger.warn(`--assume-role: STS AssumeRole(${displayIdent(args.assumeRoleArn, { maxCodePoints: 613 })}) failed: ${describeLocalAwsFailureForWarn(err, "STS AssumeRole")}. Falling back to the developer's shell credentials.`);
27754
27801
  }
27755
27802
  }
27756
27803
  if (!assumeSucceeded) {
@@ -27764,7 +27811,7 @@ async function applyAgentCoreCredentialEnv(dockerEnv, args) {
27764
27811
  }
27765
27812
  function assumeRoleFallbackWarning(args) {
27766
27813
  const fallback = args.profile ? `--profile ${displayIdent(args.profile)}` : args.fallbackWithoutProfile;
27767
- return `--assume-role: STS AssumeRole(${displayIdent(args.assumeRoleArn, { maxCodePoints: 613 })}) failed for ${args.purpose}: ${displaySafe(args.error instanceof Error ? args.error.message : String(args.error))}. Falling back to ${fallback}.`;
27814
+ return `--assume-role: STS AssumeRole(${displayIdent(args.assumeRoleArn, { maxCodePoints: 613 })}) failed for ${args.purpose}: ${describeLocalAwsFailureForWarn(args.error, "STS AssumeRole")}. Falling back to ${fallback}.`;
27768
27815
  }
27769
27816
  function resolveAssumeRoleArn(options, resolved, loaded) {
27770
27817
  const hit = assumeRoleResolutionMemo.get(resolved);
@@ -27875,7 +27922,7 @@ function forwardAwsEnv$1(env) {
27875
27922
  applyCallerIdentityCredentials(env);
27876
27923
  }
27877
27924
  async function assumeAgentCoreExecutionRole(roleArn, region) {
27878
- assertSendableRoleArn(roleArn);
27925
+ assertSendableRoleArn(roleArn, (m) => new CdkdError(m, "LOCAL_INVOKE_AGENTCORE_ASSUME_ROLE_INVALID"));
27879
27926
  const { STSClient } = await import("@aws-sdk/client-sts");
27880
27927
  const sts = new STSClient({
27881
27928
  ...awsClientDefaults({ ignoreAssumedRole: true }),
@@ -27982,10 +28029,11 @@ function createLocalInvokeAgentCoreCommand() {
27982
28029
  function createLocalStartAgentCoreCommand$1() {
27983
28030
  const cmd = createLocalStartAgentCoreCommand({
27984
28031
  embedConfig: getEmbedConfig(),
27985
- extraStateProviders: cdkdExtraStateProviders
28032
+ extraStateProviders: cdkdExtraStateProviders,
28033
+ synthesizer: cdkdHostSynthesizer(() => cmd.opts())
27986
28034
  });
27987
28035
  cmd.addOption(new Option("--from-state", "Read cdkd's S3 state for the target stack and substitute Ref / Fn::GetAtt / Fn::Sub / Fn::ImportValue / Fn::GetStackOutput intrinsics in the AgentCore runtime container image and environment variables. Mutually exclusive with --from-cfn-stack.").default(false));
27988
- cmd.addOption(new Option("--state-bucket <bucket>", "S3 bucket for --from-state. Falls back to CDKD_STATE_BUCKET env or cdk.json context.cdkd.stateBucket."));
28036
+ cmd.addOption(new Option("--state-bucket <bucket>", "S3 bucket for --from-state. Falls back to CDKD_STATE_BUCKET env or cdk.json context.cdkd.stateBucket. Also receives the transient upload of a CloudFormation-macro template too large to expand inline."));
27989
28037
  cmd.addOption(new Option("--state-prefix <prefix>", "S3 key prefix for --from-state state files.").default("cdkd"));
27990
28038
  cmd.addOption(new Option("--no-assume-role", "Explicitly opt out of assuming the deployed execution role: forward your ambient AWS credentials (or the --profile overlay) unchanged, and suppress the \"re-run with --assume-role\" hint that omitting the flag prints when deployed state is loaded."));
27991
28039
  warnEngineRoleExposure(cmd, "start-agentcore", [
@@ -28031,8 +28079,8 @@ function buildAlbEmulatorStrategy(options) {
28031
28079
  return warnUnresolvedLambdaTargetEnv(albStrategy(options), options);
28032
28080
  }
28033
28081
  function createLocalStartAlbCommand() {
28034
- const cmd = new Command("start-alb").description("Run an Application Load Balancer locally: name the ALB, and cdk-local boots the ECS service(s) behind its listeners and stands up a local front-door on each listener port that round-robins across the running replicas and routes its listener rules across the backing services — a stable host endpoint, like behind a real load balancer. The symmetric ALB counterpart of `start-api`. Each <target> accepts a CDK display path (MyStack/MyAlb) or stack-qualified logical ID; single-stack apps may omit the stack prefix. Supports HTTP and HTTPS listeners — by default a cloud-HTTPS listener is served over plain HTTP locally (with X-Forwarded-Proto: https preserved). Pass --tls (or --tls-cert / --tls-key) to terminate TLS locally with a self-signed or user-supplied cert. All six ALB rule-condition fields are honored (path-pattern / host-header / http-header / http-request-method / query-string / source-ip); forward (single and weighted), redirect, and fixed-response actions; and ECS or Lambda targets (a Lambda target group is invoked locally via the Lambda RIE). authenticate-cognito / authenticate-oidc actions enforce a local Bearer-JWT check (or AWSELBAuthSessionCookie pass-through) against the same JWKS / OIDC discovery URL the deployed ALB would; use --bearer-token '<jwt>' to inject a default token or --no-verify-auth to disable the guard. Omit <targets> in an interactive terminal to multi-select the load balancers from a list.").argument("[targets...]", "One or more CDK display paths or stack-qualified logical IDs of the AWS::ElasticLoadBalancingV2::LoadBalancer resources to run (omit to multi-select interactively in a TTY)").addOption(new Option("--from-state", "Read cdkd's S3 state for the target stack and substitute Ref / Fn::GetAtt / Fn::Sub / Fn::ImportValue / Fn::GetStackOutput intrinsics in container images, environment variables, secrets, role ARNs, and volumes of the ECS services behind the ALB. Does NOT reach a Lambda target group's container environment (a boot warning names the affected functions) — use --from-cfn-stack for those. Mutually exclusive with --from-cfn-stack.").default(false)).addOption(new Option("--state-bucket <bucket>", "S3 bucket for --from-state. Falls back to CDKD_STATE_BUCKET env or cdk.json context.cdkd.stateBucket.")).addOption(new Option("--state-prefix <prefix>", "S3 key prefix for --from-state state files.").default("cdkd")).action(withErrorHandling(async (targets, options) => {
28035
- await runEcsServiceEmulator(targets, options, buildAlbEmulatorStrategy(options), cdkdExtraStateProviders);
28082
+ const cmd = new Command("start-alb").description("Run an Application Load Balancer locally: name the ALB, and cdk-local boots the ECS service(s) behind its listeners and stands up a local front-door on each listener port that round-robins across the running replicas and routes its listener rules across the backing services — a stable host endpoint, like behind a real load balancer. The symmetric ALB counterpart of `start-api`. Each <target> accepts a CDK display path (MyStack/MyAlb) or stack-qualified logical ID; single-stack apps may omit the stack prefix. Supports HTTP and HTTPS listeners — by default a cloud-HTTPS listener is served over plain HTTP locally (with X-Forwarded-Proto: https preserved). Pass --tls (or --tls-cert / --tls-key) to terminate TLS locally with a self-signed or user-supplied cert. All six ALB rule-condition fields are honored (path-pattern / host-header / http-header / http-request-method / query-string / source-ip); forward (single and weighted), redirect, and fixed-response actions; and ECS or Lambda targets (a Lambda target group is invoked locally via the Lambda RIE). authenticate-cognito / authenticate-oidc actions enforce a local Bearer-JWT check (or AWSELBAuthSessionCookie pass-through) against the same JWKS / OIDC discovery URL the deployed ALB would; use --bearer-token '<jwt>' to inject a default token or --no-verify-auth to disable the guard. Omit <targets> in an interactive terminal to multi-select the load balancers from a list.").argument("[targets...]", "One or more CDK display paths or stack-qualified logical IDs of the AWS::ElasticLoadBalancingV2::LoadBalancer resources to run (omit to multi-select interactively in a TTY)").addOption(new Option("--from-state", "Read cdkd's S3 state for the target stack and substitute Ref / Fn::GetAtt / Fn::Sub / Fn::ImportValue / Fn::GetStackOutput intrinsics in container images, environment variables, secrets, role ARNs, and volumes of the ECS services behind the ALB. Does NOT reach a Lambda target group's container environment (a boot warning names the affected functions) — use --from-cfn-stack for those. Mutually exclusive with --from-cfn-stack.").default(false)).addOption(new Option("--state-bucket <bucket>", "S3 bucket for --from-state. Falls back to CDKD_STATE_BUCKET env or cdk.json context.cdkd.stateBucket. Also receives the transient upload of a CloudFormation-macro template too large to expand inline.")).addOption(new Option("--state-prefix <prefix>", "S3 key prefix for --from-state state files.").default("cdkd")).action(withErrorHandling(async (targets, options) => {
28083
+ await runEcsServiceEmulator(targets, options, buildAlbEmulatorStrategy(options), cdkdExtraStateProviders, cdkdHostSynthesizer(() => options));
28036
28084
  }));
28037
28085
  addAlbSpecificOptions(cmd);
28038
28086
  warnEngineRoleExposure(cmd, "start-alb", [
@@ -28049,7 +28097,14 @@ function createLocalStartAlbCommand() {
28049
28097
  function createLocalStartCloudFrontCommand$1() {
28050
28098
  const cmd = createLocalStartCloudFrontCommand({
28051
28099
  embedConfig: getEmbedConfig(),
28052
- extraStateProviders: cdkdExtraStateProviders
28100
+ extraStateProviders: cdkdExtraStateProviders,
28101
+ synthesizer: cdkdHostSynthesizer(() => {
28102
+ const { verbose, roleArn } = cmd.opts();
28103
+ return {
28104
+ verbose,
28105
+ roleArn
28106
+ };
28107
+ })
28053
28108
  });
28054
28109
  cmd.addOption(new Option("--from-state", "[not supported on start-cloudfront] Read cdkd's S3 state for the target stack. Refused at startup: the CloudFront emulator consults a state source only under --from-cfn-stack. Use --from-cfn-stack instead.").default(false));
28055
28110
  cmd.addOption(new Option("--state-bucket <bucket>", "[not supported on start-cloudfront] S3 bucket for --from-state. Refused at startup with --from-state."));
@@ -28503,7 +28558,7 @@ async function resolvePseudoParametersForInvoke(stackRegion, options) {
28503
28558
  sts.destroy();
28504
28559
  }
28505
28560
  } catch (err) {
28506
- logger.warn(`${sourceFlag}: resolver needs \${AWS::AccountId} but STS GetCallerIdentity failed: ${err instanceof Error ? err.message : String(err)}. Substitution will be skipped; affected env entries will be dropped with per-key warnings.`);
28561
+ logger.warn(`${sourceFlag}: resolver needs \${AWS::AccountId} but STS GetCallerIdentity failed: ${describeLocalAwsFailureForWarn(err, "STS GetCallerIdentity")}. Substitution will be skipped; affected env entries will be dropped with per-key warnings.`);
28507
28562
  }
28508
28563
  const partitionAndSuffix = region ? derivePartitionAndUrlSuffix(region) : void 0;
28509
28564
  const bag = {
@@ -28571,8 +28626,7 @@ async function applyLambdaCredentialEnv(dockerEnv, args) {
28571
28626
  if (stsRegion) dockerEnv["AWS_REGION"] = stsRegion;
28572
28627
  assumeSucceeded = true;
28573
28628
  } catch (err) {
28574
- const reason = err instanceof Error ? err.message : String(err);
28575
- logger.warn(`--assume-role: STS AssumeRole(${displayIdent(args.assumeRoleArn, { maxCodePoints: 613 })}) failed: ${displaySafe(reason)}. Falling back to the developer's shell credentials.`);
28629
+ logger.warn(`--assume-role: STS AssumeRole(${displayIdent(args.assumeRoleArn, { maxCodePoints: 613 })}) failed: ${describeLocalAwsFailureForWarn(err, "STS AssumeRole")}. Falling back to the developer's shell credentials.`);
28576
28630
  }
28577
28631
  }
28578
28632
  if (!assumeSucceeded) {
@@ -28585,7 +28639,7 @@ async function applyLambdaCredentialEnv(dockerEnv, args) {
28585
28639
  }
28586
28640
  }
28587
28641
  async function assumeLambdaExecutionRole(roleArn, region) {
28588
- assertSendableRoleArn(roleArn);
28642
+ assertSendableRoleArn(roleArn, (m) => new CdkdError(m, "LOCAL_INVOKE_ASSUME_ROLE_INVALID"));
28589
28643
  const { STSClient } = await import("@aws-sdk/client-sts");
28590
28644
  const sts = new STSClient({
28591
28645
  ...awsClientDefaults({ ignoreAssumedRole: true }),
@@ -28597,7 +28651,7 @@ async function assumeLambdaExecutionRole(roleArn, region) {
28597
28651
  RoleSessionName: `cdkd-local-invoke-${Date.now()}`,
28598
28652
  DurationSeconds: 3600
28599
28653
  }))).Credentials;
28600
- if (!creds?.AccessKeyId || !creds.SecretAccessKey || !creds.SessionToken) throw new Error(`AssumeRole(${displayIdent(roleArn, { maxCodePoints: 613 })}) returned no usable credentials.`);
28654
+ if (!creds?.AccessKeyId || !creds.SecretAccessKey || !creds.SessionToken) throw new CdkdError(`AssumeRole(${displayIdent(roleArn, { maxCodePoints: 613 })}) returned no usable credentials.`, "LOCAL_INVOKE_ASSUMEROLE_NO_CREDS");
28601
28655
  return {
28602
28656
  accessKeyId: creds.AccessKeyId,
28603
28657
  secretAccessKey: creds.SecretAccessKey,
@@ -28795,4 +28849,4 @@ function collectVerbFlags(program) {
28795
28849
 
28796
28850
  //#endregion
28797
28851
  export { canonicalizeIpProtocolValue as a, buildProgram, resolveSecretDerivedPrincipals as i, runDestroyForStack as n, resolvedResourceTimeoutMs as o, isResolvableSecretPrincipalList as r, canonicalizeIpv4Cidr as t };
28798
- //# sourceMappingURL=program-D5gcmWad.js.map
28852
+ //# sourceMappingURL=program-BQnReLnG.js.map