@go-to-k/cdkd 0.290.39 → 0.290.41
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-CH4oHOxq.js → asg-provider-CPWB3m4b.js} +3 -3
- package/dist/{asg-provider-CH4oHOxq.js.map → asg-provider-CPWB3m4b.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-Vze2lc-H.js → deploy-engine-RoGuHEgf.js} +113 -48
- package/dist/deploy-engine-RoGuHEgf.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{logger-BkcLg0jL.js → logger-D-2HeLmd.js} +8 -4
- package/dist/logger-D-2HeLmd.js.map +1 -0
- package/dist/{program-BC_cHG7r.js → program-B1JOjOY4.js} +52 -22
- package/dist/{program-BC_cHG7r.js.map → program-B1JOjOY4.js.map} +1 -1
- package/dist/{version-DzcgAjCn.js → version-Cxppiepi.js} +2 -2
- package/dist/{version-DzcgAjCn.js.map → version-Cxppiepi.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-Vze2lc-H.js.map +0 -1
- package/dist/logger-BkcLg0jL.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-Cxppiepi.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-B1JOjOY4.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 { C as displayAwsMessage, D as truncateCodePoints, E as isPasteableIdent, S as UNRENDERABLE, T 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, w as displayIdent, x as STACK_REF_MAX_CODE_POINTS, y as withoutGeneratedFallbackName } from "./logger-
|
|
1
|
+
import { C as displayAwsMessage, D as truncateCodePoints, E as isPasteableIdent, S as UNRENDERABLE, T 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, w as displayIdent, x as STACK_REF_MAX_CODE_POINTS, y as withoutGeneratedFallbackName } from "./logger-D-2HeLmd.js";
|
|
2
2
|
import { a as setAssumedRoleCredentials, i as getPreAssumeEnvCredentials, n as awsClientDefaults, o as setPreAssumeEnvCredentials, r as getAssumedRoleCredentials, t as SECOND_ROLE_PUBLISH_REFUSAL } from "./aws-client-defaults-BoIxyCir.js";
|
|
3
|
-
import { t as getCdkdVersion } from "./version-
|
|
3
|
+
import { t as getCdkdVersion } from "./version-Cxppiepi.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";
|
|
@@ -2843,7 +2843,7 @@ function collectStackMessages(assemblyDir, artifact) {
|
|
|
2843
2843
|
merged[path] = [...merged[path] ?? [], ...entries];
|
|
2844
2844
|
}
|
|
2845
2845
|
} catch (error) {
|
|
2846
|
-
throw new SynthesisError(`Failed to read stack metadata file ${metadataPath}: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : void 0);
|
|
2846
|
+
throw new SynthesisError(`Failed to read stack metadata file ${displaySafe(metadataPath)}: ${displaySafe(error instanceof Error ? error.message : String(error))}`, error instanceof Error ? error : void 0);
|
|
2847
2847
|
}
|
|
2848
2848
|
}
|
|
2849
2849
|
const messages = [];
|
|
@@ -2899,6 +2899,22 @@ function processStackMessages(stacks, logger, options = {}) {
|
|
|
2899
2899
|
//#region src/synthesis/assembly-reader.ts
|
|
2900
2900
|
/**
|
|
2901
2901
|
* Reads and parses Cloud Assembly from cdk.out directory
|
|
2902
|
+
*
|
|
2903
|
+
* EVERY value this class renders into a message or a log line goes through
|
|
2904
|
+
* `displaySafe` (issue [#3277](https://github.com/go-to-k/cdkd/issues/3277)).
|
|
2905
|
+
* The reason is the one its absolute-`aws:asset:path` refusal states in its own
|
|
2906
|
+
* text: a manifest key, a template key, a `Metadata` string, a
|
|
2907
|
+
* `directoryName`-derived path and the `JSON.parse` failure quoting a hand-fed
|
|
2908
|
+
* file are all chosen by whoever wrote the assembly, and this is the FIRST
|
|
2909
|
+
* layer the CLI reaches, so on a hostile assembly its output is what a user is
|
|
2910
|
+
* asked to trust. C1 bytes and the bidi overrides survive ordinary string
|
|
2911
|
+
* building, and `formatError` sanitizes only an error's `cause`, never its own
|
|
2912
|
+
* `message` — so a crafted value otherwise appends what reads as a second,
|
|
2913
|
+
* cdkd-authored line. `displaySafe` is the identity on every well-formed
|
|
2914
|
+
* assembly: it neither truncates nor quotes, so a legitimate long asset path
|
|
2915
|
+
* still renders in full and byte-identically. The same rule, for the same
|
|
2916
|
+
* reason, guards the twin refusals in `src/cli/commands/diff-recursive.ts`
|
|
2917
|
+
* (go-to-k/cdkd#3243).
|
|
2902
2918
|
*/
|
|
2903
2919
|
var AssemblyReader = class {
|
|
2904
2920
|
logger = getLogger().child("AssemblyReader");
|
|
@@ -2910,10 +2926,10 @@ var AssemblyReader = class {
|
|
|
2910
2926
|
try {
|
|
2911
2927
|
const content = readFileSync(manifestPath, "utf-8");
|
|
2912
2928
|
const manifest = JSON.parse(content);
|
|
2913
|
-
this.logger.debug(`Loaded manifest: version=${manifest.version}`);
|
|
2929
|
+
this.logger.debug(`Loaded manifest: version=${displaySafe(manifest.version)}`);
|
|
2914
2930
|
return manifest;
|
|
2915
2931
|
} catch (error) {
|
|
2916
|
-
throw new SynthesisError(`Failed to read cloud assembly manifest from ${manifestPath}: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : void 0);
|
|
2932
|
+
throw new SynthesisError(`Failed to read cloud assembly manifest from ${displaySafe(manifestPath)}: ${displaySafe(error instanceof Error ? error.message : String(error))}`, error instanceof Error ? error : void 0);
|
|
2917
2933
|
}
|
|
2918
2934
|
}
|
|
2919
2935
|
/**
|
|
@@ -2938,7 +2954,7 @@ var AssemblyReader = class {
|
|
|
2938
2954
|
const nestedStacks = this.getAllStacks(nestedDir, nestedManifest);
|
|
2939
2955
|
stacks.push(...nestedStacks);
|
|
2940
2956
|
} catch (error) {
|
|
2941
|
-
this.logger.warn(`Failed to read nested assembly '${props.directoryName}': ${error instanceof Error ? error.message : String(error)}`);
|
|
2957
|
+
this.logger.warn(`Failed to read nested assembly '${displaySafe(props.directoryName)}': ${displaySafe(error instanceof Error ? error.message : String(error))}`);
|
|
2942
2958
|
}
|
|
2943
2959
|
}
|
|
2944
2960
|
}
|
|
@@ -2951,7 +2967,7 @@ var AssemblyReader = class {
|
|
|
2951
2967
|
getStack(assemblyDir, manifest, stackName) {
|
|
2952
2968
|
const stacks = this.getAllStacks(assemblyDir, manifest);
|
|
2953
2969
|
const stack = stacks.find((s) => s.stackName === stackName);
|
|
2954
|
-
if (!stack) throw new SynthesisError(`Stack '${stackName}' not found in assembly. Available: ${stacks.map((s) => s.stackName).join(", ")}`);
|
|
2970
|
+
if (!stack) throw new SynthesisError(`Stack '${displaySafe(stackName)}' not found in assembly. Available: ${stacks.map((s) => displaySafe(s.stackName)).join(", ")}`);
|
|
2955
2971
|
return stack;
|
|
2956
2972
|
}
|
|
2957
2973
|
/**
|
|
@@ -2980,21 +2996,21 @@ var AssemblyReader = class {
|
|
|
2980
2996
|
const props = artifact.properties;
|
|
2981
2997
|
const stackName = props?.stackName || artifactId;
|
|
2982
2998
|
const templateFile = props?.templateFile;
|
|
2983
|
-
if (!templateFile) throw new SynthesisError(`Stack '${stackName}' has no templateFile property`);
|
|
2999
|
+
if (!templateFile) throw new SynthesisError(`Stack '${displaySafe(stackName)}' has no templateFile property`);
|
|
2984
3000
|
const templatePath = join(assemblyDir, templateFile);
|
|
2985
3001
|
let template;
|
|
2986
3002
|
try {
|
|
2987
3003
|
const content = readFileSync(templatePath, "utf-8");
|
|
2988
3004
|
template = JSON.parse(content);
|
|
2989
3005
|
} catch (error) {
|
|
2990
|
-
throw new SynthesisError(`Failed to read template for stack '${stackName}': ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : void 0);
|
|
3006
|
+
throw new SynthesisError(`Failed to read template for stack '${displaySafe(stackName)}': ${displaySafe(error instanceof Error ? error.message : String(error))}`, error instanceof Error ? error : void 0);
|
|
2991
3007
|
}
|
|
2992
|
-
this.logger.debug(`Stack: ${stackName}, Resources: ${Object.keys(template.Resources ?? {}).length}`);
|
|
3008
|
+
this.logger.debug(`Stack: ${displaySafe(stackName)}, Resources: ${Object.keys(template.Resources ?? {}).length}`);
|
|
2993
3009
|
let assetManifestPath;
|
|
2994
3010
|
if (artifact.dependencies) {
|
|
2995
3011
|
for (const depId of artifact.dependencies) if (assetManifestMap.has(depId)) {
|
|
2996
3012
|
assetManifestPath = assetManifestMap.get(depId);
|
|
2997
|
-
this.logger.debug(`Found asset manifest for ${stackName}: ${depId}`);
|
|
3013
|
+
this.logger.debug(`Found asset manifest for ${displaySafe(stackName)}: ${displaySafe(depId)}`);
|
|
2998
3014
|
break;
|
|
2999
3015
|
}
|
|
3000
3016
|
}
|
|
@@ -3006,7 +3022,7 @@ var AssemblyReader = class {
|
|
|
3006
3022
|
if (depName !== stackName) dependencyNames.push(depName);
|
|
3007
3023
|
}
|
|
3008
3024
|
}
|
|
3009
|
-
if (dependencyNames.length > 0) this.logger.debug(`Stack '${stackName}' depends on: [${dependencyNames.join(", ")}]`);
|
|
3025
|
+
if (dependencyNames.length > 0) this.logger.debug(`Stack '${displaySafe(stackName)}' depends on: [${dependencyNames.map((n) => displaySafe(n)).join(", ")}]`);
|
|
3010
3026
|
let env;
|
|
3011
3027
|
if (artifact.environment) env = parseEnvironment(artifact.environment);
|
|
3012
3028
|
const nestedTemplates = {};
|
|
@@ -3014,7 +3030,7 @@ var AssemblyReader = class {
|
|
|
3014
3030
|
if (resource?.Type !== "AWS::CloudFormation::Stack") continue;
|
|
3015
3031
|
const assetPath = resource.Metadata?.["aws:asset:path"];
|
|
3016
3032
|
if (typeof assetPath !== "string" || assetPath.length === 0) continue;
|
|
3017
|
-
if (isAbsolute(assetPath) || /^[a-zA-Z]:[\\/]/.test(assetPath) || assetPath.startsWith("\\\\")) throw new SynthesisError(`Stack '${stackName}' nested-stack '${logicalId}' has Metadata['aws:asset:path']='${assetPath}' which is absolute. CDK emits relative asset paths for nested templates; an absolute path indicates the synth output was hand-modified or generated by a non-CDK toolchain. Refusing to load.`);
|
|
3033
|
+
if (isAbsolute(assetPath) || /^[a-zA-Z]:[\\/]/.test(assetPath) || assetPath.startsWith("\\\\")) throw new SynthesisError(`Stack '${displaySafe(stackName)}' nested-stack '${displaySafe(logicalId)}' has Metadata['aws:asset:path']='${displaySafe(assetPath)}' which is absolute. CDK emits relative asset paths for nested templates; an absolute path indicates the synth output was hand-modified or generated by a non-CDK toolchain. Refusing to load.`);
|
|
3018
3034
|
nestedTemplates[logicalId] = join(assemblyDir, assetPath);
|
|
3019
3035
|
}
|
|
3020
3036
|
return {
|
|
@@ -10146,6 +10162,85 @@ async function buildLockContentionMessage(args) {
|
|
|
10146
10162
|
return `${head} ${advice}, run: ${recoveryCommand}`;
|
|
10147
10163
|
}
|
|
10148
10164
|
|
|
10165
|
+
//#endregion
|
|
10166
|
+
//#region src/state/record-keys.ts
|
|
10167
|
+
/**
|
|
10168
|
+
* The ONE encoding anything that identifies a producer-side thing by a pair of
|
|
10169
|
+
* runtime strings goes through — a warned-once `Set`, a dedupe `Set`, a
|
|
10170
|
+
* memoization `Map`, a tree's node index.
|
|
10171
|
+
*
|
|
10172
|
+
* An import-free LEAF, the same shape as `src/utils/display-safe.ts` and
|
|
10173
|
+
* `src/utils/parameter-types.ts`, and that is load-bearing rather than tidy:
|
|
10174
|
+
* the consumers span the `cli`, `state` and `deployment` layers, and one of
|
|
10175
|
+
* them — `src/cli/commands/state-list-tree.ts` — is deliberately kept with NO
|
|
10176
|
+
* imports at all so the tree-building logic is unit-testable without mocking
|
|
10177
|
+
* anything. These functions previously lived in `malformed-resources-bag.ts`,
|
|
10178
|
+
* which reaches `error-handler` / `display-safe` / `lock-contention-message`,
|
|
10179
|
+
* and that module still RE-EXPORTS them so no existing importer moved.
|
|
10180
|
+
*
|
|
10181
|
+
* ENCODED, not separated. Issue
|
|
10182
|
+
* [#3308](https://github.com/go-to-k/cdkd/issues/3308) is the measurement
|
|
10183
|
+
* behind that and issue [#3323](https://github.com/go-to-k/cdkd/issues/3323)
|
|
10184
|
+
* is the one that found how far the class ran. Both halves of every key here
|
|
10185
|
+
* are attacker-influenced, and a separator only NARROWS a collision: with a
|
|
10186
|
+
* NUL separator, stack `Evil<NUL>us-east-1` in `ap-northeast-1` and stack
|
|
10187
|
+
* `Evil` in region `us-east-1<NUL>ap-northeast-1` produce the SAME key.
|
|
10188
|
+
*
|
|
10189
|
+
* `JSON.stringify` of a two-element array is injective over string pairs: the
|
|
10190
|
+
* quoting escapes anything that could imitate the separator, so no planted
|
|
10191
|
+
* value can produce another pair's key.
|
|
10192
|
+
*
|
|
10193
|
+
* **What a collision COSTS is per SITE, not a property of the key, and a note
|
|
10194
|
+
* here once claimed otherwise** — "one dropped warning LINE, never a wrong
|
|
10195
|
+
* resolution". That held for the two warned-once sets it was written for and
|
|
10196
|
+
* is false at three `cdkd scrub` sites, where a collision is a wrong ANSWER
|
|
10197
|
+
* feeding the pre-pass that decides whether a producer still holds plaintext.
|
|
10198
|
+
* Do not restore the narrower sentence: it reads as a licence to leave a
|
|
10199
|
+
* separator at a site nobody has re-checked.
|
|
10200
|
+
*
|
|
10201
|
+
* **Whether a separator was EVER injective is also per site**, because it
|
|
10202
|
+
* depends on each half's PROVENANCE. A half read out of an S3 key segment
|
|
10203
|
+
* cannot carry a NUL — measured on go-to-k/cdkd#3323, S3 refuses to store such
|
|
10204
|
+
* a key — so a key whose LEFT half is a segment splits uniquely at the FIRST
|
|
10205
|
+
* NUL. **The rule is two-sided and the dual is easy to miss**: a NUL-free
|
|
10206
|
+
* RIGHT half splits uniquely at the LAST one, which is what actually held at
|
|
10207
|
+
* one of the sites here. A half read out of a TEMPLATE or a state body is
|
|
10208
|
+
* gated by neither.
|
|
10209
|
+
*
|
|
10210
|
+
* Do not settle a site by asking whether the SEPARATOR is storable. That
|
|
10211
|
+
* question was asked twice on go-to-k/cdkd#3323 and gave the wrong answer both
|
|
10212
|
+
* times, in opposite directions. Encoding removes the need to ask at all,
|
|
10213
|
+
* which is why it is the fix rather than a wider separator.
|
|
10214
|
+
*/
|
|
10215
|
+
/** The ONE spelling of the encoding, private so no caller can re-derive it. */
|
|
10216
|
+
function injectivePairKey(first, second) {
|
|
10217
|
+
return JSON.stringify([first, second]);
|
|
10218
|
+
}
|
|
10219
|
+
/**
|
|
10220
|
+
* The key for a state RECORD: the `(stackName, region)` pair that names one
|
|
10221
|
+
* `state.json`.
|
|
10222
|
+
*/
|
|
10223
|
+
function producerRecordKey(stackName, region) {
|
|
10224
|
+
return injectivePairKey(stackName, region);
|
|
10225
|
+
}
|
|
10226
|
+
/**
|
|
10227
|
+
* The key for a producer COORDINATE: a `(stack, export-or-output name)` pair,
|
|
10228
|
+
* used by `cdkd scrub`'s re-export chain walk and its per-coordinate verdict
|
|
10229
|
+
* cache.
|
|
10230
|
+
*
|
|
10231
|
+
* A separate NAME because the subject is a different thing — a coordinate is
|
|
10232
|
+
* not a record, and a call site reading `producerRecordKey(stack, exportName)`
|
|
10233
|
+
* would say something false. ONE implementation, though, which is the property
|
|
10234
|
+
* the "one spelling" rule is actually about: two names over one implementation
|
|
10235
|
+
* cannot drift, two implementations can.
|
|
10236
|
+
*
|
|
10237
|
+
* An `exportName` is REDACTED on the way into state
|
|
10238
|
+
* (`StateImportEntry`'s JSDoc), so this half may hold any string at all.
|
|
10239
|
+
*/
|
|
10240
|
+
function producerCoordinateKey(stackName, exportOrOutputName) {
|
|
10241
|
+
return injectivePairKey(stackName, exportOrOutputName);
|
|
10242
|
+
}
|
|
10243
|
+
|
|
10149
10244
|
//#endregion
|
|
10150
10245
|
//#region src/utils/bucket-region-client.ts
|
|
10151
10246
|
/**
|
|
@@ -10661,7 +10756,7 @@ var S3StateBackend = class {
|
|
|
10661
10756
|
if (segments.length === NEW_KEY_DEPTH) {
|
|
10662
10757
|
const [stackName, region] = segments;
|
|
10663
10758
|
if (!stackName || !region) continue;
|
|
10664
|
-
const dedupeKey =
|
|
10759
|
+
const dedupeKey = producerRecordKey(stackName, region);
|
|
10665
10760
|
if (!seen.has(dedupeKey)) {
|
|
10666
10761
|
seen.add(dedupeKey);
|
|
10667
10762
|
refs.push({
|
|
@@ -10675,7 +10770,7 @@ var S3StateBackend = class {
|
|
|
10675
10770
|
const [stackName] = segments;
|
|
10676
10771
|
if (!stackName) continue;
|
|
10677
10772
|
const region = await this.readLegacyRegion(stackName);
|
|
10678
|
-
const dedupeKey =
|
|
10773
|
+
const dedupeKey = producerRecordKey(stackName, region ?? "");
|
|
10679
10774
|
if (!seen.has(dedupeKey)) {
|
|
10680
10775
|
seen.add(dedupeKey);
|
|
10681
10776
|
refs.push({
|
|
@@ -22638,36 +22733,6 @@ function malformedResourcePropertiesWarning(stackName, region, logicalIds) {
|
|
|
22638
22733
|
return `${namedPropertyBagsClause(stackName, region, logicalIds)} Continuing with those maps EMPTY: what these records are stored as holding is NOT what this preview compares against. Where the template still declares the resource, every property it declares previews as an addition and a create-only one as a replacement; where it no longer declares it, the DELETE row shows an empty previous side instead of the stored one. Do NOT run 'cdkd deploy' against this record — it REFUSES on the same defect rather than acting on this preview. See the stored values with: ${inspectCommand(stackName, region)}`;
|
|
22639
22734
|
}
|
|
22640
22735
|
/**
|
|
22641
|
-
* The key a warned-once-per-record `Set` uses to identify a producer RECORD.
|
|
22642
|
-
*
|
|
22643
|
-
* ONE spelling, shared by `scrub.ts`'s cross-stack pre-pass and
|
|
22644
|
-
* `local-state-loader.ts`'s `Fn::GetStackOutput` reader, because two spellings
|
|
22645
|
-
* of one rule is how nine sites stay right and the tenth drifts — the same
|
|
22646
|
-
* reason every predicate in this module is here rather than at its call sites.
|
|
22647
|
-
*
|
|
22648
|
-
* ENCODED, not separated, and issue
|
|
22649
|
-
* [#3308](https://github.com/go-to-k/cdkd/issues/3308) is the measurement
|
|
22650
|
-
* behind that. Both sites previously joined the two halves with a NUL, which
|
|
22651
|
-
* NARROWS the collision without closing it: a stack name is read out of an S3
|
|
22652
|
-
* key and is exactly as attacker-controlled as the `outputs` bag, so it can
|
|
22653
|
-
* carry a NUL too — `tests/unit/cli/commands/scrub-malformed-and-nameless.test.ts`
|
|
22654
|
-
* already plants one. Measured: with a NUL separator, stack `Evil<NUL>us-east-1`
|
|
22655
|
-
* in `ap-northeast-1` and stack `Evil` in region `us-east-1<NUL>ap-northeast-1`
|
|
22656
|
-
* produce the SAME key, so whichever is warned about second is silently not
|
|
22657
|
-
* warned about at all.
|
|
22658
|
-
*
|
|
22659
|
-
* `JSON.stringify` of a two-element array is injective over string pairs: the
|
|
22660
|
-
* quoting escapes anything that could imitate the separator, so no planted name
|
|
22661
|
-
* can produce another pair's key.
|
|
22662
|
-
*
|
|
22663
|
-
* The consequence of a collision is one dropped warning LINE, never a wrong
|
|
22664
|
-
* resolution — both records are still read as empty and both reads still miss.
|
|
22665
|
-
* That is why this is worth one shared helper rather than a larger mechanism.
|
|
22666
|
-
*/
|
|
22667
|
-
function producerRecordKey(stackName, region) {
|
|
22668
|
-
return JSON.stringify([stackName, region]);
|
|
22669
|
-
}
|
|
22670
|
-
/**
|
|
22671
22736
|
* How many unreadable logical ids a message names before summarizing. Read by
|
|
22672
22737
|
* every builder that names ids — the refusal below, `namedEntriesClause` and
|
|
22673
22738
|
* `malformedOrphanRecordsWarning` — so "the refusal below" was the count of
|
|
@@ -33547,7 +33612,7 @@ var CloudControlProvider = class {
|
|
|
33547
33612
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
33548
33613
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
33549
33614
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
33550
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
33615
|
+
const { ASGProvider } = await import("./asg-provider-CPWB3m4b.js").then((n) => n.n);
|
|
33551
33616
|
const asgProvider = new ASGProvider();
|
|
33552
33617
|
return withIndeterminateGuard(await asgProvider.delete(logicalId, physicalId, resourceType, _properties, context), indeterminateGuard);
|
|
33553
33618
|
}
|
|
@@ -47255,5 +47320,5 @@ var DeployEngine = class DeployEngine {
|
|
|
47255
47320
|
};
|
|
47256
47321
|
|
|
47257
47322
|
//#endregion
|
|
47258
|
-
export { yellow as $,
|
|
47259
|
-
//# sourceMappingURL=deploy-engine-
|
|
47323
|
+
export { yellow as $, ConfigError as $i, STATE_SOURCED_BASELINE_RULES as $n, readBootstrapMarkerBody as $r, requireConfigObject as $t, createPreDeleteFinalSnapshot as A, safeStringify$1 as Aa, warnDeprecatedNoPrefixCliFlag as Ai, malformedResourcePropertiesWarning as An, hasReadableExportSet as Ar, carriesDynamicReference as At, isStatefulRecreateTargetSync as B, PARTITION_TABLE as Bi, refuseMalformedState as Bn, stringifyValue as Br, isSettledInstanceState as Bt, namesAnyDeclaredParameter as C, isRetryableTransientError as Ca, resolveAutoAssetStorage as Ci, malformedExportSourceWarning as Cn, buildLockContentionMessage as Cr, slowCcOperationTimeoutMs as Ct, PRE_DELETE_SNAPSHOT_TYPES as D, markRedactedCause as Da, resolveStateBucketWithDefaultAndSource as Di, malformedOutputsWarning as Dn, CUSTOM_RESOURCE_RESPONSE_PREFIX as Dr, disableInstanceApiTermination as Dt, ATOMIC_FINAL_SNAPSHOT_TYPES as E, markNonRetryable as Ea, resolveStateBucketWithDefault as Ei, malformedOutputsRefusalMessage as En, shellQuote as Er, deleteSkipReason as Et, extractDeploymentEventError as F, findLargeInlineResources as Fi, refuseMalformedOutputs as Fn, isReadableBag as Fr, isImpossibleEmptyStoredAttribute as Ft, toCfnInteger as G, clearBucketRegionCache as Gi, safeRegion as Gn, rewriteTemplateAssetReferences as Gr, coerceCfnBoolean as Gt, WARM_THROUGHPUT_MEMBERS as H, derivePartitionAndUrlSuffix as Hi, repairMalformedResourceEntriesForReadOnly as Hn, buildAssetRedirectMap as Hr, normalizeAwsTagsToCfn as Ht, makeSiblingClaimReader as I, uploadCfnTemplate as Ii, refuseMalformedOutputsForDestroy as In, orphansAfterRollback as Ir, isNamelessDynamicReferenceError as It, bold as J, getAwsClients as Ji, findSilentDropProperties as Jn, assertAssetBucketRegion as Jr, configIntegerRefusal as Jt, toFiniteNumber as K, resolveBucketRegion as Ki, safeStackName as Kn, AssetModeResolver as Kr, coerceCfnInteger as Kt, planOrphanAdoption as L, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Li, refuseMalformedResourceEntries as Ln, orphansCarriedFrom as Lr, isUnboundTemplateParameter as Lt, refusesFinalSnapshot as M, CFN_TEMPLATE_BODY_LIMIT as Mi, malformedStateRefusalMessage as Mn, hasUnverifiableParameterRefusal as Mr, cfnRefValueFromPhysicalId as Mt, unsupportedFinalSnapshotError as N, CFN_TEMPLATE_URL_LIMIT as Ni, refuseDivergentRecordRegionForDestroy as Nn, importableOutputKeys as Nr, coerceParameterTypedValue as Nt, buildFinalSnapshotIdentifier as O, retryClassificationText as Oa, resolveUseCdkBootstrapAssets as Oi, malformedRenderedContainersWarning as On, DEFAULT_STATE_PREFIX as Or, isTerminationProtectionPropagationError as Ot, makeCanonicalizePropertiesFn as P, MIGRATE_TMP_PREFIX as Pi, refuseMalformedNestedChildOutputs as Pn, importableOutputs as Pr, getAccountInfo as Pt, red as Q, CdkdError as Qi, TemplateParser as Qn, parseBootstrapMarker as Qr, requireConfigArray as Qt, MULTI_REGION_RECREATE_BLOCKED_TYPES as R, decodeListingKey as Ri, refuseMalformedResourcePropertiesForOrphan as Rn, shouldRetainResource as Rr, parameterTypeMayLoseSecretIdentity as Rt, computeParameterTaint as S, isMarkedNonRetryable as Sa, resolveApp as Si, malformedExportNamesWarning as Sn, buildForceUnlockCommand as Sr, isWaitAbandonedError as St, resourcesNamingDeclaredParameter as T, isTransientServerError as Ta, resolveSkipPrefix as Ti, malformedOrphanRecordsWarning as Tn, formatLockExpiry as Tr, deleteIndeterminateGuards as Tt, coerceWarmThroughput as U, AssemblyReader as Ui, repairMalformedResourcePropertiesForReadOnly as Un, createAssetRedirectResolver as Ur, resolveExplicitPhysicalId as Ut, renderStatefulReason as V, canonicalizeRegion as Vi, repairMalformedOutputsForReadOnly as Vn, WorkGraph as Vr, WAFv2WebACLProvider as Vt, isWarmThroughputDecrease as W, processStackMessages as Wi, repairMalformedResourcesForReadOnly as Wn, loadPublishableAssetManifest as Wr, assertRegionMatch as Wt, gray as X, setAwsClients as Xi, withRetry as Xn, getBootstrapMarkerKey as Xr, readConfigString as Xt, cyan as Y, resetAwsClients as Yi, describeTypeWithThrottleRetry as Yn, ensureAssetStorage as Yr, configStringRefusal as Yt, green as Z, AssetError as Zi, DagBuilder as Zn, isCrossRegionRedirect as Zr, replayWarn as Zt, bagHoldsSecretExpression as _, SynthesisError as _a, getDockerImageBySourceHash as _i, UNREADABLE_RESOURCES_MAP_ROW as _n, S3StateBackend as _r, endCommandInterruptScope as _t, DeploymentEventsStore as a, LocalInvokeBuildError as aa, describeDockerExecFailure as ai, s3BucketDomainName as an, dynamicReferenceTokens as ar, secretBearingStateKeyWarning as at, mergeNoChangeOutputs as b, normalizeAwsError as ba, getDefaultStateBucketName as bi, hasReadableResources as bn, producerRecordKey as br, startInterruptWatch as bt, replayFailedOperations as c, MalformedProducerRecordRefusalError as ca, formatDockerLoginError as ci, s3BucketWebsiteUrl as cn, isSingleDynamicReferenceToken as cr, IAMRoleProvider as ct, updatePartialMessage as d, ProvisioningError as da, redactDockerArgvValues as di, applyCallerIdentityCredentials as dn, maskSecretsInText as dr, ProviderRegistry as dt, CrossAccountSecretRefusalError as ea, validateAssetBucketName as ei, requireConfigString as en, STATE_SOURCED_CROSS_GENERATION_RULES as er, collectDeclaredOutputNames as et, updatePartialReason as f, ResourceTimeoutError as fa, runDockerForeground as fi, callerEnvCredentials as fn, recordMaskOnlyValue as fr, wouldReturnToSdkProvider as ft, computeImplicitDeleteEdges as g, StateError as ga, AssetManifestLoader as gi, STATE_RESOURCES_MALFORMED as gn, LockManager as gr, beginCommandInterruptScope as gt, IMPLICIT_DELETE_DEPENDENCIES as h, StackTerminationProtectionError as ha, stripControlChars as hi, INTRINSIC_KEYS as hn, scrubResourceRecord as hr, maskerOrIdentity as ht, DeploymentEventsReader as i, IntrinsicResolutionRefusalError as ia, describeDockerCapturedOutput as ii, s3BucketArn as in, createSecretMasker as ir, secretBearing as it, isFinalSnapshotError as j, __exportAll as ja, ssmResolvedValueType as ji, malformedResourcesWarning as jn, hasReasonlessBaselineRefusal as jr, carriesFetchableDynamicReference as jt, ccRoutedFinalSnapshotError as k, describeAwsFailure as ka, stateBucketExistenceConfirmed as ki, malformedResourceEntriesWarning as kn, exportNamesCarriedFrom as kr, IntrinsicFunctionResolver as kt, replayRollback as l, NestedStackChildDirectDestroyError as la, getDockerCmd as li, applyRoleArnIfSet as ln, markSameGenerationBag as lr, collectInlinePolicyNamesManagedBySiblings as lt, maskingRetryLogger as m, StackHasActiveImportsError as ma, escapeRegExp$1 as mi, DiffCalculator as mn, redactSecretsForState as mr, maskDeep as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, DeployCancelledError as na, buildDenyExternalAccessPolicy as ni, producerRegionsFromState as nn, TEMPLATE_SOURCED_RULES as nr, exportAliasCollisionScrubWarning as nt, planFailedOps as o, LocalStartServiceError as oa, describeDockerFailure as oi, s3BucketDualStackDomainName as on, errorCauseChain as or, secretSafeKeyDisplay as ot, withResourceDeadline as p, ResourceUpdateNotSupportedError as pa, runDockerStreaming as pi, envCredentialsAreAssumedRole as pn, recoverMaskedOutput as pr, createMaskedRetryLogger as pt, formatResourceLine as q, AwsClients as qi, findActionableSilentDrops as qn, BOOTSTRAP_MARKER_PREFIX as qr, configBooleanRefusal as qt, DeployEngine as r, DynamicReferenceRegionAmbiguousError as ra, buildDockerImage as ri, withSharedDrainBudget as rn, carriesSecretMask as rr, isExportAliasCollision as rt, planRollback as s, LockError as sa, dockerSpawnEnvWithSensitive as si, s3BucketRegionalDomainName as sn, identityKeyFor as sr, getCurrentResourceSecrets as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, DependencyError as ta, validateContainerRepoName as ti, classifyReplaySecretRegion as tn, STATE_SOURCED_READBACK_RULES as tr, collectPublishedOutputNames as tt, resolveReplacementOldType as u, PartialFailureError as ua, partitionSensitiveEnv as ui, AWS_CREDENTIAL_ENV_KEYS as un, maskSecretsInError as ur, clearOnUpdateRemoval as ut, isSecretBearingReferenceString as v, formatError as va, Synthesizer as vi, displayLogicalId as vn, rebuildClientForBucketRegion as vr, interruptWatchListenerCount as vt, reachableDivergentParameters as w, isThrottlingError as wa, resolveCaptureObservedState as wi, malformedLocalOutputsWarning as wn, forceQuitRecoveryClause as wr, UNSPECIFIED_SKIP_REASON as wt, bindingSkippedOutputs as x, withErrorHandling as xa, getLegacyStateBucketName as xi, isReadableResourceEntry as xn, UNREPRODUCIBLE_LOCK_CLAUSE as xr, CloudControlProvider as xt, keptWholeReasonText as y, isCdkdError as ya, synthesisStatusMessage as yi, hasReadableOutputs as yn, producerCoordinateKey as yr, isInterruptedWaitError as yt, isStatefulRecreateTargetForReplace as z, expectedOwnerParam as zi, refuseMalformedResourcesForDestroy as zn, AssetPublisher as zr, refStateLookupFromResource as zt };
|
|
47324
|
+
//# sourceMappingURL=deploy-engine-RoGuHEgf.js.map
|