@go-to-k/cdkd 0.291.15 → 0.291.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
- import { $ as yellow, $a as normalizeAwsError, $i as uploadCfnTemplate, $n as repairMalformedResourcePropertiesForReadOnly, $r as createAssetRedirectResolver, $t as requireConfigObject, A as createPreDeleteFinalSnapshot, Ai as warnFinchArgvExposure, An as malformedOutputsRefusalMessage, Ar as S3StateBackend, At as carriesDynamicReference, B as isStatefulRecreateTargetSync, Bi as resolveAutoAssetStorage, Bn as refuseMalformedOrphansForDestroy, Br as hasReadableExportSet, Bt as isSettledInstanceState, C as namesAnyDeclaredParameter, Ci as getDockerCmd, Cn as isReadableResourceEntry, Cr as pathCrossesDottedKey, Ct as UNSPECIFIED_SKIP_REASON, D as PRE_DELETE_SNAPSHOT_TYPES, Da as resetAwsClients, Di as redactDockerArgvValues, Dn as malformedOrphanRecordsWarning, Dr as redactSecretsForState, Dt as disableInstanceApiTermination, E as ATOMIC_FINAL_SNAPSHOT_TYPES, Ea as getAwsClients, Ei as partitionSensitiveEnv, En as malformedLocalOutputsWarning, Er as recoverMaskedOutput, Et as isWaitAbandonedError, F as extractDeploymentEventError, Fa as DeployCancelledError, Fi as Synthesizer, Fn as malformedResourcesWarning, Fr as forceQuitRecoveryClause, Ft as isImpossibleEmptyStoredAttribute, G as toCfnInteger, Ga as ResourceTimeoutError, Gi as resolveUseCdkBootstrapAssets, Gn as refuseMalformedResourceEntries, Gr as isReadableBag, Gt as coerceCfnBoolean, H as WARM_THROUGHPUT_MEMBERS, Ha as NestedStackChildDirectDestroyError, Hi as resolveSkipPrefix, Hn as refuseMalformedOutputs, Hr as hasUnverifiableParameterRefusal, Ht as normalizeAwsTagsToCfn, I as makeSiblingClaimReader, Ia as DynamicReferenceRegionAmbiguousError, Ii as synthesisStatusMessage, In as malformedStateRefusalMessage, Ir as formatLockExpiry, It as isNamelessDynamicReferenceError, J as bold, Ja as StackTerminationProtectionError, Ji as ssmResolvedValueType, Jn as refuseMalformedResourcesForDestroy, Jr as shouldRetainResource, Jt as configIntegerRefusal, K as toFiniteNumber, Ka as ResourceUpdateNotSupportedError, Ki as stateBucketExistenceConfirmed, Kn as refuseMalformedResourceEntriesForOrphan, Kr as orphansAfterRollback, Kt as coerceCfnInteger, L as planOrphanAdoption, La as IntrinsicResolutionRefusalError, Li as getDefaultStateBucketName, Ln as refuseDivergentRecordRegionForDestroy, Lr as CUSTOM_RESOURCE_RESPONSE_PREFIX, Lt as isUnboundTemplateParameter, M as refusesFinalSnapshot, Mi as stripControlChars, Mn as malformedRenderedContainersWarning, Mr as UNREPRODUCIBLE_LOCK_CLAUSE, Mt as cfnRefValueFromPhysicalId, N as unsupportedFinalSnapshotError, Na as CrossAccountSecretRefusalError, Ni as AssetManifestLoader, Nn as malformedResourceEntriesWarning, Nr as buildForceUnlockCommand, Nt as coerceParameterTypedValue, O as buildFinalSnapshotIdentifier, Oa as runWithStackAwsClients, Oi as runDockerForeground, On as malformedOrphansRefusalMessage, Or as scrubResourceRecord, Ot as isTerminationProtectionPropagationError, P as makeCanonicalizePropertiesFn, Pi as getDockerImageBySourceHash, Pn as malformedResourcePropertiesWarning, Pr as buildLockContentionMessage, Pt as getAccountInfo, Q as red, Qi as findLargeInlineResources, Qn as repairMalformedResourceEntriesForReadOnly, Qr as buildAssetRedirectMap, Qt as requireConfigArray, R as MULTI_REGION_RECREATE_BLOCKED_TYPES, Ra as LocalInvokeBuildError$1, Ri as getLegacyStateBucketName, Rn as refuseMalformedNestedChildOutputs, Rr as DEFAULT_STATE_PREFIX, Rt as parameterTypeMayLoseSecretIdentity, S as computeParameterTaint, Sa as resolveAssemblyPath, Si as formatDockerLoginError, Sn as hasReadableResources, Sr as maskSecretsInText, St as slowCcOperationTimeoutMs, T as resourcesNamingDeclaredParameter, Ta as AwsClients, Ti as isMalformedEnvKey, Tn as malformedExportSourceWarning, Tr as recordMaskOnlyValuesIn, Tt as deleteSkipReason, U as coerceWarmThroughput$1, Ua as PartialFailureError, Ui as resolveStateBucketWithDefault, Un as refuseMalformedOutputsForDestroy, Ur as importableOutputKeys, Ut as resolveExplicitPhysicalId, V as renderStatefulReason, Va as MalformedProducerRecordRefusalError, Vi as resolveCaptureObservedState, Vn as refuseMalformedOrphansForOrphan, Vr as hasReasonlessBaselineRefusal, Vt as WAFv2WebACLProvider, W as isWarmThroughputDecrease, Wa as ProvisioningError, Wi as resolveStateBucketWithDefaultAndSource, Wn as refuseMalformedResourceAttributesForOrphan, Wr as importableOutputs, Wt as assertRegionMatch, X as gray, Xa as SynthesisError, Xi as CFN_TEMPLATE_URL_LIMIT, Xn as repairMalformedOrphansForReadOnly, Xr as stringifyValue, Xt as readConfigString, Y as cyan, Yi as CFN_TEMPLATE_BODY_LIMIT, Yn as refuseMalformedState, Yr as AssetPublisher, Yt as configStringRefusal, Z as green, Zi as MIGRATE_TMP_PREFIX, Zn as repairMalformedOutputsForReadOnly, Zr as WorkGraph, Zt as replayWarn, _ as bagHoldsSecretExpression, _a as nullPrototypeRecord, _i as describeDockerCapturedOutput, _n as UNREADABLE_ORPHANS_CONTAINER_ROW, _r as identityKeyFor, _t as endCommandInterruptScope, a as DeploymentEventsStore, aa as decodeListingKey, ai as ensureAssetStorage, an as s3BucketDomainName, ao as isThrottlingError, ar as describeTypeWithThrottleRetry, at as secretBearingStateKeyWarning, b as mergeNoChangeOutputs, ba as displayAssemblyPath, bi as dockerSpawnEnvWithSensitive, bn as hasReadableOrphans, br as markSameGenerationBag, bt as startInterruptWatch, c as replayFailedOperations, ca as canonicalizeRegion, ci as parseBootstrapMarker, cn as s3BucketWebsiteUrl, co as markRedactedCause, cr as TemplateParser, ct as IAMRoleProvider, d as updatePartialMessage, da as failedStageNote, di as validateContainerRepoName, dn as applyCallerIdentityCredentials, do as safeStringify, dr as STATE_SOURCED_READBACK_RULES, dt as ProviderRegistry, ea as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, ei as loadPublishableAssetManifest, en as requireConfigString, eo as withErrorHandling, er as repairMalformedResourcesForReadOnly, et as collectDeclaredOutputNames, f as updatePartialReason, fa as globMatches, fi as buildDenyExternalAccessPolicy, fn as callerEnvCredentials, fr as TEMPLATE_SOURCED_RULES, ft as wouldReturnToSdkProvider, g as computeImplicitDeleteEdges, ga as hasPlainPrototype, gi as warnManifestExecutable, gn as STATE_RESOURCES_MALFORMED, gr as errorCauseChain, gt as beginCommandInterruptScope, h as IMPLICIT_DELETE_DEPENDENCIES, ha as hasOwnKey, hi as resolveDockerContextDirectory, hn as INTRINSIC_KEYS, hr as dynamicReferenceTokens, ht as maskerOrIdentity, i as DeploymentEventsReader, ia as producerRecordKey, ii as assertAssetBucketRegion, in as s3BucketArn, io as isRetryableTransientError, ir as findSilentDropProperties, it as secretBearing, j as isFinalSnapshotError, ja as CdkdError, ji as escapeRegExp, jn as malformedOutputsWarning, jr as rebuildClientForBucketRegion, jt as carriesFetchableDynamicReference, k as ccRoutedFinalSnapshotError, ka as setAwsClients, ki as runDockerStreaming, kn as malformedOrphansWarning, kr as LockManager, kt as IntrinsicFunctionResolver, l as replayRollback, la as derivePartitionAndUrlSuffix, li as readBootstrapMarkerBody, ln as applyRoleArnIfSet, lo as retryClassificationText, lr as STATE_SOURCED_BASELINE_RULES, lt as collectInlinePolicyNamesManagedBySiblings, m as maskingRetryLogger, ma as defineOwnKey, mi as buildDockerImage, mn as DiffCalculator, mr as createSecretMasker, mt as maskDeep, n as DEFAULT_RESOURCE_WARN_AFTER_MS, na as injectiveKeyPrefix, ni as AssetModeResolver, nn as producerRegionsFromState, no as shellQuote, nr as safeStackName, nt as exportAliasCollisionScrubWarning, o as planFailedOps, oa as expectedOwnerParam, oi as getBootstrapMarkerKey, on as s3BucketDualStackDomainName, oo as isTransientServerError, or as withRetry, ot as secretSafeKeyDisplay, p as withResourceDeadline, pa as processStackMessages, pi as assertCdkLocalDockerContextContained, pn as envCredentialsAreAssumedRole, pr as carriesSecretMask, pt as createMaskedRetryLogger, q as formatResourceLine, qa as StackHasActiveImportsError, qi as warnDeprecatedNoPrefixCliFlag, qn as refuseMalformedResourcePropertiesForOrphan, qr as orphansCarriedFrom, qt as configBooleanRefusal, r as DeployEngine, ra as producerCoordinateKey, ri as BOOTSTRAP_MARKER_PREFIX, rn as withSharedDrainBudget, ro as isMarkedNonRetryable, rr as findActionableSilentDrops, rt as isExportAliasCollision, s as planRollback, sa as PARTITION_TABLE, si as isCrossRegionRedirect, sn as s3BucketRegionalDomainName, so as markNonRetryable, sr as DagBuilder, st as getCurrentResourceSecrets, t as DEFAULT_RESOURCE_TIMEOUT_MS, ta as injectiveKey, ti as rewriteTemplateAssetReferences, tn as classifyReplaySecretRegion, to as pasteableCommand, tr as safeRegion, tt as collectPublishedOutputNames, u as resolveReplacementOldType, ua as AssemblyReader, ui as validateAssetBucketName, un as AWS_CREDENTIAL_ENV_KEYS, uo as describeAwsFailure, ur as STATE_SOURCED_CROSS_GENERATION_RULES, ut as clearOnUpdateRemoval, v as isSecretBearingReferenceString, va as ownValue, vi as describeDockerExecFailure, vn as UNREADABLE_RESOURCES_MAP_ROW, vr as isSingleDynamicReferenceToken, vt as interruptWatchListenerCount, w as reachableDivergentParameters, wa as resolveBucketRegion, wi as isDockerClientEnvKey, wn as malformedExportNamesWarning, wr as recordMaskOnlyValue, wt as deleteIndeterminateGuards, x as bindingSkippedOutputs, xa as renderAssemblyPathEscape, xi as finchSecretArgvRefusal, xn as hasReadableOutputs, xr as maskSecretsInError, xt as CloudControlProvider, y as keptWholeReasonText, ya as absoluteAssemblyPathEscape, yi as describeDockerFailure, yn as displayLogicalId, yr as isUncertifiedBaselineMaskPosition, yt as isInterruptedWaitError, z as isStatefulRecreateTargetForReplace, za as LocalStartServiceError, zi as resolveApp, zn as refuseMalformedOrphans, zr as exportNamesCarriedFrom, zt as refStateLookupFromResource } from "./deploy-engine-Bt0ttXRi.js";
1
+ import { $ as yellow, $i as findLargeInlineResources, $n as repairMalformedOutputsForReadOnly, $r as WorkGraph, $t as replayWarn, A as createPreDeleteFinalSnapshot, Aa as setAwsClients, Ai as runDockerStreaming, An as malformedOrphansRefusalMessage, Ar as scrubResourceRecord, At as isTerminationProtectionPropagationError, B as isStatefulRecreateTargetSync, Ba as LocalStartServiceError, Bi as resolveApp, Bn as refuseMalformedNestedChildOutputs, Br as DEFAULT_STATE_PREFIX, Bt as parameterTypeMayLoseSecretIdentity, C as namesAnyDeclaredParameter, Ca as resolveAssemblyPath, Ci as formatDockerLoginError, Cn as hasReadableOutputs, Cr as maskSecretsInError, Ct as CloudControlProvider, D as PRE_DELETE_SNAPSHOT_TYPES, Da as getAwsClients, Di as partitionSensitiveEnv, Dn as malformedExportSourceWarning, Dr as recordMaskOnlyValuesIn, Dt as deleteSkipReason, E as ATOMIC_FINAL_SNAPSHOT_TYPES, Ea as AwsClients, Ei as isMalformedEnvKey, En as malformedExportNamesWarning, Er as recordMaskOnlyValue, Et as deleteIndeterminateGuards, F as extractDeploymentEventError, Fi as getDockerImageBySourceHash, Fn as malformedResourceEntriesWarning, Fr as buildForceUnlockCommand, Ft as coerceParameterTypedValue, G as toCfnInteger, Ga as ProvisioningError, Gi as resolveStateBucketWithDefaultAndSource, Gn as refuseMalformedOutputsForDestroy, Gr as importableOutputKeys, Gt as resolveExplicitPhysicalId, H as WARM_THROUGHPUT_MEMBERS, Ha as MalformedProducerRecordRefusalError, Hi as resolveCaptureObservedState, Hn as refuseMalformedOrphansForDestroy, Hr as hasReadableExportSet, Ht as isSettledInstanceState, I as makeSiblingClaimReader, Ia as DeployCancelledError, Ii as Synthesizer, In as malformedResourcePropertiesWarning, Ir as buildLockContentionMessage, It as getAccountInfo, J as bold, Ja as StackHasActiveImportsError, Ji as warnDeprecatedNoPrefixCliFlag, Jn as refuseMalformedResourceEntriesForOrphan, Jr as orphansAfterRollback, Jt as coerceCfnInteger, K as toFiniteNumber, Ka as ResourceTimeoutError, Ki as resolveUseCdkBootstrapAssets, Kn as refuseMalformedResourceAttributesForOrphan, Kr as importableOutputs, Kt as assertRegionMatch, L as planOrphanAdoption, La as DynamicReferenceRegionAmbiguousError, Li as synthesisStatusMessage, Ln as malformedResourcesWarning, Lr as forceQuitRecoveryClause, Lt as isImpossibleEmptyStoredAttribute, M as refusesFinalSnapshot, Ma as CdkdError, Mi as escapeRegExp, Mn as malformedOutputsRefusalMessage, Mr as S3StateBackend, Mt as carriesDynamicReference, N as unsupportedFinalSnapshotError, Ni as stripControlChars, Nn as malformedOutputsWarning, Nr as rebuildClientForBucketRegion, Nt as carriesFetchableDynamicReference, O as buildFinalSnapshotIdentifier, Oa as resetAwsClients, Oi as redactDockerArgvValues, On as malformedLocalOutputsWarning, Or as recoverMaskedOutput, Ot as isWaitAbandonedError, P as makeCanonicalizePropertiesFn, Pa as CrossAccountSecretRefusalError, Pi as AssetManifestLoader, Pn as malformedRenderedContainersWarning, Pr as UNREPRODUCIBLE_LOCK_CLAUSE, Pt as cfnRefValueFromPhysicalId, Q as red, Qi as MIGRATE_TMP_PREFIX, Qn as repairMalformedOrphansForReadOnly, Qr as stringifyValue, Qt as readConfigString, R as MULTI_REGION_RECREATE_BLOCKED_TYPES, Ra as IntrinsicResolutionRefusalError, Ri as getDefaultStateBucketName, Rn as malformedStateRefusalMessage, Rr as formatLockExpiry, Rt as isNamelessDynamicReferenceError, S as computeParameterTaint, Sa as renderAssemblyPathEscape, Si as finchSecretArgvRefusal, Sn as hasReadableOrphans, Sr as markSameGenerationBag, St as startInterruptWatch, T as resourcesNamingDeclaredParameter, Ta as resolveBucketRegion, Ti as isDockerClientEnvKey, Tn as isReadableResourceEntry, Tr as pathCrossesDottedKey, Tt as UNSPECIFIED_SKIP_REASON, U as coerceWarmThroughput$1, Ua as NestedStackChildDirectDestroyError, Ui as resolveSkipPrefix, Un as refuseMalformedOrphansForOrphan, Ur as hasReasonlessBaselineRefusal, Ut as WAFv2WebACLProvider, V as renderStatefulReason, Vi as resolveAutoAssetStorage, Vn as refuseMalformedOrphans, Vr as exportNamesCarriedFrom, Vt as refStateLookupFromResource, W as isWarmThroughputDecrease, Wa as PartialFailureError, Wi as resolveStateBucketWithDefault, Wn as refuseMalformedOutputs, Wr as hasUnverifiableParameterRefusal, Wt as normalizeAwsTagsToCfn, X as gray, Xi as CFN_TEMPLATE_BODY_LIMIT, Xn as refuseMalformedResourcesForDestroy, Xr as shouldRetainResource, Xt as configIntegerRefusal, Y as cyan, Ya as StackTerminationProtectionError, Yi as ssmResolvedValueType, Yn as refuseMalformedResourcePropertiesForOrphan, Yr as orphansCarriedFrom, Yt as configBooleanRefusal, Z as green, Za as SynthesisError, Zi as CFN_TEMPLATE_URL_LIMIT, Zn as refuseMalformedState, Zr as AssetPublisher, Zt as configStringRefusal, _ as bagHoldsSecretExpression, _a as hasPlainPrototype, _i as resolveDockerContextDirectory, _n as INTRINSIC_KEYS, _r as dynamicReferenceTokens, _t as maskerOrIdentity, a as DeploymentEventsStore, aa as producerRecordKey, ai as BOOTSTRAP_MARKER_PREFIX, an as withSharedDrainBudget, ao as isRetryableTransientError, ar as findActionableSilentDrops, at as secretBearingStateKeyWarning, b as mergeNoChangeOutputs, ba as absoluteAssemblyPathEscape, bi as describeDockerFailure, bn as UNREADABLE_RESOURCES_MAP_ROW, br as isSingleDynamicReferenceToken, bt as interruptWatchListenerCount, c as replayFailedOperations, ca as PARTITION_TABLE, ci as getBootstrapMarkerKey, cn as s3BucketDualStackDomainName, co as markNonRetryable, cr as withRetry, ct as IAMRoleProvider, d as updatePartialMessage, da as AssemblyReader, di as readBootstrapMarkerBody, dn as applyRoleArnIfSet, do as describeAwsFailure, dr as STATE_SOURCED_BASELINE_RULES, dt as definedAttributes, ea as uploadCfnTemplate, ei as buildAssetRedirectMap, en as requireConfigArray, eo as normalizeAwsError, er as repairMalformedResourceEntriesForReadOnly, et as collectDeclaredOutputNames, f as updatePartialReason, fa as failedStageNote, fi as validateAssetBucketName, fn as AWS_CREDENTIAL_ENV_KEYS, fo as safeStringify, fr as STATE_SOURCED_CROSS_GENERATION_RULES, ft as stringifyIfAssigned, g as computeImplicitDeleteEdges, ga as hasOwnKey, gi as buildDockerImage, gn as DiffCalculator, gr as createSecretMasker, gt as maskDeep, h as IMPLICIT_DELETE_DEPENDENCIES, ha as defineOwnKey, hi as assertCdkLocalDockerContextContained, hn as envCredentialsAreAssumedRole, hr as carriesSecretMask, ht as createMaskedRetryLogger, i as DeploymentEventsReader, ia as producerCoordinateKey, ii as AssetModeResolver, in as producerRegionsFromState, io as isMarkedNonRetryable, ir as safeStackName, it as secretBearing, j as isFinalSnapshotError, ji as warnFinchArgvExposure, jn as malformedOrphansWarning, jr as LockManager, jt as IntrinsicFunctionResolver, k as ccRoutedFinalSnapshotError, ka as runWithStackAwsClients, ki as runDockerForeground, kn as malformedOrphanRecordsWarning, kr as redactSecretsForState, kt as disableInstanceApiTermination, l as replayRollback, la as canonicalizeRegion, li as isCrossRegionRedirect, ln as s3BucketRegionalDomainName, lo as markRedactedCause, lr as DagBuilder, lt as collectInlinePolicyNamesManagedBySiblings, m as maskingRetryLogger, ma as processStackMessages, mi as buildDenyExternalAccessPolicy, mn as callerEnvCredentials, mr as TEMPLATE_SOURCED_RULES, mt as wouldReturnToSdkProvider, n as DEFAULT_RESOURCE_WARN_AFTER_MS, na as injectiveKey, ni as loadPublishableAssetManifest, nn as requireConfigString, no as pasteableCommand, nr as repairMalformedResourcesForReadOnly, nt as exportAliasCollisionScrubWarning, o as planFailedOps, oa as decodeListingKey, oi as assertAssetBucketRegion, on as s3BucketArn, oo as isThrottlingError, or as findSilentDropProperties, ot as secretSafeKeyDisplay, p as withResourceDeadline, pa as globMatches, pi as validateContainerRepoName, pn as applyCallerIdentityCredentials, pr as STATE_SOURCED_READBACK_RULES, pt as ProviderRegistry, q as formatResourceLine, qa as ResourceUpdateNotSupportedError, qi as stateBucketExistenceConfirmed, qn as refuseMalformedResourceEntries, qr as isReadableBag, qt as coerceCfnBoolean, r as DeployEngine, ra as injectiveKeyPrefix, ri as rewriteTemplateAssetReferences, rn as classifyReplaySecretRegion, ro as shellQuote, rr as safeRegion, rt as isExportAliasCollision, s as planRollback, sa as expectedOwnerParam, si as ensureAssetStorage, sn as s3BucketDomainName, so as isTransientServerError, sr as describeTypeWithThrottleRetry, st as getCurrentResourceSecrets, t as DEFAULT_RESOURCE_TIMEOUT_MS, ta as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, ti as createAssetRedirectResolver, tn as requireConfigObject, to as withErrorHandling, tr as repairMalformedResourcePropertiesForReadOnly, tt as collectPublishedOutputNames, u as resolveReplacementOldType, ua as derivePartitionAndUrlSuffix, ui as parseBootstrapMarker, un as s3BucketWebsiteUrl, uo as retryClassificationText, ur as TemplateParser, ut as clearOnUpdateRemoval, v as isSecretBearingReferenceString, va as nullPrototypeRecord, vi as describeDockerCapturedOutput, vn as STATE_RESOURCES_MALFORMED, vr as errorCauseChain, vt as beginCommandInterruptScope, w as reachableDivergentParameters, wi as getDockerCmd, wn as hasReadableResources, wr as maskSecretsInText, wt as slowCcOperationTimeoutMs, x as bindingSkippedOutputs, xa as displayAssemblyPath, xi as dockerSpawnEnvWithSensitive, xn as displayLogicalId, xr as isUncertifiedBaselineMaskPosition, xt as isInterruptedWaitError, y as keptWholeReasonText, ya as ownValue, yi as describeDockerExecFailure, yn as UNREADABLE_ORPHANS_CONTAINER_ROW, yr as identityKeyFor, yt as endCommandInterruptScope, z as isStatefulRecreateTargetForReplace, za as LocalInvokeBuildError$1, zi as getLegacyStateBucketName, zn as refuseDivergentRecordRegionForDestroy, zr as CUSTOM_RESOURCE_RESPONSE_PREFIX, zt as isUnboundTemplateParameter } from "./deploy-engine-xxVOQPPr.js";
2
2
  import { C as displayAwsMessage, D as truncateCodePoints, E as isPasteableIdent, S as UNRENDERABLE, T as displaySafe, _ as withSkipPrefix, b as SECRET_REF_MAX_CODE_POINTS, c as PATTERN_B_NAME_OPTIONS, f as explicitNamePropertyFor, h as getCurrentStackName, i as reserveStdoutForPayload, l as PATTERN_B_NAME_PROPERTIES, m as generateResourceNameWithFallback, n as getLogger, o as runStackBuffered, p as generateResourceName, s as getLiveRenderer, u as PATTERN_B_RESOURCE_TYPES, v as withStackName, w as displayIdent, x as STACK_REF_MAX_CODE_POINTS } from "./logger-GASr9bAF.js";
