@go-to-k/cdkd 0.290.40 → 0.290.42
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.
- package/dist/{asg-provider-DPTeR_IT.js → asg-provider-Cms9Daqn.js} +3 -3
- package/dist/{asg-provider-DPTeR_IT.js.map → asg-provider-Cms9Daqn.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-DJxLBuTb.js → deploy-engine-C1dgx124.js} +176 -56
- package/dist/deploy-engine-C1dgx124.js.map +1 -0
- package/dist/index.d.ts +33 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{logger-BkcLg0jL.js → logger-D-2HeLmd.js} +8 -4
- package/dist/logger-D-2HeLmd.js.map +1 -0
- package/dist/{program-BmtaBtO_.js → program-HtHlEaZm.js} +52 -30
- package/dist/{program-BmtaBtO_.js.map → program-HtHlEaZm.js.map} +1 -1
- package/dist/{version-CEKVu0mE.js → version-Divizw1k.js} +2 -2
- package/dist/{version-CEKVu0mE.js.map → version-Divizw1k.js.map} +1 -1
- package/package.json +4 -4
- package/dist/deploy-engine-DJxLBuTb.js.map +0 -1
- package/dist/logger-BkcLg0jL.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { $ as yellow, $
|
|
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-
|
|
1
|
+
import { $ as yellow, $n as STATE_SOURCED_BASELINE_RULES, $r as validateContainerRepoName, $t as requireConfigObject, A as createPreDeleteFinalSnapshot, Aa as retryClassificationText, Ai as CFN_TEMPLATE_BODY_LIMIT, An as malformedResourcePropertiesWarning, Ar as hasUnverifiableParameterRefusal, At as carriesDynamicReference, B as isStatefulRecreateTargetSync, Bi as decodeListingKey, Bn as refuseMalformedState, Br as buildAssetRedirectMap, Bt as isSettledInstanceState, C as namesAnyDeclaredParameter, Ca as withErrorHandling, Ci as resolveSkipPrefix, Cn as malformedExportSourceWarning, Cr as formatLockExpiry, Ct as slowCcOperationTimeoutMs, D as PRE_DELETE_SNAPSHOT_TYPES, Da as isTransientServerError, Di as stateBucketExistenceConfirmed, Dn as malformedOutputsWarning, Dr as exportNamesCarriedFrom, Dt as disableInstanceApiTermination, E as ATOMIC_FINAL_SNAPSHOT_TYPES, Ea as isThrottlingError, Ei as resolveUseCdkBootstrapAssets, En as malformedOutputsRefusalMessage, Er as DEFAULT_STATE_PREFIX, Et as deleteSkipReason, F as extractDeploymentEventError, Fi as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, Fn as refuseMalformedOutputs, Fr as orphansCarriedFrom, Ft as isImpossibleEmptyStoredAttribute, G as toCfnInteger, Gi as AssemblyReader, Gn as safeRegion, Gr as BOOTSTRAP_MARKER_PREFIX, Gt as coerceCfnBoolean, H as WARM_THROUGHPUT_MEMBERS, Hi as PARTITION_TABLE, Hn as repairMalformedResourceEntriesForReadOnly, Hr as loadPublishableAssetManifest, Ht as normalizeAwsTagsToCfn, I as makeSiblingClaimReader, Ii as injectiveKey, In as refuseMalformedOutputsForDestroy, Ir as shouldRetainResource, It as isNamelessDynamicReferenceError, J as bold, Ji as resolveBucketRegion, Jn as findSilentDropProperties, Jr as getBootstrapMarkerKey, Jt as configIntegerRefusal, K as toFiniteNumber, Ki as processStackMessages, Kn as safeStackName, Kr as assertAssetBucketRegion, Kt as coerceCfnInteger, L as planOrphanAdoption, Li as injectiveKeyPrefix, Ln as refuseMalformedResourceEntries, Lr as AssetPublisher, Lt as isUnboundTemplateParameter, M as refusesFinalSnapshot, Ma as safeStringify, Mi as MIGRATE_TMP_PREFIX, Mn as malformedStateRefusalMessage, Mr as importableOutputs, Mt as cfnRefValueFromPhysicalId, N as unsupportedFinalSnapshotError, Ni as findLargeInlineResources, Nn as refuseDivergentRecordRegionForDestroy, Nr as isReadableBag, Nt as coerceParameterTypedValue, O as buildFinalSnapshotIdentifier, Oa as markNonRetryable, Oi as warnDeprecatedNoPrefixCliFlag, On as malformedRenderedContainersWarning, Or as hasReadableExportSet, Ot as isTerminationProtectionPropagationError, P as makeCanonicalizePropertiesFn, Pi as uploadCfnTemplate, Pn as refuseMalformedNestedChildOutputs, Pr as orphansAfterRollback, Pt as getAccountInfo, Q as red, Qi as setAwsClients, Qn as TemplateParser, Qr as validateAssetBucketName, Qt as requireConfigArray, R as MULTI_REGION_RECREATE_BLOCKED_TYPES, Ri as producerCoordinateKey, Rn as refuseMalformedResourcePropertiesForOrphan, Rr as stringifyValue, Rt as parameterTypeMayLoseSecretIdentity, S as computeParameterTaint, Sa as normalizeAwsError, Si as resolveCaptureObservedState, Sn as malformedExportNamesWarning, Sr as forceQuitRecoveryClause, St as isWaitAbandonedError, T as resourcesNamingDeclaredParameter, Ta as isRetryableTransientError, Ti as resolveStateBucketWithDefaultAndSource, Tn as malformedOrphanRecordsWarning, Tr as CUSTOM_RESOURCE_RESPONSE_PREFIX, Tt as deleteIndeterminateGuards, U as coerceWarmThroughput$1, Ui as canonicalizeRegion, Un as repairMalformedResourcePropertiesForReadOnly, Ur as rewriteTemplateAssetReferences, Ut as resolveExplicitPhysicalId, V as renderStatefulReason, Vi as expectedOwnerParam, Vn as repairMalformedOutputsForReadOnly, Vr as createAssetRedirectResolver, Vt as WAFv2WebACLProvider, W as isWarmThroughputDecrease, Wi as derivePartitionAndUrlSuffix, Wn as repairMalformedResourcesForReadOnly, Wr as AssetModeResolver, Wt as assertRegionMatch, X as gray, Xi as getAwsClients, Xn as withRetry, Xr as parseBootstrapMarker, Xt as readConfigString, Y as cyan, Yi as AwsClients, Yn as describeTypeWithThrottleRetry, Yr as isCrossRegionRedirect, Yt as configStringRefusal, Z as green, Zi as resetAwsClients, Zn as DagBuilder, Zr as readBootstrapMarkerBody, Zt as replayWarn, _ as bagHoldsSecretExpression, _a as StackTerminationProtectionError, _i as synthesisStatusMessage, _n as UNREADABLE_RESOURCES_MAP_ROW, _r as S3StateBackend, _t as endCommandInterruptScope, a as DeploymentEventsStore, aa as DynamicReferenceRegionAmbiguousError, ai as dockerSpawnEnvWithSensitive, an as s3BucketDomainName, ar as dynamicReferenceTokens, at as secretBearingStateKeyWarning, b as mergeNoChangeOutputs, bi as resolveApp, bn as hasReadableResources, br as buildForceUnlockCommand, bt as startInterruptWatch, c as replayFailedOperations, ca as LocalStartServiceError, ci as partitionSensitiveEnv, cn as s3BucketWebsiteUrl, cr as isSingleDynamicReferenceToken, ct as IAMRoleProvider, d as updatePartialMessage, da as NestedStackChildDirectDestroyError, di as runDockerStreaming, dn as applyCallerIdentityCredentials, dr as maskSecretsInText, dt as ProviderRegistry, ea as CdkdError, ei as buildDenyExternalAccessPolicy, en as requireConfigString, er as STATE_SOURCED_CROSS_GENERATION_RULES, et as collectDeclaredOutputNames, f as updatePartialReason, fa as PartialFailureError, fi as escapeRegExp, fn as callerEnvCredentials, fr as recordMaskOnlyValue, ft as wouldReturnToSdkProvider, g as computeImplicitDeleteEdges, ga as StackHasActiveImportsError, gi as Synthesizer, gn as STATE_RESOURCES_MALFORMED, gr as LockManager, gt as beginCommandInterruptScope, h as IMPLICIT_DELETE_DEPENDENCIES, ha as ResourceUpdateNotSupportedError, hi as getDockerImageBySourceHash, hn as INTRINSIC_KEYS, hr as scrubResourceRecord, ht as maskerOrIdentity, i as DeploymentEventsReader, ia as DeployCancelledError, ii as describeDockerFailure, in as s3BucketArn, ir as createSecretMasker, it as secretBearing, j as isFinalSnapshotError, ja as describeAwsFailure, ji as CFN_TEMPLATE_URL_LIMIT, jn as malformedResourcesWarning, jr as importableOutputKeys, jt as carriesFetchableDynamicReference, k as ccRoutedFinalSnapshotError, ka as markRedactedCause, ki as ssmResolvedValueType, kn as malformedResourceEntriesWarning, kr as hasReasonlessBaselineRefusal, kt as IntrinsicFunctionResolver, l as replayRollback, li as redactDockerArgvValues, ln as applyRoleArnIfSet, lr as markSameGenerationBag, lt as collectInlinePolicyNamesManagedBySiblings, m as maskingRetryLogger, ma as ResourceTimeoutError, mi as AssetManifestLoader, mn as DiffCalculator, mr as redactSecretsForState, mt as maskDeep, n as DEFAULT_RESOURCE_WARN_AFTER_MS, na as CrossAccountSecretRefusalError, ni as describeDockerCapturedOutput, nn as producerRegionsFromState, nr as TEMPLATE_SOURCED_RULES, nt as exportAliasCollisionScrubWarning, o as planFailedOps, oa as IntrinsicResolutionRefusalError, oi as formatDockerLoginError, on as s3BucketDualStackDomainName, or as errorCauseChain, ot as secretSafeKeyDisplay, p as withResourceDeadline, pa as ProvisioningError, pi as stripControlChars, pn as envCredentialsAreAssumedRole, pr as recoverMaskedOutput, pt as createMaskedRetryLogger, q as formatResourceLine, qn as findActionableSilentDrops, qr as ensureAssetStorage, qt as configBooleanRefusal, r as DeployEngine, ri as describeDockerExecFailure, rn as withSharedDrainBudget, rr as carriesSecretMask, rt as isExportAliasCollision, s as planRollback, sa as LocalInvokeBuildError$1, si as getDockerCmd, sn as s3BucketRegionalDomainName, sr as identityKeyFor, st as getCurrentResourceSecrets, t as DEFAULT_RESOURCE_TIMEOUT_MS, ti as buildDockerImage, tn as classifyReplaySecretRegion, tr as STATE_SOURCED_READBACK_RULES, tt as collectPublishedOutputNames, u as resolveReplacementOldType, ua as MalformedProducerRecordRefusalError, ui as runDockerForeground, un as AWS_CREDENTIAL_ENV_KEYS, ur as maskSecretsInError, ut as clearOnUpdateRemoval, v as isSecretBearingReferenceString, vi as getDefaultStateBucketName, vn as displayLogicalId, vr as rebuildClientForBucketRegion, vt as interruptWatchListenerCount, w as reachableDivergentParameters, wa as isMarkedNonRetryable, wi as resolveStateBucketWithDefault, wn as malformedLocalOutputsWarning, wr as shellQuote, wt as UNSPECIFIED_SKIP_REASON, x as bindingSkippedOutputs, xi as resolveAutoAssetStorage, xn as isReadableResourceEntry, xr as buildLockContentionMessage, xt as CloudControlProvider, y as keptWholeReasonText, ya as SynthesisError, yi as getLegacyStateBucketName, yn as hasReadableOutputs, yr as UNREPRODUCIBLE_LOCK_CLAUSE, yt as isInterruptedWaitError, z as isStatefulRecreateTargetForReplace, zi as producerRecordKey, zn as refuseMalformedResourcesForDestroy, zr as WorkGraph, zt as refStateLookupFromResource } from "./deploy-engine-C1dgx124.js";
|
|
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-D-2HeLmd.js";
|
|
3
3
|
import { n as awsClientDefaults } from "./aws-client-defaults-BoIxyCir.js";
|
|
4
|
-
import { t as getCdkdVersion } from "./version-
|
|
5
|
-
import { a as renderDisableCommand, i as protectedReplacementAdvice, r as UNNAMEABLE_ID_CLAUSE, t as ASGProvider } from "./asg-provider-
|
|
4
|
+
import { t as getCdkdVersion } from "./version-Divizw1k.js";
|
|
5
|
+
import { a as renderDisableCommand, i as protectedReplacementAdvice, r as UNNAMEABLE_ID_CLAUSE, t as ASGProvider } from "./asg-provider-Cms9Daqn.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";
|
|
@@ -18131,7 +18131,11 @@ function resolveDynamoDbDeleteBudgetClock() {
|
|
|
18131
18131
|
* the first's spent allowance. In practice `destroy-runner.ts` builds a fresh
|
|
18132
18132
|
* provider (and therefore a fresh registry) per region, so the collision is not
|
|
18133
18133
|
* reachable today — but that is an invariant of the CALLER, enforced nowhere,
|
|
18134
|
-
* and the fix costs one string concat.
|
|
18134
|
+
* and the fix costs one string concat. The key is ENCODED rather than
|
|
18135
|
+
* separated, so it does not rest on what can appear in either component --
|
|
18136
|
+
* both come from a state record, which `parseStateBody` reads as an unchecked
|
|
18137
|
+
* cast, so the claim this sentence used to make was about AWS rather than
|
|
18138
|
+
* about what arrives here (go-to-k/cdkd#3496).
|
|
18135
18139
|
*
|
|
18136
18140
|
* `region` is the STATE's region (`DeleteContext.expectedRegion`), which is
|
|
18137
18141
|
* available synchronously at the top of `delete()` — unlike the client's own
|
|
@@ -18140,7 +18144,7 @@ function resolveDynamoDbDeleteBudgetClock() {
|
|
|
18140
18144
|
* which degrades to the old bare-name key rather than failing.
|
|
18141
18145
|
*/
|
|
18142
18146
|
function deleteBudgetKey(physicalId, region) {
|
|
18143
|
-
return
|
|
18147
|
+
return injectiveKey(region ?? "", physicalId);
|
|
18144
18148
|
}
|
|
18145
18149
|
/**
|
|
18146
18150
|
* The poll cap a wait may actually use: its own constant, or what the shared
|
|
@@ -23397,7 +23401,7 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
23397
23401
|
* repeated `DescribeTable` calls.
|
|
23398
23402
|
*/
|
|
23399
23403
|
async getAttribute(physicalId, _resourceType, attributeName) {
|
|
23400
|
-
const cacheKey =
|
|
23404
|
+
const cacheKey = injectiveKey(physicalId, attributeName);
|
|
23401
23405
|
if (this.attributeCache.has(cacheKey)) return this.attributeCache.get(cacheKey);
|
|
23402
23406
|
try {
|
|
23403
23407
|
const resp = await this.dynamoDBClient.send(new DescribeTableCommand({ TableName: physicalId }));
|
|
@@ -28575,7 +28579,7 @@ const generations = /* @__PURE__ */ new Map();
|
|
|
28575
28579
|
* long-lived process cannot grow the map without bound.
|
|
28576
28580
|
*/
|
|
28577
28581
|
const MAX_TRACKED_GENERATIONS = 1e5;
|
|
28578
|
-
const tokenKey = (scope, logicalId, maxLength, charset) =>
|
|
28582
|
+
const tokenKey = (scope, logicalId, maxLength, charset) => injectiveKey(scope, process.env["AWS_REGION"] ?? "", getCurrentStackName() ?? "", logicalId, maxLength, charset);
|
|
28579
28583
|
const derive = (key, generation, maxLength, charset) => {
|
|
28580
28584
|
const digest = createHash("sha256").update(`${PROCESS_NONCE}\u0000${key}\u0000${generation}`).digest("hex");
|
|
28581
28585
|
return `cdkd${charset === "alphanumeric" ? "" : "-"}${digest}`.slice(0, maxLength);
|
|
@@ -42392,7 +42396,7 @@ var RDSDBProxyProvider = class {
|
|
|
42392
42396
|
throw new ProvisioningError(`Timed out waiting for DBProxy ${physicalId} to fully delete`, resourceType, logicalId, physicalId);
|
|
42393
42397
|
}
|
|
42394
42398
|
async getAttribute(physicalId, _resourceType, attributeName) {
|
|
42395
|
-
const cacheKey =
|
|
42399
|
+
const cacheKey = injectiveKey(physicalId, attributeName);
|
|
42396
42400
|
const cached = this.attributeCache.get(cacheKey);
|
|
42397
42401
|
if (cached !== void 0) return cached;
|
|
42398
42402
|
if (attributeName !== "Endpoint" && attributeName !== "DBProxyArn" && attributeName !== "VpcId") {
|
|
@@ -42467,7 +42471,7 @@ var RDSDBProxyProvider = class {
|
|
|
42467
42471
|
const newMap = this.toTagMap(newTags);
|
|
42468
42472
|
if (oldMap.size === newMap.size && [...oldMap.keys()].every((k) => newMap.has(k)) && [...oldMap.entries()].every(([k, v]) => newMap.get(k) === v)) return;
|
|
42469
42473
|
const client = this.getClient();
|
|
42470
|
-
const arnCacheKey =
|
|
42474
|
+
const arnCacheKey = injectiveKey(physicalId, "DBProxyArn");
|
|
42471
42475
|
let arn = this.attributeCache.get(arnCacheKey);
|
|
42472
42476
|
if (!arn) try {
|
|
42473
42477
|
arn = (await client.send(new DescribeDBProxiesCommand({ DBProxyName: physicalId }))).DBProxies?.[0]?.DBProxyArn;
|
|
@@ -42534,7 +42538,8 @@ var RDSDBProxyProvider = class {
|
|
|
42534
42538
|
}
|
|
42535
42539
|
}
|
|
42536
42540
|
invalidateAttributeCache(physicalId) {
|
|
42537
|
-
|
|
42541
|
+
const encodedPrefix = injectiveKeyPrefix(physicalId);
|
|
42542
|
+
for (const key of this.attributeCache.keys()) if (key.startsWith(encodedPrefix)) this.attributeCache.delete(key);
|
|
42538
42543
|
}
|
|
42539
42544
|
wrapError(error, op, resourceType, logicalId, physicalId) {
|
|
42540
42545
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -42717,7 +42722,7 @@ var RDSDBProxyEndpointProvider = class {
|
|
|
42717
42722
|
throw new ProvisioningError(`Timed out waiting for DBProxyEndpoint ${physicalId} to fully delete`, resourceType, logicalId, physicalId);
|
|
42718
42723
|
}
|
|
42719
42724
|
async getAttribute(physicalId, _resourceType, attributeName) {
|
|
42720
|
-
const cacheKey =
|
|
42725
|
+
const cacheKey = injectiveKey(physicalId, attributeName);
|
|
42721
42726
|
const cached = this.attributeCache.get(cacheKey);
|
|
42722
42727
|
if (cached !== void 0) return cached;
|
|
42723
42728
|
if (attributeName !== "Endpoint" && attributeName !== "DBProxyEndpointArn" && attributeName !== "IsDefault" && attributeName !== "VpcId") {
|
|
@@ -42778,7 +42783,7 @@ var RDSDBProxyEndpointProvider = class {
|
|
|
42778
42783
|
const newMap = this.toTagMap(newTags);
|
|
42779
42784
|
if (oldMap.size === newMap.size && [...oldMap.keys()].every((k) => newMap.has(k)) && [...oldMap.entries()].every(([k, v]) => newMap.get(k) === v)) return;
|
|
42780
42785
|
const client = this.getClient();
|
|
42781
|
-
const arnCacheKey =
|
|
42786
|
+
const arnCacheKey = injectiveKey(physicalId, "DBProxyEndpointArn");
|
|
42782
42787
|
let arn = this.attributeCache.get(arnCacheKey);
|
|
42783
42788
|
if (!arn) try {
|
|
42784
42789
|
arn = (await client.send(new DescribeDBProxyEndpointsCommand({ DBProxyEndpointName: physicalId }))).DBProxyEndpoints?.[0]?.DBProxyEndpointArn;
|
|
@@ -42846,7 +42851,8 @@ var RDSDBProxyEndpointProvider = class {
|
|
|
42846
42851
|
}
|
|
42847
42852
|
}
|
|
42848
42853
|
invalidateAttributeCache(physicalId) {
|
|
42849
|
-
|
|
42854
|
+
const encodedPrefix = injectiveKeyPrefix(physicalId);
|
|
42855
|
+
for (const key of this.attributeCache.keys()) if (key.startsWith(encodedPrefix)) this.attributeCache.delete(key);
|
|
42850
42856
|
}
|
|
42851
42857
|
wrapError(error, op, resourceType, logicalId, physicalId) {
|
|
42852
42858
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -70023,6 +70029,12 @@ function malformedRecordsAuditedError(stackNames, outputStackNames) {
|
|
|
70023
70029
|
if (outputStackNames.length > 0) parts.push(`${outputStackNames.length} stack(s) were audited with an EMPTY outputs bag because their state record has no readable 'outputs' map: ${safeNames(outputStackNames)}. The report above describes their resources only — nothing is known about the values their outputs hold, and those values are what the exports index republishes to consumer stacks, so this run cannot certify them clean.`);
|
|
70024
70030
|
return new ScrubRefusalError(`${parts.join(" ")} See the warnings above for the record to inspect.`, STATE_RESOURCES_MALFORMED);
|
|
70025
70031
|
}
|
|
70032
|
+
/**
|
|
70033
|
+
* Exported for its unit fence alone — no second production caller. The
|
|
70034
|
+
* collision it must not have (go-to-k/cdkd#3323) is only observable from
|
|
70035
|
+
* whether two queries SHARE a promise, which driving a whole `scrubStack`
|
|
70036
|
+
* fixture cannot show without asserting on a much larger outcome.
|
|
70037
|
+
*/
|
|
70026
70038
|
function memoizeCrossStackStateReads(backend) {
|
|
70027
70039
|
const view = Object.create(backend);
|
|
70028
70040
|
let listed;
|
|
@@ -70032,7 +70044,7 @@ function memoizeCrossStackStateReads(backend) {
|
|
|
70032
70044
|
return listed;
|
|
70033
70045
|
};
|
|
70034
70046
|
view.getState = (stackName, stateRegion) => {
|
|
70035
|
-
const key =
|
|
70047
|
+
const key = producerRecordKey(stackName, stateRegion);
|
|
70036
70048
|
let pending = states.get(key);
|
|
70037
70049
|
if (!pending) {
|
|
70038
70050
|
pending = backend.getState(stackName, stateRegion);
|
|
@@ -70383,7 +70395,7 @@ function storedValueCarriesNoPlaintext(stored) {
|
|
|
70383
70395
|
* selection.
|
|
70384
70396
|
*/
|
|
70385
70397
|
function producerPublishesSecretExpression(templates, exportOwners, producerStack, key) {
|
|
70386
|
-
const seen = /* @__PURE__ */ new Set([
|
|
70398
|
+
const seen = /* @__PURE__ */ new Set([producerCoordinateKey(producerStack, key)]);
|
|
70387
70399
|
const queue = [{
|
|
70388
70400
|
stack: producerStack,
|
|
70389
70401
|
key,
|
|
@@ -70424,7 +70436,7 @@ function producerPublishesSecretExpression(templates, exportOwners, producerStac
|
|
|
70424
70436
|
};
|
|
70425
70437
|
}
|
|
70426
70438
|
for (const hop of collectReExportHops(subject, templates, exportOwners)) {
|
|
70427
|
-
const id =
|
|
70439
|
+
const id = producerCoordinateKey(hop.stack, hop.key);
|
|
70428
70440
|
if (seen.has(id)) continue;
|
|
70429
70441
|
seen.add(id);
|
|
70430
70442
|
queue.push({
|
|
@@ -71128,7 +71140,7 @@ function makeCrossStackPrePass(deps) {
|
|
|
71128
71140
|
*/
|
|
71129
71141
|
const warnedDamagedProducers = /* @__PURE__ */ new Set();
|
|
71130
71142
|
const secretExpressionVerdict = (stack, key) => {
|
|
71131
|
-
const id =
|
|
71143
|
+
const id = producerCoordinateKey(stack, key);
|
|
71132
71144
|
let verdict = verdicts.get(id);
|
|
71133
71145
|
if (!verdict) {
|
|
71134
71146
|
verdict = producerPublishesSecretExpression(producerTemplates, exportOwners, stack, key);
|
|
@@ -76678,6 +76690,14 @@ function createStateMigrateCommand() {
|
|
|
76678
76690
|
//#endregion
|
|
76679
76691
|
//#region src/cli/commands/state-list-tree.ts
|
|
76680
76692
|
/**
|
|
76693
|
+
* Helpers for `cdkd state list --tree`: reconstruct the parent → child stack
|
|
76694
|
+
* tree from a flat list of state records and render it.
|
|
76695
|
+
*
|
|
76696
|
+
* The actual S3 reads happen in {@link import('./state.js')} — this module
|
|
76697
|
+
* stays pure / synchronous so the tree-building logic can be unit-tested
|
|
76698
|
+
* without mocking the state backend.
|
|
76699
|
+
*/
|
|
76700
|
+
/**
|
|
76681
76701
|
* How deep a node may sit below its root, counting the root as 0.
|
|
76682
76702
|
*
|
|
76683
76703
|
* A node that would sit deeper is made a root instead (see
|
|
@@ -76742,7 +76762,7 @@ const MAX_STACK_TREE_DEPTH = 100;
|
|
|
76742
76762
|
* runs.
|
|
76743
76763
|
*/
|
|
76744
76764
|
function buildStackTree(entries) {
|
|
76745
|
-
const refKey = (stackName, region) =>
|
|
76765
|
+
const refKey = (stackName, region) => producerRecordKey(stackName, region ?? "");
|
|
76746
76766
|
const byKey = /* @__PURE__ */ new Map();
|
|
76747
76767
|
for (const entry of entries) byKey.set(refKey(entry.stackName, entry.region), {
|
|
76748
76768
|
...entry,
|
|
@@ -81686,7 +81706,7 @@ function renderStateBlock(state, lockInfo, withLegend) {
|
|
|
81686
81706
|
* `--show-nested` render.
|
|
81687
81707
|
*/
|
|
81688
81708
|
async function loadLocksForTree(tree, lockManager, rootLock) {
|
|
81689
|
-
const nodeKey = (node) =>
|
|
81709
|
+
const nodeKey = (node) => producerRecordKey(node.stackName, node.region);
|
|
81690
81710
|
const rootKey = nodeKey(tree);
|
|
81691
81711
|
const flat = [];
|
|
81692
81712
|
const collect = (node) => {
|
|
@@ -82728,7 +82748,7 @@ async function findJournalCandidates(backend, prefix) {
|
|
|
82728
82748
|
if (segments.length !== 2) continue;
|
|
82729
82749
|
const [stackName, region] = segments;
|
|
82730
82750
|
if (!stackName || !region) continue;
|
|
82731
|
-
const dedupe =
|
|
82751
|
+
const dedupe = producerRecordKey(stackName, region);
|
|
82732
82752
|
if (seen.has(dedupe)) continue;
|
|
82733
82753
|
seen.add(dedupe);
|
|
82734
82754
|
refs.push({
|
|
@@ -84989,7 +85009,7 @@ var AttributeFetcher = class {
|
|
|
84989
85009
|
* success path returns `{ ok: true, value, fromCache: true }`.
|
|
84990
85010
|
*/
|
|
84991
85011
|
async getAtt(orphanLogicalId, attribute) {
|
|
84992
|
-
const cacheKey =
|
|
85012
|
+
const cacheKey = injectiveKey(orphanLogicalId, attribute);
|
|
84993
85013
|
if (this.cache.has(cacheKey)) return {
|
|
84994
85014
|
ok: true,
|
|
84995
85015
|
value: this.cache.get(cacheKey)
|
|
@@ -85047,7 +85067,7 @@ var AttributeFetcher = class {
|
|
|
85047
85067
|
this.logger.warn(`--force: live fetch failed for '${orphanLogicalId}.${attribute}' (${reason}); falling back to cached value from state.attributes.`);
|
|
85048
85068
|
if (carriesDynamicReference(cached)) this.logger.warn(`--force: the cached value for '${orphanLogicalId}.${attribute}' is an UNRESOLVED dynamic reference (a nested stack's redacted output, issue #2055). It is being written into the referring resource's state VERBATIM — cdkd cannot re-resolve it from here. Re-run without --force once the live attribute is readable, or fix the referring property by hand.`);
|
|
85049
85069
|
if (carriesSecretMask(cached)) this.logger.warn(`--force: the cached value for '${orphanLogicalId}.${attribute}' is the REDACTION MASK ('${"***"}'), not the attribute's value — cdkd redacted it into state and cannot recover it. It is being written into the referring resource's state VERBATIM, so that row now records a value the live resource does not have: the next 'cdkd diff' / 'cdkd deploy' reports a spurious change there (a REPLACEMENT if the property is create-only), 'cdkd rollback' refuses the record as a replay baseline, and 'cdkd export' blocks it. Re-run without --force once the live attribute is readable, re-import the record that holds the mask, or fix the referring property by hand.`);
|
|
85050
|
-
const cacheKey =
|
|
85070
|
+
const cacheKey = injectiveKey(orphanLogicalId, attribute);
|
|
85051
85071
|
this.cache.set(cacheKey, cached);
|
|
85052
85072
|
return {
|
|
85053
85073
|
ok: true,
|
|
@@ -87649,12 +87669,14 @@ async function loadStateForStack(stackName, synthRegion, opts) {
|
|
|
87649
87669
|
/**
|
|
87650
87670
|
* Issue #1836: EXACT match first, case-insensitive second.
|
|
87651
87671
|
*
|
|
87652
|
-
* `S3StateBackend.listStacks` dedupes on the EXACT `
|
|
87653
|
-
*
|
|
87654
|
-
*
|
|
87655
|
-
*
|
|
87656
|
-
*
|
|
87657
|
-
*
|
|
87672
|
+
* `S3StateBackend.listStacks` dedupes on the EXACT `(stack, region)` PAIR
|
|
87673
|
+
* — through `producerRecordKey` since go-to-k/cdkd#3323, by a separator
|
|
87674
|
+
* before that; what this note needs is only that the match is exact — so
|
|
87675
|
+
* `cdkd/MyStack/US-EAST-1/state.json` and
|
|
87676
|
+
* `cdkd/MyStack/us-east-1/state.json` are two DISTINCT refs, and
|
|
87677
|
+
* ListObjectsV2 returns them in ASCII order, i.e. the upper-cased one
|
|
87678
|
+
* FIRST. A fold-only `find` therefore hands `--stack-region us-east-1` the
|
|
87679
|
+
* OTHER record, silently reading state the user did not name; the pre-fold `===`
|
|
87658
87680
|
* got that case right. So the fold is the RECOVERY for a case mismatch, never
|
|
87659
87681
|
* an override of a spelling that exists verbatim.
|
|
87660
87682
|
*
|
|
@@ -97212,4 +97234,4 @@ function buildProgram() {
|
|
|
97212
97234
|
|
|
97213
97235
|
//#endregion
|
|
97214
97236
|
export { buildProgram };
|
|
97215
|
-
//# sourceMappingURL=program-
|
|
97237
|
+
//# sourceMappingURL=program-HtHlEaZm.js.map
|