@go-to-k/cdkd 0.260.0 → 0.260.2
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/cli.js +191 -57
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -43,7 +43,7 @@ import readline from "node:readline/promises";
|
|
|
43
43
|
import { writeFileSync as writeFileSync$1 } from "fs";
|
|
44
44
|
import * as zlib from "node:zlib";
|
|
45
45
|
import { ApplicationAutoScalingClient, DeleteScalingPolicyCommand, DeregisterScalableTargetCommand, DescribeScalableTargetsCommand, DescribeScalingPoliciesCommand, PutScalingPolicyCommand, RegisterScalableTargetCommand } from "@aws-sdk/client-application-auto-scaling";
|
|
46
|
-
import { ApiGatewayV2Client, CreateApiCommand, CreateAuthorizerCommand as CreateAuthorizerCommand$1, CreateIntegrationCommand, CreateRouteCommand as CreateRouteCommand$1, CreateStageCommand as CreateStageCommand$1, DeleteApiCommand, DeleteAuthorizerCommand as DeleteAuthorizerCommand$1, DeleteIntegrationCommand, DeleteRouteCommand as DeleteRouteCommand$1, DeleteStageCommand as DeleteStageCommand$1, GetApiCommand, GetAuthorizerCommand as GetAuthorizerCommand$1, GetIntegrationCommand, GetRouteCommand, GetStageCommand as GetStageCommand$1, NotFoundException as NotFoundException$3, UpdateApiCommand, UpdateAuthorizerCommand as UpdateAuthorizerCommand$1, UpdateIntegrationCommand, UpdateRouteCommand, UpdateStageCommand as UpdateStageCommand$1 } from "@aws-sdk/client-apigatewayv2";
|
|
46
|
+
import { ApiGatewayV2Client, CreateApiCommand, CreateAuthorizerCommand as CreateAuthorizerCommand$1, CreateIntegrationCommand, CreateRouteCommand as CreateRouteCommand$1, CreateStageCommand as CreateStageCommand$1, DeleteApiCommand, DeleteAuthorizerCommand as DeleteAuthorizerCommand$1, DeleteCorsConfigurationCommand, DeleteIntegrationCommand, DeleteRouteCommand as DeleteRouteCommand$1, DeleteStageCommand as DeleteStageCommand$1, GetApiCommand, GetAuthorizerCommand as GetAuthorizerCommand$1, GetIntegrationCommand, GetRouteCommand, GetStageCommand as GetStageCommand$1, NotFoundException as NotFoundException$3, UpdateApiCommand, UpdateAuthorizerCommand as UpdateAuthorizerCommand$1, UpdateIntegrationCommand, UpdateRouteCommand, UpdateStageCommand as UpdateStageCommand$1 } from "@aws-sdk/client-apigatewayv2";
|
|
47
47
|
import { CreateStateMachineCommand, DeleteStateMachineCommand, DescribeStateMachineCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$11, SFNClient, StateMachineDoesNotExist, TagResourceCommand as TagResourceCommand$13, UntagResourceCommand as UntagResourceCommand$13, UpdateStateMachineCommand } from "@aws-sdk/client-sfn";
|
|
48
48
|
import { CreateClusterCommand, CreateServiceCommand, DeleteClusterCommand, DeleteServiceCommand, DeregisterTaskDefinitionCommand, DescribeClustersCommand, DescribeServicesCommand, DescribeTaskDefinitionCommand, ECSClient, PutClusterCapacityProvidersCommand, RegisterTaskDefinitionCommand, TagResourceCommand as TagResourceCommand$14, UntagResourceCommand as UntagResourceCommand$14, UpdateClusterCommand, UpdateServiceCommand } from "@aws-sdk/client-ecs";
|
|
49
49
|
import { AddTagsToResourceCommand as AddTagsToResourceCommand$3, CreateDBClusterCommand as CreateDBClusterCommand$1, CreateDBInstanceCommand as CreateDBInstanceCommand$1, CreateDBSubnetGroupCommand as CreateDBSubnetGroupCommand$1, DeleteDBClusterCommand as DeleteDBClusterCommand$1, DeleteDBInstanceCommand as DeleteDBInstanceCommand$1, DeleteDBSubnetGroupCommand as DeleteDBSubnetGroupCommand$1, DescribeDBClustersCommand as DescribeDBClustersCommand$1, DescribeDBInstancesCommand as DescribeDBInstancesCommand$1, DescribeDBSubnetGroupsCommand as DescribeDBSubnetGroupsCommand$1, DocDBClient, ListTagsForResourceCommand as ListTagsForResourceCommand$12, ModifyDBClusterCommand as ModifyDBClusterCommand$1, ModifyDBInstanceCommand as ModifyDBInstanceCommand$1, ModifyDBSubnetGroupCommand as ModifyDBSubnetGroupCommand$1, RemoveTagsFromResourceCommand as RemoveTagsFromResourceCommand$3 } from "@aws-sdk/client-docdb";
|
|
@@ -1901,7 +1901,7 @@ const FLUSH_INTERVAL_MS = 2e3;
|
|
|
1901
1901
|
const FLUSH_EVENT_THRESHOLD = 50;
|
|
1902
1902
|
/** Build-time cdkd version, with a dev fallback for non-built contexts. */
|
|
1903
1903
|
function getCdkdVersion() {
|
|
1904
|
-
return "0.260.
|
|
1904
|
+
return "0.260.2";
|
|
1905
1905
|
}
|
|
1906
1906
|
/**
|
|
1907
1907
|
* Generate a time-sortable unique run id, e.g.
|
|
@@ -8519,7 +8519,7 @@ var LambdaFunctionProvider = class {
|
|
|
8519
8519
|
Timeout: this.clearOnUpdateRemoval(properties["Timeout"], previousProperties["Timeout"], 3),
|
|
8520
8520
|
MemorySize: this.clearOnUpdateRemoval(properties["MemorySize"], previousProperties["MemorySize"], 128),
|
|
8521
8521
|
Description: this.clearOnUpdateRemoval(properties["Description"], previousProperties["Description"], ""),
|
|
8522
|
-
Environment: this.clearOnUpdateRemoval(properties["Environment"], previousProperties["Environment"], { Variables: {} }),
|
|
8522
|
+
Environment: this.clearOnUpdateRemoval(this.normalizeEnvironmentForUpdate(properties["Environment"]), previousProperties["Environment"], { Variables: {} }),
|
|
8523
8523
|
Layers: this.clearOnUpdateRemoval(properties["Layers"], previousProperties["Layers"], []),
|
|
8524
8524
|
TracingConfig: this.clearOnUpdateRemoval(properties["TracingConfig"], previousProperties["TracingConfig"], { Mode: "PassThrough" }),
|
|
8525
8525
|
EphemeralStorage: this.clearOnUpdateRemoval(properties["EphemeralStorage"], previousProperties["EphemeralStorage"], { Size: 512 }),
|
|
@@ -8690,6 +8690,25 @@ var LambdaFunctionProvider = class {
|
|
|
8690
8690
|
if (previousValue !== void 0) return clearValue;
|
|
8691
8691
|
}
|
|
8692
8692
|
/**
|
|
8693
|
+
* Normalize a template `Environment` block for UpdateFunctionConfiguration.
|
|
8694
|
+
*
|
|
8695
|
+
* `Environment: {}` (present, but no `Variables` key — a hand-written L1 /
|
|
8696
|
+
* imported-template shape CDK never emits) passed through verbatim does NOT
|
|
8697
|
+
* clear the live env vars: the API keeps the old `Variables` when the input
|
|
8698
|
+
* `Environment` carries none (live-verified 2026-07-22, issue #1158). The
|
|
8699
|
+
* template's declarative meaning is "no env vars", so a Variables-less
|
|
8700
|
+
* block is rewritten to the explicit-clear `{Variables: {}}`. A present
|
|
8701
|
+
* `Variables` map (even empty) and an absent `Environment` pass through
|
|
8702
|
+
* unchanged — removal handling stays with `clearOnUpdateRemoval`. A `null`
|
|
8703
|
+
* block (hand-written JSON) is treated like absent rather than crashing on
|
|
8704
|
+
* the property read.
|
|
8705
|
+
*/
|
|
8706
|
+
normalizeEnvironmentForUpdate(environment) {
|
|
8707
|
+
if (environment == null) return void 0;
|
|
8708
|
+
if (environment.Variables === void 0) return { Variables: {} };
|
|
8709
|
+
return environment;
|
|
8710
|
+
}
|
|
8711
|
+
/**
|
|
8693
8712
|
* Determine whether the function actually attaches to a VPC, i.e. has at
|
|
8694
8713
|
* least one Subnet ID. A bare VpcConfig with empty arrays does not create
|
|
8695
8714
|
* any ENIs, so we skip the wait in that case.
|
|
@@ -19332,35 +19351,51 @@ var ApiGatewayV2Provider = class {
|
|
|
19332
19351
|
input.Name = properties["Name"];
|
|
19333
19352
|
changed = true;
|
|
19334
19353
|
}
|
|
19335
|
-
|
|
19336
|
-
|
|
19337
|
-
changed
|
|
19354
|
+
{
|
|
19355
|
+
const r = this.clearableUpdate(properties["Description"], previousProperties["Description"], "");
|
|
19356
|
+
if (r.changed) {
|
|
19357
|
+
input.Description = r.value;
|
|
19358
|
+
changed = true;
|
|
19359
|
+
}
|
|
19338
19360
|
}
|
|
19339
19361
|
if (properties["CorsConfiguration"] !== void 0 && !this.deepEqual(properties["CorsConfiguration"], previousProperties["CorsConfiguration"])) {
|
|
19340
19362
|
input.CorsConfiguration = properties["CorsConfiguration"];
|
|
19341
19363
|
changed = true;
|
|
19342
19364
|
}
|
|
19343
|
-
|
|
19344
|
-
|
|
19345
|
-
|
|
19365
|
+
const corsRemoved = properties["CorsConfiguration"] === void 0 && previousProperties["CorsConfiguration"] !== void 0;
|
|
19366
|
+
{
|
|
19367
|
+
const r = this.clearableUpdate(properties["DisableExecuteApiEndpoint"], previousProperties["DisableExecuteApiEndpoint"], false);
|
|
19368
|
+
if (r.changed) {
|
|
19369
|
+
input.DisableExecuteApiEndpoint = r.value;
|
|
19370
|
+
changed = true;
|
|
19371
|
+
}
|
|
19346
19372
|
}
|
|
19347
|
-
|
|
19348
|
-
|
|
19349
|
-
changed
|
|
19373
|
+
{
|
|
19374
|
+
const r = this.clearableUpdate(properties["Version"], previousProperties["Version"], "");
|
|
19375
|
+
if (r.changed) {
|
|
19376
|
+
input.Version = r.value;
|
|
19377
|
+
changed = true;
|
|
19378
|
+
}
|
|
19350
19379
|
}
|
|
19351
19380
|
if (properties["RouteSelectionExpression"] !== void 0 && properties["RouteSelectionExpression"] !== previousProperties["RouteSelectionExpression"]) {
|
|
19352
19381
|
input.RouteSelectionExpression = properties["RouteSelectionExpression"];
|
|
19353
19382
|
changed = true;
|
|
19354
19383
|
}
|
|
19355
|
-
|
|
19356
|
-
|
|
19357
|
-
changed
|
|
19384
|
+
{
|
|
19385
|
+
const r = this.clearableUpdate(properties["ApiKeySelectionExpression"], previousProperties["ApiKeySelectionExpression"], "$request.header.x-api-key");
|
|
19386
|
+
if (r.changed) {
|
|
19387
|
+
input.ApiKeySelectionExpression = r.value;
|
|
19388
|
+
changed = true;
|
|
19389
|
+
}
|
|
19358
19390
|
}
|
|
19359
|
-
|
|
19360
|
-
|
|
19361
|
-
changed
|
|
19391
|
+
{
|
|
19392
|
+
const r = this.clearableUpdate(properties["IpAddressType"], previousProperties["IpAddressType"], "ipv4");
|
|
19393
|
+
if (r.changed) {
|
|
19394
|
+
input.IpAddressType = r.value;
|
|
19395
|
+
changed = true;
|
|
19396
|
+
}
|
|
19362
19397
|
}
|
|
19363
|
-
if (!changed) {
|
|
19398
|
+
if (!changed && !corsRemoved) {
|
|
19364
19399
|
this.logger.debug(`No mutable Api fields changed for ${logicalId}; skipping UpdateApi`);
|
|
19365
19400
|
return {
|
|
19366
19401
|
physicalId,
|
|
@@ -19369,7 +19404,11 @@ var ApiGatewayV2Provider = class {
|
|
|
19369
19404
|
}
|
|
19370
19405
|
this.logger.debug(`Updating API Gateway V2 Api ${logicalId}: ${physicalId}`);
|
|
19371
19406
|
try {
|
|
19372
|
-
await this.getClient().send(new UpdateApiCommand(input));
|
|
19407
|
+
if (changed) await this.getClient().send(new UpdateApiCommand(input));
|
|
19408
|
+
if (corsRemoved) {
|
|
19409
|
+
this.logger.debug(`Clearing CORS configuration for Api ${logicalId}: ${physicalId}`);
|
|
19410
|
+
await this.getClient().send(new DeleteCorsConfigurationCommand({ ApiId: physicalId }));
|
|
19411
|
+
}
|
|
19373
19412
|
return {
|
|
19374
19413
|
physicalId,
|
|
19375
19414
|
wasReplaced: false
|
|
@@ -19396,17 +19435,23 @@ var ApiGatewayV2Provider = class {
|
|
|
19396
19435
|
StageName: physicalId
|
|
19397
19436
|
};
|
|
19398
19437
|
let changed = false;
|
|
19399
|
-
|
|
19400
|
-
|
|
19401
|
-
changed
|
|
19438
|
+
{
|
|
19439
|
+
const r = this.clearableUpdate(properties["AutoDeploy"], previousProperties["AutoDeploy"], false);
|
|
19440
|
+
if (r.changed) {
|
|
19441
|
+
input.AutoDeploy = r.value;
|
|
19442
|
+
changed = true;
|
|
19443
|
+
}
|
|
19402
19444
|
}
|
|
19403
19445
|
if (properties["Description"] !== void 0 && properties["Description"] !== previousProperties["Description"]) {
|
|
19404
19446
|
input.Description = properties["Description"];
|
|
19405
19447
|
changed = true;
|
|
19406
19448
|
}
|
|
19407
|
-
|
|
19408
|
-
|
|
19409
|
-
|
|
19449
|
+
{
|
|
19450
|
+
const merged = this.mapWithRemovals(properties["StageVariables"], previousProperties["StageVariables"]);
|
|
19451
|
+
if (merged !== void 0) {
|
|
19452
|
+
input.StageVariables = merged;
|
|
19453
|
+
changed = true;
|
|
19454
|
+
}
|
|
19410
19455
|
}
|
|
19411
19456
|
if (properties["DefaultRouteSettings"] !== void 0 && !this.deepEqual(properties["DefaultRouteSettings"], previousProperties["DefaultRouteSettings"])) {
|
|
19412
19457
|
input.DefaultRouteSettings = properties["DefaultRouteSettings"];
|
|
@@ -19466,13 +19511,19 @@ var ApiGatewayV2Provider = class {
|
|
|
19466
19511
|
input.TimeoutInMillis = properties["TimeoutInMillis"];
|
|
19467
19512
|
changed = true;
|
|
19468
19513
|
}
|
|
19469
|
-
|
|
19470
|
-
|
|
19471
|
-
|
|
19514
|
+
{
|
|
19515
|
+
const merged = this.mapWithRemovals(properties["RequestParameters"], previousProperties["RequestParameters"]);
|
|
19516
|
+
if (merged !== void 0) {
|
|
19517
|
+
input.RequestParameters = merged;
|
|
19518
|
+
changed = true;
|
|
19519
|
+
}
|
|
19472
19520
|
}
|
|
19473
|
-
|
|
19474
|
-
|
|
19475
|
-
changed
|
|
19521
|
+
{
|
|
19522
|
+
const r = this.clearableUpdate(properties["Description"], previousProperties["Description"], "");
|
|
19523
|
+
if (r.changed) {
|
|
19524
|
+
input.Description = r.value;
|
|
19525
|
+
changed = true;
|
|
19526
|
+
}
|
|
19476
19527
|
}
|
|
19477
19528
|
if (!changed) {
|
|
19478
19529
|
this.logger.debug(`No mutable Integration fields changed for ${logicalId}; skipping UpdateIntegration`);
|
|
@@ -19515,21 +19566,33 @@ var ApiGatewayV2Provider = class {
|
|
|
19515
19566
|
input.Target = properties["Target"];
|
|
19516
19567
|
changed = true;
|
|
19517
19568
|
}
|
|
19518
|
-
|
|
19519
|
-
|
|
19520
|
-
changed
|
|
19569
|
+
{
|
|
19570
|
+
const r = this.clearableUpdate(properties["AuthorizationType"], previousProperties["AuthorizationType"], "NONE");
|
|
19571
|
+
if (r.changed) {
|
|
19572
|
+
input.AuthorizationType = r.value;
|
|
19573
|
+
changed = true;
|
|
19574
|
+
}
|
|
19521
19575
|
}
|
|
19522
|
-
|
|
19523
|
-
|
|
19524
|
-
changed
|
|
19576
|
+
{
|
|
19577
|
+
const r = this.clearableUpdate(properties["AuthorizerId"], previousProperties["AuthorizerId"], "");
|
|
19578
|
+
if (r.changed) {
|
|
19579
|
+
input.AuthorizerId = r.value;
|
|
19580
|
+
changed = true;
|
|
19581
|
+
}
|
|
19525
19582
|
}
|
|
19526
|
-
|
|
19527
|
-
|
|
19528
|
-
changed
|
|
19583
|
+
{
|
|
19584
|
+
const r = this.clearableUpdate(properties["AuthorizationScopes"], previousProperties["AuthorizationScopes"], []);
|
|
19585
|
+
if (r.changed) {
|
|
19586
|
+
input.AuthorizationScopes = r.value;
|
|
19587
|
+
changed = true;
|
|
19588
|
+
}
|
|
19529
19589
|
}
|
|
19530
|
-
|
|
19531
|
-
|
|
19532
|
-
changed
|
|
19590
|
+
{
|
|
19591
|
+
const r = this.clearableUpdate(properties["OperationName"], previousProperties["OperationName"], "");
|
|
19592
|
+
if (r.changed) {
|
|
19593
|
+
input.OperationName = r.value;
|
|
19594
|
+
changed = true;
|
|
19595
|
+
}
|
|
19533
19596
|
}
|
|
19534
19597
|
if (!changed) {
|
|
19535
19598
|
this.logger.debug(`No mutable Route fields changed for ${logicalId}; skipping UpdateRoute`);
|
|
@@ -19590,25 +19653,37 @@ var ApiGatewayV2Provider = class {
|
|
|
19590
19653
|
input.AuthorizerUri = properties["AuthorizerUri"];
|
|
19591
19654
|
changed = true;
|
|
19592
19655
|
}
|
|
19593
|
-
|
|
19594
|
-
|
|
19595
|
-
changed
|
|
19656
|
+
{
|
|
19657
|
+
const r = this.clearableUpdate(properties["AuthorizerCredentialsArn"], previousProperties["AuthorizerCredentialsArn"], "");
|
|
19658
|
+
if (r.changed) {
|
|
19659
|
+
input.AuthorizerCredentialsArn = r.value;
|
|
19660
|
+
changed = true;
|
|
19661
|
+
}
|
|
19596
19662
|
}
|
|
19597
|
-
|
|
19598
|
-
|
|
19599
|
-
changed
|
|
19663
|
+
{
|
|
19664
|
+
const r = this.clearableUpdate(properties["AuthorizerPayloadFormatVersion"], previousProperties["AuthorizerPayloadFormatVersion"], "");
|
|
19665
|
+
if (r.changed) {
|
|
19666
|
+
input.AuthorizerPayloadFormatVersion = r.value;
|
|
19667
|
+
changed = true;
|
|
19668
|
+
}
|
|
19600
19669
|
}
|
|
19601
|
-
|
|
19602
|
-
|
|
19603
|
-
changed
|
|
19670
|
+
{
|
|
19671
|
+
const r = this.clearableUpdate(properties["AuthorizerResultTtlInSeconds"], previousProperties["AuthorizerResultTtlInSeconds"], 0);
|
|
19672
|
+
if (r.changed) {
|
|
19673
|
+
input.AuthorizerResultTtlInSeconds = r.value;
|
|
19674
|
+
changed = true;
|
|
19675
|
+
}
|
|
19604
19676
|
}
|
|
19605
19677
|
if (properties["EnableSimpleResponses"] !== void 0 && properties["EnableSimpleResponses"] !== previousProperties["EnableSimpleResponses"]) {
|
|
19606
19678
|
input.EnableSimpleResponses = properties["EnableSimpleResponses"];
|
|
19607
19679
|
changed = true;
|
|
19608
19680
|
}
|
|
19609
|
-
|
|
19610
|
-
|
|
19611
|
-
changed
|
|
19681
|
+
{
|
|
19682
|
+
const r = this.clearableUpdate(properties["IdentityValidationExpression"], previousProperties["IdentityValidationExpression"], "");
|
|
19683
|
+
if (r.changed) {
|
|
19684
|
+
input.IdentityValidationExpression = r.value;
|
|
19685
|
+
changed = true;
|
|
19686
|
+
}
|
|
19612
19687
|
}
|
|
19613
19688
|
if (!changed) {
|
|
19614
19689
|
this.logger.debug(`No mutable Authorizer fields changed for ${logicalId}; skipping UpdateAuthorizer`);
|
|
@@ -19630,6 +19705,65 @@ var ApiGatewayV2Provider = class {
|
|
|
19630
19705
|
}
|
|
19631
19706
|
}
|
|
19632
19707
|
/**
|
|
19708
|
+
* Resolve an optional update field so that a property REMOVED from the
|
|
19709
|
+
* template is reset to its CloudFormation default instead of silently
|
|
19710
|
+
* retaining the old live value (issue #1160 — the absent-field removal
|
|
19711
|
+
* silent-drop bug class; reference fix `LambdaFunctionProvider`, #1157).
|
|
19712
|
+
*
|
|
19713
|
+
* Every API Gateway V2 `Update*` API uses PATCH / merge semantics: an
|
|
19714
|
+
* ABSENT input field means "no change", so passing `undefined` for a
|
|
19715
|
+
* field the user just dropped leaves the old value live on AWS while
|
|
19716
|
+
* CloudFormation resets it to the property default. For each removable
|
|
19717
|
+
* field we therefore send its explicit reset value (`resetValue`) when
|
|
19718
|
+
* it was present before and is now absent.
|
|
19719
|
+
*
|
|
19720
|
+
* The reset values below were live-probed against real AWS (2026-07-22):
|
|
19721
|
+
* string fields clear on `''`, boolean/enum fields on their CFn default,
|
|
19722
|
+
* `AuthorizationScopes` on `[]`, `AuthorizerResultTtlInSeconds` on `0`.
|
|
19723
|
+
* `CorsConfiguration` is the ONE exception — an empty `Cors` in
|
|
19724
|
+
* `UpdateApi` does NOT clear it, so removal is handled out-of-band via
|
|
19725
|
+
* `DeleteCorsConfiguration` (see `updateApi`). Fields that are required
|
|
19726
|
+
* per protocol/authorizer type (`Name`, `RouteKey`, `Target`,
|
|
19727
|
+
* `RouteSelectionExpression`, `IntegrationType`/`Uri`/`Method`,
|
|
19728
|
+
* `PayloadFormatVersion`, `IdentitySource`, `JwtConfiguration`,
|
|
19729
|
+
* `EnableSimpleResponses`) are NOT cleared: the underlying API rejects a
|
|
19730
|
+
* reset value for them, so CloudFormation faces the same constraint and
|
|
19731
|
+
* cdkd leaving them matches CFn. `Stage.Description` /
|
|
19732
|
+
* `DefaultRouteSettings` are likewise left alone — the API silently
|
|
19733
|
+
* ignores an empty-string / empty-object reset for them.
|
|
19734
|
+
*
|
|
19735
|
+
* Returns `{ changed, value }`: `changed` is true only when the resolved
|
|
19736
|
+
* value actually differs from the previous one (so a no-op field never
|
|
19737
|
+
* forces an Update call), and `value` is the value to place in the input.
|
|
19738
|
+
*/
|
|
19739
|
+
clearableUpdate(next, previous, resetValue) {
|
|
19740
|
+
const resolved = next !== void 0 ? next : previous !== void 0 ? resetValue : void 0;
|
|
19741
|
+
return {
|
|
19742
|
+
changed: resolved !== void 0 && !this.deepEqual(resolved, previous),
|
|
19743
|
+
value: resolved
|
|
19744
|
+
};
|
|
19745
|
+
}
|
|
19746
|
+
/**
|
|
19747
|
+
* Resolve a `Record<string, string>` update field (`StageVariables`,
|
|
19748
|
+
* Integration `RequestParameters`) with per-key removal awareness.
|
|
19749
|
+
*
|
|
19750
|
+
* These maps also merge on the AWS side: sending `{}` (or a map missing
|
|
19751
|
+
* a previously-present key) does NOT delete the dropped key — it is kept
|
|
19752
|
+
* live. Live-probed 2026-07-22: a key is cleared only by sending it with
|
|
19753
|
+
* an empty-string value. So the resolved map is `next` plus every key
|
|
19754
|
+
* present in `previous` but absent from `next`, set to `''`. Whole-block
|
|
19755
|
+
* removal (next `undefined`, previous populated) therefore sends every
|
|
19756
|
+
* old key as `''`. Returns `undefined` when nothing changed.
|
|
19757
|
+
*/
|
|
19758
|
+
mapWithRemovals(next, previous) {
|
|
19759
|
+
if (this.deepEqual(next, previous)) return void 0;
|
|
19760
|
+
const nextMap = next ?? {};
|
|
19761
|
+
const prevMap = previous ?? {};
|
|
19762
|
+
const merged = { ...nextMap };
|
|
19763
|
+
for (const key of Object.keys(prevMap)) if (!(key in nextMap)) merged[key] = "";
|
|
19764
|
+
return merged;
|
|
19765
|
+
}
|
|
19766
|
+
/**
|
|
19633
19767
|
* Convert CloudFormation Tags (Array<{Key, Value}>) to SDK Tags (Record<string, string>).
|
|
19634
19768
|
*/
|
|
19635
19769
|
cfnTagsToRecord(tags) {
|
|
@@ -61349,7 +61483,7 @@ function createMigrateCommand() {
|
|
|
61349
61483
|
*/
|
|
61350
61484
|
function buildProgram() {
|
|
61351
61485
|
const program = new Command();
|
|
61352
|
-
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.260.
|
|
61486
|
+
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.260.2");
|
|
61353
61487
|
program.addCommand(createBootstrapCommand());
|
|
61354
61488
|
program.addCommand(createSynthCommand());
|
|
61355
61489
|
program.addCommand(createListCommand());
|