@go-to-k/cdkd 0.302.0 → 0.302.1
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-BRr_hsky.js → asg-provider-BpRcm_UB.js} +4 -4
- package/dist/{asg-provider-BRr_hsky.js.map → asg-provider-BpRcm_UB.js.map} +1 -1
- package/dist/{aws-failure-text-BDZdavf4.js → aws-failure-text-e_ddrDDo.js} +5 -2
- package/dist/{aws-failure-text-BDZdavf4.js.map → aws-failure-text-e_ddrDDo.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-DU0BoQqo.js → deploy-engine-CYVt2NQR.js} +500 -437
- package/dist/deploy-engine-CYVt2NQR.js.map +1 -0
- package/dist/{iam-policy-targets-Dnk6FCsr.js → iam-policy-targets-CmHNH1DY.js} +17 -4
- package/dist/iam-policy-targets-CmHNH1DY.js.map +1 -0
- package/dist/{iam-role-provider-WGsb9RxZ.js → iam-role-provider-R1GC6KcT.js} +4 -4
- package/dist/{iam-role-provider-WGsb9RxZ.js.map → iam-role-provider-R1GC6KcT.js.map} +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/{neptune-provider-WE1O3kXY.js → neptune-provider-DzTl6-74.js} +4 -4
- package/dist/{neptune-provider-WE1O3kXY.js.map → neptune-provider-DzTl6-74.js.map} +1 -1
- package/dist/{program-BVLiidXb.js → program-CvRs5pV_.js} +6 -6
- package/dist/{program-BVLiidXb.js.map → program-CvRs5pV_.js.map} +1 -1
- package/dist/{provider-classes-CXSiWJVn.js → provider-classes-B2_u4Fg0.js} +181 -70
- package/dist/provider-classes-B2_u4Fg0.js.map +1 -0
- package/dist/{rds-provider-6RgDTDCV.js → rds-provider-CmKbYAvr.js} +4 -4
- package/dist/{rds-provider-6RgDTDCV.js.map → rds-provider-CmKbYAvr.js.map} +1 -1
- package/dist/{version-C2XBsD-i.js → version-CaejipV3.js} +2 -2
- package/dist/{version-C2XBsD-i.js.map → version-CaejipV3.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-DU0BoQqo.js.map +0 -1
- package/dist/iam-policy-targets-Dnk6FCsr.js.map +0 -1
- package/dist/provider-classes-CXSiWJVn.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { r as getAwsClients, s as __exportAll } from "./aws-clients-B_CEQGE1.js";
|
|
2
|
-
import {
|
|
3
|
-
import { $ as protectedReplacementAdvice, $n as
|
|
2
|
+
import { A as isNameGeneration, B as SECRET_REF_MAX_CODE_POINTS, D as getCurrentStackInstanceId, E as getCurrentSkipPrefix, F as withSkipPrefix, G as displayAwsMessage, H as UNRENDERABLE, I as withStackScope, J as displayStackName, K as displayIdent, L as withStackScopeBeforeStateRead, N as stackInstanceNameSuffix, O as getCurrentStackName, P as withNameGeneration, Q as safeMsg, R as withoutGeneratedFallbackName, S as fallbackNamePropertyFor, T as generatedNameFor, U as asIsMessage, V as STACK_REF_MAX_CODE_POINTS, Y as isPasteableIdent, Z as plainIdentOr, a as safeStringify$1, c as isStdoutReservedForPayload, et as terminalSafe, f as currentLogLineMasker, j as looksLikeCdkdGeneratedName, m as getLiveRenderer, n as describeAwsFailure, p as installLogLineMaskerSource, q as displaySafe, s as getLogger, t as VERBOSE_POINTER, tt as truncateCodePoints, v as applyDefaultNameForFallback, w as generateResourceNameWithFallback, x as explicitNamePropertyFor, y as currentNameGeneration, z as SAFE_MSG_ALTERED_CHAR } from "./aws-failure-text-e_ddrDDo.js";
|
|
3
|
+
import { $ as protectedReplacementAdvice, $n as isReplayedNameCollisionFrom, $t as ambientCredentialConfig, A as isQuotableImportValue, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bn as plainOrDescribed, Bt as formatLockOperation, Ct as RETRY_AUXILIARY_OWNER, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as commandHole, Ft as UNREPRODUCIBLE_LOCK_CLAUSE, G as runDeleteAttempt, Gt as DEFAULT_STATE_PREFIX, H as observeThenDisableProtection, Hn as shellBoundedDisplay, Ht as recoveryCommandFlags, It as buildForceUnlockCommand, J as DELETION_PROTECTION_DOC_POINTER, Jn as hasReplayMayCollide, Kt as injectiveKey, L as ProtectionFlipRegistry, Ln as isInertUnquoted, M as quotedRemedyLogicalId, Mn as SHELL_ACTIVE, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as SHELL_ACTIVE_WHY, On as isSoftAbort, Ot as hasCreatedBeforeFailure, Pn as UNSHOWABLE_VALUE, Pt as replayMadeAnotherResource, Q as pasteableAwsCommand, Qn as isRecreateRetryableError, Qt as ambientClientDefaults, R as compensateProtectionFlip, Rn as pasteableCommand, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, Tn as SynthesisError, U as protectionFlipKey, Un as shellQuote, Ut as sanitizeRecoveryValue, Vn as quotedOrDescribed, Vt as formatLockOwner, Wn as withheldTargetClause, Wt as CUSTOM_RESOURCE_RESPONSE_PREFIX, Xn as isNameCollisionErrorFrom, Yt as producerRecordKey, Zn as isNameCooldownError, Zt as withPasteableAwsProfile, _r as isThrottlingError, _t as createMaskedLogSinks, at as startInterruptWatch, bn as ResourceTimeoutError, br as wrapMaskedAwsError, bt as maskDeep, cr as isAmbiguousCcHandlerErrorCode, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dn as IntrinsicResolutionRefusalError, dr as isIamPropagationError, en as clientDefaultsFor, f as removalWarning, fr as isRetryableTransientError, ft as logicalIdShown, gn as MalformedProducerRecordRefusalError, gr as isMarkedNonRetryable, gt as stateOrphanRecordRemedy, hn as MacroExpansionError, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CdkdError, ir as stripControlChars, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jt as markAuxiliaryFailure, kn as normalizeAwsError, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, ln as DeploymentNotApprovedError, lr as isAmbiguousOutcomeError, m as withoutInjectedRemovals, mn as LockError, mr as retryClassificationText, mt as resourceTypeShown, nn as AccountIdUnavailableError, nr as relayedNameCollision, on as CrossAccountSecretRefusalError, ot as ElapsedBudgetRegistry, pr as isTransientServerError, qn as isUpdateUnsupportedError, rn as AssetError, rr as escapeRegExp$3, sn as DependencyError, sr as formatRetryClassificationSignals, st as monotonicNowMs, tn as credentialFingerprint, tr as markReplayMayCollide, un as DynamicReferenceRegionAmbiguousError, ut as compositeIdSeparatorRefusal, vr as markNonRetryable, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wn as StateError, wt as carryCreatedBeforeFailure, xn as ResourceUpdateNotSupportedError, xt as maskerOrIdentity, yn as ProvisioningError, yr as markRedactedCause, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as physicalIdShownBesideCommand, zt as formatLockExpiry } from "./iam-policy-targets-CmHNH1DY.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-DBXBcg0J.js";
|
|
5
|
-
import { t as getCdkdVersion } from "./version-
|
|
5
|
+
import { t as getCdkdVersion } from "./version-CaejipV3.js";
|
|
6
6
|
import { createHash, randomUUID } from "node:crypto";
|
|
7
7
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
8
8
|
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketLifecycleConfigurationCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -4577,7 +4577,8 @@ var WorkGraph = class {
|
|
|
4577
4577
|
nodeId: node.id,
|
|
4578
4578
|
error
|
|
4579
4579
|
});
|
|
4580
|
-
this.logger.
|
|
4580
|
+
if (isSoftAbort(error)) this.logger.debug(safeMsg`Not approved: ${node.id}`);
|
|
4581
|
+
else this.logger.error(`Failed: ${node.id}: ${describeAwsFailure(error).detail}`);
|
|
4581
4582
|
}).finally(() => {
|
|
4582
4583
|
active[node.type]--;
|
|
4583
4584
|
dispatch();
|
|
@@ -4591,6 +4592,12 @@ var WorkGraph = class {
|
|
|
4591
4592
|
}
|
|
4592
4593
|
if (errors.length > 0) {
|
|
4593
4594
|
const skippedCount = [...this.nodes.values()].filter((n) => n.state === "skipped").length;
|
|
4595
|
+
if (errors.every((e) => isSoftAbort(e.error))) {
|
|
4596
|
+
const lines = errors.map((e) => e.error.message);
|
|
4597
|
+
if (skippedCount > 0) lines.push(`${skippedCount} node(s) depending on a declined stack were skipped.`);
|
|
4598
|
+
reject(errors.length === 1 && skippedCount === 0 ? errors[0].error : new DeploymentNotApprovedError(lines.join("\n")));
|
|
4599
|
+
return;
|
|
4600
|
+
}
|
|
4594
4601
|
const msg = errors.map((e) => ` - ${e.nodeId}: ${describeAwsFailure(e.error).detail}`).join("\n");
|
|
4595
4602
|
reject(/* @__PURE__ */ new Error(`${errors.length} node(s) failed${skippedCount > 0 ? `, ${skippedCount} skipped` : ""}:\n${msg}`));
|
|
4596
4603
|
return;
|
|
@@ -27421,7 +27428,7 @@ var CloudControlProvider = class {
|
|
|
27421
27428
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
27422
27429
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
27423
27430
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
27424
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
27431
|
+
const { ASGProvider } = await import("./asg-provider-BpRcm_UB.js");
|
|
27425
27432
|
const delegateRegion = ambientRegion();
|
|
27426
27433
|
let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
|
|
27427
27434
|
if (asgProvider === void 0) {
|
|
@@ -27527,7 +27534,7 @@ var CloudControlProvider = class {
|
|
|
27527
27534
|
const family = SDK_DELETE_FAMILIES.get(resourceType);
|
|
27528
27535
|
const cached = this.sdkDeleteDelegates.get(family);
|
|
27529
27536
|
if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
|
|
27530
|
-
const provider = family === "rds" ? new (await (import("./rds-provider-
|
|
27537
|
+
const provider = family === "rds" ? new (await (import("./rds-provider-CmKbYAvr.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-DzTl6-74.js"))).NeptuneProvider({ region: ccRegion });
|
|
27531
27538
|
this.sdkDeleteDelegates.set(family, {
|
|
27532
27539
|
region: ccRegion,
|
|
27533
27540
|
provider
|
|
@@ -32223,6 +32230,443 @@ function isRefusedByName(error) {
|
|
|
32223
32230
|
return false;
|
|
32224
32231
|
}
|
|
32225
32232
|
|
|
32233
|
+
//#endregion
|
|
32234
|
+
//#region src/types/deployment-events.ts
|
|
32235
|
+
function extractDeploymentEventError(err) {
|
|
32236
|
+
if (!(err instanceof Error)) return {
|
|
32237
|
+
name: "UnknownError",
|
|
32238
|
+
message: safeStringify$1(err)
|
|
32239
|
+
};
|
|
32240
|
+
const result = {
|
|
32241
|
+
name: err.name || "Error",
|
|
32242
|
+
message: err.message
|
|
32243
|
+
};
|
|
32244
|
+
let current = err;
|
|
32245
|
+
for (let depth = 0; depth < 10 && current instanceof Error; depth++) {
|
|
32246
|
+
const maybeAws = current;
|
|
32247
|
+
if (maybeAws.$metadata !== void 0) {
|
|
32248
|
+
const code = maybeAws.Code ?? maybeAws.name;
|
|
32249
|
+
if (code) result.awsErrorCode = code;
|
|
32250
|
+
if (maybeAws.$metadata.requestId) result.requestId = maybeAws.$metadata.requestId;
|
|
32251
|
+
}
|
|
32252
|
+
current = current.cause;
|
|
32253
|
+
}
|
|
32254
|
+
return result;
|
|
32255
|
+
}
|
|
32256
|
+
|
|
32257
|
+
//#endregion
|
|
32258
|
+
//#region src/state/deployment-events-store.ts
|
|
32259
|
+
const DEPLOYMENT_EVENTS_MAX_INDEX_RUNS = 20;
|
|
32260
|
+
const FLUSH_INTERVAL_MS = 2e3;
|
|
32261
|
+
const FLUSH_EVENT_THRESHOLD = 50;
|
|
32262
|
+
function newDeploymentRunId(now = /* @__PURE__ */ new Date()) {
|
|
32263
|
+
return `${now.toISOString().replace(/[-:.]/g, "")}-${randomUUID().slice(0, 8)}`;
|
|
32264
|
+
}
|
|
32265
|
+
function deploymentEventsKey(prefix, stackName, region, runId) {
|
|
32266
|
+
return `${prefix}/${stackName}/${region}/deployments/${runId}.jsonl`;
|
|
32267
|
+
}
|
|
32268
|
+
function deploymentEventsIndexKey(prefix, stackName, region) {
|
|
32269
|
+
return `${prefix}/${stackName}/${region}/deployments/index.json`;
|
|
32270
|
+
}
|
|
32271
|
+
function deploymentsDirPrefix(prefix, stackName, region) {
|
|
32272
|
+
return `${prefix}/${stackName}/${region}/deployments/`;
|
|
32273
|
+
}
|
|
32274
|
+
const DEPLOYMENT_EVENTS_OBJECT_DESCRIPTION = "deployment-event streams and their index, whose recorded error messages can quote values the secret mask does not catch";
|
|
32275
|
+
async function deleteAndPurgeEventObjects(backend, keys, dirPrefix, scope = "deleted-keys") {
|
|
32276
|
+
if (keys.length === 0) return void 0;
|
|
32277
|
+
let swept;
|
|
32278
|
+
try {
|
|
32279
|
+
await backend.deleteRawObjects(keys);
|
|
32280
|
+
} finally {
|
|
32281
|
+
if (scope === "whole-dir") swept = await backend.purgeNoncurrentVersionsUnderPrefix(dirPrefix, { objectDescription: DEPLOYMENT_EVENTS_OBJECT_DESCRIPTION });
|
|
32282
|
+
else await backend.purgeNoncurrentVersions(keys, {
|
|
32283
|
+
...keys.length > 1 && { listPrefix: dirPrefix },
|
|
32284
|
+
objectDescription: DEPLOYMENT_EVENTS_OBJECT_DESCRIPTION
|
|
32285
|
+
});
|
|
32286
|
+
}
|
|
32287
|
+
return swept;
|
|
32288
|
+
}
|
|
32289
|
+
function runIdTimestampMs(runId) {
|
|
32290
|
+
const m = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(\d{3})Z/.exec(runId);
|
|
32291
|
+
if (!m) return null;
|
|
32292
|
+
const iso = `${m[1]}-${m[2]}-${m[3]}T${m[4]}:${m[5]}:${m[6]}.${m[7]}Z`;
|
|
32293
|
+
const ms = Date.parse(iso);
|
|
32294
|
+
return Number.isNaN(ms) ? null : ms;
|
|
32295
|
+
}
|
|
32296
|
+
function runIdFromJsonlKey(key, dirPrefix) {
|
|
32297
|
+
if (!key.startsWith(dirPrefix) || !key.endsWith(".jsonl")) return null;
|
|
32298
|
+
return key.slice(dirPrefix.length, -6);
|
|
32299
|
+
}
|
|
32300
|
+
var DeploymentEventsStore = class {
|
|
32301
|
+
logger = getLogger().child("DeploymentEvents");
|
|
32302
|
+
backend;
|
|
32303
|
+
stackName;
|
|
32304
|
+
region;
|
|
32305
|
+
command;
|
|
32306
|
+
runId;
|
|
32307
|
+
cdkdVersion;
|
|
32308
|
+
startedAt;
|
|
32309
|
+
events = [];
|
|
32310
|
+
persistedCount = 0;
|
|
32311
|
+
flushTimer;
|
|
32312
|
+
writeChain = Promise.resolve();
|
|
32313
|
+
warnedOnce = false;
|
|
32314
|
+
finalized = false;
|
|
32315
|
+
constructor(backend, options) {
|
|
32316
|
+
this.backend = backend;
|
|
32317
|
+
this.stackName = options.stackName;
|
|
32318
|
+
this.region = options.region;
|
|
32319
|
+
this.command = options.command;
|
|
32320
|
+
this.runId = options.runId ?? newDeploymentRunId();
|
|
32321
|
+
this.cdkdVersion = options.cdkdVersion ?? getCdkdVersion();
|
|
32322
|
+
this.startedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
32323
|
+
}
|
|
32324
|
+
record(event) {
|
|
32325
|
+
try {
|
|
32326
|
+
if (this.finalized) return;
|
|
32327
|
+
this.events.push({
|
|
32328
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
32329
|
+
...event
|
|
32330
|
+
});
|
|
32331
|
+
if (this.events.length - this.persistedCount >= FLUSH_EVENT_THRESHOLD) this.scheduleFlush(0);
|
|
32332
|
+
else this.scheduleFlush(FLUSH_INTERVAL_MS);
|
|
32333
|
+
} catch {}
|
|
32334
|
+
}
|
|
32335
|
+
async finalize(result) {
|
|
32336
|
+
if (this.finalized) return;
|
|
32337
|
+
this.finalized = true;
|
|
32338
|
+
if (this.flushTimer) {
|
|
32339
|
+
clearTimeout(this.flushTimer);
|
|
32340
|
+
this.flushTimer = void 0;
|
|
32341
|
+
}
|
|
32342
|
+
if (this.events.length === 0) return;
|
|
32343
|
+
await this.enqueueWrite(async () => {
|
|
32344
|
+
const indexRead = this.readIndexRuns();
|
|
32345
|
+
indexRead.catch(() => {});
|
|
32346
|
+
await this.doFlush();
|
|
32347
|
+
await this.writeIndexAndPrune(result, await indexRead);
|
|
32348
|
+
});
|
|
32349
|
+
}
|
|
32350
|
+
async writeIndexAndPrune(result, existingRuns) {
|
|
32351
|
+
const { key, file, runs } = this.buildIndexUpdate(result, existingRuns);
|
|
32352
|
+
const keptRunIds = runs.map((r) => r.runId);
|
|
32353
|
+
const willPrune = keptRunIds.length >= 20;
|
|
32354
|
+
const dirPrefix = deploymentsDirPrefix(this.backend.prefix, this.stackName, this.region);
|
|
32355
|
+
const staleKeysRead = willPrune ? this.backend.listRawKeys(dirPrefix) : void 0;
|
|
32356
|
+
staleKeysRead?.catch(() => {});
|
|
32357
|
+
await this.backend.putRawObject(key, JSON.stringify(file, null, 2));
|
|
32358
|
+
if (!staleKeysRead) return;
|
|
32359
|
+
await this.pruneSupersededRunFiles(keptRunIds, dirPrefix, await staleKeysRead);
|
|
32360
|
+
}
|
|
32361
|
+
async drain() {
|
|
32362
|
+
await this.writeChain;
|
|
32363
|
+
}
|
|
32364
|
+
scheduleFlush(delayMs) {
|
|
32365
|
+
if (this.flushTimer) {
|
|
32366
|
+
if (delayMs > 0) return;
|
|
32367
|
+
clearTimeout(this.flushTimer);
|
|
32368
|
+
}
|
|
32369
|
+
this.flushTimer = setTimeout(() => {
|
|
32370
|
+
this.flushTimer = void 0;
|
|
32371
|
+
this.enqueueWrite(() => this.doFlush());
|
|
32372
|
+
}, delayMs);
|
|
32373
|
+
this.flushTimer.unref?.();
|
|
32374
|
+
}
|
|
32375
|
+
enqueueWrite(op) {
|
|
32376
|
+
const next = this.writeChain.then(op).catch((err) => {
|
|
32377
|
+
this.warnOnce(`Failed to persist deployment events for run ${this.runId}: ${describeAwsFailure(err).detail}`);
|
|
32378
|
+
});
|
|
32379
|
+
this.writeChain = next;
|
|
32380
|
+
return next;
|
|
32381
|
+
}
|
|
32382
|
+
async doFlush() {
|
|
32383
|
+
if (this.events.length === 0 || this.events.length === this.persistedCount) return;
|
|
32384
|
+
const snapshotCount = this.events.length;
|
|
32385
|
+
const body = this.events.slice(0, snapshotCount).map((e) => JSON.stringify(e)).join("\n");
|
|
32386
|
+
await this.backend.putRawObject(deploymentEventsKey(this.backend.prefix, this.stackName, this.region, this.runId), body + "\n", "application/x-ndjson");
|
|
32387
|
+
this.persistedCount = snapshotCount;
|
|
32388
|
+
}
|
|
32389
|
+
async readIndexRuns() {
|
|
32390
|
+
const key = deploymentEventsIndexKey(this.backend.prefix, this.stackName, this.region);
|
|
32391
|
+
try {
|
|
32392
|
+
const raw = await this.backend.getRawObject(key);
|
|
32393
|
+
if (raw !== null) {
|
|
32394
|
+
const parsed = JSON.parse(raw);
|
|
32395
|
+
if (Array.isArray(parsed.runs)) return parsed.runs;
|
|
32396
|
+
}
|
|
32397
|
+
} catch (err) {
|
|
32398
|
+
this.logger.debug(`Deployment-events index unreadable, rewriting: ${describeAwsFailure(err).detail}`);
|
|
32399
|
+
}
|
|
32400
|
+
return [];
|
|
32401
|
+
}
|
|
32402
|
+
buildIndexUpdate(result, existingRuns) {
|
|
32403
|
+
const key = deploymentEventsIndexKey(this.backend.prefix, this.stackName, this.region);
|
|
32404
|
+
const runs = [{
|
|
32405
|
+
runId: this.runId,
|
|
32406
|
+
command: this.command,
|
|
32407
|
+
cdkdVersion: this.cdkdVersion,
|
|
32408
|
+
startedAt: this.startedAt,
|
|
32409
|
+
finishedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
32410
|
+
result,
|
|
32411
|
+
eventCount: this.persistedCount
|
|
32412
|
+
}, ...existingRuns.filter((r) => r.runId !== this.runId)].slice(0, 20);
|
|
32413
|
+
return {
|
|
32414
|
+
key,
|
|
32415
|
+
file: {
|
|
32416
|
+
indexVersion: 1,
|
|
32417
|
+
stackName: this.stackName,
|
|
32418
|
+
region: this.region,
|
|
32419
|
+
runs,
|
|
32420
|
+
lastModified: Date.now()
|
|
32421
|
+
},
|
|
32422
|
+
runs
|
|
32423
|
+
};
|
|
32424
|
+
}
|
|
32425
|
+
async pruneSupersededRunFiles(keptRunIds, dirPrefix, keys) {
|
|
32426
|
+
if (keptRunIds.length < 20) return;
|
|
32427
|
+
const cutoff = keptRunIds.reduce((min, id) => id < min ? id : min, keptRunIds[0]);
|
|
32428
|
+
const stale = keys.filter((k) => {
|
|
32429
|
+
const runId = runIdFromJsonlKey(k, dirPrefix);
|
|
32430
|
+
return runId !== null && runId < cutoff;
|
|
32431
|
+
});
|
|
32432
|
+
if (stale.length === 0) return;
|
|
32433
|
+
await deleteAndPurgeEventObjects(this.backend, stale, dirPrefix);
|
|
32434
|
+
this.logger.debug(`Pruned ${stale.length} superseded deployment-event stream(s) for ${this.stackName} (${this.region})`);
|
|
32435
|
+
}
|
|
32436
|
+
warnOnce(message) {
|
|
32437
|
+
if (this.warnedOnce) {
|
|
32438
|
+
this.logger.debug(message);
|
|
32439
|
+
return;
|
|
32440
|
+
}
|
|
32441
|
+
this.warnedOnce = true;
|
|
32442
|
+
this.logger.warn(`${message} — continuing; deployment events are best-effort and never block the run.`);
|
|
32443
|
+
}
|
|
32444
|
+
};
|
|
32445
|
+
var DeploymentEventsReader = class {
|
|
32446
|
+
backend;
|
|
32447
|
+
constructor(backend) {
|
|
32448
|
+
this.backend = backend;
|
|
32449
|
+
}
|
|
32450
|
+
async listRegions(stackName) {
|
|
32451
|
+
const prefix = `${this.backend.prefix}/${stackName}/`;
|
|
32452
|
+
const keys = await this.backend.listRawKeys(prefix);
|
|
32453
|
+
const regions = /* @__PURE__ */ new Set();
|
|
32454
|
+
for (const key of keys) {
|
|
32455
|
+
const segments = key.slice(prefix.length).split("/");
|
|
32456
|
+
if (segments.length === 3 && segments[1] === "deployments" && segments[0]) regions.add(segments[0]);
|
|
32457
|
+
}
|
|
32458
|
+
return [...regions].sort();
|
|
32459
|
+
}
|
|
32460
|
+
async listRuns(stackName, region) {
|
|
32461
|
+
const key = deploymentEventsIndexKey(this.backend.prefix, stackName, region);
|
|
32462
|
+
try {
|
|
32463
|
+
const raw = await this.backend.getRawObject(key);
|
|
32464
|
+
if (raw !== null) {
|
|
32465
|
+
const parsed = JSON.parse(raw);
|
|
32466
|
+
if (Array.isArray(parsed.runs)) return parsed.runs;
|
|
32467
|
+
}
|
|
32468
|
+
} catch {}
|
|
32469
|
+
const dirPrefix = `${this.backend.prefix}/${stackName}/${region}/deployments/`;
|
|
32470
|
+
const runIds = (await this.backend.listRawKeys(dirPrefix)).filter((k) => k.endsWith(".jsonl")).map((k) => k.slice(dirPrefix.length, -6)).sort().reverse();
|
|
32471
|
+
return Promise.all(runIds.map((runId) => this.summarizeRunFromJsonl(stackName, region, runId)));
|
|
32472
|
+
}
|
|
32473
|
+
async summarizeRunFromJsonl(stackName, region, runId) {
|
|
32474
|
+
const fallback = {
|
|
32475
|
+
runId,
|
|
32476
|
+
command: "deploy",
|
|
32477
|
+
cdkdVersion: "unknown",
|
|
32478
|
+
startedAt: "",
|
|
32479
|
+
finishedAt: "",
|
|
32480
|
+
result: "UNKNOWN",
|
|
32481
|
+
eventCount: 0
|
|
32482
|
+
};
|
|
32483
|
+
let events = null;
|
|
32484
|
+
try {
|
|
32485
|
+
events = await this.readRunEvents(stackName, region, runId);
|
|
32486
|
+
} catch {
|
|
32487
|
+
return fallback;
|
|
32488
|
+
}
|
|
32489
|
+
if (events === null || events.length === 0) return fallback;
|
|
32490
|
+
const started = events.find((e) => e.eventType === "RUN_STARTED");
|
|
32491
|
+
let finished;
|
|
32492
|
+
for (const e of events) if (e.eventType === "RUN_FINISHED") finished = e;
|
|
32493
|
+
return {
|
|
32494
|
+
runId,
|
|
32495
|
+
command: started?.command ?? fallback.command,
|
|
32496
|
+
cdkdVersion: started?.cdkdVersion ?? fallback.cdkdVersion,
|
|
32497
|
+
startedAt: started?.timestamp ?? fallback.startedAt,
|
|
32498
|
+
finishedAt: finished?.timestamp ?? fallback.finishedAt,
|
|
32499
|
+
result: finished?.result ?? "UNKNOWN",
|
|
32500
|
+
eventCount: events.length
|
|
32501
|
+
};
|
|
32502
|
+
}
|
|
32503
|
+
async readRunEvents(stackName, region, runId) {
|
|
32504
|
+
const key = deploymentEventsKey(this.backend.prefix, stackName, region, runId);
|
|
32505
|
+
const raw = await this.backend.getRawObject(key);
|
|
32506
|
+
if (raw === null) return null;
|
|
32507
|
+
const events = [];
|
|
32508
|
+
for (const line of raw.split("\n")) {
|
|
32509
|
+
const trimmed = line.trim();
|
|
32510
|
+
if (!trimmed) continue;
|
|
32511
|
+
try {
|
|
32512
|
+
events.push(JSON.parse(trimmed));
|
|
32513
|
+
} catch {}
|
|
32514
|
+
}
|
|
32515
|
+
return events;
|
|
32516
|
+
}
|
|
32517
|
+
async pruneRuns(stackName, region, opts = {}) {
|
|
32518
|
+
const dirPrefix = deploymentsDirPrefix(this.backend.prefix, stackName, region);
|
|
32519
|
+
const keys = await this.backend.listRawKeys(dirPrefix);
|
|
32520
|
+
const runIdsDesc = keys.map((k) => runIdFromJsonlKey(k, dirPrefix)).filter((id) => id !== null).sort().reverse();
|
|
32521
|
+
const indexKey = deploymentEventsIndexKey(this.backend.prefix, stackName, region);
|
|
32522
|
+
const indexExisted = keys.includes(indexKey);
|
|
32523
|
+
if (opts.all === true) {
|
|
32524
|
+
const toDelete = runIdsDesc.map((id) => deploymentEventsKey(this.backend.prefix, stackName, region, id));
|
|
32525
|
+
const earlierVersions = await deleteAndPurgeEventObjects(this.backend, [...toDelete, indexKey], dirPrefix, "whole-dir");
|
|
32526
|
+
return {
|
|
32527
|
+
deletedRunIds: runIdsDesc,
|
|
32528
|
+
remainingRunIds: [],
|
|
32529
|
+
indexDeleted: indexExisted,
|
|
32530
|
+
...earlierVersions !== void 0 && { earlierVersions }
|
|
32531
|
+
};
|
|
32532
|
+
}
|
|
32533
|
+
const noGuards = opts.keep === void 0 && opts.olderThanMs === void 0;
|
|
32534
|
+
const keep = opts.keep ?? (noGuards ? 20 : void 0);
|
|
32535
|
+
const protectedByCount = keep === void 0 ? /* @__PURE__ */ new Set() : new Set(runIdsDesc.slice(0, keep));
|
|
32536
|
+
let candidates = runIdsDesc.filter((id) => !protectedByCount.has(id));
|
|
32537
|
+
if (opts.olderThanMs !== void 0) {
|
|
32538
|
+
const cutoff = (opts.now ?? /* @__PURE__ */ new Date()).getTime() - opts.olderThanMs;
|
|
32539
|
+
candidates = candidates.filter((id) => {
|
|
32540
|
+
const t = runIdTimestampMs(id);
|
|
32541
|
+
return t !== null && t < cutoff;
|
|
32542
|
+
});
|
|
32543
|
+
}
|
|
32544
|
+
if (candidates.length === 0) return {
|
|
32545
|
+
deletedRunIds: [],
|
|
32546
|
+
remainingRunIds: runIdsDesc,
|
|
32547
|
+
indexDeleted: false
|
|
32548
|
+
};
|
|
32549
|
+
const deletedSet = new Set(candidates);
|
|
32550
|
+
const deleteKeys = candidates.map((id) => deploymentEventsKey(this.backend.prefix, stackName, region, id));
|
|
32551
|
+
const remainingRunIds = runIdsDesc.filter((id) => !deletedSet.has(id));
|
|
32552
|
+
if (remainingRunIds.length === 0) {
|
|
32553
|
+
await deleteAndPurgeEventObjects(this.backend, [...deleteKeys, indexKey], dirPrefix);
|
|
32554
|
+
return {
|
|
32555
|
+
deletedRunIds: candidates,
|
|
32556
|
+
remainingRunIds,
|
|
32557
|
+
indexDeleted: indexExisted
|
|
32558
|
+
};
|
|
32559
|
+
}
|
|
32560
|
+
await this.rewriteIndexAfterPrune(indexKey, stackName, region, deletedSet);
|
|
32561
|
+
await deleteAndPurgeEventObjects(this.backend, deleteKeys, dirPrefix);
|
|
32562
|
+
return {
|
|
32563
|
+
deletedRunIds: candidates,
|
|
32564
|
+
remainingRunIds,
|
|
32565
|
+
indexDeleted: false
|
|
32566
|
+
};
|
|
32567
|
+
}
|
|
32568
|
+
async rewriteIndexAfterPrune(indexKey, stackName, region, deletedRunIds) {
|
|
32569
|
+
let raw;
|
|
32570
|
+
try {
|
|
32571
|
+
raw = await this.backend.getRawObject(indexKey);
|
|
32572
|
+
} catch {
|
|
32573
|
+
return;
|
|
32574
|
+
}
|
|
32575
|
+
if (raw === null) return;
|
|
32576
|
+
let parsed;
|
|
32577
|
+
try {
|
|
32578
|
+
parsed = JSON.parse(raw);
|
|
32579
|
+
} catch {
|
|
32580
|
+
return;
|
|
32581
|
+
}
|
|
32582
|
+
if (!Array.isArray(parsed.runs)) return;
|
|
32583
|
+
const remaining = parsed.runs.filter((r) => !deletedRunIds.has(r.runId));
|
|
32584
|
+
if (remaining.length === parsed.runs.length) return;
|
|
32585
|
+
const file = {
|
|
32586
|
+
indexVersion: 1,
|
|
32587
|
+
stackName,
|
|
32588
|
+
region,
|
|
32589
|
+
runs: remaining,
|
|
32590
|
+
lastModified: Date.now()
|
|
32591
|
+
};
|
|
32592
|
+
await this.backend.putRawObject(indexKey, JSON.stringify(file, null, 2));
|
|
32593
|
+
}
|
|
32594
|
+
};
|
|
32595
|
+
|
|
32596
|
+
//#endregion
|
|
32597
|
+
//#region src/deployment/kept-in-history.ts
|
|
32598
|
+
function keptInEarlierRecords(records) {
|
|
32599
|
+
const out = [];
|
|
32600
|
+
for (const record of records) for (const [logicalId, raw] of Object.entries(record.resources)) {
|
|
32601
|
+
if (raw === null || typeof raw !== "object") continue;
|
|
32602
|
+
const r = raw;
|
|
32603
|
+
if (typeof r.resourceType !== "string" || typeof r.physicalId !== "string") continue;
|
|
32604
|
+
if (r.physicalId === "") continue;
|
|
32605
|
+
if (!shouldRetainResource(r.deletionPolicy)) continue;
|
|
32606
|
+
out.push({
|
|
32607
|
+
logicalId,
|
|
32608
|
+
resourceType: r.resourceType,
|
|
32609
|
+
physicalId: r.physicalId,
|
|
32610
|
+
...record.writtenAt !== void 0 && { keptAt: record.writtenAt }
|
|
32611
|
+
});
|
|
32612
|
+
}
|
|
32613
|
+
return out;
|
|
32614
|
+
}
|
|
32615
|
+
function keptInEventHistory(runs, stackName) {
|
|
32616
|
+
const made = /* @__PURE__ */ new Map();
|
|
32617
|
+
const out = [];
|
|
32618
|
+
for (const events of runs) for (const e of events) {
|
|
32619
|
+
if (e.stackName !== stackName || typeof e.logicalId !== "string") continue;
|
|
32620
|
+
if (typeof e.resourceType !== "string") continue;
|
|
32621
|
+
if (e.eventType === "RESOURCE_SUCCEEDED" && (e.operation === "CREATE" || e.operation === "UPDATE") && typeof e.physicalId === "string" && e.physicalId !== "") made.set(e.logicalId, {
|
|
32622
|
+
resourceType: e.resourceType,
|
|
32623
|
+
physicalId: e.physicalId
|
|
32624
|
+
});
|
|
32625
|
+
else if (e.eventType === "RESOURCE_RETAINED") {
|
|
32626
|
+
const m = made.get(e.logicalId);
|
|
32627
|
+
if (m !== void 0 && m.resourceType === e.resourceType) {
|
|
32628
|
+
const keptAt = Date.parse(e.timestamp);
|
|
32629
|
+
out.push({
|
|
32630
|
+
logicalId: e.logicalId,
|
|
32631
|
+
...m,
|
|
32632
|
+
...Number.isFinite(keptAt) && { keptAt }
|
|
32633
|
+
});
|
|
32634
|
+
}
|
|
32635
|
+
}
|
|
32636
|
+
}
|
|
32637
|
+
return out;
|
|
32638
|
+
}
|
|
32639
|
+
async function loadKeptInHistory(sources, stackName, region) {
|
|
32640
|
+
const [records, runs] = await Promise.all([sources.earlierStateResources(stackName, region).catch(() => []), readRecentRuns(sources, stackName, region)]);
|
|
32641
|
+
return [...keptInEarlierRecords(records), ...keptInEventHistory(runs, stackName)];
|
|
32642
|
+
}
|
|
32643
|
+
async function readRecentRuns(sources, stackName, region) {
|
|
32644
|
+
const runsOf = stackName.split("~")[0];
|
|
32645
|
+
return (async () => {
|
|
32646
|
+
const listed = (await sources.listRuns(runsOf, region)).slice(0, 20);
|
|
32647
|
+
return (await Promise.all(listed.map((r) => sources.readRunEvents(runsOf, region, r.runId).catch(() => null)))).filter((e) => e !== null).reverse();
|
|
32648
|
+
})().catch(() => []);
|
|
32649
|
+
}
|
|
32650
|
+
const RETAINED_SURVIVOR_REASON_PREFIX = "UpdateReplacePolicy: Retain kept the replacement's new";
|
|
32651
|
+
function rollbackRetainedInEventHistory(runs, stackName) {
|
|
32652
|
+
const out = [];
|
|
32653
|
+
for (const events of runs) for (const e of events) {
|
|
32654
|
+
if (e.stackName !== stackName || e.eventType !== "ROLLBACK_RESOURCE_SUCCEEDED") continue;
|
|
32655
|
+
if (typeof e.logicalId !== "string" || typeof e.resourceType !== "string") continue;
|
|
32656
|
+
if (typeof e.physicalId !== "string" || e.physicalId === "") continue;
|
|
32657
|
+
if (typeof e.reason !== "string" || !e.reason.startsWith("UpdateReplacePolicy: Retain kept the replacement's new")) continue;
|
|
32658
|
+
out.push({
|
|
32659
|
+
logicalId: e.logicalId,
|
|
32660
|
+
resourceType: e.resourceType,
|
|
32661
|
+
physicalId: e.physicalId
|
|
32662
|
+
});
|
|
32663
|
+
}
|
|
32664
|
+
return out;
|
|
32665
|
+
}
|
|
32666
|
+
async function loadRollbackRetainedCopies(sources, stackName, region) {
|
|
32667
|
+
return rollbackRetainedInEventHistory(await readRecentRuns(sources, stackName, region), stackName);
|
|
32668
|
+
}
|
|
32669
|
+
|
|
32226
32670
|
//#endregion
|
|
32227
32671
|
//#region src/provisioning/providers/idempotency-token.ts
|
|
32228
32672
|
const PROCESS_NONCE = randomUUID();
|
|
@@ -33088,30 +33532,6 @@ async function createReplicationGroupFinalSnapshot(client, replicationGroupId, l
|
|
|
33088
33532
|
});
|
|
33089
33533
|
}
|
|
33090
33534
|
|
|
33091
|
-
//#endregion
|
|
33092
|
-
//#region src/types/deployment-events.ts
|
|
33093
|
-
function extractDeploymentEventError(err) {
|
|
33094
|
-
if (!(err instanceof Error)) return {
|
|
33095
|
-
name: "UnknownError",
|
|
33096
|
-
message: safeStringify$1(err)
|
|
33097
|
-
};
|
|
33098
|
-
const result = {
|
|
33099
|
-
name: err.name || "Error",
|
|
33100
|
-
message: err.message
|
|
33101
|
-
};
|
|
33102
|
-
let current = err;
|
|
33103
|
-
for (let depth = 0; depth < 10 && current instanceof Error; depth++) {
|
|
33104
|
-
const maybeAws = current;
|
|
33105
|
-
if (maybeAws.$metadata !== void 0) {
|
|
33106
|
-
const code = maybeAws.Code ?? maybeAws.name;
|
|
33107
|
-
if (code) result.awsErrorCode = code;
|
|
33108
|
-
if (maybeAws.$metadata.requestId) result.requestId = maybeAws.$metadata.requestId;
|
|
33109
|
-
}
|
|
33110
|
-
current = current.cause;
|
|
33111
|
-
}
|
|
33112
|
-
return result;
|
|
33113
|
-
}
|
|
33114
|
-
|
|
33115
33535
|
//#endregion
|
|
33116
33536
|
//#region src/deployment/rollback-executor/types.ts
|
|
33117
33537
|
const NESTED_STACK_RESOURCE_TYPE$1 = "AWS::CloudFormation::Stack";
|
|
@@ -33307,7 +33727,7 @@ function retainedSurvivorMessages(logicalId, resourceType, survivorPhysicalId, s
|
|
|
33307
33727
|
const clause = mask(stateClause);
|
|
33308
33728
|
return {
|
|
33309
33729
|
warn: ` ⚠ ${safe(logicalId)} (${safe(resourceType)}) has UpdateReplacePolicy: Retain — the replacement's new physical resource (${displaySafe(survivorId)}) is RETAINED by this rollback and is no longer tracked by cdkd: it keeps running and incurring cost, and destroying the stack will not remove it. Delete it yourself once you no longer need it. ${displaySafe(clause)}`,
|
|
33310
|
-
reason:
|
|
33730
|
+
reason: `${RETAINED_SURVIVOR_REASON_PREFIX} ${resourceType} (${survivorId}); it is live, still billing, and no longer tracked by cdkd. ${clause}`
|
|
33311
33731
|
};
|
|
33312
33732
|
}
|
|
33313
33733
|
|
|
@@ -34944,7 +35364,8 @@ async function checkedReplacementNameChange(deps, input) {
|
|
|
34944
35364
|
}
|
|
34945
35365
|
if (found === null) return change;
|
|
34946
35366
|
if (!typeChanged && probeFoundSameId(resourceType, found.physicalId, currentResource.physicalId)) return;
|
|
34947
|
-
|
|
35367
|
+
const remedy = (await deps.rollbackRetainedCopies?.(input.stackName).catch(() => []) ?? []).some((copy) => copy.logicalId === logicalId && copy.resourceType === resourceType && probeFoundSameId(resourceType, copy.physicalId, found.physicalId)) ? `This stack's event history records that a rolled-back deploy kept ${displaySafe(logicalId)}'s replacement under this name because of UpdateReplacePolicy: Retain, as CloudFormation also does, untracked by cdkd. If the holder is that copy and you no longer need it, delete it; otherwise choose another name.` : `Choose a name no other resource holds, or delete the resource holding it if it is yours.`;
|
|
35368
|
+
throw markNonRetryable(new CdkdError(maskName(`${subject} requires replacement, and another existing resource (${displaySafe(found.physicalId)}) already holds the name it asks for. ${renderReplacementNameChange(change, input.createProps)}. Since ${adoptsText}, creating the replacement would take that resource over and record it as this stack's. Nothing was created or deleted. ${remedy}`), "NAMED_REPLACEMENT_COLLISION"));
|
|
34948
35369
|
}
|
|
34949
35370
|
async function createFirstThenDeleteOld(run, deps, input) {
|
|
34950
35371
|
const { logicalId, resourceType, currentResource, secrets } = input;
|
|
@@ -36392,6 +36813,7 @@ function isPlainRecord$1(value) {
|
|
|
36392
36813
|
//#endregion
|
|
36393
36814
|
//#region src/deployment/type-change-guard.ts
|
|
36394
36815
|
function equalIdNamesDifferentResources(input) {
|
|
36816
|
+
if (input.resourceType === "AWS::Lambda::Permission") return permissionsOnDifferentFunctions(input.oldProperties, input.newProperties);
|
|
36395
36817
|
if (input.resourceType !== "AWS::Glue::Table" || input.physicalId === void 0) return false;
|
|
36396
36818
|
const oldDb = input.oldProperties?.["DatabaseName"];
|
|
36397
36819
|
const newDb = input.newProperties?.["DatabaseName"];
|
|
@@ -36400,6 +36822,15 @@ function equalIdNamesDifferentResources(input) {
|
|
|
36400
36822
|
if (segmentAfterAnchor(input.physicalId, oldDb) === void 0 || segmentAfterAnchor(input.physicalId, newDb) === void 0) return false;
|
|
36401
36823
|
return oldDb !== newDb;
|
|
36402
36824
|
}
|
|
36825
|
+
function permissionsOnDifferentFunctions(oldProperties, newProperties) {
|
|
36826
|
+
const oldFn = oldProperties?.["FunctionName"];
|
|
36827
|
+
const newFn = newProperties?.["FunctionName"];
|
|
36828
|
+
if (typeof oldFn !== "string" || typeof newFn !== "string") return false;
|
|
36829
|
+
if (carriesSecretMask(oldFn) || carriesSecretMask(newFn)) return false;
|
|
36830
|
+
const oldName = parseLambdaFunctionAddress(oldFn)?.name;
|
|
36831
|
+
const newName = parseLambdaFunctionAddress(newFn)?.name;
|
|
36832
|
+
return oldName !== void 0 && newName !== void 0 && oldName !== newName;
|
|
36833
|
+
}
|
|
36403
36834
|
function equalIdNamesSameResource(input) {
|
|
36404
36835
|
if (input.oldType === input.newType) return !equalIdNamesDifferentResources({
|
|
36405
36836
|
resourceType: input.oldType,
|
|
@@ -40786,345 +41217,6 @@ function withoutPendingRequest(op) {
|
|
|
40786
41217
|
return rest;
|
|
40787
41218
|
}
|
|
40788
41219
|
|
|
40789
|
-
//#endregion
|
|
40790
|
-
//#region src/state/deployment-events-store.ts
|
|
40791
|
-
const DEPLOYMENT_EVENTS_MAX_INDEX_RUNS = 20;
|
|
40792
|
-
const FLUSH_INTERVAL_MS = 2e3;
|
|
40793
|
-
const FLUSH_EVENT_THRESHOLD = 50;
|
|
40794
|
-
function newDeploymentRunId(now = /* @__PURE__ */ new Date()) {
|
|
40795
|
-
return `${now.toISOString().replace(/[-:.]/g, "")}-${randomUUID().slice(0, 8)}`;
|
|
40796
|
-
}
|
|
40797
|
-
function deploymentEventsKey(prefix, stackName, region, runId) {
|
|
40798
|
-
return `${prefix}/${stackName}/${region}/deployments/${runId}.jsonl`;
|
|
40799
|
-
}
|
|
40800
|
-
function deploymentEventsIndexKey(prefix, stackName, region) {
|
|
40801
|
-
return `${prefix}/${stackName}/${region}/deployments/index.json`;
|
|
40802
|
-
}
|
|
40803
|
-
function deploymentsDirPrefix(prefix, stackName, region) {
|
|
40804
|
-
return `${prefix}/${stackName}/${region}/deployments/`;
|
|
40805
|
-
}
|
|
40806
|
-
const DEPLOYMENT_EVENTS_OBJECT_DESCRIPTION = "deployment-event streams and their index, whose recorded error messages can quote values the secret mask does not catch";
|
|
40807
|
-
async function deleteAndPurgeEventObjects(backend, keys, dirPrefix, scope = "deleted-keys") {
|
|
40808
|
-
if (keys.length === 0) return void 0;
|
|
40809
|
-
let swept;
|
|
40810
|
-
try {
|
|
40811
|
-
await backend.deleteRawObjects(keys);
|
|
40812
|
-
} finally {
|
|
40813
|
-
if (scope === "whole-dir") swept = await backend.purgeNoncurrentVersionsUnderPrefix(dirPrefix, { objectDescription: DEPLOYMENT_EVENTS_OBJECT_DESCRIPTION });
|
|
40814
|
-
else await backend.purgeNoncurrentVersions(keys, {
|
|
40815
|
-
...keys.length > 1 && { listPrefix: dirPrefix },
|
|
40816
|
-
objectDescription: DEPLOYMENT_EVENTS_OBJECT_DESCRIPTION
|
|
40817
|
-
});
|
|
40818
|
-
}
|
|
40819
|
-
return swept;
|
|
40820
|
-
}
|
|
40821
|
-
function runIdTimestampMs(runId) {
|
|
40822
|
-
const m = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(\d{3})Z/.exec(runId);
|
|
40823
|
-
if (!m) return null;
|
|
40824
|
-
const iso = `${m[1]}-${m[2]}-${m[3]}T${m[4]}:${m[5]}:${m[6]}.${m[7]}Z`;
|
|
40825
|
-
const ms = Date.parse(iso);
|
|
40826
|
-
return Number.isNaN(ms) ? null : ms;
|
|
40827
|
-
}
|
|
40828
|
-
function runIdFromJsonlKey(key, dirPrefix) {
|
|
40829
|
-
if (!key.startsWith(dirPrefix) || !key.endsWith(".jsonl")) return null;
|
|
40830
|
-
return key.slice(dirPrefix.length, -6);
|
|
40831
|
-
}
|
|
40832
|
-
var DeploymentEventsStore = class {
|
|
40833
|
-
logger = getLogger().child("DeploymentEvents");
|
|
40834
|
-
backend;
|
|
40835
|
-
stackName;
|
|
40836
|
-
region;
|
|
40837
|
-
command;
|
|
40838
|
-
runId;
|
|
40839
|
-
cdkdVersion;
|
|
40840
|
-
startedAt;
|
|
40841
|
-
events = [];
|
|
40842
|
-
persistedCount = 0;
|
|
40843
|
-
flushTimer;
|
|
40844
|
-
writeChain = Promise.resolve();
|
|
40845
|
-
warnedOnce = false;
|
|
40846
|
-
finalized = false;
|
|
40847
|
-
constructor(backend, options) {
|
|
40848
|
-
this.backend = backend;
|
|
40849
|
-
this.stackName = options.stackName;
|
|
40850
|
-
this.region = options.region;
|
|
40851
|
-
this.command = options.command;
|
|
40852
|
-
this.runId = options.runId ?? newDeploymentRunId();
|
|
40853
|
-
this.cdkdVersion = options.cdkdVersion ?? getCdkdVersion();
|
|
40854
|
-
this.startedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
40855
|
-
}
|
|
40856
|
-
record(event) {
|
|
40857
|
-
try {
|
|
40858
|
-
if (this.finalized) return;
|
|
40859
|
-
this.events.push({
|
|
40860
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
40861
|
-
...event
|
|
40862
|
-
});
|
|
40863
|
-
if (this.events.length - this.persistedCount >= FLUSH_EVENT_THRESHOLD) this.scheduleFlush(0);
|
|
40864
|
-
else this.scheduleFlush(FLUSH_INTERVAL_MS);
|
|
40865
|
-
} catch {}
|
|
40866
|
-
}
|
|
40867
|
-
async finalize(result) {
|
|
40868
|
-
if (this.finalized) return;
|
|
40869
|
-
this.finalized = true;
|
|
40870
|
-
if (this.flushTimer) {
|
|
40871
|
-
clearTimeout(this.flushTimer);
|
|
40872
|
-
this.flushTimer = void 0;
|
|
40873
|
-
}
|
|
40874
|
-
if (this.events.length === 0) return;
|
|
40875
|
-
await this.enqueueWrite(async () => {
|
|
40876
|
-
const indexRead = this.readIndexRuns();
|
|
40877
|
-
indexRead.catch(() => {});
|
|
40878
|
-
await this.doFlush();
|
|
40879
|
-
await this.writeIndexAndPrune(result, await indexRead);
|
|
40880
|
-
});
|
|
40881
|
-
}
|
|
40882
|
-
async writeIndexAndPrune(result, existingRuns) {
|
|
40883
|
-
const { key, file, runs } = this.buildIndexUpdate(result, existingRuns);
|
|
40884
|
-
const keptRunIds = runs.map((r) => r.runId);
|
|
40885
|
-
const willPrune = keptRunIds.length >= 20;
|
|
40886
|
-
const dirPrefix = deploymentsDirPrefix(this.backend.prefix, this.stackName, this.region);
|
|
40887
|
-
const staleKeysRead = willPrune ? this.backend.listRawKeys(dirPrefix) : void 0;
|
|
40888
|
-
staleKeysRead?.catch(() => {});
|
|
40889
|
-
await this.backend.putRawObject(key, JSON.stringify(file, null, 2));
|
|
40890
|
-
if (!staleKeysRead) return;
|
|
40891
|
-
await this.pruneSupersededRunFiles(keptRunIds, dirPrefix, await staleKeysRead);
|
|
40892
|
-
}
|
|
40893
|
-
async drain() {
|
|
40894
|
-
await this.writeChain;
|
|
40895
|
-
}
|
|
40896
|
-
scheduleFlush(delayMs) {
|
|
40897
|
-
if (this.flushTimer) {
|
|
40898
|
-
if (delayMs > 0) return;
|
|
40899
|
-
clearTimeout(this.flushTimer);
|
|
40900
|
-
}
|
|
40901
|
-
this.flushTimer = setTimeout(() => {
|
|
40902
|
-
this.flushTimer = void 0;
|
|
40903
|
-
this.enqueueWrite(() => this.doFlush());
|
|
40904
|
-
}, delayMs);
|
|
40905
|
-
this.flushTimer.unref?.();
|
|
40906
|
-
}
|
|
40907
|
-
enqueueWrite(op) {
|
|
40908
|
-
const next = this.writeChain.then(op).catch((err) => {
|
|
40909
|
-
this.warnOnce(`Failed to persist deployment events for run ${this.runId}: ${describeAwsFailure(err).detail}`);
|
|
40910
|
-
});
|
|
40911
|
-
this.writeChain = next;
|
|
40912
|
-
return next;
|
|
40913
|
-
}
|
|
40914
|
-
async doFlush() {
|
|
40915
|
-
if (this.events.length === 0 || this.events.length === this.persistedCount) return;
|
|
40916
|
-
const snapshotCount = this.events.length;
|
|
40917
|
-
const body = this.events.slice(0, snapshotCount).map((e) => JSON.stringify(e)).join("\n");
|
|
40918
|
-
await this.backend.putRawObject(deploymentEventsKey(this.backend.prefix, this.stackName, this.region, this.runId), body + "\n", "application/x-ndjson");
|
|
40919
|
-
this.persistedCount = snapshotCount;
|
|
40920
|
-
}
|
|
40921
|
-
async readIndexRuns() {
|
|
40922
|
-
const key = deploymentEventsIndexKey(this.backend.prefix, this.stackName, this.region);
|
|
40923
|
-
try {
|
|
40924
|
-
const raw = await this.backend.getRawObject(key);
|
|
40925
|
-
if (raw !== null) {
|
|
40926
|
-
const parsed = JSON.parse(raw);
|
|
40927
|
-
if (Array.isArray(parsed.runs)) return parsed.runs;
|
|
40928
|
-
}
|
|
40929
|
-
} catch (err) {
|
|
40930
|
-
this.logger.debug(`Deployment-events index unreadable, rewriting: ${describeAwsFailure(err).detail}`);
|
|
40931
|
-
}
|
|
40932
|
-
return [];
|
|
40933
|
-
}
|
|
40934
|
-
buildIndexUpdate(result, existingRuns) {
|
|
40935
|
-
const key = deploymentEventsIndexKey(this.backend.prefix, this.stackName, this.region);
|
|
40936
|
-
const runs = [{
|
|
40937
|
-
runId: this.runId,
|
|
40938
|
-
command: this.command,
|
|
40939
|
-
cdkdVersion: this.cdkdVersion,
|
|
40940
|
-
startedAt: this.startedAt,
|
|
40941
|
-
finishedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
40942
|
-
result,
|
|
40943
|
-
eventCount: this.persistedCount
|
|
40944
|
-
}, ...existingRuns.filter((r) => r.runId !== this.runId)].slice(0, 20);
|
|
40945
|
-
return {
|
|
40946
|
-
key,
|
|
40947
|
-
file: {
|
|
40948
|
-
indexVersion: 1,
|
|
40949
|
-
stackName: this.stackName,
|
|
40950
|
-
region: this.region,
|
|
40951
|
-
runs,
|
|
40952
|
-
lastModified: Date.now()
|
|
40953
|
-
},
|
|
40954
|
-
runs
|
|
40955
|
-
};
|
|
40956
|
-
}
|
|
40957
|
-
async pruneSupersededRunFiles(keptRunIds, dirPrefix, keys) {
|
|
40958
|
-
if (keptRunIds.length < 20) return;
|
|
40959
|
-
const cutoff = keptRunIds.reduce((min, id) => id < min ? id : min, keptRunIds[0]);
|
|
40960
|
-
const stale = keys.filter((k) => {
|
|
40961
|
-
const runId = runIdFromJsonlKey(k, dirPrefix);
|
|
40962
|
-
return runId !== null && runId < cutoff;
|
|
40963
|
-
});
|
|
40964
|
-
if (stale.length === 0) return;
|
|
40965
|
-
await deleteAndPurgeEventObjects(this.backend, stale, dirPrefix);
|
|
40966
|
-
this.logger.debug(`Pruned ${stale.length} superseded deployment-event stream(s) for ${this.stackName} (${this.region})`);
|
|
40967
|
-
}
|
|
40968
|
-
warnOnce(message) {
|
|
40969
|
-
if (this.warnedOnce) {
|
|
40970
|
-
this.logger.debug(message);
|
|
40971
|
-
return;
|
|
40972
|
-
}
|
|
40973
|
-
this.warnedOnce = true;
|
|
40974
|
-
this.logger.warn(`${message} — continuing; deployment events are best-effort and never block the run.`);
|
|
40975
|
-
}
|
|
40976
|
-
};
|
|
40977
|
-
var DeploymentEventsReader = class {
|
|
40978
|
-
backend;
|
|
40979
|
-
constructor(backend) {
|
|
40980
|
-
this.backend = backend;
|
|
40981
|
-
}
|
|
40982
|
-
async listRegions(stackName) {
|
|
40983
|
-
const prefix = `${this.backend.prefix}/${stackName}/`;
|
|
40984
|
-
const keys = await this.backend.listRawKeys(prefix);
|
|
40985
|
-
const regions = /* @__PURE__ */ new Set();
|
|
40986
|
-
for (const key of keys) {
|
|
40987
|
-
const segments = key.slice(prefix.length).split("/");
|
|
40988
|
-
if (segments.length === 3 && segments[1] === "deployments" && segments[0]) regions.add(segments[0]);
|
|
40989
|
-
}
|
|
40990
|
-
return [...regions].sort();
|
|
40991
|
-
}
|
|
40992
|
-
async listRuns(stackName, region) {
|
|
40993
|
-
const key = deploymentEventsIndexKey(this.backend.prefix, stackName, region);
|
|
40994
|
-
try {
|
|
40995
|
-
const raw = await this.backend.getRawObject(key);
|
|
40996
|
-
if (raw !== null) {
|
|
40997
|
-
const parsed = JSON.parse(raw);
|
|
40998
|
-
if (Array.isArray(parsed.runs)) return parsed.runs;
|
|
40999
|
-
}
|
|
41000
|
-
} catch {}
|
|
41001
|
-
const dirPrefix = `${this.backend.prefix}/${stackName}/${region}/deployments/`;
|
|
41002
|
-
const runIds = (await this.backend.listRawKeys(dirPrefix)).filter((k) => k.endsWith(".jsonl")).map((k) => k.slice(dirPrefix.length, -6)).sort().reverse();
|
|
41003
|
-
return Promise.all(runIds.map((runId) => this.summarizeRunFromJsonl(stackName, region, runId)));
|
|
41004
|
-
}
|
|
41005
|
-
async summarizeRunFromJsonl(stackName, region, runId) {
|
|
41006
|
-
const fallback = {
|
|
41007
|
-
runId,
|
|
41008
|
-
command: "deploy",
|
|
41009
|
-
cdkdVersion: "unknown",
|
|
41010
|
-
startedAt: "",
|
|
41011
|
-
finishedAt: "",
|
|
41012
|
-
result: "UNKNOWN",
|
|
41013
|
-
eventCount: 0
|
|
41014
|
-
};
|
|
41015
|
-
let events = null;
|
|
41016
|
-
try {
|
|
41017
|
-
events = await this.readRunEvents(stackName, region, runId);
|
|
41018
|
-
} catch {
|
|
41019
|
-
return fallback;
|
|
41020
|
-
}
|
|
41021
|
-
if (events === null || events.length === 0) return fallback;
|
|
41022
|
-
const started = events.find((e) => e.eventType === "RUN_STARTED");
|
|
41023
|
-
let finished;
|
|
41024
|
-
for (const e of events) if (e.eventType === "RUN_FINISHED") finished = e;
|
|
41025
|
-
return {
|
|
41026
|
-
runId,
|
|
41027
|
-
command: started?.command ?? fallback.command,
|
|
41028
|
-
cdkdVersion: started?.cdkdVersion ?? fallback.cdkdVersion,
|
|
41029
|
-
startedAt: started?.timestamp ?? fallback.startedAt,
|
|
41030
|
-
finishedAt: finished?.timestamp ?? fallback.finishedAt,
|
|
41031
|
-
result: finished?.result ?? "UNKNOWN",
|
|
41032
|
-
eventCount: events.length
|
|
41033
|
-
};
|
|
41034
|
-
}
|
|
41035
|
-
async readRunEvents(stackName, region, runId) {
|
|
41036
|
-
const key = deploymentEventsKey(this.backend.prefix, stackName, region, runId);
|
|
41037
|
-
const raw = await this.backend.getRawObject(key);
|
|
41038
|
-
if (raw === null) return null;
|
|
41039
|
-
const events = [];
|
|
41040
|
-
for (const line of raw.split("\n")) {
|
|
41041
|
-
const trimmed = line.trim();
|
|
41042
|
-
if (!trimmed) continue;
|
|
41043
|
-
try {
|
|
41044
|
-
events.push(JSON.parse(trimmed));
|
|
41045
|
-
} catch {}
|
|
41046
|
-
}
|
|
41047
|
-
return events;
|
|
41048
|
-
}
|
|
41049
|
-
async pruneRuns(stackName, region, opts = {}) {
|
|
41050
|
-
const dirPrefix = deploymentsDirPrefix(this.backend.prefix, stackName, region);
|
|
41051
|
-
const keys = await this.backend.listRawKeys(dirPrefix);
|
|
41052
|
-
const runIdsDesc = keys.map((k) => runIdFromJsonlKey(k, dirPrefix)).filter((id) => id !== null).sort().reverse();
|
|
41053
|
-
const indexKey = deploymentEventsIndexKey(this.backend.prefix, stackName, region);
|
|
41054
|
-
const indexExisted = keys.includes(indexKey);
|
|
41055
|
-
if (opts.all === true) {
|
|
41056
|
-
const toDelete = runIdsDesc.map((id) => deploymentEventsKey(this.backend.prefix, stackName, region, id));
|
|
41057
|
-
const earlierVersions = await deleteAndPurgeEventObjects(this.backend, [...toDelete, indexKey], dirPrefix, "whole-dir");
|
|
41058
|
-
return {
|
|
41059
|
-
deletedRunIds: runIdsDesc,
|
|
41060
|
-
remainingRunIds: [],
|
|
41061
|
-
indexDeleted: indexExisted,
|
|
41062
|
-
...earlierVersions !== void 0 && { earlierVersions }
|
|
41063
|
-
};
|
|
41064
|
-
}
|
|
41065
|
-
const noGuards = opts.keep === void 0 && opts.olderThanMs === void 0;
|
|
41066
|
-
const keep = opts.keep ?? (noGuards ? 20 : void 0);
|
|
41067
|
-
const protectedByCount = keep === void 0 ? /* @__PURE__ */ new Set() : new Set(runIdsDesc.slice(0, keep));
|
|
41068
|
-
let candidates = runIdsDesc.filter((id) => !protectedByCount.has(id));
|
|
41069
|
-
if (opts.olderThanMs !== void 0) {
|
|
41070
|
-
const cutoff = (opts.now ?? /* @__PURE__ */ new Date()).getTime() - opts.olderThanMs;
|
|
41071
|
-
candidates = candidates.filter((id) => {
|
|
41072
|
-
const t = runIdTimestampMs(id);
|
|
41073
|
-
return t !== null && t < cutoff;
|
|
41074
|
-
});
|
|
41075
|
-
}
|
|
41076
|
-
if (candidates.length === 0) return {
|
|
41077
|
-
deletedRunIds: [],
|
|
41078
|
-
remainingRunIds: runIdsDesc,
|
|
41079
|
-
indexDeleted: false
|
|
41080
|
-
};
|
|
41081
|
-
const deletedSet = new Set(candidates);
|
|
41082
|
-
const deleteKeys = candidates.map((id) => deploymentEventsKey(this.backend.prefix, stackName, region, id));
|
|
41083
|
-
const remainingRunIds = runIdsDesc.filter((id) => !deletedSet.has(id));
|
|
41084
|
-
if (remainingRunIds.length === 0) {
|
|
41085
|
-
await deleteAndPurgeEventObjects(this.backend, [...deleteKeys, indexKey], dirPrefix);
|
|
41086
|
-
return {
|
|
41087
|
-
deletedRunIds: candidates,
|
|
41088
|
-
remainingRunIds,
|
|
41089
|
-
indexDeleted: indexExisted
|
|
41090
|
-
};
|
|
41091
|
-
}
|
|
41092
|
-
await this.rewriteIndexAfterPrune(indexKey, stackName, region, deletedSet);
|
|
41093
|
-
await deleteAndPurgeEventObjects(this.backend, deleteKeys, dirPrefix);
|
|
41094
|
-
return {
|
|
41095
|
-
deletedRunIds: candidates,
|
|
41096
|
-
remainingRunIds,
|
|
41097
|
-
indexDeleted: false
|
|
41098
|
-
};
|
|
41099
|
-
}
|
|
41100
|
-
async rewriteIndexAfterPrune(indexKey, stackName, region, deletedRunIds) {
|
|
41101
|
-
let raw;
|
|
41102
|
-
try {
|
|
41103
|
-
raw = await this.backend.getRawObject(indexKey);
|
|
41104
|
-
} catch {
|
|
41105
|
-
return;
|
|
41106
|
-
}
|
|
41107
|
-
if (raw === null) return;
|
|
41108
|
-
let parsed;
|
|
41109
|
-
try {
|
|
41110
|
-
parsed = JSON.parse(raw);
|
|
41111
|
-
} catch {
|
|
41112
|
-
return;
|
|
41113
|
-
}
|
|
41114
|
-
if (!Array.isArray(parsed.runs)) return;
|
|
41115
|
-
const remaining = parsed.runs.filter((r) => !deletedRunIds.has(r.runId));
|
|
41116
|
-
if (remaining.length === parsed.runs.length) return;
|
|
41117
|
-
const file = {
|
|
41118
|
-
indexVersion: 1,
|
|
41119
|
-
stackName,
|
|
41120
|
-
region,
|
|
41121
|
-
runs: remaining,
|
|
41122
|
-
lastModified: Date.now()
|
|
41123
|
-
};
|
|
41124
|
-
await this.backend.putRawObject(indexKey, JSON.stringify(file, null, 2));
|
|
41125
|
-
}
|
|
41126
|
-
};
|
|
41127
|
-
|
|
41128
41220
|
//#endregion
|
|
41129
41221
|
//#region src/deployment/orphan-adoption.ts
|
|
41130
41222
|
function templateStillDeclares(template, record, nameProperties) {
|
|
@@ -41668,58 +41760,6 @@ async function orphanUntakenResumes(deps, stackName, finalResources) {
|
|
|
41668
41760
|
}
|
|
41669
41761
|
}
|
|
41670
41762
|
|
|
41671
|
-
//#endregion
|
|
41672
|
-
//#region src/deployment/kept-in-history.ts
|
|
41673
|
-
function keptInEarlierRecords(records) {
|
|
41674
|
-
const out = [];
|
|
41675
|
-
for (const record of records) for (const [logicalId, raw] of Object.entries(record.resources)) {
|
|
41676
|
-
if (raw === null || typeof raw !== "object") continue;
|
|
41677
|
-
const r = raw;
|
|
41678
|
-
if (typeof r.resourceType !== "string" || typeof r.physicalId !== "string") continue;
|
|
41679
|
-
if (r.physicalId === "") continue;
|
|
41680
|
-
if (!shouldRetainResource(r.deletionPolicy)) continue;
|
|
41681
|
-
out.push({
|
|
41682
|
-
logicalId,
|
|
41683
|
-
resourceType: r.resourceType,
|
|
41684
|
-
physicalId: r.physicalId,
|
|
41685
|
-
...record.writtenAt !== void 0 && { keptAt: record.writtenAt }
|
|
41686
|
-
});
|
|
41687
|
-
}
|
|
41688
|
-
return out;
|
|
41689
|
-
}
|
|
41690
|
-
function keptInEventHistory(runs, stackName) {
|
|
41691
|
-
const made = /* @__PURE__ */ new Map();
|
|
41692
|
-
const out = [];
|
|
41693
|
-
for (const events of runs) for (const e of events) {
|
|
41694
|
-
if (e.stackName !== stackName || typeof e.logicalId !== "string") continue;
|
|
41695
|
-
if (typeof e.resourceType !== "string") continue;
|
|
41696
|
-
if (e.eventType === "RESOURCE_SUCCEEDED" && (e.operation === "CREATE" || e.operation === "UPDATE") && typeof e.physicalId === "string" && e.physicalId !== "") made.set(e.logicalId, {
|
|
41697
|
-
resourceType: e.resourceType,
|
|
41698
|
-
physicalId: e.physicalId
|
|
41699
|
-
});
|
|
41700
|
-
else if (e.eventType === "RESOURCE_RETAINED") {
|
|
41701
|
-
const m = made.get(e.logicalId);
|
|
41702
|
-
if (m !== void 0 && m.resourceType === e.resourceType) {
|
|
41703
|
-
const keptAt = Date.parse(e.timestamp);
|
|
41704
|
-
out.push({
|
|
41705
|
-
logicalId: e.logicalId,
|
|
41706
|
-
...m,
|
|
41707
|
-
...Number.isFinite(keptAt) && { keptAt }
|
|
41708
|
-
});
|
|
41709
|
-
}
|
|
41710
|
-
}
|
|
41711
|
-
}
|
|
41712
|
-
return out;
|
|
41713
|
-
}
|
|
41714
|
-
async function loadKeptInHistory(sources, stackName, region) {
|
|
41715
|
-
const runsOf = stackName.split("~")[0];
|
|
41716
|
-
const [records, runs] = await Promise.all([sources.earlierStateResources(stackName, region).catch(() => []), (async () => {
|
|
41717
|
-
const listed = (await sources.listRuns(runsOf, region)).slice(0, 20);
|
|
41718
|
-
return (await Promise.all(listed.map((r) => sources.readRunEvents(runsOf, region, r.runId).catch(() => null)))).filter((e) => e !== null).reverse();
|
|
41719
|
-
})().catch(() => [])]);
|
|
41720
|
-
return [...keptInEarlierRecords(records), ...keptInEventHistory(runs, stackName)];
|
|
41721
|
-
}
|
|
41722
|
-
|
|
41723
41763
|
//#endregion
|
|
41724
41764
|
//#region src/provisioning/canonicalize-properties.ts
|
|
41725
41765
|
function makeCanonicalizePropertiesFn(registry) {
|
|
@@ -43101,7 +43141,7 @@ async function requireDeploymentApproval(args) {
|
|
|
43101
43141
|
} catch (error) {
|
|
43102
43142
|
throw error instanceof Error ? markNonRetryable(error) : error;
|
|
43103
43143
|
}
|
|
43104
|
-
if (!approved) throw markNonRetryable(new
|
|
43144
|
+
if (!approved) throw markNonRetryable(new DeploymentNotApprovedError(safeMsg`Deployment of stack ${args.stackName} was not approved (--require-approval=${level}). Nothing was changed.`));
|
|
43105
43145
|
return approve.autoApproves !== true;
|
|
43106
43146
|
}
|
|
43107
43147
|
async function checkDestructivePlan(args) {
|
|
@@ -43158,7 +43198,7 @@ async function requireOutputsOnlyApproval(args) {
|
|
|
43158
43198
|
} catch (error) {
|
|
43159
43199
|
throw error instanceof Error ? markNonRetryable(error) : error;
|
|
43160
43200
|
}
|
|
43161
|
-
if (!approved) throw markNonRetryable(new
|
|
43201
|
+
if (!approved) throw markNonRetryable(new DeploymentNotApprovedError(safeMsg`Deployment of stack ${args.stackName} was not approved (--require-approval=any-change). Nothing was changed.`));
|
|
43162
43202
|
}
|
|
43163
43203
|
function isNoEchoPromotionOnly(change) {
|
|
43164
43204
|
return change.changeType === "UPDATE" && (change.attributeChanges?.length ?? 0) === 0 && (change.propertyChanges?.length ?? 0) > 0 && change.propertyChanges.every((pc) => pc.noEchoPromoted === true);
|
|
@@ -47599,7 +47639,7 @@ function ccAutoRouteUpdateFailureRemedy(logicalId, resourceType, autoRoutedPrope
|
|
|
47599
47639
|
|
|
47600
47640
|
//#endregion
|
|
47601
47641
|
//#region src/deployment/deploy-engine/update-in-place.ts
|
|
47602
|
-
async function updateInPlace(engine, { conditions, counts, currentProps, currentPropsAsWritten, currentResource, dependencies, desiredForSkipCheckAsWritten, logicalId, noEchoHeldPaths, parameterValues, progress, renderer, resolvedProps, resourceType, stackName, stateResources, template, updateReplacePolicy, updateSecrets, reattach }) {
|
|
47642
|
+
async function updateInPlace(engine, { changedProperties, conditions, counts, currentProps, currentPropsAsWritten, currentResource, dependencies, desiredForSkipCheckAsWritten, logicalId, noEchoHeldPaths, parameterValues, progress, renderer, resolvedProps, resourceType, stackName, stateResources, template, updateReplacePolicy, updateSecrets, reattach }) {
|
|
47603
47643
|
engine.logger.debug(safeMsg`Updating ${logicalId} (${resourceType})`);
|
|
47604
47644
|
const updateDecision = engine.providerRegistry.getProviderFor({
|
|
47605
47645
|
resourceType,
|
|
@@ -47625,10 +47665,11 @@ async function updateInPlace(engine, { conditions, counts, currentProps, current
|
|
|
47625
47665
|
}
|
|
47626
47666
|
const updateProvider = updateDecision.provider;
|
|
47627
47667
|
const updateProps = updateDecision.provisionedBy === "cc-api" ? withoutGeneratedFallbackName(resourceType, resolvedProps, preparePropertiesForCcApi(engine.providerRegistry, resourceType, resolvedProps, logicalId, "omit")) : resolvedProps;
|
|
47628
|
-
const
|
|
47668
|
+
const previousWithNoEchoHeld = noEchoHeldPaths.size === 0 ? currentPropsAsWritten : {
|
|
47629
47669
|
...currentPropsAsWritten,
|
|
47630
47670
|
...Object.fromEntries([...noEchoHeldPaths].filter((path) => Object.prototype.hasOwnProperty.call(updateProps, path)).map((path) => [path, updateProps[path]]))
|
|
47631
|
-
}
|
|
47671
|
+
};
|
|
47672
|
+
const { previous: previousWithSecretsDropped, dropped: droppedPrincipalKinds } = withUnchangedSecretPrincipalLists(resourceType, currentResource.physicalId, previousWithNoEchoHeld, desiredForSkipCheckAsWritten);
|
|
47632
47673
|
const reattached = reattach === true ? withRecreatedAttachmentsDropped({
|
|
47633
47674
|
resourceType,
|
|
47634
47675
|
templateProperties: template?.Resources?.[logicalId]?.Properties,
|
|
@@ -47638,6 +47679,9 @@ async function updateInPlace(engine, { conditions, counts, currentProps, current
|
|
|
47638
47679
|
conditions
|
|
47639
47680
|
}) : void 0;
|
|
47640
47681
|
const previousForUpdate = reattached?.previous ?? previousWithSecretsDropped;
|
|
47682
|
+
const changedForProvider = new Set(changedProperties);
|
|
47683
|
+
for (const key of /* @__PURE__ */ new Set([...Object.keys(previousWithNoEchoHeld), ...Object.keys(previousForUpdate)])) if (keyOrderFreeJson(previousForUpdate[key]) !== keyOrderFreeJson(previousWithNoEchoHeld[key])) changedForProvider.add(key);
|
|
47684
|
+
if (changedForProvider.size === 0) for (const key of /* @__PURE__ */ new Set([...Object.keys(updateProps), ...Object.keys(previousForUpdate)])) changedForProvider.add(key);
|
|
47641
47685
|
if (reattached !== void 0) engine.logger.info(safeMsg` ${logicalId} (${resourceType}) lost its attachment to ${reattached.parents.join(", ")}, which this deploy re-created under the same name: attaching it again`);
|
|
47642
47686
|
if (droppedPrincipalKinds.length > 0) {
|
|
47643
47687
|
const kinds = droppedPrincipalKinds.join(" / ");
|
|
@@ -47655,7 +47699,8 @@ async function updateInPlace(engine, { conditions, counts, currentProps, current
|
|
|
47655
47699
|
expectedRegion: engine.stackRegion,
|
|
47656
47700
|
recordedAttributes: currentResource.attributes,
|
|
47657
47701
|
...inlinePolicyClaimed && { inlinePolicyClaimed },
|
|
47658
|
-
...removal.context
|
|
47702
|
+
...removal.context,
|
|
47703
|
+
changedProperties: changedForProvider
|
|
47659
47704
|
})), logicalId, void 0, void 0, updateProvider);
|
|
47660
47705
|
if (result.sentNothing === true) engine.replacementRun.updatesThatSentNothing.add(logicalId);
|
|
47661
47706
|
if (result.wasReplaced === true && result.outcome === "partial") engine.replacementRun.replacedOldMaySurvive.set(logicalId, result.oldResourceSurvivor === "kept" ? "kept" : "unconfirmed");
|
|
@@ -47915,6 +47960,10 @@ async function updateInPlace(engine, { conditions, counts, currentProps, current
|
|
|
47915
47960
|
engine.logger.info(safeMsg`${updatePrefix}${formatResourceLine("updated", logicalId, resourceType)}`);
|
|
47916
47961
|
}
|
|
47917
47962
|
|
|
47963
|
+
//#endregion
|
|
47964
|
+
//#region src/provisioning/changed-properties-consumers.ts
|
|
47965
|
+
const CHANGED_PROPERTIES_CONSUMER_TYPES = /* @__PURE__ */ new Set(["AWS::ServiceDiscovery::Service"]);
|
|
47966
|
+
|
|
47918
47967
|
//#endregion
|
|
47919
47968
|
//#region src/deployment/deploy-engine/read-provenance-moved.ts
|
|
47920
47969
|
function occurrences(value, token) {
|
|
@@ -48285,6 +48334,7 @@ async function provisionUpdate(engine, logicalId, change, stateResources, stackN
|
|
|
48285
48334
|
for (const path of provenanceMoved.paths) rewrittenPaths.add(path);
|
|
48286
48335
|
if (provenanceMoved.paths.size > 0) engine.logger.info(safeMsg`${logicalId} is sent: ${[...provenanceMoved.paths].sort().join(", ")} read a secret-derived value at a newer version than ${logicalId} was deployed with (its upstream changed since then)`);
|
|
48287
48336
|
const recordMatchesDesired = movedMasked.size === 0 && rewrittenPaths.size === 0 && keyOrderFreeJson(desiredForSkipCheckAsWritten) === keyOrderFreeJson(currentPropsAsWritten);
|
|
48337
|
+
const movedAsWritten = (key) => movedMasked.has(key) || rewrittenPaths.has(key) || keyOrderFreeJson(desiredForSkipCheckAsWritten[key]) !== keyOrderFreeJson(currentPropsAsWritten[key]);
|
|
48288
48338
|
const applyAttributeOnlyUpdate = (attributeChanges) => {
|
|
48289
48339
|
const attrSummary = attributeChanges.map((a) => `${a.attribute}: ${a.oldValue ?? "(unset)"} → ${a.newValue ?? "(unset)"}`).join(", ");
|
|
48290
48340
|
engine.logger.info(safeMsg` ↻ ${logicalId} (${resourceType}) attribute update: ${attrSummary}`);
|
|
@@ -48389,7 +48439,7 @@ async function provisionUpdate(engine, logicalId, change, stateResources, stackN
|
|
|
48389
48439
|
lowered.push(pc);
|
|
48390
48440
|
continue;
|
|
48391
48441
|
}
|
|
48392
|
-
const moved =
|
|
48442
|
+
const moved = movedAsWritten(pc.path);
|
|
48393
48443
|
const conditionalVerdict = moved && !typeChanged && isReplacementCeiling(pc) ? engine.diffCalculator.conditionalReplacementVerdict?.(resourceType, pc.path, currentPropsAsWritten[pc.path], desiredForSkipCheckAsWritten[pc.path]) : void 0;
|
|
48394
48444
|
if (moved && conditionalVerdict !== false) {
|
|
48395
48445
|
warnWitnessReplacement(pc.path);
|
|
@@ -48435,7 +48485,8 @@ async function provisionUpdate(engine, logicalId, change, stateResources, stackN
|
|
|
48435
48485
|
const parameterHeldKeys = /* @__PURE__ */ new Set();
|
|
48436
48486
|
const parameterUnreadablePaths = [];
|
|
48437
48487
|
if (pendingParameterLeaves.size > 0 && !typeChanged) {
|
|
48438
|
-
const
|
|
48488
|
+
const consumerReadsBack = CHANGED_PROPERTIES_CONSUMER_TYPES.has(resourceType) && currentResource.provisionedBy !== "cc-api" && [...pendingParameterLeaves.keys()].some((key) => !parameterCreateOnlyPaths.has(key) && otherFreshAt(key).length === 0);
|
|
48489
|
+
const read = parameterCreateOnlyPaths.size > 0 || recordMatchesDesired || consumerReadsBack ? await readOnce() : void 0;
|
|
48439
48490
|
const verdictAt = (key) => {
|
|
48440
48491
|
if (read === void 0) return "not-readable";
|
|
48441
48492
|
if ("failure" in read) return read.failure;
|
|
@@ -48443,14 +48494,13 @@ async function provisionUpdate(engine, logicalId, change, stateResources, stackN
|
|
|
48443
48494
|
return liveHoldsFreshLeaves(read.live[key], pendingParameterLeaves.get(key) ?? []) ? "held" : "differs";
|
|
48444
48495
|
};
|
|
48445
48496
|
const lowered = [];
|
|
48446
|
-
|
|
48447
|
-
replacedAnyway = recreateDirectionFor(engine.options, stackName, logicalId) !== void 0 || lostWithParent !== void 0 || (change.propertyChanges ?? []).some((other) => other.requiresReplacement && (!parameterCreateOnlyPaths.has(other.path) || movedAt(other.path)));
|
|
48497
|
+
replacedAnyway = recreateDirectionFor(engine.options, stackName, logicalId) !== void 0 || lostWithParent !== void 0 || (change.propertyChanges ?? []).some((other) => other.requiresReplacement && (!parameterCreateOnlyPaths.has(other.path) || movedAsWritten(other.path)));
|
|
48448
48498
|
for (const pc of change.propertyChanges ?? []) {
|
|
48449
48499
|
if (!parameterCreateOnlyPaths.has(pc.path)) {
|
|
48450
48500
|
lowered.push(pc);
|
|
48451
48501
|
continue;
|
|
48452
48502
|
}
|
|
48453
|
-
if (
|
|
48503
|
+
if (movedAsWritten(pc.path)) {
|
|
48454
48504
|
if (pc.requiresReplacement) warnWitnessReplacement(pc.path);
|
|
48455
48505
|
lowered.push(pc);
|
|
48456
48506
|
continue;
|
|
@@ -48603,6 +48653,11 @@ async function provisionUpdate(engine, logicalId, change, stateResources, stackN
|
|
|
48603
48653
|
diffSawTokenChange: diffMovedServiceToken(change)
|
|
48604
48654
|
});
|
|
48605
48655
|
if (serviceTokenRefusal !== void 0) throw markRefusedBeforeApplying(markNonRetryable(new CdkdError(renderServiceTokenRefusal([serviceTokenRefusal], stackName, createSecretMasker(updateSecrets)), SERVICE_TOKEN_CHANGE_REFUSED)));
|
|
48656
|
+
const changedProperties = new Set([.../* @__PURE__ */ new Set([
|
|
48657
|
+
...Object.keys(desiredForSkipCheckAsWritten),
|
|
48658
|
+
...Object.keys(currentPropsAsWritten),
|
|
48659
|
+
...Object.keys(resolvedProps)
|
|
48660
|
+
])].filter((key) => movedAsWritten(key) || !confirmedPaths.has(key) && (pendingParameterLeaves.has(key) || otherFreshAt(key).length > 0)));
|
|
48606
48661
|
let previousForProvider = currentPropsAsWritten;
|
|
48607
48662
|
for (const coordinate of witness?.confirmed ?? []) {
|
|
48608
48663
|
const value = valueAtCoordinate(resolvedProps, coordinate);
|
|
@@ -48613,6 +48668,7 @@ async function provisionUpdate(engine, logicalId, change, stateResources, stackN
|
|
|
48613
48668
|
counts,
|
|
48614
48669
|
currentProps,
|
|
48615
48670
|
currentPropsAsWritten: previousForProvider,
|
|
48671
|
+
changedProperties,
|
|
48616
48672
|
currentResource,
|
|
48617
48673
|
dependencies,
|
|
48618
48674
|
desiredForSkipCheckAsWritten,
|
|
@@ -50120,7 +50176,14 @@ var DeployEngine = class {
|
|
|
50120
50176
|
inlinePolicyClaimedFor: (...args) => this.inlinePolicyClaimedFor(...args),
|
|
50121
50177
|
recordEvent: (...args) => this.recordEvent(...args),
|
|
50122
50178
|
guardedReplacementCreate: (input, create) => guardedReplacementCreate(this, input, create),
|
|
50123
|
-
generatedNameGuarded: (logicalId) => this.generatedNameGuard?.candidate(logicalId) !== void 0
|
|
50179
|
+
generatedNameGuarded: (logicalId) => this.generatedNameGuard?.candidate(logicalId) !== void 0,
|
|
50180
|
+
rollbackRetainedCopies: (stackName) => {
|
|
50181
|
+
const reader = new DeploymentEventsReader(this.stateBackend);
|
|
50182
|
+
return loadRollbackRetainedCopies({
|
|
50183
|
+
listRuns: (s, r) => reader.listRuns(s, r),
|
|
50184
|
+
readRunEvents: (s, r, id) => reader.readRunEvents(s, r, id)
|
|
50185
|
+
}, stackName, this.stackRegion);
|
|
50186
|
+
}
|
|
50124
50187
|
};
|
|
50125
50188
|
}
|
|
50126
50189
|
resolverContextDeps() {
|
|
@@ -50389,5 +50452,5 @@ function sameGenerationClaimsOf(record) {
|
|
|
50389
50452
|
}
|
|
50390
50453
|
|
|
50391
50454
|
//#endregion
|
|
50392
|
-
export { DeploymentEventsStore as $, refuseMalformedOutputsForDestroy as $a, validateAssetBucketName as $c, carriesDynamicReference as $i, hasPlainPrototype$1 as $l, noEchoComparisonForTemplate as $n, templateResourceTypes as $o, customResourceResponseExpirationWarning as $r, recordPhysicalNameCopy as $s, updatePartialReason as $t, inheritedProvenanceForChildDiff as A, malformedLocalResourcesWarning as Aa, importableOutputKeys as Ac, keepHeldTokenProvenance as Ai, resolveSkipPrefix as Al, formatDestructiveChange as An, hasNoCloudControlHandlers as Ao, markDeleteStarted as Ar, logOnlyValueCount as As, replayFailedOperations as At, conditionFingerprint as B, malformedResourcePropertiesWarning as Ba, WorkGraph as Bc, AWS_CREDENTIAL_ENV_KEYS as Bi, findLargeInlineResources as Bl, red as Bn, toCfnInteger as Bo, CC_BROKEN_REASON as Br, scrubResourceRecord as Bs, recordUnderIdIsNotOwn as Bt, hasCdkAutoDeleteTag as C, isReadableOrphanRecord as Ca, splitImportedOps as Cc, s3BucketDomainName as Ci, synthesisStatusMessage as Cl, isExportAliasCollision as Cn, unreadableResourceEntries as Co, unsupportedFinalSnapshotError as Cr, redactForState as Cs, makeForeignHolderScan as Ct, IMPLICIT_DELETE_DEPENDENCIES as D, malformedExportSourceWarning as Da, hasReadableExportSet as Dc, resolveDynamicReferences as Di, resolveApp as Dl, maskingRetryLogger as Dn, unwrittenCreateOnlyReplacement as Do, withCreateTokenLedger as Dr, createUnionSecretMasker as Ds, isAccessDeniedError as Dt, markRefusedBeforeApplying as E, malformedExportNamesWarning as Ea, exportNamesCarriedFrom as Ec, s3BucketWebsiteUrl as Ei, loadCdkJson as El, DEFAULT_RESOURCE_WARN_AFTER_MS as En, findSilentDropProperties as Eo, reserveStackCreateToken as Er, carryLogOnlyValues as Es, chunks as Et, findNestedTemplateTreeDefect as F, malformedOrphansWarning as Fa, shouldRetainResource as Fc, assertFlagRoleArn as Fi, warnDeprecatedNoPrefixCliFlag as Fl, replacedDeleteFailureVerdict as Fn, isStatefulRecreateTargetSync as Fo, refuseMalformedDesiredTags as Fr, unionOfSecretBags as Fs, isJournaledOrphan as Ft, diffSecurity as G, refuseDivergentRecordRegionForDestroy as Ga, AssetModeResolver as Gc, classifyReplaySecretRegion as Gi, PARTITION_TABLE as Gl, isSupersededResourceRecord as Gn, configIntegerRefusal as Go, waitForLambdaFunctionActive as Gr, isUncertifiedBaselineMaskPosition as Gs, findNestedStackTypeChanges as Gt, parentSuppliedValues as H, malformedScrubResourceEntriesRefusalMessage as Ha, createAssetRedirectResolver as Hc, callerEnvCredentials as Hi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Hl, addSuperseded as Hn, coerceCfnBoolean as Ho, ccBrokenReason as Hr, withoutPhysicalNameCopies as Hs, resolveReplacementOldType as Ht, isAbsoluteAssetPath as I, malformedOutputsRefusalMessage as Ia, stackInstanceIdCarriedFrom as Ic, assertSendableRoleArn as Ii, ssmResolvedValueType as Il, bold as In, renderStatefulReason as Io, tagMapAsList as Ir, createSecretMasker as Is, isReplacementOrphan as It, mergeNoChangeOutputs as J, refuseMalformedOrphanRecordsForDestroy as Ja, ensureAssetStorage as Jc, coerceParameterTypedValue as Ji, AssemblyReader as Jl, supersededHeldByOtherTypeWarning as Jn, replayWarn as Jo, isCustomResourceType as Jr, inheritNestedStackParameterAssociations as Js, REDACTED_DELETE_ADDRESS_SKIP_REASON as Jt, isSecretBearingReferenceString as K, refuseMalformedNestedChildOutputs as Ka, BOOTSTRAP_MARKER_PREFIX as Kc, producerRegionsFromState as Ki, canonicalizeRegion as Kl, removeSuperseded as Kn, configStringRefusal as Ko, TemplateNoEchoReresolver as Kr, pathCrossesDottedKey as Ks, getCurrentProducerRegions as Kt, listNestedTemplateRows as L, malformedOutputsWarning as La, AssetPublisher as Lc, explicitRoleArnOrThrow as Li, CFN_TEMPLATE_BODY_LIMIT as Ll, cyan as Ln, WARM_THROUGHPUT_MEMBERS as Lo, tagPlanWarning as Lr, errorCauseChain as Ls, planFailedOps as Lt, findServiceTokenRefusals as M, malformedOrphanRecordsWarning as Ma, isReadableBag as Mc, recordedOutputReferenceRegions as Mi, resolveStateBucketWithDefaultAndSource as Ml, destroyStackRecordsView as Mn, shownType as Mo, DBPROXY_TAG_OPTIONS as Mr, recordLogOnlyParameterValue as Ms, removeProtectionTypeList as Mt, serviceTokenBlockingReason as N, malformedOrphanRowsKeptWarning as Na, orphansAfterRollback as Nc, recordedReferenceRegions as Ni, resolveUseCdkBootstrapAssets as Nl, getStackRecords as Nn, MULTI_REGION_RECREATE_BLOCKED_TYPES as No, planTagDiff as Nr, recordLogOnlyValue as Ns, recordAfterRollbackUpdate as Nt, computeImplicitDeleteEdges as O, malformedLocalOutputsWarning as Oa, hasReasonlessBaselineRefusal as Oc, producerLookupOver as Oi, resolveAutoAssetStorage as Ol, constructPathOf as On, withoutSilentDropProperties as Oo, acquireIdempotencyToken as Or, hasMaskableValues as Os, lookupEachName as Ot, childTemplateLoader as P, malformedOrphansRefusalMessage as Pa, orphansCarriedFrom as Pc, applyRoleArnIfSet as Pi, stateBucketExistenceConfirmed as Pl, withStackRecords as Pn, isStatefulRecreateTargetForReplace as Po, readTagList as Pr, shareLogOnlyValues as Ps, demoteSupersededOrphans as Pt, DeploymentEventsReader as Q, refuseMalformedOutputs as Qa, readBootstrapMarkerBody as Qc, isImpossibleEmptyStoredAttribute as Qi, hasOwnKey as Ql, noEchoAttributeNamesOf as Qn, prefetchCreateOnlyPropertyPaths as Qo, applyCustomResourceResponseExpiration as Qr, recordAttributeIdCopy as Qs, updatePartialMessage as Qt, renderNestedTemplateTreeDefect as R, malformedRenderedContainersWarning as Ra, isSensitiveAttributeName as Rc, isIamRoleArn as Ri, CFN_TEMPLATE_URL_LIMIT as Rl, gray as Rn, coerceWarmThroughput as Ro, definedAttributes as Rr, maskSecretsInError as Rs, planRollback as Rt, S3_AUTO_DELETE_OBJECTS_TAG as S, hasReadableResources as Sa, withStackInstanceIdWithheld as Sc, s3BucketArn as Si, Synthesizer as Sl, collectPublishedOutputNames as Sn, unreadableOrphanRecords as So, refusesFinalSnapshot as Sr, markSameGenerationBag as Ss, loadJournaledOrphans as St, getPriorAttempts as T, malformedDriftResourcePropertiesWarning as Ta, describeRegionValueKind as Tc, s3BucketRegionalDomainName as Ti, getLegacyStateBucketName as Tl, DEFAULT_RESOURCE_TIMEOUT_MS as Tn, findActionableSilentDrops as To, ledgerForStack as Tr, snapshotPassProvenance as Ts, formatResourceLine as Tt, readRecordedConditionVerdicts as U, malformedStateRefusalMessage as Ua, loadPublishableAssetManifest as Uc, envCredentialsAreAssumedRole as Ui, decodeListingKey as Ul, deleteSupersededEntry as Un, coerceCfnInteger as Uo, isCustomResource as Ur, DYNAMIC_REFERENCE_TOKEN_SCAN as Us, seedsDeleteFirstGuard as Ut, conditionInputsFrom as V, malformedResourcesWarning as Va, buildAssetRedirectMap as Vc, applyCallerIdentityCredentials as Vi, uploadCfnTemplate as Vl, yellow as Vn, toFiniteNumber as Vo, ProviderRegistry as Vr, withPhysicalNameCopies as Vs, replacementNeverSwapped as Vt, withResourceDeadline as W, previewableOrphanRecords as Wa, rewriteTemplateAssetReferences as Wc, classifyRecordedSecretRegion as Wi, expectedOwnerParam as Wl, holdsSupersededResources as Wn, configBooleanRefusal as Wo, wouldReturnToSdkProvider as Wr, dynamicReferenceTokens as Ws, orphanNeedsIdentity as Wt, makeSiblingClaimReader as X, refuseMalformedOrphansForDestroy as Xa, isCrossRegionRedirect as Xc, parameterTypeMayLoseSecretIdentity as Xi, processStackMessages as Xl, supersededResourcesOf as Xn, requireConfigObject as Xo, withPrintingSecrets as Xr, recoverMaskedOutput as Xs, redactedDeleteAddressFields as Xt, makeCanonicalizePropertiesFn as Y, refuseMalformedOrphans as Ya, getBootstrapMarkerKey as Yc, isUnboundTemplateParameter as Yi, StageLoadError as Yl, supersededHolderOf as Yn, requireConfigArray as Yo, getCurrentResourceSecrets as Yr, recordNestedStackParameterExpressions as Ys, isRedactedRecordedValue as Yt, planOrphanAdoption as Z, refuseMalformedOrphansForOrphan as Za, parseBootstrapMarker as Zc, getAccountInfo as Zi, defineOwnKey as Zl, withoutSuperseded as Zn, requireConfigString as Zo, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Zr, physicalNameCopiesOf as Zs, redactedDeleteAddressSkip as Zt, deleteTableWithIndexBusyRetry as _, accountArgs as _a, applyCrossPrefixScan as _c, DiffCalculator as _i, runDockerForeground as _l, exportNameNoEchoParameters as _n, repairMalformedOutputsForReadOnly as _o, buildFinalSnapshotIdentifier as _r, readbackPathFor as _s, deleteJournaledOrphans as _t, isProtectionValueActive as a, isStalePlaceholderArnAttribute as aa, recordNoEchoAttributeValues as ac, deleteIndeterminateGuards as ai, describeDockerExecFailure as al, retiredNameGenerationsLeaving as an, refuseMalformedResourceEntriesForImportSave as ao, maskEventTextWithBoundBags as ar, DagBuilder as as, displacedOpClause as at, renderAssemblyPathEscape as au, waitForIndexesSettled as b, hasReadableOrphans as ba, isNotImplemented as bc, poisonRenderedSpellingsCollidingIn as bi, AssetManifestLoader as bl, noEchoParameterValueSeed as bn, repairMalformedResourcesForReadOnly as bo, effectiveDeletionPolicy as br, valueAtCoordinate as bs, isHandledOrphan as bt, DynamoDBGlobalTableProvider as c, withSharedDrainBudget as ca, wholeStringLeavesOf as cc, withIndeterminateGuard as ci, finchSecretArgvRefusal as cl, reachableDivergentParameters as cn, refuseMalformedResourcePropertiesForDrift as co, secretNamePrintingBag as cr, isMarkedCoordinate as cs, getNestedRevertRun as ct, injectedAwsRegionValue as cu, compensateRemovedDeletionProtection as d, declaresNoEcho as da, LockManager as dc, disableInstanceApiTermination as di, isDockerClientEnvKey as dl, displayTextOrWithheld as dn, refuseMalformedResourcesForDeploy as do, secretNamedRecordNeedles as dr, maskWholeValue as ds, revertNestedChildFromJournal as dt, carriesFetchableDynamicReference as ea, splitGetAttStringForm as ec, CloudControlProvider as ei, validateContainerRepoName as el, nameGenerationCarriedFrom as en, refuseMalformedResourceAttributesForOrphan as eo, noEchoExactEchoLeavesOf as er, describeTypeWithThrottleRetry as es, pendingRequestCount as et, nullPrototypeRecord as eu, deleteBudgetKey as f, JSON_LISTING_HOLE_VALUE as fa, isLockInfoExpired as fc, ec2InstanceProtectionSite as fi, isMalformedEnvKey as fl, exportAliasCollisionScrubWarning as fn, refuseMalformedResourcesForDestroy as fo, stateSecretNameNeedles as fr, maskedLeafCoordinatesOf as fs, revertedNestedRowIds as ft, INDEX_SETTLE_POLL_INTERVAL_MS as g, UNREADABLE_RESOURCES_MAP_ROW as ga, CrossPrefixScanCache as gc, reEnableInstanceApiTermination as gi, redactedDockerCause as gl, carriedExportAliasExposure as gn, repairMalformedOrphansForReadOnly as go, PRE_DELETE_SNAPSHOT_TYPES as gr, passedNoEchoParametersOf as gs, withNestedStackContext as gt, DELETE_INDEX_WAIT_PROCEED_NOTE as h, UNREADABLE_ORPHANS_CONTAINER_ROW as ha, CrossPrefixReadError as hc, reDisableInstanceApiTermination as hi, redactedCause as hl, secretSafeKeyDisplay as hn, repairMalformedOrphanRecordsForReadOnly as ho, ATOMIC_FINAL_SNAPSHOT_TYPES as hr, noEchoOutputsComparison as hs, getCurrentNestedStackContext as ht, PROTECTION_PROPERTY_BY_TYPE as i, cfnRefValueFromPhysicalId as ia, recordMaskOnlyValuesIn as ic, UNSPECIFIED_SKIP_REASON as ii, describeDockerCapturedOutput as il, retiredNameGenerationsAfter as in, refuseMalformedResourceEntriesForImport as io, journaledOrphanPrintingBag as ir, sameLambdaFunctionAddress as is, NESTED_PENDING_PARENT_REASON as it, displayAssemblyPath as iu, deferredServiceTokenWarning as j, malformedOrphanRecordsRefusalMessage as ja, importableOutputs as jc, outputReferenceProvenanceOf as ji, resolveStateBucketWithDefault as jl, awaitInFlightSibling as jn, findReplacedReadersOfRecreateTargets as jo, DBPROXY_TAGS_WHAT as jr, printingCorpusOf as js, replayRollback as jt, crossStackOutputProvenanceSource as k, malformedLocalResourceEntriesWarning as ka, hasUnverifiableParameterRefusal as kc, refuseUnreadableCdkCrossAccountRefs as ki, resolveCaptureObservedState as kl, findDestructiveChanges as kn, NO_CC_HANDLERS_REASON as ko, isRefusedByName as kr, literalSplitDelimitersOf as ks, withApiLimit as kt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as l, parameterInputsFor as la, WHOLE_DYNAMIC_REFERENCE_PATTERN as lc, isWaitAbandonedError as li, formatDockerLoginError as ll, resourcesNamingDeclaredParameter as ln, refuseMalformedResourcePropertiesForExport as lo, secretNamePrintingBags as lr, maskAtCoordinates as ls, nestedChildStackName as lt, clearBucketRegionCache as lu, resolveDynamoDbDeleteBudgetMs as m, STATE_RESOURCES_MALFORMED as ma, rebuildClientForBucketRegion as mc, observeThenDisableInstanceApiTermination as mi, redactDockerArgvValues as ml, secretBearingStateKeyWarning as mn, refuseMalformedState as mo, extractDeploymentEventError as mr, noEchoLeavesOf as ms, collectNestedChildUnaddressed as mt, recordedProtectionEvidence as n, keepsSecretReferenceToken as na, provenPublicValue as nc, unchangedBehindSecretReference as ni, buildDockerImage as nl, nameScopeOf as nn, refuseMalformedResourceEntriesForDeploy as no, createReadOnlyAttributeHealerFactory as nr, canonicalLambdaFunctionName as ns, keptForRetainedRecord as nt, absoluteAssemblyPathEscape as nu, perType as o, refStateLookupFromResource as oa, recordNoEchoParameterFreshValue as oc, deleteLeftInPlace as oi, describeDockerFailure as ol, computeParameterTaint as on, refuseMalformedResourceEntriesForOrphan as oo, namingSecretsWithRecordedNoEcho as or, TemplateParser as os, displacedPhysicalIdShown as ot, resolveAssemblyPath as ou, resolveDynamoDbDeleteBudgetClock as p, STATE_REGION_DIVERGED as pa, S3StateBackend as pc, isTerminationProtectionPropagationError as pi, partitionSensitiveEnv as pl, secretBearing as pn, refuseMalformedResourcesForExport as po, storedSecretNameNeedles as pr, noEchoCoordinatesOf as ps, withNestedRevertRun as pt, keptWholeReasonText as q, refuseMalformedOrphanRecords as qa, assertAssetBucketRegion as qc, regionLessSecretName as qi, derivePartitionAndUrlSuffix as ql, supersededAfterRollback as qn, readConfigString as qo, readsNoEchoDeleteValues as qr, identityKeyFor as qs, inheritProducerRegions as qt, recordedProtectionNote as r, AWS_NO_VALUE as ra, recordMaskOnlyValue as rc, RollbackInlinePolicyWriters as ri, resolveDockerContextDirectory as rl, retiredAfterRollback as rn, refuseMalformedResourceEntriesForDestroy as ro, completedReplayEntries as rr, lambdaFunctionNameForMask as rs, recordRetainedForReadoption as rt, describeFileReadFailure as ru, readProtection as s, parseWebACLArn as sa, recordProvenPublicExpression as sc, deleteSkipReason as si, dockerSpawnEnvWithSensitive as sl, namesAnyDeclaredParameter as sn, refuseMalformedResourcePropertiesForDestroy as so, orphanRecordsPrintingBag as sr, canonicalCoordinates as ss, dropSettledNestedJournals as st, injectAwsRegion as su, DeployEngine as t, isNamelessDynamicReferenceError as ta, carriesSecretMask as tc, slowCcOperationTimeoutMs as ti, buildDenyExternalAccessPolicy as tl, nameGenerationHighWaterOf as tn, refuseMalformedResourceEntries as to, noEchoParameterNamesOf as tr, withRetry as ts, resolvePendingCloudControlRequests as tt, ownValue as tu, beginDeleteWait as u, passedParameterClassesOf as ua, isSingleDynamicReferenceToken as uc, markWaitAbandoned as ui, getDockerCmd as ul, WITHHELD_NAME_DISPLAY as un, refuseMalformedResourcePropertiesForOrphan as uo, secretNamedAttributeNamesOf as ur, maskReadbackAtCoordinates as us, recordDisplacedSkips as ut, resolveBucketRegion as uu, maskedLogger as v, deployRefusesOrphanRowsReason as va, crossPrefixDeniedWarning as vc, INTRINSIC_KEYS as vi, runDockerStreaming as vl, exportNameSecretExposure as vn, repairMalformedResourceEntriesForReadOnly as vo, ccRoutedFinalSnapshotError as vr, readsNoEchoSource as vs, dropFailedCommands as vt, isTruthyCfnBoolean as w, isReadableResourceEntry as wa, acceptedCreateOnlyDropsOf as wc, s3BucketDualStackDomainName as wi, getDefaultStateBucketName as wl, bindingSkippedOutputs as wn, withheldAccountClause as wo, earliestDefined as wr, recordReferenceProvenanceEntry as ws, sameJournaledOrphans as wt, ECR_AUTO_DELETE_IMAGES_TAG as x, hasReadableOutputs as xa, stackInstanceIdOf as xc, isSettledInstanceState as xi, getDockerImageBySourceHash as xl, collectDeclaredOutputNames as xn, unpreviewableOrphanRecords as xo, isFinalSnapshotError as xr, liveMatchesUnresolvedTokenFrame as xs, journaledOrphanLines as xt, relayedIndexBusyDelete as y, displayLogicalId as ya, isAccessDenied$1 as yc, IntrinsicFunctionResolver as yi, warnFinchArgvExposure as yl, isWholeDynamicReferenceValue as yn, repairMalformedResourcePropertiesForReadOnly as yo, createPreDeleteFinalSnapshot as yr, recordedNoEchoValuesOf as ys, dropFailedHint as yt, templateIdentity as z, malformedResourceEntriesWarning as za, stringifyValue as zc, sendableAssumeRoleCommand as zi, MIGRATE_TMP_PREFIX as zl, green as zn, isWarmThroughputDecrease as zo, stringifyIfAssigned as zr, maskSecretsInText as zs, recheckFailedPlan as zt };
|
|
50393
|
-
//# sourceMappingURL=deploy-engine-
|
|
50455
|
+
export { resolvePendingCloudControlRequests as $, refuseMalformedOutputsForDestroy as $a, validateAssetBucketName as $c, carriesDynamicReference as $i, hasPlainPrototype$1 as $l, noEchoParameterNamesOf as $n, templateResourceTypes as $o, customResourceResponseExpirationWarning as $r, recordPhysicalNameCopy as $s, nameGenerationHighWaterOf as $t, inheritedProvenanceForChildDiff as A, malformedLocalResourcesWarning as Aa, importableOutputKeys as Ac, keepHeldTokenProvenance as Ai, resolveSkipPrefix as Al, destroyStackRecordsView as An, hasNoCloudControlHandlers as Ao, markDeleteStarted as Ar, logOnlyValueCount as As, removeProtectionTypeList as At, conditionFingerprint as B, malformedResourcePropertiesWarning as Ba, WorkGraph as Bc, AWS_CREDENTIAL_ENV_KEYS as Bi, findLargeInlineResources as Bl, addSuperseded as Bn, toCfnInteger as Bo, CC_BROKEN_REASON as Br, scrubResourceRecord as Bs, resolveReplacementOldType as Bt, hasCdkAutoDeleteTag as C, isReadableOrphanRecord as Ca, splitImportedOps as Cc, s3BucketDomainName as Ci, synthesisStatusMessage as Cl, DEFAULT_RESOURCE_TIMEOUT_MS as Cn, unreadableResourceEntries as Co, reserveStackCreateToken as Cr, redactForState as Cs, formatResourceLine as Ct, IMPLICIT_DELETE_DEPENDENCIES as D, malformedExportSourceWarning as Da, hasReadableExportSet as Dc, resolveDynamicReferences as Di, resolveApp as Dl, findDestructiveChanges as Dn, unwrittenCreateOnlyReplacement as Do, DeploymentEventsStore as Dr, createUnionSecretMasker as Ds, withApiLimit as Dt, markRefusedBeforeApplying as E, malformedExportNamesWarning as Ea, exportNamesCarriedFrom as Ec, s3BucketWebsiteUrl as Ei, loadCdkJson as El, constructPathOf as En, findSilentDropProperties as Eo, DeploymentEventsReader as Er, carryLogOnlyValues as Es, lookupEachName as Et, findNestedTemplateTreeDefect as F, malformedOrphansWarning as Fa, shouldRetainResource as Fc, assertFlagRoleArn as Fi, warnDeprecatedNoPrefixCliFlag as Fl, cyan as Fn, isStatefulRecreateTargetSync as Fo, refuseMalformedDesiredTags as Fr, unionOfSecretBags as Fs, planFailedOps as Ft, diffSecurity as G, refuseDivergentRecordRegionForDestroy as Ga, AssetModeResolver as Gc, classifyReplaySecretRegion as Gi, PARTITION_TABLE as Gl, supersededAfterRollback as Gn, configIntegerRefusal as Go, waitForLambdaFunctionActive as Gr, isUncertifiedBaselineMaskPosition as Gs, inheritProducerRegions as Gt, parentSuppliedValues as H, malformedScrubResourceEntriesRefusalMessage as Ha, createAssetRedirectResolver as Hc, callerEnvCredentials as Hi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Hl, holdsSupersededResources as Hn, coerceCfnBoolean as Ho, ccBrokenReason as Hr, withoutPhysicalNameCopies as Hs, orphanNeedsIdentity as Ht, isAbsoluteAssetPath as I, malformedOutputsRefusalMessage as Ia, stackInstanceIdCarriedFrom as Ic, assertSendableRoleArn as Ii, ssmResolvedValueType as Il, gray as In, renderStatefulReason as Io, tagMapAsList as Ir, createSecretMasker as Is, planRollback as It, mergeNoChangeOutputs as J, refuseMalformedOrphanRecordsForDestroy as Ja, ensureAssetStorage as Jc, coerceParameterTypedValue as Ji, AssemblyReader as Jl, supersededResourcesOf as Jn, replayWarn as Jo, isCustomResourceType as Jr, inheritNestedStackParameterAssociations as Js, redactedDeleteAddressFields as Jt, isSecretBearingReferenceString as K, refuseMalformedNestedChildOutputs as Ka, BOOTSTRAP_MARKER_PREFIX as Kc, producerRegionsFromState as Ki, canonicalizeRegion as Kl, supersededHeldByOtherTypeWarning as Kn, configStringRefusal as Ko, TemplateNoEchoReresolver as Kr, pathCrossesDottedKey as Ks, REDACTED_DELETE_ADDRESS_SKIP_REASON as Kt, listNestedTemplateRows as L, malformedOutputsWarning as La, AssetPublisher as Lc, explicitRoleArnOrThrow as Li, CFN_TEMPLATE_BODY_LIMIT as Ll, green as Ln, WARM_THROUGHPUT_MEMBERS as Lo, tagPlanWarning as Lr, errorCauseChain as Ls, recheckFailedPlan as Lt, findServiceTokenRefusals as M, malformedOrphanRecordsWarning as Ma, isReadableBag as Mc, recordedOutputReferenceRegions as Mi, resolveStateBucketWithDefaultAndSource as Ml, withStackRecords as Mn, shownType as Mo, DBPROXY_TAG_OPTIONS as Mr, recordLogOnlyParameterValue as Ms, demoteSupersededOrphans as Mt, serviceTokenBlockingReason as N, malformedOrphanRowsKeptWarning as Na, orphansAfterRollback as Nc, recordedReferenceRegions as Ni, resolveUseCdkBootstrapAssets as Nl, replacedDeleteFailureVerdict as Nn, MULTI_REGION_RECREATE_BLOCKED_TYPES as No, planTagDiff as Nr, recordLogOnlyValue as Ns, isJournaledOrphan as Nt, computeImplicitDeleteEdges as O, malformedLocalOutputsWarning as Oa, hasReasonlessBaselineRefusal as Oc, producerLookupOver as Oi, resolveAutoAssetStorage as Ol, formatDestructiveChange as On, withoutSilentDropProperties as Oo, extractDeploymentEventError as Or, hasMaskableValues as Os, replayFailedOperations as Ot, childTemplateLoader as P, malformedOrphansRefusalMessage as Pa, orphansCarriedFrom as Pc, applyRoleArnIfSet as Pi, stateBucketExistenceConfirmed as Pl, bold as Pn, isStatefulRecreateTargetForReplace as Po, readTagList as Pr, shareLogOnlyValues as Ps, isReplacementOrphan as Pt, pendingRequestCount as Q, refuseMalformedOutputs as Qa, readBootstrapMarkerBody as Qc, isImpossibleEmptyStoredAttribute as Qi, hasOwnKey as Ql, noEchoExactEchoLeavesOf as Qn, prefetchCreateOnlyPropertyPaths as Qo, applyCustomResourceResponseExpiration as Qr, recordAttributeIdCopy as Qs, nameGenerationCarriedFrom as Qt, renderNestedTemplateTreeDefect as R, malformedRenderedContainersWarning as Ra, isSensitiveAttributeName as Rc, isIamRoleArn as Ri, CFN_TEMPLATE_URL_LIMIT as Rl, red as Rn, coerceWarmThroughput as Ro, definedAttributes as Rr, maskSecretsInError as Rs, recordUnderIdIsNotOwn as Rt, S3_AUTO_DELETE_OBJECTS_TAG as S, hasReadableResources as Sa, withStackInstanceIdWithheld as Sc, s3BucketArn as Si, Synthesizer as Sl, bindingSkippedOutputs as Sn, unreadableOrphanRecords as So, ledgerForStack as Sr, markSameGenerationBag as Ss, sameJournaledOrphans as St, getPriorAttempts as T, malformedDriftResourcePropertiesWarning as Ta, describeRegionValueKind as Tc, s3BucketRegionalDomainName as Ti, getLegacyStateBucketName as Tl, maskingRetryLogger as Tn, findActionableSilentDrops as To, acquireIdempotencyToken as Tr, snapshotPassProvenance as Ts, isAccessDeniedError as Tt, readRecordedConditionVerdicts as U, malformedStateRefusalMessage as Ua, loadPublishableAssetManifest as Uc, envCredentialsAreAssumedRole as Ui, decodeListingKey as Ul, isSupersededResourceRecord as Un, coerceCfnInteger as Uo, isCustomResource as Ur, DYNAMIC_REFERENCE_TOKEN_SCAN as Us, findNestedStackTypeChanges as Ut, conditionInputsFrom as V, malformedResourcesWarning as Va, buildAssetRedirectMap as Vc, applyCallerIdentityCredentials as Vi, uploadCfnTemplate as Vl, deleteSupersededEntry as Vn, toFiniteNumber as Vo, ProviderRegistry as Vr, withPhysicalNameCopies as Vs, seedsDeleteFirstGuard as Vt, withResourceDeadline as W, previewableOrphanRecords as Wa, rewriteTemplateAssetReferences as Wc, classifyRecordedSecretRegion as Wi, expectedOwnerParam as Wl, removeSuperseded as Wn, configBooleanRefusal as Wo, wouldReturnToSdkProvider as Wr, dynamicReferenceTokens as Ws, getCurrentProducerRegions as Wt, makeSiblingClaimReader as X, refuseMalformedOrphansForDestroy as Xa, isCrossRegionRedirect as Xc, parameterTypeMayLoseSecretIdentity as Xi, processStackMessages as Xl, noEchoAttributeNamesOf as Xn, requireConfigObject as Xo, withPrintingSecrets as Xr, recoverMaskedOutput as Xs, updatePartialMessage as Xt, makeCanonicalizePropertiesFn as Y, refuseMalformedOrphans as Ya, getBootstrapMarkerKey as Yc, isUnboundTemplateParameter as Yi, StageLoadError as Yl, withoutSuperseded as Yn, requireConfigArray as Yo, getCurrentResourceSecrets as Yr, recordNestedStackParameterExpressions as Ys, redactedDeleteAddressSkip as Yt, planOrphanAdoption as Z, refuseMalformedOrphansForOrphan as Za, parseBootstrapMarker as Zc, getAccountInfo as Zi, defineOwnKey as Zl, noEchoComparisonForTemplate as Zn, requireConfigString as Zo, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Zr, physicalNameCopiesOf as Zs, updatePartialReason as Zt, deleteTableWithIndexBusyRetry as _, accountArgs as _a, applyCrossPrefixScan as _c, DiffCalculator as _i, runDockerForeground as _l, isWholeDynamicReferenceValue as _n, repairMalformedOutputsForReadOnly as _o, effectiveDeletionPolicy as _r, readbackPathFor as _s, dropFailedHint as _t, isProtectionValueActive as a, isStalePlaceholderArnAttribute as aa, recordNoEchoAttributeValues as ac, deleteIndeterminateGuards as ai, describeDockerExecFailure as al, namesAnyDeclaredParameter as an, refuseMalformedResourceEntriesForImportSave as ao, orphanRecordsPrintingBag as ar, DagBuilder as as, dropSettledNestedJournals as at, renderAssemblyPathEscape as au, waitForIndexesSettled as b, hasReadableOrphans as ba, isNotImplemented as bc, poisonRenderedSpellingsCollidingIn as bi, AssetManifestLoader as bl, collectPublishedOutputNames as bn, repairMalformedResourcesForReadOnly as bo, unsupportedFinalSnapshotError as br, valueAtCoordinate as bs, loadJournaledOrphans as bt, DynamoDBGlobalTableProvider as c, withSharedDrainBudget as ca, wholeStringLeavesOf as cc, withIndeterminateGuard as ci, finchSecretArgvRefusal as cl, WITHHELD_NAME_DISPLAY as cn, refuseMalformedResourcePropertiesForDrift as co, secretNamedAttributeNamesOf as cr, isMarkedCoordinate as cs, recordDisplacedSkips as ct, injectedAwsRegionValue as cu, compensateRemovedDeletionProtection as d, declaresNoEcho as da, LockManager as dc, disableInstanceApiTermination as di, isDockerClientEnvKey as dl, secretBearing as dn, refuseMalformedResourcesForDeploy as do, storedSecretNameNeedles as dr, maskWholeValue as ds, withNestedRevertRun as dt, carriesFetchableDynamicReference as ea, splitGetAttStringForm as ec, CloudControlProvider as ei, validateContainerRepoName as el, nameScopeOf as en, refuseMalformedResourceAttributesForOrphan as eo, createReadOnlyAttributeHealerFactory as er, describeTypeWithThrottleRetry as es, keptForRetainedRecord as et, nullPrototypeRecord as eu, deleteBudgetKey as f, JSON_LISTING_HOLE_VALUE as fa, isLockInfoExpired as fc, ec2InstanceProtectionSite as fi, isMalformedEnvKey as fl, secretBearingStateKeyWarning as fn, refuseMalformedResourcesForDestroy as fo, ATOMIC_FINAL_SNAPSHOT_TYPES as fr, maskedLeafCoordinatesOf as fs, collectNestedChildUnaddressed as ft, INDEX_SETTLE_POLL_INTERVAL_MS as g, UNREADABLE_RESOURCES_MAP_ROW as ga, CrossPrefixScanCache as gc, reEnableInstanceApiTermination as gi, redactedDockerCause as gl, exportNameSecretExposure as gn, repairMalformedOrphansForReadOnly as go, createPreDeleteFinalSnapshot as gr, passedNoEchoParametersOf as gs, dropFailedCommands as gt, DELETE_INDEX_WAIT_PROCEED_NOTE as h, UNREADABLE_ORPHANS_CONTAINER_ROW as ha, CrossPrefixReadError as hc, reDisableInstanceApiTermination as hi, redactedCause as hl, exportNameNoEchoParameters as hn, repairMalformedOrphanRecordsForReadOnly as ho, ccRoutedFinalSnapshotError as hr, noEchoOutputsComparison as hs, deleteJournaledOrphans as ht, PROTECTION_PROPERTY_BY_TYPE as i, cfnRefValueFromPhysicalId as ia, recordMaskOnlyValuesIn as ic, UNSPECIFIED_SKIP_REASON as ii, describeDockerCapturedOutput as il, computeParameterTaint as in, refuseMalformedResourceEntriesForImport as io, namingSecretsWithRecordedNoEcho as ir, sameLambdaFunctionAddress as is, displacedPhysicalIdShown as it, displayAssemblyPath as iu, deferredServiceTokenWarning as j, malformedOrphanRecordsRefusalMessage as ja, importableOutputs as jc, outputReferenceProvenanceOf as ji, resolveStateBucketWithDefault as jl, getStackRecords as jn, findReplacedReadersOfRecreateTargets as jo, DBPROXY_TAGS_WHAT as jr, printingCorpusOf as js, recordAfterRollbackUpdate as jt, crossStackOutputProvenanceSource as k, malformedLocalResourceEntriesWarning as ka, hasUnverifiableParameterRefusal as kc, refuseUnreadableCdkCrossAccountRefs as ki, resolveCaptureObservedState as kl, awaitInFlightSibling as kn, NO_CC_HANDLERS_REASON as ko, isRefusedByName as kr, literalSplitDelimitersOf as ks, replayRollback as kt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as l, parameterInputsFor as la, WHOLE_DYNAMIC_REFERENCE_PATTERN as lc, isWaitAbandonedError as li, formatDockerLoginError as ll, displayTextOrWithheld as ln, refuseMalformedResourcePropertiesForExport as lo, secretNamedRecordNeedles as lr, maskAtCoordinates as ls, revertNestedChildFromJournal as lt, clearBucketRegionCache as lu, resolveDynamoDbDeleteBudgetMs as m, STATE_RESOURCES_MALFORMED as ma, rebuildClientForBucketRegion as mc, observeThenDisableInstanceApiTermination as mi, redactDockerArgvValues as ml, carriedExportAliasExposure as mn, refuseMalformedState as mo, buildFinalSnapshotIdentifier as mr, noEchoLeavesOf as ms, withNestedStackContext as mt, recordedProtectionEvidence as n, keepsSecretReferenceToken as na, provenPublicValue as nc, unchangedBehindSecretReference as ni, buildDockerImage as nl, retiredNameGenerationsAfter as nn, refuseMalformedResourceEntriesForDeploy as no, journaledOrphanPrintingBag as nr, canonicalLambdaFunctionName as ns, NESTED_PENDING_PARENT_REASON as nt, absoluteAssemblyPathEscape as nu, perType as o, refStateLookupFromResource as oa, recordNoEchoParameterFreshValue as oc, deleteLeftInPlace as oi, describeDockerFailure as ol, reachableDivergentParameters as on, refuseMalformedResourceEntriesForOrphan as oo, secretNamePrintingBag as or, TemplateParser as os, getNestedRevertRun as ot, resolveAssemblyPath as ou, resolveDynamoDbDeleteBudgetClock as p, STATE_REGION_DIVERGED as pa, S3StateBackend as pc, isTerminationProtectionPropagationError as pi, partitionSensitiveEnv as pl, secretSafeKeyDisplay as pn, refuseMalformedResourcesForExport as po, PRE_DELETE_SNAPSHOT_TYPES as pr, noEchoCoordinatesOf as ps, getCurrentNestedStackContext as pt, keptWholeReasonText as q, refuseMalformedOrphanRecords as qa, assertAssetBucketRegion as qc, regionLessSecretName as qi, derivePartitionAndUrlSuffix as ql, supersededHolderOf as qn, readConfigString as qo, readsNoEchoDeleteValues as qr, identityKeyFor as qs, isRedactedRecordedValue as qt, recordedProtectionNote as r, AWS_NO_VALUE as ra, recordMaskOnlyValue as rc, RollbackInlinePolicyWriters as ri, resolveDockerContextDirectory as rl, retiredNameGenerationsLeaving as rn, refuseMalformedResourceEntriesForDestroy as ro, maskEventTextWithBoundBags as rr, lambdaFunctionNameForMask as rs, displacedOpClause as rt, describeFileReadFailure as ru, readProtection as s, parseWebACLArn as sa, recordProvenPublicExpression as sc, deleteSkipReason as si, dockerSpawnEnvWithSensitive as sl, resourcesNamingDeclaredParameter as sn, refuseMalformedResourcePropertiesForDestroy as so, secretNamePrintingBags as sr, canonicalCoordinates as ss, nestedChildStackName as st, injectAwsRegion as su, DeployEngine as t, isNamelessDynamicReferenceError as ta, carriesSecretMask as tc, slowCcOperationTimeoutMs as ti, buildDenyExternalAccessPolicy as tl, retiredAfterRollback as tn, refuseMalformedResourceEntries as to, completedReplayEntries as tr, withRetry as ts, recordRetainedForReadoption as tt, ownValue as tu, beginDeleteWait as u, passedParameterClassesOf as ua, isSingleDynamicReferenceToken as uc, markWaitAbandoned as ui, getDockerCmd as ul, exportAliasCollisionScrubWarning as un, refuseMalformedResourcePropertiesForOrphan as uo, stateSecretNameNeedles as ur, maskReadbackAtCoordinates as us, revertedNestedRowIds as ut, resolveBucketRegion as uu, maskedLogger as v, deployRefusesOrphanRowsReason as va, crossPrefixDeniedWarning as vc, INTRINSIC_KEYS as vi, runDockerStreaming as vl, noEchoParameterValueSeed as vn, repairMalformedResourceEntriesForReadOnly as vo, isFinalSnapshotError as vr, readsNoEchoSource as vs, isHandledOrphan as vt, isTruthyCfnBoolean as w, isReadableResourceEntry as wa, acceptedCreateOnlyDropsOf as wc, s3BucketDualStackDomainName as wi, getDefaultStateBucketName as wl, DEFAULT_RESOURCE_WARN_AFTER_MS as wn, withheldAccountClause as wo, withCreateTokenLedger as wr, recordReferenceProvenanceEntry as ws, chunks as wt, ECR_AUTO_DELETE_IMAGES_TAG as x, hasReadableOutputs as xa, stackInstanceIdOf as xc, isSettledInstanceState as xi, getDockerImageBySourceHash as xl, isExportAliasCollision as xn, unpreviewableOrphanRecords as xo, earliestDefined as xr, liveMatchesUnresolvedTokenFrame as xs, makeForeignHolderScan as xt, relayedIndexBusyDelete as y, displayLogicalId as ya, isAccessDenied$1 as yc, IntrinsicFunctionResolver as yi, warnFinchArgvExposure as yl, collectDeclaredOutputNames as yn, repairMalformedResourcePropertiesForReadOnly as yo, refusesFinalSnapshot as yr, recordedNoEchoValuesOf as ys, journaledOrphanLines as yt, templateIdentity as z, malformedResourceEntriesWarning as za, stringifyValue as zc, sendableAssumeRoleCommand as zi, MIGRATE_TMP_PREFIX as zl, yellow as zn, isWarmThroughputDecrease as zo, stringifyIfAssigned as zr, maskSecretsInText as zs, replacementNeverSwapped as zt };
|
|
50456
|
+
//# sourceMappingURL=deploy-engine-CYVt2NQR.js.map
|