@go-to-k/cdkd 0.296.31 → 0.297.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{asg-provider-Ca7cV9tM.js → asg-provider-D9Po293s.js} +3 -3
- package/dist/{asg-provider-Ca7cV9tM.js.map → asg-provider-D9Po293s.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-5FFXg6ih.js → deploy-engine-dvf1UDuo.js} +521 -55
- package/dist/deploy-engine-dvf1UDuo.js.map +1 -0
- package/dist/{iam-role-provider-syetbMnw.js → iam-role-provider--5HuX51Z.js} +2 -2
- package/dist/{iam-role-provider-syetbMnw.js.map → iam-role-provider--5HuX51Z.js.map} +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{neptune-provider-B1D2CFBs.js → neptune-provider-xROL9y31.js} +2 -2
- package/dist/{neptune-provider-B1D2CFBs.js.map → neptune-provider-xROL9y31.js.map} +1 -1
- package/dist/{program-Db1eBDeq.js → program-NRnM6vPK.js} +347 -42
- package/dist/program-NRnM6vPK.js.map +1 -0
- package/dist/{provider-classes-B7Z4-Zsc.js → provider-classes-uUFRfL9s.js} +20 -20
- package/dist/{provider-classes-B7Z4-Zsc.js.map → provider-classes-uUFRfL9s.js.map} +1 -1
- package/dist/{rds-provider-B4sFJ8YW.js → rds-provider-CU0LZr05.js} +4 -4
- package/dist/{rds-provider-B4sFJ8YW.js.map → rds-provider-CU0LZr05.js.map} +1 -1
- package/dist/{version-D0cK9V1A.js → version-DE-djeB0.js} +2 -2
- package/dist/{version-D0cK9V1A.js.map → version-DE-djeB0.js.map} +1 -1
- package/package.json +2 -1
- package/dist/deploy-engine-5FFXg6ih.js.map +0 -1
- package/dist/program-Db1eBDeq.js.map +0 -1
|
@@ -2,10 +2,10 @@ import { r as getAwsClients, s as __exportAll } from "./aws-clients-CnmtbrxD.js"
|
|
|
2
2
|
import { A as UNRENDERABLE, C as looksLikeCdkdGeneratedName, E as withoutGeneratedFallbackName, F as displayStackName, I as isPasteableIdent, M as displayAwsMessage, N as displayIdent, O as SECRET_REF_MAX_CODE_POINTS, P as displaySafe, R as plainIdentOr, S as getCurrentStackName, T as withStackName, V as truncateCodePoints, a as getLogger, b as generateResourceNameWithFallback, d as installLogLineMaskerSource, f as getLiveRenderer, g as applyDefaultNameForFallback, k as STACK_REF_MAX_CODE_POINTS, o as isStdoutReservedForPayload, r as safeStringify$1, t as describeAwsFailure, u as currentLogLineMasker, v as explicitNamePropertyFor, w as withSkipPrefix, x as getCurrentSkipPrefix, y as generateResourceName, z as safeMsg } from "./aws-failure-text-BaWeCWRz.js";
|
|
3
3
|
import { $ as protectedReplacementAdvice, $n as isAmbiguousOutcomeError, $t as credentialFingerprint, A as isQuotableImportValue, An as UNSHOWABLE_VALUE, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bn as withheldTargetClause, Bt as recoveryCommandFlags, Ct as RETRY_AUXILIARY_OWNER, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as physicalIdShownBesideCommand, G as runDeleteAttempt, Gn as isNameCollisionErrorFrom, H as observeThenDisableProtection, Ht as CUSTOM_RESOURCE_RESPONSE_PREFIX, In as plainOrDescribed, J as DELETION_PROTECTION_DOC_POINTER, Jn as isReplayedNameCollisionFrom, Kn as isNameCooldownError, L as ProtectionFlipRegistry, Ln as quotedOrDescribed, Lt as formatLockExpiry, M as quotedRemedyLogicalId, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as isInertUnquoted, Nt as UNREPRODUCIBLE_LOCK_CLAUSE, On as SHELL_ACTIVE, Ot as hasCreatedBeforeFailure, Pn as pasteableCommand, Pt as buildForceUnlockCommand, Q as pasteableAwsCommand, Qn as isAmbiguousCcHandlerErrorCode, Qt as clientDefaultsFor, R as compensateProtectionFlip, Rn as shellBoundedDisplay, Rt as formatLockOperation, Sn as SynthesisError, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, Tn as normalizeAwsError, U as protectionFlipKey, Un as isUpdateUnsupportedError, Ut as DEFAULT_STATE_PREFIX, Vt as sanitizeRecoveryValue, Wn as hasReplayMayCollide, Wt as injectiveKey, Xn as markReplayMayCollide, Xt as ambientClientDefaults, Yt as withPasteableAwsProfile, Zn as formatRetryClassificationSignals, Zt as ambientCredentialConfig, _n as ResourceTimeoutError, _t as createMaskedLogSinks, an as DependencyError, ar as isMarkedNonRetryable, at as startInterruptWatch, bt as maskDeep, cn as IntrinsicResolutionRefusalError, cr as markRedactedCause, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dn as LockError, en as AccountIdUnavailableError, er as isIamPropagationError, f as removalWarning, fn as MacroExpansionError, ft as logicalIdShown, gn as ProvisioningError, gt as stateOrphanRecordRemedy, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CrossAccountSecretRefusalError, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jn as commandHole, jt as markAuxiliaryFailure, kn as SHELL_ACTIVE_WHY, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, lr as wrapMaskedAwsError, m as withoutInjectedRemovals, mt as resourceTypeShown, nn as CdkdError, nr as isTransientServerError, or as isThrottlingError, ot as ElapsedBudgetRegistry, pn as MalformedProducerRecordRefusalError, qn as isRecreateRetryableError, qt as producerRecordKey, rr as retryClassificationText, sn as DynamicReferenceRegionAmbiguousError, sr as markNonRetryable, st as monotonicNowMs, tn as AssetError, tr as isRetryableTransientError, ut as compositeIdSeparatorRefusal, vn as ResourceUpdateNotSupportedError, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wt as carryCreatedBeforeFailure, xn as StateError, xt as maskerOrIdentity, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as shellQuote, zt as formatLockOwner } from "./iam-policy-targets-Cz2tPxXk.js";
|
|
4
4
|
import { a as setAssumedRoleCredentials, i as getPreAssumeEnvCredentials, n as awsClientDefaults, o as setPreAssumeEnvCredentials, r as getAssumedRoleCredentials, s as ambientRegion, t as SECOND_ROLE_PUBLISH_REFUSAL } from "./aws-client-defaults-D0q0z4dG.js";
|
|
5
|
-
import { t as getCdkdVersion } from "./version-
|
|
5
|
+
import { t as getCdkdVersion } from "./version-DE-djeB0.js";
|
|
6
6
|
import { createHash, randomUUID } from "node:crypto";
|
|
7
7
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
8
|
-
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
8
|
+
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketLifecycleConfigurationCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
9
9
|
import { CloudControlClient, CreateResourceCommand, DeleteResourceCommand, GetResourceCommand, GetResourceRequestStatusCommand, ListResourcesCommand, UpdateResourceCommand } from "@aws-sdk/client-cloudcontrol";
|
|
10
10
|
import { PublishCommand, SNSClient } from "@aws-sdk/client-sns";
|
|
11
11
|
import { GetFunctionCommand, GetFunctionUrlConfigCommand, InvokeCommand, LambdaClient, UpdateFunctionConfigurationCommand, waitUntilFunctionActiveV2, waitUntilFunctionUpdatedV2 } from "@aws-sdk/client-lambda";
|
|
@@ -204,17 +204,37 @@ var AppExecutor = class {
|
|
|
204
204
|
|
|
205
205
|
//#endregion
|
|
206
206
|
//#region src/types/assembly.ts
|
|
207
|
-
|
|
208
|
-
|
|
207
|
+
const ASSEMBLY_REGION_PREFIX = /^[a-z0-9-]+/;
|
|
208
|
+
const CDK_ENVIRONMENT_PATTERN = /aws:\/\/([a-zA-Z0-9@._-]+)\/([a-z0-9-]+)/;
|
|
209
|
+
const CANONICAL_ASSEMBLY_REGION = /^[a-z0-9-]+$/;
|
|
210
|
+
function parseEnvironment(env, stackName) {
|
|
211
|
+
const match = env.match(/^aws:\/\/([^/]+)\/([\s\S]+)$/);
|
|
209
212
|
if (!match) return {
|
|
210
213
|
account: "unknown-account",
|
|
211
214
|
region: "unknown-region"
|
|
212
215
|
};
|
|
213
|
-
|
|
216
|
+
const raw = match[2];
|
|
217
|
+
const region = ASSEMBLY_REGION_PREFIX.exec(raw)?.[0];
|
|
218
|
+
if (region !== void 0) return {
|
|
214
219
|
account: match[1] === "unknown-account" ? "unknown-account" : match[1],
|
|
215
|
-
region
|
|
220
|
+
region
|
|
221
|
+
};
|
|
222
|
+
const cdk = CDK_ENVIRONMENT_PATTERN.exec(env);
|
|
223
|
+
if (cdk === null) throw new SynthesisError(unparsableRegionMessage(raw, stackName));
|
|
224
|
+
return {
|
|
225
|
+
account: cdk[1],
|
|
226
|
+
region: cdk[2]
|
|
216
227
|
};
|
|
217
228
|
}
|
|
229
|
+
function unparsableRegionMessage(region, stackName) {
|
|
230
|
+
const subject = stackName === void 0 ? "The cloud assembly" : `Stack ${displayStackName(stackName)} in the cloud assembly`;
|
|
231
|
+
const lower = region.toLowerCase();
|
|
232
|
+
const caseOnly = CANONICAL_ASSEMBLY_REGION.test(lower);
|
|
233
|
+
const fix = caseOnly ? `Re-synthesize with the region spelled ${displayIdent(lower)}.` : "Re-synthesize with a canonical region, e.g. env: { region: 'us-east-1' }.";
|
|
234
|
+
const head = `${subject} declares region ${displayIdent(region)}, which is not a canonical AWS region spelling (lowercase letters, digits and '-'). The AWS CDK CLI refuses this assembly too ("Unable to parse environment specification"). ${fix}`;
|
|
235
|
+
if (!caseOnly) return head;
|
|
236
|
+
return `${head}\nIf an earlier cdkd version deployed this stack from such an assembly, it recorded the stack's state under that raw region spelling, and a deploy using the canonical spelling will not find that state: it starts the stack from no state at all. 'cdkd state show' and 'cdkd state orphan' still reach that record when '--stack-region' is given the exact raw spelling; 'state orphan' removes the record and leaves its AWS resources in place, unmanaged by cdkd.`;
|
|
237
|
+
}
|
|
218
238
|
|
|
219
239
|
//#endregion
|
|
220
240
|
//#region src/utils/assembly-path.ts
|
|
@@ -606,7 +626,7 @@ var AssemblyReader = class {
|
|
|
606
626
|
}
|
|
607
627
|
if (dependencyNames.length > 0) this.logger.debug(`Stack ${displayStackName(stackName)} depends on: [${dependencyNames.map((n) => displaySafe(n)).join(", ")}]`);
|
|
608
628
|
let env;
|
|
609
|
-
if (artifact.environment) env = parseEnvironment(artifact.environment);
|
|
629
|
+
if (artifact.environment) env = parseEnvironment(artifact.environment, stackName);
|
|
610
630
|
const nestedTemplates = nullPrototypeRecord();
|
|
611
631
|
for (const [logicalId, resource] of Object.entries(template.Resources ?? {})) {
|
|
612
632
|
if (resource?.Type !== "AWS::CloudFormation::Stack") continue;
|
|
@@ -5000,7 +5020,7 @@ function isNotImplemented(error) {
|
|
|
5000
5020
|
const status = error?.$metadata?.httpStatusCode;
|
|
5001
5021
|
return name === "NotImplemented" || status === 501;
|
|
5002
5022
|
}
|
|
5003
|
-
function isAccessDenied(error) {
|
|
5023
|
+
function isAccessDenied$1(error) {
|
|
5004
5024
|
let current = error;
|
|
5005
5025
|
for (let depth = 0; depth < 5 && current !== null && typeof current === "object"; depth++) {
|
|
5006
5026
|
const name = current.name;
|
|
@@ -5028,7 +5048,7 @@ async function scanOtherPrefixesForStack(target, stackName, region) {
|
|
|
5028
5048
|
try {
|
|
5029
5049
|
segments = await target.listTopLevelPrefixes();
|
|
5030
5050
|
} catch (error) {
|
|
5031
|
-
return isAccessDenied(error) ? {
|
|
5051
|
+
return isAccessDenied$1(error) ? {
|
|
5032
5052
|
kind: "denied",
|
|
5033
5053
|
error,
|
|
5034
5054
|
stage: "list"
|
|
@@ -5051,7 +5071,7 @@ async function scanOtherPrefixesForStack(target, stackName, region) {
|
|
|
5051
5071
|
if (held === "holder") found.push(prefix);
|
|
5052
5072
|
else if (held === "empty") stale.push(prefix);
|
|
5053
5073
|
} catch (error) {
|
|
5054
|
-
if (isAccessDenied(error)) denied ??= error;
|
|
5074
|
+
if (isAccessDenied$1(error)) denied ??= error;
|
|
5055
5075
|
else failed ??= error;
|
|
5056
5076
|
}
|
|
5057
5077
|
}
|
|
@@ -5491,7 +5511,7 @@ var S3StateBackend = class S3StateBackend {
|
|
|
5491
5511
|
async verifyBucketExists(options = {}) {
|
|
5492
5512
|
await this.ensureClientForBucket();
|
|
5493
5513
|
if (options.existenceAlreadyProbed) {
|
|
5494
|
-
this.logger.debug(`Skipping the redundant HeadBucket on '${this.config.bucket}' — the default-name resolution already confirmed it exists with these credentials
|
|
5514
|
+
this.logger.debug(`Skipping the redundant HeadBucket on '${this.config.bucket}' — the default-name resolution already confirmed it exists with these credentials.`);
|
|
5495
5515
|
return;
|
|
5496
5516
|
}
|
|
5497
5517
|
try {
|
|
@@ -13794,7 +13814,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
13794
13814
|
["Description", "CFn-only informational — no semantic effect on the recursive deploy"],
|
|
13795
13815
|
["DisableRollback", "CFn-only — cdkd controls rollback via the top-level deploy-engine --no-rollback flag, not per nested stack"],
|
|
13796
13816
|
["EnableTerminationProtection", "CFn-only per-nested-stack flag — cdkd records stack-level terminationProtection at CDK synth time (parent only) and `cdkd destroy` consults that for refusal"],
|
|
13797
|
-
["NotificationARNs", "CFn-only SNS-on-stack-event surface — cdkd has no equivalent
|
|
13817
|
+
["NotificationARNs", "CFn-only SNS-on-stack-event surface — cdkd has no equivalent"],
|
|
13798
13818
|
["RoleARN", "CFn-only role-assumption — cdkd uses the caller credentials directly, no per-resource role assumption"],
|
|
13799
13819
|
["StackName", "cdkd derives the child stack name as `<parent>~<logicalId>` per design §3 (state-key uniqueness); a user-provided StackName has no effect"],
|
|
13800
13820
|
["StackPolicyBody", "CFn-only stack-update policy — cdkd has no equivalent (per-resource diff replaces stack-level policy)"],
|
|
@@ -13802,7 +13822,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
13802
13822
|
["StackStatusReason", "CFn-only read-only output — never a real input property"],
|
|
13803
13823
|
["Tags", "CFn-only — cdkd does not tag the synthesized \"stack\" (the parent's synthesized ARN is a cdkd-local placeholder, not a real AWS resource)"],
|
|
13804
13824
|
["TemplateBody", "CFn-only inline template — cdkd reads the child template from the synth output via Metadata['aws:asset:path'] instead of accepting it inline"],
|
|
13805
|
-
["TimeoutInMinutes", "CFn-only stack-create deadline — cdkd uses per-resource --resource-timeout instead
|
|
13825
|
+
["TimeoutInMinutes", "CFn-only stack-create deadline — cdkd uses per-resource --resource-timeout instead"]
|
|
13806
13826
|
]),
|
|
13807
13827
|
createOnlyDrops: /* @__PURE__ */ new Set(["StackName"]),
|
|
13808
13828
|
readOnly: /* @__PURE__ */ new Set([
|
|
@@ -14578,7 +14598,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
14578
14598
|
"PosixUser",
|
|
14579
14599
|
"RootDirectory"
|
|
14580
14600
|
]),
|
|
14581
|
-
silentDrop: /* @__PURE__ */ new Map([["ClientToken", "cdkd supplies its own retry-stable ClientToken on CreateAccessPoint
|
|
14601
|
+
silentDrop: /* @__PURE__ */ new Map([["ClientToken", "cdkd supplies its own retry-stable ClientToken on CreateAccessPoint, so a template-supplied value would be overwritten. The SDK does not own this field either: an omitted ClientToken is auto-filled with a FRESH uuid per attempt, which leaves a retried 500 free to mint a second access point, while a caller-supplied value goes on the wire verbatim."]]),
|
|
14582
14602
|
createOnlyDrops: /* @__PURE__ */ new Set(["ClientToken"]),
|
|
14583
14603
|
readOnly: /* @__PURE__ */ new Set(["AccessPointId", "Arn"]),
|
|
14584
14604
|
ccRouteUnavailable: false
|
|
@@ -14598,7 +14618,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
14598
14618
|
"ProvisionedThroughputInMibps",
|
|
14599
14619
|
"ThroughputMode"
|
|
14600
14620
|
]),
|
|
14601
|
-
silentDrop: /* @__PURE__ */ new Map([["ReplicationConfiguration", "Cross-region EFS replication (CreateReplicationConfiguration) provisions a separate destination file system in another region with its own lifecycle, KMS key, and availability-zone placement; replicating + then tearing down the destination on destroy is a multi-resource, cross-region orchestration that is out of scope for the single-resource SDK provider.
|
|
14621
|
+
silentDrop: /* @__PURE__ */ new Map([["ReplicationConfiguration", "Cross-region EFS replication (CreateReplicationConfiguration) provisions a separate destination file system in another region with its own lifecycle, KMS key, and availability-zone placement; replicating + then tearing down the destination on destroy is a multi-resource, cross-region orchestration that is out of scope for the single-resource SDK provider."]]),
|
|
14602
14622
|
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
14603
14623
|
readOnly: /* @__PURE__ */ new Set(["Arn", "FileSystemId"]),
|
|
14604
14624
|
ccRouteUnavailable: false
|
|
@@ -15528,7 +15548,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
15528
15548
|
["DBClusterParameterGroupName", "not yet implemented by cdkd"],
|
|
15529
15549
|
["DBInstanceParameterGroupName", "not yet implemented by cdkd"],
|
|
15530
15550
|
["DBSystemId", "not yet implemented by cdkd"],
|
|
15531
|
-
["DeleteAutomatedBackups", "delete-time flag, sent on the delete when the record carries it
|
|
15551
|
+
["DeleteAutomatedBackups", "delete-time flag, sent on the delete when the record carries it; kept unhandled so a template declaring it keeps its Cloud Control route. Final snapshots are governed by DeletionPolicy: Snapshot, which this flag does not control"],
|
|
15532
15552
|
["Domain", "not yet implemented by cdkd"],
|
|
15533
15553
|
["DomainIAMRoleName", "not yet implemented by cdkd"],
|
|
15534
15554
|
["EnableCloudwatchLogsExports", "not yet implemented by cdkd"],
|
|
@@ -15628,7 +15648,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
15628
15648
|
["DBSnapshotIdentifier", "not yet implemented by cdkd"],
|
|
15629
15649
|
["DBSystemId", "not yet implemented by cdkd"],
|
|
15630
15650
|
["DedicatedLogVolume", "not yet implemented by cdkd"],
|
|
15631
|
-
["DeleteAutomatedBackups", "delete-time flag, sent on the delete when the record carries it
|
|
15651
|
+
["DeleteAutomatedBackups", "delete-time flag, sent on the delete when the record carries it; kept unhandled so a template declaring it keeps its Cloud Control route. Final snapshots are governed by DeletionPolicy: Snapshot, which this flag does not control"],
|
|
15632
15652
|
["Domain", "not yet implemented by cdkd"],
|
|
15633
15653
|
["DomainAuthSecretArn", "not yet implemented by cdkd"],
|
|
15634
15654
|
["DomainDnsIps", "not yet implemented by cdkd"],
|
|
@@ -19651,7 +19671,7 @@ function recordSecretNamedRead(logicalId, value, context) {
|
|
|
19651
19671
|
}
|
|
19652
19672
|
function rejectPlaceholderArnAttribute(resource, attributeName, value, logicalId, context, healOutcome) {
|
|
19653
19673
|
if (!isStalePlaceholderArnAttribute(resource.resourceType, attributeName, value)) return;
|
|
19654
|
-
throw markNonRetryable(new IntrinsicResolutionRefusalError(`Cannot resolve Fn::GetAtt [${this.displayMasked(logicalId, context)}, ${this.displayMasked(attributeName, context)}] for ${resource.resourceType}: the recorded value ${quotedRender(stringifyValue(this.maskValueLeaves(value, context)), "\"")} is a placeholder written by
|
|
19674
|
+
throw markNonRetryable(new IntrinsicResolutionRefusalError(`Cannot resolve Fn::GetAtt [${this.displayMasked(logicalId, context)}, ${this.displayMasked(attributeName, context)}] for ${resource.resourceType}: the recorded value ${quotedRender(stringifyValue(this.maskValueLeaves(value, context)), "\"")} is a placeholder written by an older cdkd version — its region and account fields are literal wildcards, so it is not a usable ARN. ` + this.staleRecordRemedy(healOutcome, context)));
|
|
19655
19675
|
}
|
|
19656
19676
|
async function constructAttribute(resource, attributeName, context, logicalId, accountInfo) {
|
|
19657
19677
|
const { resourceType, physicalId } = resource;
|
|
@@ -20922,7 +20942,7 @@ async function resolveSplit(splitArgs, context) {
|
|
|
20922
20942
|
const source = this.describeSplitValueSource(value);
|
|
20923
20943
|
const sourceClause = source ? ` (from ${this.displayMasked(source.label, context)})` : "";
|
|
20924
20944
|
if (Array.isArray(resolvedValue)) {
|
|
20925
|
-
const remedy = source?.kind === "ref" ? "A list-typed parameter — any List<...> type (List<AWS::EC2::Subnet::Id>, List<Number>, …) or CommaDelimitedList — is already a list." : source?.kind === "getatt" ? "A list-valued Fn::GetAtt (for example AWS::Route53::HostedZone.NameServers or AWS::EC2::VPC.Ipv6CidrBlocks) already returns a list. If you wrote the Fn::Split as a workaround for cdkd resolving that attribute to a comma-delimited string, that bug is fixed
|
|
20945
|
+
const remedy = source?.kind === "ref" ? "A list-typed parameter — any List<...> type (List<AWS::EC2::Subnet::Id>, List<Number>, …) or CommaDelimitedList — is already a list." : source?.kind === "getatt" ? "A list-valued Fn::GetAtt (for example AWS::Route53::HostedZone.NameServers or AWS::EC2::VPC.Ipv6CidrBlocks) already returns a list. If you wrote the Fn::Split as a workaround for cdkd resolving that attribute to a comma-delimited string, that bug is fixed and the workaround is no longer needed." : "Several intrinsics already return a list — among them a list-valued Fn::GetAtt, a Ref to a list-typed parameter (any List<...> type or CommaDelimitedList), Fn::GetAZs, Fn::Cidr, and Fn::Split itself.";
|
|
20926
20946
|
throw markNonRetryable(new IntrinsicResolutionRefusalError(`Fn::Split: the value to split${sourceClause} is ALREADY a list (an array of ${resolvedValue.length} item${resolvedValue.length === 1 ? "" : "s"}), not a string. CloudFormation rejects Fn::Split over a list too, so this template is not valid CloudFormation either. Remove the Fn::Split and use the value directly. ${remedy}`));
|
|
20927
20947
|
}
|
|
20928
20948
|
throw markNonRetryable(new IntrinsicResolutionRefusalError(`Fn::Split: the value to split${sourceClause} must be a string, got ${resolvedValue === null ? "null" : typeof resolvedValue}. Fn::Split accepts only a string; check the value or the intrinsic that produced it.`));
|
|
@@ -22347,7 +22367,7 @@ var DiffCalculator = class DiffCalculator {
|
|
|
22347
22367
|
requiresReplacement: await this.maskedEditRequiresReplacement(desiredResource.Type, key, oldValue, newValue),
|
|
22348
22368
|
maskedExpressionChanged: true
|
|
22349
22369
|
});
|
|
22350
|
-
this.logger.debug(safeMsg`${logicalId}: ${key} is recorded masked and its template expression or a resolved input changed
|
|
22370
|
+
this.logger.debug(safeMsg`${logicalId}: ${key} is recorded masked and its template expression or a resolved input changed`);
|
|
22351
22371
|
}
|
|
22352
22372
|
const attributeChanges = this.compareAttributes(currentResource, desiredResource);
|
|
22353
22373
|
if (propertyChanges.length > 0 || attributeChanges.length > 0) {
|
|
@@ -23125,9 +23145,167 @@ function escapeRegExp$1(text) {
|
|
|
23125
23145
|
return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
23126
23146
|
}
|
|
23127
23147
|
|
|
23148
|
+
//#endregion
|
|
23149
|
+
//#region src/provisioning/getatt-attributes.generated.ts
|
|
23150
|
+
const WRITABLE_GETATT_ATTRIBUTES = {
|
|
23151
|
+
"AWS::Amplify::Branch": ["BranchName"],
|
|
23152
|
+
"AWS::Amplify::Domain": [
|
|
23153
|
+
"AutoSubDomainCreationPatterns",
|
|
23154
|
+
"AutoSubDomainIAMRole",
|
|
23155
|
+
"DomainName",
|
|
23156
|
+
"EnableAutoSubDomain"
|
|
23157
|
+
],
|
|
23158
|
+
"AWS::AppMesh::GatewayRoute": [
|
|
23159
|
+
"GatewayRouteName",
|
|
23160
|
+
"MeshName",
|
|
23161
|
+
"MeshOwner",
|
|
23162
|
+
"VirtualGatewayName"
|
|
23163
|
+
],
|
|
23164
|
+
"AWS::AppMesh::Mesh": ["MeshName"],
|
|
23165
|
+
"AWS::AppMesh::Route": [
|
|
23166
|
+
"MeshName",
|
|
23167
|
+
"MeshOwner",
|
|
23168
|
+
"RouteName",
|
|
23169
|
+
"VirtualRouterName"
|
|
23170
|
+
],
|
|
23171
|
+
"AWS::AppMesh::VirtualGateway": [
|
|
23172
|
+
"MeshName",
|
|
23173
|
+
"MeshOwner",
|
|
23174
|
+
"VirtualGatewayName"
|
|
23175
|
+
],
|
|
23176
|
+
"AWS::AppMesh::VirtualNode": [
|
|
23177
|
+
"MeshName",
|
|
23178
|
+
"MeshOwner",
|
|
23179
|
+
"VirtualNodeName"
|
|
23180
|
+
],
|
|
23181
|
+
"AWS::AppMesh::VirtualRouter": [
|
|
23182
|
+
"MeshName",
|
|
23183
|
+
"MeshOwner",
|
|
23184
|
+
"VirtualRouterName"
|
|
23185
|
+
],
|
|
23186
|
+
"AWS::AppMesh::VirtualService": [
|
|
23187
|
+
"MeshName",
|
|
23188
|
+
"MeshOwner",
|
|
23189
|
+
"VirtualServiceName"
|
|
23190
|
+
],
|
|
23191
|
+
"AWS::AppSync::DataSource": ["Name"],
|
|
23192
|
+
"AWS::AppSync::DomainName": ["DomainName"],
|
|
23193
|
+
"AWS::AppSync::FunctionConfiguration": ["DataSourceName", "Name"],
|
|
23194
|
+
"AWS::AppSync::Resolver": ["FieldName", "TypeName"],
|
|
23195
|
+
"AWS::Backup::BackupSelection": ["BackupPlanId"],
|
|
23196
|
+
"AWS::Backup::BackupVault": ["BackupVaultName"],
|
|
23197
|
+
"AWS::CleanRooms::AnalysisTemplate": ["Schema"],
|
|
23198
|
+
"AWS::Cloud9::EnvironmentEC2": ["Name"],
|
|
23199
|
+
"AWS::CloudWatch::InsightRule": ["RuleName"],
|
|
23200
|
+
"AWS::CodeArtifact::Domain": ["EncryptionKey"],
|
|
23201
|
+
"AWS::CodeArtifact::Repository": ["DomainName", "DomainOwner"],
|
|
23202
|
+
"AWS::EC2::CapacityReservation": [
|
|
23203
|
+
"AvailabilityZone",
|
|
23204
|
+
"InstanceType",
|
|
23205
|
+
"Tenancy"
|
|
23206
|
+
],
|
|
23207
|
+
"AWS::EC2::Instance": ["AvailabilityZone"],
|
|
23208
|
+
"AWS::EC2::SecurityGroup": ["VpcId"],
|
|
23209
|
+
"AWS::EC2::Subnet": [
|
|
23210
|
+
"AvailabilityZone",
|
|
23211
|
+
"AvailabilityZoneId",
|
|
23212
|
+
"CidrBlock",
|
|
23213
|
+
"OutpostArn",
|
|
23214
|
+
"VpcId"
|
|
23215
|
+
],
|
|
23216
|
+
"AWS::EC2::VPC": ["CidrBlock"],
|
|
23217
|
+
"AWS::EFS::MountTarget": ["IpAddress"],
|
|
23218
|
+
"AWS::EKS::Nodegroup": ["ClusterName", "NodegroupName"],
|
|
23219
|
+
"AWS::ElasticLoadBalancingV2::LoadBalancer": ["SecurityGroups"],
|
|
23220
|
+
"AWS::EventSchemas::Discoverer": ["CrossAccount"],
|
|
23221
|
+
"AWS::EventSchemas::Registry": ["RegistryName"],
|
|
23222
|
+
"AWS::EventSchemas::Schema": ["SchemaName"],
|
|
23223
|
+
"AWS::Events::EventBus": ["Name"],
|
|
23224
|
+
"AWS::GameLift::GameSessionQueue": ["Name"],
|
|
23225
|
+
"AWS::GameLift::MatchmakingConfiguration": ["Name"],
|
|
23226
|
+
"AWS::GameLift::MatchmakingRuleSet": ["Name"],
|
|
23227
|
+
"AWS::Grafana::Workspace": ["GrafanaVersion"],
|
|
23228
|
+
"AWS::Greengrass::ConnectorDefinition": ["Name"],
|
|
23229
|
+
"AWS::Greengrass::CoreDefinition": ["Name"],
|
|
23230
|
+
"AWS::Greengrass::DeviceDefinition": ["Name"],
|
|
23231
|
+
"AWS::Greengrass::FunctionDefinition": ["Name"],
|
|
23232
|
+
"AWS::Greengrass::Group": ["Name", "RoleArn"],
|
|
23233
|
+
"AWS::Greengrass::LoggerDefinition": ["Name"],
|
|
23234
|
+
"AWS::Greengrass::ResourceDefinition": ["Name"],
|
|
23235
|
+
"AWS::Greengrass::SubscriptionDefinition": ["Name"],
|
|
23236
|
+
"AWS::ImageBuilder::Component": ["Name"],
|
|
23237
|
+
"AWS::ImageBuilder::ContainerRecipe": ["Name"],
|
|
23238
|
+
"AWS::ImageBuilder::DistributionConfiguration": ["Name"],
|
|
23239
|
+
"AWS::ImageBuilder::ImagePipeline": ["Name"],
|
|
23240
|
+
"AWS::ImageBuilder::ImageRecipe": ["Name"],
|
|
23241
|
+
"AWS::ImageBuilder::InfrastructureConfiguration": ["Name"],
|
|
23242
|
+
"AWS::Kinesis::StreamConsumer": ["ConsumerName", "StreamARN"],
|
|
23243
|
+
"AWS::MSK::Cluster": ["CurrentVersion"],
|
|
23244
|
+
"AWS::ManagedBlockchain::Member": ["NetworkId"],
|
|
23245
|
+
"AWS::ManagedBlockchain::Node": ["MemberId", "NetworkId"],
|
|
23246
|
+
"AWS::MediaConvert::JobTemplate": ["Name"],
|
|
23247
|
+
"AWS::MediaConvert::Preset": ["Name"],
|
|
23248
|
+
"AWS::MediaConvert::Queue": ["Name"],
|
|
23249
|
+
"AWS::OpsWorks::Instance": ["AvailabilityZone"],
|
|
23250
|
+
"AWS::OpsWorks::UserProfile": ["SshUsername"],
|
|
23251
|
+
"AWS::QuickSight::Analysis": ["Errors", "Sheets"],
|
|
23252
|
+
"AWS::RDS::DBInstance": ["DBSystemId"],
|
|
23253
|
+
"AWS::RDS::DBParameterGroup": ["DBParameterGroupName"],
|
|
23254
|
+
"AWS::RedshiftServerless::Workgroup": ["Workgroup"],
|
|
23255
|
+
"AWS::RoboMaker::RobotApplication": ["CurrentRevisionId"],
|
|
23256
|
+
"AWS::RoboMaker::SimulationApplication": ["CurrentRevisionId"],
|
|
23257
|
+
"AWS::Route53Resolver::ResolverEndpoint": [
|
|
23258
|
+
"Direction",
|
|
23259
|
+
"Name",
|
|
23260
|
+
"OutpostArn",
|
|
23261
|
+
"PreferredInstanceType",
|
|
23262
|
+
"ResolverEndpointType"
|
|
23263
|
+
],
|
|
23264
|
+
"AWS::Route53Resolver::ResolverRule": [
|
|
23265
|
+
"DomainName",
|
|
23266
|
+
"Name",
|
|
23267
|
+
"ResolverEndpointId",
|
|
23268
|
+
"TargetIps"
|
|
23269
|
+
],
|
|
23270
|
+
"AWS::Route53Resolver::ResolverRuleAssociation": [
|
|
23271
|
+
"Name",
|
|
23272
|
+
"ResolverRuleId",
|
|
23273
|
+
"VPCId"
|
|
23274
|
+
],
|
|
23275
|
+
"AWS::S3::AccessPoint": ["Name"],
|
|
23276
|
+
"AWS::SNS::Topic": ["TopicName"],
|
|
23277
|
+
"AWS::SQS::Queue": ["QueueName"],
|
|
23278
|
+
"AWS::SSM::Parameter": ["Type"],
|
|
23279
|
+
"AWS::SSM::ResourceDataSync": ["SyncName"],
|
|
23280
|
+
"AWS::SageMaker::CodeRepository": ["CodeRepositoryName"],
|
|
23281
|
+
"AWS::SageMaker::Endpoint": ["EndpointName"],
|
|
23282
|
+
"AWS::SageMaker::EndpointConfig": ["EndpointConfigName"],
|
|
23283
|
+
"AWS::SageMaker::Model": ["ModelName"],
|
|
23284
|
+
"AWS::SageMaker::ModelPackage": ["LastModifiedTime"],
|
|
23285
|
+
"AWS::SageMaker::NotebookInstance": ["NotebookInstanceName"],
|
|
23286
|
+
"AWS::SageMaker::NotebookInstanceLifecycleConfig": ["NotebookInstanceLifecycleConfigName"],
|
|
23287
|
+
"AWS::SageMaker::Workteam": ["WorkteamName"],
|
|
23288
|
+
"AWS::ServiceDiscovery::Service": ["Name"],
|
|
23289
|
+
"AWS::Signer::SigningProfile": ["ProfileName"],
|
|
23290
|
+
"AWS::StepFunctions::Activity": ["Name"],
|
|
23291
|
+
"AWS::Transfer::User": ["ServerId", "UserName"]
|
|
23292
|
+
};
|
|
23293
|
+
|
|
23128
23294
|
//#endregion
|
|
23129
23295
|
//#region src/provisioning/read-only-properties.ts
|
|
23130
23296
|
const readOnlyPropertiesCache = /* @__PURE__ */ new Map();
|
|
23297
|
+
const attributeNamesCache = /* @__PURE__ */ new Map();
|
|
23298
|
+
async function getTopLevelAttributeNames(resourceType) {
|
|
23299
|
+
const readOnly = await getTopLevelReadOnlyProperties(resourceType);
|
|
23300
|
+
if (readOnly === void 0) return void 0;
|
|
23301
|
+
const writable = Object.hasOwn(WRITABLE_GETATT_ATTRIBUTES, resourceType) ? WRITABLE_GETATT_ATTRIBUTES[resourceType] : void 0;
|
|
23302
|
+
if (!writable || writable.length === 0) return readOnly;
|
|
23303
|
+
const cached = attributeNamesCache.get(resourceType);
|
|
23304
|
+
if (cached) return cached;
|
|
23305
|
+
const names = /* @__PURE__ */ new Set([...readOnly, ...writable]);
|
|
23306
|
+
attributeNamesCache.set(resourceType, names);
|
|
23307
|
+
return names;
|
|
23308
|
+
}
|
|
23131
23309
|
function getTopLevelReadOnlyProperties(resourceType) {
|
|
23132
23310
|
if (hasNoRegistrySchema(resourceType)) return Promise.resolve(void 0);
|
|
23133
23311
|
const cached = readOnlyPropertiesCache.get(resourceType);
|
|
@@ -23710,7 +23888,7 @@ var CloudControlProvider = class {
|
|
|
23710
23888
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
23711
23889
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
23712
23890
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
23713
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
23891
|
+
const { ASGProvider } = await import("./asg-provider-D9Po293s.js");
|
|
23714
23892
|
const delegateRegion = ambientRegion();
|
|
23715
23893
|
let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
|
|
23716
23894
|
if (asgProvider === void 0) {
|
|
@@ -23816,7 +23994,7 @@ var CloudControlProvider = class {
|
|
|
23816
23994
|
const family = SDK_DELETE_FAMILIES.get(resourceType);
|
|
23817
23995
|
const cached = this.sdkDeleteDelegates.get(family);
|
|
23818
23996
|
if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
|
|
23819
|
-
const provider = family === "rds" ? new (await (import("./rds-provider-
|
|
23997
|
+
const provider = family === "rds" ? new (await (import("./rds-provider-CU0LZr05.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-xROL9y31.js"))).NeptuneProvider({ region: ccRegion });
|
|
23820
23998
|
this.sdkDeleteDelegates.set(family, {
|
|
23821
23999
|
region: ccRegion,
|
|
23822
24000
|
provider
|
|
@@ -24501,7 +24679,7 @@ var CloudControlProvider = class {
|
|
|
24501
24679
|
async maskUncertifiedModelValues(model, resourceType, physicalId) {
|
|
24502
24680
|
const safeType = displaySafe(resourceType, { asciiOnly: true });
|
|
24503
24681
|
const safeId = displaySafe(physicalId, { asciiOnly: true });
|
|
24504
|
-
const attributeNames = await
|
|
24682
|
+
const attributeNames = await getTopLevelAttributeNames(resourceType);
|
|
24505
24683
|
if (attributeNames === void 0) {
|
|
24506
24684
|
if (!this.warnedUnresolvableSchemaTypes.has(resourceType)) {
|
|
24507
24685
|
this.warnedUnresolvableSchemaTypes.add(resourceType);
|
|
@@ -24515,7 +24693,7 @@ var CloudControlProvider = class {
|
|
|
24515
24693
|
masked[key] = maskLeavesDeep(value);
|
|
24516
24694
|
maskedCount++;
|
|
24517
24695
|
}
|
|
24518
|
-
if (maskedCount > 0 && attributeNames !== void 0) this.logger.debug(`Masked ${maskedCount} non-attribute key(s) out of the ${safeType} Cloud Control model for ${safeId}: they are not
|
|
24696
|
+
if (maskedCount > 0 && attributeNames !== void 0) this.logger.debug(`Masked ${maskedCount} non-attribute key(s) out of the ${safeType} Cloud Control model for ${safeId}: they are not Fn::GetAtt attributes of the type, so CloudFormation would reject an Fn::GetAtt naming them and cdkd has no evidence they are safe to persist.`);
|
|
24519
24697
|
return masked;
|
|
24520
24698
|
}
|
|
24521
24699
|
};
|
|
@@ -24626,6 +24804,124 @@ function maskLeavesDeep(value) {
|
|
|
24626
24804
|
return "***";
|
|
24627
24805
|
}
|
|
24628
24806
|
|
|
24807
|
+
//#endregion
|
|
24808
|
+
//#region src/state/state-bucket-lifecycle.ts
|
|
24809
|
+
const CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID = "cdkd-custom-resource-responses-expiration";
|
|
24810
|
+
const CUSTOM_RESOURCE_RESPONSE_EXPIRATION_DAYS = 1;
|
|
24811
|
+
const CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_PREFIX = `${CUSTOM_RESOURCE_RESPONSE_PREFIX}/cdkd-1`;
|
|
24812
|
+
function buildCustomResourceResponseLifecycleRule(legacyPrefix) {
|
|
24813
|
+
const prefix = CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_PREFIX;
|
|
24814
|
+
return {
|
|
24815
|
+
ID: CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID,
|
|
24816
|
+
Status: "Enabled",
|
|
24817
|
+
...legacyPrefix ? { Prefix: prefix } : { Filter: { Prefix: prefix } },
|
|
24818
|
+
Expiration: { Days: 1 },
|
|
24819
|
+
NoncurrentVersionExpiration: { NoncurrentDays: 1 }
|
|
24820
|
+
};
|
|
24821
|
+
}
|
|
24822
|
+
async function applyCustomResourceResponseExpiration(s3, bucket, opts = {}) {
|
|
24823
|
+
const owner = opts.expectedBucketOwner ? { ExpectedBucketOwner: opts.expectedBucketOwner } : {};
|
|
24824
|
+
const first = await readLifecycle(s3, bucket, owner);
|
|
24825
|
+
if ("failed" in first) return first.failed;
|
|
24826
|
+
if (first.rules.some((rule) => rule.ID === "cdkd-custom-resource-responses-expiration")) return { status: "present" };
|
|
24827
|
+
let collision;
|
|
24828
|
+
try {
|
|
24829
|
+
collision = await findStateUnderResponsePrefix(s3, bucket, owner);
|
|
24830
|
+
} catch (error) {
|
|
24831
|
+
return failedOutcome("ListObjectsV2", error);
|
|
24832
|
+
}
|
|
24833
|
+
if (collision !== void 0) return {
|
|
24834
|
+
status: "refused",
|
|
24835
|
+
reason: `${CUSTOM_RESOURCE_RESPONSE_PREFIX}/${displaySafe(collision) || "<unrenderable>"} holds objects other than custom-resource responses (a stack deployed with --state-prefix ${CUSTOM_RESOURCE_RESPONSE_PREFIX}), and the rule would expire them`
|
|
24836
|
+
};
|
|
24837
|
+
const latest = await readLifecycle(s3, bucket, owner);
|
|
24838
|
+
if ("failed" in latest) return latest.failed;
|
|
24839
|
+
if (latest.rules.some((rule) => rule.ID === "cdkd-custom-resource-responses-expiration")) return { status: "present" };
|
|
24840
|
+
const existing = latest.rules;
|
|
24841
|
+
const minimumObjectSize = latest.minimumObjectSize;
|
|
24842
|
+
const legacyPrefix = existing.some((rule) => rule.Prefix !== void 0);
|
|
24843
|
+
try {
|
|
24844
|
+
await s3.send(new PutBucketLifecycleConfigurationCommand({
|
|
24845
|
+
Bucket: bucket,
|
|
24846
|
+
...owner,
|
|
24847
|
+
LifecycleConfiguration: { Rules: [...existing, buildCustomResourceResponseLifecycleRule(legacyPrefix)] },
|
|
24848
|
+
...minimumObjectSize !== void 0 && { TransitionDefaultMinimumObjectSize: minimumObjectSize }
|
|
24849
|
+
}));
|
|
24850
|
+
} catch (error) {
|
|
24851
|
+
return failedOutcome("PutBucketLifecycleConfiguration", error);
|
|
24852
|
+
}
|
|
24853
|
+
return { status: "added" };
|
|
24854
|
+
}
|
|
24855
|
+
async function readLifecycle(s3, bucket, owner) {
|
|
24856
|
+
try {
|
|
24857
|
+
const current = await s3.send(new GetBucketLifecycleConfigurationCommand({
|
|
24858
|
+
Bucket: bucket,
|
|
24859
|
+
...owner
|
|
24860
|
+
}));
|
|
24861
|
+
return {
|
|
24862
|
+
rules: current.Rules ?? [],
|
|
24863
|
+
minimumObjectSize: current.TransitionDefaultMinimumObjectSize
|
|
24864
|
+
};
|
|
24865
|
+
} catch (error) {
|
|
24866
|
+
if (error?.name === "NoSuchLifecycleConfiguration") return {
|
|
24867
|
+
rules: [],
|
|
24868
|
+
minimumObjectSize: void 0
|
|
24869
|
+
};
|
|
24870
|
+
return { failed: failedOutcome("GetBucketLifecycleConfiguration", error) };
|
|
24871
|
+
}
|
|
24872
|
+
}
|
|
24873
|
+
function isAccessDenied(error) {
|
|
24874
|
+
const e = error;
|
|
24875
|
+
return e?.name === "AccessDenied" || e?.$metadata?.httpStatusCode === 403;
|
|
24876
|
+
}
|
|
24877
|
+
function failedOutcome(operation, error) {
|
|
24878
|
+
return {
|
|
24879
|
+
status: "failed",
|
|
24880
|
+
reason: failureReason(operation, error),
|
|
24881
|
+
accessDenied: isAccessDenied(error)
|
|
24882
|
+
};
|
|
24883
|
+
}
|
|
24884
|
+
async function findStateUnderResponsePrefix(s3, bucket, owner) {
|
|
24885
|
+
let token;
|
|
24886
|
+
do {
|
|
24887
|
+
const page = await s3.send(new ListObjectsV2Command({
|
|
24888
|
+
Bucket: bucket,
|
|
24889
|
+
...owner,
|
|
24890
|
+
Prefix: CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_PREFIX,
|
|
24891
|
+
Delimiter: "/",
|
|
24892
|
+
EncodingType: "url",
|
|
24893
|
+
...token !== void 0 && { ContinuationToken: token }
|
|
24894
|
+
}));
|
|
24895
|
+
const first = decodeListingKey(page.CommonPrefixes?.find((p) => p.Prefix)?.Prefix);
|
|
24896
|
+
if (first !== void 0) return first.slice(CUSTOM_RESOURCE_RESPONSE_PREFIX.length + 1);
|
|
24897
|
+
token = page.IsTruncated ? page.NextContinuationToken : void 0;
|
|
24898
|
+
} while (token !== void 0);
|
|
24899
|
+
}
|
|
24900
|
+
function failureReason(operation, error) {
|
|
24901
|
+
return `${operation} failed: ${displaySafe(describeAwsFailure(error).detail) || "<unrenderable>"}`;
|
|
24902
|
+
}
|
|
24903
|
+
function customResourceResponseExpirationWarning(bucket, outcome) {
|
|
24904
|
+
const remedy = outcome.status === "refused" ? `To add the rule, move that stack to a different --state-prefix.` : outcome.accessDenied ? "To add the rule, grant s3:GetLifecycleConfiguration, s3:PutLifecycleConfiguration and s3:ListBucket on the bucket, and check that this account owns it." : `To add the rule, review the bucket's lifecycle configuration against the reason above.`;
|
|
24905
|
+
return `Could not add the ${1}-day expiration lifecycle rule for ${CUSTOM_RESOURCE_RESPONSE_PREFIX}/ to state bucket ${displaySafe(bucket, { asciiOnly: true }) || "<unrenderable>"} (${outcome.reason}). The bucket's lifecycle configuration was left unchanged. Custom-resource response objects left by an interrupted run stay until 'cdkd gc' removes them. ${remedy}`;
|
|
24906
|
+
}
|
|
24907
|
+
const ensured = /* @__PURE__ */ new Map();
|
|
24908
|
+
function ensureCustomResourceResponseExpirationOnce(s3, bucket, log) {
|
|
24909
|
+
const memo = ensured.get(bucket);
|
|
24910
|
+
if (memo) return memo;
|
|
24911
|
+
const run = (async () => {
|
|
24912
|
+
try {
|
|
24913
|
+
const owner = await expectedOwnerParam(s3);
|
|
24914
|
+
const outcome = await applyCustomResourceResponseExpiration(s3, bucket, { ...owner.ExpectedBucketOwner && { expectedBucketOwner: owner.ExpectedBucketOwner } });
|
|
24915
|
+
if (outcome.status === "failed" || outcome.status === "refused") log.warn(customResourceResponseExpirationWarning(bucket, outcome));
|
|
24916
|
+
else if (outcome.status === "added") log.debug(`Added the ${1}-day expiration lifecycle rule for ${CUSTOM_RESOURCE_RESPONSE_PREFIX}/ to the state bucket.`);
|
|
24917
|
+
} catch (error) {
|
|
24918
|
+
log.warn(customResourceResponseExpirationWarning(bucket, failedOutcome("lifecycle check", error)));
|
|
24919
|
+
}
|
|
24920
|
+
})();
|
|
24921
|
+
ensured.set(bucket, run);
|
|
24922
|
+
return run;
|
|
24923
|
+
}
|
|
24924
|
+
|
|
24629
24925
|
//#endregion
|
|
24630
24926
|
//#region src/deployment/resource-secrets-scope.ts
|
|
24631
24927
|
const currentResourceSecretsStore = new AsyncLocalStorage();
|
|
@@ -25779,6 +26075,7 @@ var CustomResourceProvider = class CustomResourceProvider {
|
|
|
25779
26075
|
if (!this.responseBucket) return "https://localhost/cfn-response-not-configured";
|
|
25780
26076
|
await this.ensureResponseClient();
|
|
25781
26077
|
const bucket = this.responseBucket;
|
|
26078
|
+
if (this.responsePrefix === "custom-resource-responses") ensureCustomResourceResponseExpirationOnce(this.s3Client, bucket, this.logger);
|
|
25782
26079
|
try {
|
|
25783
26080
|
await withRetry(() => this.s3Client.send(new PutObjectCommand({
|
|
25784
26081
|
Bucket: bucket,
|
|
@@ -28615,6 +28912,162 @@ const PRINCIPAL_KINDS = {
|
|
|
28615
28912
|
"AWS::IAM::Group": "group",
|
|
28616
28913
|
"AWS::IAM::User": "user"
|
|
28617
28914
|
};
|
|
28915
|
+
function isInlinePolicyPrincipalType(resourceType) {
|
|
28916
|
+
return Object.hasOwn(PRINCIPAL_KINDS, resourceType);
|
|
28917
|
+
}
|
|
28918
|
+
function principalKindOf(resourceType) {
|
|
28919
|
+
return Object.hasOwn(PRINCIPAL_KINDS, resourceType) ? PRINCIPAL_KINDS[resourceType] : void 0;
|
|
28920
|
+
}
|
|
28921
|
+
const ANY = "*";
|
|
28922
|
+
const PRINCIPAL_NAME_FIELDS = {
|
|
28923
|
+
role: "RoleName",
|
|
28924
|
+
group: "GroupName",
|
|
28925
|
+
user: "UserName"
|
|
28926
|
+
};
|
|
28927
|
+
function nameKey(value) {
|
|
28928
|
+
return typeof value === "string" && IAM_NAME.test(value) ? value.toLowerCase() : ANY;
|
|
28929
|
+
}
|
|
28930
|
+
function templatePrincipalKeys(entry, kind, templateResources, stateResources) {
|
|
28931
|
+
if (typeof entry === "string") return [nameKey(entry)];
|
|
28932
|
+
const ref = typeof entry === "object" && entry !== null && !Array.isArray(entry) ? entry["Ref"] : void 0;
|
|
28933
|
+
if (typeof ref !== "string" || !Object.hasOwn(templateResources, ref)) return [ANY];
|
|
28934
|
+
const target = templateResources[ref];
|
|
28935
|
+
if (principalKindOf(target.Type) !== kind) return [ANY];
|
|
28936
|
+
return principalSelfKeys(ref, kind, target, stateResources);
|
|
28937
|
+
}
|
|
28938
|
+
function principalSelfKeys(logicalId, kind, template, stateResources) {
|
|
28939
|
+
const keys = [`ref:${logicalId}`];
|
|
28940
|
+
const declared = template?.Properties?.[PRINCIPAL_NAME_FIELDS[kind]];
|
|
28941
|
+
const declaredKey = nameKey(declared);
|
|
28942
|
+
if (declaredKey !== ANY) keys.push(declaredKey);
|
|
28943
|
+
const record = Object.hasOwn(stateResources, logicalId) ? stateResources[logicalId] : void 0;
|
|
28944
|
+
if (record !== void 0 && principalKindOf(record.resourceType) === kind) {
|
|
28945
|
+
const recordedKey = nameKey(record.physicalId);
|
|
28946
|
+
if (recordedKey !== ANY) keys.push(recordedKey);
|
|
28947
|
+
}
|
|
28948
|
+
return keys;
|
|
28949
|
+
}
|
|
28950
|
+
function policiesNames(policies) {
|
|
28951
|
+
if (policies === void 0 || policies === null) return [];
|
|
28952
|
+
if (!Array.isArray(policies)) return [ANY];
|
|
28953
|
+
return policies.map((entry) => typeof entry === "object" && entry !== null && !Array.isArray(entry) ? nameKey(entry["PolicyName"]) : ANY);
|
|
28954
|
+
}
|
|
28955
|
+
function inlinePolicyClaimsOf(logicalId, change, templateResources, stateResources) {
|
|
28956
|
+
const template = Object.hasOwn(templateResources, logicalId) ? templateResources[logicalId] : void 0;
|
|
28957
|
+
const record = Object.hasOwn(stateResources, logicalId) ? stateResources[logicalId] : void 0;
|
|
28958
|
+
const recorded = record?.resourceType === change.resourceType ? record : void 0;
|
|
28959
|
+
const claims = [];
|
|
28960
|
+
const cross = (kind, principals, names) => {
|
|
28961
|
+
for (const principal of new Set(principals)) for (const name of new Set(names)) claims.push({
|
|
28962
|
+
kind,
|
|
28963
|
+
principal,
|
|
28964
|
+
name
|
|
28965
|
+
});
|
|
28966
|
+
};
|
|
28967
|
+
if (change.resourceType === "AWS::IAM::Policy") {
|
|
28968
|
+
const desired = template?.Properties ?? {};
|
|
28969
|
+
const old = recorded?.properties ?? {};
|
|
28970
|
+
const names = [];
|
|
28971
|
+
if (desired["PolicyName"] !== void 0) names.push(nameKey(desired["PolicyName"]));
|
|
28972
|
+
if (old["PolicyName"] !== void 0) names.push(nameKey(old["PolicyName"]));
|
|
28973
|
+
if (recorded !== void 0) names.push(nameKey(typeof recorded.physicalId === "string" ? recorded.physicalId.split(":")[0] : recorded.physicalId));
|
|
28974
|
+
if (names.length === 0) return claims;
|
|
28975
|
+
for (const kind of [
|
|
28976
|
+
"role",
|
|
28977
|
+
"group",
|
|
28978
|
+
"user"
|
|
28979
|
+
]) {
|
|
28980
|
+
const field = POLICY_LIST_FIELDS[kind];
|
|
28981
|
+
const principals = [];
|
|
28982
|
+
const listed = desired[field];
|
|
28983
|
+
if (Array.isArray(listed)) for (const entry of listed) principals.push(...templatePrincipalKeys(entry, kind, templateResources, stateResources));
|
|
28984
|
+
else if (listed !== void 0) principals.push(ANY);
|
|
28985
|
+
const held = old[field];
|
|
28986
|
+
if (Array.isArray(held)) principals.push(...held.map(nameKey));
|
|
28987
|
+
else if (held !== void 0 && held !== null) principals.push(ANY);
|
|
28988
|
+
cross(kind, principals, names);
|
|
28989
|
+
}
|
|
28990
|
+
return claims;
|
|
28991
|
+
}
|
|
28992
|
+
const kind = principalKindOf(change.resourceType);
|
|
28993
|
+
if (kind === void 0) return claims;
|
|
28994
|
+
if (!(change.changeType === "CREATE" || (change.propertyChanges ?? []).some((c) => c.requiresReplacement) || ownPoliciesChange(change))) return claims;
|
|
28995
|
+
cross(kind, principalSelfKeys(logicalId, kind, template, stateResources), [...policiesNames(template?.Properties?.["Policies"]), ...policiesNames(recorded?.properties?.["Policies"])]);
|
|
28996
|
+
return claims;
|
|
28997
|
+
}
|
|
28998
|
+
function orderInlinePolicyWriters(args) {
|
|
28999
|
+
const { writes, changes, templateResources, stateResources, dependencies, rank } = args;
|
|
29000
|
+
const writers = writes.filter((id) => {
|
|
29001
|
+
const type = changes.get(id)?.resourceType;
|
|
29002
|
+
return type === "AWS::IAM::Policy" || type !== void 0 && isInlinePolicyPrincipalType(type);
|
|
29003
|
+
});
|
|
29004
|
+
if (writers.length < 2) return [];
|
|
29005
|
+
const exact = /* @__PURE__ */ new Map();
|
|
29006
|
+
const loose = [];
|
|
29007
|
+
const all = [];
|
|
29008
|
+
for (const id of writers) for (const claim of inlinePolicyClaimsOf(id, changes.get(id), templateResources, stateResources)) {
|
|
29009
|
+
all.push({
|
|
29010
|
+
id,
|
|
29011
|
+
claim
|
|
29012
|
+
});
|
|
29013
|
+
if (claim.principal === ANY || claim.name === ANY) {
|
|
29014
|
+
loose.push({
|
|
29015
|
+
id,
|
|
29016
|
+
claim
|
|
29017
|
+
});
|
|
29018
|
+
continue;
|
|
29019
|
+
}
|
|
29020
|
+
const key = JSON.stringify([
|
|
29021
|
+
claim.kind,
|
|
29022
|
+
claim.principal,
|
|
29023
|
+
claim.name
|
|
29024
|
+
]);
|
|
29025
|
+
const ids = exact.get(key) ?? /* @__PURE__ */ new Set();
|
|
29026
|
+
ids.add(id);
|
|
29027
|
+
exact.set(key, ids);
|
|
29028
|
+
}
|
|
29029
|
+
const principalRows = new Set(writers.filter((id) => isInlinePolicyPrincipalType(changes.get(id).resourceType)));
|
|
29030
|
+
const pairs = /* @__PURE__ */ new Map();
|
|
29031
|
+
const pair = (a, b) => {
|
|
29032
|
+
if (a === b || principalRows.has(a) && principalRows.has(b)) return;
|
|
29033
|
+
const [x, y] = rank(a) < rank(b) || rank(a) === rank(b) && a < b ? [a, b] : [b, a];
|
|
29034
|
+
pairs.set(JSON.stringify([x, y]), [x, y]);
|
|
29035
|
+
};
|
|
29036
|
+
for (const ids of exact.values()) {
|
|
29037
|
+
const list = [...ids];
|
|
29038
|
+
for (let i = 0; i < list.length; i++) for (let j = i + 1; j < list.length; j++) pair(list[i], list[j]);
|
|
29039
|
+
}
|
|
29040
|
+
const meets = (a, b) => a === ANY || b === ANY || a === b;
|
|
29041
|
+
for (const { id, claim } of loose) for (const other of all) {
|
|
29042
|
+
if (other.claim.kind !== claim.kind) continue;
|
|
29043
|
+
if (meets(claim.principal, other.claim.principal) && meets(claim.name, other.claim.name)) pair(id, other.id);
|
|
29044
|
+
}
|
|
29045
|
+
if (pairs.size === 0) return [];
|
|
29046
|
+
const reaches = (from, to) => {
|
|
29047
|
+
const seen = /* @__PURE__ */ new Set();
|
|
29048
|
+
const stack = [from];
|
|
29049
|
+
while (stack.length > 0) {
|
|
29050
|
+
const id = stack.pop();
|
|
29051
|
+
if (id === to) return true;
|
|
29052
|
+
if (seen.has(id)) continue;
|
|
29053
|
+
seen.add(id);
|
|
29054
|
+
for (const dep of dependencies.get(id) ?? []) stack.push(dep);
|
|
29055
|
+
}
|
|
29056
|
+
return false;
|
|
29057
|
+
};
|
|
29058
|
+
const added = [];
|
|
29059
|
+
for (const [before, after] of pairs.values()) {
|
|
29060
|
+
if (reaches(after, before) || reaches(before, after)) continue;
|
|
29061
|
+
const deps = dependencies.get(after) ?? /* @__PURE__ */ new Set();
|
|
29062
|
+
deps.add(before);
|
|
29063
|
+
dependencies.set(after, deps);
|
|
29064
|
+
added.push({
|
|
29065
|
+
before,
|
|
29066
|
+
after
|
|
29067
|
+
});
|
|
29068
|
+
}
|
|
29069
|
+
return added;
|
|
29070
|
+
}
|
|
28618
29071
|
function ownPoliciesChange(change) {
|
|
28619
29072
|
return (change?.propertyChanges ?? []).some((c) => c.path === "Policies" && c.inPlacePropagated !== true && c.replacementPropagated !== true);
|
|
28620
29073
|
}
|
|
@@ -30749,7 +31202,7 @@ function renderNestedStackTypeChangeRefusal(typeChanges, stackName) {
|
|
|
30749
31202
|
const rows = typeChanges.map((tc) => {
|
|
30750
31203
|
return `${` - ${tc.logicalId}: Type changes from ${tc.currentType} to ${tc.desiredType} (the existing ${tc.currentType} is ${tc.physicalId}).`}\n${tc.direction === "into-nested-stack" ? ` Replacing a single resource BY a nested stack is not supported: the create half of the replacement would deploy a whole child stack "${stackName}~${tc.logicalId}" as one row, while ${tc.physicalId} is still recorded under this logical id.` : ` Replacing a nested stack BY a single resource is not supported: a replacement deletes its old half as a best-effort cleanup step whose failure is only a warning, so the child stack "${stackName}~${tc.logicalId}" and every resource it owns could be left behind, untracked, under a deploy that reports success.`}`;
|
|
30751
31204
|
});
|
|
30752
|
-
return `Refusing to deploy ${stackName}: ` + (typeChanges.length === 1 ? `a resource changes its Type ` : `${typeChanges.length} resources change their Type `) + `into or out of ${NESTED_STACK_RESOURCE_TYPE}, which cdkd does not replace in place
|
|
31205
|
+
return `Refusing to deploy ${stackName}: ` + (typeChanges.length === 1 ? `a resource changes its Type ` : `${typeChanges.length} resources change their Type `) + `into or out of ${NESTED_STACK_RESOURCE_TYPE}, which cdkd does not replace in place.\n${rows.join("\n")}\n Deploy this as two changes instead: give the new resource a DIFFERENT logical id (in CDK, rename the construct) so the existing row is deleted through its own type's provider and the new one is created under its own — or remove the resource in one deploy and add its replacement in the next. There is no flag that overrides this refusal.`;
|
|
30753
31206
|
}
|
|
30754
31207
|
|
|
30755
31208
|
//#endregion
|
|
@@ -34211,7 +34664,7 @@ function kickOffAutoRefreshObservedProperties(stateResources, crossStackReads) {
|
|
|
34211
34664
|
resource
|
|
34212
34665
|
});
|
|
34213
34666
|
}
|
|
34214
|
-
if (refused > 0) this.logger.debug(`observed-properties auto-refresh SKIPPED for ${refused} resource(s) whose baseline a 'cdkd import' run refused
|
|
34667
|
+
if (refused > 0) this.logger.debug(`observed-properties auto-refresh SKIPPED for ${refused} resource(s) whose baseline a 'cdkd import' run refused: their recorded properties cannot position the redaction, so capturing an AWS readback against them could persist a resolved secret in plaintext. A deploy that actually CHANGES one of them restores its baseline, unless the refusal is an unverifiable-parameter one (only a replacement or a proving re-import discharges that); a NO_CHANGE deploy never does.`);
|
|
34215
34668
|
if (candidates.length === 0 && masked.length === 0) return;
|
|
34216
34669
|
const allSiblings = {};
|
|
34217
34670
|
for (const [lid, res] of Object.entries(stateResources)) allSiblings[lid] = {
|
|
@@ -34244,7 +34697,7 @@ function kickOffAutoRefreshObservedProperties(stateResources, crossStackReads) {
|
|
|
34244
34697
|
if (masked.length > 0) try {
|
|
34245
34698
|
producerRegions = producerRegionsFromState(crossStackReads);
|
|
34246
34699
|
} catch {
|
|
34247
|
-
this.logger.debug(safeMsg`Masked observed baseline re-capture skipped for ${masked.length} resource(s): the record's cross-stack reads could not be read
|
|
34700
|
+
this.logger.debug(safeMsg`Masked observed baseline re-capture skipped for ${masked.length} resource(s): the record's cross-stack reads could not be read.`);
|
|
34248
34701
|
masked.length = 0;
|
|
34249
34702
|
}
|
|
34250
34703
|
for (const { logicalId, resource } of masked) {
|
|
@@ -34271,7 +34724,7 @@ function kickOffMaskedBaselineRecapture(provider, logicalId, resource, producerR
|
|
|
34271
34724
|
const task = (async () => {
|
|
34272
34725
|
const secrets = await resolveRecordSecrets(properties, (token, own) => this.resolver.resolveDynamicReferences(token, persistedTokenResolverContext(own, producerRegions)));
|
|
34273
34726
|
if (secrets === void 0 || secrets.size === 0) {
|
|
34274
|
-
this.logger.debug(safeMsg`Masked observed baseline of ${logicalId} kept: its recorded references did not all resolve to distinct values
|
|
34727
|
+
this.logger.debug(safeMsg`Masked observed baseline of ${logicalId} kept: its recorded references did not all resolve to distinct values.`);
|
|
34275
34728
|
return;
|
|
34276
34729
|
}
|
|
34277
34730
|
const readback = await withCurrentResourceSecrets(secrets, () => readCurrentState(resource.physicalId, logicalId, resource.resourceType, properties, context));
|
|
@@ -34283,14 +34736,14 @@ function kickOffMaskedBaselineRecapture(provider, logicalId, resource, producerR
|
|
|
34283
34736
|
secrets
|
|
34284
34737
|
});
|
|
34285
34738
|
if (recaptured === void 0) {
|
|
34286
|
-
this.logger.debug(safeMsg`Masked observed baseline of ${logicalId} kept: no masked position could be certified, or the resource no longer reads back as its baseline records
|
|
34739
|
+
this.logger.debug(safeMsg`Masked observed baseline of ${logicalId} kept: no masked position could be certified, or the resource no longer reads back as its baseline records.`);
|
|
34287
34740
|
return;
|
|
34288
34741
|
}
|
|
34289
34742
|
this.recapturedBaselines.set(recaptured, previous);
|
|
34290
|
-
this.logger.debug(safeMsg`Re-captured the masked observed baseline of ${logicalId}
|
|
34743
|
+
this.logger.debug(safeMsg`Re-captured the masked observed baseline of ${logicalId}.`);
|
|
34291
34744
|
return recaptured;
|
|
34292
34745
|
})().catch(() => {
|
|
34293
|
-
this.logger.debug(safeMsg`Masked observed baseline of ${logicalId} kept: the re-capture failed
|
|
34746
|
+
this.logger.debug(safeMsg`Masked observed baseline of ${logicalId} kept: the re-capture failed.`);
|
|
34294
34747
|
});
|
|
34295
34748
|
this.observedCaptureTasks.set(logicalId, task);
|
|
34296
34749
|
}
|
|
@@ -34454,7 +34907,7 @@ function refuseRedactedAttributeReads(logicalId, resourceType, context) {
|
|
|
34454
34907
|
const producers = [...new Set(reads.map((read) => read.logicalId).filter((id) => !!id))];
|
|
34455
34908
|
throw new ProvisioningError(`Cannot resolve ${reads.map((read) => read.display).join(", ")} for ${logicalId}: ${producers.map((id) => displayIdent(id)).join(", ")} declared ${reads.length === 1 ? "that attribute" : "those attributes"} NoEcho, so cdkd's recorded state holds only the redaction mask for ${reads.length === 1 ? "it" : "them"}, and cdkd does not re-run a producer to recover a value. Remedy: deploy a change to the producer in the SAME run as ${logicalId} (for a custom resource, change one of its properties, e.g. a nonce / version property, so its handler runs again and supplies the value), or stop declaring the value NoEcho.`, resourceType, logicalId);
|
|
34456
34909
|
}
|
|
34457
|
-
throw new ProvisioningError(`Cannot resolve ${reads.map((read) => read.display).join(", ")} for ${logicalId}: cdkd's recorded state holds only the redaction mask there, and the value is not recoverable from state. There are three ways a record comes to hold the mask. (1) A custom resource handler declared its response NoEcho: true — the value is generated by the handler, so cdkd has nothing to re-derive it from and must not write the literal mask to AWS. Remedies: force that custom resource to update (change one of its properties, e.g. a nonce / version property) so its handler runs again and supplies the value in this same run; or stop setting NoEcho on that response. If the value comes from ANOTHER stack, the producer and this stack must deploy in ONE run (cdkd deploy --all, or cdkd deploy '**' when either is inside a CDK Stage) with the producer's custom resource actually running — re-deploying the producer by itself does not help, because it re-masks the value on the way into its own state. (2) The value holds the Fn::Base64 encoding of a secret value (a {{resolve:...}} dynamic reference under Fn::Base64, such as EC2 UserData), which cdkd never records — so a deploy that leaves the resource or output holding it unchanged reads the mask again, and a re-import does not recover it. Remedy: have this resource build the value itself from the SECRET's own reference (the {{resolve:secretsmanager:...}} or {{resolve:ssm-secure:...}} reference, or a {{resolve:ssm:...}} of a SecureString parameter, that the encoding was made from) under its own Fn::Base64, instead of reading it from another resource's attribute or another stack's output — not by a {{resolve:ssm:...}} read of a String parameter holding the encoding, which cdkd treats as public and would record in state in the clear. (3) The resource was adopted by 'cdkd import' through the Cloud Control fallback, which records only the
|
|
34910
|
+
throw new ProvisioningError(`Cannot resolve ${reads.map((read) => read.display).join(", ")} for ${logicalId}: cdkd's recorded state holds only the redaction mask there, and the value is not recoverable from state. There are three ways a record comes to hold the mask. (1) A custom resource handler declared its response NoEcho: true — the value is generated by the handler, so cdkd has nothing to re-derive it from and must not write the literal mask to AWS. Remedies: force that custom resource to update (change one of its properties, e.g. a nonce / version property) so its handler runs again and supplies the value in this same run; or stop setting NoEcho on that response. If the value comes from ANOTHER stack, the producer and this stack must deploy in ONE run (cdkd deploy --all, or cdkd deploy '**' when either is inside a CDK Stage) with the producer's custom resource actually running — re-deploying the producer by itself does not help, because it re-masks the value on the way into its own state. (2) The value holds the Fn::Base64 encoding of a secret value (a {{resolve:...}} dynamic reference under Fn::Base64, such as EC2 UserData), which cdkd never records — so a deploy that leaves the resource or output holding it unchanged reads the mask again, and a re-import does not recover it. Remedy: have this resource build the value itself from the SECRET's own reference (the {{resolve:secretsmanager:...}} or {{resolve:ssm-secure:...}} reference, or a {{resolve:ssm:...}} of a SecureString parameter, that the encoding was made from) under its own Fn::Base64, instead of reading it from another resource's attribute or another stack's output — not by a {{resolve:ssm:...}} read of a String parameter holding the encoding, which cdkd treats as public and would record in state in the clear. (3) The resource was adopted by 'cdkd import' through the Cloud Control fallback, which records only the type's Fn::GetAtt attributes (its read-only properties plus the writable ones CloudFormation also accepts in Fn::GetAtt) and masks the rest. Either the attribute named above is not one of them — CloudFormation would reject an Fn::GetAtt naming it too, so stop reading it — or cdkd could not read that schema and masked the whole model, which the import warned about when it happened. If that warning named a missing cloudformation:DescribeType permission, grant it first. See https://github.com/go-to-k/cdkd/issues/2449. ${DeployEngine.maskedRecordRemedyFor(reads, context.resources, true)}`, resourceType, logicalId);
|
|
34458
34911
|
}
|
|
34459
34912
|
function allRecordedSecrets() {
|
|
34460
34913
|
const all = /* @__PURE__ */ new Map();
|
|
@@ -34839,7 +35292,7 @@ function createReadOnlyAttributeHealerFactory(options) {
|
|
|
34839
35292
|
region
|
|
34840
35293
|
})))().then((outcome) => {
|
|
34841
35294
|
if (outcome.kind === "read") try {
|
|
34842
|
-
logger.debug(safeMsg`Re-read the attributes of ${displaySafe(logicalId)} (${displaySafe(resource.resourceType)}) from AWS for this preview — its state record lacked one a Fn::GetAtt asked for
|
|
35295
|
+
logger.debug(safeMsg`Re-read the attributes of ${displaySafe(logicalId)} (${displaySafe(resource.resourceType)}) from AWS for this preview — its state record lacked one a Fn::GetAtt asked for; nothing is written: ${Object.keys(outcome.attributes).length} attribute(s) read`);
|
|
34843
35296
|
} catch {}
|
|
34844
35297
|
return outcome;
|
|
34845
35298
|
}).catch((error) => ({
|
|
@@ -34891,7 +35344,7 @@ async function readStaleAttributes(logicalId, resource, stackName) {
|
|
|
34891
35344
|
resourceType: resource.resourceType,
|
|
34892
35345
|
attributes
|
|
34893
35346
|
});
|
|
34894
|
-
this.logger.debug(`Re-read the attributes of ${displaySafe(logicalId)} (${displaySafe(resource.resourceType)}) from AWS — its state record lacked one a Fn::GetAtt asked for
|
|
35347
|
+
this.logger.debug(`Re-read the attributes of ${displaySafe(logicalId)} (${displaySafe(resource.resourceType)}) from AWS — its state record lacked one a Fn::GetAtt asked for: ${Object.keys(attributes).length} attribute(s) read`);
|
|
34895
35348
|
return outcome;
|
|
34896
35349
|
}
|
|
34897
35350
|
function withHealedAttributes(logicalId, record) {
|
|
@@ -35240,9 +35693,9 @@ async function refuseUnlicensedGeneratedName(input) {
|
|
|
35240
35693
|
}], recoveryCommandFlags(this.options.refusalRecovery).flags).command}\``;
|
|
35241
35694
|
if (verdict.ownIntent !== void 0) {
|
|
35242
35695
|
const why = verdict.ownIntent === "abandoned" ? "a deploy of this stack that was killed or force-unlocked" : "a create of this stack that came back failed (a timeout or a server error)";
|
|
35243
|
-
return refuse(`${subject} would be created with ${named}, which an existing resource (${displaySafe(verdict.holder)}) already holds. This stack's create-token ledger records that ${why} sent this name, but this type reports no creation time, so cdkd cannot tell that resource is the one it made rather than another deployment's created since. Since ${adoptsText}, creating it would take that resource over. ${displaySafe(logicalId)} was not created. The likely cause: the resource is this stack's own, from that deploy. If it is, ${importLine} and re-run; if it is not, this stack is also deployed under another state backend
|
|
35696
|
+
return refuse(`${subject} would be created with ${named}, which an existing resource (${displaySafe(verdict.holder)}) already holds. This stack's create-token ledger records that ${why} sent this name, but this type reports no creation time, so cdkd cannot tell that resource is the one it made rather than another deployment's created since. Since ${adoptsText}, creating it would take that resource over. ${displaySafe(logicalId)} was not created. The likely cause: the resource is this stack's own, from that deploy. If it is, ${importLine} and re-run; if it is not, this stack is also deployed under another state backend.`);
|
|
35244
35697
|
}
|
|
35245
|
-
return refuse(`${subject} would be created with ${named}, which an existing resource (${displaySafe(verdict.holder)}) already holds, and nothing this stack records names that resource: not its state, its rollback journal or create-token ledger, nor what a destroy of it under this state prefix kept. Since ${adoptsText}, creating it would take that resource over, as CloudFormation refuses with "already exists". ${displaySafe(logicalId)} was not created. The likely cause: this stack is also deployed under another state backend (another --state-prefix, --state-bucket or account), where cdkd generates the same names. One stack name per account and region is supported
|
|
35698
|
+
return refuse(`${subject} would be created with ${named}, which an existing resource (${displaySafe(verdict.holder)}) already holds, and nothing this stack records names that resource: not its state, its rollback journal or create-token ledger, nor what a destroy of it under this state prefix kept. Since ${adoptsText}, creating it would take that resource over, as CloudFormation refuses with "already exists". ${displaySafe(logicalId)} was not created. The likely cause: this stack is also deployed under another state backend (another --state-prefix, --state-bucket or account), where cdkd generates the same names. One stack name per account and region is supported: deploy it under one backend only, or give this stack another name. If the resource is this stack's own, ${importLine} and re-run.`);
|
|
35246
35699
|
}
|
|
35247
35700
|
}
|
|
35248
35701
|
}
|
|
@@ -36246,7 +36699,7 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
36246
36699
|
const droppedOverrides = [];
|
|
36247
36700
|
if (oldReplicaOverrides.OnDemandThroughputOverride && !replicaOverrides.OnDemandThroughputOverride) droppedOverrides.push("ReadOnDemandThroughputSettings");
|
|
36248
36701
|
if (oldReplicaOverrides.ProvisionedThroughputOverride && !replicaOverrides.ProvisionedThroughputOverride) droppedOverrides.push("ReadProvisionedThroughputSettings");
|
|
36249
|
-
if (droppedOverrides.length > 0) warn(`Cross-region replica ${region} of ${physicalId}: the template no longer declares ${droppedOverrides.map((o) => maskSecrets(o)).join(" / ")}, but DynamoDB offers no way to CLEAR a replica-level throughput override — a -1 sentinel is stored literally, and an empty override block wedges the table in UPDATING
|
|
36702
|
+
if (droppedOverrides.length > 0) warn(`Cross-region replica ${region} of ${physicalId}: the template no longer declares ${droppedOverrides.map((o) => maskSecrets(o)).join(" / ")}, but DynamoDB offers no way to CLEAR a replica-level throughput override — a -1 sentinel is stored literally, and an empty override block wedges the table in UPDATING. The previous override is STILL IN EFFECT on AWS. Set an explicit value, or remove and re-add the replica, to change it.`);
|
|
36250
36703
|
}
|
|
36251
36704
|
if (replica["TableClassOverride"]) updateAction.TableClassOverride = replica["TableClassOverride"];
|
|
36252
36705
|
if (!(updateAction.KMSMasterKeyId !== void 0 || updateAction.GlobalSecondaryIndexes !== void 0 || updateAction.TableClassOverride !== void 0 || updateAction.ProvisionedThroughputOverride !== void 0 || updateAction.OnDemandThroughputOverride !== void 0)) {
|
|
@@ -36749,7 +37202,7 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
36749
37202
|
}
|
|
36750
37203
|
try {
|
|
36751
37204
|
if (hasTransitionalIndex(preDeleteIndexes)) {
|
|
36752
|
-
this.logger.debug(`Waiting for indexes on ${physicalId} to settle before DeleteTable
|
|
37205
|
+
this.logger.debug(`Waiting for indexes on ${physicalId} to settle before DeleteTable`);
|
|
36753
37206
|
await this.waitForIndexesActive(physicalId, logicalId, {
|
|
36754
37207
|
proceedNote: DELETE_INDEX_WAIT_PROCEED_NOTE,
|
|
36755
37208
|
budget
|
|
@@ -38680,14 +39133,14 @@ const REMEDY = "To move a custom resource to a different handler, give it a new
|
|
|
38680
39133
|
const UNJUDGEABLE_REMEDY = `Where the recorded ServiceToken is unreadable and the handler did not change, put the ARN of the handler that created this resource (the one it was last deployed with, not the one the template names now) back as ServiceToken in state.json (a ServiceToken fed by a NoEcho parameter is recorded only as '${"***"}': feed it from a plain value) and re-deploy.`;
|
|
38681
39134
|
function renderServiceTokenRefusal(refusals, stackName, mask = (text) => text) {
|
|
38682
39135
|
const rows = refusals.map((refusal) => ` - ${rowText(refusal, mask)}`);
|
|
38683
|
-
return `Refusing to deploy ${stackName}: ` + (refusals.length === 1 ? `a custom resource's ServiceToken changes` : `${refusals.length} custom resources' ServiceTokens change`) + `, which CloudFormation does not allow ("Modifying service token is not allowed")
|
|
39136
|
+
return `Refusing to deploy ${stackName}: ` + (refusals.length === 1 ? `a custom resource's ServiceToken changes` : `${refusals.length} custom resources' ServiceTokens change`) + `, which CloudFormation does not allow ("Modifying service token is not allowed"). Nothing was sent to either handler.
|
|
38684
39137
|
${rows.join("\n")}\n ${REMEDY}` + (refusals.some((refusal) => refusal.kind === "unjudgeable") ? `\n ${UNJUDGEABLE_REMEDY}` : "");
|
|
38685
39138
|
}
|
|
38686
39139
|
function serviceTokenBlockingReason(refusal, mask) {
|
|
38687
|
-
return `${rowText(refusal, mask)} cdkd deploy refuses a changed custom-resource ServiceToken, as CloudFormation does
|
|
39140
|
+
return `${rowText(refusal, mask)} cdkd deploy refuses a changed custom-resource ServiceToken, as CloudFormation does; give the custom resource a new logical id to move it to another handler.`;
|
|
38688
39141
|
}
|
|
38689
39142
|
function deferredServiceTokenWarning(row) {
|
|
38690
|
-
return `${displayIdent(row.logicalId)}: its ServiceToken reads a resource this deploy replaces, creates or updates, or a value this preview cannot resolve. If it resolves to a different ARN than the one recorded, cdkd deploy refuses the update before invoking any handler and rolls back
|
|
39143
|
+
return `${displayIdent(row.logicalId)}: its ServiceToken reads a resource this deploy replaces, creates or updates, or a value this preview cannot resolve. If it resolves to a different ARN than the one recorded, cdkd deploy refuses the update before invoking any handler and rolls back. A replaced backing function is already deleted by then and the rollback re-creates it; if that fails, the record names a function that no longer exists.`;
|
|
38691
39144
|
}
|
|
38692
39145
|
|
|
38693
39146
|
//#endregion
|
|
@@ -40304,16 +40757,29 @@ async function executeDeployment(template, currentState, changes, dag, execution
|
|
|
40304
40757
|
this.logger.info(`${cyan("Deploying")} ${cyan(createUpdateIds.length)} resource(s) (DAG: ${executionLevels.length} levels, max parallel: ${concurrency})`);
|
|
40305
40758
|
const createUpdateExecutor = new DagExecutor();
|
|
40306
40759
|
const provisionable = new Set(createUpdateIds);
|
|
40760
|
+
const createUpdateDeps = /* @__PURE__ */ new Map();
|
|
40307
40761
|
for (const id of createUpdateIds) {
|
|
40308
40762
|
const allDeps = this.dagBuilder.getDirectDependencies(dag, id);
|
|
40309
|
-
|
|
40310
|
-
createUpdateExecutor.add({
|
|
40311
|
-
id,
|
|
40312
|
-
dependencies: deps,
|
|
40313
|
-
state: "pending",
|
|
40314
|
-
data: changes.get(id)
|
|
40315
|
-
});
|
|
40763
|
+
createUpdateDeps.set(id, new Set(allDeps.filter((d) => provisionable.has(d))));
|
|
40316
40764
|
}
|
|
40765
|
+
const levelOf = /* @__PURE__ */ new Map();
|
|
40766
|
+
executionLevels.forEach((level, at) => {
|
|
40767
|
+
for (const id of level) levelOf.set(id, at);
|
|
40768
|
+
});
|
|
40769
|
+
for (const { before, after } of orderInlinePolicyWriters({
|
|
40770
|
+
writes: createUpdateIds,
|
|
40771
|
+
changes,
|
|
40772
|
+
templateResources: template.Resources ?? {},
|
|
40773
|
+
stateResources: currentState.resources,
|
|
40774
|
+
dependencies: createUpdateDeps,
|
|
40775
|
+
rank: (id) => levelOf.get(id) ?? Number.MAX_SAFE_INTEGER
|
|
40776
|
+
})) this.logger.debug(safeMsg`${after} waits for ${before}: both write an inline policy name on the same IAM principal`);
|
|
40777
|
+
for (const id of createUpdateIds) createUpdateExecutor.add({
|
|
40778
|
+
id,
|
|
40779
|
+
dependencies: createUpdateDeps.get(id),
|
|
40780
|
+
state: "pending",
|
|
40781
|
+
data: changes.get(id)
|
|
40782
|
+
});
|
|
40317
40783
|
const enqueueLostChildren = (executor) => {
|
|
40318
40784
|
const lostIds = noChangeChildrenOfRecreatedParents({
|
|
40319
40785
|
changes,
|
|
@@ -42177,7 +42643,7 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
|
|
|
42177
42643
|
const persistExportSet = new Set(exportNamesToPersist ?? []);
|
|
42178
42644
|
const exportSetChanged = exportNamesToPersist !== void 0 && (currentEffectiveExports.size !== persistExportSet.size || [...persistExportSet].some((k) => !currentEffectiveExports.has(k)));
|
|
42179
42645
|
if (merge?.kind === "kept" && !outputMapsEqual(persistedOutputs, resolvedOutputs)) this.logger.warn(`Outputs changed but one or more could not be resolved; keeping the previously persisted outputs. ${keptWholeReasonText(merge.reason)} A downstream Fn::ImportValue may fail until the next deploy.`);
|
|
42180
|
-
else if (merge?.kind === "merged" && merge.carriedKeys.length > 0) this.logger.debug(`Kept the previously persisted value of ${merge.carriedKeys.length} output key(s), carried export aliases included, that could not be resolved (no-change path
|
|
42646
|
+
else if (merge?.kind === "merged" && merge.carriedKeys.length > 0) this.logger.debug(`Kept the previously persisted value of ${merge.carriedKeys.length} output key(s), carried export aliases included, that could not be resolved (no-change path)`);
|
|
42181
42647
|
const skippedOutputsChanged = !skippedOutputsEqual(currentState.skippedOutputs, this.skippedOutputs);
|
|
42182
42648
|
const healedAttributesPending = this.hasUnpersistedHeals(currentState.resources);
|
|
42183
42649
|
const conditionVerdictsChanged = !conditionVerdictRecordsEqual(readRecordedConditionVerdicts(currentState), conditionVerdicts);
|
|
@@ -42206,14 +42672,14 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
|
|
|
42206
42672
|
if (outputsChanged || exportSetChanged) {
|
|
42207
42673
|
persistedOutputs = refreshedState.outputs;
|
|
42208
42674
|
if (outputsChanged) this.logger.info("Persisted Outputs-only change (no resource diff).");
|
|
42209
|
-
else this.logger.debug("Persisted export-set change (no outputs-value diff, no-change path
|
|
42675
|
+
else this.logger.debug("Persisted export-set change (no outputs-value diff, no-change path)");
|
|
42210
42676
|
if (this.exportIndexStore) await this.exportIndexStore.updateForStack(stackName, this.stackRegion, importableOutputs({
|
|
42211
42677
|
...refreshedState,
|
|
42212
42678
|
outputs: this.redactOutputs(refreshedState.outputs)
|
|
42213
42679
|
}));
|
|
42214
42680
|
} else if (observedRefresh) this.logger.debug("Persisted refreshed observedProperties (no-change path)");
|
|
42215
|
-
else if (healedAttributesPending) this.logger.debug("Persisted attributes re-read from AWS for a stale record (no-change path
|
|
42216
|
-
else this.logger.debug("Persisted skipped-outputs record (no outputs-value diff, no-change path
|
|
42681
|
+
else if (healedAttributesPending) this.logger.debug("Persisted attributes re-read from AWS for a stale record (no-change path)");
|
|
42682
|
+
else this.logger.debug("Persisted skipped-outputs record (no outputs-value diff, no-change path)");
|
|
42217
42683
|
} catch (saveError) {
|
|
42218
42684
|
this.logger.warn(`Failed to persist no-change state update: ${saveError instanceof Error ? saveError.message : String(saveError)} — drift baseline / outputs will be re-resolved on next deploy.`);
|
|
42219
42685
|
}
|
|
@@ -42761,7 +43227,7 @@ var DeployEngine = class {
|
|
|
42761
43227
|
};
|
|
42762
43228
|
}
|
|
42763
43229
|
inlinePolicyClaimedFor(resourceType, logicalId, stateResources) {
|
|
42764
|
-
if (resourceType !== "AWS::IAM::Policy") return
|
|
43230
|
+
if (resourceType !== "AWS::IAM::Policy" && !isInlinePolicyPrincipalType(resourceType)) return;
|
|
42765
43231
|
const args = {
|
|
42766
43232
|
selfLogicalId: logicalId,
|
|
42767
43233
|
writers: this.inlinePolicyWriters,
|
|
@@ -42908,5 +43374,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
|
|
|
42908
43374
|
DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
|
|
42909
43375
|
|
|
42910
43376
|
//#endregion
|
|
42911
|
-
export { getPriorAttempts as $, coerceCfnBoolean as $a, processStackMessages as $c, malformedScrubResourceEntriesRefusalMessage as $i, reserveStackCreateToken as $n, inheritNestedStackParameterAssociations as $o, envCredentialsAreAssumedRole as $r, parseBootstrapMarker as $s, orphanDeleteNeedsIdentity as $t, noEchoExactEchoLeavesOf as A, repairMalformedResourcePropertiesForReadOnly as Aa, resolveApp as Ac, displayLogicalId as Ai, maskEventTextWithBoundBags as An, valueAtCoordinate as Ao, markWaitAbandoned as Ar, hasReadableExportSet as As, isHandledOrphan as At, beginDeleteWait as B, NO_CC_HANDLERS_REASON as Ba, CFN_TEMPLATE_BODY_LIMIT as Bc, malformedLocalResourceEntriesWarning as Bi, ccRoutedFinalSnapshotError as Bn, shareLogOnlyValues as Bo, poisonRenderedSpellingsCollidingIn as Br, isSensitiveAttributeName as Bs, withStackRecords as Bt, recordRetainedForReadoption as C, refuseMalformedResourcesForDestroy as Ca, AssetManifestLoader as Cc, JSON_LISTING_HOLE_VALUE as Ci, collectPublishedOutputNames as Cn, maskedLeafCoordinatesOf as Co, unchangedBehindSecretReference as Cr, crossPrefixDeniedWarning as Cs, revertedNestedRowIds as Ct, withResourceDeadline as D, repairMalformedOrphansForReadOnly as Da, getDefaultStateBucketName as Dc, UNREADABLE_RESOURCES_MAP_ROW as Di, DEFAULT_RESOURCE_WARN_AFTER_MS as Dn, passedNoEchoParametersOf as Do, deleteSkipReason as Dr, acceptedCreateOnlyDropsOf as Ds, withNestedStackContext as Dt, serviceTokenBlockingReason as E, repairMalformedOrphanRecordsForReadOnly as Ea, synthesisStatusMessage as Ec, UNREADABLE_ORPHANS_CONTAINER_ROW as Ei, DEFAULT_RESOURCE_TIMEOUT_MS as En, noEchoOutputsComparison as Eo, deleteLeftInPlace as Er, splitImportedOps as Es, getCurrentNestedStackContext as Et, isProtectionValueActive as F, withheldAccountClause as Fa, resolveStateBucketWithDefaultAndSource as Fc, isReadableResourceEntry as Fi, storedSecretNameNeedles as Fn, literalSplitDelimitersOf as Fo, reDisableInstanceApiTermination as Fr, isReadableBag as Fs, replayFailedOperations as Ft, DELETE_INDEX_WAIT_PROCEED_NOTE as G, isStatefulRecreateTargetForReplace as Ga, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Gc, malformedOrphansRefusalMessage as Gi, unsupportedFinalSnapshotError as Gn, markSameGenerationBag as Go, assertFlagRoleArn as Gr, loadPublishableAssetManifest as Gs, isReplacementOrphan as Gt, deleteBudgetKey as H, findReplacedReadersOfRecreateTargets as Ha, MIGRATE_TMP_PREFIX as Hc, malformedOrphanRecordsRefusalMessage as Hi, effectiveDeletionPolicy as Hn, errorCauseChain as Ho, producerRegionsFromState as Hr, WorkGraph as Hs, recordAfterRollbackUpdate as Ht, perType as I, findActionableSilentDrops as Ia, resolveUseCdkBootstrapAssets as Ic, malformedDriftResourcePropertiesWarning as Ii, extractDeploymentEventError as In, logOnlyValueCount as Io, reEnableInstanceApiTermination as Ir, orphansAfterRollback as Is, replayRollback as It, waitForIndexesSettled as J, WARM_THROUGHPUT_MEMBERS as Ja, PARTITION_TABLE as Jc, malformedOutputsWarning as Ji, findDestructiveChanges as Jn, DYNAMIC_REFERENCE_TOKEN_SCAN as Jo, isIamRoleArn as Jr, BOOTSTRAP_MARKER_PREFIX as Js, recheckFailedPlan as Jt, INDEX_SETTLE_POLL_INTERVAL_MS as K, isStatefulRecreateTargetSync as Ka, decodeListingKey as Kc, malformedOrphansWarning as Ki, maskingRetryLogger as Kn, redactSecretsForState as Ko, assertSendableRoleArn as Kr, rewriteTemplateAssetReferences as Ks, planFailedOps as Kt, readProtection as L, findSilentDropProperties as La, stateBucketExistenceConfirmed as Lc, malformedExportNamesWarning as Li, ATOMIC_FINAL_SNAPSHOT_TYPES as Ln, printingCorpusOf as Lo, DiffCalculator as Lr, orphansCarriedFrom as Ls, awaitInFlightSibling as Lt, recordedProtectionEvidence as M, unpreviewableOrphanRecords as Ma, resolveCaptureObservedState as Mc, hasReadableOutputs as Mi, secretNamePrintingBag as Mn, carryLogOnlyValues as Mo, ec2InstanceProtectionSite as Mr, hasUnverifiableParameterRefusal as Ms, loadJournaledOrphans as Mt, recordedProtectionNote as N, unreadableOrphanRecords as Na, resolveSkipPrefix as Nc, hasReadableResources as Ni, secretNamedRecordNeedles as Nn, createUnionSecretMasker as No, isTerminationProtectionPropagationError as Nr, importableOutputKeys as Ns, makeForeignHolderScan as Nt, noEchoAttributeNamesOf as O, repairMalformedOutputsForReadOnly as Oa, getLegacyStateBucketName as Oc, accountArgs as Oi, completedReplayEntries as On, readbackPathFor as Oo, withIndeterminateGuard as Or, describeRegionValueKind as Os, deleteJournaledOrphans as Ot, PROTECTION_PROPERTY_BY_TYPE as P, unreadableResourceEntries as Pa, resolveStateBucketWithDefault as Pc, isReadableOrphanRecord as Pi, stateSecretNameNeedles as Pn, hasMaskableValues as Po, observeThenDisableInstanceApiTermination as Pr, importableOutputs as Ps, sameJournaledOrphans as Pt, isTruthyCfnBoolean as Q, toFiniteNumber as Qa, StageLoadError as Qc, malformedResourcesWarning as Qi, ledgerForStack as Qn, identityKeyFor as Qo, callerEnvCredentials as Qr, isCrossRegionRedirect as Qs, seedsDeleteFirstGuard as Qt, DynamoDBGlobalTableProvider as R, unwrittenCreateOnlyReplacement as Ra, warnDeprecatedNoPrefixCliFlag as Rc, malformedExportSourceWarning as Ri, PRE_DELETE_SNAPSHOT_TYPES as Rn, recordLogOnlyParameterValue as Ro, INTRINSIC_KEYS as Rr, shouldRetainResource as Rs, destroyStackRecordsView as Rt, keptForReadoption as S, refuseMalformedResourcesForDeploy as Sa, stripControlChars as Sc, passedParameterClassesOf as Si, collectDeclaredOutputNames as Sn, maskWholeValue as So, slowCcOperationTimeoutMs as Sr, applyCrossPrefixScan as Ss, revertNestedChildFromJournal as St, findServiceTokenRefusals as T, refuseMalformedState as Ta, Synthesizer as Tc, STATE_RESOURCES_MALFORMED as Ti, bindingSkippedOutputs as Tn, noEchoLeavesOf as To, deleteIndeterminateGuards as Tr, isNotImplemented as Ts, collectNestedChildUnaddressed as Tt, resolveDynamoDbDeleteBudgetClock as U, shownType as Ua, findLargeInlineResources as Uc, malformedOrphanRecordsWarning as Ui, isFinalSnapshotError as Un, maskSecretsInError as Uo, regionLessSecretName as Ur, buildAssetRedirectMap as Us, demoteSupersededOrphans as Ut, compensateRemovedDeletionProtection as V, hasNoCloudControlHandlers as Va, CFN_TEMPLATE_URL_LIMIT as Vc, malformedLocalResourcesWarning as Vi, createPreDeleteFinalSnapshot as Vn, createSecretMasker as Vo, classifyReplaySecretRegion as Vr, stringifyValue as Vs, removeProtectionTypeList as Vt, resolveDynamoDbDeleteBudgetMs as W, MULTI_REGION_RECREATE_BLOCKED_TYPES as Wa, uploadCfnTemplate as Wc, malformedOrphanRowsKeptWarning as Wi, refusesFinalSnapshot as Wn, maskSecretsInText as Wo, applyRoleArnIfSet as Wr, createAssetRedirectResolver as Ws, isJournaledOrphan as Wt, S3_AUTO_DELETE_OBJECTS_TAG as X, isWarmThroughputDecrease as Xa, derivePartitionAndUrlSuffix as Xc, malformedResourceEntriesWarning as Xi, RollbackInlinePolicyWriters as Xn, isUncertifiedBaselineMaskPosition as Xo, AWS_CREDENTIAL_ENV_KEYS as Xr, ensureAssetStorage as Xs, replacementNeverSwapped as Xt, ECR_AUTO_DELETE_IMAGES_TAG as Y, coerceWarmThroughput as Ya, canonicalizeRegion as Yc, malformedRenderedContainersWarning as Yi, formatDestructiveChange as Yn, dynamicReferenceTokens as Yo, sendableAssumeRoleCommand as Yr, assertAssetBucketRegion as Ys, recordUnderIdIsNotOwn as Yt, hasCdkAutoDeleteTag as Z, toCfnInteger as Za, AssemblyReader as Zc, malformedResourcePropertiesWarning as Zi, earliestDefined as Zn, pathCrossesDottedKey as Zo, applyCallerIdentityCredentials as Zr, getBootstrapMarkerKey as Zs, resolveReplacementOldType as Zt, makeCanonicalizePropertiesFn as _, refuseMalformedResourceEntriesForOrphan as _a, redactedDockerCause as _c, isStalePlaceholderArnAttribute as _i, carriedExportAliasExposure as _n, TemplateParser as _o, readsNoEchoDeleteValues as _r, isLockInfoExpired as _s, displacedPhysicalIdShown as _t, findNestedTemplateTreeDefect as a, refuseMalformedOrphanRecordsForDestroy as aa, resolveDockerContextDirectory as ac, s3BucketWebsiteUrl as ai, absoluteAssemblyPathEscape as al, redactedDeleteAddressFields as an, replayWarn as ao, readTagList as ar, recordMaskOnlyValuesIn as as, gray as at, lookupEachName as b, refuseMalformedResourcePropertiesForExport as ba, warnFinchArgvExposure as bc, withSharedDrainBudget as bi, isWholeDynamicReferenceValue as bn, maskAtCoordinates as bo, withPrintingSecrets as br, CrossPrefixReadError as bs, nestedChildStackName as bt, renderNestedTemplateTreeDefect as c, refuseMalformedOrphansForOrphan as ca, describeDockerFailure as cc, parameterTypeMayLoseSecretIdentity as ci, renderAssemblyPathEscape as cl, updatePartialReason as cn, requireConfigString as co, tagPlanWarning as cr, recordProvenPublicExpression as cs, yellow as ct, conditionInputsFrom as d, refuseMalformedResourceAttributesForOrphan as da, formatDockerLoginError as dc, carriesDynamicReference as di, resolveBucketRegion as dl, WITHHELD_NAME_DISPLAY as dn, describeTypeWithThrottleRetry as do, CC_BROKEN_REASON as dr, STATE_SOURCED_CROSS_GENERATION_RULES as ds, reachableDivergentParameters as dt, malformedStateRefusalMessage as ea, readBootstrapMarkerBody as ec, isSettledInstanceState as ei, defineOwnKey as el, findNestedStackTypeChanges as en, coerceCfnInteger as eo, withCreateTokenLedger as er, recordNestedStackParameterExpressions as es, markRefusedBeforeApplying as et, parentSuppliedValues as f, refuseMalformedResourceEntries as fa, getDockerCmd as fc, carriesFetchableDynamicReference as fi, displayTextOrWithheld as fn, withRetry as fo, ProviderRegistry as fr, STATE_SOURCED_READBACK_RULES as fs, resourcesNamingDeclaredParameter as ft, mergeNoChangeOutputs as g, refuseMalformedResourceEntriesForImportSave as ga, redactDockerArgvValues as gc, cfnRefValueFromPhysicalId as gi, secretSafeKeyDisplay as gn, DagBuilder as go, TemplateNoEchoReresolver as gr, LockManager as gs, displacedOpClause as gt, keptWholeReasonText as h, refuseMalformedResourceEntriesForImport as ha, partitionSensitiveEnv as hc, AWS_NO_VALUE as hi, secretBearingStateKeyWarning as hn, sameLambdaFunctionAddress as ho, wouldReturnToSdkProvider as hr, isSingleDynamicReferenceToken as hs, NESTED_PENDING_PARENT_REASON as ht, childTemplateLoader as i, refuseMalformedOrphanRecords as ia, buildDockerImage as ic, s3BucketRegionalDomainName as ii, ownValue as il, isRedactedRecordedValue as in, readConfigString as io, planTagDiff as ir, recordMaskOnlyValue as is, cyan as it, noEchoParameterNamesOf as j, repairMalformedResourcesForReadOnly as ja, resolveAutoAssetStorage as jc, hasReadableOrphans as ji, orphanRecordsPrintingBag as jn, liveMatchesUnresolvedTokenFrame as jo, disableInstanceApiTermination as jr, hasReasonlessBaselineRefusal as js, journaledOrphanLines as jt, noEchoComparisonForTemplate as k, repairMalformedResourceEntriesForReadOnly as ka, loadCdkJson as kc, deployRefusesOrphanRowsReason as ki, journaledOrphanPrintingBag as kn, readsNoEchoSource as ko, isWaitAbandonedError as kr, exportNamesCarriedFrom as ks, dropFailedHint as kt, templateIdentity as l, refuseMalformedOutputs as la, dockerSpawnEnvWithSensitive as lc, getAccountInfo as li, resolveAssemblyPath as ll, DeploymentEventsReader as ln, prefetchCreateOnlyPropertyPaths as lo, definedAttributes as lr, wholeStringLeavesOf as ls, computeParameterTaint as lt, isSecretBearingReferenceString as m, refuseMalformedResourceEntriesForDestroy as ma, isMalformedEnvKey as mc, keepsSecretReferenceToken as mi, secretBearing as mn, lambdaFunctionNameForMask as mo, isCustomResource as mr, WHOLE_DYNAMIC_REFERENCE_PATTERN as ms, planOrphanAdoption as mt, IMPLICIT_DELETE_DEPENDENCIES as n, refuseDivergentRecordRegionForDestroy as na, validateContainerRepoName as nc, s3BucketDomainName as ni, hasPlainPrototype$1 as nl, inheritProducerRegions as nn, configIntegerRefusal as no, DBPROXY_TAGS_WHAT as nr, carriesSecretMask as ns, createReadOnlyAttributeHealerFactory as nt, isAbsoluteAssetPath as o, refuseMalformedOrphans as oa, describeDockerCapturedOutput as oc, coerceParameterTypedValue as oi, describeFileReadFailure as ol, redactedDeleteAddressSkip as on, requireConfigArray as oo, refuseMalformedDesiredTags as or, recordNoEchoAttributeValues as os, green as ot, readRecordedConditionVerdicts as p, refuseMalformedResourceEntriesForDeploy as pa, isDockerClientEnvKey as pc, isNamelessDynamicReferenceError as pi, exportAliasCollisionScrubWarning as pn, canonicalLambdaFunctionName as po, ccBrokenReason as pr, TEMPLATE_SOURCED_RULES as ps, makeSiblingClaimReader as pt, deleteTableWithIndexBusyRetry as q, renderStatefulReason as qa, expectedOwnerParam as qc, malformedOutputsRefusalMessage as qi, constructPathOf as qn, scrubResourceRecord as qo, explicitRoleArnOrThrow as qr, AssetModeResolver as qs, planRollback as qt, computeImplicitDeleteEdges as r, refuseMalformedNestedChildOutputs as ra, buildDenyExternalAccessPolicy as rc, s3BucketDualStackDomainName as ri, nullPrototypeRecord as rl, REDACTED_DELETE_ADDRESS_SKIP_REASON as rn, configStringRefusal as ro, DBPROXY_TAG_OPTIONS as rr, provenPublicValue as rs, bold as rt, listNestedTemplateRows as s, refuseMalformedOrphansForDestroy as sa, describeDockerExecFailure as sc, isUnboundTemplateParameter as si, displayAssemblyPath as sl, updatePartialMessage as sn, requireConfigObject as so, tagMapAsList as sr, recordNoEchoParameterFreshValue as ss, red as st, DeployEngine as t, previewableOrphanRecords as ta, validateAssetBucketName as tc, s3BucketArn as ti, hasOwnKey as tl, getCurrentProducerRegions as tn, configBooleanRefusal as to, acquireIdempotencyToken as tr, recoverMaskedOutput as ts, formatResourceLine as tt, conditionFingerprint as u, refuseMalformedOutputsForDestroy as ua, finchSecretArgvRefusal as uc, isImpossibleEmptyStoredAttribute as ui, clearBucketRegionCache as ul, DeploymentEventsStore as un, templateResourceTypes as uo, stringifyIfAssigned as ur, STATE_SOURCED_BASELINE_RULES as us, namesAnyDeclaredParameter as ut, chunks as v, refuseMalformedResourcePropertiesForDestroy as va, runDockerForeground as vc, refStateLookupFromResource as vi, exportNameNoEchoParameters as vn, canonicalCoordinates as vo, isCustomResourceType as vr, S3StateBackend as vs, dropSettledNestedJournals as vt, deferredServiceTokenWarning as w, refuseMalformedResourcesForExport as wa, getDockerImageBySourceHash as wc, STATE_REGION_DIVERGED as wi, isExportAliasCollision as wn, noEchoCoordinatesOf as wo, UNSPECIFIED_SKIP_REASON as wr, isAccessDenied as ws, withNestedRevertRun as wt, withApiLimit as x, refuseMalformedResourcePropertiesForOrphan as xa, escapeRegExp$3 as xc, parameterInputsFor as xi, noEchoParameterValueSeed as xn, maskReadbackAtCoordinates as xo, CloudControlProvider as xr, CrossPrefixScanCache as xs, recordDisplacedSkips as xt, isAccessDeniedError as y, refuseMalformedResourcePropertiesForDrift as ya, runDockerStreaming as yc, parseWebACLArn as yi, exportNameSecretExposure as yn, isMarkedCoordinate as yo, getCurrentResourceSecrets as yr, rebuildClientForBucketRegion as ys, getNestedRevertRun as yt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as z, withoutSilentDropProperties as za, ssmResolvedValueType as zc, malformedLocalOutputsWarning as zi, buildFinalSnapshotIdentifier as zn, recordLogOnlyValue as zo, IntrinsicFunctionResolver as zr, AssetPublisher as zs, getStackRecords as zt };
|
|
42912
|
-
//# sourceMappingURL=deploy-engine-
|
|
43377
|
+
export { getPriorAttempts as $, isWarmThroughputDecrease as $a, derivePartitionAndUrlSuffix as $c, malformedResourceEntriesWarning as $i, reserveStackCreateToken as $n, isUncertifiedBaselineMaskPosition as $o, AWS_CREDENTIAL_ENV_KEYS as $r, ensureAssetStorage as $s, orphanDeleteNeedsIdentity as $t, noEchoExactEchoLeavesOf as A, repairMalformedOrphansForReadOnly as Aa, getDefaultStateBucketName as Ac, UNREADABLE_RESOURCES_MAP_ROW as Ai, maskEventTextWithBoundBags as An, passedNoEchoParametersOf as Ao, deleteSkipReason as Ar, acceptedCreateOnlyDropsOf as As, isHandledOrphan as At, beginDeleteWait as B, findSilentDropProperties as Ba, stateBucketExistenceConfirmed as Bc, malformedExportNamesWarning as Bi, ccRoutedFinalSnapshotError as Bn, printingCorpusOf as Bo, DiffCalculator as Br, orphansCarriedFrom as Bs, withStackRecords as Bt, recordRetainedForReadoption as C, refuseMalformedResourcePropertiesForExport as Ca, warnFinchArgvExposure as Cc, withSharedDrainBudget as Ci, collectPublishedOutputNames as Cn, maskAtCoordinates as Co, customResourceResponseExpirationWarning as Cr, CrossPrefixReadError as Cs, revertedNestedRowIds as Ct, withResourceDeadline as D, refuseMalformedResourcesForExport as Da, getDockerImageBySourceHash as Dc, STATE_REGION_DIVERGED as Di, DEFAULT_RESOURCE_WARN_AFTER_MS as Dn, noEchoCoordinatesOf as Do, UNSPECIFIED_SKIP_REASON as Dr, isAccessDenied$1 as Ds, withNestedStackContext as Dt, serviceTokenBlockingReason as E, refuseMalformedResourcesForDestroy as Ea, AssetManifestLoader as Ec, JSON_LISTING_HOLE_VALUE as Ei, DEFAULT_RESOURCE_TIMEOUT_MS as En, maskedLeafCoordinatesOf as Eo, unchangedBehindSecretReference as Er, crossPrefixDeniedWarning as Es, getCurrentNestedStackContext as Et, isProtectionValueActive as F, unpreviewableOrphanRecords as Fa, resolveCaptureObservedState as Fc, hasReadableOutputs as Fi, storedSecretNameNeedles as Fn, carryLogOnlyValues as Fo, ec2InstanceProtectionSite as Fr, hasUnverifiableParameterRefusal as Fs, replayFailedOperations as Ft, DELETE_INDEX_WAIT_PROCEED_NOTE as G, findReplacedReadersOfRecreateTargets as Ga, MIGRATE_TMP_PREFIX as Gc, malformedOrphanRecordsRefusalMessage as Gi, unsupportedFinalSnapshotError as Gn, errorCauseChain as Go, producerRegionsFromState as Gr, WorkGraph as Gs, isReplacementOrphan as Gt, deleteBudgetKey as H, withoutSilentDropProperties as Ha, ssmResolvedValueType as Hc, malformedLocalOutputsWarning as Hi, effectiveDeletionPolicy as Hn, recordLogOnlyValue as Ho, IntrinsicFunctionResolver as Hr, AssetPublisher as Hs, recordAfterRollbackUpdate as Ht, perType as I, unreadableOrphanRecords as Ia, resolveSkipPrefix as Ic, hasReadableResources as Ii, extractDeploymentEventError as In, createUnionSecretMasker as Io, isTerminationProtectionPropagationError as Ir, importableOutputKeys as Is, replayRollback as It, waitForIndexesSettled as J, isStatefulRecreateTargetForReplace as Ja, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Jc, malformedOrphansRefusalMessage as Ji, findDestructiveChanges as Jn, markSameGenerationBag as Jo, assertFlagRoleArn as Jr, loadPublishableAssetManifest as Js, recheckFailedPlan as Jt, INDEX_SETTLE_POLL_INTERVAL_MS as K, shownType as Ka, findLargeInlineResources as Kc, malformedOrphanRecordsWarning as Ki, maskingRetryLogger as Kn, maskSecretsInError as Ko, regionLessSecretName as Kr, buildAssetRedirectMap as Ks, planFailedOps as Kt, readProtection as L, unreadableResourceEntries as La, resolveStateBucketWithDefault as Lc, isReadableOrphanRecord as Li, ATOMIC_FINAL_SNAPSHOT_TYPES as Ln, hasMaskableValues as Lo, observeThenDisableInstanceApiTermination as Lr, importableOutputs as Ls, awaitInFlightSibling as Lt, recordedProtectionEvidence as M, repairMalformedResourceEntriesForReadOnly as Ma, loadCdkJson as Mc, deployRefusesOrphanRowsReason as Mi, secretNamePrintingBag as Mn, readsNoEchoSource as Mo, isWaitAbandonedError as Mr, exportNamesCarriedFrom as Ms, loadJournaledOrphans as Mt, recordedProtectionNote as N, repairMalformedResourcePropertiesForReadOnly as Na, resolveApp as Nc, displayLogicalId as Ni, secretNamedRecordNeedles as Nn, valueAtCoordinate as No, markWaitAbandoned as Nr, hasReadableExportSet as Ns, makeForeignHolderScan as Nt, noEchoAttributeNamesOf as O, refuseMalformedState as Oa, Synthesizer as Oc, STATE_RESOURCES_MALFORMED as Oi, completedReplayEntries as On, noEchoLeavesOf as Oo, deleteIndeterminateGuards as Or, isNotImplemented as Os, deleteJournaledOrphans as Ot, PROTECTION_PROPERTY_BY_TYPE as P, repairMalformedResourcesForReadOnly as Pa, resolveAutoAssetStorage as Pc, hasReadableOrphans as Pi, stateSecretNameNeedles as Pn, liveMatchesUnresolvedTokenFrame as Po, disableInstanceApiTermination as Pr, hasReasonlessBaselineRefusal as Ps, sameJournaledOrphans as Pt, isTruthyCfnBoolean as Q, coerceWarmThroughput as Qa, canonicalizeRegion as Qc, malformedRenderedContainersWarning as Qi, ledgerForStack as Qn, dynamicReferenceTokens as Qo, sendableAssumeRoleCommand as Qr, assertAssetBucketRegion as Qs, seedsDeleteFirstGuard as Qt, DynamoDBGlobalTableProvider as R, withheldAccountClause as Ra, resolveStateBucketWithDefaultAndSource as Rc, isReadableResourceEntry as Ri, PRE_DELETE_SNAPSHOT_TYPES as Rn, literalSplitDelimitersOf as Ro, reDisableInstanceApiTermination as Rr, isReadableBag as Rs, destroyStackRecordsView as Rt, keptForReadoption as S, refuseMalformedResourcePropertiesForDrift as Sa, runDockerStreaming as Sc, parseWebACLArn as Si, collectDeclaredOutputNames as Sn, isMarkedCoordinate as So, applyCustomResourceResponseExpiration as Sr, rebuildClientForBucketRegion as Ss, revertNestedChildFromJournal as St, findServiceTokenRefusals as T, refuseMalformedResourcesForDeploy as Ta, stripControlChars as Tc, passedParameterClassesOf as Ti, bindingSkippedOutputs as Tn, maskWholeValue as To, slowCcOperationTimeoutMs as Tr, applyCrossPrefixScan as Ts, collectNestedChildUnaddressed as Tt, resolveDynamoDbDeleteBudgetClock as U, NO_CC_HANDLERS_REASON as Ua, CFN_TEMPLATE_BODY_LIMIT as Uc, malformedLocalResourceEntriesWarning as Ui, isFinalSnapshotError as Un, shareLogOnlyValues as Uo, poisonRenderedSpellingsCollidingIn as Ur, isSensitiveAttributeName as Us, demoteSupersededOrphans as Ut, compensateRemovedDeletionProtection as V, unwrittenCreateOnlyReplacement as Va, warnDeprecatedNoPrefixCliFlag as Vc, malformedExportSourceWarning as Vi, createPreDeleteFinalSnapshot as Vn, recordLogOnlyParameterValue as Vo, INTRINSIC_KEYS as Vr, shouldRetainResource as Vs, removeProtectionTypeList as Vt, resolveDynamoDbDeleteBudgetMs as W, hasNoCloudControlHandlers as Wa, CFN_TEMPLATE_URL_LIMIT as Wc, malformedLocalResourcesWarning as Wi, refusesFinalSnapshot as Wn, createSecretMasker as Wo, classifyReplaySecretRegion as Wr, stringifyValue as Ws, isJournaledOrphan as Wt, S3_AUTO_DELETE_OBJECTS_TAG as X, renderStatefulReason as Xa, expectedOwnerParam as Xc, malformedOutputsRefusalMessage as Xi, RollbackInlinePolicyWriters as Xn, scrubResourceRecord as Xo, explicitRoleArnOrThrow as Xr, AssetModeResolver as Xs, replacementNeverSwapped as Xt, ECR_AUTO_DELETE_IMAGES_TAG as Y, isStatefulRecreateTargetSync as Ya, decodeListingKey as Yc, malformedOrphansWarning as Yi, formatDestructiveChange as Yn, redactSecretsForState as Yo, assertSendableRoleArn as Yr, rewriteTemplateAssetReferences as Ys, recordUnderIdIsNotOwn as Yt, hasCdkAutoDeleteTag as Z, WARM_THROUGHPUT_MEMBERS as Za, PARTITION_TABLE as Zc, malformedOutputsWarning as Zi, earliestDefined as Zn, DYNAMIC_REFERENCE_TOKEN_SCAN as Zo, isIamRoleArn as Zr, BOOTSTRAP_MARKER_PREFIX as Zs, resolveReplacementOldType as Zt, makeCanonicalizePropertiesFn as _, refuseMalformedResourceEntriesForDestroy as _a, isMalformedEnvKey as _c, keepsSecretReferenceToken as _i, carriedExportAliasExposure as _n, lambdaFunctionNameForMask as _o, readsNoEchoDeleteValues as _r, WHOLE_DYNAMIC_REFERENCE_PATTERN as _s, displacedPhysicalIdShown as _t, findNestedTemplateTreeDefect as a, refuseDivergentRecordRegionForDestroy as aa, validateContainerRepoName as ac, s3BucketDomainName as ai, hasPlainPrototype$1 as al, redactedDeleteAddressFields as an, configIntegerRefusal as ao, readTagList as ar, carriesSecretMask as as, gray as at, lookupEachName as b, refuseMalformedResourceEntriesForOrphan as ba, redactedDockerCause as bc, isStalePlaceholderArnAttribute as bi, isWholeDynamicReferenceValue as bn, TemplateParser as bo, withPrintingSecrets as br, isLockInfoExpired as bs, nestedChildStackName as bt, renderNestedTemplateTreeDefect as c, refuseMalformedOrphanRecordsForDestroy as ca, resolveDockerContextDirectory as cc, s3BucketWebsiteUrl as ci, absoluteAssemblyPathEscape as cl, updatePartialReason as cn, replayWarn as co, tagPlanWarning as cr, recordMaskOnlyValuesIn as cs, yellow as ct, conditionInputsFrom as d, refuseMalformedOrphansForOrphan as da, describeDockerFailure as dc, parameterTypeMayLoseSecretIdentity as di, renderAssemblyPathEscape as dl, WITHHELD_NAME_DISPLAY as dn, requireConfigString as do, CC_BROKEN_REASON as dr, recordProvenPublicExpression as ds, reachableDivergentParameters as dt, malformedResourcePropertiesWarning as ea, getBootstrapMarkerKey as ec, applyCallerIdentityCredentials as ei, AssemblyReader as el, findNestedStackTypeChanges as en, toCfnInteger as eo, withCreateTokenLedger as er, pathCrossesDottedKey as es, markRefusedBeforeApplying as et, parentSuppliedValues as f, refuseMalformedOutputs as fa, dockerSpawnEnvWithSensitive as fc, getAccountInfo as fi, resolveAssemblyPath as fl, displayTextOrWithheld as fn, prefetchCreateOnlyPropertyPaths as fo, ProviderRegistry as fr, wholeStringLeavesOf as fs, resourcesNamingDeclaredParameter as ft, mergeNoChangeOutputs as g, refuseMalformedResourceEntriesForDeploy as ga, isDockerClientEnvKey as gc, isNamelessDynamicReferenceError as gi, secretSafeKeyDisplay as gn, canonicalLambdaFunctionName as go, TemplateNoEchoReresolver as gr, TEMPLATE_SOURCED_RULES as gs, displacedOpClause as gt, keptWholeReasonText as h, refuseMalformedResourceEntries as ha, getDockerCmd as hc, carriesFetchableDynamicReference as hi, secretBearingStateKeyWarning as hn, withRetry as ho, wouldReturnToSdkProvider as hr, STATE_SOURCED_READBACK_RULES as hs, NESTED_PENDING_PARENT_REASON as ht, childTemplateLoader as i, previewableOrphanRecords as ia, validateAssetBucketName as ic, s3BucketArn as ii, hasOwnKey as il, isRedactedRecordedValue as in, configBooleanRefusal as io, planTagDiff as ir, recoverMaskedOutput as is, cyan as it, noEchoParameterNamesOf as j, repairMalformedOutputsForReadOnly as ja, getLegacyStateBucketName as jc, accountArgs as ji, orphanRecordsPrintingBag as jn, readbackPathFor as jo, withIndeterminateGuard as jr, describeRegionValueKind as js, journaledOrphanLines as jt, noEchoComparisonForTemplate as k, repairMalformedOrphanRecordsForReadOnly as ka, synthesisStatusMessage as kc, UNREADABLE_ORPHANS_CONTAINER_ROW as ki, journaledOrphanPrintingBag as kn, noEchoOutputsComparison as ko, deleteLeftInPlace as kr, splitImportedOps as ks, dropFailedHint as kt, templateIdentity as l, refuseMalformedOrphans as la, describeDockerCapturedOutput as lc, coerceParameterTypedValue as li, describeFileReadFailure as ll, DeploymentEventsReader as ln, requireConfigArray as lo, definedAttributes as lr, recordNoEchoAttributeValues as ls, computeParameterTaint as lt, isSecretBearingReferenceString as m, refuseMalformedResourceAttributesForOrphan as ma, formatDockerLoginError as mc, carriesDynamicReference as mi, resolveBucketRegion as ml, secretBearing as mn, describeTypeWithThrottleRetry as mo, isCustomResource as mr, STATE_SOURCED_CROSS_GENERATION_RULES as ms, planOrphanAdoption as mt, IMPLICIT_DELETE_DEPENDENCIES as n, malformedScrubResourceEntriesRefusalMessage as na, parseBootstrapMarker as nc, envCredentialsAreAssumedRole as ni, processStackMessages as nl, inheritProducerRegions as nn, coerceCfnBoolean as no, DBPROXY_TAGS_WHAT as nr, inheritNestedStackParameterAssociations as ns, createReadOnlyAttributeHealerFactory as nt, isAbsoluteAssetPath as o, refuseMalformedNestedChildOutputs as oa, buildDenyExternalAccessPolicy as oc, s3BucketDualStackDomainName as oi, nullPrototypeRecord as ol, redactedDeleteAddressSkip as on, configStringRefusal as oo, refuseMalformedDesiredTags as or, provenPublicValue as os, green as ot, readRecordedConditionVerdicts as p, refuseMalformedOutputsForDestroy as pa, finchSecretArgvRefusal as pc, isImpossibleEmptyStoredAttribute as pi, clearBucketRegionCache as pl, exportAliasCollisionScrubWarning as pn, templateResourceTypes as po, ccBrokenReason as pr, STATE_SOURCED_BASELINE_RULES as ps, makeSiblingClaimReader as pt, deleteTableWithIndexBusyRetry as q, MULTI_REGION_RECREATE_BLOCKED_TYPES as qa, uploadCfnTemplate as qc, malformedOrphanRowsKeptWarning as qi, constructPathOf as qn, maskSecretsInText as qo, applyRoleArnIfSet as qr, createAssetRedirectResolver as qs, planRollback as qt, computeImplicitDeleteEdges as r, malformedStateRefusalMessage as ra, readBootstrapMarkerBody as rc, isSettledInstanceState as ri, defineOwnKey as rl, REDACTED_DELETE_ADDRESS_SKIP_REASON as rn, coerceCfnInteger as ro, DBPROXY_TAG_OPTIONS as rr, recordNestedStackParameterExpressions as rs, bold as rt, listNestedTemplateRows as s, refuseMalformedOrphanRecords as sa, buildDockerImage as sc, s3BucketRegionalDomainName as si, ownValue as sl, updatePartialMessage as sn, readConfigString as so, tagMapAsList as sr, recordMaskOnlyValue as ss, red as st, DeployEngine as t, malformedResourcesWarning as ta, isCrossRegionRedirect as tc, callerEnvCredentials as ti, StageLoadError as tl, getCurrentProducerRegions as tn, toFiniteNumber as to, acquireIdempotencyToken as tr, identityKeyFor as ts, formatResourceLine as tt, conditionFingerprint as u, refuseMalformedOrphansForDestroy as ua, describeDockerExecFailure as uc, isUnboundTemplateParameter as ui, displayAssemblyPath as ul, DeploymentEventsStore as un, requireConfigObject as uo, stringifyIfAssigned as ur, recordNoEchoParameterFreshValue as us, namesAnyDeclaredParameter as ut, chunks as v, refuseMalformedResourceEntriesForImport as va, partitionSensitiveEnv as vc, AWS_NO_VALUE as vi, exportNameNoEchoParameters as vn, sameLambdaFunctionAddress as vo, isCustomResourceType as vr, isSingleDynamicReferenceToken as vs, dropSettledNestedJournals as vt, deferredServiceTokenWarning as w, refuseMalformedResourcePropertiesForOrphan as wa, escapeRegExp$3 as wc, parameterInputsFor as wi, isExportAliasCollision as wn, maskReadbackAtCoordinates as wo, CloudControlProvider as wr, CrossPrefixScanCache as ws, withNestedRevertRun as wt, withApiLimit as x, refuseMalformedResourcePropertiesForDestroy as xa, runDockerForeground as xc, refStateLookupFromResource as xi, noEchoParameterValueSeed as xn, canonicalCoordinates as xo, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as xr, S3StateBackend as xs, recordDisplacedSkips as xt, isAccessDeniedError as y, refuseMalformedResourceEntriesForImportSave as ya, redactDockerArgvValues as yc, cfnRefValueFromPhysicalId as yi, exportNameSecretExposure as yn, DagBuilder as yo, getCurrentResourceSecrets as yr, LockManager as ys, getNestedRevertRun as yt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as z, findActionableSilentDrops as za, resolveUseCdkBootstrapAssets as zc, malformedDriftResourcePropertiesWarning as zi, buildFinalSnapshotIdentifier as zn, logOnlyValueCount as zo, reEnableInstanceApiTermination as zr, orphansAfterRollback as zs, getStackRecords as zt };
|
|
43378
|
+
//# sourceMappingURL=deploy-engine-dvf1UDuo.js.map
|