@go-to-k/cdkd 0.289.6 → 0.289.7
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-eIVYMrmW.js → asg-provider-D6Zyjgrr.js} +3 -3
- package/dist/{asg-provider-eIVYMrmW.js.map → asg-provider-D6Zyjgrr.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-CpmvgRtm.js → deploy-engine-DrTOY3f-.js} +125 -43
- package/dist/deploy-engine-DrTOY3f-.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{logger-BK-B0slT.js → logger-DTEUzYP_.js} +15 -2
- package/dist/logger-DTEUzYP_.js.map +1 -0
- package/dist/{program-B3I46yaG.js → program-Ca0PiFL-.js} +218 -76
- package/dist/{program-B3I46yaG.js.map → program-Ca0PiFL-.js.map} +1 -1
- package/dist/{version-DCxqZhgp.js → version-DJGTB4Rm.js} +2 -2
- package/dist/{version-DCxqZhgp.js.map → version-DJGTB4Rm.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-CpmvgRtm.js.map +0 -1
- package/dist/logger-BK-B0slT.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { n as isVersionOnlyInvocation, t as getCdkdVersion } from "./version-
|
|
2
|
+
import { n as isVersionOnlyInvocation, t as getCdkdVersion } from "./version-DJGTB4Rm.js";
|
|
3
3
|
|
|
4
4
|
//#region src/cli/pipe-close-handler.ts
|
|
5
5
|
/**
|
|
@@ -74,7 +74,7 @@ async function main() {
|
|
|
74
74
|
console.log(getCdkdVersion());
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
|
-
const { buildProgram } = await import("./program-
|
|
77
|
+
const { buildProgram } = await import("./program-Ca0PiFL-.js");
|
|
78
78
|
const program = buildProgram();
|
|
79
79
|
const args = reorderArgs(process.argv);
|
|
80
80
|
await program.parseAsync(args);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { d as applyDefaultNameForFallback, f as explicitNamePropertyFor, g as looksLikeCdkdGeneratedName, h as getCurrentStackName, m as generateResourceNameWithFallback, n as getLogger, p as generateResourceName, r as isStdoutReservedForPayload, s as getLiveRenderer, v as withStackName, y as
|
|
1
|
+
import { b as displaySafe, d as applyDefaultNameForFallback, f as explicitNamePropertyFor, g as looksLikeCdkdGeneratedName, h as getCurrentStackName, m as generateResourceNameWithFallback, n as getLogger, p as generateResourceName, r as isStdoutReservedForPayload, s as getLiveRenderer, v as withStackName, y as UNRENDERABLE } from "./logger-DTEUzYP_.js";
|
|
2
2
|
import { t as awsClientDefaults } from "./aws-client-defaults-D-iYiIJ6.js";
|
|
3
|
-
import { t as getCdkdVersion } from "./version-
|
|
3
|
+
import { t as getCdkdVersion } from "./version-DJGTB4Rm.js";
|
|
4
4
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
5
5
|
import { createHash, randomUUID } from "node:crypto";
|
|
6
6
|
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -9134,29 +9134,44 @@ var UnknownRollbackJournalVersionError = class extends Error {
|
|
|
9134
9134
|
foundVersion;
|
|
9135
9135
|
stackName;
|
|
9136
9136
|
constructor(foundVersion, stackName) {
|
|
9137
|
-
super(`Rollback journal for '${stackName}' has journalVersion ${foundVersion}, but this cdkd only understands up to ${1}. Upgrade cdkd to roll this stack back.`);
|
|
9137
|
+
super(`Rollback journal for '${safeJournalText(stackName)}' has journalVersion ${foundVersion}, but this cdkd only understands up to ${1}. Upgrade cdkd to roll this stack back.`);
|
|
9138
9138
|
this.name = "UnknownRollbackJournalVersionError";
|
|
9139
9139
|
this.foundVersion = foundVersion;
|
|
9140
9140
|
this.stackName = stackName;
|
|
9141
9141
|
}
|
|
9142
9142
|
};
|
|
9143
9143
|
/**
|
|
9144
|
+
* One spelling of "this value came from an S3 key or a rollback-journal record,
|
|
9145
|
+
* and is about to be interpolated into a message a terminal will render"
|
|
9146
|
+
* (issue #3064). Call it for a stack name, a parse detail, or a journal field.
|
|
9147
|
+
* `grep safeJournalText` answers the scope; this comment does not.
|
|
9148
|
+
*/
|
|
9149
|
+
function safeJournalText(value) {
|
|
9150
|
+
return displaySafe(value, { asciiOnly: true }) || "<unrenderable>";
|
|
9151
|
+
}
|
|
9152
|
+
/**
|
|
9144
9153
|
* Parse + validate a journal body. Throws
|
|
9145
9154
|
* {@link UnknownRollbackJournalVersionError} on a newer version, and a plain
|
|
9146
9155
|
* Error on a structurally-invalid body.
|
|
9147
9156
|
*/
|
|
9148
9157
|
function parseRollbackJournal(bodyString, stackName) {
|
|
9158
|
+
const shownStack = safeJournalText(stackName);
|
|
9149
9159
|
let parsed;
|
|
9150
9160
|
try {
|
|
9151
9161
|
parsed = JSON.parse(bodyString);
|
|
9152
9162
|
} catch (err) {
|
|
9153
|
-
|
|
9163
|
+
const detail = safeJournalText(err instanceof Error ? err.message : String(err));
|
|
9164
|
+
throw new Error(`Rollback journal for '${shownStack}' is not valid JSON: ${detail}`);
|
|
9154
9165
|
}
|
|
9155
|
-
if (typeof parsed !== "object" || parsed === null) throw new Error(`Rollback journal for '${
|
|
9166
|
+
if (typeof parsed !== "object" || parsed === null) throw new Error(`Rollback journal for '${shownStack}' is malformed (not an object).`);
|
|
9156
9167
|
const j = parsed;
|
|
9157
|
-
if (typeof j.journalVersion !== "number" || j.journalVersion < 1)
|
|
9168
|
+
if (typeof j.journalVersion !== "number" || j.journalVersion < 1) {
|
|
9169
|
+
const raw = j.journalVersion;
|
|
9170
|
+
const shown = safeJournalText(raw === null ? "null" : raw === void 0 ? "undefined" : raw);
|
|
9171
|
+
throw new Error(`Rollback journal for '${shownStack}' has an invalid 'journalVersion' (${shown}).`);
|
|
9172
|
+
}
|
|
9158
9173
|
if (j.journalVersion > 1) throw new UnknownRollbackJournalVersionError(j.journalVersion, stackName);
|
|
9159
|
-
if (!Array.isArray(j.segments)) throw new Error(`Rollback journal for '${
|
|
9174
|
+
if (!Array.isArray(j.segments)) throw new Error(`Rollback journal for '${shownStack}' is missing a 'segments' array.`);
|
|
9160
9175
|
return {
|
|
9161
9176
|
journalVersion: j.journalVersion,
|
|
9162
9177
|
stackName: j.stackName ?? stackName,
|
|
@@ -9224,12 +9239,6 @@ const CUSTOM_RESOURCE_RESPONSE_PREFIX = "custom-resource-responses";
|
|
|
9224
9239
|
* `for nested-stack child`), so a user grepping CI logs for one of them found
|
|
9225
9240
|
* two of three. `subject` now varies only the noun.
|
|
9226
9241
|
*/
|
|
9227
|
-
/**
|
|
9228
|
-
* Stand-in for a value with nothing renderable left after sanitization. Named
|
|
9229
|
-
* rather than inlined so the message and the command-suppression branch cannot
|
|
9230
|
-
* disagree about what "unrenderable" looks like.
|
|
9231
|
-
*/
|
|
9232
|
-
const UNRENDERABLE = "<unrenderable>";
|
|
9233
9242
|
/** Render `expiresIn` without implying more precision than a clock skew allows. */
|
|
9234
9243
|
function formatRemaining(ms) {
|
|
9235
9244
|
if (!Number.isFinite(ms)) return "at an unknown time";
|
|
@@ -10491,6 +10500,25 @@ var LockManager = class {
|
|
|
10491
10500
|
return `${Math.floor(seconds / 60)}m${seconds % 60}s`;
|
|
10492
10501
|
}
|
|
10493
10502
|
/**
|
|
10503
|
+
* `expires in 1m23s` / `expired 45s ago` for a finite deadline, `expires at
|
|
10504
|
+
* an unknown time` otherwise — the ONE spelling for a lock's expiry in this
|
|
10505
|
+
* module's messages, so the three sites that render one (the expired-lock
|
|
10506
|
+
* takeover warning, the retry line, the final refusal) cannot disagree.
|
|
10507
|
+
*
|
|
10508
|
+
* The non-finite arm is what stops `expired NaNmNaNs ago` (issue #3083):
|
|
10509
|
+
* `expiresAt` is an unchecked cast, and `getLockRecord` deliberately hands
|
|
10510
|
+
* a coercion that THROWS through as `NaN` (go-to-k/cdkd#2947) rather than
|
|
10511
|
+
* inventing a deadline. The wording matches `formatRemaining` in
|
|
10512
|
+
* `lock-contention-message.ts`, which answered the same input this way
|
|
10513
|
+
* first. `isLockExpired` decides what such a value MEANS (expired); this
|
|
10514
|
+
* only decides what it SAYS.
|
|
10515
|
+
*/
|
|
10516
|
+
formatExpiry(expiresAt) {
|
|
10517
|
+
if (!Number.isFinite(expiresAt)) return "expires at an unknown time";
|
|
10518
|
+
const remainingMs = expiresAt - Date.now();
|
|
10519
|
+
return remainingMs > 0 ? `expires in ${this.formatDuration(remainingMs)}` : `expired ${this.formatDuration(-remainingMs)} ago`;
|
|
10520
|
+
}
|
|
10521
|
+
/**
|
|
10494
10522
|
* Try to acquire a lock for a stack
|
|
10495
10523
|
*
|
|
10496
10524
|
* Uses If-None-Match: "*" to ensure atomic lock acquisition.
|
|
@@ -10544,7 +10572,8 @@ var LockManager = class {
|
|
|
10544
10572
|
return false;
|
|
10545
10573
|
} else throw deleteError;
|
|
10546
10574
|
}
|
|
10547
|
-
|
|
10575
|
+
const why = Number.isFinite(existing.info.expiresAt) ? "A live cdkd process renews its lock well inside the TTL, so this normally means the previous owner crashed or was suspended" : `Its expiresAt is not a finite number, which cdkd treats as already expired`;
|
|
10576
|
+
this.logger.warn(`Took over an EXPIRED lock for stack: ${stackName} (${region}, owner: ${existing.info.owner}, ${this.formatExpiry(existing.info.expiresAt)}). ${why} -- if it is in fact still running, both processes are now writing to the same stack.`);
|
|
10548
10577
|
try {
|
|
10549
10578
|
const retryEtag = await this.putLockObject(key, lockInfo);
|
|
10550
10579
|
this.logger.debug(`Lock acquired for stack: ${stackName} (${region}) after expired lock cleanup, owner: ${lockOwner}`);
|
|
@@ -11140,21 +11169,20 @@ var LockManager = class {
|
|
|
11140
11169
|
if (await this.acquireLock(stackName, region, owner, operation)) return;
|
|
11141
11170
|
const lockInfo = await this.getLockInfo(stackName, region);
|
|
11142
11171
|
if (lockInfo) {
|
|
11143
|
-
const remainingMs = lockInfo.expiresAt - Date.now();
|
|
11144
11172
|
if (attempt < maxRetries) {
|
|
11145
|
-
this.logger.info(`Stack '${safeSegment(stackName)}' (${safeSegment(region)}) is locked by ${lockInfo.owner}${lockInfo.operation ? ` (operation: ${lockInfo.operation})` : ""}. Lock
|
|
11173
|
+
this.logger.info(`Stack '${safeSegment(stackName)}' (${safeSegment(region)}) is locked by ${lockInfo.owner}${lockInfo.operation ? ` (operation: ${lockInfo.operation})` : ""}. Lock ${this.formatExpiry(lockInfo.expiresAt)}. Retrying in ${this.formatDuration(retryDelay)}... (attempt ${attempt + 1}/${maxRetries})`);
|
|
11146
11174
|
await new Promise((resolve) => setTimeout(resolve, retryDelay));
|
|
11147
11175
|
continue;
|
|
11148
11176
|
}
|
|
11149
11177
|
}
|
|
11150
11178
|
}
|
|
11151
11179
|
const lockInfo = await this.getLockInfo(stackName, region);
|
|
11152
|
-
const
|
|
11180
|
+
const expiry = lockInfo ? this.formatExpiry(lockInfo.expiresAt) : void 0;
|
|
11153
11181
|
const forceUnlockCommand = buildForceUnlockCommand(stackName, region);
|
|
11154
11182
|
const recovery = forceUnlockCommand ? `If you are certain no other process is active, run: ${forceUnlockCommand}` : `If you are certain no other process is active, ${UNREPRODUCIBLE_LOCK_CLAUSE.charAt(0).toLowerCase()}${UNREPRODUCIBLE_LOCK_CLAUSE.slice(1)}`;
|
|
11155
11183
|
const safeStack = safeSegment(stackName);
|
|
11156
11184
|
const safeRegion = safeSegment(region);
|
|
11157
|
-
throw new LockError(`Failed to acquire lock for stack '${safeStack}' (${safeRegion}) after ${maxRetries + 1} attempts. ` + (lockInfo ? `Locked by: ${lockInfo.owner}${lockInfo.operation ? `, operation: ${lockInfo.operation}` : ""},
|
|
11185
|
+
throw new LockError(`Failed to acquire lock for stack '${safeStack}' (${safeRegion}) after ${maxRetries + 1} attempts. ` + (lockInfo ? `Locked by: ${lockInfo.owner}${lockInfo.operation ? `, operation: ${lockInfo.operation}` : ""}, ${expiry}. ` + recovery : `Lock exists but could not read lock info. ${recovery}`));
|
|
11158
11186
|
}
|
|
11159
11187
|
};
|
|
11160
11188
|
/**
|
|
@@ -12052,7 +12080,11 @@ function recordCrossStackExpression(secrets, key, expression, plaintext) {
|
|
|
12052
12080
|
*
|
|
12053
12081
|
* The `isSingleDynamicReferenceToken` shape invariant is deliberately NOT here:
|
|
12054
12082
|
* it belongs to each writer, which is where the parameters are named and where
|
|
12055
|
-
* a swap could be introduced.
|
|
12083
|
+
* a swap could be introduced. One writer stores a NON-token on purpose:
|
|
12084
|
+
* {@link recordNestedStackParameterExpressions}'s sub-floor carry records a
|
|
12085
|
+
* parameter's literal FRAME (`port:{{resolve:...}}`, issue #3079), the same
|
|
12086
|
+
* string its whole-value entry writes, so a reader returning it persists what
|
|
12087
|
+
* the entry would have.
|
|
12056
12088
|
*/
|
|
12057
12089
|
function storeAssociation(associations, key, expression, plaintext) {
|
|
12058
12090
|
const seen = associations.get(key);
|
|
@@ -12220,14 +12252,21 @@ const UNFRAMED_SPELLING = Symbol("cdkd.nested-parameter.unframed-spelling");
|
|
|
12220
12252
|
* only refusal a test can see: the others coincide with (i) or with
|
|
12221
12253
|
* the map's own entry, as a whole-token source's would).
|
|
12222
12254
|
* (iii) `secrets.get(middle) === token` -- the token IS the map's survivor
|
|
12223
|
-
* for the middle
|
|
12224
|
-
*
|
|
12225
|
-
*
|
|
12226
|
-
*
|
|
12227
|
-
*
|
|
12228
|
-
*
|
|
12229
|
-
*
|
|
12230
|
-
*
|
|
12255
|
+
* for the middle -- OR every framed spelling of the value in the row
|
|
12256
|
+
* carries this token (issue #3079). Load-bearing: two framed
|
|
12257
|
+
* parameters over ONE middle (`pin::` and `pin:AWSCURRENT:`) keep
|
|
12258
|
+
* their own tokens on this row's record today because each reaches
|
|
12259
|
+
* the span arm with the scan silent; once a `'port:q7'` entry exists
|
|
12260
|
+
* the scan answers for the whole leaf and the arm's bound (`scanned
|
|
12261
|
+
* === prefix + survivor + suffix`) decides. With the survivor's
|
|
12262
|
+
* frame as the entry every same-frame leaf passes the bound and
|
|
12263
|
+
* writes its own token; with a loser's, a same-frame sibling around
|
|
12264
|
+
* another token would fail it and take the loser's frame -- so a
|
|
12265
|
+
* loser's frame is the entry only when no such sibling exists, and
|
|
12266
|
+
* then its own leaf reads the entry from the value scan after the
|
|
12267
|
+
* bound refuses, which is its frame. Either way every parent leaf
|
|
12268
|
+
* keeps its own token by construction rather than by recording
|
|
12269
|
+
* order.
|
|
12231
12270
|
* (iv) ONE FRAME per VALUE, across the whole row. Once the entry exists
|
|
12232
12271
|
* the scan is no longer silent on the value, so on the parent's
|
|
12233
12272
|
* record every leaf holding it answers against the entry through the
|
|
@@ -12280,19 +12319,41 @@ const UNFRAMED_SPELLING = Symbol("cdkd.nested-parameter.unframed-spelling");
|
|
|
12280
12319
|
* refuses a middle that is itself a token, which is what a bag equal to its
|
|
12281
12320
|
* source has.
|
|
12282
12321
|
*
|
|
12322
|
+
* THE PER-NAME ASSOCIATION (issue #3079). The entry is keyed by VALUE, so over
|
|
12323
|
+
* one middle with TWO tokens in one frame it names one of them, and every
|
|
12324
|
+
* child leaf holding the value would take that one -- the loser's `{Ref}`
|
|
12325
|
+
* persisting the survivor's frame, which is the wrong reference the three
|
|
12326
|
+
* consumers below re-resolve after the sibling rotates. So beside the entry,
|
|
12327
|
+
* every leaf passing (i), (ii), the pair gate between (ii) and (iv), (iv)
|
|
12328
|
+
* and (v) -- the survivor's and the loser's alike, and whether or not (iii)
|
|
12329
|
+
* let its entry through -- is recorded BY NAME into {@link nestedStackParameterExpressions}, the table
|
|
12330
|
+
* the whole-token walk above fills, as `name -> (its own frame, the value)`.
|
|
12331
|
+
* The child inherits it ({@link inheritNestedStackParameterAssociations})
|
|
12332
|
+
* and reads it through {@link certifiedExpressionForLeaf} at all three
|
|
12333
|
+
* sites: the carry (`recordInheritedParameterSecrets` asks per plaintext),
|
|
12334
|
+
* the persist walk (`positionByCrossStackSource` on the `{Ref}` source) and
|
|
12335
|
+
* the diff side (`redactParametersForDiff`). Each requires the bag to HOLD
|
|
12336
|
+
* the value, which the entry provides -- or the child's OWN resolution of
|
|
12337
|
+
* the same plaintext, in which case the association answers with the leaf's
|
|
12338
|
+
* own frame, the right reference for it. So a FRAMED association whose value
|
|
12339
|
+
* (iii) refused is inert or correct, never wrong -- a claim about this
|
|
12340
|
+
* route's pair gate, not about the whole-token walk above, whose refusal 4
|
|
12341
|
+
* cannot see a public token (issue #3090). The association's expression is
|
|
12342
|
+
* the FRAME, not a token -- the one writer into that table that stores a
|
|
12343
|
+
* non-token, said so on {@link storeAssociation}; its readers return it to be
|
|
12344
|
+
* persisted, which is exactly what the entry would have written.
|
|
12345
|
+
*
|
|
12283
12346
|
* WHAT STAYS OPEN, weighed against the three live consumers named on
|
|
12284
12347
|
* {@link positionByIntrinsicFrame} (`cdkd rollback`, `drift --revert`, a
|
|
12285
|
-
* consumer's cross-stack read). (a)
|
|
12286
|
-
*
|
|
12287
|
-
*
|
|
12288
|
-
*
|
|
12289
|
-
*
|
|
12290
|
-
*
|
|
12291
|
-
* the
|
|
12292
|
-
*
|
|
12293
|
-
*
|
|
12294
|
-
* by (iii) and (iv). One token framed two ways (`port:` + T and `url:` + T)
|
|
12295
|
-
* is two values and two entries, not this shape. (b) The framed
|
|
12348
|
+
* consumer's cross-stack read). (a) CLOSED by the association above (was:
|
|
12349
|
+
* the loser's child leaf took the survivor's frame, or stayed plaintext
|
|
12350
|
+
* under a different frame -- the second half closed by (iii)'s second arm).
|
|
12351
|
+
* What remains of it: one child RESOURCE consuming BOTH parameters holds
|
|
12352
|
+
* ONE plaintext-keyed slot for the value, and a leaf of it the association
|
|
12353
|
+
* cannot reach by name -- an `Fn::Sub` EMBEDDING the `{Ref}`, positioned by
|
|
12354
|
+
* the value scan -- reads that slot's frame, whichever `{Ref}` resolved
|
|
12355
|
+
* last; a bare `{Ref}` leaf of the same resource is positioned by name and
|
|
12356
|
+
* is unaffected (pinned). (b) The framed
|
|
12296
12357
|
* value is a SUBSTRING needle (7 characters here) in every child resource
|
|
12297
12358
|
* that consumed the parameter, so an unrelated literal there containing it
|
|
12298
12359
|
* is spliced -- the #2087 class, bounded to resources whose own resolution
|
|
@@ -12343,25 +12404,33 @@ function recordNestedStackParameterExpressions(secrets, resourceType, resolvedPr
|
|
|
12343
12404
|
storeAssociation(table, name, expression, resolvedValue);
|
|
12344
12405
|
}
|
|
12345
12406
|
const framesByValue = /* @__PURE__ */ new Map();
|
|
12407
|
+
const tokensOf = /* @__PURE__ */ new Map();
|
|
12346
12408
|
for (const [name, resolvedValue] of Object.entries(resolvedParameters)) {
|
|
12347
12409
|
if (typeof resolvedValue !== "string") continue;
|
|
12348
12410
|
const sourceLeaf = sourceParameters[name];
|
|
12349
12411
|
const frame = typeof sourceLeaf === "string" ? singleSpanFrame(resolvedValue, sourceLeaf) : void 0;
|
|
12350
12412
|
const frames = framesByValue.get(resolvedValue) ?? /* @__PURE__ */ new Set();
|
|
12351
|
-
|
|
12413
|
+
const unframed = frame === void 0 || resolvedPlaintextOf(secrets, frame.token) !== frame.middle;
|
|
12414
|
+
frames.add(unframed ? UNFRAMED_SPELLING : `${frame.prefix.length}:${frame.prefix}${frame.suffix}`);
|
|
12352
12415
|
framesByValue.set(resolvedValue, frames);
|
|
12416
|
+
if (!unframed) {
|
|
12417
|
+
const tokens = tokensOf.get(resolvedValue) ?? /* @__PURE__ */ new Set();
|
|
12418
|
+
tokens.add(frame.token);
|
|
12419
|
+
tokensOf.set(resolvedValue, tokens);
|
|
12420
|
+
}
|
|
12353
12421
|
}
|
|
12354
12422
|
const rowWithoutParameters = {};
|
|
12355
12423
|
for (const [key, value] of Object.entries(resolvedProperties)) if (key !== "Parameters") rowWithoutParameters[key] = value;
|
|
12356
12424
|
const outsideLeaves = wholeStringLeavesOf(rowWithoutParameters);
|
|
12357
12425
|
const framed = /* @__PURE__ */ new Map();
|
|
12426
|
+
const framedByName = [];
|
|
12358
12427
|
for (const [name, resolvedValue] of Object.entries(resolvedParameters)) {
|
|
12359
12428
|
const sourceLeaf = sourceParameters[name];
|
|
12360
12429
|
if (typeof resolvedValue !== "string" || typeof sourceLeaf !== "string") continue;
|
|
12361
12430
|
if (positioned[name] !== sourceLeaf) continue;
|
|
12362
12431
|
if (redactSecretsForState(resolvedValue, secrets) !== resolvedValue) continue;
|
|
12363
12432
|
const frame = singleSpanFrame(resolvedValue, sourceLeaf);
|
|
12364
|
-
if (frame === void 0 || secrets
|
|
12433
|
+
if (frame === void 0 || resolvedPlaintextOf(secrets, frame.token) !== frame.middle) continue;
|
|
12365
12434
|
if (framesByValue.get(resolvedValue)?.size !== 1) continue;
|
|
12366
12435
|
const isNeedle = resolvedValue.length >= 4;
|
|
12367
12436
|
const rewrites = (leaf) => leaf === resolvedValue || isNeedle && leaf.includes(resolvedValue);
|
|
@@ -12382,9 +12451,22 @@ function recordNestedStackParameterExpressions(secrets, resourceType, resolvedPr
|
|
|
12382
12451
|
}
|
|
12383
12452
|
}
|
|
12384
12453
|
if (embedded) continue;
|
|
12454
|
+
framedByName.push([
|
|
12455
|
+
name,
|
|
12456
|
+
sourceLeaf,
|
|
12457
|
+
resolvedValue
|
|
12458
|
+
]);
|
|
12459
|
+
if (secrets.get(frame.middle) !== frame.token && tokensOf.get(resolvedValue)?.size !== 1) continue;
|
|
12385
12460
|
framed.set(resolvedValue, sourceLeaf);
|
|
12386
12461
|
}
|
|
12387
12462
|
for (const [plaintext, expression] of framed) secrets.set(plaintext, expression);
|
|
12463
|
+
for (const [name, expression, plaintext] of framedByName) {
|
|
12464
|
+
if (table === void 0) {
|
|
12465
|
+
table = /* @__PURE__ */ new Map();
|
|
12466
|
+
nestedStackParameterExpressions.set(secrets, table);
|
|
12467
|
+
}
|
|
12468
|
+
storeAssociation(table, name, expression, plaintext);
|
|
12469
|
+
}
|
|
12388
12470
|
}
|
|
12389
12471
|
/**
|
|
12390
12472
|
* Copy a parent pass's per-PARAMETER associations onto a nested-stack CHILD
|
|
@@ -28325,7 +28407,7 @@ var CloudControlProvider = class {
|
|
|
28325
28407
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
28326
28408
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
28327
28409
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
28328
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
28410
|
+
const { ASGProvider } = await import("./asg-provider-D6Zyjgrr.js").then((n) => n.n);
|
|
28329
28411
|
const asgProvider = new ASGProvider();
|
|
28330
28412
|
return withIndeterminateGuard(await asgProvider.delete(logicalId, physicalId, resourceType, _properties, context), indeterminateGuard);
|
|
28331
28413
|
}
|
|
@@ -40771,5 +40853,5 @@ var DeployEngine = class DeployEngine {
|
|
|
40771
40853
|
};
|
|
40772
40854
|
|
|
40773
40855
|
//#endregion
|
|
40774
|
-
export { collectInlinePolicyNamesManagedBySiblings as $,
|
|
40775
|
-
//# sourceMappingURL=deploy-engine-
|
|
40856
|
+
export { collectInlinePolicyNamesManagedBySiblings as $, describeAwsFailure as $n, IntrinsicResolutionRefusalError as $r, describeTypeWithThrottleRetry as $t, isStatefulRecreateTargetForReplace as A, importableOutputKeys as An, MIGRATE_TMP_PREFIX as Ar, coerceCfnBoolean as At, gray as B, loadPublishableAssetManifest as Bn, clearBucketRegionCache as Br, classifyReplaySecretRegion as Bt, refusesFinalSnapshot as C, __exportAll as Ci, buildForceUnlockCommand as Cn, resolveStateBucketWithDefault as Cr, isUnboundTemplateParameter as Ct, makeSiblingClaimReader as D, CUSTOM_RESOURCE_RESPONSE_PREFIX as Dn, warnDeprecatedNoPrefixCliFlag as Dr, normalizeAwsTagsToCfn as Dt, extractDeploymentEventError as E, shellQuote as En, stateBucketExistenceConfirmed as Er, WAFv2WebACLProvider as Et, isWarmThroughputDecrease as F, AssetPublisher as Fn, PARTITION_TABLE as Fr, readConfigString as Ft, collectPublishedOutputNames as G, ensureAssetStorage as Gn, setAwsClients as Gr, s3BucketDualStackDomainName as Gt, red as H, AssetModeResolver as Hn, AwsClients as Hr, withSharedDrainBudget as Ht, toFiniteNumber as I, stringifyValue as In, canonicalizeRegion as Ir, replayWarn as It, secretBearing as J, parseBootstrapMarker as Jn, ConfigError as Jr, applyRoleArnIfSet as Jt, exportAliasCollisionScrubWarning as K, getBootstrapMarkerKey as Kn, AssetError as Kr, s3BucketRegionalDomainName as Kt, formatResourceLine as L, WorkGraph as Ln, derivePartitionAndUrlSuffix as Lr, requireConfigArray as Lt, renderStatefulReason as M, orphansAfterRollback as Mn, uploadCfnTemplate as Mr, configBooleanRefusal as Mt, WARM_THROUGHPUT_MEMBERS as N, orphansCarriedFrom as Nn, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Nr, configIntegerRefusal as Nt, planOrphanAdoption as O, DEFAULT_STATE_PREFIX as On, CFN_TEMPLATE_BODY_LIMIT as Or, resolveExplicitPhysicalId as Ot, coerceWarmThroughput as P, shouldRetainResource as Pn, expectedOwnerParam as Pr, configStringRefusal as Pt, IAMRoleProvider as Q, buildDenyExternalAccessPolicy as Qn, DynamicReferenceRegionAmbiguousError as Qr, findSilentDropProperties as Qt, bold as R, buildAssetRedirectMap as Rn, AssemblyReader as Rr, requireConfigObject as Rt, isFinalSnapshotError as S, retryClassificationText as Si, rebuildClientForBucketRegion as Sn, resolveSkipPrefix as Sr, getAccountInfo as St, makeCanonicalizePropertiesFn as T, forceQuitRecoveryClause as Tn, resolveUseCdkBootstrapAssets as Tr, refStateLookupFromResource as Tt, yellow as U, BOOTSTRAP_MARKER_PREFIX as Un, getAwsClients as Ur, s3BucketArn as Ut, green as V, rewriteTemplateAssetReferences as Vn, resolveBucketRegion as Vr, producerRegionsFromState as Vt, collectDeclaredOutputNames as W, assertAssetBucketRegion as Wn, resetAwsClients as Wr, s3BucketDomainName as Wt, secretSafeKeyDisplay as X, validateAssetBucketName as Xn, DependencyError as Xr, INTRINSIC_KEYS as Xt, secretBearingStateKeyWarning as Y, readBootstrapMarkerBody as Yn, CrossAccountSecretRefusalError as Yr, DiffCalculator as Yt, getCurrentResourceSecrets as Z, validateContainerRepoName as Zn, DeployCancelledError as Zr, findActionableSilentDrops as Zt, ATOMIC_FINAL_SNAPSHOT_TYPES as _, isRetryableTransientError as _i, recoverMaskedOutput as _n, getDefaultStateBucketName as _r, isTerminationProtectionPropagationError as _t, DeploymentEventsStore as a, ProvisioningError as ai, STATE_SOURCED_READBACK_RULES as an, formatDockerLoginError as ar, maskerOrIdentity as at, ccRoutedFinalSnapshotError as b, markNonRetryable as bi, LockManager as bn, resolveAutoAssetStorage as br, cfnRefValueFromPhysicalId as bt, replayFailedOperations as c, StackHasActiveImportsError as ci, createSecretMasker as cn, redactDockerArgvValues as cr, interruptWatchListenerCount as ct, updatePartialReason as d, SynthesisError as di, identityKeyFor as dn, escapeRegExp$1 as dr, CloudControlProvider as dt, LocalInvokeBuildError as ei, withRetry as en, buildDockerImage as er, clearOnUpdateRemoval as et, withResourceDeadline as f, formatError as fi, isSingleDynamicReferenceToken as fn, stripControlChars as fr, slowCcOperationTimeoutMs as ft, bindingSkippedOutputs as g, isMarkedNonRetryable as gi, recordMaskOnlyValue as gn, synthesisStatusMessage as gr, disableInstanceApiTermination as gt, computeImplicitDeleteEdges as h, withErrorHandling as hi, maskSecretsInText as hn, Synthesizer as hr, deleteSkipReason as ht, DeploymentEventsReader as i, PartialFailureError as ii, STATE_SOURCED_CROSS_GENERATION_RULES as in, dockerSpawnEnvWithSensitive as ir, maskDeep as it, isStatefulRecreateTargetSync as j, importableOutputs as jn, findLargeInlineResources as jr, coerceCfnInteger as jt, MULTI_REGION_RECREATE_BLOCKED_TYPES as k, exportNamesCarriedFrom as kn, CFN_TEMPLATE_URL_LIMIT as kr, assertRegionMatch as kt, replayRollback as l, StackTerminationProtectionError as li, dynamicReferenceTokens as ln, runDockerForeground as lr, isInterruptedWaitError as lt, IMPLICIT_DELETE_DEPENDENCIES as m, normalizeAwsError as mi, maskSecretsInError as mn, getDockerImageBySourceHash as mr, deleteIndeterminateGuards as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, LockError as ni, TemplateParser as nn, describeDockerExecFailure as nr, wouldReturnToSdkProvider as nt, planFailedOps as o, ResourceTimeoutError as oi, TEMPLATE_SOURCED_RULES as on, getDockerCmd as or, beginCommandInterruptScope as ot, maskingRetryLogger as p, isCdkdError as pi, markSameGenerationBag as pn, AssetManifestLoader as pr, UNSPECIFIED_SKIP_REASON as pt, isExportAliasCollision as q, isCrossRegionRedirect as qn, CdkdError as qr, s3BucketWebsiteUrl as qt, DeployEngine as r, NestedStackChildDirectDestroyError as ri, STATE_SOURCED_BASELINE_RULES as rn, describeDockerFailure as rr, createMaskedRetryLogger as rt, planRollback as s, ResourceUpdateNotSupportedError as si, carriesSecretMask as sn, partitionSensitiveEnv as sr, endCommandInterruptScope as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, LocalStartServiceError as ti, DagBuilder as tn, describeDockerCapturedOutput as tr, ProviderRegistry as tt, updatePartialMessage as u, StateError as ui, errorCauseChain as un, runDockerStreaming as ur, startInterruptWatch as ut, PRE_DELETE_SNAPSHOT_TYPES as v, isThrottlingError as vi, redactSecretsForState as vn, getLegacyStateBucketName as vr, IntrinsicFunctionResolver as vt, unsupportedFinalSnapshotError as w, buildLockContentionMessage as wn, resolveStateBucketWithDefaultAndSource as wr, parameterTypeMayLoseSecretIdentity as wt, createPreDeleteFinalSnapshot as x, markRedactedCause as xi, S3StateBackend as xn, resolveCaptureObservedState as xr, coerceParameterTypedValue as xt, buildFinalSnapshotIdentifier as y, isTransientServerError as yi, scrubResourceRecord as yn, resolveApp as yr, carriesDynamicReference as yt, cyan as z, createAssetRedirectResolver as zn, processStackMessages as zr, requireConfigString as zt };
|
|
40857
|
+
//# sourceMappingURL=deploy-engine-DrTOY3f-.js.map
|