@go-to-k/cdkd 0.291.25 → 0.291.26
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-B32vpt_E.js → asg-provider-Dbqbr89e.js} +2 -2
- package/dist/{asg-provider-B32vpt_E.js.map → asg-provider-Dbqbr89e.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-JdJuqXID.js → deploy-engine-BZps_IKn.js} +1500 -702
- package/dist/deploy-engine-BZps_IKn.js.map +1 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{program-DGa6mbzV.js → program-BALgPCWL.js} +154 -65
- package/dist/{program-DGa6mbzV.js.map → program-BALgPCWL.js.map} +1 -1
- package/dist/{version-BuS5njuZ.js → version-BkoR4hMq.js} +2 -2
- package/dist/{version-BuS5njuZ.js.map → version-BkoR4hMq.js.map} +1 -1
- package/package.json +2 -2
- package/dist/deploy-engine-JdJuqXID.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { C as displayAwsMessage, D as isPasteableIdent, E as displayStackName, O as truncateCodePoints, 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-Bt0RGDfb.js";
|
|
2
2
|
import { a as setAssumedRoleCredentials, c as currentStackAwsScope, i as getPreAssumeEnvCredentials, l as runInStackAwsScope, n as awsClientDefaults, o as setPreAssumeEnvCredentials, r as getAssumedRoleCredentials, s as ambientRegion, t as SECOND_ROLE_PUBLISH_REFUSAL } from "./aws-client-defaults-jISU4PHo.js";
|
|
3
|
-
import { t as getCdkdVersion } from "./version-
|
|
3
|
+
import { t as getCdkdVersion } from "./version-BkoR4hMq.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";
|
|
@@ -37,7 +37,7 @@ import { KMSClient, ListAliasesCommand } from "@aws-sdk/client-kms";
|
|
|
37
37
|
import { readFile } from "fs/promises";
|
|
38
38
|
import { isAbsolute as isAbsolute$1, resolve as resolve$1 } from "path";
|
|
39
39
|
import { CreateRepositoryCommand, DescribeImagesCommand as DescribeImagesCommand$1, DescribeRepositoriesCommand, ECRClient, GetAuthorizationTokenCommand, PutImageTagMutabilityCommand } from "@aws-sdk/client-ecr";
|
|
40
|
-
import { inspect } from "node:util";
|
|
40
|
+
import { inspect, isDeepStrictEqual } from "node:util";
|
|
41
41
|
import { hostname } from "os";
|
|
42
42
|
import graphlib from "graphlib";
|
|
43
43
|
import { DescribeDBClustersCommand, DescribeDBInstancesCommand, RDSClient } from "@aws-sdk/client-rds";
|
|
@@ -3451,6 +3451,24 @@ function displayAssemblyPath(value) {
|
|
|
3451
3451
|
return `"${body}"`;
|
|
3452
3452
|
}
|
|
3453
3453
|
/**
|
|
3454
|
+
* A file read-or-parse failure's CAUSE, for a message whose subject already
|
|
3455
|
+
* renders the path through {@link displayAssemblyPath} (go-to-k/cdkd#3617).
|
|
3456
|
+
*
|
|
3457
|
+
* - Node's own errno text repeats the path inside Node's quotes
|
|
3458
|
+
* (`ENOENT: no such file or directory, open '<path>'`), so printing
|
|
3459
|
+
* `err.message` whole re-opens the clause-injection the subject closed, one
|
|
3460
|
+
* colon later. Every occurrence of the path is replaced with `<path>` -- the
|
|
3461
|
+
* subject names it, bounded -- and what is left is sanitized.
|
|
3462
|
+
* - A `JSON.parse` failure is reduced to `invalid JSON`: V8 echoes a window of
|
|
3463
|
+
* the file's own bytes verbatim, `'` included, and the file is assembly-chosen
|
|
3464
|
+
* too -- the rule `AssemblyReader`'s `manifestReadFailureText` already states.
|
|
3465
|
+
*/
|
|
3466
|
+
function describeFileReadFailure(err, filePath) {
|
|
3467
|
+
if (err instanceof SyntaxError) return "invalid JSON";
|
|
3468
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
3469
|
+
return displaySafe(filePath === "" ? message : message.split(filePath).join("<path>"));
|
|
3470
|
+
}
|
|
3471
|
+
/**
|
|
3454
3472
|
* The shared tail of every containment refusal: what the value resolved to,
|
|
3455
3473
|
* what it escaped, and why that means the assembly is not CDK-generated. Each
|
|
3456
3474
|
* call site supplies its own subject ("Stack 'X' has templateFile='...' which
|
|
@@ -3603,11 +3621,11 @@ function collectStackMessages(assemblyDir, artifact) {
|
|
|
3603
3621
|
sideFile = JSON.parse(readFileSync(metadataPath, "utf-8"));
|
|
3604
3622
|
if (sideFile === null || typeof sideFile !== "object" || Array.isArray(sideFile)) throw new Error("expected a JSON object mapping construct paths to metadata entry arrays");
|
|
3605
3623
|
for (const [path, entries] of Object.entries(sideFile)) {
|
|
3606
|
-
if (!Array.isArray(entries)) throw new Error(`entry for path
|
|
3624
|
+
if (!Array.isArray(entries)) throw new Error(`entry for path ${displayStackName(path)} is not an array`);
|
|
3607
3625
|
merged[path] = [...merged[path] ?? [], ...entries];
|
|
3608
3626
|
}
|
|
3609
3627
|
} catch (error) {
|
|
3610
|
-
throw new SynthesisError(`Failed to read stack metadata file ${displayAssemblyPath(metadataPath)}: ${
|
|
3628
|
+
throw new SynthesisError(`Failed to read stack metadata file ${displayAssemblyPath(metadataPath)}: ${describeFileReadFailure(error, metadataPath)}`);
|
|
3611
3629
|
}
|
|
3612
3630
|
}
|
|
3613
3631
|
const messages = [];
|
|
@@ -3999,7 +4017,7 @@ var AssemblyReader = class {
|
|
|
3999
4017
|
const content = readFileSync(templatePath, "utf-8");
|
|
4000
4018
|
template = JSON.parse(content);
|
|
4001
4019
|
} catch (error) {
|
|
4002
|
-
throw new SynthesisError(`Failed to read template for stack ${displayStackName(stackName)}: ${
|
|
4020
|
+
throw new SynthesisError(`Failed to read template ${displayAssemblyPath(templatePath)} for stack ${displayStackName(stackName)}: ${describeFileReadFailure(error, templatePath)}`);
|
|
4003
4021
|
}
|
|
4004
4022
|
this.logger.debug(`Stack: ${displaySafe(stackName)}, Resources: ${Object.keys(template.Resources ?? {}).length}`);
|
|
4005
4023
|
let assetManifestPath;
|
|
@@ -6888,7 +6906,7 @@ function stringifyParamDefault(value, type, paramKey, logger) {
|
|
|
6888
6906
|
if (inner !== void 0 && isListParameterType(inner)) return "placeholder,placeholder";
|
|
6889
6907
|
return "placeholder";
|
|
6890
6908
|
}
|
|
6891
|
-
logger.warn(`Parameter
|
|
6909
|
+
logger.warn(`Parameter ${displayIdent(paramKey)} has unrecognized CFn Type ${displayIdent(type)}; using a generic string placeholder for the transient macro-expansion changeset. If CFn rejects the changeset with a type error, file an issue with the offending Type.`);
|
|
6892
6910
|
return PARAMETER_PLACEHOLDER;
|
|
6893
6911
|
}
|
|
6894
6912
|
return PARAMETER_PLACEHOLDER;
|
|
@@ -9560,7 +9578,7 @@ function warnEscapingBuildKitPaths(source, base, bound) {
|
|
|
9560
9578
|
const escape = assemblyPathEscape(base, bound, ref.path);
|
|
9561
9579
|
if (escape === void 0) continue;
|
|
9562
9580
|
const verb = ref.write ? "WRITE to" : "read";
|
|
9563
|
-
logger.warn(`Docker asset ${ref.field}` + (ref.where === ref.field ? "" : `[
|
|
9581
|
+
logger.warn(`Docker asset ${ref.field}` + (ref.where === ref.field ? "" : `[${displayIdent(ref.where)}]`) + ` names a host path outside the assembly, which ${renderAssemblyPathEscape(escape, bound, "load", `cdkd will ${verb} it during the image build, matching the CDK CLI — a pre-synthesized assembly is trusted input. If you did not produce this assembly, that is a host path it chose and the CloudFormation template does not show.`)}`);
|
|
9564
9582
|
}
|
|
9565
9583
|
}
|
|
9566
9584
|
/**
|
|
@@ -9578,7 +9596,7 @@ function warnManifestExecutable(executable) {
|
|
|
9578
9596
|
const [cmd, ...rest] = executable;
|
|
9579
9597
|
const logger = getLogger().child("assets");
|
|
9580
9598
|
logger.debug(`source.executable argv: ${redactDockerArgvValues([...executable]).join(" ")}`);
|
|
9581
|
-
logger.warn(`Docker asset source.executable runs a command this asset manifest chose, on this machine:
|
|
9599
|
+
logger.warn(`Docker asset source.executable runs a command this asset manifest chose, on this machine: ${displayAssemblyPath(cmd ?? "")}` + (rest.length > 0 ? ` (with ${rest.length} argument(s); --verbose shows them)` : "") + ". cdkd runs it, matching the CDK CLI — a pre-synthesized assembly is trusted input. Note that this means deploying from a pre-synthesized assembly DOES execute code from it, which the CloudFormation template does not show.");
|
|
9582
9600
|
}
|
|
9583
9601
|
/**
|
|
9584
9602
|
* One set per KIND rather than one set of composite keys. A `${kind}` + NUL +
|
|
@@ -9619,7 +9637,7 @@ function warnUnrecognizedAssetDestination(opts) {
|
|
|
9619
9637
|
const seen = warnedDestinations[opts.kind];
|
|
9620
9638
|
if (seen.has(opts.name)) return;
|
|
9621
9639
|
seen.add(opts.name);
|
|
9622
|
-
getLogger().child("assets").warn(`Asset destination ${opts.kind}
|
|
9640
|
+
getLogger().child("assets").warn(`Asset destination ${opts.kind} ${displayIdent(opts.name)} is not a CDK-bootstrap or cdkd-managed name, so cdkd uploads there exactly as this asset manifest wrote it, with your credentials. That is what a custom bootstrap looks like and is expected for one; if you did not configure it, the manifest chose where your assets go.`);
|
|
9623
9641
|
}
|
|
9624
9642
|
|
|
9625
9643
|
//#endregion
|
|
@@ -12428,7 +12446,7 @@ var S3StateBackend = class {
|
|
|
12428
12446
|
await this.ensureClientForBucket();
|
|
12429
12447
|
const newKey = this.getStateKey(stackName, region);
|
|
12430
12448
|
const shownStackName = this.displayName(stackName);
|
|
12431
|
-
const shownRegionName =
|
|
12449
|
+
const shownRegionName = displayIdent(region);
|
|
12432
12450
|
try {
|
|
12433
12451
|
this.logger.debug(`Getting state for stack: ${shownStackName} (${shownRegionName})`);
|
|
12434
12452
|
const response = await this.s3Client.send(new GetObjectCommand({
|
|
@@ -12436,8 +12454,8 @@ var S3StateBackend = class {
|
|
|
12436
12454
|
...await this.ownerParam(),
|
|
12437
12455
|
Key: newKey
|
|
12438
12456
|
}));
|
|
12439
|
-
if (!response.Body) throw new StateError(`State file for stack
|
|
12440
|
-
if (!response.ETag) throw new StateError(`State file for stack
|
|
12457
|
+
if (!response.Body) throw new StateError(`State file for stack ${shownStackName} (${shownRegionName}) has no body`);
|
|
12458
|
+
if (!response.ETag) throw new StateError(`State file for stack ${shownStackName} (${shownRegionName}) has no ETag`);
|
|
12441
12459
|
const bodyString = await response.Body.transformToString();
|
|
12442
12460
|
const parsed = this.parseStateBody(bodyString, stackName);
|
|
12443
12461
|
const { state, divergentBodyRegion } = this.adoptKeyRegion(parsed, region, shownStackName, shownRegionName);
|
|
@@ -12451,14 +12469,14 @@ var S3StateBackend = class {
|
|
|
12451
12469
|
if (!isNoSuchKey(error)) {
|
|
12452
12470
|
if (error instanceof StateError) throw error;
|
|
12453
12471
|
const detail = displaySafe(error instanceof Error ? error.message : String(error), { asciiOnly: true }) || "<unrenderable>";
|
|
12454
|
-
throw new StateError(`Failed to get state for stack
|
|
12472
|
+
throw new StateError(`Failed to get state for stack ${shownStackName} (${shownRegionName}): ${detail}`, error instanceof Error ? error : void 0);
|
|
12455
12473
|
}
|
|
12456
12474
|
this.logger.debug(`No state at new key for stack: ${shownStackName} (${shownRegionName})`);
|
|
12457
12475
|
}
|
|
12458
12476
|
const legacy = await this.tryGetLegacy(stackName, region);
|
|
12459
12477
|
if (legacy) {
|
|
12460
|
-
const shownKey =
|
|
12461
|
-
this.logger.warn(`Loaded legacy state for stack
|
|
12478
|
+
const shownKey = displayIdent(this.getLegacyStateKey(stackName), { maxCodePoints: STACK_REF_MAX_CODE_POINTS });
|
|
12479
|
+
this.logger.warn(`Loaded legacy state for stack ${shownStackName} from ${shownKey}. It will be migrated to the region-scoped layout on next save.`);
|
|
12462
12480
|
return {
|
|
12463
12481
|
...legacy,
|
|
12464
12482
|
migrationPending: true
|
|
@@ -12548,7 +12566,7 @@ var S3StateBackend = class {
|
|
|
12548
12566
|
const legacyProbe = await this.probeLegacyState(stackName);
|
|
12549
12567
|
if (legacyProbe.kind === "unreadable") {
|
|
12550
12568
|
const safeName = this.displayName(stackName);
|
|
12551
|
-
this.logger.warn(`Could not read the legacy state record for
|
|
12569
|
+
this.logger.warn(`Could not read the legacy state record for ${safeName} while cleaning up (${legacyProbe.reason}). If one exists it was left in place. Re-run with --verbose for the details.`);
|
|
12552
12570
|
}
|
|
12553
12571
|
if (legacyProbeBelongsTo(legacyProbe, region)) {
|
|
12554
12572
|
await this.s3Client.send(new DeleteObjectCommand({
|
|
@@ -12595,8 +12613,8 @@ var S3StateBackend = class {
|
|
|
12595
12613
|
await this.ensureClientForBucket();
|
|
12596
12614
|
const key = this.getLegacyStateKey(stackName);
|
|
12597
12615
|
try {
|
|
12598
|
-
const safeStack =
|
|
12599
|
-
this.logger.debug(`Deleting legacy state: ${safeStack} (${
|
|
12616
|
+
const safeStack = displayStackName(stackName);
|
|
12617
|
+
this.logger.debug(`Deleting legacy state: ${safeStack} (${displayIdent(key, { maxCodePoints: STACK_REF_MAX_CODE_POINTS })})`);
|
|
12600
12618
|
await this.s3Client.send(new DeleteObjectCommand({
|
|
12601
12619
|
Bucket: this.config.bucket,
|
|
12602
12620
|
...await this.ownerParam(),
|
|
@@ -12608,7 +12626,7 @@ var S3StateBackend = class {
|
|
|
12608
12626
|
bucket: this.config.bucket,
|
|
12609
12627
|
operation: "DeleteObject"
|
|
12610
12628
|
});
|
|
12611
|
-
throw new StateError(`Failed to delete legacy state for stack
|
|
12629
|
+
throw new StateError(`Failed to delete legacy state for stack ${displayStackName(stackName)}: ${normalized.message}`, normalized);
|
|
12612
12630
|
}
|
|
12613
12631
|
}
|
|
12614
12632
|
/**
|
|
@@ -13005,7 +13023,7 @@ var S3StateBackend = class {
|
|
|
13005
13023
|
* message that renders one goes through here (issue #2170's class).
|
|
13006
13024
|
*/
|
|
13007
13025
|
displayName(stackName) {
|
|
13008
|
-
return
|
|
13026
|
+
return displayStackName(stackName);
|
|
13009
13027
|
}
|
|
13010
13028
|
/**
|
|
13011
13029
|
* Make the S3 KEY's region the region of the record read from it, and report
|
|
@@ -13073,9 +13091,8 @@ var S3StateBackend = class {
|
|
|
13073
13091
|
region
|
|
13074
13092
|
} };
|
|
13075
13093
|
const kind = describeRegionValueKind(raw);
|
|
13076
|
-
this.logger.warn(`State record for stack
|
|
13077
|
-
|
|
13078
|
-
this.logger.debug(`State record for stack '${shownStackName}' carries body region ` + (shownBodyRegion.text === "" ? `${kind}, which renders as nothing — its kind above is the whole of it.` : `'${shownBodyRegion.text}'${shownBodyRegion.truncated ? " [cut]" : ""}.`));
|
|
13094
|
+
this.logger.warn(`State record for stack ${shownStackName} carries a 'region' of its own (${kind}) that is not the region of the S3 key it was read from (${shownRegionName}). cdkd stamps the key's region into every record it writes, so this record was not written by cdkd. Continuing against ${shownRegionName} — the key is authoritative. Re-run with --verbose to see the recorded value, where it has one to show.`);
|
|
13095
|
+
this.logger.debug(`State record for stack ${shownStackName} carries body region ` + (displaySafe(raw, { asciiOnly: true }) === "" ? `${kind}, which renders as nothing — its kind above is the whole of it.` : `${displayIdent(raw)}.`));
|
|
13079
13096
|
return {
|
|
13080
13097
|
state: {
|
|
13081
13098
|
...state,
|
|
@@ -13092,7 +13109,7 @@ var S3StateBackend = class {
|
|
|
13092
13109
|
Key: this.getLegacyStateKey(stackName)
|
|
13093
13110
|
}));
|
|
13094
13111
|
if (!response.Body) {
|
|
13095
|
-
this.logger.debug(`Legacy state probe for
|
|
13112
|
+
this.logger.debug(`Legacy state probe for ${this.displayName(stackName)}: response carried no body`);
|
|
13096
13113
|
return {
|
|
13097
13114
|
kind: "unreadable",
|
|
13098
13115
|
reason: "the response carried no body"
|
|
@@ -13102,7 +13119,7 @@ var S3StateBackend = class {
|
|
|
13102
13119
|
const raw = JSON.parse(bodyString).region;
|
|
13103
13120
|
if (!raw) return { kind: "no-region" };
|
|
13104
13121
|
if (typeof raw !== "string") {
|
|
13105
|
-
this.logger.debug(`Legacy state probe for
|
|
13122
|
+
this.logger.debug(`Legacy state probe for ${this.displayName(stackName)}: 'region' is ${typeof raw}, not a string`);
|
|
13106
13123
|
return {
|
|
13107
13124
|
kind: "unreadable",
|
|
13108
13125
|
reason: `its 'region' field is ${typeof raw}, not a string`
|
|
@@ -13115,7 +13132,7 @@ var S3StateBackend = class {
|
|
|
13115
13132
|
} catch (error) {
|
|
13116
13133
|
if (isNoSuchKey(error)) return { kind: "absent" };
|
|
13117
13134
|
const { detail } = describeAwsFailure(error);
|
|
13118
|
-
this.logger.debug(`Could not read legacy state region for
|
|
13135
|
+
this.logger.debug(`Could not read legacy state region for ${this.displayName(stackName)}: ${displaySafe(detail, { asciiOnly: true }) || "<unrenderable>"}`);
|
|
13119
13136
|
const cls = error instanceof Error && error.name ? error.name : "an unknown error";
|
|
13120
13137
|
return {
|
|
13121
13138
|
kind: "unreadable",
|
|
@@ -13169,12 +13186,12 @@ var S3StateBackend = class {
|
|
|
13169
13186
|
const bodyString = await response.Body.transformToString();
|
|
13170
13187
|
const state = this.parseStateBody(bodyString, stackName);
|
|
13171
13188
|
if (state.region && state.region !== region) {
|
|
13172
|
-
this.logger.debug(`Legacy state for stack
|
|
13189
|
+
this.logger.debug(`Legacy state for stack ${this.displayName(stackName)} has region ${displayIdent(state.region)}, not ${displayIdent(region)} — skipping legacy fallback.`);
|
|
13173
13190
|
return null;
|
|
13174
13191
|
}
|
|
13175
13192
|
const legacyRegion = state.region;
|
|
13176
13193
|
if (legacyRegion !== void 0 && (typeof legacyRegion !== "string" || legacyRegion === "")) {
|
|
13177
|
-
this.logger.debug(`Legacy state for stack
|
|
13194
|
+
this.logger.debug(`Legacy state for stack ${this.displayName(stackName)} names no usable region (${describeRegionValueKind(legacyRegion)}); reading it as region-less.`);
|
|
13178
13195
|
const { region: _dropped, ...withoutRegion } = state;
|
|
13179
13196
|
return {
|
|
13180
13197
|
state: withoutRegion,
|
|
@@ -13188,7 +13205,7 @@ var S3StateBackend = class {
|
|
|
13188
13205
|
} catch (error) {
|
|
13189
13206
|
if (isNoSuchKey(error)) return null;
|
|
13190
13207
|
const detail = displaySafe(error instanceof Error ? error.message : String(error), { asciiOnly: true }) || "<unrenderable>";
|
|
13191
|
-
throw new StateError(`Failed to get legacy state for stack
|
|
13208
|
+
throw new StateError(`Failed to get legacy state for stack ${this.displayName(stackName)}: ${detail}`, error instanceof Error ? error : void 0);
|
|
13192
13209
|
}
|
|
13193
13210
|
}
|
|
13194
13211
|
/**
|
|
@@ -13204,18 +13221,18 @@ var S3StateBackend = class {
|
|
|
13204
13221
|
} catch (error) {
|
|
13205
13222
|
const raw = error instanceof Error ? error.message : String(error);
|
|
13206
13223
|
const detail = displaySafe(raw, { asciiOnly: true }) || "<unrenderable>";
|
|
13207
|
-
throw new StateError(`State file for stack
|
|
13224
|
+
throw new StateError(`State file for stack ${this.displayName(stackName)} is not valid JSON: ${detail}`, error instanceof Error ? error : void 0);
|
|
13208
13225
|
}
|
|
13209
13226
|
if (root === null || typeof root !== "object" || Array.isArray(root)) {
|
|
13210
13227
|
const got = root === null ? "null" : Array.isArray(root) ? "an array" : `a ${typeof root}`;
|
|
13211
|
-
throw new StateError(`State file for stack
|
|
13228
|
+
throw new StateError(`State file for stack ${this.displayName(stackName)} is not a JSON object (it parses to ${got}), so cdkd cannot read it as a state record.`);
|
|
13212
13229
|
}
|
|
13213
13230
|
const parsed = root;
|
|
13214
13231
|
const v = parsed.version;
|
|
13215
13232
|
if (v !== void 0 && !STATE_SCHEMA_VERSIONS_READABLE.includes(v)) {
|
|
13216
13233
|
const vShown = v;
|
|
13217
13234
|
const shown = displaySafe(vShown === null ? "null" : vShown, { asciiOnly: true }) || "<unrenderable>";
|
|
13218
|
-
throw new StateError(`Unsupported state schema version ${shown} for stack
|
|
13235
|
+
throw new StateError(`Unsupported state schema version ${shown} for stack ${this.displayName(stackName)}. This cdkd binary supports versions ${STATE_SCHEMA_VERSIONS_READABLE.join(", ")}. Upgrade cdkd to a version that supports schema ${shown}.`);
|
|
13219
13236
|
}
|
|
13220
13237
|
return parsed;
|
|
13221
13238
|
}
|
|
@@ -13273,7 +13290,7 @@ const LOCK_OBJECT_DESCRIPTION = "a stack lock heartbeat, which records the lock
|
|
|
13273
13290
|
* `grep safeSegment` answers it exactly.
|
|
13274
13291
|
*/
|
|
13275
13292
|
function safeSegment(value) {
|
|
13276
|
-
return
|
|
13293
|
+
return displayIdent(value, { maxCodePoints: STACK_REF_MAX_CODE_POINTS });
|
|
13277
13294
|
}
|
|
13278
13295
|
/**
|
|
13279
13296
|
* S3-based lock manager using conditional writes (If-None-Match)
|
|
@@ -13481,7 +13498,7 @@ var LockManager = class {
|
|
|
13481
13498
|
}
|
|
13482
13499
|
return false;
|
|
13483
13500
|
}
|
|
13484
|
-
throw new LockError(`Failed to acquire lock for stack
|
|
13501
|
+
throw new LockError(`Failed to acquire lock for stack ${safeSegment(stackName)} (${safeSegment(region)}): ${displaySafe(error instanceof Error ? error.message : String(error), { asciiOnly: true }) || "<unrenderable>"}`, error instanceof Error ? error : void 0);
|
|
13485
13502
|
}
|
|
13486
13503
|
}
|
|
13487
13504
|
/**
|
|
@@ -13532,7 +13549,7 @@ var LockManager = class {
|
|
|
13532
13549
|
...await this.ownerParam(),
|
|
13533
13550
|
Key: key
|
|
13534
13551
|
}));
|
|
13535
|
-
if (!response.Body) throw new LockError(`Lock file for stack
|
|
13552
|
+
if (!response.Body) throw new LockError(`Lock file for stack ${shownStack} has no body`);
|
|
13536
13553
|
const bodyString = await response.Body.transformToString();
|
|
13537
13554
|
const raw = JSON.parse(bodyString);
|
|
13538
13555
|
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
|
|
@@ -13558,7 +13575,7 @@ var LockManager = class {
|
|
|
13558
13575
|
}
|
|
13559
13576
|
if (error instanceof LockError) throw error;
|
|
13560
13577
|
const detail = displaySafe(error instanceof Error ? error.message : String(error), { asciiOnly: true }) || "<unrenderable>";
|
|
13561
|
-
throw new LockError(`Failed to get lock info for stack
|
|
13578
|
+
throw new LockError(`Failed to get lock info for stack ${shownStack}: ${detail}`, error instanceof Error ? error : void 0);
|
|
13562
13579
|
}
|
|
13563
13580
|
}
|
|
13564
13581
|
/**
|
|
@@ -13852,7 +13869,7 @@ var LockManager = class {
|
|
|
13852
13869
|
objectDescription: LOCK_OBJECT_DESCRIPTION
|
|
13853
13870
|
});
|
|
13854
13871
|
} catch (error) {
|
|
13855
|
-
report(`Could not purge noncurrent versions of the lock key
|
|
13872
|
+
report(`Could not purge noncurrent versions of the lock key ${displayIdent(key, { maxCodePoints: STACK_REF_MAX_CODE_POINTS })} in bucket '${this.config.bucket}': the purge could not be started. Their previous versions survive and remain readable via GetObject with a VersionId (${LOCK_OBJECT_DESCRIPTION}). Grant s3:ListBucketVersions and s3:DeleteObjectVersion on the state bucket, or purge the key by hand. Underlying error: ${error instanceof Error ? error.message : String(error)}`);
|
|
13856
13873
|
}
|
|
13857
13874
|
}
|
|
13858
13875
|
/**
|
|
@@ -14054,7 +14071,7 @@ var LockManager = class {
|
|
|
14054
14071
|
const lockInfo = await this.getLockInfo(stackName, region);
|
|
14055
14072
|
if (lockInfo) {
|
|
14056
14073
|
if (attempt < maxRetries) {
|
|
14057
|
-
this.logger.info(`Stack
|
|
14074
|
+
this.logger.info(`Stack ${safeSegment(stackName)} (${safeSegment(region)}) is locked by ${lockInfo.owner}${lockInfo.operation ? ` (operation: ${lockInfo.operation})` : ""}. Lock ${formatLockExpiry(lockInfo.expiresAt)}. Retrying in ${this.formatDuration(retryDelay)}... (attempt ${attempt + 1}/${maxRetries})`);
|
|
14058
14075
|
await new Promise((resolve) => setTimeout(resolve, retryDelay));
|
|
14059
14076
|
continue;
|
|
14060
14077
|
}
|
|
@@ -14066,7 +14083,7 @@ var LockManager = class {
|
|
|
14066
14083
|
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)}`;
|
|
14067
14084
|
const safeStack = safeSegment(stackName);
|
|
14068
14085
|
const safeRegion = safeSegment(region);
|
|
14069
|
-
throw new LockError(`Failed to acquire lock for stack
|
|
14086
|
+
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}`));
|
|
14070
14087
|
}
|
|
14071
14088
|
};
|
|
14072
14089
|
/**
|
|
@@ -14701,6 +14718,117 @@ function carriesSecretMask(value) {
|
|
|
14701
14718
|
return walk(value);
|
|
14702
14719
|
}
|
|
14703
14720
|
/**
|
|
14721
|
+
* The mask-only plaintexts of a pass that are a `NoEcho` value SUPPLIED IN THIS
|
|
14722
|
+
* DEPLOY (go-to-k/cdkd#3662), keyed by the pass's map exactly like
|
|
14723
|
+
* {@link resolvedPairsOf}: a copy of the map is a different pass and starts
|
|
14724
|
+
* with none.
|
|
14725
|
+
*
|
|
14726
|
+
* WHY A SIDE SET, when the sentinel value is otherwise the whole marker: the
|
|
14727
|
+
* mask-only class has TWO populations and one question tells them apart. A
|
|
14728
|
+
* `NoEcho` value (a handler's `Data`, or a producer output recovered from this
|
|
14729
|
+
* process) is fresh evidence that can differ from what the record's `***`
|
|
14730
|
+
* stood for. A DERIVED needle (`Fn::Base64` over a `{{resolve:...}}` input,
|
|
14731
|
+
* issue #2759) is the encoding of a secret whose reference the record already
|
|
14732
|
+
* positions, and treating it as fresh would update that resource on every
|
|
14733
|
+
* deploy — measured on the #3662 review round with a Base64 `UserData`. The
|
|
14734
|
+
* engine's no-change skip asks {@link carriesFreshNoEchoValue}, and only the
|
|
14735
|
+
* first population answers it.
|
|
14736
|
+
*/
|
|
14737
|
+
const freshNoEchoValuesOf = /* @__PURE__ */ new WeakMap();
|
|
14738
|
+
function freshNoEchoSet(secrets) {
|
|
14739
|
+
let set = freshNoEchoValuesOf.get(secrets);
|
|
14740
|
+
if (set === void 0) {
|
|
14741
|
+
set = /* @__PURE__ */ new Set();
|
|
14742
|
+
freshNoEchoValuesOf.set(secrets, set);
|
|
14743
|
+
}
|
|
14744
|
+
return set;
|
|
14745
|
+
}
|
|
14746
|
+
/**
|
|
14747
|
+
* {@link recordMaskOnlyValuesIn} for a `NoEcho` value supplied in THIS deploy,
|
|
14748
|
+
* which additionally marks each leaf it registered as FRESH (see
|
|
14749
|
+
* {@link freshNoEchoValuesOf}). The three writers are the ones that hold such a
|
|
14750
|
+
* value: the resolver's `Fn::GetAtt` note for a resource whose provider
|
|
14751
|
+
* declared `NoEcho` earlier in this run, the cross-stack recovery of an output
|
|
14752
|
+
* this process masked, and `Fn::Base64` over an input that embeds one.
|
|
14753
|
+
*/
|
|
14754
|
+
function recordFreshNoEchoValuesIn(value, secrets, excluded) {
|
|
14755
|
+
recordMaskOnlyValuesIn(value, secrets, excluded);
|
|
14756
|
+
const fresh = freshNoEchoSet(secrets);
|
|
14757
|
+
const seen = /* @__PURE__ */ new Set();
|
|
14758
|
+
const walk = (node) => {
|
|
14759
|
+
if (typeof node === "string") {
|
|
14760
|
+
if (excluded?.has(node) !== true && isMaskOnlyPlaintext(secrets, node)) fresh.add(node);
|
|
14761
|
+
return;
|
|
14762
|
+
}
|
|
14763
|
+
if (node === null || typeof node !== "object") return;
|
|
14764
|
+
if (seen.has(node)) return;
|
|
14765
|
+
seen.add(node);
|
|
14766
|
+
if (Array.isArray(node)) {
|
|
14767
|
+
for (const item of node) walk(item);
|
|
14768
|
+
return;
|
|
14769
|
+
}
|
|
14770
|
+
for (const child of Object.values(node)) walk(child);
|
|
14771
|
+
};
|
|
14772
|
+
walk(value);
|
|
14773
|
+
}
|
|
14774
|
+
/**
|
|
14775
|
+
* Carry the FRESH mark of `plaintext` from `from` into `to`, when `from` marks
|
|
14776
|
+
* it and `to` holds it as mask-only (go-to-k/cdkd#3717). The one caller is the
|
|
14777
|
+
* resolver's inherited-parameter recording in a nested CHILD: the parent's
|
|
14778
|
+
* bag for the `AWS::CloudFormation::Stack` row is where a `NoEcho` value this
|
|
14779
|
+
* deploy supplied was marked, and the child resource reading the parameter
|
|
14780
|
+
* records the pair into its OWN bag, a different pass — which is exactly the
|
|
14781
|
+
* copy {@link freshNoEchoValuesOf} otherwise starts empty, so without this the
|
|
14782
|
+
* child's no-change skip read the new value's `***` as equal to its record.
|
|
14783
|
+
*/
|
|
14784
|
+
function carryFreshNoEchoMark(from, to, plaintext) {
|
|
14785
|
+
if (freshNoEchoValuesOf.get(from)?.has(plaintext) !== true) return;
|
|
14786
|
+
if (!isMaskOnlyPlaintext(to, plaintext)) return;
|
|
14787
|
+
freshNoEchoSet(to).add(plaintext);
|
|
14788
|
+
}
|
|
14789
|
+
/**
|
|
14790
|
+
* Does `text` EMBED a fresh `NoEcho` value of this pass? Asked by
|
|
14791
|
+
* `Fn::Base64`, whose encoded result is a new plaintext that carries the
|
|
14792
|
+
* value's freshness along with its secrecy.
|
|
14793
|
+
*/
|
|
14794
|
+
function embedsFreshNoEchoValue(text, secrets) {
|
|
14795
|
+
const fresh = freshNoEchoValuesOf.get(secrets);
|
|
14796
|
+
if (fresh === void 0) return false;
|
|
14797
|
+
for (const value of fresh) if (isMaskOnlyPlaintext(secrets, value) && text.includes(value)) return true;
|
|
14798
|
+
return false;
|
|
14799
|
+
}
|
|
14800
|
+
/**
|
|
14801
|
+
* Does `value` hold a string leaf that {@link redactSecretsForState} will
|
|
14802
|
+
* replace with {@link SECRET_MASK} AND that is a `NoEcho` value supplied in
|
|
14803
|
+
* this deploy (go-to-k/cdkd#3662)?
|
|
14804
|
+
*
|
|
14805
|
+
* A mask-only needle reaches only the whole-value arm, so such a leaf is
|
|
14806
|
+
* masked exactly when the WHOLE leaf is the plaintext. What makes the question
|
|
14807
|
+
* worth asking: the mask identifies nothing. Two expression-redacted bags that
|
|
14808
|
+
* compare equal hold the same references, which is what a rotated secret
|
|
14809
|
+
* behind an unchanged `{{resolve:...}}` means. Two mask-redacted bags that
|
|
14810
|
+
* compare equal prove only that both hold SOME `NoEcho` value, so a caller
|
|
14811
|
+
* deciding "nothing changed" from such a comparison has to ask this first.
|
|
14812
|
+
*
|
|
14813
|
+
* A leaf that already IS the mask does not count: it was read back from state
|
|
14814
|
+
* (the resolver records that read as a redacted read), not supplied fresh in
|
|
14815
|
+
* this pass. Neither does a derived needle (see {@link freshNoEchoValuesOf}).
|
|
14816
|
+
*/
|
|
14817
|
+
function carriesFreshNoEchoValue(value, secrets) {
|
|
14818
|
+
const fresh = freshNoEchoValuesOf.get(secrets);
|
|
14819
|
+
if (fresh === void 0 || fresh.size === 0) return false;
|
|
14820
|
+
const seen = /* @__PURE__ */ new Set();
|
|
14821
|
+
const walk = (node) => {
|
|
14822
|
+
if (typeof node === "string") return fresh.has(node) && isMaskOnlyPlaintext(secrets, node);
|
|
14823
|
+
if (node === null || typeof node !== "object") return false;
|
|
14824
|
+
if (seen.has(node)) return false;
|
|
14825
|
+
seen.add(node);
|
|
14826
|
+
if (Array.isArray(node)) return node.some((item) => walk(item));
|
|
14827
|
+
return Object.values(node).some((child) => walk(child));
|
|
14828
|
+
};
|
|
14829
|
+
return walk(value);
|
|
14830
|
+
}
|
|
14831
|
+
/**
|
|
14704
14832
|
* The plaintexts the PERSIST path may scan for as SUBSTRINGS — every recorded
|
|
14705
14833
|
* one except the mask-only class. See the mask-only channel note above for why the
|
|
14706
14834
|
* mask class is whole-leaf only.
|
|
@@ -20557,7 +20685,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20557
20685
|
["AWS::ApiGateway::Account", {
|
|
20558
20686
|
handled: /* @__PURE__ */ new Set(["CloudWatchRoleArn"]),
|
|
20559
20687
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20560
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20688
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20689
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
20690
|
+
ccRouteUnavailable: false
|
|
20561
20691
|
}],
|
|
20562
20692
|
["AWS::ApiGateway::Authorizer", {
|
|
20563
20693
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20573,7 +20703,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20573
20703
|
"Type"
|
|
20574
20704
|
]),
|
|
20575
20705
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20576
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20706
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20707
|
+
readOnly: /* @__PURE__ */ new Set(["AuthorizerId"]),
|
|
20708
|
+
ccRouteUnavailable: false
|
|
20577
20709
|
}],
|
|
20578
20710
|
["AWS::ApiGateway::Deployment", {
|
|
20579
20711
|
handled: /* @__PURE__ */ new Set(["Description", "RestApiId"]),
|
|
@@ -20582,7 +20714,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20582
20714
|
["StageDescription", "CFn-only convenience for inline-creating a Stage; declare AWS::ApiGateway::Stage with the Description property instead"],
|
|
20583
20715
|
["StageName", "CFn-only convenience for inline-creating a Stage from a Deployment; declare AWS::ApiGateway::Stage explicitly to attach to this Deployment"]
|
|
20584
20716
|
]),
|
|
20585
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["DeploymentCanarySettings"])
|
|
20717
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["DeploymentCanarySettings"]),
|
|
20718
|
+
readOnly: /* @__PURE__ */ new Set(["DeploymentId"]),
|
|
20719
|
+
ccRouteUnavailable: false
|
|
20586
20720
|
}],
|
|
20587
20721
|
["AWS::ApiGateway::Method", {
|
|
20588
20722
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20601,7 +20735,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20601
20735
|
"RestApiId"
|
|
20602
20736
|
]),
|
|
20603
20737
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20604
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20738
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20739
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
20740
|
+
ccRouteUnavailable: false
|
|
20605
20741
|
}],
|
|
20606
20742
|
["AWS::ApiGateway::Resource", {
|
|
20607
20743
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20610,7 +20746,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20610
20746
|
"RestApiId"
|
|
20611
20747
|
]),
|
|
20612
20748
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20613
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20749
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20750
|
+
readOnly: /* @__PURE__ */ new Set(["ResourceId"]),
|
|
20751
|
+
ccRouteUnavailable: false
|
|
20614
20752
|
}],
|
|
20615
20753
|
["AWS::ApiGateway::Stage", {
|
|
20616
20754
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20630,7 +20768,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20630
20768
|
"Variables"
|
|
20631
20769
|
]),
|
|
20632
20770
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20633
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20771
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20772
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
20773
|
+
ccRouteUnavailable: false
|
|
20634
20774
|
}],
|
|
20635
20775
|
["AWS::ApiGatewayV2::Api", {
|
|
20636
20776
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20655,7 +20795,13 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20655
20795
|
["RouteKey", "Quick-create shortcut: CreateApi inline-creates a default route+integration from RouteKey/Target/CredentialsArn. cdkd models routes/integrations as explicit AWS::ApiGatewayV2::Route/::Integration resources, so this convenience field is not wired."],
|
|
20656
20796
|
["Target", "Quick-create shortcut (paired with RouteKey/CredentialsArn); cdkd models the integration as an explicit AWS::ApiGatewayV2::Integration resource instead."]
|
|
20657
20797
|
]),
|
|
20658
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20798
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20799
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
20800
|
+
"ApiEndpoint",
|
|
20801
|
+
"ApiId",
|
|
20802
|
+
"ExecuteApiArn"
|
|
20803
|
+
]),
|
|
20804
|
+
ccRouteUnavailable: false
|
|
20659
20805
|
}],
|
|
20660
20806
|
["AWS::ApiGatewayV2::Authorizer", {
|
|
20661
20807
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20672,7 +20818,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20672
20818
|
"Name"
|
|
20673
20819
|
]),
|
|
20674
20820
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20675
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20821
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20822
|
+
readOnly: /* @__PURE__ */ new Set(["AuthorizerId"]),
|
|
20823
|
+
ccRouteUnavailable: false
|
|
20676
20824
|
}],
|
|
20677
20825
|
["AWS::ApiGatewayV2::Integration", {
|
|
20678
20826
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20696,7 +20844,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20696
20844
|
"TlsConfig"
|
|
20697
20845
|
]),
|
|
20698
20846
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20699
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20847
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20848
|
+
readOnly: /* @__PURE__ */ new Set(["IntegrationId"]),
|
|
20849
|
+
ccRouteUnavailable: false
|
|
20700
20850
|
}],
|
|
20701
20851
|
["AWS::ApiGatewayV2::Route", {
|
|
20702
20852
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20714,7 +20864,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20714
20864
|
"Target"
|
|
20715
20865
|
]),
|
|
20716
20866
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20717
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20867
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20868
|
+
readOnly: /* @__PURE__ */ new Set(["RouteId"]),
|
|
20869
|
+
ccRouteUnavailable: false
|
|
20718
20870
|
}],
|
|
20719
20871
|
["AWS::ApiGatewayV2::Stage", {
|
|
20720
20872
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20731,7 +20883,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20731
20883
|
"Tags"
|
|
20732
20884
|
]),
|
|
20733
20885
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20734
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20886
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20887
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
20888
|
+
ccRouteUnavailable: false
|
|
20735
20889
|
}],
|
|
20736
20890
|
["AWS::AppSync::ApiKey", {
|
|
20737
20891
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20740,7 +20894,13 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20740
20894
|
"Expires"
|
|
20741
20895
|
]),
|
|
20742
20896
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20743
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20897
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20898
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
20899
|
+
"ApiKey",
|
|
20900
|
+
"ApiKeyId",
|
|
20901
|
+
"Arn"
|
|
20902
|
+
]),
|
|
20903
|
+
ccRouteUnavailable: false
|
|
20744
20904
|
}],
|
|
20745
20905
|
["AWS::AppSync::DataSource", {
|
|
20746
20906
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20759,7 +20919,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20759
20919
|
"Type"
|
|
20760
20920
|
]),
|
|
20761
20921
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20762
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20922
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20923
|
+
readOnly: /* @__PURE__ */ new Set(["DataSourceArn"]),
|
|
20924
|
+
ccRouteUnavailable: false
|
|
20763
20925
|
}],
|
|
20764
20926
|
["AWS::AppSync::GraphQLApi", {
|
|
20765
20927
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20783,7 +20945,17 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20783
20945
|
"XrayEnabled"
|
|
20784
20946
|
]),
|
|
20785
20947
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20786
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20948
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20949
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
20950
|
+
"ApiId",
|
|
20951
|
+
"Arn",
|
|
20952
|
+
"GraphQLDns",
|
|
20953
|
+
"GraphQLEndpointArn",
|
|
20954
|
+
"GraphQLUrl",
|
|
20955
|
+
"RealtimeDns",
|
|
20956
|
+
"RealtimeUrl"
|
|
20957
|
+
]),
|
|
20958
|
+
ccRouteUnavailable: false
|
|
20787
20959
|
}],
|
|
20788
20960
|
["AWS::AppSync::GraphQLSchema", {
|
|
20789
20961
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20792,7 +20964,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20792
20964
|
"DefinitionS3Location"
|
|
20793
20965
|
]),
|
|
20794
20966
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20795
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20967
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20968
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
20969
|
+
ccRouteUnavailable: false
|
|
20796
20970
|
}],
|
|
20797
20971
|
["AWS::AppSync::Resolver", {
|
|
20798
20972
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20815,7 +20989,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20815
20989
|
"TypeName"
|
|
20816
20990
|
]),
|
|
20817
20991
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20818
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
20992
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
20993
|
+
readOnly: /* @__PURE__ */ new Set(["ResolverArn"]),
|
|
20994
|
+
ccRouteUnavailable: false
|
|
20819
20995
|
}],
|
|
20820
20996
|
["AWS::AutoScaling::AutoScalingGroup", {
|
|
20821
20997
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20861,17 +21037,32 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20861
21037
|
["NotificationConfiguration", "Legacy singular form; use NotificationConfigurations (plural) which cdkd already wires"],
|
|
20862
21038
|
["PlacementGroup", "not yet implemented by cdkd"]
|
|
20863
21039
|
]),
|
|
20864
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["InstanceId"])
|
|
21040
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["InstanceId"]),
|
|
21041
|
+
readOnly: /* @__PURE__ */ new Set(["AutoScalingGroupARN"]),
|
|
21042
|
+
ccRouteUnavailable: false
|
|
20865
21043
|
}],
|
|
20866
21044
|
["AWS::BedrockAgentCore::Browser", {
|
|
20867
21045
|
handled: /* @__PURE__ */ new Set(),
|
|
20868
21046
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20869
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21047
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21048
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21049
|
+
"BrowserArn",
|
|
21050
|
+
"BrowserId",
|
|
21051
|
+
"Name",
|
|
21052
|
+
"Status"
|
|
21053
|
+
]),
|
|
21054
|
+
ccRouteUnavailable: false
|
|
20870
21055
|
}],
|
|
20871
21056
|
["AWS::BedrockAgentCore::CodeInterpreter", {
|
|
20872
21057
|
handled: /* @__PURE__ */ new Set(),
|
|
20873
21058
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20874
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21059
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21060
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21061
|
+
"CodeInterpreterArn",
|
|
21062
|
+
"CodeInterpreterId",
|
|
21063
|
+
"Status"
|
|
21064
|
+
]),
|
|
21065
|
+
ccRouteUnavailable: false
|
|
20875
21066
|
}],
|
|
20876
21067
|
["AWS::BedrockAgentCore::Evaluator", {
|
|
20877
21068
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20883,7 +21074,15 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20883
21074
|
"Tags"
|
|
20884
21075
|
]),
|
|
20885
21076
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20886
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21077
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21078
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21079
|
+
"CreatedAt",
|
|
21080
|
+
"EvaluatorArn",
|
|
21081
|
+
"EvaluatorId",
|
|
21082
|
+
"Status",
|
|
21083
|
+
"UpdatedAt"
|
|
21084
|
+
]),
|
|
21085
|
+
ccRouteUnavailable: false
|
|
20887
21086
|
}],
|
|
20888
21087
|
["AWS::BedrockAgentCore::Runtime", {
|
|
20889
21088
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20905,7 +21104,18 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20905
21104
|
["RequestHeaderConfiguration", "not yet implemented by cdkd"],
|
|
20906
21105
|
["Tags", "not yet implemented by cdkd"]
|
|
20907
21106
|
]),
|
|
20908
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21107
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21108
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21109
|
+
"AgentRuntimeArn",
|
|
21110
|
+
"AgentRuntimeId",
|
|
21111
|
+
"AgentRuntimeVersion",
|
|
21112
|
+
"CreatedAt",
|
|
21113
|
+
"FailureReason",
|
|
21114
|
+
"LastUpdatedAt",
|
|
21115
|
+
"Status",
|
|
21116
|
+
"WorkloadIdentityDetails"
|
|
21117
|
+
]),
|
|
21118
|
+
ccRouteUnavailable: false
|
|
20909
21119
|
}],
|
|
20910
21120
|
["AWS::Budgets::Budget", {
|
|
20911
21121
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20914,7 +21124,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20914
21124
|
"ResourceTags"
|
|
20915
21125
|
]),
|
|
20916
21126
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20917
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21127
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21128
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
21129
|
+
ccRouteUnavailable: false
|
|
20918
21130
|
}],
|
|
20919
21131
|
["AWS::CertificateManager::Certificate", {
|
|
20920
21132
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20929,7 +21141,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20929
21141
|
"ValidationMethod"
|
|
20930
21142
|
]),
|
|
20931
21143
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20932
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21144
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21145
|
+
readOnly: /* @__PURE__ */ new Set(["CertificateArn"]),
|
|
21146
|
+
ccRouteUnavailable: false
|
|
20933
21147
|
}],
|
|
20934
21148
|
["AWS::CloudFormation::Stack", {
|
|
20935
21149
|
handled: /* @__PURE__ */ new Set(["Parameters", "TemplateURL"]),
|
|
@@ -20948,27 +21162,46 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20948
21162
|
["TemplateBody", "CFn-only inline template — cdkd reads the child template from the synth output via Metadata['aws:asset:path'] instead of accepting it inline"],
|
|
20949
21163
|
["TimeoutInMinutes", "CFn-only stack-create deadline — cdkd uses per-resource --resource-timeout instead (issue #459 design §9)"]
|
|
20950
21164
|
]),
|
|
20951
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["StackName"])
|
|
21165
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["StackName"]),
|
|
21166
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21167
|
+
"ChangeSetId",
|
|
21168
|
+
"CreationTime",
|
|
21169
|
+
"LastUpdateTime",
|
|
21170
|
+
"Outputs",
|
|
21171
|
+
"ParentId",
|
|
21172
|
+
"RootId",
|
|
21173
|
+
"StackId",
|
|
21174
|
+
"StackStatus"
|
|
21175
|
+
]),
|
|
21176
|
+
ccRouteUnavailable: true
|
|
20952
21177
|
}],
|
|
20953
21178
|
["AWS::CloudFormation::WaitConditionHandle", {
|
|
20954
21179
|
handled: /* @__PURE__ */ new Set(),
|
|
20955
21180
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20956
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21181
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21182
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
21183
|
+
ccRouteUnavailable: false
|
|
20957
21184
|
}],
|
|
20958
21185
|
["AWS::CloudFront::CloudFrontOriginAccessIdentity", {
|
|
20959
21186
|
handled: /* @__PURE__ */ new Set(["CloudFrontOriginAccessIdentityConfig"]),
|
|
20960
21187
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20961
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21188
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21189
|
+
readOnly: /* @__PURE__ */ new Set(["Id", "S3CanonicalUserId"]),
|
|
21190
|
+
ccRouteUnavailable: false
|
|
20962
21191
|
}],
|
|
20963
21192
|
["AWS::CloudFront::Distribution", {
|
|
20964
21193
|
handled: /* @__PURE__ */ new Set(["DistributionConfig", "Tags"]),
|
|
20965
21194
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20966
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21195
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21196
|
+
readOnly: /* @__PURE__ */ new Set(["DomainName", "Id"]),
|
|
21197
|
+
ccRouteUnavailable: false
|
|
20967
21198
|
}],
|
|
20968
21199
|
["AWS::CloudFront::OriginAccessControl", {
|
|
20969
21200
|
handled: /* @__PURE__ */ new Set(["OriginAccessControlConfig"]),
|
|
20970
21201
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
20971
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21202
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21203
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
21204
|
+
ccRouteUnavailable: false
|
|
20972
21205
|
}],
|
|
20973
21206
|
["AWS::CloudTrail::Trail", {
|
|
20974
21207
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -20989,7 +21222,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
20989
21222
|
"TrailName"
|
|
20990
21223
|
]),
|
|
20991
21224
|
silentDrop: /* @__PURE__ */ new Map([["AdvancedEventSelectors", "not yet implemented by cdkd"], ["AggregationConfigurations", "not yet implemented by cdkd"]]),
|
|
20992
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21225
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21226
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "SnsTopicArn"]),
|
|
21227
|
+
ccRouteUnavailable: false
|
|
20993
21228
|
}],
|
|
20994
21229
|
["AWS::CloudWatch::Alarm", {
|
|
20995
21230
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21022,7 +21257,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21022
21257
|
["EvaluationWindow", "not yet implemented by cdkd"],
|
|
21023
21258
|
["WarmUpConfiguration", "not yet implemented by cdkd"]
|
|
21024
21259
|
]),
|
|
21025
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21260
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21261
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
21262
|
+
ccRouteUnavailable: false
|
|
21026
21263
|
}],
|
|
21027
21264
|
["AWS::CloudWatch::AnomalyDetector", {
|
|
21028
21265
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21036,7 +21273,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21036
21273
|
"Stat"
|
|
21037
21274
|
]),
|
|
21038
21275
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21039
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21276
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21277
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
21278
|
+
ccRouteUnavailable: true
|
|
21040
21279
|
}],
|
|
21041
21280
|
["AWS::CodeBuild::Project", {
|
|
21042
21281
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21068,7 +21307,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21068
21307
|
["Triggers", "not yet implemented by cdkd"],
|
|
21069
21308
|
["Visibility", "not yet implemented by cdkd"]
|
|
21070
21309
|
]),
|
|
21071
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21310
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21311
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "Id"]),
|
|
21312
|
+
ccRouteUnavailable: false
|
|
21072
21313
|
}],
|
|
21073
21314
|
["AWS::CodeCommit::Repository", {
|
|
21074
21315
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21080,7 +21321,15 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21080
21321
|
"Triggers"
|
|
21081
21322
|
]),
|
|
21082
21323
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21083
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21324
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21325
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21326
|
+
"Arn",
|
|
21327
|
+
"CloneUrlHttp",
|
|
21328
|
+
"CloneUrlSsh",
|
|
21329
|
+
"Name",
|
|
21330
|
+
"RepositoryId"
|
|
21331
|
+
]),
|
|
21332
|
+
ccRouteUnavailable: false
|
|
21084
21333
|
}],
|
|
21085
21334
|
["AWS::Cognito::UserPool", {
|
|
21086
21335
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21116,7 +21365,14 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21116
21365
|
"WebAuthnUserVerification"
|
|
21117
21366
|
]),
|
|
21118
21367
|
silentDrop: /* @__PURE__ */ new Map([["IssuerConfiguration", "not yet implemented by cdkd"], ["KeyConfiguration", "not yet implemented by cdkd"]]),
|
|
21119
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21368
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21369
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21370
|
+
"Arn",
|
|
21371
|
+
"ProviderName",
|
|
21372
|
+
"ProviderURL",
|
|
21373
|
+
"UserPoolId"
|
|
21374
|
+
]),
|
|
21375
|
+
ccRouteUnavailable: false
|
|
21120
21376
|
}],
|
|
21121
21377
|
["AWS::DLM::LifecyclePolicy", {
|
|
21122
21378
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21134,7 +21390,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21134
21390
|
"Tags"
|
|
21135
21391
|
]),
|
|
21136
21392
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21137
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21393
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21394
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "PolicyId"]),
|
|
21395
|
+
ccRouteUnavailable: false
|
|
21138
21396
|
}],
|
|
21139
21397
|
["AWS::DocDB::DBCluster", {
|
|
21140
21398
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21175,7 +21433,14 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21175
21433
|
"AvailabilityZones",
|
|
21176
21434
|
"SnapshotIdentifier",
|
|
21177
21435
|
"SourceDBClusterIdentifier"
|
|
21178
|
-
])
|
|
21436
|
+
]),
|
|
21437
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21438
|
+
"ClusterResourceId",
|
|
21439
|
+
"Endpoint",
|
|
21440
|
+
"Id",
|
|
21441
|
+
"ReadEndpoint"
|
|
21442
|
+
]),
|
|
21443
|
+
ccRouteUnavailable: false
|
|
21179
21444
|
}],
|
|
21180
21445
|
["AWS::DocDB::DBInstance", {
|
|
21181
21446
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21192,7 +21457,13 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21192
21457
|
["CertificateRotationRestart", "not yet implemented by cdkd"],
|
|
21193
21458
|
["EnablePerformanceInsights", "not yet implemented by cdkd"]
|
|
21194
21459
|
]),
|
|
21195
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21460
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21461
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21462
|
+
"Endpoint",
|
|
21463
|
+
"Id",
|
|
21464
|
+
"Port"
|
|
21465
|
+
]),
|
|
21466
|
+
ccRouteUnavailable: false
|
|
21196
21467
|
}],
|
|
21197
21468
|
["AWS::DocDB::DBSubnetGroup", {
|
|
21198
21469
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21202,7 +21473,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21202
21473
|
"Tags"
|
|
21203
21474
|
]),
|
|
21204
21475
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21205
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21476
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21477
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
21478
|
+
ccRouteUnavailable: false
|
|
21206
21479
|
}],
|
|
21207
21480
|
["AWS::DynamoDB::GlobalTable", {
|
|
21208
21481
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21230,7 +21503,13 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21230
21503
|
["VectorIndexes", "not yet implemented by cdkd"],
|
|
21231
21504
|
["WarmThroughput", "not yet implemented by cdkd"]
|
|
21232
21505
|
]),
|
|
21233
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21506
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21507
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21508
|
+
"Arn",
|
|
21509
|
+
"StreamArn",
|
|
21510
|
+
"TableId"
|
|
21511
|
+
]),
|
|
21512
|
+
ccRouteUnavailable: false
|
|
21234
21513
|
}],
|
|
21235
21514
|
["AWS::DynamoDB::Table", {
|
|
21236
21515
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21255,7 +21534,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21255
21534
|
"WarmThroughput"
|
|
21256
21535
|
]),
|
|
21257
21536
|
silentDrop: /* @__PURE__ */ new Map([["ImportSourceSpecification", "S3 import uses the separate ImportTable API (not CreateTable) and is create-only with no readback; deferred to a dedicated import-from-S3 PR"], ["VectorIndexes", "not yet implemented by cdkd"]]),
|
|
21258
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["ImportSourceSpecification"])
|
|
21537
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["ImportSourceSpecification"]),
|
|
21538
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "StreamArn"]),
|
|
21539
|
+
ccRouteUnavailable: false
|
|
21259
21540
|
}],
|
|
21260
21541
|
["AWS::EC2::EIP", {
|
|
21261
21542
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21274,7 +21555,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21274
21555
|
"Address",
|
|
21275
21556
|
"IpamPoolId",
|
|
21276
21557
|
"TransferAddress"
|
|
21277
|
-
])
|
|
21558
|
+
]),
|
|
21559
|
+
readOnly: /* @__PURE__ */ new Set(["AllocationId", "PublicIp"]),
|
|
21560
|
+
ccRouteUnavailable: false
|
|
21278
21561
|
}],
|
|
21279
21562
|
["AWS::EC2::Instance", {
|
|
21280
21563
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21335,12 +21618,24 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21335
21618
|
"LicenseSpecifications",
|
|
21336
21619
|
"PlacementGroupName",
|
|
21337
21620
|
"PrivateIpAddress"
|
|
21338
|
-
])
|
|
21621
|
+
]),
|
|
21622
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21623
|
+
"InstanceId",
|
|
21624
|
+
"PrivateDnsName",
|
|
21625
|
+
"PrivateIp",
|
|
21626
|
+
"PublicDnsName",
|
|
21627
|
+
"PublicIp",
|
|
21628
|
+
"State",
|
|
21629
|
+
"VpcId"
|
|
21630
|
+
]),
|
|
21631
|
+
ccRouteUnavailable: false
|
|
21339
21632
|
}],
|
|
21340
21633
|
["AWS::EC2::InternetGateway", {
|
|
21341
21634
|
handled: /* @__PURE__ */ new Set(["Tags"]),
|
|
21342
21635
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21343
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21636
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21637
|
+
readOnly: /* @__PURE__ */ new Set(["InternetGatewayId"]),
|
|
21638
|
+
ccRouteUnavailable: false
|
|
21344
21639
|
}],
|
|
21345
21640
|
["AWS::EC2::NatGateway", {
|
|
21346
21641
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21359,12 +21654,22 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21359
21654
|
["MaxDrainDurationSeconds", "write-only address-drain timeout with no CreateNatGateway member and no NAT gateway modify API; only ec2:DisassociateNatGatewayAddress / UnassignPrivateNatGatewayAddress accept it, and cdkd rejects NatGateway updates outright — routed via Cloud Control instead"],
|
|
21360
21655
|
["VpcId", "AWS derives the VPC from SubnetId; the ec2:CreateNatGateway API has no VpcId parameter"]
|
|
21361
21656
|
]),
|
|
21362
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["AvailabilityMode", "VpcId"])
|
|
21657
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["AvailabilityMode", "VpcId"]),
|
|
21658
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21659
|
+
"AutoProvisionZones",
|
|
21660
|
+
"AutoScalingIps",
|
|
21661
|
+
"EniId",
|
|
21662
|
+
"NatGatewayId",
|
|
21663
|
+
"RouteTableId"
|
|
21664
|
+
]),
|
|
21665
|
+
ccRouteUnavailable: false
|
|
21363
21666
|
}],
|
|
21364
21667
|
["AWS::EC2::NetworkAcl", {
|
|
21365
21668
|
handled: /* @__PURE__ */ new Set(["Tags", "VpcId"]),
|
|
21366
21669
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21367
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21670
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21671
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
21672
|
+
ccRouteUnavailable: false
|
|
21368
21673
|
}],
|
|
21369
21674
|
["AWS::EC2::NetworkAclEntry", {
|
|
21370
21675
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21379,7 +21684,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21379
21684
|
"RuleNumber"
|
|
21380
21685
|
]),
|
|
21381
21686
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21382
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21687
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21688
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
21689
|
+
ccRouteUnavailable: false
|
|
21383
21690
|
}],
|
|
21384
21691
|
["AWS::EC2::Route", {
|
|
21385
21692
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21400,12 +21707,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21400
21707
|
"VpcPeeringConnectionId"
|
|
21401
21708
|
]),
|
|
21402
21709
|
silentDrop: /* @__PURE__ */ new Map([["OdbNetworkArn", "not yet implemented by cdkd"]]),
|
|
21403
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21710
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21711
|
+
readOnly: /* @__PURE__ */ new Set(["CidrBlock"]),
|
|
21712
|
+
ccRouteUnavailable: false
|
|
21404
21713
|
}],
|
|
21405
21714
|
["AWS::EC2::RouteTable", {
|
|
21406
21715
|
handled: /* @__PURE__ */ new Set(["Tags", "VpcId"]),
|
|
21407
21716
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21408
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21717
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21718
|
+
readOnly: /* @__PURE__ */ new Set(["RouteTableId"]),
|
|
21719
|
+
ccRouteUnavailable: false
|
|
21409
21720
|
}],
|
|
21410
21721
|
["AWS::EC2::SecurityGroup", {
|
|
21411
21722
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21417,7 +21728,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21417
21728
|
"VpcId"
|
|
21418
21729
|
]),
|
|
21419
21730
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21420
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21731
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21732
|
+
readOnly: /* @__PURE__ */ new Set(["GroupId", "Id"]),
|
|
21733
|
+
ccRouteUnavailable: false
|
|
21421
21734
|
}],
|
|
21422
21735
|
["AWS::EC2::SecurityGroupIngress", {
|
|
21423
21736
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21433,7 +21746,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21433
21746
|
"ToPort"
|
|
21434
21747
|
]),
|
|
21435
21748
|
silentDrop: /* @__PURE__ */ new Map([["GroupName", "EC2-Classic-only — use GroupId for VPC security groups (EC2-Classic retired 2022-08-15)"], ["SourceSecurityGroupName", "EC2-Classic-only — use SourceSecurityGroupId for VPC peer security groups (EC2-Classic retired 2022-08-15)"]]),
|
|
21436
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["GroupName", "SourceSecurityGroupName"])
|
|
21749
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["GroupName", "SourceSecurityGroupName"]),
|
|
21750
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
21751
|
+
ccRouteUnavailable: false
|
|
21437
21752
|
}],
|
|
21438
21753
|
["AWS::EC2::Subnet", {
|
|
21439
21754
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21465,17 +21780,28 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21465
21780
|
"Ipv6Native",
|
|
21466
21781
|
"Ipv6NetmaskLength",
|
|
21467
21782
|
"OutpostArn"
|
|
21468
|
-
])
|
|
21783
|
+
]),
|
|
21784
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21785
|
+
"BlockPublicAccessStates",
|
|
21786
|
+
"Ipv6CidrBlocks",
|
|
21787
|
+
"NetworkAclAssociationId",
|
|
21788
|
+
"SubnetId"
|
|
21789
|
+
]),
|
|
21790
|
+
ccRouteUnavailable: false
|
|
21469
21791
|
}],
|
|
21470
21792
|
["AWS::EC2::SubnetNetworkAclAssociation", {
|
|
21471
21793
|
handled: /* @__PURE__ */ new Set(["NetworkAclId", "SubnetId"]),
|
|
21472
21794
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21473
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21795
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21796
|
+
readOnly: /* @__PURE__ */ new Set(["AssociationId"]),
|
|
21797
|
+
ccRouteUnavailable: false
|
|
21474
21798
|
}],
|
|
21475
21799
|
["AWS::EC2::SubnetRouteTableAssociation", {
|
|
21476
21800
|
handled: /* @__PURE__ */ new Set(["RouteTableId", "SubnetId"]),
|
|
21477
21801
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21478
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21802
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21803
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
21804
|
+
ccRouteUnavailable: false
|
|
21479
21805
|
}],
|
|
21480
21806
|
["AWS::EC2::VPC", {
|
|
21481
21807
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21494,12 +21820,22 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21494
21820
|
"Ipv4IpamPoolId",
|
|
21495
21821
|
"Ipv4NetmaskLength",
|
|
21496
21822
|
"VpcEncryptionControl"
|
|
21497
|
-
])
|
|
21823
|
+
]),
|
|
21824
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
21825
|
+
"CidrBlockAssociations",
|
|
21826
|
+
"DefaultNetworkAcl",
|
|
21827
|
+
"DefaultSecurityGroup",
|
|
21828
|
+
"Ipv6CidrBlocks",
|
|
21829
|
+
"VpcId"
|
|
21830
|
+
]),
|
|
21831
|
+
ccRouteUnavailable: false
|
|
21498
21832
|
}],
|
|
21499
21833
|
["AWS::EC2::VPCGatewayAttachment", {
|
|
21500
21834
|
handled: /* @__PURE__ */ new Set(["InternetGatewayId", "VpcId"]),
|
|
21501
21835
|
silentDrop: /* @__PURE__ */ new Map([["VpnGatewayId", "not yet implemented by cdkd"]]),
|
|
21502
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21836
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21837
|
+
readOnly: /* @__PURE__ */ new Set(["AttachmentType"]),
|
|
21838
|
+
ccRouteUnavailable: false
|
|
21503
21839
|
}],
|
|
21504
21840
|
["AWS::ECR::Repository", {
|
|
21505
21841
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21514,7 +21850,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21514
21850
|
"Tags"
|
|
21515
21851
|
]),
|
|
21516
21852
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21517
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21853
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21854
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "RepositoryUri"]),
|
|
21855
|
+
ccRouteUnavailable: false
|
|
21518
21856
|
}],
|
|
21519
21857
|
["AWS::ECS::Cluster", {
|
|
21520
21858
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21527,7 +21865,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21527
21865
|
"Tags"
|
|
21528
21866
|
]),
|
|
21529
21867
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21530
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21868
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21869
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
21870
|
+
ccRouteUnavailable: false
|
|
21531
21871
|
}],
|
|
21532
21872
|
["AWS::ECS::Service", {
|
|
21533
21873
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21560,7 +21900,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21560
21900
|
"VpcLatticeConfigurations"
|
|
21561
21901
|
]),
|
|
21562
21902
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21563
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21903
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21904
|
+
readOnly: /* @__PURE__ */ new Set(["Name", "ServiceArn"]),
|
|
21905
|
+
ccRouteUnavailable: false
|
|
21564
21906
|
}],
|
|
21565
21907
|
["AWS::ECS::TaskDefinition", {
|
|
21566
21908
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21583,7 +21925,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21583
21925
|
"Volumes"
|
|
21584
21926
|
]),
|
|
21585
21927
|
silentDrop: /* @__PURE__ */ new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]]),
|
|
21586
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["InferenceAccelerators"])
|
|
21928
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["InferenceAccelerators"]),
|
|
21929
|
+
readOnly: /* @__PURE__ */ new Set(["TaskDefinitionArn"]),
|
|
21930
|
+
ccRouteUnavailable: false
|
|
21587
21931
|
}],
|
|
21588
21932
|
["AWS::EFS::AccessPoint", {
|
|
21589
21933
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21593,7 +21937,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21593
21937
|
"RootDirectory"
|
|
21594
21938
|
]),
|
|
21595
21939
|
silentDrop: /* @__PURE__ */ new Map([["ClientToken", "cdkd supplies its own retry-stable ClientToken on CreateAccessPoint (issues #2039 and #2080), so a template-supplied value would be overwritten. The SDK does not own this field either: measured against @aws-sdk/client-efs 3.1018.0, an omitted ClientToken is auto-filled with a FRESH uuid per attempt, which leaves a retried 500 free to mint a second access point, while a caller-supplied value goes on the wire verbatim."]]),
|
|
21596
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["ClientToken"])
|
|
21940
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["ClientToken"]),
|
|
21941
|
+
readOnly: /* @__PURE__ */ new Set(["AccessPointId", "Arn"]),
|
|
21942
|
+
ccRouteUnavailable: false
|
|
21597
21943
|
}],
|
|
21598
21944
|
["AWS::EFS::FileSystem", {
|
|
21599
21945
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21611,7 +21957,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21611
21957
|
"ThroughputMode"
|
|
21612
21958
|
]),
|
|
21613
21959
|
silentDrop: /* @__PURE__ */ new Map([["ReplicationConfiguration", "Cross-region EFS replication (CreateReplicationConfiguration) provisions a separate destination file system in another region with its own lifecycle, KMS key, and availability-zone placement; replicating + then tearing down the destination on destroy is a multi-resource, cross-region orchestration that is out of scope for the single-resource SDK provider. Tracked as a follow-up to issue #609."]]),
|
|
21614
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
21960
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
21961
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "FileSystemId"]),
|
|
21962
|
+
ccRouteUnavailable: false
|
|
21615
21963
|
}],
|
|
21616
21964
|
["AWS::EFS::MountTarget", {
|
|
21617
21965
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21628,7 +21976,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21628
21976
|
"IpAddress",
|
|
21629
21977
|
"IpAddressType",
|
|
21630
21978
|
"Ipv6Address"
|
|
21631
|
-
])
|
|
21979
|
+
]),
|
|
21980
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
21981
|
+
ccRouteUnavailable: false
|
|
21632
21982
|
}],
|
|
21633
21983
|
["AWS::ElastiCache::CacheCluster", {
|
|
21634
21984
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21657,7 +22007,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21657
22007
|
"VpcSecurityGroupIds"
|
|
21658
22008
|
]),
|
|
21659
22009
|
silentDrop: /* @__PURE__ */ new Map([["CacheSecurityGroupNames", "EC2-Classic-only — use VpcSecurityGroupIds for VPC-deployed clusters (EC2-Classic retired 2022-08-15)"], ["SnapshotArns", "not yet implemented by cdkd"]]),
|
|
21660
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["SnapshotArns"])
|
|
22010
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["SnapshotArns"]),
|
|
22011
|
+
readOnly: /* @__PURE__ */ new Set(["ConfigurationEndpoint", "RedisEndpoint"]),
|
|
22012
|
+
ccRouteUnavailable: false
|
|
21661
22013
|
}],
|
|
21662
22014
|
["AWS::ElastiCache::SubnetGroup", {
|
|
21663
22015
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21668,7 +22020,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21668
22020
|
"Tags"
|
|
21669
22021
|
]),
|
|
21670
22022
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21671
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22023
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22024
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
22025
|
+
ccRouteUnavailable: false
|
|
21672
22026
|
}],
|
|
21673
22027
|
["AWS::ElasticLoadBalancingV2::Listener", {
|
|
21674
22028
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21683,7 +22037,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21683
22037
|
"SslPolicy"
|
|
21684
22038
|
]),
|
|
21685
22039
|
silentDrop: /* @__PURE__ */ new Map([["Tags", "not yet implemented by cdkd"]]),
|
|
21686
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22040
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22041
|
+
readOnly: /* @__PURE__ */ new Set(["ListenerArn"]),
|
|
22042
|
+
ccRouteUnavailable: false
|
|
21687
22043
|
}],
|
|
21688
22044
|
["AWS::ElasticLoadBalancingV2::LoadBalancer", {
|
|
21689
22045
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21703,7 +22059,15 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21703
22059
|
"Type"
|
|
21704
22060
|
]),
|
|
21705
22061
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21706
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22062
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22063
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
22064
|
+
"CanonicalHostedZoneID",
|
|
22065
|
+
"DNSName",
|
|
22066
|
+
"LoadBalancerArn",
|
|
22067
|
+
"LoadBalancerFullName",
|
|
22068
|
+
"LoadBalancerName"
|
|
22069
|
+
]),
|
|
22070
|
+
ccRouteUnavailable: false
|
|
21707
22071
|
}],
|
|
21708
22072
|
["AWS::ElasticLoadBalancingV2::TargetGroup", {
|
|
21709
22073
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21729,7 +22093,14 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21729
22093
|
"VpcId"
|
|
21730
22094
|
]),
|
|
21731
22095
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21732
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22096
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22097
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
22098
|
+
"LoadBalancerArns",
|
|
22099
|
+
"TargetGroupArn",
|
|
22100
|
+
"TargetGroupFullName",
|
|
22101
|
+
"TargetGroupName"
|
|
22102
|
+
]),
|
|
22103
|
+
ccRouteUnavailable: false
|
|
21733
22104
|
}],
|
|
21734
22105
|
["AWS::EMR::Cluster", {
|
|
21735
22106
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21762,7 +22133,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21762
22133
|
"VisibleToAllUsers"
|
|
21763
22134
|
]),
|
|
21764
22135
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21765
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22136
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22137
|
+
readOnly: /* @__PURE__ */ new Set(["Id", "MasterPublicDNS"]),
|
|
22138
|
+
ccRouteUnavailable: true
|
|
21766
22139
|
}],
|
|
21767
22140
|
["AWS::EMR::InstanceFleetConfig", {
|
|
21768
22141
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21776,7 +22149,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21776
22149
|
"TargetSpotCapacity"
|
|
21777
22150
|
]),
|
|
21778
22151
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21779
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22152
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22153
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
22154
|
+
ccRouteUnavailable: true
|
|
21780
22155
|
}],
|
|
21781
22156
|
["AWS::EMR::InstanceGroupConfig", {
|
|
21782
22157
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21793,7 +22168,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21793
22168
|
"Name"
|
|
21794
22169
|
]),
|
|
21795
22170
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21796
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22171
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22172
|
+
readOnly: /* @__PURE__ */ new Set(["InstanceGroupId"]),
|
|
22173
|
+
ccRouteUnavailable: true
|
|
21797
22174
|
}],
|
|
21798
22175
|
["AWS::Events::EventBus", {
|
|
21799
22176
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21807,7 +22184,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21807
22184
|
"Tags"
|
|
21808
22185
|
]),
|
|
21809
22186
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21810
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22187
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22188
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
22189
|
+
ccRouteUnavailable: false
|
|
21811
22190
|
}],
|
|
21812
22191
|
["AWS::Events::Rule", {
|
|
21813
22192
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21822,7 +22201,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21822
22201
|
"Targets"
|
|
21823
22202
|
]),
|
|
21824
22203
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21825
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22204
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22205
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "RuleName"]),
|
|
22206
|
+
ccRouteUnavailable: false
|
|
21826
22207
|
}],
|
|
21827
22208
|
["AWS::FSx::FileSystem", {
|
|
21828
22209
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21842,12 +22223,22 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21842
22223
|
"WindowsConfiguration"
|
|
21843
22224
|
]),
|
|
21844
22225
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21845
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22226
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22227
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
22228
|
+
"DNSName",
|
|
22229
|
+
"Id",
|
|
22230
|
+
"LustreMountName",
|
|
22231
|
+
"ResourceARN",
|
|
22232
|
+
"RootVolumeId"
|
|
22233
|
+
]),
|
|
22234
|
+
ccRouteUnavailable: true
|
|
21846
22235
|
}],
|
|
21847
22236
|
["AWS::Glue::Connection", {
|
|
21848
22237
|
handled: /* @__PURE__ */ new Set(["CatalogId", "ConnectionInput"]),
|
|
21849
22238
|
silentDrop: /* @__PURE__ */ new Map([["Tags", "not yet implemented by cdkd"]]),
|
|
21850
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22239
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22240
|
+
readOnly: /* @__PURE__ */ new Set(["Name"]),
|
|
22241
|
+
ccRouteUnavailable: false
|
|
21851
22242
|
}],
|
|
21852
22243
|
["AWS::Glue::Crawler", {
|
|
21853
22244
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21868,7 +22259,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21868
22259
|
"Targets"
|
|
21869
22260
|
]),
|
|
21870
22261
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21871
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22262
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22263
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
22264
|
+
ccRouteUnavailable: false
|
|
21872
22265
|
}],
|
|
21873
22266
|
["AWS::Glue::Database", {
|
|
21874
22267
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21877,7 +22270,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21877
22270
|
"DatabaseName"
|
|
21878
22271
|
]),
|
|
21879
22272
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21880
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22273
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22274
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
22275
|
+
ccRouteUnavailable: false
|
|
21881
22276
|
}],
|
|
21882
22277
|
["AWS::Glue::Job", {
|
|
21883
22278
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21907,12 +22302,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21907
22302
|
"WorkerType"
|
|
21908
22303
|
]),
|
|
21909
22304
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21910
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22305
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22306
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
22307
|
+
ccRouteUnavailable: false
|
|
21911
22308
|
}],
|
|
21912
22309
|
["AWS::Glue::SecurityConfiguration", {
|
|
21913
22310
|
handled: /* @__PURE__ */ new Set(["EncryptionConfiguration", "Name"]),
|
|
21914
22311
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21915
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22312
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22313
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
22314
|
+
ccRouteUnavailable: false
|
|
21916
22315
|
}],
|
|
21917
22316
|
["AWS::Glue::Table", {
|
|
21918
22317
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21923,7 +22322,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21923
22322
|
"TableInput"
|
|
21924
22323
|
]),
|
|
21925
22324
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21926
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22325
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22326
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
22327
|
+
ccRouteUnavailable: false
|
|
21927
22328
|
}],
|
|
21928
22329
|
["AWS::Glue::Trigger", {
|
|
21929
22330
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21939,7 +22340,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21939
22340
|
"WorkflowName"
|
|
21940
22341
|
]),
|
|
21941
22342
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21942
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22343
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22344
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
22345
|
+
ccRouteUnavailable: false
|
|
21943
22346
|
}],
|
|
21944
22347
|
["AWS::Glue::Workflow", {
|
|
21945
22348
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21950,7 +22353,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21950
22353
|
"Tags"
|
|
21951
22354
|
]),
|
|
21952
22355
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21953
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22356
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22357
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
22358
|
+
ccRouteUnavailable: false
|
|
21954
22359
|
}],
|
|
21955
22360
|
["AWS::IAM::AccessKey", {
|
|
21956
22361
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21959,7 +22364,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21959
22364
|
"UserName"
|
|
21960
22365
|
]),
|
|
21961
22366
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21962
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22367
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22368
|
+
readOnly: /* @__PURE__ */ new Set(["Id", "SecretAccessKey"]),
|
|
22369
|
+
ccRouteUnavailable: true
|
|
21963
22370
|
}],
|
|
21964
22371
|
["AWS::IAM::Group", {
|
|
21965
22372
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21969,7 +22376,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21969
22376
|
"Policies"
|
|
21970
22377
|
]),
|
|
21971
22378
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21972
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22379
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22380
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
22381
|
+
ccRouteUnavailable: false
|
|
21973
22382
|
}],
|
|
21974
22383
|
["AWS::IAM::InstanceProfile", {
|
|
21975
22384
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21978,7 +22387,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21978
22387
|
"Roles"
|
|
21979
22388
|
]),
|
|
21980
22389
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21981
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22390
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22391
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
22392
|
+
ccRouteUnavailable: false
|
|
21982
22393
|
}],
|
|
21983
22394
|
["AWS::IAM::ManagedPolicy", {
|
|
21984
22395
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -21992,7 +22403,18 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
21992
22403
|
"Users"
|
|
21993
22404
|
]),
|
|
21994
22405
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
21995
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22406
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22407
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
22408
|
+
"AttachmentCount",
|
|
22409
|
+
"CreateDate",
|
|
22410
|
+
"DefaultVersionId",
|
|
22411
|
+
"IsAttachable",
|
|
22412
|
+
"PermissionsBoundaryUsageCount",
|
|
22413
|
+
"PolicyArn",
|
|
22414
|
+
"PolicyId",
|
|
22415
|
+
"UpdateDate"
|
|
22416
|
+
]),
|
|
22417
|
+
ccRouteUnavailable: false
|
|
21996
22418
|
}],
|
|
21997
22419
|
["AWS::IAM::Policy", {
|
|
21998
22420
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22003,7 +22425,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22003
22425
|
"Users"
|
|
22004
22426
|
]),
|
|
22005
22427
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22006
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22428
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22429
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
22430
|
+
ccRouteUnavailable: false
|
|
22007
22431
|
}],
|
|
22008
22432
|
["AWS::IAM::Role", {
|
|
22009
22433
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22018,7 +22442,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22018
22442
|
"Tags"
|
|
22019
22443
|
]),
|
|
22020
22444
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22021
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22445
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22446
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "RoleId"]),
|
|
22447
|
+
ccRouteUnavailable: false
|
|
22022
22448
|
}],
|
|
22023
22449
|
["AWS::IAM::User", {
|
|
22024
22450
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22032,12 +22458,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22032
22458
|
"UserName"
|
|
22033
22459
|
]),
|
|
22034
22460
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22035
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22461
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22462
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
22463
|
+
ccRouteUnavailable: false
|
|
22036
22464
|
}],
|
|
22037
22465
|
["AWS::IAM::UserToGroupAddition", {
|
|
22038
22466
|
handled: /* @__PURE__ */ new Set(["GroupName", "Users"]),
|
|
22039
22467
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22040
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22468
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22469
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
22470
|
+
ccRouteUnavailable: false
|
|
22041
22471
|
}],
|
|
22042
22472
|
["AWS::Kinesis::Stream", {
|
|
22043
22473
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22051,7 +22481,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22051
22481
|
"Tags"
|
|
22052
22482
|
]),
|
|
22053
22483
|
silentDrop: /* @__PURE__ */ new Map([["WarmThroughputMiBps", "not yet implemented by cdkd"]]),
|
|
22054
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22484
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22485
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "WarmThroughputObject"]),
|
|
22486
|
+
ccRouteUnavailable: false
|
|
22055
22487
|
}],
|
|
22056
22488
|
["AWS::Kinesis::StreamConsumer", {
|
|
22057
22489
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22060,7 +22492,13 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22060
22492
|
"Tags"
|
|
22061
22493
|
]),
|
|
22062
22494
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22063
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22495
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22496
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
22497
|
+
"ConsumerARN",
|
|
22498
|
+
"ConsumerCreationTimestamp",
|
|
22499
|
+
"ConsumerStatus"
|
|
22500
|
+
]),
|
|
22501
|
+
ccRouteUnavailable: false
|
|
22064
22502
|
}],
|
|
22065
22503
|
["AWS::KinesisFirehose::DeliveryStream", {
|
|
22066
22504
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22089,12 +22527,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22089
22527
|
"DatabaseSourceConfiguration",
|
|
22090
22528
|
"DirectPutSourceConfiguration",
|
|
22091
22529
|
"MSKSourceConfiguration"
|
|
22092
|
-
])
|
|
22530
|
+
]),
|
|
22531
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
22532
|
+
ccRouteUnavailable: false
|
|
22093
22533
|
}],
|
|
22094
22534
|
["AWS::KMS::Alias", {
|
|
22095
22535
|
handled: /* @__PURE__ */ new Set(["AliasName", "TargetKeyId"]),
|
|
22096
22536
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22097
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22537
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22538
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
22539
|
+
ccRouteUnavailable: false
|
|
22098
22540
|
}],
|
|
22099
22541
|
["AWS::KMS::Key", {
|
|
22100
22542
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22112,7 +22554,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22112
22554
|
"Tags"
|
|
22113
22555
|
]),
|
|
22114
22556
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22115
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22557
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22558
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "KeyId"]),
|
|
22559
|
+
ccRouteUnavailable: false
|
|
22116
22560
|
}],
|
|
22117
22561
|
["AWS::Lambda::EventInvokeConfig", {
|
|
22118
22562
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22123,7 +22567,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22123
22567
|
"Qualifier"
|
|
22124
22568
|
]),
|
|
22125
22569
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22126
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22570
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22571
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
22572
|
+
ccRouteUnavailable: false
|
|
22127
22573
|
}],
|
|
22128
22574
|
["AWS::Lambda::EventSourceMapping", {
|
|
22129
22575
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22157,7 +22603,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22157
22603
|
"TumblingWindowInSeconds"
|
|
22158
22604
|
]),
|
|
22159
22605
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22160
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22606
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22607
|
+
readOnly: /* @__PURE__ */ new Set(["EventSourceMappingArn", "Id"]),
|
|
22608
|
+
ccRouteUnavailable: false
|
|
22161
22609
|
}],
|
|
22162
22610
|
["AWS::Lambda::Function", {
|
|
22163
22611
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22195,7 +22643,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22195
22643
|
["FunctionScalingConfig", "not yet implemented by cdkd"],
|
|
22196
22644
|
["PublishToLatestPublished", "CloudFormation-only version-publishing directive with no AWS SDK equivalent"]
|
|
22197
22645
|
]),
|
|
22198
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22646
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22647
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "SnapStartResponse"]),
|
|
22648
|
+
ccRouteUnavailable: false
|
|
22199
22649
|
}],
|
|
22200
22650
|
["AWS::Lambda::LayerVersion", {
|
|
22201
22651
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22207,7 +22657,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22207
22657
|
"LicenseInfo"
|
|
22208
22658
|
]),
|
|
22209
22659
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22210
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22660
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22661
|
+
readOnly: /* @__PURE__ */ new Set(["LayerVersionArn"]),
|
|
22662
|
+
ccRouteUnavailable: false
|
|
22211
22663
|
}],
|
|
22212
22664
|
["AWS::Lambda::MicrovmImage", {
|
|
22213
22665
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22227,7 +22679,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22227
22679
|
"Tags"
|
|
22228
22680
|
]),
|
|
22229
22681
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22230
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22682
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22683
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
22684
|
+
"CreatedAt",
|
|
22685
|
+
"ImageArn",
|
|
22686
|
+
"LatestActiveImageVersion",
|
|
22687
|
+
"LatestFailedImageVersion",
|
|
22688
|
+
"State",
|
|
22689
|
+
"UpdatedAt"
|
|
22690
|
+
]),
|
|
22691
|
+
ccRouteUnavailable: false
|
|
22231
22692
|
}],
|
|
22232
22693
|
["AWS::Lambda::Permission", {
|
|
22233
22694
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22242,7 +22703,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22242
22703
|
"SourceArn"
|
|
22243
22704
|
]),
|
|
22244
22705
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22245
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22706
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22707
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
22708
|
+
ccRouteUnavailable: false
|
|
22246
22709
|
}],
|
|
22247
22710
|
["AWS::Lambda::Url", {
|
|
22248
22711
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22253,7 +22716,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22253
22716
|
"TargetFunctionArn"
|
|
22254
22717
|
]),
|
|
22255
22718
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22256
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22719
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22720
|
+
readOnly: /* @__PURE__ */ new Set(["FunctionArn", "FunctionUrl"]),
|
|
22721
|
+
ccRouteUnavailable: false
|
|
22257
22722
|
}],
|
|
22258
22723
|
["AWS::Logs::LogGroup", {
|
|
22259
22724
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22268,7 +22733,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22268
22733
|
"Tags"
|
|
22269
22734
|
]),
|
|
22270
22735
|
silentDrop: /* @__PURE__ */ new Map([["ResourcePolicyDocument", "covered by the separate account-wide AWS::Logs::ResourcePolicy resource type; logs:PutResourcePolicy is account-scoped, not per-log-group, so it has no CreateLogGroup / PutRetentionPolicy counterpart — routed via Cloud Control instead"]]),
|
|
22271
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22736
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22737
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
22738
|
+
ccRouteUnavailable: false
|
|
22272
22739
|
}],
|
|
22273
22740
|
["AWS::Neptune::DBCluster", {
|
|
22274
22741
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22311,7 +22778,14 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22311
22778
|
"SnapshotIdentifier",
|
|
22312
22779
|
"SourceDBClusterIdentifier",
|
|
22313
22780
|
"UseLatestRestorableTime"
|
|
22314
|
-
])
|
|
22781
|
+
]),
|
|
22782
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
22783
|
+
"ClusterResourceId",
|
|
22784
|
+
"Endpoint",
|
|
22785
|
+
"Port",
|
|
22786
|
+
"ReadEndpoint"
|
|
22787
|
+
]),
|
|
22788
|
+
ccRouteUnavailable: false
|
|
22315
22789
|
}],
|
|
22316
22790
|
["AWS::Neptune::DBInstance", {
|
|
22317
22791
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22331,7 +22805,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22331
22805
|
["DBSnapshotIdentifier", "not yet implemented by cdkd"],
|
|
22332
22806
|
["PubliclyAccessible", "not yet implemented by cdkd"]
|
|
22333
22807
|
]),
|
|
22334
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["DBSnapshotIdentifier"])
|
|
22808
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["DBSnapshotIdentifier"]),
|
|
22809
|
+
readOnly: /* @__PURE__ */ new Set(["Endpoint", "Port"]),
|
|
22810
|
+
ccRouteUnavailable: false
|
|
22335
22811
|
}],
|
|
22336
22812
|
["AWS::Neptune::DBSubnetGroup", {
|
|
22337
22813
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22341,7 +22817,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22341
22817
|
"Tags"
|
|
22342
22818
|
]),
|
|
22343
22819
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22344
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
22820
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
22821
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
22822
|
+
ccRouteUnavailable: false
|
|
22345
22823
|
}],
|
|
22346
22824
|
["AWS::RDS::DBCluster", {
|
|
22347
22825
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22420,7 +22898,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22420
22898
|
"SourceDbClusterResourceId",
|
|
22421
22899
|
"SourceRegion",
|
|
22422
22900
|
"UseLatestRestorableTime"
|
|
22423
|
-
])
|
|
22901
|
+
]),
|
|
22902
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
22903
|
+
"DBClusterArn",
|
|
22904
|
+
"DBClusterResourceId",
|
|
22905
|
+
"Endpoint",
|
|
22906
|
+
"ReadEndpoint",
|
|
22907
|
+
"StorageEncryptionType",
|
|
22908
|
+
"StorageThroughput"
|
|
22909
|
+
]),
|
|
22910
|
+
ccRouteUnavailable: false
|
|
22424
22911
|
}],
|
|
22425
22912
|
["AWS::RDS::DBInstance", {
|
|
22426
22913
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22519,7 +23006,28 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22519
23006
|
"NcharCharacterSetName",
|
|
22520
23007
|
"SourceRegion",
|
|
22521
23008
|
"Timezone"
|
|
22522
|
-
])
|
|
23009
|
+
]),
|
|
23010
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
23011
|
+
"AutomaticRestartTime",
|
|
23012
|
+
"CertificateDetails",
|
|
23013
|
+
"DBInstanceArn",
|
|
23014
|
+
"DBInstanceStatus",
|
|
23015
|
+
"DbiResourceId",
|
|
23016
|
+
"Endpoint",
|
|
23017
|
+
"InstanceCreateTime",
|
|
23018
|
+
"IsStorageConfigUpgradeAvailable",
|
|
23019
|
+
"LatestRestorableTime",
|
|
23020
|
+
"ListenerEndpoint",
|
|
23021
|
+
"PercentProgress",
|
|
23022
|
+
"ReadReplicaDBClusterIdentifiers",
|
|
23023
|
+
"ReadReplicaDBInstanceIdentifiers",
|
|
23024
|
+
"ResumeFullAutomationModeTime",
|
|
23025
|
+
"SecondaryAvailabilityZone",
|
|
23026
|
+
"StatusInfos",
|
|
23027
|
+
"StorageOperationPercentProgress",
|
|
23028
|
+
"StorageOperationStatus"
|
|
23029
|
+
]),
|
|
23030
|
+
ccRouteUnavailable: false
|
|
22523
23031
|
}],
|
|
22524
23032
|
["AWS::RDS::DBProxy", {
|
|
22525
23033
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22539,7 +23047,13 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22539
23047
|
["EndpointNetworkType", "not yet implemented by cdkd"],
|
|
22540
23048
|
["TargetConnectionNetworkType", "not yet implemented by cdkd"]
|
|
22541
23049
|
]),
|
|
22542
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["EndpointNetworkType", "TargetConnectionNetworkType"])
|
|
23050
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["EndpointNetworkType", "TargetConnectionNetworkType"]),
|
|
23051
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
23052
|
+
"DBProxyArn",
|
|
23053
|
+
"Endpoint",
|
|
23054
|
+
"VpcId"
|
|
23055
|
+
]),
|
|
23056
|
+
ccRouteUnavailable: false
|
|
22543
23057
|
}],
|
|
22544
23058
|
["AWS::RDS::DBProxyEndpoint", {
|
|
22545
23059
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22551,7 +23065,14 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22551
23065
|
"VpcSubnetIds"
|
|
22552
23066
|
]),
|
|
22553
23067
|
silentDrop: /* @__PURE__ */ new Map([["EndpointNetworkType", "not yet implemented by cdkd"]]),
|
|
22554
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["EndpointNetworkType"])
|
|
23068
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["EndpointNetworkType"]),
|
|
23069
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
23070
|
+
"DBProxyEndpointArn",
|
|
23071
|
+
"Endpoint",
|
|
23072
|
+
"IsDefault",
|
|
23073
|
+
"VpcId"
|
|
23074
|
+
]),
|
|
23075
|
+
ccRouteUnavailable: false
|
|
22555
23076
|
}],
|
|
22556
23077
|
["AWS::RDS::DBProxyTargetGroup", {
|
|
22557
23078
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22562,7 +23083,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22562
23083
|
"TargetGroupName"
|
|
22563
23084
|
]),
|
|
22564
23085
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22565
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23086
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23087
|
+
readOnly: /* @__PURE__ */ new Set(["TargetGroupArn"]),
|
|
23088
|
+
ccRouteUnavailable: false
|
|
22566
23089
|
}],
|
|
22567
23090
|
["AWS::RDS::DBSubnetGroup", {
|
|
22568
23091
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22572,7 +23095,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22572
23095
|
"Tags"
|
|
22573
23096
|
]),
|
|
22574
23097
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22575
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23098
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23099
|
+
readOnly: /* @__PURE__ */ new Set(["DBSubnetGroupArn"]),
|
|
23100
|
+
ccRouteUnavailable: false
|
|
22576
23101
|
}],
|
|
22577
23102
|
["AWS::Route53::HostedZone", {
|
|
22578
23103
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22584,7 +23109,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22584
23109
|
"VPCs"
|
|
22585
23110
|
]),
|
|
22586
23111
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22587
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23112
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23113
|
+
readOnly: /* @__PURE__ */ new Set(["Id", "NameServers"]),
|
|
23114
|
+
ccRouteUnavailable: false
|
|
22588
23115
|
}],
|
|
22589
23116
|
["AWS::Route53::RecordSet", {
|
|
22590
23117
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22607,7 +23134,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22607
23134
|
"Weight"
|
|
22608
23135
|
]),
|
|
22609
23136
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22610
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23137
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23138
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
23139
|
+
ccRouteUnavailable: false
|
|
22611
23140
|
}],
|
|
22612
23141
|
["AWS::S3::Bucket", {
|
|
22613
23142
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22639,12 +23168,22 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22639
23168
|
["MetadataConfiguration", "not yet implemented by cdkd"],
|
|
22640
23169
|
["MetadataTableConfiguration", "not yet implemented by cdkd"]
|
|
22641
23170
|
]),
|
|
22642
|
-
createOnlyDrops: /* @__PURE__ */ new Set(["BucketNamePrefix", "BucketNamespace"])
|
|
23171
|
+
createOnlyDrops: /* @__PURE__ */ new Set(["BucketNamePrefix", "BucketNamespace"]),
|
|
23172
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
23173
|
+
"Arn",
|
|
23174
|
+
"DomainName",
|
|
23175
|
+
"DualStackDomainName",
|
|
23176
|
+
"RegionalDomainName",
|
|
23177
|
+
"WebsiteURL"
|
|
23178
|
+
]),
|
|
23179
|
+
ccRouteUnavailable: false
|
|
22643
23180
|
}],
|
|
22644
23181
|
["AWS::S3::BucketPolicy", {
|
|
22645
23182
|
handled: /* @__PURE__ */ new Set(["Bucket", "PolicyDocument"]),
|
|
22646
23183
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22647
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23184
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23185
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
23186
|
+
ccRouteUnavailable: false
|
|
22648
23187
|
}],
|
|
22649
23188
|
["AWS::S3Express::DirectoryBucket", {
|
|
22650
23189
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22659,12 +23198,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22659
23198
|
["LifecycleConfiguration", "not yet implemented by cdkd"],
|
|
22660
23199
|
["MetricsConfigurations", "not yet implemented by cdkd"]
|
|
22661
23200
|
]),
|
|
22662
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23201
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23202
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "AvailabilityZoneName"]),
|
|
23203
|
+
ccRouteUnavailable: false
|
|
22663
23204
|
}],
|
|
22664
23205
|
["AWS::S3Tables::Namespace", {
|
|
22665
23206
|
handled: /* @__PURE__ */ new Set(["Namespace", "TableBucketARN"]),
|
|
22666
23207
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22667
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23208
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23209
|
+
readOnly: /* @__PURE__ */ new Set(),
|
|
23210
|
+
ccRouteUnavailable: false
|
|
22668
23211
|
}],
|
|
22669
23212
|
["AWS::S3Tables::Table", {
|
|
22670
23213
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22687,7 +23230,13 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22687
23230
|
"IcebergMetadata",
|
|
22688
23231
|
"StorageClassConfiguration",
|
|
22689
23232
|
"WithoutMetadata"
|
|
22690
|
-
])
|
|
23233
|
+
]),
|
|
23234
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
23235
|
+
"TableARN",
|
|
23236
|
+
"VersionToken",
|
|
23237
|
+
"WarehouseLocation"
|
|
23238
|
+
]),
|
|
23239
|
+
ccRouteUnavailable: false
|
|
22691
23240
|
}],
|
|
22692
23241
|
["AWS::S3Tables::TableBucket", {
|
|
22693
23242
|
handled: /* @__PURE__ */ new Set(["TableBucketName", "Tags"]),
|
|
@@ -22698,7 +23247,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22698
23247
|
["StorageClassConfiguration", "not yet implemented by cdkd"],
|
|
22699
23248
|
["UnreferencedFileRemoval", "not yet implemented by cdkd"]
|
|
22700
23249
|
]),
|
|
22701
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23250
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23251
|
+
readOnly: /* @__PURE__ */ new Set(["TableBucketARN"]),
|
|
23252
|
+
ccRouteUnavailable: false
|
|
22702
23253
|
}],
|
|
22703
23254
|
["AWS::S3Vectors::VectorBucket", {
|
|
22704
23255
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22707,7 +23258,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22707
23258
|
"VectorBucketName"
|
|
22708
23259
|
]),
|
|
22709
23260
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22710
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23261
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23262
|
+
readOnly: /* @__PURE__ */ new Set(["CreationTime", "VectorBucketArn"]),
|
|
23263
|
+
ccRouteUnavailable: false
|
|
22711
23264
|
}],
|
|
22712
23265
|
["AWS::Scheduler::Schedule", {
|
|
22713
23266
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22724,7 +23277,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22724
23277
|
"Target"
|
|
22725
23278
|
]),
|
|
22726
23279
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22727
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23280
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23281
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
23282
|
+
ccRouteUnavailable: true
|
|
22728
23283
|
}],
|
|
22729
23284
|
["AWS::SecretsManager::Secret", {
|
|
22730
23285
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22738,7 +23293,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22738
23293
|
"Type"
|
|
22739
23294
|
]),
|
|
22740
23295
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22741
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23296
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23297
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
23298
|
+
ccRouteUnavailable: false
|
|
22742
23299
|
}],
|
|
22743
23300
|
["AWS::ServiceDiscovery::HttpNamespace", {
|
|
22744
23301
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22747,7 +23304,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22747
23304
|
"Tags"
|
|
22748
23305
|
]),
|
|
22749
23306
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22750
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23307
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23308
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "Id"]),
|
|
23309
|
+
ccRouteUnavailable: false
|
|
22751
23310
|
}],
|
|
22752
23311
|
["AWS::ServiceDiscovery::PrivateDnsNamespace", {
|
|
22753
23312
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22758,7 +23317,13 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22758
23317
|
"Vpc"
|
|
22759
23318
|
]),
|
|
22760
23319
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22761
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23320
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23321
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
23322
|
+
"Arn",
|
|
23323
|
+
"HostedZoneId",
|
|
23324
|
+
"Id"
|
|
23325
|
+
]),
|
|
23326
|
+
ccRouteUnavailable: false
|
|
22762
23327
|
}],
|
|
22763
23328
|
["AWS::ServiceDiscovery::PublicDnsNamespace", {
|
|
22764
23329
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22768,7 +23333,13 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22768
23333
|
"Tags"
|
|
22769
23334
|
]),
|
|
22770
23335
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22771
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23336
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23337
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
23338
|
+
"Arn",
|
|
23339
|
+
"HostedZoneId",
|
|
23340
|
+
"Id"
|
|
23341
|
+
]),
|
|
23342
|
+
ccRouteUnavailable: false
|
|
22772
23343
|
}],
|
|
22773
23344
|
["AWS::ServiceDiscovery::Service", {
|
|
22774
23345
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22783,7 +23354,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22783
23354
|
"Type"
|
|
22784
23355
|
]),
|
|
22785
23356
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22786
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23357
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23358
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "Id"]),
|
|
23359
|
+
ccRouteUnavailable: false
|
|
22787
23360
|
}],
|
|
22788
23361
|
["AWS::SNS::Subscription", {
|
|
22789
23362
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22799,7 +23372,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22799
23372
|
"TopicArn"
|
|
22800
23373
|
]),
|
|
22801
23374
|
silentDrop: /* @__PURE__ */ new Map([["Region", "CFn-only cross-region subscription hint; cdkd uses the SDK client region directly and has no per-resource region override"]]),
|
|
22802
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23375
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23376
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
23377
|
+
ccRouteUnavailable: false
|
|
22803
23378
|
}],
|
|
22804
23379
|
["AWS::SNS::Topic", {
|
|
22805
23380
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22819,12 +23394,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22819
23394
|
"TracingConfig"
|
|
22820
23395
|
]),
|
|
22821
23396
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22822
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23397
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23398
|
+
readOnly: /* @__PURE__ */ new Set(["TopicArn"]),
|
|
23399
|
+
ccRouteUnavailable: false
|
|
22823
23400
|
}],
|
|
22824
23401
|
["AWS::SNS::TopicPolicy", {
|
|
22825
23402
|
handled: /* @__PURE__ */ new Set(["PolicyDocument", "Topics"]),
|
|
22826
23403
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22827
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23404
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23405
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
23406
|
+
ccRouteUnavailable: false
|
|
22828
23407
|
}],
|
|
22829
23408
|
["AWS::SQS::Queue", {
|
|
22830
23409
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22846,12 +23425,16 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22846
23425
|
"VisibilityTimeout"
|
|
22847
23426
|
]),
|
|
22848
23427
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22849
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23428
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23429
|
+
readOnly: /* @__PURE__ */ new Set(["Arn", "QueueUrl"]),
|
|
23430
|
+
ccRouteUnavailable: false
|
|
22850
23431
|
}],
|
|
22851
23432
|
["AWS::SQS::QueuePolicy", {
|
|
22852
23433
|
handled: /* @__PURE__ */ new Set(["PolicyDocument", "Queues"]),
|
|
22853
23434
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22854
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23435
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23436
|
+
readOnly: /* @__PURE__ */ new Set(["Id"]),
|
|
23437
|
+
ccRouteUnavailable: false
|
|
22855
23438
|
}],
|
|
22856
23439
|
["AWS::SSM::Parameter", {
|
|
22857
23440
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22866,7 +23449,9 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22866
23449
|
"Value"
|
|
22867
23450
|
]),
|
|
22868
23451
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22869
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23452
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23453
|
+
readOnly: /* @__PURE__ */ new Set(["Arn"]),
|
|
23454
|
+
ccRouteUnavailable: false
|
|
22870
23455
|
}],
|
|
22871
23456
|
["AWS::StepFunctions::StateMachine", {
|
|
22872
23457
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22883,7 +23468,13 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22883
23468
|
"TracingConfiguration"
|
|
22884
23469
|
]),
|
|
22885
23470
|
silentDrop: /* @__PURE__ */ new Map(),
|
|
22886
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23471
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23472
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
23473
|
+
"Arn",
|
|
23474
|
+
"Name",
|
|
23475
|
+
"StateMachineRevisionId"
|
|
23476
|
+
]),
|
|
23477
|
+
ccRouteUnavailable: false
|
|
22887
23478
|
}],
|
|
22888
23479
|
["AWS::WAFv2::WebACL", {
|
|
22889
23480
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -22906,10 +23497,329 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
22906
23497
|
["MonetizationConfig", "not yet implemented by cdkd"],
|
|
22907
23498
|
["OnSourceDDoSProtectionConfig", "not yet implemented by cdkd"]
|
|
22908
23499
|
]),
|
|
22909
|
-
createOnlyDrops: /* @__PURE__ */ new Set()
|
|
23500
|
+
createOnlyDrops: /* @__PURE__ */ new Set(),
|
|
23501
|
+
readOnly: /* @__PURE__ */ new Set([
|
|
23502
|
+
"Arn",
|
|
23503
|
+
"Capacity",
|
|
23504
|
+
"Id",
|
|
23505
|
+
"LabelNamespace"
|
|
23506
|
+
]),
|
|
23507
|
+
ccRouteUnavailable: false
|
|
22910
23508
|
}]
|
|
22911
23509
|
]);
|
|
22912
23510
|
|
|
23511
|
+
//#endregion
|
|
23512
|
+
//#region src/provisioning/unsupported-types.generated.ts
|
|
23513
|
+
/**
|
|
23514
|
+
* AUTO-GENERATED by scripts/gen-unsupported-types.ts — DO NOT EDIT BY HAND.
|
|
23515
|
+
* Source: docs/_generated/provider-coverage.json (tier3), minus
|
|
23516
|
+
* registry-routed special cases (see REGISTRY_ROUTED_EXCLUSIONS in the
|
|
23517
|
+
* generator).
|
|
23518
|
+
* Regenerate: `vp run gen:unsupported-types`.
|
|
23519
|
+
*
|
|
23520
|
+
* AWS CloudFormation resource types AWS reports as
|
|
23521
|
+
* `ProvisioningType: NON_PROVISIONABLE` (Cloud Control API cannot
|
|
23522
|
+
* create/update/delete them) and for which cdkd has no SDK provider. cdkd
|
|
23523
|
+
* pre-flight rejects these fast with an actionable message instead of letting
|
|
23524
|
+
* the optimistic Cloud Control fallthrough fail mid-deploy.
|
|
23525
|
+
*/
|
|
23526
|
+
const NON_PROVISIONABLE_TYPES = /* @__PURE__ */ new Set([
|
|
23527
|
+
"Alexa::ASK::Skill",
|
|
23528
|
+
"AWS::AmazonMQ::ConfigurationAssociation",
|
|
23529
|
+
"AWS::Amplify::Jobs",
|
|
23530
|
+
"AWS::AmplifyUIBuilder::CodegenJob",
|
|
23531
|
+
"AWS::AppMesh::GatewayRoute",
|
|
23532
|
+
"AWS::AppMesh::Mesh",
|
|
23533
|
+
"AWS::AppMesh::Route",
|
|
23534
|
+
"AWS::AppMesh::VirtualGateway",
|
|
23535
|
+
"AWS::AppMesh::VirtualNode",
|
|
23536
|
+
"AWS::AppMesh::VirtualRouter",
|
|
23537
|
+
"AWS::AppMesh::VirtualService",
|
|
23538
|
+
"AWS::AppStream::Fleet",
|
|
23539
|
+
"AWS::AppStream::StackFleetAssociation",
|
|
23540
|
+
"AWS::AppSync::ApiCache",
|
|
23541
|
+
"AWS::Artifact::Report",
|
|
23542
|
+
"AWS::Athena::Session",
|
|
23543
|
+
"AWS::AutoScalingPlans::ScalingPlan",
|
|
23544
|
+
"AWS::BackupSearch::SearchJob",
|
|
23545
|
+
"AWS::BackupSearch::SearchResultExportJob",
|
|
23546
|
+
"AWS::BCMDataExports::Table",
|
|
23547
|
+
"AWS::Bedrock::AsyncInvoke",
|
|
23548
|
+
"AWS::Bedrock::DefaultPromptRouter",
|
|
23549
|
+
"AWS::Bedrock::FlowExecution",
|
|
23550
|
+
"AWS::Bedrock::FoundationModel",
|
|
23551
|
+
"AWS::Bedrock::ImportedModel",
|
|
23552
|
+
"AWS::Bedrock::ModelImportJob",
|
|
23553
|
+
"AWS::Bedrock::ModelInvocationJob",
|
|
23554
|
+
"AWS::BedrockAgentCore::ConfigurationBundleVersion",
|
|
23555
|
+
"AWS::BedrockAgentCore::HarnessVersion",
|
|
23556
|
+
"AWS::BedrockAgentCore::PolicyGeneration",
|
|
23557
|
+
"AWS::BedrockAgentCore::TokenVault",
|
|
23558
|
+
"AWS::Braket::Job",
|
|
23559
|
+
"AWS::Cassandra::Stream",
|
|
23560
|
+
"AWS::Cloud9::EnvironmentEC2",
|
|
23561
|
+
"AWS::CloudFormation::Macro",
|
|
23562
|
+
"AWS::CloudFormation::ResourceScan",
|
|
23563
|
+
"AWS::CloudFormation::WaitCondition",
|
|
23564
|
+
"AWS::CloudFront::StreamingDistribution",
|
|
23565
|
+
"AWS::CodeArtifact::Package",
|
|
23566
|
+
"AWS::CodeBuild::Build",
|
|
23567
|
+
"AWS::CodeBuild::BuildBatch",
|
|
23568
|
+
"AWS::CodeBuild::Sandbox",
|
|
23569
|
+
"AWS::CodeStar::GitHubRepository",
|
|
23570
|
+
"AWS::CognitoSync::Dataset",
|
|
23571
|
+
"AWS::Comprehend::DocumentClassificationJob",
|
|
23572
|
+
"AWS::Comprehend::DominantLanguageDetectionJob",
|
|
23573
|
+
"AWS::Comprehend::EntitiesDetectionJob",
|
|
23574
|
+
"AWS::Comprehend::FlywheelDataset",
|
|
23575
|
+
"AWS::Comprehend::SentimentDetectionJob",
|
|
23576
|
+
"AWS::Comprehend::TargetedSentimentDetectionJob",
|
|
23577
|
+
"AWS::Config::ConfigurationRecorder",
|
|
23578
|
+
"AWS::Config::DeliveryChannel",
|
|
23579
|
+
"AWS::Config::OrganizationConfigRule",
|
|
23580
|
+
"AWS::ControlCatalog::CommonControl",
|
|
23581
|
+
"AWS::ControlCatalog::Control",
|
|
23582
|
+
"AWS::ControlCatalog::Objective",
|
|
23583
|
+
"AWS::DataExchange::Assets",
|
|
23584
|
+
"AWS::DataExchange::EntitledDataSets",
|
|
23585
|
+
"AWS::DataExchange::Job",
|
|
23586
|
+
"AWS::DataSync::TaskExecution",
|
|
23587
|
+
"AWS::DAX::Cluster",
|
|
23588
|
+
"AWS::DAX::SubnetGroup",
|
|
23589
|
+
"AWS::Deadline::Job",
|
|
23590
|
+
"AWS::DirectoryService::MicrosoftAD",
|
|
23591
|
+
"AWS::DMS::ReplicationInstance",
|
|
23592
|
+
"AWS::DRS::RecoveryInstance",
|
|
23593
|
+
"AWS::DynamoDB::Export",
|
|
23594
|
+
"AWS::DynamoDB::Stream",
|
|
23595
|
+
"AWS::EC2::ClientVpnAuthorizationRule",
|
|
23596
|
+
"AWS::EC2::ClientVpnEndpoint",
|
|
23597
|
+
"AWS::EC2::ClientVpnRoute",
|
|
23598
|
+
"AWS::EC2::ClientVpnTargetNetworkAssociation",
|
|
23599
|
+
"AWS::EC2::ExportInstanceTask",
|
|
23600
|
+
"AWS::EC2::NetworkInterfacePermission",
|
|
23601
|
+
"AWS::EC2::ReplaceRootVolumeTask",
|
|
23602
|
+
"AWS::EC2::VpnConnectionDeviceType",
|
|
23603
|
+
"AWS::EC2::VPNGatewayRoutePropagation",
|
|
23604
|
+
"AWS::ECRPublic::Registry",
|
|
23605
|
+
"AWS::ECS::ContainerInstance",
|
|
23606
|
+
"AWS::ECS::Task",
|
|
23607
|
+
"AWS::ElastiCache::ReservedCacheNode",
|
|
23608
|
+
"AWS::ElastiCache::SecurityGroup",
|
|
23609
|
+
"AWS::ElastiCache::SecurityGroupIngress",
|
|
23610
|
+
"AWS::ElasticLoadBalancingV2::ListenerCertificate",
|
|
23611
|
+
"AWS::Elasticsearch::Domain",
|
|
23612
|
+
"AWS::EMR::NotebookExecution",
|
|
23613
|
+
"AWS::EMRContainers::JobRun",
|
|
23614
|
+
"AWS::EMRServerless::JobRun",
|
|
23615
|
+
"AWS::Events::Replay",
|
|
23616
|
+
"AWS::FIS::Experiment",
|
|
23617
|
+
"AWS::FIS::SafetyLever",
|
|
23618
|
+
"AWS::FSx::Snapshot",
|
|
23619
|
+
"AWS::FSx::StorageVirtualMachine",
|
|
23620
|
+
"AWS::Glue::DevEndpoint",
|
|
23621
|
+
"AWS::Glue::Partition",
|
|
23622
|
+
"AWS::Glue::TableVersion",
|
|
23623
|
+
"AWS::Greengrass::ConnectorDefinition",
|
|
23624
|
+
"AWS::Greengrass::ConnectorDefinitionVersion",
|
|
23625
|
+
"AWS::Greengrass::CoreDefinition",
|
|
23626
|
+
"AWS::Greengrass::CoreDefinitionVersion",
|
|
23627
|
+
"AWS::Greengrass::DeviceDefinition",
|
|
23628
|
+
"AWS::Greengrass::DeviceDefinitionVersion",
|
|
23629
|
+
"AWS::Greengrass::FunctionDefinition",
|
|
23630
|
+
"AWS::Greengrass::FunctionDefinitionVersion",
|
|
23631
|
+
"AWS::Greengrass::Group",
|
|
23632
|
+
"AWS::Greengrass::GroupVersion",
|
|
23633
|
+
"AWS::Greengrass::LoggerDefinition",
|
|
23634
|
+
"AWS::Greengrass::LoggerDefinitionVersion",
|
|
23635
|
+
"AWS::Greengrass::ResourceDefinition",
|
|
23636
|
+
"AWS::Greengrass::ResourceDefinitionVersion",
|
|
23637
|
+
"AWS::Greengrass::SubscriptionDefinition",
|
|
23638
|
+
"AWS::Greengrass::SubscriptionDefinitionVersion",
|
|
23639
|
+
"AWS::GreengrassV2::Component",
|
|
23640
|
+
"AWS::GreengrassV2::CoreDevice",
|
|
23641
|
+
"AWS::IdentityStore::AllGroupMemberships",
|
|
23642
|
+
"AWS::ImageBuilder::AllImageBuildVersions",
|
|
23643
|
+
"AWS::ImageBuilder::AllWorkflowBuildVersions",
|
|
23644
|
+
"AWS::ImageBuilder::LifecycleExecution",
|
|
23645
|
+
"AWS::ImageBuilder::WorkflowExecution",
|
|
23646
|
+
"AWS::ImageBuilder::WorkflowStepExecution",
|
|
23647
|
+
"AWS::InternetMonitor::InternetEvent",
|
|
23648
|
+
"AWS::IoT::Index",
|
|
23649
|
+
"AWS::IoT::PolicyPrincipalAttachment",
|
|
23650
|
+
"AWS::IoT::ThingPrincipalAttachment",
|
|
23651
|
+
"AWS::IoTDeviceAdvisor::SuiteRun",
|
|
23652
|
+
"AWS::IoTThingsGraph::FlowTemplate",
|
|
23653
|
+
"AWS::IoTTwinMaker::MetadataTransferJob",
|
|
23654
|
+
"AWS::IVS::Composition",
|
|
23655
|
+
"AWS::KafkaConnect::ConnectorOperation",
|
|
23656
|
+
"AWS::KinesisAnalytics::Application",
|
|
23657
|
+
"AWS::KinesisAnalytics::ApplicationOutput",
|
|
23658
|
+
"AWS::KinesisAnalytics::ApplicationReferenceDataSource",
|
|
23659
|
+
"AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption",
|
|
23660
|
+
"AWS::KinesisAnalyticsV2::ApplicationOutput",
|
|
23661
|
+
"AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource",
|
|
23662
|
+
"AWS::LakeFormation::DataLakeSettings",
|
|
23663
|
+
"AWS::LakeFormation::Permissions",
|
|
23664
|
+
"AWS::LakeFormation::Resource",
|
|
23665
|
+
"AWS::Lambda::DurableExecution",
|
|
23666
|
+
"AWS::Lightsail::ExportSnapshotRecord",
|
|
23667
|
+
"AWS::Location::Job",
|
|
23668
|
+
"AWS::Macie2::ClassificationJob",
|
|
23669
|
+
"AWS::ManagedBlockchain::Member",
|
|
23670
|
+
"AWS::ManagedBlockchain::Node",
|
|
23671
|
+
"AWS::MediaConnect::Offering",
|
|
23672
|
+
"AWS::MediaConnect::Reservation",
|
|
23673
|
+
"AWS::MediaConvert::JobTemplate",
|
|
23674
|
+
"AWS::MediaConvert::Queue",
|
|
23675
|
+
"AWS::MediaLive::Channel",
|
|
23676
|
+
"AWS::MediaLive::Input",
|
|
23677
|
+
"AWS::MediaLive::InputSecurityGroup",
|
|
23678
|
+
"AWS::MediaLive::Offering",
|
|
23679
|
+
"AWS::MediaPackage::HarvestJob",
|
|
23680
|
+
"AWS::MediaPackageV2::HarvestJob",
|
|
23681
|
+
"AWS::MediaStore::Container",
|
|
23682
|
+
"AWS::MedicalImaging::ImageSet",
|
|
23683
|
+
"AWS::MemoryDB::MultiRegionParameterGroup",
|
|
23684
|
+
"AWS::MemoryDB::ReservedNode",
|
|
23685
|
+
"AWS::NeptuneGraph::ExportTask",
|
|
23686
|
+
"AWS::NovaAct::WorkflowRun",
|
|
23687
|
+
"AWS::Omics::ReadSet",
|
|
23688
|
+
"AWS::Omics::Reference",
|
|
23689
|
+
"AWS::Omics::Run",
|
|
23690
|
+
"AWS::Omics::Task",
|
|
23691
|
+
"AWS::OpsWorks::App",
|
|
23692
|
+
"AWS::OpsWorks::ElasticLoadBalancerAttachment",
|
|
23693
|
+
"AWS::OpsWorks::Instance",
|
|
23694
|
+
"AWS::OpsWorks::Layer",
|
|
23695
|
+
"AWS::OpsWorks::Stack",
|
|
23696
|
+
"AWS::OpsWorks::UserProfile",
|
|
23697
|
+
"AWS::OpsWorks::Volume",
|
|
23698
|
+
"AWS::Organizations::Root",
|
|
23699
|
+
"AWS::OSIS::PipelineBlueprint",
|
|
23700
|
+
"AWS::PartnerCentral::ConnectionPreferences",
|
|
23701
|
+
"AWS::PartnerCentral::Partner",
|
|
23702
|
+
"AWS::Personalize::BatchInferenceJob",
|
|
23703
|
+
"AWS::Personalize::BatchSegmentJob",
|
|
23704
|
+
"AWS::Personalize::DataDeletionJob",
|
|
23705
|
+
"AWS::Personalize::DatasetExportJob",
|
|
23706
|
+
"AWS::Personalize::Recipe",
|
|
23707
|
+
"AWS::Pinpoint::ADMChannel",
|
|
23708
|
+
"AWS::Pinpoint::APNSChannel",
|
|
23709
|
+
"AWS::Pinpoint::APNSSandboxChannel",
|
|
23710
|
+
"AWS::Pinpoint::APNSVoipChannel",
|
|
23711
|
+
"AWS::Pinpoint::APNSVoipSandboxChannel",
|
|
23712
|
+
"AWS::Pinpoint::App",
|
|
23713
|
+
"AWS::Pinpoint::ApplicationSettings",
|
|
23714
|
+
"AWS::Pinpoint::BaiduChannel",
|
|
23715
|
+
"AWS::Pinpoint::Campaign",
|
|
23716
|
+
"AWS::Pinpoint::EmailChannel",
|
|
23717
|
+
"AWS::Pinpoint::EmailTemplate",
|
|
23718
|
+
"AWS::Pinpoint::EventStream",
|
|
23719
|
+
"AWS::Pinpoint::GCMChannel",
|
|
23720
|
+
"AWS::Pinpoint::PushTemplate",
|
|
23721
|
+
"AWS::Pinpoint::Segment",
|
|
23722
|
+
"AWS::Pinpoint::SMSChannel",
|
|
23723
|
+
"AWS::Pinpoint::SmsTemplate",
|
|
23724
|
+
"AWS::Pinpoint::VoiceChannel",
|
|
23725
|
+
"AWS::PinpointEmail::ConfigurationSet",
|
|
23726
|
+
"AWS::PinpointEmail::ConfigurationSetEventDestination",
|
|
23727
|
+
"AWS::PinpointEmail::DedicatedIpPool",
|
|
23728
|
+
"AWS::PinpointEmail::Identity",
|
|
23729
|
+
"AWS::QLDB::Ledger",
|
|
23730
|
+
"AWS::QuickSight::AssetBundleExportJob",
|
|
23731
|
+
"AWS::QuickSight::AssetBundleImportJob",
|
|
23732
|
+
"AWS::RDS::DBSecurityGroup",
|
|
23733
|
+
"AWS::RDS::DBSecurityGroupIngress",
|
|
23734
|
+
"AWS::RDS::ReservedDBInstance",
|
|
23735
|
+
"AWS::Redshift::ClusterSecurityGroup",
|
|
23736
|
+
"AWS::Redshift::ClusterSecurityGroupIngress",
|
|
23737
|
+
"AWS::Redshift::DataShare",
|
|
23738
|
+
"AWS::RedshiftServerless::RecoveryPoint",
|
|
23739
|
+
"AWS::ResilienceHub::RecommendationTemplate",
|
|
23740
|
+
"AWS::Route53::RecordSetGroup",
|
|
23741
|
+
"AWS::Route53Resolver::FirewallConfig",
|
|
23742
|
+
"AWS::SageMaker::AutoMLJob",
|
|
23743
|
+
"AWS::SageMaker::CodeRepository",
|
|
23744
|
+
"AWS::SageMaker::ExperimentTrialComponent",
|
|
23745
|
+
"AWS::SageMaker::HubContentVersion",
|
|
23746
|
+
"AWS::SageMaker::HyperParameterTuningJob",
|
|
23747
|
+
"AWS::SageMaker::ModelCardExportJob",
|
|
23748
|
+
"AWS::SageMaker::MonitoringScheduleAlert",
|
|
23749
|
+
"AWS::SageMaker::NotebookInstance",
|
|
23750
|
+
"AWS::SageMaker::NotebookInstanceLifecycleConfig",
|
|
23751
|
+
"AWS::SageMaker::OptimizationJob",
|
|
23752
|
+
"AWS::SageMaker::PipelineExecution",
|
|
23753
|
+
"AWS::SageMaker::TrainingJob",
|
|
23754
|
+
"AWS::SageMaker::TransformJob",
|
|
23755
|
+
"AWS::SageMaker::Workteam",
|
|
23756
|
+
"AWS::SavingsPlans::SavingsPlan",
|
|
23757
|
+
"AWS::SecurityAgent::PentestTask",
|
|
23758
|
+
"AWS::ServiceDiscovery::Instance",
|
|
23759
|
+
"AWS::ServiceQuotas::Quota",
|
|
23760
|
+
"AWS::Signer::SigningJob",
|
|
23761
|
+
"AWS::SSM::AutomationExecution",
|
|
23762
|
+
"AWS::SSM::ManagedInstance",
|
|
23763
|
+
"AWS::SSM::Session",
|
|
23764
|
+
"AWS::SSO::ApplicationProvider",
|
|
23765
|
+
"AWS::States::Execution",
|
|
23766
|
+
"AWS::StepFunctions::MapRun",
|
|
23767
|
+
"AWS::ThinClient::SoftwareSet",
|
|
23768
|
+
"AWS::Transcribe::CallAnalyticsJob",
|
|
23769
|
+
"AWS::Transcribe::MedicalScribeJob",
|
|
23770
|
+
"AWS::Transcribe::MedicalTranscriptionJob",
|
|
23771
|
+
"AWS::Transcribe::TranscriptionJob",
|
|
23772
|
+
"AWS::UserNotifications::ManagedNotificationConfiguration",
|
|
23773
|
+
"AWS::UserNotifications::NotificationEvent",
|
|
23774
|
+
"AWS::WAF::ByteMatchSet",
|
|
23775
|
+
"AWS::WAF::IPSet",
|
|
23776
|
+
"AWS::WAF::Rule",
|
|
23777
|
+
"AWS::WAF::SizeConstraintSet",
|
|
23778
|
+
"AWS::WAF::SqlInjectionMatchSet",
|
|
23779
|
+
"AWS::WAF::WebACL",
|
|
23780
|
+
"AWS::WAF::XssMatchSet",
|
|
23781
|
+
"AWS::WAFRegional::ByteMatchSet",
|
|
23782
|
+
"AWS::WAFRegional::GeoMatchSet",
|
|
23783
|
+
"AWS::WAFRegional::IPSet",
|
|
23784
|
+
"AWS::WAFRegional::RateBasedRule",
|
|
23785
|
+
"AWS::WAFRegional::RegexPatternSet",
|
|
23786
|
+
"AWS::WAFRegional::Rule",
|
|
23787
|
+
"AWS::WAFRegional::SizeConstraintSet",
|
|
23788
|
+
"AWS::WAFRegional::SqlInjectionMatchSet",
|
|
23789
|
+
"AWS::WAFRegional::WebACL",
|
|
23790
|
+
"AWS::WAFRegional::WebACLAssociation",
|
|
23791
|
+
"AWS::WAFRegional::XssMatchSet",
|
|
23792
|
+
"AWS::Wisdom::Session",
|
|
23793
|
+
"AWS::WorkSpaces::WorkSpaceApplication"
|
|
23794
|
+
]);
|
|
23795
|
+
|
|
23796
|
+
//#endregion
|
|
23797
|
+
//#region src/provisioning/unsupported-types.ts
|
|
23798
|
+
/**
|
|
23799
|
+
* Helpers for cdkd's genuinely-unsupported resource types.
|
|
23800
|
+
*
|
|
23801
|
+
* The data ({@link NON_PROVISIONABLE_TYPES}) is generated from the
|
|
23802
|
+
* provider-coverage audit (`vp run gen:unsupported-types`); this module adds
|
|
23803
|
+
* the runtime predicates + the actionable issue link used by the pre-flight
|
|
23804
|
+
* check (see {@link ../provisioning/provider-registry.ProviderRegistry.validateResourceTypes}).
|
|
23805
|
+
*/
|
|
23806
|
+
/**
|
|
23807
|
+
* True if AWS reports the type as `ProvisioningType: NON_PROVISIONABLE`
|
|
23808
|
+
* (Cloud Control API cannot create/update/delete it) and cdkd has no SDK
|
|
23809
|
+
* provider for it.
|
|
23810
|
+
*/
|
|
23811
|
+
function isNonProvisionable(resourceType) {
|
|
23812
|
+
return NON_PROVISIONABLE_TYPES.has(resourceType);
|
|
23813
|
+
}
|
|
23814
|
+
/**
|
|
23815
|
+
* A 1-click pre-filled GitHub issue link requesting cdkd support for a
|
|
23816
|
+
* resource type. Surfaced in the pre-flight error so a user hitting an
|
|
23817
|
+
* unsupported type lands directly in the "request support" flow.
|
|
23818
|
+
*/
|
|
23819
|
+
function unsupportedTypeIssueUrl(resourceType) {
|
|
23820
|
+
return `https://github.com/go-to-k/cdkd/issues/new?title=${encodeURIComponent(`Support resource type ${resourceType}`)}&labels=resource-support`;
|
|
23821
|
+
}
|
|
23822
|
+
|
|
22913
23823
|
//#endregion
|
|
22914
23824
|
//#region src/provisioning/property-coverage.ts
|
|
22915
23825
|
/**
|
|
@@ -22947,9 +23857,11 @@ function getPropertyCoverage(resourceType) {
|
|
|
22947
23857
|
* for a single resource. Returns an array of `{ property, rationale }` for
|
|
22948
23858
|
* each unhandled top-level key in `templateProperties`, sorted alphabetically.
|
|
22949
23859
|
*
|
|
22950
|
-
*
|
|
22951
|
-
*
|
|
22952
|
-
*
|
|
23860
|
+
* Only properties the committed CFn schema snapshot KNOWS. A key absent from
|
|
23861
|
+
* it is {@link findUnrecognizedProperties}' concern, and it drives routing
|
|
23862
|
+
* through {@link findRoutableUnrecognizedProperties} instead — kept apart
|
|
23863
|
+
* because the state and diff NARROWINGS below read this list and must stay
|
|
23864
|
+
* fixture-only (issue [#3713](https://github.com/go-to-k/cdkd/issues/3713)).
|
|
22953
23865
|
*/
|
|
22954
23866
|
function findSilentDropProperties(resourceType, templateProperties) {
|
|
22955
23867
|
if (!templateProperties) return [];
|
|
@@ -22967,23 +23879,62 @@ function findSilentDropProperties(resourceType, templateProperties) {
|
|
|
22967
23879
|
}
|
|
22968
23880
|
return drops.sort((a, b) => a.property.localeCompare(b.property));
|
|
22969
23881
|
}
|
|
23882
|
+
/** Rationale carried by a route-driving key absent from the schema snapshot. */
|
|
23883
|
+
const UNRECOGNIZED_PROPERTY_RATIONALE = "not in cdkd's CFn schema snapshot";
|
|
23884
|
+
/**
|
|
23885
|
+
* The properties that drive the Cloud Control auto-route (issue
|
|
23886
|
+
* [#614](https://github.com/go-to-k/cdkd/issues/614)): every silent drop whose
|
|
23887
|
+
* `<Type>:<Prop>` key is NOT in the `--prefer-sdk-route` allow set, plus every
|
|
23888
|
+
* {@link findRoutableUnrecognizedProperties} key. THE routing predicate —
|
|
23889
|
+
* `getProviderFor`, the sticky-escape, the plan and diff annotations and the
|
|
23890
|
+
* recreate validators all read it, so none can disagree with the route.
|
|
23891
|
+
*
|
|
23892
|
+
* `recordedProperties` is the resource's existing state-record bag, and it
|
|
23893
|
+
* matters only for the unrecognized half; see
|
|
23894
|
+
* {@link findRoutableUnrecognizedProperties}. Omitting it is PRESENCE
|
|
23895
|
+
* semantics, correct for a new physical resource.
|
|
23896
|
+
*
|
|
23897
|
+
* Sorted by property; `[]` for Tier 2 / Custom / unknown types, an absent bag,
|
|
23898
|
+
* or a bag whose every drop is allowed.
|
|
23899
|
+
*/
|
|
23900
|
+
function findActionableSilentDrops(resourceType, templateProperties, allowedKeys, recordedProperties, options) {
|
|
23901
|
+
const drops = findSilentDropProperties(resourceType, templateProperties).filter(({ property }) => !allowedKeys.has(`${resourceType}:${property}`));
|
|
23902
|
+
const unrecognized = findRoutableUnrecognizedProperties(resourceType, templateProperties, allowedKeys, recordedProperties, options);
|
|
23903
|
+
if (unrecognized.length === 0) return drops;
|
|
23904
|
+
return [...drops, ...unrecognized.map((property) => ({
|
|
23905
|
+
property,
|
|
23906
|
+
rationale: UNRECOGNIZED_PROPERTY_RATIONALE
|
|
23907
|
+
}))].sort((a, b) => a.property.localeCompare(b.property));
|
|
23908
|
+
}
|
|
23909
|
+
function findRoutableUnrecognizedProperties(resourceType, templateProperties, allowedKeys, recordedProperties, options) {
|
|
23910
|
+
const coverage = getPropertyCoverage(resourceType);
|
|
23911
|
+
if (!templateProperties || !coverage) return [];
|
|
23912
|
+
if (coverage.ccRouteUnavailable || isNonProvisionable(resourceType)) return [];
|
|
23913
|
+
return findUnrecognizedProperties(resourceType, templateProperties).filter((property) => !coverage.readOnly.has(property) && !allowedKeys.has(`${resourceType}:${property}`) && !(recordedProperties != null && typeof recordedProperties === "object" && Object.hasOwn(recordedProperties, property) && sameJsonValue(recordedProperties[property], templateProperties[property], options?.unresolvedAs ?? "unchanged")));
|
|
23914
|
+
}
|
|
22970
23915
|
/**
|
|
22971
|
-
*
|
|
22972
|
-
*
|
|
22973
|
-
*
|
|
22974
|
-
*
|
|
22975
|
-
*
|
|
22976
|
-
*
|
|
22977
|
-
* resource stays on the SDK Provider path.
|
|
22978
|
-
*
|
|
22979
|
-
* Mirrors `findSilentDropProperties`'s sort + early-return behavior:
|
|
22980
|
-
* returns `[]` for Tier 2 / Custom / unknown types, undefined / empty
|
|
22981
|
-
* `templateProperties`, or when every drop is in `allowedKeys`.
|
|
23916
|
+
* Structural equality over the JSON form, for the baseline arm of
|
|
23917
|
+
* {@link findRoutableUnrecognizedProperties}. Not `isDeepStrictEqual` on the raw
|
|
23918
|
+
* values: the two bags are built by different code (the state record is parsed
|
|
23919
|
+
* JSON, the desired bag can be rebuilt with a null prototype by the secret
|
|
23920
|
+
* redaction), and a prototype difference must not read as a changed value —
|
|
23921
|
+
* that would route an unchanged key. Key order does not matter here either.
|
|
22982
23922
|
*/
|
|
22983
|
-
function
|
|
22984
|
-
const
|
|
22985
|
-
if (
|
|
22986
|
-
|
|
23923
|
+
function sameJsonValue(recorded, desired, unresolvedAs) {
|
|
23924
|
+
const recordedJson = toJsonValue(recorded);
|
|
23925
|
+
if (JSON.stringify(recordedJson)?.includes("{{resolve:") === true) return true;
|
|
23926
|
+
const desiredJson = toJsonValue(desired);
|
|
23927
|
+
if (containsIntrinsic(desiredJson)) return unresolvedAs === "unchanged";
|
|
23928
|
+
return isDeepStrictEqual(recordedJson, desiredJson);
|
|
23929
|
+
}
|
|
23930
|
+
/** True when `value` holds a `Ref` / `Fn::*` object anywhere. */
|
|
23931
|
+
function containsIntrinsic(value) {
|
|
23932
|
+
if (Array.isArray(value)) return value.some(containsIntrinsic);
|
|
23933
|
+
if (value === null || typeof value !== "object") return false;
|
|
23934
|
+
return Object.entries(value).some(([key, child]) => key === "Ref" || key.startsWith("Fn::") || containsIntrinsic(child));
|
|
23935
|
+
}
|
|
23936
|
+
function toJsonValue(value) {
|
|
23937
|
+
return value === void 0 ? void 0 : JSON.parse(JSON.stringify(value));
|
|
22987
23938
|
}
|
|
22988
23939
|
/**
|
|
22989
23940
|
* The silent-drop properties in `templateProperties` the user has opted back
|
|
@@ -23000,9 +23951,13 @@ function findActionableSilentDrops(resourceType, templateProperties, allowedKeys
|
|
|
23000
23951
|
* per-property answer would be wrong for exactly the mixed bag.
|
|
23001
23952
|
*
|
|
23002
23953
|
* The complement of {@link findActionableSilentDrops}: one is empty whenever
|
|
23003
|
-
* the other is not, unless the bag has no drops at all (both empty).
|
|
23954
|
+
* the other is not, unless the bag has no drops at all (both empty). A
|
|
23955
|
+
* route-driving UNRECOGNIZED key empties this too, which is why it takes the
|
|
23956
|
+
* same `recordedProperties` — but the accepted list itself stays fixture-only,
|
|
23957
|
+
* since it feeds the narrowing.
|
|
23004
23958
|
*/
|
|
23005
|
-
function findAcceptedSilentDrops(resourceType, templateProperties, allowedKeys) {
|
|
23959
|
+
function findAcceptedSilentDrops(resourceType, templateProperties, allowedKeys, recordedProperties) {
|
|
23960
|
+
if (findRoutableUnrecognizedProperties(resourceType, templateProperties, allowedKeys, recordedProperties).length > 0) return [];
|
|
23006
23961
|
const drops = findSilentDropProperties(resourceType, templateProperties);
|
|
23007
23962
|
const accepted = [];
|
|
23008
23963
|
for (const { property } of drops) {
|
|
@@ -23061,10 +24016,17 @@ function withoutSilentDropProperties(resourceType, properties) {
|
|
|
23061
24016
|
* — {@link removableSilentDrops} carries the rationale, and both go through
|
|
23062
24017
|
* {@link excludeCreateOnly} so they cannot decline on different rules.
|
|
23063
24018
|
*
|
|
24019
|
+
* `recordedProperties` is the resource's state-record bag — the one
|
|
24020
|
+
* `getProviderFor` receives as `previousProperties` — so this narrows on the
|
|
24021
|
+
* route the deploy actually takes (issue
|
|
24022
|
+
* [#3713](https://github.com/go-to-k/cdkd/issues/3713)). Omitting it for an
|
|
24023
|
+
* existing resource treats an unchanged unrecognized key as route-driving and
|
|
24024
|
+
* declines to narrow.
|
|
24025
|
+
*
|
|
23064
24026
|
* Returns the input UNCHANGED when nothing applies.
|
|
23065
24027
|
*/
|
|
23066
|
-
function withoutAcceptedSilentDropProperties(resourceType, properties, allowedKeys) {
|
|
23067
|
-
const removable = excludeCreateOnly(resourceType, findAcceptedSilentDrops(resourceType, properties, allowedKeys));
|
|
24028
|
+
function withoutAcceptedSilentDropProperties(resourceType, properties, allowedKeys, recordedProperties) {
|
|
24029
|
+
const removable = excludeCreateOnly(resourceType, findAcceptedSilentDrops(resourceType, properties, allowedKeys, recordedProperties));
|
|
23068
24030
|
if (removable.length === 0) return properties;
|
|
23069
24031
|
const written = { ...properties };
|
|
23070
24032
|
for (const property of removable) delete written[property];
|
|
@@ -23132,16 +24094,14 @@ function unsupportedPropertyIssueUrl(resourceType, property) {
|
|
|
23132
24094
|
* `coverage.handled` nor `coverage.silentDrop` (issue
|
|
23133
24095
|
* [#2718](https://github.com/go-to-k/cdkd/issues/2718)).
|
|
23134
24096
|
*
|
|
23135
|
-
* The complement of {@link findSilentDropProperties}
|
|
23136
|
-
*
|
|
23137
|
-
*
|
|
23138
|
-
*
|
|
23139
|
-
*
|
|
23140
|
-
*
|
|
23141
|
-
*
|
|
23142
|
-
*
|
|
23143
|
-
* [#614](https://github.com/go-to-k/cdkd/issues/614) failure class arriving
|
|
23144
|
-
* through the one input the #614 machinery cannot observe.
|
|
24097
|
+
* The complement of {@link findSilentDropProperties}. The routing table is
|
|
24098
|
+
* built offline from `tests/fixtures/cfn-schemas/*.json`, so every property
|
|
24099
|
+
* AWS publishes AFTER that snapshot lands here — as does a typo or an
|
|
24100
|
+
* `addPropertyOverride` key. The route-driving subset is
|
|
24101
|
+
* {@link findRoutableUnrecognizedProperties} (issue
|
|
24102
|
+
* [#3713](https://github.com/go-to-k/cdkd/issues/3713)); what stays on the SDK
|
|
24103
|
+
* route (read-only keys, allow-listed or unchanged ones, types Cloud Control
|
|
24104
|
+
* cannot take) is what the caller's warn reports.
|
|
23145
24105
|
*
|
|
23146
24106
|
* **Why a warn built on this has no false-positive mode.** An SDK provider
|
|
23147
24107
|
* writes only what it declares in `handledProperties`, so a top-level property
|
|
@@ -25872,6 +26832,15 @@ const IN_PLACE_UPDATE_DERIVED_ATTRS = Object.freeze({ "AWS::EC2::LaunchTemplate"
|
|
|
25872
26832
|
*/
|
|
25873
26833
|
const IN_PLACE_UPDATE_DERIVED_ATTR_PREFIXES = Object.freeze({ "AWS::CloudFormation::Stack": Object.freeze(["Outputs."]) });
|
|
25874
26834
|
/**
|
|
26835
|
+
* The attribute name {@link DiffCalculator.extractGetAttRefs} records for a
|
|
26836
|
+
* `Ref` read (go-to-k/cdkd#3717 / #3722). Not a name any attribute can have, so
|
|
26837
|
+
* the property-name, derived-attribute and prefix arms of the in-place pass
|
|
26838
|
+
* never match it; only the custom-resource arm (whose physical id the handler
|
|
26839
|
+
* may change) and the fresh-parameter arm (a parameter carrying a `NoEcho`
|
|
26840
|
+
* value supplied in this deploy) read it.
|
|
26841
|
+
*/
|
|
26842
|
+
const REF_READ = "<Ref>";
|
|
26843
|
+
/**
|
|
25875
26844
|
* Diff calculator for comparing desired state (template) with current state
|
|
25876
26845
|
*/
|
|
25877
26846
|
var DiffCalculator = class DiffCalculator {
|
|
@@ -25905,7 +26874,7 @@ var DiffCalculator = class DiffCalculator {
|
|
|
25905
26874
|
* flag-less deploy.
|
|
25906
26875
|
* @returns Map of logical ID to resource change
|
|
25907
26876
|
*/
|
|
25908
|
-
async calculateDiff(currentState, desiredTemplate, resolveFn, canonicalizeProperties, allowedUnsupportedProperties) {
|
|
26877
|
+
async calculateDiff(currentState, desiredTemplate, resolveFn, canonicalizeProperties, allowedUnsupportedProperties, freshParameters) {
|
|
25909
26878
|
const changes = /* @__PURE__ */ new Map();
|
|
25910
26879
|
refuseMalformedResourceEntriesForDeploy(currentState, void 0, void 0);
|
|
25911
26880
|
refuseMalformedResourceProperties(currentState, void 0, void 0);
|
|
@@ -25961,7 +26930,7 @@ var DiffCalculator = class DiffCalculator {
|
|
|
25961
26930
|
const rawDesiredProps = desiredResource.Properties || {};
|
|
25962
26931
|
const resolvedDesiredProps = resolveFn ? await this.resolveBestEffort(rawDesiredProps, resolveFn) : rawDesiredProps;
|
|
25963
26932
|
const sdkRouted = currentResource.provisionedBy !== "cc-api";
|
|
25964
|
-
const desiredAfterDrops = sdkRouted && allowedUnsupportedProperties ? withoutAcceptedSilentDropProperties(desiredResource.Type, resolvedDesiredProps, allowedUnsupportedProperties) : resolvedDesiredProps;
|
|
26933
|
+
const desiredAfterDrops = sdkRouted && allowedUnsupportedProperties ? withoutAcceptedSilentDropProperties(desiredResource.Type, resolvedDesiredProps, allowedUnsupportedProperties, currentResource.properties) : resolvedDesiredProps;
|
|
25965
26934
|
const currentAfterDrops = sdkRouted ? withoutSilentDropProperties(desiredResource.Type, currentResource.properties) : currentResource.properties;
|
|
25966
26935
|
const desiredPropsForCompare = canonicalizeProperties ? canonicalizeProperties(desiredResource.Type, desiredAfterDrops) : desiredAfterDrops;
|
|
25967
26936
|
const currentPropsForCompare = canonicalizeProperties && sdkRouted ? canonicalizeProperties(desiredResource.Type, currentAfterDrops) : currentAfterDrops;
|
|
@@ -26002,11 +26971,9 @@ var DiffCalculator = class DiffCalculator {
|
|
|
26002
26971
|
});
|
|
26003
26972
|
this.logger.debug(`DELETE: ${logicalId} (${currentResource.resourceType})`);
|
|
26004
26973
|
}
|
|
26005
|
-
|
|
26006
|
-
do {
|
|
26007
|
-
round++;
|
|
26974
|
+
do
|
|
26008
26975
|
this.promoteReplacementDependents(changes, desiredTemplate);
|
|
26009
|
-
|
|
26976
|
+
while (this.promoteInPlaceAttributeDependents(changes, desiredTemplate, rawGetAttRefs, freshParameters));
|
|
26010
26977
|
const summary = this.getSummary(changes);
|
|
26011
26978
|
this.logger.debug(`Diff calculated: ${summary.create} CREATE, ${summary.update} UPDATE, ${summary.delete} DELETE, ${summary.noChange} NO_CHANGE`);
|
|
26012
26979
|
return changes;
|
|
@@ -26122,34 +27089,44 @@ var DiffCalculator = class DiffCalculator {
|
|
|
26122
27089
|
* or
|
|
26123
27090
|
* 3. `Attr` starts with a derived-attribute PREFIX of `Up`'s type — the
|
|
26124
27091
|
* {@link IN_PLACE_UPDATE_DERIVED_ATTR_PREFIXES} table (issue #3631; a
|
|
26125
|
-
* nested stack's `Outputs.<Key>`)
|
|
26126
|
-
*
|
|
26127
|
-
*
|
|
26128
|
-
*
|
|
27092
|
+
* nested stack's `Outputs.<Key>`); or
|
|
27093
|
+
* 4. `Up` is a custom resource, whose attributes are all its handler's
|
|
27094
|
+
* response `Data` (go-to-k/cdkd#3662), and whose `Ref` — the physical
|
|
27095
|
+
* id — its handler may also change on an Update by returning a new
|
|
27096
|
+
* `PhysicalResourceId` (go-to-k/cdkd#3722); or
|
|
27097
|
+
* 5. `Up` is a template PARAMETER in `freshParameters`, read by `Ref` or
|
|
27098
|
+
* `${Param}` (go-to-k/cdkd#3717).
|
|
27099
|
+
* (Any other `Ref` resolves to a physical id an in-place update keeps, so
|
|
27100
|
+
* Ref-only dependents of other types are left NO_CHANGE; likewise a GetAtt
|
|
27101
|
+
* of a computed attribute NOT in the allow list, e.g. a Lambda `Arn` on a
|
|
27102
|
+
* Description edit.)
|
|
26129
27103
|
*
|
|
26130
27104
|
* Promotion is safe even when speculative: the deploy engine re-resolves the
|
|
26131
27105
|
* promoted resource against the in-flight state and skips the provider call
|
|
26132
|
-
* when nothing actually changed.
|
|
27106
|
+
* when nothing actually changed. Each synthetic change is marked
|
|
27107
|
+
* `inPlacePropagated`, and its `requiresReplacement` is a ceiling the engine
|
|
27108
|
+
* lowers when the resolved value equals the record, so an unmoved value never
|
|
27109
|
+
* replaces a reader that another edit sent to the provider.
|
|
26133
27110
|
*
|
|
26134
27111
|
* One pass is single-hop: `changedPropsByUpstream` is frozen at entry, so a
|
|
26135
27112
|
* chain `A(in-place) -> B(reads A's changed attr) -> C(reads B's now-changed
|
|
26136
27113
|
* attr)` promotes B but not C. `calculateDiff` re-runs it to a fixpoint, and
|
|
26137
27114
|
* the pass after B's promotion sees B as an in-place UPDATE.
|
|
26138
27115
|
*
|
|
26139
|
-
* A
|
|
26140
|
-
*
|
|
26141
|
-
*
|
|
26142
|
-
*
|
|
26143
|
-
*
|
|
26144
|
-
*
|
|
26145
|
-
*
|
|
26146
|
-
*
|
|
27116
|
+
* A dependent reading a MASKED attribute (a `NoEcho` custom resource's
|
|
27117
|
+
* value, persisted `***`, issue #2274) is promoted like any other
|
|
27118
|
+
* (go-to-k/cdkd#3662). The engine takes its no-change skip BEFORE refusing a
|
|
27119
|
+
* redacted read, so a guess whose resolved bag equals the record, mask
|
|
27120
|
+
* included, sends nothing; a fresh `NoEcho` value never takes that skip, so
|
|
27121
|
+
* one the upstream re-minted in this run reaches AWS. What is left is the
|
|
27122
|
+
* refusal's own case: a promoted dependent whose OTHER reads moved while the
|
|
27123
|
+
* masked value was not re-minted fails loudly, as an update of it with a
|
|
27124
|
+
* changed property already did, rather than keeping the stale values.
|
|
26147
27125
|
*
|
|
26148
|
-
* @param round 1-based fixpoint round; see the speculative-promotion note.
|
|
26149
27126
|
* @returns whether any synthetic PropertyChange was added (the caller's
|
|
26150
27127
|
* fixpoint signal).
|
|
26151
27128
|
*/
|
|
26152
|
-
promoteInPlaceAttributeDependents(changes, desiredTemplate, rawGetAttRefs,
|
|
27129
|
+
promoteInPlaceAttributeDependents(changes, desiredTemplate, rawGetAttRefs, freshParameters) {
|
|
26153
27130
|
const changedPropsByUpstream = /* @__PURE__ */ new Map();
|
|
26154
27131
|
const inPlaceUpdateTypeByUpstream = /* @__PURE__ */ new Map();
|
|
26155
27132
|
for (const [logicalId, change] of changes) {
|
|
@@ -26159,7 +27136,8 @@ var DiffCalculator = class DiffCalculator {
|
|
|
26159
27136
|
const props = propertyChanges.map((pc) => pc.path).filter((p) => typeof p === "string");
|
|
26160
27137
|
if (props.length > 0) changedPropsByUpstream.set(logicalId, new Set(props));
|
|
26161
27138
|
}
|
|
26162
|
-
|
|
27139
|
+
const anyFreshParameter = freshParameters !== void 0 && freshParameters.size > 0;
|
|
27140
|
+
if (changedPropsByUpstream.size === 0 && inPlaceUpdateTypeByUpstream.size === 0 && !anyFreshParameter) return false;
|
|
26163
27141
|
let added = false;
|
|
26164
27142
|
for (const [dependentId, perProp] of rawGetAttRefs) {
|
|
26165
27143
|
const resource = desiredTemplate.Resources[dependentId];
|
|
@@ -26169,13 +27147,11 @@ var DiffCalculator = class DiffCalculator {
|
|
|
26169
27147
|
if (change.changeType !== "NO_CHANGE" && change.changeType !== "UPDATE") continue;
|
|
26170
27148
|
const existingPaths = new Set((change.propertyChanges ?? []).map((pc) => pc.path));
|
|
26171
27149
|
const syntheticChanges = [];
|
|
26172
|
-
const speculationAllowed = !DiffCalculator.readsMaskedAttribute(perProp, currentResources);
|
|
26173
27150
|
for (const [propKey, getAttRefs] of perProp) {
|
|
26174
27151
|
if (existingPaths.has(propKey)) continue;
|
|
26175
27152
|
let matched = false;
|
|
26176
27153
|
for (const [upstreamId, attrs] of getAttRefs) {
|
|
26177
27154
|
if (upstreamId === dependentId) continue;
|
|
26178
|
-
if (round > 1 && !speculationAllowed) break;
|
|
26179
27155
|
const changedProps = changedPropsByUpstream.get(upstreamId);
|
|
26180
27156
|
if (changedProps && [...attrs].some((attr) => changedProps.has(attr))) {
|
|
26181
27157
|
matched = true;
|
|
@@ -26188,7 +27164,15 @@ var DiffCalculator = class DiffCalculator {
|
|
|
26188
27164
|
break;
|
|
26189
27165
|
}
|
|
26190
27166
|
const derivedPrefixes = upstreamType !== void 0 && Object.hasOwn(IN_PLACE_UPDATE_DERIVED_ATTR_PREFIXES, upstreamType) ? IN_PLACE_UPDATE_DERIVED_ATTR_PREFIXES[upstreamType] : void 0;
|
|
26191
|
-
if (
|
|
27167
|
+
if (derivedPrefixes && [...attrs].some((attr) => derivedPrefixes.some((prefix) => attr.startsWith(prefix)))) {
|
|
27168
|
+
matched = true;
|
|
27169
|
+
break;
|
|
27170
|
+
}
|
|
27171
|
+
if (upstreamType !== void 0 && (upstreamType.startsWith("Custom::") || upstreamType === "AWS::CloudFormation::CustomResource")) {
|
|
27172
|
+
matched = true;
|
|
27173
|
+
break;
|
|
27174
|
+
}
|
|
27175
|
+
if (anyFreshParameter && freshParameters.has(upstreamId) && attrs.has(REF_READ) && !Object.hasOwn(desiredTemplate.Resources, upstreamId)) {
|
|
26192
27176
|
matched = true;
|
|
26193
27177
|
break;
|
|
26194
27178
|
}
|
|
@@ -26198,7 +27182,8 @@ var DiffCalculator = class DiffCalculator {
|
|
|
26198
27182
|
path: propKey,
|
|
26199
27183
|
oldValue: change.currentProperties?.[propKey],
|
|
26200
27184
|
newValue: change.desiredProperties?.[propKey],
|
|
26201
|
-
requiresReplacement: this.replacementRules.requiresReplacement(change.resourceType, propKey, void 0, void 0)
|
|
27185
|
+
requiresReplacement: this.replacementRules.requiresReplacement(change.resourceType, propKey, void 0, void 0),
|
|
27186
|
+
inPlacePropagated: true
|
|
26202
27187
|
});
|
|
26203
27188
|
}
|
|
26204
27189
|
if (syntheticChanges.length === 0) continue;
|
|
@@ -26212,47 +27197,11 @@ var DiffCalculator = class DiffCalculator {
|
|
|
26212
27197
|
return added;
|
|
26213
27198
|
}
|
|
26214
27199
|
/**
|
|
26215
|
-
* Whether any `Fn::GetAtt` / `Fn::Sub` read of a dependent (its
|
|
26216
|
-
* {@link extractGetAttRefs} map, every property and every upstream) lands on
|
|
26217
|
-
* a PERSISTED attribute carrying the redaction mask. The attribute is found
|
|
26218
|
-
* the way the resolver finds it: the flat key, else the dot-separated path
|
|
26219
|
-
* walked through nested objects (a Cloud Control record's
|
|
26220
|
-
* `Endpoint.Address`).
|
|
26221
|
-
*
|
|
26222
|
-
* What it cannot see, and the engine still refuses on a speculative
|
|
26223
|
-
* promotion: a masked cross-stack read (`Fn::ImportValue` /
|
|
26224
|
-
* `Fn::GetStackOutput`), whose producer record is another stack's, and a
|
|
26225
|
-
* `Ref` whose state-key lookup lands on a masked property, since `Ref`
|
|
26226
|
-
* reads are not extracted.
|
|
26227
|
-
*/
|
|
26228
|
-
static readsMaskedAttribute(perProp, currentResources) {
|
|
26229
|
-
for (const getAttRefs of perProp.values()) for (const [upstreamId, attrs] of getAttRefs) {
|
|
26230
|
-
const attributes = Object.hasOwn(currentResources, upstreamId) ? currentResources[upstreamId]?.attributes : void 0;
|
|
26231
|
-
if (!attributes) continue;
|
|
26232
|
-
for (const attr of attrs) if (carriesSecretMask(DiffCalculator.persistedAttribute(attributes, attr))) return true;
|
|
26233
|
-
}
|
|
26234
|
-
return false;
|
|
26235
|
-
}
|
|
26236
|
-
/**
|
|
26237
|
-
* A persisted attribute by the resolver's lookup rule: the own flat key, else
|
|
26238
|
-
* the dot-separated path through own keys of nested objects; `undefined`
|
|
26239
|
-
* when neither exists.
|
|
26240
|
-
*/
|
|
26241
|
-
static persistedAttribute(attributes, attr) {
|
|
26242
|
-
if (Object.hasOwn(attributes, attr)) return attributes[attr];
|
|
26243
|
-
if (!attr.includes(".")) return void 0;
|
|
26244
|
-
let cursor = attributes;
|
|
26245
|
-
for (const part of attr.split(".")) {
|
|
26246
|
-
if (cursor === null || typeof cursor !== "object" || !Object.hasOwn(cursor, part)) return;
|
|
26247
|
-
cursor = cursor[part];
|
|
26248
|
-
}
|
|
26249
|
-
return cursor;
|
|
26250
|
-
}
|
|
26251
|
-
/**
|
|
26252
27200
|
* Extract `Fn::GetAtt` / `Fn::Sub`-`${X.Attr}` references from a property value
|
|
26253
27201
|
* as a map of `referencedLogicalId -> set of referenced attribute names`.
|
|
26254
|
-
*
|
|
26255
|
-
*
|
|
27202
|
+
* A plain `Ref` (and a dot-less `${X}`) is recorded under the
|
|
27203
|
+
* {@link REF_READ} name, which only the custom-resource and fresh-parameter
|
|
27204
|
+
* arms of the in-place pass read (go-to-k/cdkd#3717 / #3722). Recurses into arrays / objects so
|
|
26256
27205
|
* intrinsics nested inside `Fn::Sub`'s variable map / `Fn::Join` etc. are seen.
|
|
26257
27206
|
*/
|
|
26258
27207
|
static extractGetAttRefs(value) {
|
|
@@ -26300,7 +27249,10 @@ var DiffCalculator = class DiffCalculator {
|
|
|
26300
27249
|
const placeholder = m[2];
|
|
26301
27250
|
if (!placeholder) continue;
|
|
26302
27251
|
const dot = placeholder.indexOf(".");
|
|
26303
|
-
if (dot < 0)
|
|
27252
|
+
if (dot < 0) {
|
|
27253
|
+
if (!mapKeys?.has(placeholder)) add(placeholder, REF_READ);
|
|
27254
|
+
continue;
|
|
27255
|
+
}
|
|
26304
27256
|
const id = placeholder.slice(0, dot);
|
|
26305
27257
|
const attr = placeholder.slice(dot + 1);
|
|
26306
27258
|
if (!id || mapKeys?.has(id)) continue;
|
|
@@ -26308,7 +27260,10 @@ var DiffCalculator = class DiffCalculator {
|
|
|
26308
27260
|
}
|
|
26309
27261
|
return;
|
|
26310
27262
|
}
|
|
26311
|
-
if ("Ref" in obj && Object.keys(obj).length === 1)
|
|
27263
|
+
if ("Ref" in obj && Object.keys(obj).length === 1) {
|
|
27264
|
+
if (typeof obj["Ref"] === "string") add(obj["Ref"], REF_READ);
|
|
27265
|
+
return;
|
|
27266
|
+
}
|
|
26312
27267
|
Object.values(obj).forEach(walk);
|
|
26313
27268
|
};
|
|
26314
27269
|
walk(value);
|
|
@@ -30705,6 +31660,18 @@ function stringifyParameterForLog(paramDef, value) {
|
|
|
30705
31660
|
if (paramDef?.NoEcho === true) return "<redacted>";
|
|
30706
31661
|
return stringifyValue(value);
|
|
30707
31662
|
}
|
|
31663
|
+
/**
|
|
31664
|
+
* `displayIdent` over text THIS file already sanitized, keeping its rule that
|
|
31665
|
+
* an ALTERED value takes a boundary (go-to-k/cdkd#3617). `displayIdent` tests
|
|
31666
|
+
* alteration against its own input, which here is already trimmed and blanked
|
|
31667
|
+
* -- so `ProdStack ` or `ProdStack<NBSP>` would print bare, byte-identical to
|
|
31668
|
+
* a genuine `ProdStack` (the #3164 spoof). Compared against the ORIGINAL, an
|
|
31669
|
+
* altered value is quoted even when what is left is plain.
|
|
31670
|
+
*/
|
|
31671
|
+
function boundAltered(original, shown, maxCodePoints) {
|
|
31672
|
+
const bounded = displayIdent(shown, maxCodePoints === void 0 ? void 0 : { maxCodePoints });
|
|
31673
|
+
return shown !== original && !bounded.startsWith("\"") && bounded !== "<unrenderable>" ? `${JSON.stringify(bounded.split(" [cut: ")[0])}${bounded.includes(" [cut: ") ? bounded.slice(bounded.indexOf(" [cut: ")) : ""}` : bounded;
|
|
31674
|
+
}
|
|
30708
31675
|
var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
30709
31676
|
logger = getLogger().child("IntrinsicFunctionResolver");
|
|
30710
31677
|
resolverRegion;
|
|
@@ -31096,7 +32063,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
31096
32063
|
if (!targetRegion) return ambient;
|
|
31097
32064
|
const target = canonicalizeRegion(targetRegion);
|
|
31098
32065
|
const loggedTarget = targetLogText ?? (targetRegion === this.explicitRegion ? this.explicitRegionLogText : void 0) ?? target;
|
|
31099
|
-
if (!isClientSafeRegion(target)) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Refusing to build AWS clients for the region
|
|
32066
|
+
if (!isClientSafeRegion(target)) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Refusing to build AWS clients for the region ${boundAltered(targetRegion ?? loggedTarget, displaySafe(stripControlChars(loggedTarget)), 64)}: it is not a valid AWS region name, and a region is substituted into the AWS service hostname.`));
|
|
31100
32067
|
if (typeof ambient.withRegion !== "function") return ambient;
|
|
31101
32068
|
const cacheKey = clientCacheKey(target, ambient.credentialConfig ?? {});
|
|
31102
32069
|
const cached = this.regionScopedClients.get(cacheKey);
|
|
@@ -31501,6 +32468,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
31501
32468
|
for (const [plaintext, expression] of inheritedSecretsCarriedBy(value, inherited)) {
|
|
31502
32469
|
const own = inheritedParameterExpression(inherited, parameterName, plaintext);
|
|
31503
32470
|
recorded.set(plaintext, typeof own === "string" ? own : expression);
|
|
32471
|
+
carryFreshNoEchoMark(inherited, recorded, plaintext);
|
|
31504
32472
|
}
|
|
31505
32473
|
}
|
|
31506
32474
|
/**
|
|
@@ -31881,7 +32849,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
31881
32849
|
*/
|
|
31882
32850
|
noteAttributeSecrecy(logicalId, attributeName, value, context) {
|
|
31883
32851
|
const declared = context.noEchoAttributeResources?.get(logicalId);
|
|
31884
|
-
if ((declared === true || declared !== void 0 && declared.has(attributeName)) && context.recordedSecretValues)
|
|
32852
|
+
if ((declared === true || declared !== void 0 && declared.has(attributeName)) && context.recordedSecretValues) recordFreshNoEchoValuesIn(value, context.recordedSecretValues);
|
|
31885
32853
|
if (context.redactedAttributeReads !== void 0 && carriesSecretMask(value)) {
|
|
31886
32854
|
const maskedAttributeName = this.displayMasked(attributeName, context);
|
|
31887
32855
|
this.pushRedactedAttributeRead(context, {
|
|
@@ -32027,7 +32995,9 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
32027
32995
|
* 1. PROBE — construct under a derived context whose fallback raises
|
|
32028
32996
|
* {@link StaleAttributeMissSignal} instead of deciding. Every per-type arm
|
|
32029
32997
|
* that CAN answer (the ~40 constructed ARNs, the live-read arms) returns
|
|
32030
|
-
* here exactly as before
|
|
32998
|
+
* here exactly as before — except the heal-first arms
|
|
32999
|
+
* ({@link healBeforeConstructing}, issue #3627), which raise the signal
|
|
33000
|
+
* too because their answer may be wrong for a record lacking the value.
|
|
32031
33001
|
* 2. HEAL — only on the signal: ask the context's healer, which re-reads the
|
|
32032
33002
|
* record's attributes through its provider once per deploy. A value for
|
|
32033
33003
|
* this attribute is served from that read.
|
|
@@ -32108,6 +33078,21 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
32108
33078
|
return value;
|
|
32109
33079
|
}
|
|
32110
33080
|
/**
|
|
33081
|
+
* Route an arm that ANSWERS without the record through the #1852 heal first.
|
|
33082
|
+
*
|
|
33083
|
+
* The heal runs only when a construction raises
|
|
33084
|
+
* {@link StaleAttributeMissSignal}, which only `guardedPhysicalIdFallback`
|
|
33085
|
+
* did — so an arm that returned `undefined` (DynamoDB `StreamArn`, IAM
|
|
33086
|
+
* `RoleId`) or built a path-less IAM ARN never healed a record that lacks
|
|
33087
|
+
* the attribute, such as one `cdkd import` wrote before issue #3627's
|
|
33088
|
+
* read-backs. Under the probe phase this raises the signal; in the settled
|
|
33089
|
+
* phase (the read found nothing) or with no healer it returns, and the arm
|
|
33090
|
+
* answers as it always did.
|
|
33091
|
+
*/
|
|
33092
|
+
healBeforeConstructing(context) {
|
|
33093
|
+
if (context.staleAttributeHeal?.phase === "probe") throw new StaleAttributeMissSignal();
|
|
33094
|
+
}
|
|
33095
|
+
/**
|
|
32111
33096
|
* The per-resource-type attribute construction itself.
|
|
32112
33097
|
*
|
|
32113
33098
|
* Many CloudFormation attributes are not returned by Cloud Control API,
|
|
@@ -32123,7 +33108,9 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
32123
33108
|
const region = canonicalizeRegion(accountInfo.region);
|
|
32124
33109
|
if (resourceType === "AWS::DynamoDB::Table" || resourceType === "AWS::DynamoDB::GlobalTable") switch (attributeName) {
|
|
32125
33110
|
case "Arn": return `arn:${partition}:dynamodb:${region}:${accountId}:table/${physicalId}`;
|
|
32126
|
-
case "StreamArn":
|
|
33111
|
+
case "StreamArn":
|
|
33112
|
+
this.healBeforeConstructing(context);
|
|
33113
|
+
return;
|
|
32127
33114
|
default: return this.guardedPhysicalIdFallback(logicalId, attributeName, resourceType, physicalId, context);
|
|
32128
33115
|
}
|
|
32129
33116
|
if (resourceType === "AWS::S3::Bucket") switch (attributeName) {
|
|
@@ -32135,8 +33122,12 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
32135
33122
|
default: return this.guardedPhysicalIdFallback(logicalId, attributeName, resourceType, physicalId, context);
|
|
32136
33123
|
}
|
|
32137
33124
|
if (resourceType === "AWS::IAM::Role") switch (attributeName) {
|
|
32138
|
-
case "Arn":
|
|
32139
|
-
|
|
33125
|
+
case "Arn":
|
|
33126
|
+
this.healBeforeConstructing(context);
|
|
33127
|
+
return `arn:${partition}:iam::${accountId}:role/${physicalId}`;
|
|
33128
|
+
case "RoleId":
|
|
33129
|
+
this.healBeforeConstructing(context);
|
|
33130
|
+
return;
|
|
32140
33131
|
default: return this.guardedPhysicalIdFallback(logicalId, attributeName, resourceType, physicalId, context);
|
|
32141
33132
|
}
|
|
32142
33133
|
if (resourceType === "AWS::EC2::VPC") switch (attributeName) {
|
|
@@ -32212,15 +33203,21 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
32212
33203
|
default: return this.guardedPhysicalIdFallback(logicalId, attributeName, resourceType, physicalId, context);
|
|
32213
33204
|
}
|
|
32214
33205
|
if (resourceType === "AWS::IAM::User") switch (attributeName) {
|
|
32215
|
-
case "Arn":
|
|
33206
|
+
case "Arn":
|
|
33207
|
+
this.healBeforeConstructing(context);
|
|
33208
|
+
return `arn:${partition}:iam::${accountId}:user/${physicalId}`;
|
|
32216
33209
|
default: return this.guardedPhysicalIdFallback(logicalId, attributeName, resourceType, physicalId, context);
|
|
32217
33210
|
}
|
|
32218
33211
|
if (resourceType === "AWS::IAM::Group") switch (attributeName) {
|
|
32219
|
-
case "Arn":
|
|
33212
|
+
case "Arn":
|
|
33213
|
+
this.healBeforeConstructing(context);
|
|
33214
|
+
return `arn:${partition}:iam::${accountId}:group/${physicalId}`;
|
|
32220
33215
|
default: return this.guardedPhysicalIdFallback(logicalId, attributeName, resourceType, physicalId, context);
|
|
32221
33216
|
}
|
|
32222
33217
|
if (resourceType === "AWS::IAM::InstanceProfile") switch (attributeName) {
|
|
32223
|
-
case "Arn":
|
|
33218
|
+
case "Arn":
|
|
33219
|
+
this.healBeforeConstructing(context);
|
|
33220
|
+
return `arn:${partition}:iam::${accountId}:instance-profile/${physicalId}`;
|
|
32224
33221
|
default: return this.guardedPhysicalIdFallback(logicalId, attributeName, resourceType, physicalId, context);
|
|
32225
33222
|
}
|
|
32226
33223
|
if (resourceType === "AWS::KMS::Key") switch (attributeName) {
|
|
@@ -33339,7 +34336,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33339
34336
|
if (carriesSecretMask(value)) {
|
|
33340
34337
|
const recovered = producerOutput === void 0 || producerOutput.crossAccount === true ? void 0 : recoverMaskedOutput(producerOutput.stackName, producerOutput.region, producerOutput.outputKey);
|
|
33341
34338
|
if (recovered !== void 0) {
|
|
33342
|
-
if (context.recordedSecretValues)
|
|
34339
|
+
if (context.recordedSecretValues) recordFreshNoEchoValuesIn(recovered, context.recordedSecretValues);
|
|
33343
34340
|
return recovered;
|
|
33344
34341
|
}
|
|
33345
34342
|
if (context.redactedAttributeReads !== void 0) {
|
|
@@ -33645,7 +34642,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33645
34642
|
} catch (error) {
|
|
33646
34643
|
const message = error instanceof Error ? error.message : String(error);
|
|
33647
34644
|
const cfnNameMask = this.positionalNameMask([[stackName, this.displayMasked(stackName, context)], [region, this.displayMasked(loggedRegionText, context)]]);
|
|
33648
|
-
this.logger.warn(`Fn::GetStackOutput: CloudFormation DescribeStacks fallback failed for stack
|
|
34645
|
+
this.logger.warn(`Fn::GetStackOutput: CloudFormation DescribeStacks fallback failed for stack ${this.displayMaskedIdent(stackName, context, STACK_REF_MAX_CODE_POINTS)} (${this.displayMaskedIdent(loggedRegionText, context)}): ${displayAwsMessage(this.displayMasked(cfnNameMask ? cfnNameMask(message) : message, context))}. Grant cloudformation:DescribeStacks to resolve outputs from CloudFormation-managed stacks, or pass --no-cfn-fallback to disable the fallback.`);
|
|
33649
34646
|
return;
|
|
33650
34647
|
}
|
|
33651
34648
|
}
|
|
@@ -33775,7 +34772,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33775
34772
|
const resolvedRegion = await this.resolveValue(args["Region"], context);
|
|
33776
34773
|
if (typeof resolvedRegion !== "string" || resolvedRegion === "") throw new Error(`Fn::GetStackOutput: Region must resolve to a non-empty string, got ${typeof resolvedRegion}`);
|
|
33777
34774
|
const requestedRegion = canonicalizeRegion(resolvedRegion);
|
|
33778
|
-
if (!isClientSafeRegion(requestedRegion)) throw new Error(`Fn::GetStackOutput:
|
|
34775
|
+
if (!isClientSafeRegion(requestedRegion)) throw new Error(`Fn::GetStackOutput: ${this.displayMaskedIdent(this.logTextOfLeaf(resolvedRegion, context) !== resolvedRegion ? "***" : resolvedRegion, context, 64)} is not a valid AWS region name. The region selects both the AWS endpoint and the state-file key, so cdkd will not use it.`);
|
|
33779
34776
|
region = requestedRegion;
|
|
33780
34777
|
loggedRegionText = this.regionLogText(resolvedRegion, context);
|
|
33781
34778
|
}
|
|
@@ -33785,9 +34782,9 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33785
34782
|
if (typeof raw !== "string" || raw === "") throw new Error(`Fn::GetStackOutput: RoleArn must be a literal string in the template (no Ref / Fn::GetAtt / Fn::Sub allowed for cross-account references). Got ${raw === null ? "null" : Array.isArray(raw) ? "array" : typeof raw}${typeof raw === "object" ? ` (intrinsic shape: ${this.displayMasked(JSON.stringify(raw).slice(0, 80), context)})` : ""}.`);
|
|
33786
34783
|
roleArn = raw;
|
|
33787
34784
|
}
|
|
33788
|
-
if (!roleArn && context.stackName && context.stackName === stackName && canonicalizeRegion(region) === canonicalizeRegion(this.resolverRegion)) throw new Error(`Fn::GetStackOutput: cannot reference own stack
|
|
33789
|
-
const loggedStackName = this.
|
|
33790
|
-
const loggedOutputName = this.
|
|
34785
|
+
if (!roleArn && context.stackName && context.stackName === stackName && canonicalizeRegion(region) === canonicalizeRegion(this.resolverRegion)) throw new Error(`Fn::GetStackOutput: cannot reference own stack ${this.displayMaskedIdent(stackName, context, STACK_REF_MAX_CODE_POINTS)} in the same region ${this.displayMaskedIdent(loggedRegionText, context)}`);
|
|
34786
|
+
const loggedStackName = this.displayMaskedIdent(stackName, context, STACK_REF_MAX_CODE_POINTS);
|
|
34787
|
+
const loggedOutputName = this.displayMaskedIdent(outputName, context);
|
|
33791
34788
|
const loggedRegion = this.displayMasked(loggedRegionText, context);
|
|
33792
34789
|
const shownRoleArn = roleArn ? displayIdent(roleArn, { maxCodePoints: 613 }) : "";
|
|
33793
34790
|
this.logger.debug(`Resolving Fn::GetStackOutput: StackName=${loggedStackName}, Region=${loggedRegion}, OutputName=${loggedOutputName}${roleArn ? `, RoleArn=${shownRoleArn}` : ""}`);
|
|
@@ -33795,7 +34792,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33795
34792
|
try {
|
|
33796
34793
|
stateData = roleArn ? await this.getCrossAccountStackState(roleArn, stackName, region, context) : await this.getSameAccountStackState(stackName, region, context);
|
|
33797
34794
|
} catch (error) {
|
|
33798
|
-
this.maskStateReadError(error, [[stackName,
|
|
34795
|
+
this.maskStateReadError(error, [[stackName, this.displayMasked(stackName, context)], [region, loggedRegion]], context);
|
|
33799
34796
|
}
|
|
33800
34797
|
if (!stateData) {
|
|
33801
34798
|
if (!roleArn && this.cfnFallback) {
|
|
@@ -33803,25 +34800,25 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33803
34800
|
if (cfnOutputs) {
|
|
33804
34801
|
if (!Object.hasOwn(cfnOutputs, outputName)) {
|
|
33805
34802
|
const available = this.describeAvailableOutputs(Object.keys(cfnOutputs), context);
|
|
33806
|
-
throw new Error(`Fn::GetStackOutput: output
|
|
34803
|
+
throw new Error(`Fn::GetStackOutput: output ${loggedOutputName} not found in CloudFormation stack ${loggedStackName} (${displayIdent(loggedRegion)}). Available outputs: ${available}`);
|
|
33807
34804
|
}
|
|
33808
34805
|
const value = cfnOutputs[outputName];
|
|
33809
34806
|
this.logger.info(`Resolved Fn::GetStackOutput: StackName=${loggedStackName}, Region=${loggedRegion}, OutputName=${loggedOutputName} (from CloudFormation stack outputs; weak reference — producer is not cdkd-managed)`);
|
|
33810
34807
|
return value;
|
|
33811
34808
|
}
|
|
33812
34809
|
}
|
|
33813
|
-
throw new Error(`Fn::GetStackOutput: stack
|
|
34810
|
+
throw new Error(`Fn::GetStackOutput: stack ${loggedStackName} not found in region ${displayIdent(loggedRegion)}${roleArn ? ` (cross-account via ${shownRoleArn})` : ""}. ${!roleArn && this.cfnFallback ? "Searched cdkd state and CloudFormation stacks. Make sure the producer stack has been deployed (via cdkd or CloudFormation)." : `Make sure the producer stack has been deployed via cdkd.`}`);
|
|
33814
34811
|
}
|
|
33815
|
-
if (!hasReadableOutputs(stateData.state)) throw markNonRetryable(new MalformedProducerRecordRefusalError(`Fn::GetStackOutput: the state record of producer stack
|
|
34812
|
+
if (!hasReadableOutputs(stateData.state)) throw markNonRetryable(new MalformedProducerRecordRefusalError(`Fn::GetStackOutput: the state record of producer stack ${loggedStackName} (${displayIdent(loggedRegion)}) has no readable 'outputs' map — the record is malformed or truncated. cdkd refuses to resolve from it rather than reading it as a map: 'Object.hasOwn' answers TRUE for '0' on a string and for an index on a list, so continuing would resolve ONE CHARACTER or element of the record as this reference's value and this deploy would send it to AWS. Inspect the producer's record with 'cdkd state show' --json, repair or remove it, then re-run.`));
|
|
33816
34813
|
const outputs = stateData.state.outputs ?? {};
|
|
33817
34814
|
if (!Object.hasOwn(outputs, outputName)) {
|
|
33818
34815
|
const available = this.describeAvailableOutputs(Object.keys(outputs), context);
|
|
33819
|
-
throw new Error(`Fn::GetStackOutput: output
|
|
34816
|
+
throw new Error(`Fn::GetStackOutput: output ${loggedOutputName} not found in stack ${loggedStackName} (${displayIdent(loggedRegion)}). Available outputs: ${available}`);
|
|
33820
34817
|
}
|
|
33821
34818
|
const value = outputs[outputName];
|
|
33822
34819
|
this.logger.info(`Resolved Fn::GetStackOutput: StackName=${loggedStackName}, Region=${loggedRegion}, OutputName=${loggedOutputName}${roleArn ? `, RoleArn=${shownRoleArn}` : ""} (${carriesDynamicReference(value) ? "redacted dynamic reference" : "literal value"})`);
|
|
33823
34820
|
if (!roleArn) this.recordOutputRead(context, stackName, region, outputName);
|
|
33824
|
-
if (roleArn && !context.skipDynamicReferences && carriesDynamicReference(value)) throw markNonRetryable(new CrossAccountSecretRefusalError(`Fn::GetStackOutput: output
|
|
34821
|
+
if (roleArn && !context.skipDynamicReferences && carriesDynamicReference(value)) throw markNonRetryable(new CrossAccountSecretRefusalError(`Fn::GetStackOutput: output ${loggedOutputName} of stack ${loggedStackName} (${displayIdent(loggedRegion)}) is a redacted dynamic reference, and this is a CROSS-ACCOUNT reference (RoleArn ${shownRoleArn}). cdkd will not resolve a producer account's secret with the consumer's credentials — a same-named secret in the consumer account would answer instead. Export a non-secret value (e.g. the secret's ARN) and resolve it in the consumer stack, or reference the producer stack from within its own account.`));
|
|
33825
34822
|
return await this.reresolveCrossStackValue(value, region, context, `Fn::GetStackOutput '${this.displayLeaf(outputName, context)}' (producer ${this.displayLeaf(stackName, context)} / ${this.displayLeaf(loggedRegionText, context)})`, sourceKey, {
|
|
33826
34823
|
stackName,
|
|
33827
34824
|
region,
|
|
@@ -33858,6 +34855,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33858
34855
|
*
|
|
33859
34856
|
* A pair that DOES carry a mask contributes its raw spelling AND the spelling
|
|
33860
34857
|
* the reader will actually see. `S3StateBackend` prints names through
|
|
34858
|
+
* `displayStackName`, whose first step is
|
|
33861
34859
|
* `displaySafe(..., { asciiOnly: true })`, which REPLACES every non-printable
|
|
33862
34860
|
* character with a space and then trims, so a secret carrying one is a
|
|
33863
34861
|
* DIFFERENT string by the time it is quoted back and matching the raw form
|
|
@@ -33899,9 +34897,16 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33899
34897
|
positionalNameMask(pairs) {
|
|
33900
34898
|
const substitutions = pairs.filter(([raw, masked]) => raw !== "" && raw !== masked).flatMap(([raw, masked]) => {
|
|
33901
34899
|
const shown = displaySafe(raw, { asciiOnly: true });
|
|
33902
|
-
|
|
34900
|
+
const escaped = (text) => JSON.stringify(text).slice(1, -1);
|
|
34901
|
+
const rendered = displayStackName(raw);
|
|
34902
|
+
const escapedPair = [...shown !== "" && escaped(shown) !== shown ? [[escaped(shown), escaped(displaySafe(masked, { asciiOnly: true }))]] : [], ...rendered !== raw && rendered !== shown && rendered !== escaped(shown) ? [[rendered, displayStackName(displaySafe(masked, { asciiOnly: true }))]] : []];
|
|
34903
|
+
if (shown === raw) return [[raw, masked], ...escapedPair];
|
|
33903
34904
|
const shownMask = displaySafe(masked, { asciiOnly: true });
|
|
33904
|
-
return shown === "" || shownMask === "" ? [[raw, masked]] : [
|
|
34905
|
+
return shown === "" || shownMask === "" ? [[raw, masked]] : [
|
|
34906
|
+
[raw, masked],
|
|
34907
|
+
[shown, shownMask],
|
|
34908
|
+
...escapedPair
|
|
34909
|
+
];
|
|
33905
34910
|
}).sort(([a], [b]) => b.length - a.length);
|
|
33906
34911
|
if (substitutions.length === 0) return void 0;
|
|
33907
34912
|
return (text) => {
|
|
@@ -34115,7 +35120,10 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
34115
35120
|
if (typeof resolvedValue !== "string") throw new Error(`Fn::Base64: value must resolve to a string, got ${typeof resolvedValue}`);
|
|
34116
35121
|
const result = Buffer.from(resolvedValue).toString("base64");
|
|
34117
35122
|
const inputLogText = this.logTextOfLeaf(resolvedValue, context);
|
|
34118
|
-
if (context.recordedSecretValues && (inputLogText !== resolvedValue || this.maskNeedlesForLog(resolvedValue, context) !== resolvedValue))
|
|
35123
|
+
if (context.recordedSecretValues && (inputLogText !== resolvedValue || this.maskNeedlesForLog(resolvedValue, context) !== resolvedValue)) {
|
|
35124
|
+
recordMaskOnlyValue(context.recordedSecretValues, result);
|
|
35125
|
+
if (embedsFreshNoEchoValue(resolvedValue, context.recordedSecretValues)) recordFreshNoEchoValuesIn(result, context.recordedSecretValues);
|
|
35126
|
+
}
|
|
34119
35127
|
this.logger.debug(`Resolved Fn::Base64: ${this.displayMasked(inputLogText, context)} -> ${this.displayMasked(inputLogText !== resolvedValue ? "***" : result, context)}`);
|
|
34120
35128
|
return result;
|
|
34121
35129
|
}
|
|
@@ -34781,6 +35789,16 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
34781
35789
|
return displaySafe(this.maskThenStripThenMask(value, context));
|
|
34782
35790
|
}
|
|
34783
35791
|
/**
|
|
35792
|
+
* {@link displayMasked}, then bounded as an IDENTIFIER (go-to-k/cdkd#3617):
|
|
35793
|
+
* bare when plain, otherwise one JSON string, so a template- or state-chosen
|
|
35794
|
+
* name cannot close a quote of cdkd's own and write a clause into the
|
|
35795
|
+
* message. Masked FIRST: `displayIdent` blanks non-ASCII and cuts, either of
|
|
35796
|
+
* which would stop a recorded plaintext inside the name from matching.
|
|
35797
|
+
*/
|
|
35798
|
+
displayMaskedIdent(value, context, maxCodePoints) {
|
|
35799
|
+
return boundAltered(value, this.displayMasked(displaySafe(this.displayMasked(value, context), { asciiOnly: true }), context), maxCodePoints);
|
|
35800
|
+
}
|
|
35801
|
+
/**
|
|
34784
35802
|
* The display form of a LOG-TWIN leaf — the second render route, named for
|
|
34785
35803
|
* the same reason as {@link displayMasked} and closed by the same scanner.
|
|
34786
35804
|
*
|
|
@@ -36068,24 +37086,22 @@ function maskDeep(value, mask, depth = 0) {
|
|
|
36068
37086
|
* ## Why it has to be guarded
|
|
36069
37087
|
*
|
|
36070
37088
|
* The separator is NOT escaped, so a segment that itself contains a `|`
|
|
36071
|
-
* produces an id with the wrong arity.
|
|
36072
|
-
* back apart
|
|
36073
|
-
* `a
|
|
36074
|
-
*
|
|
36075
|
-
*
|
|
36076
|
-
*
|
|
36077
|
-
*
|
|
36078
|
-
*
|
|
36079
|
-
* `
|
|
36080
|
-
*
|
|
36081
|
-
*
|
|
36082
|
-
*
|
|
36083
|
-
*
|
|
36084
|
-
* the
|
|
36085
|
-
*
|
|
36086
|
-
* separator
|
|
36087
|
-
* the properties bag, are the two real fixes and both remain open on #1672;
|
|
36088
|
-
* this guard is what closes the data-loss path in the meantime.
|
|
37089
|
+
* produces an id with the wrong arity. A decode site that splits the stored id
|
|
37090
|
+
* back apart shifts every later segment — for `<a>|<b|c>` a bare split yields
|
|
37091
|
+
* `(a, b)`. Both halves are non-empty, so every "is this id well-formed?" guard
|
|
37092
|
+
* passes and the deploy SUCCEEDS. What breaks is everything afterwards:
|
|
37093
|
+
* `cdkd destroy` deletes the WRONG resource if one exists under the decoded
|
|
37094
|
+
* pair (or warn-and-skips, reporting success while the real resource stays
|
|
37095
|
+
* alive and billing), and `cdkd drift` reads back `undefined` forever.
|
|
37096
|
+
*
|
|
37097
|
+
* AWS itself can accept such a segment — `glue:CreateTable` with
|
|
37098
|
+
* `TableInput.Name: 'a|b'` succeeds — and CloudFormation manages the resource
|
|
37099
|
+
* fine. The limitation is cdkd's own, so the honest answer is to REFUSE at
|
|
37100
|
+
* deploy time with a message that says so, rather than to record an id that
|
|
37101
|
+
* silently names something else. `AWS::Glue::Table`'s decode sites now anchor
|
|
37102
|
+
* on the recorded `DatabaseName` instead of splitting, but its `Ref`
|
|
37103
|
+
* extraction still takes the last segment, so the refusal stays for it too.
|
|
37104
|
+
* Escaping the separator is the general fix and remains open on #1672.
|
|
36089
37105
|
*
|
|
36090
37106
|
* ## Two entry points, mirroring `config-shape.ts`
|
|
36091
37107
|
*
|
|
@@ -36431,318 +37447,6 @@ function ccProtectionRegistryTypes() {
|
|
|
36431
37447
|
return Object.keys(CC_PROTECTION_PROPERTIES);
|
|
36432
37448
|
}
|
|
36433
37449
|
|
|
36434
|
-
//#endregion
|
|
36435
|
-
//#region src/provisioning/unsupported-types.generated.ts
|
|
36436
|
-
/**
|
|
36437
|
-
* AUTO-GENERATED by scripts/gen-unsupported-types.ts — DO NOT EDIT BY HAND.
|
|
36438
|
-
* Source: docs/_generated/provider-coverage.json (tier3), minus
|
|
36439
|
-
* registry-routed special cases (see REGISTRY_ROUTED_EXCLUSIONS in the
|
|
36440
|
-
* generator).
|
|
36441
|
-
* Regenerate: `vp run gen:unsupported-types`.
|
|
36442
|
-
*
|
|
36443
|
-
* AWS CloudFormation resource types AWS reports as
|
|
36444
|
-
* `ProvisioningType: NON_PROVISIONABLE` (Cloud Control API cannot
|
|
36445
|
-
* create/update/delete them) and for which cdkd has no SDK provider. cdkd
|
|
36446
|
-
* pre-flight rejects these fast with an actionable message instead of letting
|
|
36447
|
-
* the optimistic Cloud Control fallthrough fail mid-deploy.
|
|
36448
|
-
*/
|
|
36449
|
-
const NON_PROVISIONABLE_TYPES = /* @__PURE__ */ new Set([
|
|
36450
|
-
"Alexa::ASK::Skill",
|
|
36451
|
-
"AWS::AmazonMQ::ConfigurationAssociation",
|
|
36452
|
-
"AWS::Amplify::Jobs",
|
|
36453
|
-
"AWS::AmplifyUIBuilder::CodegenJob",
|
|
36454
|
-
"AWS::AppMesh::GatewayRoute",
|
|
36455
|
-
"AWS::AppMesh::Mesh",
|
|
36456
|
-
"AWS::AppMesh::Route",
|
|
36457
|
-
"AWS::AppMesh::VirtualGateway",
|
|
36458
|
-
"AWS::AppMesh::VirtualNode",
|
|
36459
|
-
"AWS::AppMesh::VirtualRouter",
|
|
36460
|
-
"AWS::AppMesh::VirtualService",
|
|
36461
|
-
"AWS::AppStream::Fleet",
|
|
36462
|
-
"AWS::AppStream::StackFleetAssociation",
|
|
36463
|
-
"AWS::AppSync::ApiCache",
|
|
36464
|
-
"AWS::Artifact::Report",
|
|
36465
|
-
"AWS::Athena::Session",
|
|
36466
|
-
"AWS::AutoScalingPlans::ScalingPlan",
|
|
36467
|
-
"AWS::BackupSearch::SearchJob",
|
|
36468
|
-
"AWS::BackupSearch::SearchResultExportJob",
|
|
36469
|
-
"AWS::BCMDataExports::Table",
|
|
36470
|
-
"AWS::Bedrock::AsyncInvoke",
|
|
36471
|
-
"AWS::Bedrock::DefaultPromptRouter",
|
|
36472
|
-
"AWS::Bedrock::FlowExecution",
|
|
36473
|
-
"AWS::Bedrock::FoundationModel",
|
|
36474
|
-
"AWS::Bedrock::ImportedModel",
|
|
36475
|
-
"AWS::Bedrock::ModelImportJob",
|
|
36476
|
-
"AWS::Bedrock::ModelInvocationJob",
|
|
36477
|
-
"AWS::BedrockAgentCore::ConfigurationBundleVersion",
|
|
36478
|
-
"AWS::BedrockAgentCore::HarnessVersion",
|
|
36479
|
-
"AWS::BedrockAgentCore::PolicyGeneration",
|
|
36480
|
-
"AWS::BedrockAgentCore::TokenVault",
|
|
36481
|
-
"AWS::Braket::Job",
|
|
36482
|
-
"AWS::Cassandra::Stream",
|
|
36483
|
-
"AWS::Cloud9::EnvironmentEC2",
|
|
36484
|
-
"AWS::CloudFormation::Macro",
|
|
36485
|
-
"AWS::CloudFormation::ResourceScan",
|
|
36486
|
-
"AWS::CloudFormation::WaitCondition",
|
|
36487
|
-
"AWS::CloudFront::StreamingDistribution",
|
|
36488
|
-
"AWS::CodeArtifact::Package",
|
|
36489
|
-
"AWS::CodeBuild::Build",
|
|
36490
|
-
"AWS::CodeBuild::BuildBatch",
|
|
36491
|
-
"AWS::CodeBuild::Sandbox",
|
|
36492
|
-
"AWS::CodeStar::GitHubRepository",
|
|
36493
|
-
"AWS::CognitoSync::Dataset",
|
|
36494
|
-
"AWS::Comprehend::DocumentClassificationJob",
|
|
36495
|
-
"AWS::Comprehend::DominantLanguageDetectionJob",
|
|
36496
|
-
"AWS::Comprehend::EntitiesDetectionJob",
|
|
36497
|
-
"AWS::Comprehend::FlywheelDataset",
|
|
36498
|
-
"AWS::Comprehend::SentimentDetectionJob",
|
|
36499
|
-
"AWS::Comprehend::TargetedSentimentDetectionJob",
|
|
36500
|
-
"AWS::Config::ConfigurationRecorder",
|
|
36501
|
-
"AWS::Config::DeliveryChannel",
|
|
36502
|
-
"AWS::Config::OrganizationConfigRule",
|
|
36503
|
-
"AWS::ControlCatalog::CommonControl",
|
|
36504
|
-
"AWS::ControlCatalog::Control",
|
|
36505
|
-
"AWS::ControlCatalog::Objective",
|
|
36506
|
-
"AWS::DataExchange::Assets",
|
|
36507
|
-
"AWS::DataExchange::EntitledDataSets",
|
|
36508
|
-
"AWS::DataExchange::Job",
|
|
36509
|
-
"AWS::DataSync::TaskExecution",
|
|
36510
|
-
"AWS::DAX::Cluster",
|
|
36511
|
-
"AWS::DAX::SubnetGroup",
|
|
36512
|
-
"AWS::Deadline::Job",
|
|
36513
|
-
"AWS::DirectoryService::MicrosoftAD",
|
|
36514
|
-
"AWS::DMS::ReplicationInstance",
|
|
36515
|
-
"AWS::DRS::RecoveryInstance",
|
|
36516
|
-
"AWS::DynamoDB::Export",
|
|
36517
|
-
"AWS::DynamoDB::Stream",
|
|
36518
|
-
"AWS::EC2::ClientVpnAuthorizationRule",
|
|
36519
|
-
"AWS::EC2::ClientVpnEndpoint",
|
|
36520
|
-
"AWS::EC2::ClientVpnRoute",
|
|
36521
|
-
"AWS::EC2::ClientVpnTargetNetworkAssociation",
|
|
36522
|
-
"AWS::EC2::ExportInstanceTask",
|
|
36523
|
-
"AWS::EC2::NetworkInterfacePermission",
|
|
36524
|
-
"AWS::EC2::ReplaceRootVolumeTask",
|
|
36525
|
-
"AWS::EC2::VpnConnectionDeviceType",
|
|
36526
|
-
"AWS::EC2::VPNGatewayRoutePropagation",
|
|
36527
|
-
"AWS::ECRPublic::Registry",
|
|
36528
|
-
"AWS::ECS::ContainerInstance",
|
|
36529
|
-
"AWS::ECS::Task",
|
|
36530
|
-
"AWS::ElastiCache::ReservedCacheNode",
|
|
36531
|
-
"AWS::ElastiCache::SecurityGroup",
|
|
36532
|
-
"AWS::ElastiCache::SecurityGroupIngress",
|
|
36533
|
-
"AWS::ElasticLoadBalancingV2::ListenerCertificate",
|
|
36534
|
-
"AWS::Elasticsearch::Domain",
|
|
36535
|
-
"AWS::EMR::NotebookExecution",
|
|
36536
|
-
"AWS::EMRContainers::JobRun",
|
|
36537
|
-
"AWS::EMRServerless::JobRun",
|
|
36538
|
-
"AWS::Events::Replay",
|
|
36539
|
-
"AWS::FIS::Experiment",
|
|
36540
|
-
"AWS::FIS::SafetyLever",
|
|
36541
|
-
"AWS::FSx::Snapshot",
|
|
36542
|
-
"AWS::FSx::StorageVirtualMachine",
|
|
36543
|
-
"AWS::Glue::DevEndpoint",
|
|
36544
|
-
"AWS::Glue::Partition",
|
|
36545
|
-
"AWS::Glue::TableVersion",
|
|
36546
|
-
"AWS::Greengrass::ConnectorDefinition",
|
|
36547
|
-
"AWS::Greengrass::ConnectorDefinitionVersion",
|
|
36548
|
-
"AWS::Greengrass::CoreDefinition",
|
|
36549
|
-
"AWS::Greengrass::CoreDefinitionVersion",
|
|
36550
|
-
"AWS::Greengrass::DeviceDefinition",
|
|
36551
|
-
"AWS::Greengrass::DeviceDefinitionVersion",
|
|
36552
|
-
"AWS::Greengrass::FunctionDefinition",
|
|
36553
|
-
"AWS::Greengrass::FunctionDefinitionVersion",
|
|
36554
|
-
"AWS::Greengrass::Group",
|
|
36555
|
-
"AWS::Greengrass::GroupVersion",
|
|
36556
|
-
"AWS::Greengrass::LoggerDefinition",
|
|
36557
|
-
"AWS::Greengrass::LoggerDefinitionVersion",
|
|
36558
|
-
"AWS::Greengrass::ResourceDefinition",
|
|
36559
|
-
"AWS::Greengrass::ResourceDefinitionVersion",
|
|
36560
|
-
"AWS::Greengrass::SubscriptionDefinition",
|
|
36561
|
-
"AWS::Greengrass::SubscriptionDefinitionVersion",
|
|
36562
|
-
"AWS::GreengrassV2::Component",
|
|
36563
|
-
"AWS::GreengrassV2::CoreDevice",
|
|
36564
|
-
"AWS::IdentityStore::AllGroupMemberships",
|
|
36565
|
-
"AWS::ImageBuilder::AllImageBuildVersions",
|
|
36566
|
-
"AWS::ImageBuilder::AllWorkflowBuildVersions",
|
|
36567
|
-
"AWS::ImageBuilder::LifecycleExecution",
|
|
36568
|
-
"AWS::ImageBuilder::WorkflowExecution",
|
|
36569
|
-
"AWS::ImageBuilder::WorkflowStepExecution",
|
|
36570
|
-
"AWS::InternetMonitor::InternetEvent",
|
|
36571
|
-
"AWS::IoT::Index",
|
|
36572
|
-
"AWS::IoT::PolicyPrincipalAttachment",
|
|
36573
|
-
"AWS::IoT::ThingPrincipalAttachment",
|
|
36574
|
-
"AWS::IoTDeviceAdvisor::SuiteRun",
|
|
36575
|
-
"AWS::IoTThingsGraph::FlowTemplate",
|
|
36576
|
-
"AWS::IoTTwinMaker::MetadataTransferJob",
|
|
36577
|
-
"AWS::IVS::Composition",
|
|
36578
|
-
"AWS::KafkaConnect::ConnectorOperation",
|
|
36579
|
-
"AWS::KinesisAnalytics::Application",
|
|
36580
|
-
"AWS::KinesisAnalytics::ApplicationOutput",
|
|
36581
|
-
"AWS::KinesisAnalytics::ApplicationReferenceDataSource",
|
|
36582
|
-
"AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption",
|
|
36583
|
-
"AWS::KinesisAnalyticsV2::ApplicationOutput",
|
|
36584
|
-
"AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource",
|
|
36585
|
-
"AWS::LakeFormation::DataLakeSettings",
|
|
36586
|
-
"AWS::LakeFormation::Permissions",
|
|
36587
|
-
"AWS::LakeFormation::Resource",
|
|
36588
|
-
"AWS::Lambda::DurableExecution",
|
|
36589
|
-
"AWS::Lightsail::ExportSnapshotRecord",
|
|
36590
|
-
"AWS::Location::Job",
|
|
36591
|
-
"AWS::Macie2::ClassificationJob",
|
|
36592
|
-
"AWS::ManagedBlockchain::Member",
|
|
36593
|
-
"AWS::ManagedBlockchain::Node",
|
|
36594
|
-
"AWS::MediaConnect::Offering",
|
|
36595
|
-
"AWS::MediaConnect::Reservation",
|
|
36596
|
-
"AWS::MediaConvert::JobTemplate",
|
|
36597
|
-
"AWS::MediaConvert::Queue",
|
|
36598
|
-
"AWS::MediaLive::Channel",
|
|
36599
|
-
"AWS::MediaLive::Input",
|
|
36600
|
-
"AWS::MediaLive::InputSecurityGroup",
|
|
36601
|
-
"AWS::MediaLive::Offering",
|
|
36602
|
-
"AWS::MediaPackage::HarvestJob",
|
|
36603
|
-
"AWS::MediaPackageV2::HarvestJob",
|
|
36604
|
-
"AWS::MediaStore::Container",
|
|
36605
|
-
"AWS::MedicalImaging::ImageSet",
|
|
36606
|
-
"AWS::MemoryDB::MultiRegionParameterGroup",
|
|
36607
|
-
"AWS::MemoryDB::ReservedNode",
|
|
36608
|
-
"AWS::NeptuneGraph::ExportTask",
|
|
36609
|
-
"AWS::NovaAct::WorkflowRun",
|
|
36610
|
-
"AWS::Omics::ReadSet",
|
|
36611
|
-
"AWS::Omics::Reference",
|
|
36612
|
-
"AWS::Omics::Run",
|
|
36613
|
-
"AWS::Omics::Task",
|
|
36614
|
-
"AWS::OpsWorks::App",
|
|
36615
|
-
"AWS::OpsWorks::ElasticLoadBalancerAttachment",
|
|
36616
|
-
"AWS::OpsWorks::Instance",
|
|
36617
|
-
"AWS::OpsWorks::Layer",
|
|
36618
|
-
"AWS::OpsWorks::Stack",
|
|
36619
|
-
"AWS::OpsWorks::UserProfile",
|
|
36620
|
-
"AWS::OpsWorks::Volume",
|
|
36621
|
-
"AWS::Organizations::Root",
|
|
36622
|
-
"AWS::OSIS::PipelineBlueprint",
|
|
36623
|
-
"AWS::PartnerCentral::ConnectionPreferences",
|
|
36624
|
-
"AWS::PartnerCentral::Partner",
|
|
36625
|
-
"AWS::Personalize::BatchInferenceJob",
|
|
36626
|
-
"AWS::Personalize::BatchSegmentJob",
|
|
36627
|
-
"AWS::Personalize::DataDeletionJob",
|
|
36628
|
-
"AWS::Personalize::DatasetExportJob",
|
|
36629
|
-
"AWS::Personalize::Recipe",
|
|
36630
|
-
"AWS::Pinpoint::ADMChannel",
|
|
36631
|
-
"AWS::Pinpoint::APNSChannel",
|
|
36632
|
-
"AWS::Pinpoint::APNSSandboxChannel",
|
|
36633
|
-
"AWS::Pinpoint::APNSVoipChannel",
|
|
36634
|
-
"AWS::Pinpoint::APNSVoipSandboxChannel",
|
|
36635
|
-
"AWS::Pinpoint::App",
|
|
36636
|
-
"AWS::Pinpoint::ApplicationSettings",
|
|
36637
|
-
"AWS::Pinpoint::BaiduChannel",
|
|
36638
|
-
"AWS::Pinpoint::Campaign",
|
|
36639
|
-
"AWS::Pinpoint::EmailChannel",
|
|
36640
|
-
"AWS::Pinpoint::EmailTemplate",
|
|
36641
|
-
"AWS::Pinpoint::EventStream",
|
|
36642
|
-
"AWS::Pinpoint::GCMChannel",
|
|
36643
|
-
"AWS::Pinpoint::PushTemplate",
|
|
36644
|
-
"AWS::Pinpoint::Segment",
|
|
36645
|
-
"AWS::Pinpoint::SMSChannel",
|
|
36646
|
-
"AWS::Pinpoint::SmsTemplate",
|
|
36647
|
-
"AWS::Pinpoint::VoiceChannel",
|
|
36648
|
-
"AWS::PinpointEmail::ConfigurationSet",
|
|
36649
|
-
"AWS::PinpointEmail::ConfigurationSetEventDestination",
|
|
36650
|
-
"AWS::PinpointEmail::DedicatedIpPool",
|
|
36651
|
-
"AWS::PinpointEmail::Identity",
|
|
36652
|
-
"AWS::QLDB::Ledger",
|
|
36653
|
-
"AWS::QuickSight::AssetBundleExportJob",
|
|
36654
|
-
"AWS::QuickSight::AssetBundleImportJob",
|
|
36655
|
-
"AWS::RDS::DBSecurityGroup",
|
|
36656
|
-
"AWS::RDS::DBSecurityGroupIngress",
|
|
36657
|
-
"AWS::RDS::ReservedDBInstance",
|
|
36658
|
-
"AWS::Redshift::ClusterSecurityGroup",
|
|
36659
|
-
"AWS::Redshift::ClusterSecurityGroupIngress",
|
|
36660
|
-
"AWS::Redshift::DataShare",
|
|
36661
|
-
"AWS::RedshiftServerless::RecoveryPoint",
|
|
36662
|
-
"AWS::ResilienceHub::RecommendationTemplate",
|
|
36663
|
-
"AWS::Route53::RecordSetGroup",
|
|
36664
|
-
"AWS::Route53Resolver::FirewallConfig",
|
|
36665
|
-
"AWS::SageMaker::AutoMLJob",
|
|
36666
|
-
"AWS::SageMaker::CodeRepository",
|
|
36667
|
-
"AWS::SageMaker::ExperimentTrialComponent",
|
|
36668
|
-
"AWS::SageMaker::HubContentVersion",
|
|
36669
|
-
"AWS::SageMaker::HyperParameterTuningJob",
|
|
36670
|
-
"AWS::SageMaker::ModelCardExportJob",
|
|
36671
|
-
"AWS::SageMaker::MonitoringScheduleAlert",
|
|
36672
|
-
"AWS::SageMaker::NotebookInstance",
|
|
36673
|
-
"AWS::SageMaker::NotebookInstanceLifecycleConfig",
|
|
36674
|
-
"AWS::SageMaker::OptimizationJob",
|
|
36675
|
-
"AWS::SageMaker::PipelineExecution",
|
|
36676
|
-
"AWS::SageMaker::TrainingJob",
|
|
36677
|
-
"AWS::SageMaker::TransformJob",
|
|
36678
|
-
"AWS::SageMaker::Workteam",
|
|
36679
|
-
"AWS::SavingsPlans::SavingsPlan",
|
|
36680
|
-
"AWS::SecurityAgent::PentestTask",
|
|
36681
|
-
"AWS::ServiceDiscovery::Instance",
|
|
36682
|
-
"AWS::ServiceQuotas::Quota",
|
|
36683
|
-
"AWS::Signer::SigningJob",
|
|
36684
|
-
"AWS::SSM::AutomationExecution",
|
|
36685
|
-
"AWS::SSM::ManagedInstance",
|
|
36686
|
-
"AWS::SSM::Session",
|
|
36687
|
-
"AWS::SSO::ApplicationProvider",
|
|
36688
|
-
"AWS::States::Execution",
|
|
36689
|
-
"AWS::StepFunctions::MapRun",
|
|
36690
|
-
"AWS::ThinClient::SoftwareSet",
|
|
36691
|
-
"AWS::Transcribe::CallAnalyticsJob",
|
|
36692
|
-
"AWS::Transcribe::MedicalScribeJob",
|
|
36693
|
-
"AWS::Transcribe::MedicalTranscriptionJob",
|
|
36694
|
-
"AWS::Transcribe::TranscriptionJob",
|
|
36695
|
-
"AWS::UserNotifications::ManagedNotificationConfiguration",
|
|
36696
|
-
"AWS::UserNotifications::NotificationEvent",
|
|
36697
|
-
"AWS::WAF::ByteMatchSet",
|
|
36698
|
-
"AWS::WAF::IPSet",
|
|
36699
|
-
"AWS::WAF::Rule",
|
|
36700
|
-
"AWS::WAF::SizeConstraintSet",
|
|
36701
|
-
"AWS::WAF::SqlInjectionMatchSet",
|
|
36702
|
-
"AWS::WAF::WebACL",
|
|
36703
|
-
"AWS::WAF::XssMatchSet",
|
|
36704
|
-
"AWS::WAFRegional::ByteMatchSet",
|
|
36705
|
-
"AWS::WAFRegional::GeoMatchSet",
|
|
36706
|
-
"AWS::WAFRegional::IPSet",
|
|
36707
|
-
"AWS::WAFRegional::RateBasedRule",
|
|
36708
|
-
"AWS::WAFRegional::RegexPatternSet",
|
|
36709
|
-
"AWS::WAFRegional::Rule",
|
|
36710
|
-
"AWS::WAFRegional::SizeConstraintSet",
|
|
36711
|
-
"AWS::WAFRegional::SqlInjectionMatchSet",
|
|
36712
|
-
"AWS::WAFRegional::WebACL",
|
|
36713
|
-
"AWS::WAFRegional::WebACLAssociation",
|
|
36714
|
-
"AWS::WAFRegional::XssMatchSet",
|
|
36715
|
-
"AWS::Wisdom::Session",
|
|
36716
|
-
"AWS::WorkSpaces::WorkSpaceApplication"
|
|
36717
|
-
]);
|
|
36718
|
-
|
|
36719
|
-
//#endregion
|
|
36720
|
-
//#region src/provisioning/unsupported-types.ts
|
|
36721
|
-
/**
|
|
36722
|
-
* Helpers for cdkd's genuinely-unsupported resource types.
|
|
36723
|
-
*
|
|
36724
|
-
* The data ({@link NON_PROVISIONABLE_TYPES}) is generated from the
|
|
36725
|
-
* provider-coverage audit (`vp run gen:unsupported-types`); this module adds
|
|
36726
|
-
* the runtime predicates + the actionable issue link used by the pre-flight
|
|
36727
|
-
* check (see {@link ../provisioning/provider-registry.ProviderRegistry.validateResourceTypes}).
|
|
36728
|
-
*/
|
|
36729
|
-
/**
|
|
36730
|
-
* True if AWS reports the type as `ProvisioningType: NON_PROVISIONABLE`
|
|
36731
|
-
* (Cloud Control API cannot create/update/delete it) and cdkd has no SDK
|
|
36732
|
-
* provider for it.
|
|
36733
|
-
*/
|
|
36734
|
-
function isNonProvisionable(resourceType) {
|
|
36735
|
-
return NON_PROVISIONABLE_TYPES.has(resourceType);
|
|
36736
|
-
}
|
|
36737
|
-
/**
|
|
36738
|
-
* A 1-click pre-filled GitHub issue link requesting cdkd support for a
|
|
36739
|
-
* resource type. Surfaced in the pre-flight error so a user hitting an
|
|
36740
|
-
* unsupported type lands directly in the "request support" flow.
|
|
36741
|
-
*/
|
|
36742
|
-
function unsupportedTypeIssueUrl(resourceType) {
|
|
36743
|
-
return `https://github.com/go-to-k/cdkd/issues/new?title=${encodeURIComponent(`Support resource type ${resourceType}`)}&labels=resource-support`;
|
|
36744
|
-
}
|
|
36745
|
-
|
|
36746
37450
|
//#endregion
|
|
36747
37451
|
//#region src/provisioning/slow-cc-operation-timeouts.ts
|
|
36748
37452
|
const MINUTE_MS = 6e4;
|
|
@@ -37486,7 +38190,7 @@ var CloudControlProvider = class {
|
|
|
37486
38190
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
37487
38191
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
37488
38192
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
37489
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
38193
|
+
const { ASGProvider } = await import("./asg-provider-Dbqbr89e.js").then((n) => n.n);
|
|
37490
38194
|
const asgProvider = new ASGProvider();
|
|
37491
38195
|
return withIndeterminateGuard(await asgProvider.delete(logicalId, physicalId, resourceType, _properties, context), indeterminateGuard);
|
|
37492
38196
|
}
|
|
@@ -38032,7 +38736,11 @@ var CloudControlProvider = class {
|
|
|
38032
38736
|
const enriched = { ...attributes };
|
|
38033
38737
|
switch (resourceType) {
|
|
38034
38738
|
case "AWS::S3::Bucket":
|
|
38035
|
-
if (!enriched["Arn"])
|
|
38739
|
+
if (!enriched["Arn"]) try {
|
|
38740
|
+
enriched["Arn"] = s3BucketArn(physicalId, await this.cloudControlClient.config.region());
|
|
38741
|
+
} catch (error) {
|
|
38742
|
+
this.logger.debug(`Failed to construct S3 Bucket Arn for ${physicalId}: ${describeAwsFailure(error).detail}`);
|
|
38743
|
+
}
|
|
38036
38744
|
break;
|
|
38037
38745
|
case "AWS::RDS::DBCluster":
|
|
38038
38746
|
try {
|
|
@@ -39940,7 +40648,7 @@ var CustomResourceProvider = class CustomResourceProvider {
|
|
|
39940
40648
|
reuseClientCredentials: true,
|
|
39941
40649
|
tolerateNonStandardClient: true,
|
|
39942
40650
|
onRebuild: ({ bucketRegion, currentRegion }) => {
|
|
39943
|
-
this.logger.debug(`Custom resource response bucket
|
|
40651
|
+
this.logger.debug(`Custom resource response bucket ${displayIdent(bucket)} is in ${displayIdent(bucketRegion)} (client was ${displayIdent(currentRegion)}); building a region-corrected S3 client for response operations.`);
|
|
39944
40652
|
}
|
|
39945
40653
|
});
|
|
39946
40654
|
if (generation !== this.responseClientGeneration) {
|
|
@@ -42611,7 +43319,7 @@ var ProviderRegistry = class {
|
|
|
42611
43319
|
}
|
|
42612
43320
|
const specificProvider = this.providers.get(resourceType);
|
|
42613
43321
|
if (specificProvider) {
|
|
42614
|
-
const actionableDrops = findActionableSilentDrops(resourceType, properties, this.allowedUnsupportedProperties);
|
|
43322
|
+
const actionableDrops = findActionableSilentDrops(resourceType, properties, this.allowedUnsupportedProperties, input.previousProperties);
|
|
42615
43323
|
if (actionableDrops.length === 0) {
|
|
42616
43324
|
this.logger.debug(`Using specific SDK provider for ${resourceType}`);
|
|
42617
43325
|
if (returningToSdk) {
|
|
@@ -42851,15 +43559,18 @@ var ProviderRegistry = class {
|
|
|
42851
43559
|
* surface every time.
|
|
42852
43560
|
*/
|
|
42853
43561
|
reportSilentDropDecisions(resources) {
|
|
42854
|
-
for (const { logicalId, resourceType, properties, provisionedBy } of resources) {
|
|
43562
|
+
for (const { logicalId, resourceType, properties, provisionedBy, previousProperties } of resources) {
|
|
42855
43563
|
const drops = findSilentDropProperties(resourceType, properties);
|
|
43564
|
+
const unrecognizedRoute = findRoutableUnrecognizedProperties(resourceType, properties, this.allowedUnsupportedProperties, previousProperties);
|
|
42856
43565
|
const stickyCc = provisionedBy === "cc-api" && !STICKY_CC_MIGRATION_EXEMPT.has(resourceType);
|
|
42857
|
-
const overridden = stickyCc ? [] : findAcceptedSilentDrops(resourceType, properties, this.allowedUnsupportedProperties);
|
|
42858
|
-
const autoRouted = drops.map(({ property }) => property).filter((property) => !this.allowedUnsupportedProperties.has(`${resourceType}:${property}`));
|
|
43566
|
+
const overridden = stickyCc ? [] : findAcceptedSilentDrops(resourceType, properties, this.allowedUnsupportedProperties, previousProperties);
|
|
43567
|
+
const autoRouted = [...drops.map(({ property }) => property).filter((property) => !this.allowedUnsupportedProperties.has(`${resourceType}:${property}`)), ...unrecognizedRoute].sort((a, b) => a.localeCompare(b));
|
|
42859
43568
|
if (autoRouted.length > 0) {
|
|
42860
43569
|
const unroutable = this.ccRouteUnavailableReason(resourceType);
|
|
42861
43570
|
if (unroutable !== void 0) throw new Error(`${logicalId}: ${this.buildUnroutableSilentDropMessage(resourceType, drops.filter((d) => autoRouted.includes(d.property)), unroutable)}`);
|
|
42862
|
-
const
|
|
43571
|
+
const propList = autoRouted.join(", ");
|
|
43572
|
+
const overrideHint = autoRouted.map((p) => `${resourceType}:${p}`).join(",");
|
|
43573
|
+
const message = `${logicalId} (${resourceType}): routing via Cloud Control API (cdkd's SDK Provider does not yet wire ${propList} — CC API will forward the full property map.${unrecognizedRoute.length === 0 ? "" : ` ${unrecognizedRoute.join(", ")} ${unrecognizedRoute.length === 1 ? "is" : "are"} not in cdkd's CFn schema snapshot: Cloud Control applies a property AWS published since, and rejects a misspelled one as CloudFormation does.`} Override via --prefer-sdk-route ${overrideHint}.)`;
|
|
42863
43574
|
if (provisionedBy === "cc-api") this.logger.debug(message);
|
|
42864
43575
|
else this.logger.info(message);
|
|
42865
43576
|
}
|
|
@@ -42886,67 +43597,70 @@ var ProviderRegistry = class {
|
|
|
42886
43597
|
}
|
|
42887
43598
|
this.reportUnrecognizedProperties(logicalId, resourceType, properties, {
|
|
42888
43599
|
provisionedBy,
|
|
42889
|
-
autoRouted: autoRouted.length > 0
|
|
43600
|
+
autoRouted: autoRouted.length > 0,
|
|
43601
|
+
previousProperties
|
|
42890
43602
|
});
|
|
42891
43603
|
}
|
|
42892
43604
|
}
|
|
42893
43605
|
/**
|
|
42894
43606
|
* Warn about top-level template properties this type's committed CFn schema
|
|
42895
43607
|
* snapshot does not know about, on resources that resolve to the SDK route
|
|
42896
|
-
* (
|
|
42897
|
-
*
|
|
42898
|
-
*
|
|
42899
|
-
*
|
|
42900
|
-
*
|
|
42901
|
-
*
|
|
42902
|
-
*
|
|
42903
|
-
* with
|
|
42904
|
-
*
|
|
42905
|
-
*
|
|
42906
|
-
*
|
|
42907
|
-
*
|
|
42908
|
-
*
|
|
42909
|
-
*
|
|
42910
|
-
*
|
|
42911
|
-
*
|
|
42912
|
-
*
|
|
42913
|
-
*
|
|
42914
|
-
*
|
|
42915
|
-
*
|
|
42916
|
-
*
|
|
42917
|
-
*
|
|
42918
|
-
*
|
|
42919
|
-
*
|
|
42920
|
-
* resource
|
|
42921
|
-
*
|
|
42922
|
-
* **
|
|
42923
|
-
* RAW properties (`deploy-engine.ts` calls
|
|
42924
|
-
* pre-flight) while `getProviderFor` runs on
|
|
42925
|
-
*
|
|
42926
|
-
*
|
|
42927
|
-
*
|
|
42928
|
-
*
|
|
42929
|
-
*
|
|
42930
|
-
*
|
|
42931
|
-
*
|
|
42932
|
-
*
|
|
42933
|
-
* Suppressed per `<Type>:<Prop>` by `--allow-unsupported-properties`, whose
|
|
42934
|
-
* meaning ("accept the silent drop, stay on the SDK path") is exactly this
|
|
42935
|
-
* case; deliberately no new flag. Warn rather than error because the drop
|
|
42936
|
-
* may be intended, and deliberately NOT an auto-route: flipping to
|
|
42937
|
-
* Cloud Control on an UNRECOGNIZED property would let a typo trigger the
|
|
42938
|
-
* currently one-way `cc-api` state flip (issue
|
|
42939
|
-
* [#2719](https://github.com/go-to-k/cdkd/issues/2719)), and CC would reject
|
|
42940
|
-
* the unknown key anyway.
|
|
43608
|
+
* (issues [#2718](https://github.com/go-to-k/cdkd/issues/2718),
|
|
43609
|
+
* [#3713](https://github.com/go-to-k/cdkd/issues/3713)).
|
|
43610
|
+
*
|
|
43611
|
+
* Such a key normally ROUTES the resource through Cloud Control
|
|
43612
|
+
* (`findRoutableUnrecognizedProperties`), and then no warn is due: Cloud
|
|
43613
|
+
* Control applies it or rejects it as CloudFormation would. What stays on the
|
|
43614
|
+
* SDK route — and is dropped there with the deploy reporting success — falls
|
|
43615
|
+
* into three buckets, each named with its own reason, because a line naming
|
|
43616
|
+
* the wrong one misdirects the reader into the wrong fix:
|
|
43617
|
+
*
|
|
43618
|
+
* - READ-ONLY: an attribute, which no engine sets. CloudFormation ignores it
|
|
43619
|
+
* too, which is why it does not route.
|
|
43620
|
+
* - UNROUTABLE TYPE: Cloud Control cannot take the type over
|
|
43621
|
+
* (`disableCcApiFallback` / `NON_PROVISIONABLE`), so the value has no route.
|
|
43622
|
+
* - UNCHANGED: the state record already holds the key with this value (or
|
|
43623
|
+
* a value that cannot be compared before resolution), so the resource
|
|
43624
|
+
* stays on the SDK route, which does not send it. Changing it routes the
|
|
43625
|
+
* resource. "Never reached AWS" would overclaim: a record `cdkd import`
|
|
43626
|
+
* wrote carries the template's bag, whose value the live resource may hold.
|
|
43627
|
+
* - UNROUTABLE TYPE also covers a `'cc-broken'` sticky-CC exemption, whose
|
|
43628
|
+
* Cloud Control handler cannot manage the type at all.
|
|
43629
|
+
*
|
|
43630
|
+
* Fires only on the SDK route. `provisionedBy: 'cc-api'` from state (minus
|
|
43631
|
+
* the `STICKY_CC_MIGRATION_EXEMPT` types that return to their SDK provider)
|
|
43632
|
+
* and a resource auto-routing this deploy both forward the full map.
|
|
43633
|
+
*
|
|
43634
|
+
* **An intrinsic value is reported as undecided.** This runs on the
|
|
43635
|
+
* template's RAW properties (`deploy-engine.ts` calls
|
|
43636
|
+
* `validateResourceProperties` pre-flight) while `getProviderFor` runs on
|
|
43637
|
+
* RESOLVED ones, so a recorded key whose raw value still holds an intrinsic
|
|
43638
|
+
* cannot be compared here. It is not announced as routing, and its warn
|
|
43639
|
+
* sentence says the route is decided once the value resolves — true on
|
|
43640
|
+
* either outcome. `getProviderFor` remains the authority.
|
|
43641
|
+
*
|
|
43642
|
+
* Suppressed per `<Type>:<Prop>` by `--prefer-sdk-route`, whose meaning
|
|
43643
|
+
* ("accept the silent drop, stay on the SDK path") is exactly this case.
|
|
42941
43644
|
*/
|
|
42942
43645
|
reportUnrecognizedProperties(logicalId, resourceType, properties, route) {
|
|
42943
43646
|
if (route.provisionedBy === "cc-api" && !STICKY_CC_MIGRATION_EXEMPT.has(resourceType) || route.autoRouted) return;
|
|
42944
43647
|
const unrecognized = findUnrecognizedProperties(resourceType, properties).filter((property) => !this.allowedUnsupportedProperties.has(`${resourceType}:${property}`));
|
|
42945
43648
|
if (unrecognized.length === 0) return;
|
|
42946
|
-
const
|
|
43649
|
+
const coverage = getPropertyCoverage(resourceType);
|
|
43650
|
+
const unroutable = this.ccRouteUnavailableReason(resourceType) ?? (STICKY_CC_MIGRATION_EXEMPT.get(resourceType)?.mode === "cc-broken" ? "Cloud Control's handler cannot manage this type correctly" : coverage?.ccRouteUnavailable === true ? "the type's SDK provider opts out of the Cloud Control fallback (disableCcApiFallback)" : void 0);
|
|
43651
|
+
const readOnly = unrecognized.filter((p) => coverage?.readOnly.has(p) === true);
|
|
43652
|
+
const notReadOnly = unrecognized.filter((p) => coverage?.readOnly.has(p) !== true);
|
|
43653
|
+
const undecided = unroutable === void 0 ? notReadOnly.filter((p) => containsIntrinsic(properties?.[p]) && route.previousProperties != null && typeof route.previousProperties === "object" && Object.hasOwn(route.previousProperties, p)) : [];
|
|
43654
|
+
const rest = notReadOnly.filter((p) => !undecided.includes(p));
|
|
43655
|
+
const sentences = [];
|
|
43656
|
+
const isAre = (names) => names.length === 1 ? "is" : "are";
|
|
43657
|
+
if (readOnly.length > 0) sentences.push(`${readOnly.join(", ")} ${isAre(readOnly)} read-only — an attribute AWS computes, which no engine sets (CloudFormation ignores it too); remove it.`);
|
|
43658
|
+
if (rest.length > 0 && unroutable !== void 0) sentences.push(`${rest.join(", ")} ${isAre(rest)} not in cdkd's CFn schema snapshot, and this type cannot be routed via Cloud Control API (${unroutable}), so cdkd has no route that applies ${rest.length === 1 ? "it" : "them"}. If it is a property AWS published since the snapshot, please report it: ${unsupportedPropertyIssueUrl(resourceType, rest[0])}.`);
|
|
43659
|
+
else if (rest.length > 0) sentences.push(`${rest.join(", ")} ${isAre(rest)} not in cdkd's CFn schema snapshot and unchanged since this resource was deployed on the SDK route, so it stays there and cdkd does not send ${rest.length === 1 ? "it" : "them"}. Changing ${rest.length === 1 ? "it" : "one"} routes the resource via Cloud Control API, which applies a property AWS published since the snapshot and rejects a misspelled one, as CloudFormation does.`);
|
|
43660
|
+
if (undecided.length > 0) sentences.push(`${undecided.join(", ")} ${isAre(undecided)} not in cdkd's CFn schema snapshot and ${undecided.length === 1 ? "its value holds" : "their values hold"} an intrinsic, so the route is decided once it resolves: a value unchanged since the SDK-route deploy stays there and is not sent, and a changed one routes via Cloud Control API.`);
|
|
43661
|
+
if (sentences.length === 0) return;
|
|
42947
43662
|
const overrideHint = unrecognized.map((p) => `${resourceType}:${p}`).join(",");
|
|
42948
|
-
|
|
42949
|
-
this.logger.warn(`${logicalId} (${resourceType}): ${propList} ${one ? "is" : "are"} not in cdkd's CFn schema snapshot for this type, so ${one ? "it" : "they"} will NOT reach AWS — the deploy will still report success. Anything of these shapes looks the same here: a misspelled name (fix the spelling); a read-only attribute, which is not settable on any engine (remove it); or a property AWS published after cdkd's snapshot, which cdkd should be routing via Cloud Control — please report that one: ${unsupportedPropertyIssueUrl(resourceType, unrecognized[0])}${one ? "" : ` (link is for ${unrecognized[0]})`}. If the drop is intended — an addPropertyOverride escape hatch — silence this via --prefer-sdk-route ${overrideHint}.`);
|
|
43663
|
+
this.logger.warn(`${logicalId} (${resourceType}): ${unrecognized.length === 1 ? "a property" : "properties"} ${readOnly.length + rest.length > 0 ? "will NOT" : "may not"} reach AWS — the deploy will still report success. ${sentences.join(" ")} If the drop is intended — an addPropertyOverride escape hatch — silence this via --prefer-sdk-route ${overrideHint}.`);
|
|
42950
43664
|
}
|
|
42951
43665
|
/**
|
|
42952
43666
|
* Pure-functional discovery of every resource whose template uses one or
|
|
@@ -42961,8 +43675,8 @@ var ProviderRegistry = class {
|
|
|
42961
43675
|
*/
|
|
42962
43676
|
findAutoRouteHits(resources) {
|
|
42963
43677
|
const hits = [];
|
|
42964
|
-
for (const { logicalId, resourceType, properties } of resources) {
|
|
42965
|
-
const actionable = findActionableSilentDrops(resourceType, properties, this.allowedUnsupportedProperties);
|
|
43678
|
+
for (const { logicalId, resourceType, properties, previousProperties } of resources) {
|
|
43679
|
+
const actionable = findActionableSilentDrops(resourceType, properties, this.allowedUnsupportedProperties, previousProperties);
|
|
42966
43680
|
if (actionable.length === 0) continue;
|
|
42967
43681
|
hits.push({
|
|
42968
43682
|
logicalId,
|
|
@@ -44148,7 +44862,7 @@ function maskEveryOccurrence(text, exposure) {
|
|
|
44148
44862
|
function secretBearingExportNameWarning(outputKey, exportName, exposure, secrets) {
|
|
44149
44863
|
const corpus = secrets ?? exposure;
|
|
44150
44864
|
const name = secretSafeKeyDisplay(exportName, corpus, exposure);
|
|
44151
|
-
const shown = name.kind === "masked" ?
|
|
44865
|
+
const shown = name.kind === "masked" ? `${maskedLabel(name.text)} ` : "";
|
|
44152
44866
|
const ownerForceMask = /* @__PURE__ */ new Map();
|
|
44153
44867
|
const ownerHaystacks = secretScanHaystacks(outputKey);
|
|
44154
44868
|
for (const [plaintext, expression] of exposure) {
|
|
@@ -44221,6 +44935,22 @@ function displayTextOrWithheld(display) {
|
|
|
44221
44935
|
return display.kind === "withheld" ? WITHHELD_NAME_DISPLAY : display.text;
|
|
44222
44936
|
}
|
|
44223
44937
|
/**
|
|
44938
|
+
* The `(masked: ...)` label for a secret-bearing key the verdict already
|
|
44939
|
+
* masked, BOUNDED (go-to-k/cdkd#3617): both names are template- or
|
|
44940
|
+
* state-chosen, and inside hand-written quotes a `"` in the key closed them and
|
|
44941
|
+
* wrote a clause of its own.
|
|
44942
|
+
*
|
|
44943
|
+
* WITHHELD rather than bounded when the masked text carries anything
|
|
44944
|
+
* non-ASCII. `displayIdent` blanks such a character to a space AFTER the
|
|
44945
|
+
* verdict's own re-test, so the printed text would no longer be the tested
|
|
44946
|
+
* text -- `correct<NBSP>horse` beside a recorded `correct horse` would print
|
|
44947
|
+
* the secret byte for byte. Withholding keeps one string tested and printed,
|
|
44948
|
+
* the rule #2874 set for this module.
|
|
44949
|
+
*/
|
|
44950
|
+
function maskedLabel(maskedText) {
|
|
44951
|
+
return /[^ -~]/.test(maskedText) ? "(masked, name withheld: it carries characters this line cannot show as tested)" : `(masked: ${displayIdent(maskedText)})`;
|
|
44952
|
+
}
|
|
44953
|
+
/**
|
|
44224
44954
|
* Warning for a state KEY that already holds secret plaintext — the residue an
|
|
44225
44955
|
* EARLIER binary left when it published an export name that resolved to one.
|
|
44226
44956
|
*
|
|
@@ -44232,8 +44962,8 @@ function displayTextOrWithheld(display) {
|
|
|
44232
44962
|
* Reported so the `--dry-run --fail` CI gate stops calling such a state clean.
|
|
44233
44963
|
*/
|
|
44234
44964
|
function secretBearingStateKeyWarning(stackName, display) {
|
|
44235
|
-
const clause = display.kind === "masked" ?
|
|
44236
|
-
return `State for ${canonicalForSecretScan(stackName)} holds an output KEY that renders a secret ${clause}— cdkd scrub cannot rewrite a key, only a value, because the key IS the export name consumers resolve by. Give that output a non-secret Export.Name and redeploy: the next deploy replaces state.outputs and the exports index entirely. ROTATE the exposed secret.`;
|
|
44965
|
+
const clause = display.kind === "masked" ? `${maskedLabel(display.text)} ` : `(the name is withheld: masking it would leave the secret readable) `;
|
|
44966
|
+
return `State for ${displayStackName(canonicalForSecretScan(stackName))} holds an output KEY that renders a secret ${clause}— cdkd scrub cannot rewrite a key, only a value, because the key IS the export name consumers resolve by. Give that output a non-secret Export.Name and redeploy: the next deploy replaces state.outputs and the exports index entirely. ROTATE the exposed secret.`;
|
|
44237
44967
|
}
|
|
44238
44968
|
/**
|
|
44239
44969
|
* Warning for an `Export.Name` colliding with an output NAME it does not own.
|
|
@@ -44790,7 +45520,6 @@ const STATEFUL_TYPES = /* @__PURE__ */ new Set([
|
|
|
44790
45520
|
"AWS::S3Express::DirectoryBucket",
|
|
44791
45521
|
"AWS::S3Tables::TableBucket",
|
|
44792
45522
|
"AWS::S3Tables::Table",
|
|
44793
|
-
"AWS::S3Tables::Namespace",
|
|
44794
45523
|
"AWS::S3Vectors::VectorBucket",
|
|
44795
45524
|
"AWS::ECR::Repository",
|
|
44796
45525
|
"AWS::EC2::Volume",
|
|
@@ -49365,6 +50094,15 @@ function deriveLabelRouting(change, existingState, registry, forceCcApi = false)
|
|
|
49365
50094
|
}
|
|
49366
50095
|
}
|
|
49367
50096
|
/**
|
|
50097
|
+
* Whether a property change's `requiresReplacement` is only a CEILING the diff
|
|
50098
|
+
* set before the value could be known — a synthetic change from in-place
|
|
50099
|
+
* attribute propagation or replacement propagation (go-to-k/cdkd#3662). The
|
|
50100
|
+
* UPDATE arm lowers such a ceiling when the resolved value equals the record.
|
|
50101
|
+
*/
|
|
50102
|
+
function isReplacementCeiling(pc) {
|
|
50103
|
+
return pc.requiresReplacement && (pc.inPlacePropagated === true || pc.replacementPropagated === true);
|
|
50104
|
+
}
|
|
50105
|
+
/**
|
|
49368
50106
|
* Structural equality for resolved Outputs maps (issue #875).
|
|
49369
50107
|
*
|
|
49370
50108
|
* Output values are intrinsic-resolved primitives or nested objects/arrays
|
|
@@ -49676,6 +50414,15 @@ var DeployEngine = class DeployEngine {
|
|
|
49676
50414
|
*/
|
|
49677
50415
|
attemptedResolvedProps = /* @__PURE__ */ new Map();
|
|
49678
50416
|
/**
|
|
50417
|
+
* The live-progress label `provisionResource` gave each resource, and whether
|
|
50418
|
+
* its verb said `Replacing` (go-to-k/cdkd#3662). The label is chosen before
|
|
50419
|
+
* resolution, so a resource whose only replacement is a CEILING (a synthetic
|
|
50420
|
+
* change, see `isReplacementCeiling`) is labelled `Updating`; the UPDATE arm
|
|
50421
|
+
* re-labels it here if the resolved value keeps the replacement, and the
|
|
50422
|
+
* slow-resource warning reads the current label rather than the first one.
|
|
50423
|
+
*/
|
|
50424
|
+
liveTaskLabels = /* @__PURE__ */ new Map();
|
|
50425
|
+
/**
|
|
49679
50426
|
* Logical ids whose replacement this deploy DELIBERATELY left the old
|
|
49680
50427
|
* physical resource alive for — `UpdateReplacePolicy: Retain` (issue
|
|
49681
50428
|
* [#2603](https://github.com/go-to-k/cdkd/issues/2603)).
|
|
@@ -49780,6 +50527,7 @@ var DeployEngine = class DeployEngine {
|
|
|
49780
50527
|
this.perResourceTemplateProps = /* @__PURE__ */ new Map();
|
|
49781
50528
|
this.perResourceResolvedType = /* @__PURE__ */ new Map();
|
|
49782
50529
|
this.attemptedResolvedProps = /* @__PURE__ */ new Map();
|
|
50530
|
+
this.liveTaskLabels = /* @__PURE__ */ new Map();
|
|
49783
50531
|
this.outputSecrets = /* @__PURE__ */ new Map();
|
|
49784
50532
|
this.outputsPassSecretMaps = [];
|
|
49785
50533
|
this.outputsTemplateSource = Object.create(null);
|
|
@@ -49819,6 +50567,24 @@ var DeployEngine = class DeployEngine {
|
|
|
49819
50567
|
};
|
|
49820
50568
|
}
|
|
49821
50569
|
/**
|
|
50570
|
+
* The names of this child's parameters whose value carries a `NoEcho` value
|
|
50571
|
+
* the parent supplied in THIS deploy (go-to-k/cdkd#3717), read off the
|
|
50572
|
+
* inherited bag's fresh marks. `undefined` outside a nested child, or when
|
|
50573
|
+
* none does.
|
|
50574
|
+
*
|
|
50575
|
+
* WHOLE values only. A mask-only needle replaces a leaf only whole, so a
|
|
50576
|
+
* parameter that EMBEDS such a value (`prefix-<token>`) is not redacted for
|
|
50577
|
+
* the diff at all: its readers already diff as UPDATE on the plaintext, and
|
|
50578
|
+
* need no promotion from here.
|
|
50579
|
+
*/
|
|
50580
|
+
freshNoEchoParameters(parameterValues) {
|
|
50581
|
+
const inherited = this.options.inheritedSecrets;
|
|
50582
|
+
if (!inherited || inherited.size === 0) return void 0;
|
|
50583
|
+
const fresh = /* @__PURE__ */ new Set();
|
|
50584
|
+
for (const [name, value] of Object.entries(parameterValues)) if (carriesFreshNoEchoValue(value, inherited)) fresh.add(name);
|
|
50585
|
+
return fresh.size > 0 ? fresh : void 0;
|
|
50586
|
+
}
|
|
50587
|
+
/**
|
|
49822
50588
|
* The parameter bag the DIFF resolver context binds, with any inherited
|
|
49823
50589
|
* secret plaintext rewritten back to its `{{resolve:...}}` expression (issue
|
|
49824
50590
|
* #1903).
|
|
@@ -50293,7 +51059,8 @@ var DeployEngine = class DeployEngine {
|
|
|
50293
51059
|
const { provider } = this.providerRegistry.getProviderFor({
|
|
50294
51060
|
resourceType: resource.resourceType,
|
|
50295
51061
|
properties: resource.properties,
|
|
50296
|
-
provisionedBy: resource.provisionedBy
|
|
51062
|
+
provisionedBy: resource.provisionedBy,
|
|
51063
|
+
previousProperties: resource.properties
|
|
50297
51064
|
});
|
|
50298
51065
|
if (!provider.import) return { kind: "not-attempted" };
|
|
50299
51066
|
const found = await provider.import({
|
|
@@ -50794,7 +51561,8 @@ var DeployEngine = class DeployEngine {
|
|
|
50794
51561
|
logicalId,
|
|
50795
51562
|
resourceType: r.Type,
|
|
50796
51563
|
properties: r.Properties,
|
|
50797
|
-
provisionedBy: currentState.resources[logicalId]?.provisionedBy
|
|
51564
|
+
provisionedBy: currentState.resources[logicalId]?.provisionedBy,
|
|
51565
|
+
previousProperties: currentState.resources[logicalId]?.properties
|
|
50798
51566
|
}));
|
|
50799
51567
|
this.providerRegistry.validateResourceProperties(resourcesForPropertyCheck);
|
|
50800
51568
|
this.logger.debug(`All resource properties validated`);
|
|
@@ -50810,7 +51578,7 @@ var DeployEngine = class DeployEngine {
|
|
|
50810
51578
|
diffResolverContext.bestEffort = true;
|
|
50811
51579
|
diffResolverContext.skipDynamicReferences = true;
|
|
50812
51580
|
const diffResolveFn = (value) => this.resolver.resolve(value, diffResolverContext);
|
|
50813
|
-
const changes = await this.diffCalculator.calculateDiff(currentState, effectiveTemplate, diffResolveFn, makeCanonicalizePropertiesFn(this.providerRegistry), this.providerRegistry.getAllowedUnsupportedProperties?.());
|
|
51581
|
+
const changes = await this.diffCalculator.calculateDiff(currentState, effectiveTemplate, diffResolveFn, makeCanonicalizePropertiesFn(this.providerRegistry), this.providerRegistry.getAllowedUnsupportedProperties?.(), this.freshNoEchoParameters(parameterValues));
|
|
50814
51582
|
const nestedStackTypeChanges = findNestedStackTypeChanges({
|
|
50815
51583
|
changes,
|
|
50816
51584
|
stateResources: currentState.resources
|
|
@@ -51444,11 +52212,15 @@ var DeployEngine = class DeployEngine {
|
|
|
51444
52212
|
const renderer = getLiveRenderer();
|
|
51445
52213
|
const labelRecreateDirection = this.recreateDirectionFor(stackName, logicalId);
|
|
51446
52214
|
const labelRecordedType = stateResources[logicalId]?.resourceType;
|
|
51447
|
-
const needsReplacement = change.changeType === "UPDATE" && ((change.propertyChanges?.some((pc) => pc.requiresReplacement) ?? false) || labelRecordedType !== void 0 && labelRecordedType !== resourceType) || labelRecreateDirection !== void 0;
|
|
52215
|
+
const needsReplacement = change.changeType === "UPDATE" && ((change.propertyChanges?.some((pc) => pc.requiresReplacement && !isReplacementCeiling(pc)) ?? false) || labelRecordedType !== void 0 && labelRecordedType !== resourceType) || labelRecreateDirection !== void 0;
|
|
51448
52216
|
const verb = change.changeType === "CREATE" ? "Creating" : change.changeType === "DELETE" ? "Deleting" : needsReplacement ? "Replacing" : "Updating";
|
|
51449
52217
|
const labelRouting = this.peekRoutingForLabel(change, stateResources[logicalId], stackName, logicalId, needsReplacement, labelRecreateDirection);
|
|
51450
52218
|
const baseLabel = `${verb} ${logicalId} (${resourceType})${labelRouting === "cc-api" ? " [CC API]" : ""}`;
|
|
51451
52219
|
renderer.addTask(logicalId, baseLabel);
|
|
52220
|
+
this.liveTaskLabels.set(logicalId, {
|
|
52221
|
+
label: baseLabel,
|
|
52222
|
+
replacing: needsReplacement
|
|
52223
|
+
});
|
|
51452
52224
|
const operationKind = change.changeType === "CREATE" ? "CREATE" : change.changeType === "DELETE" ? "DELETE" : "UPDATE";
|
|
51453
52225
|
const providerMinTimeoutMs = this.providerRegistry.getProvider(resourceType).getMinResourceTimeoutMs?.() ?? 0;
|
|
51454
52226
|
const warnAfterMs = this.options.resourceWarnAfterByType?.[resourceType] ?? this.options.resourceWarnAfterMs ?? 3e5;
|
|
@@ -51480,7 +52252,9 @@ var DeployEngine = class DeployEngine {
|
|
|
51480
52252
|
onWarn: (elapsedMs) => {
|
|
51481
52253
|
const minutes = Math.max(1, Math.round(elapsedMs / 6e4));
|
|
51482
52254
|
const warnSuffix = ` [taking longer than expected, ${minutes}m+]`;
|
|
51483
|
-
|
|
52255
|
+
const current = this.liveTaskLabels.get(logicalId);
|
|
52256
|
+
if (current !== void 0) current.warnSuffix = warnSuffix;
|
|
52257
|
+
renderer.updateTaskLabel(logicalId, `${current?.label ?? baseLabel}${warnSuffix}`);
|
|
51484
52258
|
renderer.printAbove(() => {
|
|
51485
52259
|
this.logger.warn(`${logicalId} (${resourceType}) has been ${operationKind === "CREATE" ? "creating" : operationKind === "DELETE" ? "deleting" : "updating"} for ${minutes}m — still waiting`);
|
|
51486
52260
|
});
|
|
@@ -51586,7 +52360,10 @@ var DeployEngine = class DeployEngine {
|
|
|
51586
52360
|
if (targets.viaSdkProvider.has(logicalId)) return "sdk";
|
|
51587
52361
|
}
|
|
51588
52362
|
peekRoutingForLabel(change, existingState, stackName, logicalId, needsReplacement = false, recreateDirection) {
|
|
51589
|
-
if (needsReplacement) return deriveLabelRouting(change,
|
|
52363
|
+
if (needsReplacement) return deriveLabelRouting(change, {
|
|
52364
|
+
...recreateDirection !== void 0 && { provisionedBy: recreateDirection },
|
|
52365
|
+
...existingState?.properties !== void 0 && { properties: existingState.properties }
|
|
52366
|
+
}, this.providerRegistry, recreateDirection === "cc-api");
|
|
51590
52367
|
return deriveLabelRouting(change, existingState, this.providerRegistry, this.isPinnedToCcApi(stackName, logicalId));
|
|
51591
52368
|
}
|
|
51592
52369
|
/**
|
|
@@ -51777,16 +52554,15 @@ var DeployEngine = class DeployEngine {
|
|
|
51777
52554
|
const updateSecrets = context.recordedSecretValues ?? /* @__PURE__ */ new Map();
|
|
51778
52555
|
this.perResourceSecrets.set(logicalId, updateSecrets);
|
|
51779
52556
|
const resolvedProps = await this.resolver.resolve(desiredProps, context);
|
|
51780
|
-
this.refuseRedactedAttributeReads(logicalId, resourceType, context);
|
|
51781
52557
|
this.perResourceTemplateProps.set(logicalId, desiredProps);
|
|
51782
52558
|
this.perResourceResolvedType.set(logicalId, resourceType);
|
|
51783
52559
|
recordNestedStackParameterExpressions(updateSecrets, resourceType, resolvedProps, desiredProps);
|
|
51784
52560
|
this.auditResolvedAssetReferences(logicalId, resourceType, resolvedProps);
|
|
51785
|
-
|
|
52561
|
+
const suppliesFreshMaskOnlyValue = carriesFreshNoEchoValue(resolvedProps, updateSecrets);
|
|
51786
52562
|
const desiredForSkipCheck = redactSecretsForState(markSameGenerationBag({ ...resolvedProps }), updateSecrets, desiredProps);
|
|
51787
52563
|
const allowedSilentDrops = this.providerRegistry.getAllowedUnsupportedProperties?.();
|
|
51788
|
-
const desiredForSkipCheckAsWritten = currentResource.provisionedBy !== "cc-api" && allowedSilentDrops ? withoutAcceptedSilentDropProperties(resourceType, desiredForSkipCheck, allowedSilentDrops) : desiredForSkipCheck;
|
|
51789
|
-
if (!typeChanged && JSON.stringify(desiredForSkipCheckAsWritten) === JSON.stringify(currentPropsAsWritten)) {
|
|
52564
|
+
const desiredForSkipCheckAsWritten = currentResource.provisionedBy !== "cc-api" && allowedSilentDrops ? withoutAcceptedSilentDropProperties(resourceType, desiredForSkipCheck, allowedSilentDrops, currentResource.properties) : desiredForSkipCheck;
|
|
52565
|
+
if (!typeChanged && !suppliesFreshMaskOnlyValue && JSON.stringify(desiredForSkipCheckAsWritten) === JSON.stringify(currentPropsAsWritten)) {
|
|
51790
52566
|
if (change.attributeChanges && change.attributeChanges.length > 0) {
|
|
51791
52567
|
const attrSummary = change.attributeChanges.map((a) => `${a.attribute}: ${a.oldValue ?? "(unset)"} → ${a.newValue ?? "(unset)"}`).join(", ");
|
|
51792
52568
|
this.logger.info(` ↻ ${logicalId} (${resourceType}) attribute update: ${attrSummary}`);
|
|
@@ -51805,12 +52581,32 @@ var DeployEngine = class DeployEngine {
|
|
|
51805
52581
|
if (counts) counts.skipped++;
|
|
51806
52582
|
break;
|
|
51807
52583
|
}
|
|
52584
|
+
this.refuseRedactedAttributeReads(logicalId, resourceType, context);
|
|
52585
|
+
this.attemptedResolvedProps.set(logicalId, resolvedProps);
|
|
52586
|
+
if (change.propertyChanges?.some((pc) => isReplacementCeiling(pc)) === true) change.propertyChanges = change.propertyChanges.map((pc) => {
|
|
52587
|
+
if (!isReplacementCeiling(pc)) return pc;
|
|
52588
|
+
if (carriesFreshNoEchoValue(resolvedProps[pc.path], updateSecrets)) return pc;
|
|
52589
|
+
return JSON.stringify(desiredForSkipCheckAsWritten[pc.path]) !== JSON.stringify(currentPropsAsWritten[pc.path]) ? pc : {
|
|
52590
|
+
...pc,
|
|
52591
|
+
requiresReplacement: false
|
|
52592
|
+
};
|
|
52593
|
+
});
|
|
51808
52594
|
const propertyDrivenReplacement = typeChanged || change.propertyChanges?.some((pc) => pc.requiresReplacement);
|
|
51809
52595
|
const recreateTargets = this.options.recreateTargets?.stackName === stackName ? this.options.recreateTargets : void 0;
|
|
51810
52596
|
const recreateViaCcApi = recreateTargets?.viaCcApi.has(logicalId) ?? false;
|
|
51811
52597
|
const recreateViaSdkProvider = recreateTargets?.viaSdkProvider.has(logicalId) ?? false;
|
|
51812
52598
|
const recreateFlagged = recreateViaCcApi || recreateViaSdkProvider;
|
|
51813
52599
|
const needsReplacement = propertyDrivenReplacement || recreateFlagged;
|
|
52600
|
+
const liveLabel = this.liveTaskLabels.get(logicalId);
|
|
52601
|
+
if (needsReplacement && liveLabel !== void 0 && !liveLabel.replacing) {
|
|
52602
|
+
const label = `Replacing ${logicalId} (${resourceType})${this.peekRoutingForLabel(change, currentResource, stackName, logicalId, true, this.recreateDirectionFor(stackName, logicalId)) === "cc-api" ? " [CC API]" : ""}`;
|
|
52603
|
+
this.liveTaskLabels.set(logicalId, {
|
|
52604
|
+
label,
|
|
52605
|
+
replacing: true,
|
|
52606
|
+
...liveLabel.warnSuffix !== void 0 && { warnSuffix: liveLabel.warnSuffix }
|
|
52607
|
+
});
|
|
52608
|
+
renderer.updateTaskLabel(logicalId, `${label}${liveLabel.warnSuffix ?? ""}`);
|
|
52609
|
+
}
|
|
51814
52610
|
const dependencies = this.extractAllDependencies(template, logicalId);
|
|
51815
52611
|
const updateReplacePolicy = template?.Resources?.[logicalId]?.UpdateReplacePolicy;
|
|
51816
52612
|
if (needsReplacement) {
|
|
@@ -51831,6 +52627,7 @@ var DeployEngine = class DeployEngine {
|
|
|
51831
52627
|
resourceType,
|
|
51832
52628
|
properties: resolvedProps,
|
|
51833
52629
|
...recreateDirectionHint && { provisionedBy: recreateDirectionHint },
|
|
52630
|
+
previousProperties: currentResource.properties,
|
|
51834
52631
|
...recreateViaCcApi && { forceCcApi: true }
|
|
51835
52632
|
});
|
|
51836
52633
|
const replaceProvider = replaceDecision.provider;
|
|
@@ -52012,7 +52809,8 @@ var DeployEngine = class DeployEngine {
|
|
|
52012
52809
|
}
|
|
52013
52810
|
const replDecision = this.providerRegistry.getProviderFor({
|
|
52014
52811
|
resourceType,
|
|
52015
|
-
properties: resolvedProps
|
|
52812
|
+
properties: resolvedProps,
|
|
52813
|
+
previousProperties: currentResource.properties
|
|
52016
52814
|
});
|
|
52017
52815
|
const replProvider = replDecision.provider;
|
|
52018
52816
|
const replProps = replDecision.provisionedBy === "cc-api" ? this.preparePropertiesForCcApi(resourceType, resolvedProps, logicalId) : resolvedProps;
|
|
@@ -52796,5 +53594,5 @@ var DeployEngine = class DeployEngine {
|
|
|
52796
53594
|
};
|
|
52797
53595
|
|
|
52798
53596
|
//#endregion
|
|
52799
|
-
export { yellow as $, ConfigError as $a, synthesisStatusMessage as $i, refuseMalformedOrphanRecordsForDestroy as $n, forceQuitRecoveryClause as $r, configIntegerRefusal as $t, createPreDeleteFinalSnapshot as A, credentialFingerprint as Aa, validateContainerRepoName as Ai, hasReadableOutputs as An, retryClassificationText as Ao, TEMPLATE_SOURCED_RULES as Ar, deleteSkipReason as At, isStatefulRecreateTargetSync as B, absoluteAssemblyPathEscape as Ba, getDockerCmd as Bi, malformedOrphansRefusalMessage as Bn, maskSecretsInText as Br, isImpossibleEmptyStoredAttribute as Bt, namesAnyDeclaredParameter as C, expectedOwnerParam as Ca, assertAssetBucketRegion as Ci, STATE_REGION_DIVERGED as Cn, shellQuote as Co, describeTypeWithThrottleRetry as Cr, compositeIdSkipResult as Ct, PRE_DELETE_SNAPSHOT_TYPES as D, ambientClientDefaults as Da, parseBootstrapMarker as Di, deployRefusesOrphanRowsReason as Dn, isTransientServerError as Do, STATE_SOURCED_BASELINE_RULES as Dr, maskerOrIdentity as Dt, ATOMIC_FINAL_SNAPSHOT_TYPES as E, derivePartitionAndUrlSuffix as Ea, isCrossRegionRedirect as Ei, UNREADABLE_RESOURCES_MAP_ROW as En, isThrottlingError as Eo, TemplateParser as Er, maskDeep as Et, extractDeploymentEventError as F, defineOwnKey as Fa, describeDockerExecFailure as Fi, malformedExportSourceWarning as Fn, identityKeyFor as Fr, carriesDynamicReference as Ft, toCfnInteger as G, resolveBucketRegion as Ga, runDockerForeground as Gi, malformedResourceEntriesWarning as Gn, redactSecretsForState as Gr, isSettledInstanceState as Gt, WARM_THROUGHPUT_MEMBERS as H, renderAssemblyPathEscape as Ha, isMalformedEnvKey as Hi, malformedOutputsRefusalMessage as Hn, recordMaskOnlyValue as Hr, isUnboundTemplateParameter as Ht, makeSiblingClaimReader as I, hasOwnKey as Ia, describeDockerFailure as Ii, malformedLocalOutputsWarning as In, isSingleDynamicReferenceToken as Ir, carriesFetchableDynamicReference as It, bold as J, resetAwsClients as Ja, escapeRegExp$1 as Ji, malformedStateRefusalMessage as Jn, S3StateBackend as Jr, resolveExplicitPhysicalId as Jt, toFiniteNumber as K, AwsClients as Ka, runDockerStreaming as Ki, malformedResourcePropertiesWarning as Kn, scrubResourceRecord as Kr, WAFv2WebACLProvider as Kt, planOrphanAdoption as L, hasPlainPrototype$1 as La, dockerSpawnEnvWithSensitive as Li, malformedOrphanRecordsRefusalMessage as Ln, isUncertifiedBaselineMaskPosition as Lr, cfnRefValueFromPhysicalId as Lt, refusesFinalSnapshot as M, failedStageNote as Ma, buildDockerImage as Mi, isReadableOrphanRecord as Mn, safeStringify$1 as Mo, createSecretMasker as Mr, disableInstanceApiTermination as Mt, unsupportedFinalSnapshotError as N, globMatches as Na, resolveDockerContextDirectory as Ni, isReadableResourceEntry as Nn, __exportAll as No, dynamicReferenceTokens as Nr, isTerminationProtectionPropagationError as Nt, buildFinalSnapshotIdentifier as O, ambientCredentialConfig as Oa, readBootstrapMarkerBody as Oi, displayLogicalId as On, markNonRetryable as Oo, STATE_SOURCED_CROSS_GENERATION_RULES as Or, UNSPECIFIED_SKIP_REASON as Ot, makeCanonicalizePropertiesFn as P, processStackMessages as Pa, describeDockerCapturedOutput as Pi, malformedExportNamesWarning as Pn, errorCauseChain as Pr, IntrinsicFunctionResolver as Pt, red as Q, CdkdError as Qa, Synthesizer as Qi, refuseMalformedOrphanRecords as Qn, buildLockContentionMessage as Qr, configBooleanRefusal as Qt, MULTI_REGION_RECREATE_BLOCKED_TYPES as R, nullPrototypeRecord as Ra, finchSecretArgvRefusal as Ri, malformedOrphanRecordsWarning as Rn, markSameGenerationBag as Rr, coerceParameterTypedValue as Rt, computeParameterTaint as S, decodeListingKey as Sa, BOOTSTRAP_MARKER_PREFIX as Si, INTRINSIC_KEYS as Sn, pasteableCommand as So, findSilentDropProperties as Sr, compositeIdSeparatorRefusal as St, resourcesNamingDeclaredParameter as T, canonicalizeRegion as Ta, getBootstrapMarkerKey as Ti, UNREADABLE_ORPHANS_CONTAINER_ROW as Tn, isRetryableTransientError as To, DagBuilder as Tr, createMaskedRetryLogger as Tt, coerceWarmThroughput as U, resolveAssemblyPath as Ua, partitionSensitiveEnv as Ui, malformedOutputsWarning as Un, recordMaskOnlyValuesIn as Ur, parameterTypeMayLoseSecretIdentity as Ut, renderStatefulReason as V, displayAssemblyPath as Va, isDockerClientEnvKey as Vi, malformedOrphansWarning as Vn, pathCrossesDottedKey as Vr, isNamelessDynamicReferenceError as Vt, isWarmThroughputDecrease as W, clearBucketRegionCache as Wa, redactDockerArgvValues as Wi, malformedRenderedContainersWarning as Wn, recoverMaskedOutput as Wr, refStateLookupFromResource as Wt, gray as X, setAwsClients as Xa, AssetManifestLoader as Xi, refuseDivergentRecordRegionForDestroy as Xn, UNREPRODUCIBLE_LOCK_CLAUSE as Xr, coerceCfnBoolean as Xt, cyan as Y, runWithStackAwsClients as Ya, stripControlChars as Yi, previewableOrphanRecords as Yn, rebuildClientForBucketRegion as Yr, assertRegionMatch as Yt, green as Z, AssetError as Za, getDockerImageBySourceHash as Zi, refuseMalformedNestedChildOutputs as Zn, buildForceUnlockCommand as Zr, coerceCfnInteger as Zt, bagHoldsSecretExpression as _, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as _a, buildAssetRedirectMap as _i, AWS_CREDENTIAL_ENV_KEYS as _n, SynthesisError as _o, safeRegion as _r, startInterruptWatch as _t, DeploymentEventsStore as a, resolveSkipPrefix as aa, hasReadableExportSet as ai, requireConfigString as an, LocalInvokeBuildError as ao, refuseMalformedResourceAttributesForOrphan as ar, secretBearingStateKeyWarning as at, mergeNoChangeOutputs as b, producerCoordinateKey as ba, rewriteTemplateAssetReferences as bi, envCredentialsAreAssumedRole as bn, normalizeAwsError as bo, unreadableOrphanRecords as br, ccProtectionRegistryTypes as bt, replayFailedOperations as c, resolveUseCdkBootstrapAssets as ca, importableOutputKeys as ci, classifyReplaySecretRegion as cn, MalformedProducerRecordRefusalError as co, refuseMalformedResourcePropertiesForOrphan as cr, IAMRoleProvider as ct, updatePartialMessage as d, ssmResolvedValueType as da, orphansAfterRollback as di, s3BucketArn as dn, ProvisioningError as do, repairMalformedOrphanRecordsForReadOnly as dr, ProviderRegistry as dt, getDefaultStateBucketName as ea, formatLockExpiry as ei, configStringRefusal as en, CrossAccountSecretRefusalError as eo, refuseMalformedOrphans as er, collectDeclaredOutputNames as et, updatePartialReason as f, CFN_TEMPLATE_BODY_LIMIT as fa, orphansCarriedFrom as fi, s3BucketDomainName as fn, ResourceTimeoutError as fo, repairMalformedOrphansForReadOnly as fr, wouldReturnToSdkProvider as ft, computeImplicitDeleteEdges as g, uploadCfnTemplate as ga, WorkGraph as gi, applyRoleArnIfSet as gn, StateError as go, repairMalformedResourcesForReadOnly as gr, isInterruptedWaitError as gt, IMPLICIT_DELETE_DEPENDENCIES as h, findLargeInlineResources as ha, stringifyValue as hi, s3BucketWebsiteUrl as hn, StackTerminationProtectionError as ho, repairMalformedResourcePropertiesForReadOnly as hr, interruptWatchListenerCount as ht, DeploymentEventsReader as i, resolveCaptureObservedState as ia, exportNamesCarriedFrom as ii, requireConfigObject as in, IntrinsicResolutionRefusalError as io, refuseMalformedOutputsForDestroy as ir, secretBearing as it, isFinalSnapshotError as j, AssemblyReader as ja, buildDenyExternalAccessPolicy as ji, hasReadableResources as jn, describeAwsFailure as jo, carriesSecretMask as jr, isWaitAbandonedError as jt, ccRoutedFinalSnapshotError as k, clientDefaultsFor as ka, validateAssetBucketName as ki, hasReadableOrphans as kn, markRedactedCause as ko, STATE_SOURCED_READBACK_RULES as kr, deleteIndeterminateGuards as kt, replayRollback as l, stateBucketExistenceConfirmed as la, importableOutputs as li, producerRegionsFromState as ln, NestedStackChildDirectDestroyError as lo, refuseMalformedResourcesForDestroy as lr, collectInlinePolicyNamesManagedBySiblings as lt, maskingRetryLogger as m, MIGRATE_TMP_PREFIX as ma, AssetPublisher as mi, s3BucketRegionalDomainName as mn, StackHasActiveImportsError as mo, repairMalformedResourceEntriesForReadOnly as mr, endCommandInterruptScope as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, resolveApp as na, DEFAULT_STATE_PREFIX as ni, replayWarn as nn, DeployCancelledError as no, refuseMalformedOrphansForOrphan as nr, exportAliasCollisionScrubWarning as nt, planFailedOps as o, resolveStateBucketWithDefault as oa, hasReasonlessBaselineRefusal as oi, definedAttributes as on, LocalStartServiceError as oo, refuseMalformedResourceEntries as or, secretSafeKeyDisplay as ot, withResourceDeadline as p, CFN_TEMPLATE_URL_LIMIT as pa, shouldRetainResource as pi, s3BucketDualStackDomainName as pn, ResourceUpdateNotSupportedError as po, repairMalformedOutputsForReadOnly as pr, beginCommandInterruptScope as pt, formatResourceLine as q, getAwsClients as qa, warnFinchArgvExposure as qi, malformedResourcesWarning as qn, LockManager as qr, normalizeAwsTagsToCfn as qt, DeployEngine as r, resolveAutoAssetStorage as ra, describeRegionValueKind as ri, requireConfigArray as rn, DynamicReferenceRegionAmbiguousError as ro, refuseMalformedOutputs as rr, isExportAliasCollision as rt, planRollback as s, resolveStateBucketWithDefaultAndSource as sa, hasUnverifiableParameterRefusal as si, stringifyIfAssigned as sn, LockError as so, refuseMalformedResourceEntriesForOrphan as sr, getCurrentResourceSecrets as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, getLegacyStateBucketName as ta, CUSTOM_RESOURCE_RESPONSE_PREFIX as ti, readConfigString as tn, DependencyError as to, refuseMalformedOrphansForDestroy as tr, collectPublishedOutputNames as tt, resolveReplacementOldType as u, warnDeprecatedNoPrefixCliFlag as ua, isReadableBag as ui, withSharedDrainBudget as un, PartialFailureError as uo, refuseMalformedState as ur, clearOnUpdateRemoval as ut, isSecretBearingReferenceString as v, injectiveKey as va, createAssetRedirectResolver as vi, applyCallerIdentityCredentials as vn, formatError as vo, safeStackName as vr, CloudControlProvider as vt, reachableDivergentParameters as w, PARTITION_TABLE as wa, ensureAssetStorage as wi, STATE_RESOURCES_MALFORMED as wn, isMarkedNonRetryable as wo, withRetry as wr, packCompositeId as wt, bindingSkippedOutputs as x, producerRecordKey as xa, AssetModeResolver as xi, DiffCalculator as xn, withErrorHandling as xo, findActionableSilentDrops as xr, compositeIdFormatMessage as xt, keptWholeReasonText as y, injectiveKeyPrefix as ya, loadPublishableAssetManifest as yi, callerEnvCredentials as yn, isCdkdError as yo, unpreviewableOrphanRecords as yr, slowCcOperationTimeoutMs as yt, isStatefulRecreateTargetForReplace as z, ownValue as za, formatDockerLoginError as zi, malformedOrphanRowsKeptWarning as zn, maskSecretsInError as zr, getAccountInfo as zt };
|
|
52800
|
-
//# sourceMappingURL=deploy-engine-
|
|
53597
|
+
export { yellow as $, CdkdError as $a, synthesisStatusMessage as $i, refuseMalformedOrphanRecordsForDestroy as $n, forceQuitRecoveryClause as $r, configIntegerRefusal as $t, createPreDeleteFinalSnapshot as A, credentialFingerprint as Aa, validateContainerRepoName as Ai, hasReadableOutputs as An, markRedactedCause as Ao, TEMPLATE_SOURCED_RULES as Ar, deleteSkipReason as At, isStatefulRecreateTargetSync as B, absoluteAssemblyPathEscape as Ba, getDockerCmd as Bi, malformedOrphansRefusalMessage as Bn, maskSecretsInText as Br, isImpossibleEmptyStoredAttribute as Bt, namesAnyDeclaredParameter as C, expectedOwnerParam as Ca, assertAssetBucketRegion as Ci, STATE_REGION_DIVERGED as Cn, pasteableCommand as Co, describeTypeWithThrottleRetry as Cr, compositeIdSkipResult as Ct, PRE_DELETE_SNAPSHOT_TYPES as D, ambientClientDefaults as Da, parseBootstrapMarker as Di, deployRefusesOrphanRowsReason as Dn, isThrottlingError as Do, STATE_SOURCED_BASELINE_RULES as Dr, maskerOrIdentity as Dt, ATOMIC_FINAL_SNAPSHOT_TYPES as E, derivePartitionAndUrlSuffix as Ea, isCrossRegionRedirect as Ei, UNREADABLE_RESOURCES_MAP_ROW as En, isRetryableTransientError as Eo, TemplateParser as Er, maskDeep as Et, extractDeploymentEventError as F, defineOwnKey as Fa, describeDockerExecFailure as Fi, malformedExportSourceWarning as Fn, identityKeyFor as Fr, carriesDynamicReference as Ft, toCfnInteger as G, clearBucketRegionCache as Ga, runDockerForeground as Gi, malformedResourceEntriesWarning as Gn, redactSecretsForState as Gr, isSettledInstanceState as Gt, WARM_THROUGHPUT_MEMBERS as H, displayAssemblyPath as Ha, isMalformedEnvKey as Hi, malformedOutputsRefusalMessage as Hn, recordMaskOnlyValue as Hr, isUnboundTemplateParameter as Ht, makeSiblingClaimReader as I, hasOwnKey as Ia, describeDockerFailure as Ii, malformedLocalOutputsWarning as In, isSingleDynamicReferenceToken as Ir, carriesFetchableDynamicReference as It, bold as J, getAwsClients as Ja, escapeRegExp$1 as Ji, malformedStateRefusalMessage as Jn, S3StateBackend as Jr, resolveExplicitPhysicalId as Jt, toFiniteNumber as K, resolveBucketRegion as Ka, runDockerStreaming as Ki, malformedResourcePropertiesWarning as Kn, scrubResourceRecord as Kr, WAFv2WebACLProvider as Kt, planOrphanAdoption as L, hasPlainPrototype$1 as La, dockerSpawnEnvWithSensitive as Li, malformedOrphanRecordsRefusalMessage as Ln, isUncertifiedBaselineMaskPosition as Lr, cfnRefValueFromPhysicalId as Lt, refusesFinalSnapshot as M, failedStageNote as Ma, buildDockerImage as Mi, isReadableOrphanRecord as Mn, describeAwsFailure as Mo, createSecretMasker as Mr, disableInstanceApiTermination as Mt, unsupportedFinalSnapshotError as N, globMatches as Na, resolveDockerContextDirectory as Ni, isReadableResourceEntry as Nn, safeStringify$1 as No, dynamicReferenceTokens as Nr, isTerminationProtectionPropagationError as Nt, buildFinalSnapshotIdentifier as O, ambientCredentialConfig as Oa, readBootstrapMarkerBody as Oi, displayLogicalId as On, isTransientServerError as Oo, STATE_SOURCED_CROSS_GENERATION_RULES as Or, UNSPECIFIED_SKIP_REASON as Ot, makeCanonicalizePropertiesFn as P, processStackMessages as Pa, describeDockerCapturedOutput as Pi, malformedExportNamesWarning as Pn, __exportAll as Po, errorCauseChain as Pr, IntrinsicFunctionResolver as Pt, red as Q, AssetError as Qa, Synthesizer as Qi, refuseMalformedOrphanRecords as Qn, buildLockContentionMessage as Qr, configBooleanRefusal as Qt, MULTI_REGION_RECREATE_BLOCKED_TYPES as R, nullPrototypeRecord as Ra, finchSecretArgvRefusal as Ri, malformedOrphanRecordsWarning as Rn, markSameGenerationBag as Rr, coerceParameterTypedValue as Rt, computeParameterTaint as S, decodeListingKey as Sa, BOOTSTRAP_MARKER_PREFIX as Si, INTRINSIC_KEYS as Sn, withErrorHandling as So, findSilentDropProperties as Sr, compositeIdSeparatorRefusal as St, resourcesNamingDeclaredParameter as T, canonicalizeRegion as Ta, getBootstrapMarkerKey as Ti, UNREADABLE_ORPHANS_CONTAINER_ROW as Tn, isMarkedNonRetryable as To, DagBuilder as Tr, createMaskedRetryLogger as Tt, coerceWarmThroughput as U, renderAssemblyPathEscape as Ua, partitionSensitiveEnv as Ui, malformedOutputsWarning as Un, recordMaskOnlyValuesIn as Ur, parameterTypeMayLoseSecretIdentity as Ut, renderStatefulReason as V, describeFileReadFailure as Va, isDockerClientEnvKey as Vi, malformedOrphansWarning as Vn, pathCrossesDottedKey as Vr, isNamelessDynamicReferenceError as Vt, isWarmThroughputDecrease as W, resolveAssemblyPath as Wa, redactDockerArgvValues as Wi, malformedRenderedContainersWarning as Wn, recoverMaskedOutput as Wr, refStateLookupFromResource as Wt, gray as X, runWithStackAwsClients as Xa, AssetManifestLoader as Xi, refuseDivergentRecordRegionForDestroy as Xn, UNREPRODUCIBLE_LOCK_CLAUSE as Xr, coerceCfnBoolean as Xt, cyan as Y, resetAwsClients as Ya, stripControlChars as Yi, previewableOrphanRecords as Yn, rebuildClientForBucketRegion as Yr, assertRegionMatch as Yt, green as Z, setAwsClients as Za, getDockerImageBySourceHash as Zi, refuseMalformedNestedChildOutputs as Zn, buildForceUnlockCommand as Zr, coerceCfnInteger as Zt, bagHoldsSecretExpression as _, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as _a, buildAssetRedirectMap as _i, AWS_CREDENTIAL_ENV_KEYS as _n, StateError as _o, safeRegion as _r, startInterruptWatch as _t, DeploymentEventsStore as a, resolveSkipPrefix as aa, hasReadableExportSet as ai, requireConfigString as an, IntrinsicResolutionRefusalError as ao, refuseMalformedResourceAttributesForOrphan as ar, secretBearingStateKeyWarning as at, mergeNoChangeOutputs as b, producerCoordinateKey as ba, rewriteTemplateAssetReferences as bi, envCredentialsAreAssumedRole as bn, isCdkdError as bo, unreadableOrphanRecords as br, ccProtectionRegistryTypes as bt, replayFailedOperations as c, resolveUseCdkBootstrapAssets as ca, importableOutputKeys as ci, classifyReplaySecretRegion as cn, LockError as co, refuseMalformedResourcePropertiesForOrphan as cr, IAMRoleProvider as ct, updatePartialMessage as d, ssmResolvedValueType as da, orphansAfterRollback as di, s3BucketArn as dn, PartialFailureError as do, repairMalformedOrphanRecordsForReadOnly as dr, ProviderRegistry as dt, getDefaultStateBucketName as ea, formatLockExpiry as ei, configStringRefusal as en, ConfigError as eo, refuseMalformedOrphans as er, collectDeclaredOutputNames as et, updatePartialReason as f, CFN_TEMPLATE_BODY_LIMIT as fa, orphansCarriedFrom as fi, s3BucketDomainName as fn, ProvisioningError as fo, repairMalformedOrphansForReadOnly as fr, wouldReturnToSdkProvider as ft, computeImplicitDeleteEdges as g, uploadCfnTemplate as ga, WorkGraph as gi, applyRoleArnIfSet as gn, StackTerminationProtectionError as go, repairMalformedResourcesForReadOnly as gr, isInterruptedWaitError as gt, IMPLICIT_DELETE_DEPENDENCIES as h, findLargeInlineResources as ha, stringifyValue as hi, s3BucketWebsiteUrl as hn, StackHasActiveImportsError as ho, repairMalformedResourcePropertiesForReadOnly as hr, interruptWatchListenerCount as ht, DeploymentEventsReader as i, resolveCaptureObservedState as ia, exportNamesCarriedFrom as ii, requireConfigObject as in, DynamicReferenceRegionAmbiguousError as io, refuseMalformedOutputsForDestroy as ir, secretBearing as it, isFinalSnapshotError as j, AssemblyReader as ja, buildDenyExternalAccessPolicy as ji, hasReadableResources as jn, retryClassificationText as jo, carriesSecretMask as jr, isWaitAbandonedError as jt, ccRoutedFinalSnapshotError as k, clientDefaultsFor as ka, validateAssetBucketName as ki, hasReadableOrphans as kn, markNonRetryable as ko, STATE_SOURCED_READBACK_RULES as kr, deleteIndeterminateGuards as kt, replayRollback as l, stateBucketExistenceConfirmed as la, importableOutputs as li, producerRegionsFromState as ln, MalformedProducerRecordRefusalError as lo, refuseMalformedResourcesForDestroy as lr, collectInlinePolicyNamesManagedBySiblings as lt, maskingRetryLogger as m, MIGRATE_TMP_PREFIX as ma, AssetPublisher as mi, s3BucketRegionalDomainName as mn, ResourceUpdateNotSupportedError as mo, repairMalformedResourceEntriesForReadOnly as mr, endCommandInterruptScope as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, resolveApp as na, DEFAULT_STATE_PREFIX as ni, replayWarn as nn, DependencyError as no, refuseMalformedOrphansForOrphan as nr, exportAliasCollisionScrubWarning as nt, planFailedOps as o, resolveStateBucketWithDefault as oa, hasReasonlessBaselineRefusal as oi, definedAttributes as on, LocalInvokeBuildError as oo, refuseMalformedResourceEntries as or, secretSafeKeyDisplay as ot, withResourceDeadline as p, CFN_TEMPLATE_URL_LIMIT as pa, shouldRetainResource as pi, s3BucketDualStackDomainName as pn, ResourceTimeoutError as po, repairMalformedOutputsForReadOnly as pr, beginCommandInterruptScope as pt, formatResourceLine as q, AwsClients as qa, warnFinchArgvExposure as qi, malformedResourcesWarning as qn, LockManager as qr, normalizeAwsTagsToCfn as qt, DeployEngine as r, resolveAutoAssetStorage as ra, describeRegionValueKind as ri, requireConfigArray as rn, DeployCancelledError as ro, refuseMalformedOutputs as rr, isExportAliasCollision as rt, planRollback as s, resolveStateBucketWithDefaultAndSource as sa, hasUnverifiableParameterRefusal as si, stringifyIfAssigned as sn, LocalStartServiceError as so, refuseMalformedResourceEntriesForOrphan as sr, getCurrentResourceSecrets as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, getLegacyStateBucketName as ta, CUSTOM_RESOURCE_RESPONSE_PREFIX as ti, readConfigString as tn, CrossAccountSecretRefusalError as to, refuseMalformedOrphansForDestroy as tr, collectPublishedOutputNames as tt, resolveReplacementOldType as u, warnDeprecatedNoPrefixCliFlag as ua, isReadableBag as ui, withSharedDrainBudget as un, NestedStackChildDirectDestroyError as uo, refuseMalformedState as ur, clearOnUpdateRemoval as ut, isSecretBearingReferenceString as v, injectiveKey as va, createAssetRedirectResolver as vi, applyCallerIdentityCredentials as vn, SynthesisError as vo, safeStackName as vr, CloudControlProvider as vt, reachableDivergentParameters as w, PARTITION_TABLE as wa, ensureAssetStorage as wi, STATE_RESOURCES_MALFORMED as wn, shellQuote as wo, withRetry as wr, packCompositeId as wt, bindingSkippedOutputs as x, producerRecordKey as xa, AssetModeResolver as xi, DiffCalculator as xn, normalizeAwsError as xo, findActionableSilentDrops as xr, compositeIdFormatMessage as xt, keptWholeReasonText as y, injectiveKeyPrefix as ya, loadPublishableAssetManifest as yi, callerEnvCredentials as yn, formatError as yo, unpreviewableOrphanRecords as yr, slowCcOperationTimeoutMs as yt, isStatefulRecreateTargetForReplace as z, ownValue as za, formatDockerLoginError as zi, malformedOrphanRowsKeptWarning as zn, maskSecretsInError as zr, getAccountInfo as zt };
|
|
53598
|
+
//# sourceMappingURL=deploy-engine-BZps_IKn.js.map
|