3
3
  import { n as awsClientDefaults, s as ambientRegion } from "./aws-client-defaults-jISU4PHo.js";
4
- import { t as getCdkdVersion } from "./version-2myEXI65.js";
5
- import { a as renderDisableCommand, i as protectedReplacementAdvice, r as UNNAMEABLE_ID_CLAUSE, t as ASGProvider } from "./asg-provider-CEGHMZnN.js";
4
+ import { t as getCdkdVersion } from "./version-DMRkEtU2.js";
5
+ import { a as renderDisableCommand, i as protectedReplacementAdvice, r as UNNAMEABLE_ID_CLAUSE, t as ASGProvider } from "./asg-provider-CHM7_WdJ.js";
6
6
  import { AsyncLocalStorage } from "node:async_hooks";
7
7
  import { createHash, randomBytes, randomUUID } from "node:crypto";
8
8
  import { CopyObjectCommand, CreateBucketCommand, DeleteBucketAnalyticsConfigurationCommand, DeleteBucketCommand, DeleteBucketCorsCommand, DeleteBucketEncryptionCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketOwnershipControlsCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketOwnershipControlsCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, NotFound, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
@@ -767,7 +767,7 @@ const RESOURCE_PROPERTY_FORMAT = /^[A-Z][A-Za-z0-9]+(::[A-Z][A-Za-z0-9]+)+:[A-Z]
767
767
  function parseRouteEntries(value, previous, flag) {
768
768
  const parsed = value.split(",").map((s) => s.trim()).filter(Boolean);
769
769
  for (const token of parsed) {
770
- if (!RESOURCE_PROPERTY_FORMAT.test(token)) throw new Error(`Invalid ${flag} value "${token}": expected <ResourceType>:<PropertyName> with PascalCase on both halves (e.g. AWS::Lambda::Function:RuntimeManagementConfig).`);
770
+ if (!RESOURCE_PROPERTY_FORMAT.test(token)) throw new Error(`Invalid ${flag} value "${token}": expected <ResourceType>:<PropertyName> with PascalCase on both halves (e.g. AWS::ApiGatewayV2::Api:Body).`);
771
771
  if (token.startsWith("Custom::")) throw new Error(`Invalid ${flag} value "${token}": Custom:: resources are routed through cfn-response and have no write-side silent drop at cdkd, so the flag would have no effect. Use --allow-unsupported-types for type-level escape hatches instead.`);
772
772
  }
773
773
  return [...previous ?? [], ...parsed];
@@ -813,7 +813,7 @@ function parseAllowUnsupportedPropertiesToken(value, previous) {
813
813
  * values go UNWRITTEN when the preference is honoured, and that it is ignored
814
814
  * when the resource routes to Cloud Control for another reason.
815
815
  */
816
- const preferSdkRouteOption = new Option("--prefer-sdk-route <entries>", "Comma-separated <ResourceType>:<PropertyName> tokens to keep on the SDK provider instead of auto-routing the resource to Cloud Control. The named values are then NOT written to AWS — the deployed resource is missing the field. Ignored for a resource that routes to Cloud Control for another reason (a sibling unwired property, or a sticky cc-api state record), where the values are written after all. Example: --prefer-sdk-route AWS::Lambda::Function:RuntimeManagementConfig").argParser(parsePreferSdkRouteToken);
816
+ const preferSdkRouteOption = new Option("--prefer-sdk-route <entries>", "Comma-separated <ResourceType>:<PropertyName> tokens to keep on the SDK provider instead of auto-routing the resource to Cloud Control. The named values are then NOT written to AWS — the deployed resource is missing the field. Ignored for a resource that routes to Cloud Control for another reason (a sibling unwired property, or a sticky cc-api state record), where the values are written after all. Example: --prefer-sdk-route AWS::ApiGatewayV2::Api:Body").argParser(parsePreferSdkRouteToken);
817
817
  /**
818
818
  * The deprecated spelling. HIDDEN from `--help` so new users meet only the
819
819
  * successor, but still parsed so existing scripts keep working; it warns once
@@ -2937,9 +2937,9 @@ function isPromptAbortError(error) {
2937
2937
  * scope for v1; no `--force-stateful-recreation` bypass since
2938
2938
  * this is a structural limitation, not a data-loss footgun.
2939
2939
  *
2940
- * Plus one cross-flag invariant: `--recreate-via-cc-api MyLambda`
2941
- * combined with `--allow-unsupported-properties AWS::Lambda::Function:RuntimeManagementConfig`
2942
- * on a resource whose template carries `RuntimeManagementConfig` is **ambiguous
2940
+ * Plus one cross-flag invariant: `--recreate-via-cc-api MyApi`
2941
+ * combined with `--prefer-sdk-route AWS::ApiGatewayV2::Api:Body`
2942
+ * on a resource whose template carries `Body` is **ambiguous
2943
2943
  * intent** — does the user want SDK + silent drop, or CC migration?
2944
2944
  * Fail fast and let the user pick one strategy per resource.
2945
2945
  */
@@ -12537,6 +12537,16 @@ function isSqsQueueUrl(value) {
12537
12537
  */
12538
12538
  const SNS_MAXIMUM_MESSAGE_SIZE_DEFAULT = "262144";
12539
12539
  /**
12540
+ * The attribute map `create()` records, from the topic ARN (the physical id).
12541
+ * `import()` returns it too (issue #3627).
12542
+ */
12543
+ function snsTopicAttributes(topicArn) {
12544
+ return {
12545
+ TopicArn: topicArn,
12546
+ TopicName: topicArn.split(":").pop()
12547
+ };
12548
+ }
12549
+ /**
12540
12550
  * AWS SNS Topic Provider
12541
12551
  *
12542
12552
  * Implements resource provisioning for AWS::SNS::Topic using the SNS SDK.
@@ -13038,7 +13048,7 @@ var SNSTopicProvider = class {
13038
13048
  await this.snsClient.send(new GetTopicAttributesCommand({ TopicArn: input.knownPhysicalId }));
13039
13049
  return {
13040
13050
  physicalId: input.knownPhysicalId,
13041
- attributes: {}
13051
+ attributes: snsTopicAttributes(input.knownPhysicalId)
13042
13052
  };
13043
13053
  } catch (err) {
13044
13054
  if (err instanceof NotFoundException) return null;
@@ -13053,7 +13063,7 @@ var SNSTopicProvider = class {
13053
13063
  if (!t.TopicArn) continue;
13054
13064
  if (t.TopicArn.substring(t.TopicArn.lastIndexOf(":") + 1) === desiredName) return {
13055
13065
  physicalId: t.TopicArn,
13056
- attributes: {}
13066
+ attributes: snsTopicAttributes(t.TopicArn)
13057
13067
  };
13058
13068
  }
13059
13069
  marker = list.NextToken;
@@ -13377,88 +13387,6 @@ function mapDeliveryStatusLogging(attrs, stateCaseMap = /* @__PURE__ */ new Map(
13377
13387
  return result;
13378
13388
  }
13379
13389
 
13380
- //#endregion
13381
- //#region src/provisioning/attribute-map.ts
13382
- /**
13383
- * The ONE spelling of the attribute-map rule an SDK provider's `create()` /
13384
- * `update()` / `import()` result follows (issue #3077, closing the `?? ''`
13385
- * shape `docs/provider-development.md` forbids under "Never store an
13386
- * empty-string placeholder"):
13387
- *
13388
- * an attribute cdkd could not read back is ABSENT from the map — never
13389
- * recorded as the empty string, and never as a present-but-`undefined` key.
13390
- *
13391
- * The consumers of `ResourceState.attributes` all key off exactly that
13392
- * distinction, and a sentinel puts every one of them on the wrong branch:
13393
- *
13394
- * - the deploy engine persists the map as-is, so `''` becomes the recorded
13395
- * value of a field AWS never assigned;
13396
- * - the intrinsic resolver serves a stored attribute whenever it is not
13397
- * `undefined`, so `''` shadows `constructAttribute` forever — the
13398
- * `AWS::EC2::Instance` IP / DNS / AZ arm re-describes the instance from
13399
- * AWS only on a MISS, the `Arn` arms of the RDS family rebuild the ARN
13400
- * only on a MISS;
13401
- * - the Outputs export pass publishes whatever the resolver returned, so a
13402
- * stored `''` is exported to every `Fn::ImportValue` consumer.
13403
- *
13404
- * It exists as a MODULE rather than a per-provider idiom because the rule was
13405
- * prose and 96 attribute-position `?? ''` / `|| ''` / bare `''` sites across
13406
- * 18 providers shipped anyway (measured 2026-09-14 with the TypeScript-compiler
13407
- * walk that is now `tests/unit/provisioning/attribute-map.test.ts`). A helper
13408
- * that DROPS the key is the one form a provider cannot spell wrong by habit.
13409
- *
13410
- * Two values are treated as "not read back":
13411
- *
13412
- * - `undefined`: the SDK's spelling of an unassigned optional member.
13413
- * - `null`: no AWS SDK v3 read-back reports a scalar attribute as `null`, and
13414
- * a stored `null` takes the resolver's "not `undefined`" hit branch exactly
13415
- * like `''` does.
13416
- *
13417
- * Every other value is kept verbatim — INCLUDING an empty string AWS itself
13418
- * reported (`false`, `0`, an empty array and an object likewise). The helper
13419
- * stops cdkd MANUFACTURING `''` for a field it never read; a `''` that came
13420
- * off the wire is a known value with a meaning the provider owns. The EC2
13421
- * Instance provider is where that distinction is load-bearing: a `running`
13422
- * instance with no public address is described with `PublicDnsName: ''` and
13423
- * no `PublicIpAddress`, and CloudFormation answers `''` for both — a KNOWN
13424
- * empty, recorded as such so a reference does not degrade to the instance id
13425
- * on every resolution — while the same `''` on a `pending` instance means
13426
- * "not yet", which that provider maps to `undefined` BEFORE calling this
13427
- * helper (its `describedInstanceAttributes`). A caller that knows a `''`
13428
- * means "unknown" is the one that must say so; this helper cannot tell.
13429
- *
13430
- * Deliberately NOT a general "compact this record" utility: it is scoped to
13431
- * attribute maps. A property bag keeps its `undefined`-valued keys out by other
13432
- * means (`.claude/rules/provider-property-fidelity.md`, "Remove the key rather
13433
- * than setting it to `undefined`").
13434
- *
13435
- * A LEAF module (imports nothing) so every provider can take it without adding
13436
- * an edge to the provider import ring.
13437
- */
13438
- /**
13439
- * Build an attribute map from read-back values, omitting every key whose value
13440
- * is `undefined` or `null`.
13441
- */
13442
- function definedAttributes(entries) {
13443
- const out = {};
13444
- for (const [key, value] of Object.entries(entries)) {
13445
- if (value === void 0 || value === null) continue;
13446
- out[key] = value;
13447
- }
13448
- return out;
13449
- }
13450
- /**
13451
- * `String(value)` for a numeric read-back whose CloudFormation attribute is a
13452
- * string (`Endpoint.Port`), or `undefined` when the field is unassigned — so
13453
- * `definedAttributes` drops the key instead of recording the literal
13454
- * `'undefined'`, which is what `String(described?.Port ?? '')` yields once its
13455
- * `?? ''` is merely deleted.
13456
- */
13457
- function stringifyIfAssigned(value) {
13458
- if (value === void 0 || value === null) return void 0;
13459
- return String(value);
13460
- }
13461
-
13462
13390
  //#endregion
13463
13391
  //#region src/provisioning/providers/sns-subscription-provider.ts
13464
13392
  /**
@@ -15949,11 +15877,21 @@ var LambdaEventSourceMappingProvider = class {
15949
15877
  * returned by `create()`).
15950
15878
  */
15951
15879
  async import(input) {
15952
- if (input.knownPhysicalId) return {
15880
+ if (!input.knownPhysicalId) return null;
15881
+ let resp;
15882
+ try {
15883
+ resp = await this.lambdaClient.send(new GetEventSourceMappingCommand({ UUID: input.knownPhysicalId }));
15884
+ } catch (err) {
15885
+ if (err instanceof ResourceNotFoundException) return null;
15886
+ throw err;
15887
+ }
15888
+ return {
15953
15889
  physicalId: input.knownPhysicalId,
15954
- attributes: { Id: input.knownPhysicalId }
15890
+ attributes: definedAttributes({
15891
+ Id: input.knownPhysicalId,
15892
+ EventSourceMappingArn: resp.EventSourceMappingArn
15893
+ })
15955
15894
  };
15956
- return null;
15957
15895
  }
15958
15896
  };
15959
15897
 
@@ -21919,10 +21857,15 @@ var DynamoDBTableProvider = class {
21919
21857
  async import(input) {
21920
21858
  const explicit = resolveExplicitPhysicalId(input, "TableName");
21921
21859
  if (explicit) try {
21922
- await this.dynamoDBClient.send(new DescribeTableCommand({ TableName: explicit }));
21860
+ const resp = await this.dynamoDBClient.send(new DescribeTableCommand({ TableName: explicit }));
21923
21861
  return {
21924
21862
  physicalId: explicit,
21925
- attributes: {}
21863
+ attributes: definedAttributes({
21864
+ Arn: resp.Table?.TableArn,
21865
+ TableId: resp.Table?.TableId,
21866
+ StreamArn: resp.Table?.LatestStreamArn,
21867
+ TableName: resp.Table?.TableName ?? explicit
21868
+ })
21926
21869
  };
21927
21870
  } catch (err) {
21928
21871
  if (err instanceof ResourceNotFoundException$1) return null;
@@ -24096,10 +24039,15 @@ var DynamoDBGlobalTableProvider = class {
24096
24039
  async import(input) {
24097
24040
  const explicit = resolveExplicitPhysicalId(input, "TableName");
24098
24041
  if (explicit) try {
24099
- await this.dynamoDBClient.send(new DescribeTableCommand({ TableName: explicit }));
24042
+ const resp = await this.dynamoDBClient.send(new DescribeTableCommand({ TableName: explicit }));
24100
24043
  return {
24101
24044
  physicalId: explicit,
24102
- attributes: {}
24045
+ attributes: definedAttributes({
24046
+ Arn: resp.Table?.TableArn,
24047
+ TableId: resp.Table?.TableId,
24048
+ StreamArn: resp.Table?.LatestStreamArn,
24049
+ TableName: resp.Table?.TableName ?? explicit
24050
+ })
24103
24051
  };
24104
24052
  } catch (err) {
24105
24053
  if (err instanceof ResourceNotFoundException$1) return null;
@@ -43419,6 +43367,39 @@ var RDSDBProxyTargetGroupProvider = class {
43419
43367
  //#endregion
43420
43368
  //#region src/provisioning/providers/docdb-provider.ts
43421
43369
  /**
43370
+ * The attribute map a DocumentDB DB cluster records (issue #3650), under
43371
+ * CloudFormation's `Fn::GetAtt` names (`Endpoint`, `Port`, `ReadEndpoint`,
43372
+ * `ClusterResourceId`). The RDS-style dotted keys (`Endpoint.Address`, ...)
43373
+ * are kept for records and readers that already use them; no
43374
+ * `Fn::GetAtt` names them for this service, so on their own they left
43375
+ * `Fn::GetAtt [Cluster, Endpoint]` resolving to the cluster identifier.
43376
+ */
43377
+ function clusterAttributes$1(cluster) {
43378
+ return definedAttributes({
43379
+ Endpoint: cluster?.Endpoint,
43380
+ Port: stringifyIfAssigned(cluster?.Port),
43381
+ ReadEndpoint: cluster?.ReaderEndpoint,
43382
+ "Endpoint.Address": cluster?.Endpoint,
43383
+ "Endpoint.Port": stringifyIfAssigned(cluster?.Port),
43384
+ "ReadEndpoint.Address": cluster?.ReaderEndpoint,
43385
+ Arn: cluster?.DBClusterArn,
43386
+ ClusterResourceId: cluster?.DbClusterResourceId
43387
+ });
43388
+ }
43389
+ /**
43390
+ * The attribute map a DocumentDB DB instance records (issue #3650): `Endpoint` /
43391
+ * `Port` are CloudFormation's `Fn::GetAtt` names, the dotted keys are kept.
43392
+ */
43393
+ function instanceAttributes$1(instance) {
43394
+ return definedAttributes({
43395
+ Endpoint: instance?.Endpoint?.Address,
43396
+ Port: stringifyIfAssigned(instance?.Endpoint?.Port),
43397
+ "Endpoint.Address": instance?.Endpoint?.Address,
43398
+ "Endpoint.Port": stringifyIfAssigned(instance?.Endpoint?.Port),
43399
+ Arn: instance?.DBInstanceArn
43400
+ });
43401
+ }
43402
+ /**
43422
43403
  * AWS DocumentDB Provider
43423
43404
  *
43424
43405
  * Implements resource provisioning for DocumentDB resources:
@@ -43601,16 +43582,9 @@ var DocDBProvider = class {
43601
43582
  }))).DBCluster) throw new Error("CreateDBCluster did not return DBCluster");
43602
43583
  this.logger.debug(`Successfully created DocDB DBCluster ${logicalId}: ${dbClusterIdentifier}`);
43603
43584
  if (process.env["CDKD_NO_WAIT"] !== "true") await this.waitForClusterAvailable(dbClusterIdentifier);
43604
- const described = await this.describeDBCluster(dbClusterIdentifier);
43605
43585
  return {
43606
43586
  physicalId: dbClusterIdentifier,
43607
- attributes: definedAttributes({
43608
- "Endpoint.Address": described?.Endpoint,
43609
- "Endpoint.Port": stringifyIfAssigned(described?.Port),
43610
- "ReadEndpoint.Address": described?.ReaderEndpoint,
43611
- Arn: described?.DBClusterArn,
43612
- ClusterResourceId: described?.DbClusterResourceId
43613
- })
43587
+ attributes: clusterAttributes$1(await this.describeDBCluster(dbClusterIdentifier))
43614
43588
  };
43615
43589
  } catch (error) {
43616
43590
  if (error instanceof ProvisioningError) throw error;
@@ -43642,13 +43616,7 @@ var DocDBProvider = class {
43642
43616
  return {
43643
43617
  physicalId,
43644
43618
  wasReplaced: false,
43645
- attributes: definedAttributes({
43646
- "Endpoint.Address": described?.Endpoint,
43647
- "Endpoint.Port": stringifyIfAssigned(described?.Port),
43648
- "ReadEndpoint.Address": described?.ReaderEndpoint,
43649
- Arn: described?.DBClusterArn,
43650
- ClusterResourceId: described?.DbClusterResourceId
43651
- })
43619
+ attributes: clusterAttributes$1(described)
43652
43620
  };
43653
43621
  } catch (error) {
43654
43622
  const cause = error instanceof Error ? error : void 0;
@@ -43710,14 +43678,9 @@ var DocDBProvider = class {
43710
43678
  }))).DBInstance) throw new Error("CreateDBInstance did not return DBInstance");
43711
43679
  this.logger.debug(`Successfully created DocDB DBInstance ${logicalId}: ${dbInstanceIdentifier}`);
43712
43680
  if (process.env["CDKD_NO_WAIT"] !== "true") await this.waitForInstanceAvailable(dbInstanceIdentifier);
43713
- const described = await this.describeDBInstance(dbInstanceIdentifier);
43714
43681
  return {
43715
43682
  physicalId: dbInstanceIdentifier,
43716
- attributes: definedAttributes({
43717
- "Endpoint.Address": described?.Endpoint?.Address,
43718
- "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port),
43719
- Arn: described?.DBInstanceArn
43720
- })
43683
+ attributes: instanceAttributes$1(await this.describeDBInstance(dbInstanceIdentifier))
43721
43684
  };
43722
43685
  } catch (error) {
43723
43686
  if (error instanceof ProvisioningError) throw error;
@@ -43741,11 +43704,7 @@ var DocDBProvider = class {
43741
43704
  return {
43742
43705
  physicalId,
43743
43706
  wasReplaced: false,
43744
- attributes: definedAttributes({
43745
- "Endpoint.Address": described?.Endpoint?.Address,
43746
- "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port),
43747
- Arn: described?.DBInstanceArn
43748
- })
43707
+ attributes: instanceAttributes$1(described)
43749
43708
  };
43750
43709
  } catch (error) {
43751
43710
  const cause = error instanceof Error ? error : void 0;
@@ -44014,11 +43973,7 @@ var DocDBProvider = class {
44014
43973
  const described = (await this.getClient().send(new DescribeDBInstancesCommand$1({ DBInstanceIdentifier: explicit }))).DBInstances?.[0];
44015
43974
  return {
44016
43975
  physicalId: explicit,
44017
- attributes: definedAttributes({
44018
- "Endpoint.Address": described?.Endpoint?.Address,
44019
- "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port),
44020
- Arn: described?.DBInstanceArn
44021
- })
43976
+ attributes: instanceAttributes$1(described)
44022
43977
  };
44023
43978
  } catch (err) {
44024
43979
  if (err.name === "DBInstanceNotFoundFault") return null;
@@ -44029,10 +43984,9 @@ var DocDBProvider = class {
44029
43984
  async importDBCluster(input) {
44030
43985
  const explicit = resolveExplicitPhysicalId(input, "DBClusterIdentifier");
44031
43986
  if (explicit) try {
44032
- await this.getClient().send(new DescribeDBClustersCommand$1({ DBClusterIdentifier: explicit }));
44033
43987
  return {
44034
43988
  physicalId: explicit,
44035
- attributes: {}
43989
+ attributes: clusterAttributes$1((await this.getClient().send(new DescribeDBClustersCommand$1({ DBClusterIdentifier: explicit }))).DBClusters?.[0])
44036
43990
  };
44037
43991
  } catch (err) {
44038
43992
  if (err.name === "DBClusterNotFoundFault") return null;
@@ -44059,6 +44013,38 @@ var DocDBProvider = class {
44059
44013
  //#endregion
44060
44014
  //#region src/provisioning/providers/neptune-provider.ts
44061
44015
  /**
44016
+ * The attribute map a Neptune DB cluster records (issue #3650), under
44017
+ * CloudFormation's `Fn::GetAtt` names (`Endpoint`, `Port`, `ReadEndpoint`,
44018
+ * `ClusterResourceId`). The RDS-style dotted keys (`Endpoint.Address`, ...)
44019
+ * are kept for records and readers that already use them; no
44020
+ * `Fn::GetAtt` names them for this service, so on their own they left
44021
+ * `Fn::GetAtt [Cluster, Endpoint]` resolving to the cluster identifier.
44022
+ */
44023
+ function clusterAttributes(cluster) {
44024
+ return definedAttributes({
44025
+ Endpoint: cluster?.Endpoint,
44026
+ Port: stringifyIfAssigned(cluster?.Port),
44027
+ ReadEndpoint: cluster?.ReaderEndpoint,
44028
+ "Endpoint.Address": cluster?.Endpoint,
44029
+ "Endpoint.Port": stringifyIfAssigned(cluster?.Port),
44030
+ "ReadEndpoint.Address": cluster?.ReaderEndpoint,
44031
+ ClusterResourceId: cluster?.DbClusterResourceId
44032
+ });
44033
+ }
44034
+ /**
44035
+ * The attribute map a Neptune DB instance records (issue #3650): `Endpoint` /
44036
+ * `Port` are CloudFormation's `Fn::GetAtt` names, the dotted keys are kept.
44037
+ */
44038
+ function instanceAttributes(instance) {
44039
+ return definedAttributes({
44040
+ Endpoint: instance?.Endpoint?.Address,
44041
+ Port: stringifyIfAssigned(instance?.Endpoint?.Port),
44042
+ "Endpoint.Address": instance?.Endpoint?.Address,
44043
+ "Endpoint.Port": stringifyIfAssigned(instance?.Endpoint?.Port),
44044
+ Arn: instance?.DBInstanceArn
44045
+ });
44046
+ }
44047
+ /**
44062
44048
  * AWS Neptune Provider
44063
44049
  *
44064
44050
  * Implements resource provisioning for Neptune resources:
@@ -44244,15 +44230,9 @@ var NeptuneProvider = class {
44244
44230
  }))).DBCluster) throw new Error("CreateDBCluster did not return DBCluster");
44245
44231
  this.logger.debug(`Successfully created Neptune DBCluster ${logicalId}: ${dbClusterIdentifier}`);
44246
44232
  if (process.env["CDKD_NO_WAIT"] !== "true") await this.waitForClusterAvailable(dbClusterIdentifier);
44247
- const described = await this.describeDBCluster(dbClusterIdentifier);
44248
44233
  return {
44249
44234
  physicalId: dbClusterIdentifier,
44250
- attributes: definedAttributes({
44251
- "Endpoint.Address": described?.Endpoint,
44252
- "Endpoint.Port": stringifyIfAssigned(described?.Port),
44253
- "ReadEndpoint.Address": described?.ReaderEndpoint,
44254
- ClusterResourceId: described?.DbClusterResourceId
44255
- })
44235
+ attributes: clusterAttributes(await this.describeDBCluster(dbClusterIdentifier))
44256
44236
  };
44257
44237
  } catch (error) {
44258
44238
  if (error instanceof ProvisioningError) throw error;
@@ -44284,12 +44264,7 @@ var NeptuneProvider = class {
44284
44264
  return {
44285
44265
  physicalId,
44286
44266
  wasReplaced: false,
44287
- attributes: definedAttributes({
44288
- "Endpoint.Address": described?.Endpoint,
44289
- "Endpoint.Port": stringifyIfAssigned(described?.Port),
44290
- "ReadEndpoint.Address": described?.ReaderEndpoint,
44291
- ClusterResourceId: described?.DbClusterResourceId
44292
- })
44267
+ attributes: clusterAttributes(described)
44293
44268
  };
44294
44269
  } catch (error) {
44295
44270
  const cause = error instanceof Error ? error : void 0;
@@ -44354,13 +44329,9 @@ var NeptuneProvider = class {
44354
44329
  }))).DBInstance) throw new Error("CreateDBInstance did not return DBInstance");
44355
44330
  this.logger.debug(`Successfully created Neptune DBInstance ${logicalId}: ${dbInstanceIdentifier}`);
44356
44331
  if (process.env["CDKD_NO_WAIT"] !== "true") await this.waitForInstanceAvailable(dbInstanceIdentifier);
44357
- const described = await this.describeDBInstance(dbInstanceIdentifier);
44358
44332
  return {
44359
44333
  physicalId: dbInstanceIdentifier,
44360
- attributes: definedAttributes({
44361
- "Endpoint.Address": described?.Endpoint?.Address,
44362
- "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port)
44363
- })
44334
+ attributes: instanceAttributes(await this.describeDBInstance(dbInstanceIdentifier))
44364
44335
  };
44365
44336
  } catch (error) {
44366
44337
  if (error instanceof ProvisioningError) throw error;
@@ -44386,10 +44357,7 @@ var NeptuneProvider = class {
44386
44357
  return {
44387
44358
  physicalId,
44388
44359
  wasReplaced: false,
44389
- attributes: definedAttributes({
44390
- "Endpoint.Address": described?.Endpoint?.Address,
44391
- "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port)
44392
- })
44360
+ attributes: instanceAttributes(described)
44393
44361
  };
44394
44362
  } catch (error) {
44395
44363
  const cause = error instanceof Error ? error : void 0;
@@ -44661,11 +44629,7 @@ var NeptuneProvider = class {
44661
44629
  const described = (await this.getClient().send(new DescribeDBInstancesCommand$2({ DBInstanceIdentifier: explicit }))).DBInstances?.[0];
44662
44630
  return {
44663
44631
  physicalId: explicit,
44664
- attributes: definedAttributes({
44665
- "Endpoint.Address": described?.Endpoint?.Address,
44666
- "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port),
44667
- Arn: described?.DBInstanceArn
44668
- })
44632
+ attributes: instanceAttributes(described)
44669
44633
  };
44670
44634
  } catch (err) {
44671
44635
  if (err.name === "DBInstanceNotFoundFault") return null;
@@ -44676,10 +44640,9 @@ var NeptuneProvider = class {
44676
44640
  async importDBCluster(input) {
44677
44641
  const explicit = resolveExplicitPhysicalId(input, "DBClusterIdentifier");
44678
44642
  if (explicit) try {
44679
- await this.getClient().send(new DescribeDBClustersCommand$2({ DBClusterIdentifier: explicit }));
44680
44643
  return {
44681
44644
  physicalId: explicit,
44682
- attributes: {}
44645
+ attributes: clusterAttributes((await this.getClient().send(new DescribeDBClustersCommand$2({ DBClusterIdentifier: explicit }))).DBClusters?.[0])
44683
44646
  };
44684
44647
  } catch (err) {
44685
44648
  if (err.name === "DBClusterNotFoundFault") return null;
@@ -68865,7 +68828,7 @@ const EMPTY_ALLOW_SET = /* @__PURE__ */ new Set();
68865
68828
  *
68866
68829
  * - **Fresh hits**: a resource whose template uses one or more
68867
68830
  * silent-drop top-level CFn properties. Annotation value is the list
68868
- * of property names (e.g. `RuntimeManagementConfig`).
68831
+ * of property names (e.g. `Body`).
68869
68832
  * - **Sticky hits**: a resource whose deployed state records
68870
68833
  * `provisionedBy: 'cc-api'` (from a prior deploy) even when the
68871
68834
  * current template's silent-drop set is empty. Annotation value is
@@ -87799,6 +87762,8 @@ function buildStackState(stackName, region, rows, templateParser, template, exis
87799
87762
  properties: tmplResource.Properties ?? {},
87800
87763
  attributes: rowAttributes ?? priorAttributes ?? {},
87801
87764
  dependencies: deps,
87765
+ deletionPolicy: tmplResource.DeletionPolicy,
87766
+ updateReplacePolicy: tmplResource.UpdateReplacePolicy,
87802
87767
  provisionedBy: "sdk",
87803
87768
  ...prior && prior.physicalId === row.physicalId && (hasUnverifiableParameterRefusal(prior) || hasReasonlessBaselineRefusal(prior) && (namesParameter ??= resourcesNamingDeclaredParameter(template))(row.logicalId)) && {
87804
87769
  observedBaselineRefused: true,
@@ -91369,24 +91334,26 @@ const SENSITIVE_ENV_KEYS = /* @__PURE__ */ new Set([
91369
91334
  * boundary, so a local-invoke build failure still surfaces with cdkd's exit code
91370
91335
  * / branding. `architectureToPlatform` is a pure helper (re-exported directly).
91371
91336
  *
91372
- * It is also where the build context is CONTAINED: cdk-local joins
91373
- * `source.directory` onto `cdkOutDir` with no check, so the shim refuses an
91374
- * escaping value before delegating, against a REQUIRED `assetOutdir` bound
91375
- * (issue [#3503](https://github.com/go-to-k/cdkd/issues/3503)).
91337
+ * The build context is CONTAINED twice, against one REQUIRED `assetOutdir`
91338
+ * bound (issue [#3503](https://github.com/go-to-k/cdkd/issues/3503)). The
91339
+ * engine refuses an escaping `source.directory` itself since cdk-local 0.149.3,
91340
+ * and the bound is FORWARDED to it: without one the engine narrows to the
91341
+ * manifest directory and refuses a `cdk.Stage` image's `../asset.<hash>`
91342
+ * (issue [#3597](https://github.com/go-to-k/cdkd/issues/3597)). cdkd still
91343
+ * refuses first, because the engine's refusal quotes the manifest value in a
91344
+ * boundary the value itself can close (go-to-k/cdk-local#758); once that
91345
+ * ships, go-to-k/cdkd#3652 drops cdkd's copy.
91376
91346
  * See cdk-local's `src/local/docker-image-builder.ts`.
91377
91347
  */
91378
91348
  async function buildContainerImage$1(asset, cdkOutDir, options) {
91379
- const executable = asset?.source?.executable;
91380
- if (executable && executable.length > 0) warnManifestExecutable(executable);
91381
- const { assetOutdir, ...implOptions } = options;
91382
91349
  assertCdkLocalDockerContextContained({
91383
91350
  manifestDir: cdkOutDir,
91384
91351
  source: asset.source,
91385
- assetOutdir,
91352
+ assetOutdir: options.assetOutdir,
91386
91353
  wrapError: (message) => new LocalInvokeBuildError$1(`Refusing to build the container image: ${message}`)
91387
91354
  });
91388
91355
  try {
91389
- return await buildContainerImage(asset, cdkOutDir, implOptions);
91356
+ return await buildContainerImage(asset, cdkOutDir, options);
91390
91357
  } catch (e) {
91391
91358
  if (e instanceof LocalInvokeBuildError) throw new LocalInvokeBuildError$1(e.message);
91392
91359
  throw e;
@@ -91430,7 +91397,25 @@ function canonicalizeImageUriHost(imageUri) {
91430
91397
  if (slash < 0) return imageUri;
91431
91398
  const host = imageUri.slice(0, slash);
91432
91399
  if (!isRegistryHostComponent(host)) return imageUri;
91433
- return host.toLowerCase() + imageUri.slice(slash);
91400
+ return foldAsciiUpperCase(host) + imageUri.slice(slash);
91401
+ }
91402
+ /**
91403
+ * Lower-case ONLY the ASCII letters `A`-`Z`, leaving every other code point
91404
+ * as written.
91405
+ *
91406
+ * `String.prototype.toLowerCase` performs full Unicode case folding, so the
91407
+ * Kelvin sign U+212A folds to a plain ASCII `k`. Folding with it here, BEFORE
91408
+ * `parseEcrRegistryHost`, handed that parser an already-ASCII host and defeated
91409
+ * the raw-capture charset guard it applies to the region and suffix (see
91410
+ * `CANONICAL_REGION_SEGMENT` in `src/utils/ecr-uri.ts`):
91411
+ * `<acct>.dkr.ecr-fips.us-<U+212A>east-1.amazonaws.com/...` parsed as the
91412
+ * region `us-keast-1`, a region the host does not name, and a Kelvin sign in
91413
+ * the LABELS resolved to the plain form. An ASCII-only fold keeps the case
91414
+ * fold the #1801 login / pull agreement needs (DNS case-insensitivity is
91415
+ * ASCII-only) while leaving any other code point for that guard to refuse.
91416
+ */
91417
+ function foldAsciiUpperCase(value) {
91418
+ return value.replace(/[A-Z]+/g, (run) => run.toLowerCase());
91434
91419
  }
91435
91420
  /** Docker's rule for "component 1 is a registry, not a repository segment". */
91436
91421
  function isRegistryHostComponent(component) {
@@ -91503,7 +91488,9 @@ function isCredentialFresh(creds) {
91503
91488
  * the same one the DERIVED `docker login` endpoint names — an
91504
91489
  * AWS-reported `proxyEndpoint` still wins over that fallback (it can be
91505
91490
  * a VPC-endpoint host), which is correct: AWS names the endpoint its own
91506
- * token authenticates, and it reports it lower-cased.
91491
+ * token authenticates, and it reports it lower-cased. That precedence holds
91492
+ * only for the PLAIN host form: a FIPS or dual-stack pull logs in to its own
91493
+ * host, since `proxyEndpoint` always names the plain one (issue #1855).
91507
91494
  */
91508
91495
  async function pullEcrImage(imageUri, options) {
91509
91496
  const logger = getLogger().child("ecr-puller");
@@ -91554,7 +91541,11 @@ async function pullEcrImage(imageUri, options) {
91554
91541
  ...assumed && { credentials: assumed }
91555
91542
  });
91556
91543
  try {
91557
- await ecrLogin(ecr, parsed.accountId, parsed.region);
91544
+ await ecrLogin(ecr, {
91545
+ accountId: parsed.accountId,
91546
+ region: parsed.region,
91547
+ registryHost: canonicalUri.slice(0, canonicalUri.indexOf("/"))
91548
+ });
91558
91549
  } finally {
91559
91550
  ecr.destroy();
91560
91551
  }
@@ -91605,14 +91596,26 @@ async function assumeRoleForEcr(roleArn, callerRegion, logger) {
91605
91596
  * Authenticate the local docker daemon against the target ECR registry.
91606
91597
  * Mirrors `DockerAssetPublisher.ecrLogin` but stays in this module so the
91607
91598
  * local-invoke path doesn't depend on the publisher's larger surface area.
91608
- */
91609
- async function ecrLogin(client, accountId, region) {
91610
- getLogger().child("ecr-puller").debug(`ECR login (account=${accountId}, region=${region})`);
91599
+ *
91600
+ * The login endpoint must name the host the PULL targets (issue #1855):
91601
+ * docker's credential store is keyed on the hostname verbatim, so a login to
91602
+ * the plain host followed by a pull from a FIPS or dual-stack host sends no
91603
+ * credentials (`no basic auth credentials`). `GetAuthorizationToken` reports
91604
+ * the PLAIN host as its `proxyEndpoint`, so that value, and the derived
91605
+ * fallback, are used only when the pull targets the plain form; every other
91606
+ * form logs in to `registryHost` itself. The token is registry-scoped, not
91607
+ * host-scoped: measured against real ECR, one token authenticated `/v2/` on
91608
+ * all four host forms `ECR_REGISTRY_HOST_FORMS` lists.
91609
+ */
91610
+ async function ecrLogin(client, target) {
91611
+ const { accountId, region, registryHost } = target;
91612
+ getLogger().child("ecr-puller").debug(`ECR login (account=${accountId}, region=${region}, host=${registryHost})`);
91611
91613
  const authData = (await client.send(new GetAuthorizationTokenCommand({}))).authorizationData?.[0];
91612
91614
  if (!authData?.authorizationToken) throw new LocalInvokeBuildError$1("Failed to get ECR authorization token");
91613
91615
  const [username, password] = Buffer.from(authData.authorizationToken, "base64").toString().split(":");
91614
91616
  if (!username || password === void 0) throw new LocalInvokeBuildError$1("ECR authorization token has unexpected shape (missing username/password)");
91615
- const endpoint = authData.proxyEndpoint || `https://${accountId}.dkr.ecr.${region}.${ecrUrlSuffix(region)}`;
91617
+ const plainHost = `${accountId}.dkr.ecr.${region}.${ecrUrlSuffix(region)}`;
91618
+ const endpoint = registryHost === plainHost ? authData.proxyEndpoint || `https://${plainHost}` : `https://${registryHost}`;
91616
91619
  const loginArgs = [
91617
91620
  "login",
91618
91621
  "--username",
@@ -95798,10 +95801,14 @@ function createLocalRunTaskCommand() {
95798
95801
  * (issue [#3503](https://github.com/go-to-k/cdkd/issues/3503)).
95799
95802
  *
95800
95803
  * `cdkd local start-service` / `start-alb` hand the whole run to cdk-local's
95801
- * `runEcsServiceEmulator`, which reads each stack's asset manifest itself and
95802
- * joins `source.directory` onto the manifest directory raw — for an ECS
95803
- * container image and for an ALB Lambda target's container image alike. No
95804
- * argument reaches that join, so cdkd judges the manifests here instead.
95804
+ * `runEcsServiceEmulator`, which reads each stack's asset manifest itself —
95805
+ * for an ECS container image and for an ALB Lambda target's container image
95806
+ * alike. Since cdk-local 0.149.3 the engine refuses an escaping
95807
+ * `source.directory` at each build and each `--watch` soft reload
95808
+ * (go-to-k/cdkd#3597). This check stays in front of it, for the whole
95809
+ * assembly at once, because the engine's refusal quotes the assembly-chosen
95810
+ * value in a boundary the value can close (go-to-k/cdk-local#758);
95811
+ * go-to-k/cdkd#3652 removes it once that ships.
95805
95812
  *
95806
95813
  * `resolveBoots` is the seam because the engine calls it after every synth —
95807
95814
  * at boot, and again on every `--watch` reload — and before any image is
@@ -95871,7 +95878,7 @@ function assertEmulatorDockerContextsContained(stacks) {
95871
95878
  * only while the directory is named `assembly-*` AND its parent's
95872
95879
  * `manifest.json` declares it as a `cdk:cloud-assembly` artifact, and WARN
95873
95880
  * whenever a climb happens, since the predicate is read from the tree being
95874
- * judged. Replace with the upstream export once one exists (go-to-k/cdkd#3597).
95881
+ * judged. Deleted with this module by go-to-k/cdkd#3652.
95875
95882
  */
95876
95883
  function engineAssemblyRoot(outdir) {
95877
95884
  let dir = resolve(outdir);
@@ -98812,4 +98819,4 @@ function buildProgram() {
98812
98819
 
98813
98820
  //#endregion
98814
98821
  export { buildProgram };
98815
- //# sourceMappingURL=program-CGsbW6A4.js.map
98822
+ //# sourceMappingURL=program-hXXls0hg.js.map