@go-to-k/cdkd 0.260.3 → 0.260.5

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 CHANGED
@@ -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.3";
1904
+ return "0.260.5";
1905
1905
  }
1906
1906
  /**
1907
1907
  * Generate a time-sortable unique run id, e.g.
@@ -21858,6 +21858,23 @@ function convertTags(tags) {
21858
21858
  }));
21859
21859
  }
21860
21860
  /**
21861
+ * `DeploymentConfiguration.LifecycleHooks[].HookDetails` is a free-form JSON
21862
+ * document (SDK `__DocumentType`) whose inner keys are user-supplied hook
21863
+ * payload fields, NOT CloudFormation property names. The recursive
21864
+ * PascalCase->camelCase key flip must therefore copy its value subtree
21865
+ * verbatim (the `HookDetails` key itself is still flipped to `hookDetails`).
21866
+ * See `convertDeploymentConfiguration`.
21867
+ */
21868
+ const DEPLOYMENT_CONFIG_PRESERVE_KEYS = /* @__PURE__ */ new Set(["HookDetails"]);
21869
+ /**
21870
+ * Read-side (camelCase -> PascalCase) counterpart of
21871
+ * `DEPLOYMENT_CONFIG_PRESERVE_KEYS` for `readCurrentState` (issue #1165 /
21872
+ * #1167). The SDK response carries the free-form document under the camelCase
21873
+ * key `hookDetails`, so the reverse key-flip must copy its value subtree
21874
+ * verbatim (the key itself is still flipped to `HookDetails`).
21875
+ */
21876
+ const DEPLOYMENT_CONFIG_PRESERVE_KEYS_CAMEL = /* @__PURE__ */ new Set(["hookDetails"]);
21877
+ /**
21861
21878
  * AWS ECS Provider
21862
21879
  *
21863
21880
  * Implements resource provisioning for ECS resources:
@@ -21969,8 +21986,8 @@ var ECSProvider = class {
21969
21986
  const cluster = (await client.send(new CreateClusterCommand({
21970
21987
  clusterName,
21971
21988
  capacityProviders: properties["CapacityProviders"],
21972
- defaultCapacityProviderStrategy: properties["DefaultCapacityProviderStrategy"],
21973
- configuration: properties["Configuration"],
21989
+ defaultCapacityProviderStrategy: this.convertCapacityProviderStrategy(properties["DefaultCapacityProviderStrategy"]),
21990
+ configuration: this.convertClusterConfiguration(properties["Configuration"]),
21974
21991
  settings: properties["ClusterSettings"] ? properties["ClusterSettings"].map((s) => ({
21975
21992
  name: s["Name"] || s["name"],
21976
21993
  value: (s["Value"] || s["value"]) ?? void 0
@@ -21997,7 +22014,7 @@ var ECSProvider = class {
21997
22014
  await client.send(new PutClusterCapacityProvidersCommand({
21998
22015
  cluster: physicalId,
21999
22016
  capacityProviders: properties["CapacityProviders"] || [],
22000
- defaultCapacityProviderStrategy: properties["DefaultCapacityProviderStrategy"] || []
22017
+ defaultCapacityProviderStrategy: this.convertCapacityProviderStrategy(properties["DefaultCapacityProviderStrategy"]) || []
22001
22018
  }));
22002
22019
  this.logger.debug(`Updated capacity providers for ECS cluster ${physicalId}`);
22003
22020
  }
@@ -22013,7 +22030,7 @@ var ECSProvider = class {
22013
22030
  await client.send(new UpdateClusterCommand({
22014
22031
  cluster: physicalId,
22015
22032
  ...settingsChanged && { settings: settingsInput },
22016
- ...configChanged && { configuration: properties["Configuration"] },
22033
+ ...configChanged && { configuration: this.convertClusterConfiguration(properties["Configuration"]) },
22017
22034
  ...svcConnectChanged && { serviceConnectDefaults: svcConnectInput }
22018
22035
  }));
22019
22036
  this.logger.debug(`Updated ECS cluster ${physicalId} (settings=${settingsChanged}, config=${configChanged}, svcConnect=${svcConnectChanged})`);
@@ -22068,13 +22085,13 @@ var ECSProvider = class {
22068
22085
  executionRoleArn: properties["ExecutionRoleArn"],
22069
22086
  taskRoleArn: properties["TaskRoleArn"],
22070
22087
  volumes: this.convertVolumes(properties["Volumes"]),
22071
- placementConstraints: properties["PlacementConstraints"],
22088
+ placementConstraints: this.convertTaskDefinitionPlacementConstraints(properties["PlacementConstraints"]),
22072
22089
  tags: convertTags(properties["Tags"]),
22073
- runtimePlatform: properties["RuntimePlatform"],
22074
- proxyConfiguration: properties["ProxyConfiguration"],
22090
+ runtimePlatform: this.convertRuntimePlatform(properties["RuntimePlatform"]),
22091
+ proxyConfiguration: this.convertProxyConfiguration(properties["ProxyConfiguration"]),
22075
22092
  pidMode: properties["PidMode"],
22076
22093
  ipcMode: properties["IpcMode"],
22077
- ephemeralStorage: properties["EphemeralStorage"],
22094
+ ephemeralStorage: this.convertEphemeralStorage(properties["EphemeralStorage"]),
22078
22095
  enableFaultInjection: properties["EnableFaultInjection"]
22079
22096
  }))).taskDefinition;
22080
22097
  if (!taskDef || !taskDef.taskDefinitionArn) throw new Error("RegisterTaskDefinition did not return task definition ARN");
@@ -22128,17 +22145,17 @@ var ECSProvider = class {
22128
22145
  launchType: properties["LaunchType"],
22129
22146
  networkConfiguration: this.convertNetworkConfiguration(properties["NetworkConfiguration"]),
22130
22147
  loadBalancers: this.convertLoadBalancers(properties["LoadBalancers"]),
22131
- capacityProviderStrategy: properties["CapacityProviderStrategy"],
22132
- deploymentConfiguration: properties["DeploymentConfiguration"],
22133
- placementConstraints: properties["PlacementConstraints"],
22134
- placementStrategy: properties["PlacementStrategies"] ?? properties["PlacementStrategy"],
22148
+ capacityProviderStrategy: this.convertCapacityProviderStrategy(properties["CapacityProviderStrategy"]),
22149
+ deploymentConfiguration: this.convertDeploymentConfiguration(properties["DeploymentConfiguration"]),
22150
+ placementConstraints: this.convertPlacementConstraints(properties["PlacementConstraints"]),
22151
+ placementStrategy: this.convertPlacementStrategies(properties["PlacementStrategies"] ?? properties["PlacementStrategy"]),
22135
22152
  platformVersion: properties["PlatformVersion"],
22136
22153
  healthCheckGracePeriodSeconds: properties["HealthCheckGracePeriodSeconds"],
22137
22154
  schedulingStrategy: properties["SchedulingStrategy"],
22138
22155
  enableECSManagedTags: properties["EnableECSManagedTags"],
22139
22156
  propagateTags: properties["PropagateTags"],
22140
22157
  enableExecuteCommand: properties["EnableExecuteCommand"],
22141
- serviceRegistries: properties["ServiceRegistries"],
22158
+ serviceRegistries: this.convertServiceRegistries(properties["ServiceRegistries"]),
22142
22159
  tags: convertTags(properties["Tags"])
22143
22160
  }))).service;
22144
22161
  if (!service || !service.serviceArn) throw new Error("CreateService did not return service ARN");
@@ -22167,10 +22184,10 @@ var ECSProvider = class {
22167
22184
  const serviceRegistriesChanged = JSON.stringify(previousProperties["ServiceRegistries"] ?? null) !== JSON.stringify(properties["ServiceRegistries"] ?? null);
22168
22185
  if (!isEcsController && (loadBalancersChanged || serviceRegistriesChanged)) throw new ProvisioningError(`AWS::ECS::Service '${logicalId}' changes LoadBalancers/ServiceRegistries under the '${deploymentControllerType}' deployment controller, which applies them via a new CodeDeploy deployment / task set rather than UpdateService. cdkd does not support updating these under a non-ECS controller; recreate the service or manage the blue/green deployment out-of-band.`, resourceType, logicalId, physicalId);
22169
22186
  const loadBalancersInput = isEcsController && loadBalancersChanged ? this.convertLoadBalancers(properties["LoadBalancers"]) ?? [] : void 0;
22170
- const serviceRegistriesInput = isEcsController && serviceRegistriesChanged ? properties["ServiceRegistries"] ?? [] : void 0;
22171
- const capacityProviderStrategyInput = this.clearOnUpdateRemoval(properties["CapacityProviderStrategy"], previousProperties["CapacityProviderStrategy"], []);
22172
- const placementConstraintsInput = this.clearOnUpdateRemoval(properties["PlacementConstraints"], previousProperties["PlacementConstraints"], []);
22173
- const placementStrategyInput = this.clearOnUpdateRemoval(properties["PlacementStrategies"] ?? properties["PlacementStrategy"], previousProperties["PlacementStrategies"] ?? previousProperties["PlacementStrategy"], []);
22187
+ const serviceRegistriesInput = isEcsController && serviceRegistriesChanged ? this.convertServiceRegistries(properties["ServiceRegistries"]) ?? [] : void 0;
22188
+ const capacityProviderStrategyInput = this.clearOnUpdateRemoval(this.convertCapacityProviderStrategy(properties["CapacityProviderStrategy"]), previousProperties["CapacityProviderStrategy"], []);
22189
+ const placementConstraintsInput = this.clearOnUpdateRemoval(this.convertPlacementConstraints(properties["PlacementConstraints"]), previousProperties["PlacementConstraints"], []);
22190
+ const placementStrategyInput = this.clearOnUpdateRemoval(this.convertPlacementStrategies(properties["PlacementStrategies"] ?? properties["PlacementStrategy"]), previousProperties["PlacementStrategies"] ?? previousProperties["PlacementStrategy"], []);
22174
22191
  const platformVersionInput = this.clearOnUpdateRemoval(properties["PlatformVersion"], previousProperties["PlatformVersion"], "LATEST");
22175
22192
  const healthCheckGracePeriodSecondsInput = this.clearOnUpdateRemoval(properties["HealthCheckGracePeriodSeconds"], previousProperties["HealthCheckGracePeriodSeconds"], 0);
22176
22193
  const enableECSManagedTagsInput = this.clearOnUpdateRemoval(properties["EnableECSManagedTags"], previousProperties["EnableECSManagedTags"], false);
@@ -22184,7 +22201,7 @@ var ECSProvider = class {
22184
22201
  desiredCount: properties["DesiredCount"],
22185
22202
  networkConfiguration: this.convertNetworkConfiguration(properties["NetworkConfiguration"]),
22186
22203
  capacityProviderStrategy: capacityProviderStrategyInput,
22187
- deploymentConfiguration: properties["DeploymentConfiguration"],
22204
+ deploymentConfiguration: this.convertDeploymentConfiguration(properties["DeploymentConfiguration"]),
22188
22205
  placementConstraints: placementConstraintsInput,
22189
22206
  placementStrategy: placementStrategyInput,
22190
22207
  platformVersion: platformVersionInput,
@@ -22335,7 +22352,7 @@ var ECSProvider = class {
22335
22352
  ulimits: this.convertUlimits(def["Ulimits"]),
22336
22353
  logConfiguration: this.convertLogConfiguration(def["LogConfiguration"]),
22337
22354
  healthCheck: this.convertHealthCheck(def["HealthCheck"]),
22338
- linuxParameters: def["LinuxParameters"],
22355
+ linuxParameters: this.convertLinuxParameters(def["LinuxParameters"]),
22339
22356
  dockerLabels: def["DockerLabels"],
22340
22357
  startTimeout: def["StartTimeout"],
22341
22358
  stopTimeout: def["StopTimeout"],
@@ -22454,7 +22471,7 @@ var ECSProvider = class {
22454
22471
  return {
22455
22472
  logDriver: config["LogDriver"],
22456
22473
  options: config["Options"],
22457
- secretOptions: config["SecretOptions"]
22474
+ secretOptions: this.convertSecrets(config["SecretOptions"])
22458
22475
  };
22459
22476
  }
22460
22477
  /**
@@ -22640,6 +22657,25 @@ var ECSProvider = class {
22640
22657
  });
22641
22658
  }
22642
22659
  /**
22660
+ * Reverse of `convertProxyConfiguration` for `readCurrentState` (issue
22661
+ * #1167): map the SDK camelCase `ProxyConfiguration` back to the CFn
22662
+ * PascalCase shape so the drift baseline (state `properties`, PascalCase)
22663
+ * and the AWS-current read compare apples-to-apples. Unlike the pure
22664
+ * first-letter flips, the SDK field `properties` maps back to the CFn key
22665
+ * `ProxyConfigurationProperties` (a `{Name,Value}[]`), so it needs an
22666
+ * explicit remap rather than `camelToPascalCaseKeys`.
22667
+ */
22668
+ proxyConfigurationToCfn(config) {
22669
+ const out = {};
22670
+ if (config.type !== void 0) out["Type"] = config.type;
22671
+ if (config.containerName !== void 0) out["ContainerName"] = config.containerName;
22672
+ if (config.properties !== void 0) out["ProxyConfigurationProperties"] = config.properties.map((p) => ({
22673
+ Name: p.name,
22674
+ Value: p.value
22675
+ }));
22676
+ return out;
22677
+ }
22678
+ /**
22643
22679
  * Coerce a CFn boolean property to a real boolean at the wire boundary.
22644
22680
  * CFn templates can carry booleans as the strings "true" / "false"
22645
22681
  * (e.g. via Fn::Sub / parameter plumbing), so the SDK input must
@@ -22668,6 +22704,144 @@ var ECSProvider = class {
22668
22704
  loadBalancerName: lb["LoadBalancerName"]
22669
22705
  }));
22670
22706
  }
22707
+ /**
22708
+ * Convert the CFn PascalCase `DeploymentConfiguration` block to the ECS SDK
22709
+ * camelCase input shape (issue #1165). Every field is a pure first-letter
22710
+ * case flip (`MaximumPercent` -> `maximumPercent`, `DeploymentCircuitBreaker`
22711
+ * -> `deploymentCircuitBreaker` with `{Enable, Rollback}` -> `{enable,
22712
+ * rollback}`, `Alarms.AlarmNames` -> `alarms.alarmNames`, and the blue/green
22713
+ * `Strategy` / `BakeTimeInMinutes` / `LifecycleHooks` / `LinearConfiguration`
22714
+ * / `CanaryConfiguration` fields), so the shared recursive key-flip converter
22715
+ * handles the whole subtree — including fields CDK/CFn add later, which avoids
22716
+ * re-introducing the silent-drop this fix closes. The one exception is
22717
+ * `LifecycleHooks[].HookDetails`, a free-form document copied verbatim (see
22718
+ * `DEPLOYMENT_CONFIG_PRESERVE_KEYS`).
22719
+ *
22720
+ * Before this fix the block was passed RAW into the SDK's camelCase
22721
+ * `deploymentConfiguration` field, so the SDK read `.maximumPercent` (absent)
22722
+ * and serialized nothing — a custom `minHealthyPercent` / `maxHealthyPercent`
22723
+ * / circuit breaker / deployment alarms deployed as the AWS defaults, silently
22724
+ * (state recorded the intended value, `cdkd diff` showed "No changes").
22725
+ */
22726
+ convertDeploymentConfiguration(config) {
22727
+ if (!config) return void 0;
22728
+ return pascalToCamelCaseKeys(config, DEPLOYMENT_CONFIG_PRESERVE_KEYS);
22729
+ }
22730
+ /**
22731
+ * Convert the CFn PascalCase `CapacityProviderStrategy` array to the ECS SDK
22732
+ * camelCase input shape (issue #1165). Each element `{CapacityProvider,
22733
+ * Weight, Base}` is a pure first-letter case flip to `{capacityProvider,
22734
+ * weight, base}`.
22735
+ */
22736
+ convertCapacityProviderStrategy(items) {
22737
+ if (!items) return void 0;
22738
+ return pascalToCamelCaseKeys(items);
22739
+ }
22740
+ /**
22741
+ * Convert the CFn PascalCase `PlacementConstraints` array to the ECS SDK
22742
+ * camelCase input shape (issue #1165). Each element `{Type, Expression}` ->
22743
+ * `{type, expression}`.
22744
+ */
22745
+ convertPlacementConstraints(items) {
22746
+ if (!items) return void 0;
22747
+ return pascalToCamelCaseKeys(items);
22748
+ }
22749
+ /**
22750
+ * Convert the CFn PascalCase `PlacementStrategies` array to the ECS SDK
22751
+ * camelCase input shape (issue #1165). Each element `{Type, Field}` ->
22752
+ * `{type, field}`.
22753
+ */
22754
+ convertPlacementStrategies(items) {
22755
+ if (!items) return void 0;
22756
+ return pascalToCamelCaseKeys(items);
22757
+ }
22758
+ /**
22759
+ * Convert the CFn PascalCase `ServiceRegistries` array to the ECS SDK
22760
+ * camelCase input shape (issue #1165). Each element `{RegistryArn, Port,
22761
+ * ContainerName, ContainerPort}` -> `{registryArn, port, containerName,
22762
+ * containerPort}`.
22763
+ */
22764
+ convertServiceRegistries(items) {
22765
+ if (!items) return void 0;
22766
+ return pascalToCamelCaseKeys(items);
22767
+ }
22768
+ /**
22769
+ * Convert the CFn PascalCase `TaskDefinition.RuntimePlatform` to the ECS SDK
22770
+ * camelCase input shape (issue #1165). `{CpuArchitecture,
22771
+ * OperatingSystemFamily}` -> `{cpuArchitecture, operatingSystemFamily}`.
22772
+ *
22773
+ * High-impact: before the fix a `RuntimePlatform: { CpuArchitecture: ARM64 }`
22774
+ * (Graviton Fargate) was passed raw into the SDK's camelCase slot and
22775
+ * silently dropped, so the task definition registered as the default X86_64.
22776
+ */
22777
+ convertRuntimePlatform(config) {
22778
+ if (!config) return void 0;
22779
+ return pascalToCamelCaseKeys(config);
22780
+ }
22781
+ /**
22782
+ * Convert the CFn PascalCase `TaskDefinition.EphemeralStorage` to the ECS SDK
22783
+ * camelCase input shape (issue #1165). `{SizeInGiB}` -> `{sizeInGiB}` — the
22784
+ * value under the wrong-cased key was silently dropped before the fix, so a
22785
+ * custom ephemeral storage size reverted to the AWS default.
22786
+ */
22787
+ convertEphemeralStorage(config) {
22788
+ if (!config) return void 0;
22789
+ return pascalToCamelCaseKeys(config);
22790
+ }
22791
+ /**
22792
+ * Convert the CFn PascalCase `Cluster.Configuration` to the ECS SDK camelCase
22793
+ * input shape (issue #1165). Every key is a pure first-letter flip
22794
+ * (`ExecuteCommandConfiguration` / `ManagedStorageConfiguration` and their
22795
+ * nested `KmsKeyId` / `LogConfiguration` / `CloudWatchLogGroupName` /
22796
+ * `S3BucketName` fields), so the shared recursive converter handles the whole
22797
+ * subtree.
22798
+ */
22799
+ convertClusterConfiguration(config) {
22800
+ if (!config) return void 0;
22801
+ return pascalToCamelCaseKeys(config);
22802
+ }
22803
+ /**
22804
+ * Convert the CFn PascalCase `TaskDefinition.ProxyConfiguration` to the ECS
22805
+ * SDK camelCase input shape (issue #1165). Unlike the other nested fields,
22806
+ * this is NOT a pure first-letter flip: the CFn key
22807
+ * `ProxyConfigurationProperties` maps to the SDK's `properties` field (a
22808
+ * `KeyValuePair[]`), so it needs an explicit remap rather than the recursive
22809
+ * converter.
22810
+ */
22811
+ convertProxyConfiguration(config) {
22812
+ if (!config) return void 0;
22813
+ return {
22814
+ type: config["Type"],
22815
+ containerName: config["ContainerName"],
22816
+ properties: this.convertEnvironment(config["ProxyConfigurationProperties"])
22817
+ };
22818
+ }
22819
+ /**
22820
+ * Convert the CFn PascalCase `TaskDefinition.PlacementConstraints` array to
22821
+ * the ECS SDK camelCase input shape (issue #1165). Each element `{Type,
22822
+ * Expression}` -> `{type, expression}`. Distinct from the Service's
22823
+ * `PlacementConstraints` only in the SDK element type
22824
+ * (`TaskDefinitionPlacementConstraint` vs `PlacementConstraint`); both are a
22825
+ * pure first-letter flip.
22826
+ */
22827
+ convertTaskDefinitionPlacementConstraints(items) {
22828
+ if (!items) return void 0;
22829
+ return pascalToCamelCaseKeys(items);
22830
+ }
22831
+ /**
22832
+ * Convert the CFn PascalCase `ContainerDefinitions[].LinuxParameters` to the
22833
+ * ECS SDK camelCase input shape (issue #1165). Every key is a pure
22834
+ * first-letter flip (`Capabilities.{Add,Drop}`, `Devices[].{HostPath,
22835
+ * ContainerPath,Permissions}`, `Tmpfs[].{ContainerPath,Size,MountOptions}`,
22836
+ * `InitProcessEnabled` / `SharedMemorySize` / `MaxSwap` / `Swappiness`), so
22837
+ * the shared recursive converter handles the whole subtree. Before this fix
22838
+ * the block was passed raw, so a `LinuxParameters.Capabilities` /
22839
+ * `Devices` / `InitProcessEnabled` was silently dropped on register.
22840
+ */
22841
+ convertLinuxParameters(config) {
22842
+ if (!config) return void 0;
22843
+ return pascalToCamelCaseKeys(config);
22844
+ }
22671
22845
  convertNetworkConfiguration(config) {
22672
22846
  if (!config) return void 0;
22673
22847
  const awsvpcConfig = config["AwsvpcConfiguration"];
@@ -22741,8 +22915,8 @@ var ECSProvider = class {
22741
22915
  if (!c || !c.clusterName) return void 0;
22742
22916
  const result = { ClusterName: c.clusterName };
22743
22917
  result["CapacityProviders"] = c.capacityProviders ? [...c.capacityProviders] : [];
22744
- result["DefaultCapacityProviderStrategy"] = c.defaultCapacityProviderStrategy ?? [];
22745
- if (c.configuration) result["Configuration"] = c.configuration;
22918
+ result["DefaultCapacityProviderStrategy"] = camelToPascalCaseKeys(c.defaultCapacityProviderStrategy ?? []);
22919
+ if (c.configuration) result["Configuration"] = camelToPascalCaseKeys(c.configuration);
22746
22920
  result["ClusterSettings"] = (c.settings ?? []).map((s) => ({
22747
22921
  Name: s.name,
22748
22922
  Value: s.value
@@ -22780,21 +22954,22 @@ var ECSProvider = class {
22780
22954
  if (s.enableECSManagedTags !== void 0) result["EnableECSManagedTags"] = s.enableECSManagedTags;
22781
22955
  if (s.enableExecuteCommand !== void 0) result["EnableExecuteCommand"] = s.enableExecuteCommand;
22782
22956
  if (s.healthCheckGracePeriodSeconds !== void 0) result["HealthCheckGracePeriodSeconds"] = s.healthCheckGracePeriodSeconds;
22783
- if (s.networkConfiguration) result["NetworkConfiguration"] = s.networkConfiguration;
22784
- result["LoadBalancers"] = s.loadBalancers ?? [];
22785
- if (s.capacityProviderStrategy && s.capacityProviderStrategy.length > 0) result["CapacityProviderStrategy"] = s.capacityProviderStrategy;
22957
+ if (s.networkConfiguration) result["NetworkConfiguration"] = camelToPascalCaseKeys(s.networkConfiguration);
22958
+ result["LoadBalancers"] = camelToPascalCaseKeys(s.loadBalancers ?? []);
22959
+ if (s.capacityProviderStrategy && s.capacityProviderStrategy.length > 0) result["CapacityProviderStrategy"] = camelToPascalCaseKeys(s.capacityProviderStrategy);
22786
22960
  else if (!s.launchType) result["CapacityProviderStrategy"] = [];
22787
- if (s.deploymentConfiguration) result["DeploymentConfiguration"] = s.deploymentConfiguration;
22788
- result["PlacementConstraints"] = s.placementConstraints ?? [];
22961
+ if (s.deploymentConfiguration) result["DeploymentConfiguration"] = camelToPascalCaseKeys(s.deploymentConfiguration, DEPLOYMENT_CONFIG_PRESERVE_KEYS_CAMEL);
22962
+ result["PlacementConstraints"] = camelToPascalCaseKeys(s.placementConstraints ?? []);
22789
22963
  if (s.launchType === "EC2" || s.launchType === "EXTERNAL") {
22790
- const strategy = s.placementStrategy ?? [];
22964
+ const strategy = camelToPascalCaseKeys(s.placementStrategy ?? []);
22791
22965
  result["PlacementStrategy"] = strategy;
22792
22966
  result["PlacementStrategies"] = strategy;
22793
22967
  } else if (s.placementStrategy && s.placementStrategy.length > 0) {
22794
- result["PlacementStrategy"] = s.placementStrategy;
22795
- result["PlacementStrategies"] = s.placementStrategy;
22968
+ const strategy = camelToPascalCaseKeys(s.placementStrategy);
22969
+ result["PlacementStrategy"] = strategy;
22970
+ result["PlacementStrategies"] = strategy;
22796
22971
  }
22797
- result["ServiceRegistries"] = s.serviceRegistries ?? [];
22972
+ result["ServiceRegistries"] = camelToPascalCaseKeys(s.serviceRegistries ?? []);
22798
22973
  result["Tags"] = normalizeAwsTagsToCfn(s.tags);
22799
22974
  return result;
22800
22975
  }
@@ -22819,9 +22994,9 @@ var ECSProvider = class {
22819
22994
  if (td.executionRoleArn !== void 0) result["ExecutionRoleArn"] = td.executionRoleArn;
22820
22995
  if (td.taskRoleArn !== void 0) result["TaskRoleArn"] = td.taskRoleArn;
22821
22996
  result["Volumes"] = this.volumesToCfn(td.volumes);
22822
- result["PlacementConstraints"] = td.placementConstraints ?? [];
22823
- if (td.runtimePlatform) result["RuntimePlatform"] = td.runtimePlatform;
22824
- if (td.proxyConfiguration) result["ProxyConfiguration"] = td.proxyConfiguration;
22997
+ result["PlacementConstraints"] = camelToPascalCaseKeys(td.placementConstraints ?? []);
22998
+ if (td.runtimePlatform) result["RuntimePlatform"] = camelToPascalCaseKeys(td.runtimePlatform);
22999
+ if (td.proxyConfiguration) result["ProxyConfiguration"] = this.proxyConfigurationToCfn(td.proxyConfiguration);
22825
23000
  if (td.pidMode !== void 0) result["PidMode"] = td.pidMode;
22826
23001
  if (td.ipcMode !== void 0) result["IpcMode"] = td.ipcMode;
22827
23002
  if (td.ephemeralStorage?.sizeInGiB !== void 0) result["EphemeralStorage"] = { SizeInGiB: td.ephemeralStorage.sizeInGiB };
@@ -61505,7 +61680,7 @@ function createMigrateCommand() {
61505
61680
  */
61506
61681
  function buildProgram() {
61507
61682
  const program = new Command();
61508
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.260.3");
61683
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.260.5");
61509
61684
  program.addCommand(createBootstrapCommand());
61510
61685
  program.addCommand(createSynthCommand());
61511
61686
  program.addCommand(createListCommand());