@go-to-k/cdkd 0.278.46 → 0.278.48

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
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { $ as DiffCalculator, $t as resolveBucketRegion, A as red, At as getDockerImageBySourceHash, B as isTerminationProtectionPropagationError, Bt as resolveStateBucketWithDefaultAndSource, C as isStatefulRecreateTargetSync, Ct as validateContainerRepoName, D as cyan, Dt as runDockerForeground, E as bold, En as withErrorHandling, Et as getDockerCmd, F as ProviderRegistry, Ft as resolveApp, G as normalizeAwsTagsToCfn, Gt as CFN_TEMPLATE_URL_LIMIT, H as cfnRefValueFromPhysicalId, Ht as stateBucketExistenceConfirmed, I as findActionableSilentDrops, It as resolveAutoAssetStorage, J as readConfigString, Jt as uploadCfnTemplate, K as resolveExplicitPhysicalId, Kt as MIGRATE_TMP_PREFIX, L as CloudControlProvider, Lt as resolveCaptureObservedState, M as IAMRoleProvider, Mt as synthesisStatusMessage, N as collectInlinePolicyNamesManagedBySiblings, Nt as getDefaultStateBucketName, O as gray, Ot as runDockerStreaming, P as clearOnUpdateRemoval, Pt as getLegacyStateBucketName, Q as applyRoleArnIfSet, R as slowCcOperationTimeoutMs, Rt as resolveSkipPrefix, S as MULTI_REGION_RECREATE_BLOCKED_TYPES, St as validateAssetBucketName, T as formatResourceLine, Tn as normalizeAwsError, Tt as formatDockerLoginError, U as refStateLookupFromResource, Ut as warnDeprecatedNoPrefixCliFlag, V as IntrinsicFunctionResolver, Vt as resolveUseCdkBootstrapAssets, W as WAFv2WebACLProvider, Wt as CFN_TEMPLATE_BODY_LIMIT, X as requireConfigArray, Xt as AssemblyReader, Y as replayWarn, Yt as expectedOwnerParam, Z as requireConfigString, Zt as processStackMessages, _ as createPreDeleteFinalSnapshot, _n as ResourceTimeoutError, _t as AssetModeResolver, a as DeploymentEventsStore, an as CdkdError, at as TemplateParser, b as unsupportedFinalSnapshotError, bn as StackTerminationProtectionError, bt as getBootstrapMarkerKey, c as replayFailedOperations, cn as DeployCancelledError, ct as rebuildClientForBucketRegion, d as IMPLICIT_DELETE_DEPENDENCIES, dn as LocalStartServiceError, dt as stringifyValue, en as AwsClients, et as describeTypeWithThrottleRetry, f as computeImplicitDeleteEdges, ft as WorkGraph, g as ccRoutedFinalSnapshotError, gn as ProvisioningError, gt as rewriteTemplateAssetReferences, h as buildFinalSnapshotIdentifier, hn as PartialFailureError, ht as loadPublishableAssetManifest, i as DeploymentEventsReader, it as DagBuilder, j as yellow, jt as Synthesizer, k as green, kt as AssetManifestLoader, l as replayRollback, ln as LocalInvokeBuildError$1, lt as shouldRetainResource, m as PRE_DELETE_SNAPSHOT_TYPES, mn as NestedStackChildDirectDestroyError, mt as createAssetRedirectResolver, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as resetAwsClients, nt as isRetryableTransientError, o as planFailedOps, ot as LockManager, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as MissingCdkCliError, pt as buildAssetRedirectMap, q as assertRegionMatch, qt as findLargeInlineResources, r as DeployEngine, rn as setAwsClients, rt as isThrottlingError, s as planRollback, st as S3StateBackend, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as getAwsClients, tt as withRetry, u as withResourceDeadline, un as LocalMigrateError, ut as AssetPublisher, v as isFinalSnapshotError, vn as ResourceUpdateNotSupportedError, vt as BOOTSTRAP_MARKER_PREFIX, w as renderStatefulReason, wt as buildDockerImage, x as extractDeploymentEventError, xt as parseBootstrapMarker, y as refusesFinalSnapshot, yn as StackHasActiveImportsError, yt as ensureAssetStorage, z as disableInstanceApiTermination, zt as resolveStateBucketWithDefault } from "./deploy-engine-BIqcmiVb.js";
2
+ import { $ as DiffCalculator, $t as resolveBucketRegion, A as red, At as getDockerImageBySourceHash, B as isTerminationProtectionPropagationError, Bt as resolveStateBucketWithDefaultAndSource, C as isStatefulRecreateTargetSync, Ct as validateContainerRepoName, D as cyan, Dt as runDockerForeground, E as bold, En as withErrorHandling, Et as getDockerCmd, F as ProviderRegistry, Ft as resolveApp, G as normalizeAwsTagsToCfn, Gt as CFN_TEMPLATE_URL_LIMIT, H as cfnRefValueFromPhysicalId, Ht as stateBucketExistenceConfirmed, I as findActionableSilentDrops, It as resolveAutoAssetStorage, J as readConfigString, Jt as uploadCfnTemplate, K as resolveExplicitPhysicalId, Kt as MIGRATE_TMP_PREFIX, L as CloudControlProvider, Lt as resolveCaptureObservedState, M as IAMRoleProvider, Mt as synthesisStatusMessage, N as collectInlinePolicyNamesManagedBySiblings, Nt as getDefaultStateBucketName, O as gray, Ot as runDockerStreaming, P as clearOnUpdateRemoval, Pt as getLegacyStateBucketName, Q as applyRoleArnIfSet, R as slowCcOperationTimeoutMs, Rt as resolveSkipPrefix, S as MULTI_REGION_RECREATE_BLOCKED_TYPES, St as validateAssetBucketName, T as formatResourceLine, Tn as normalizeAwsError, Tt as formatDockerLoginError, U as refStateLookupFromResource, Ut as warnDeprecatedNoPrefixCliFlag, V as IntrinsicFunctionResolver, Vt as resolveUseCdkBootstrapAssets, W as WAFv2WebACLProvider, Wt as CFN_TEMPLATE_BODY_LIMIT, X as requireConfigArray, Xt as AssemblyReader, Y as replayWarn, Yt as expectedOwnerParam, Z as requireConfigString, Zt as processStackMessages, _ as createPreDeleteFinalSnapshot, _n as ResourceTimeoutError, _t as AssetModeResolver, a as DeploymentEventsStore, an as CdkdError, at as TemplateParser, b as unsupportedFinalSnapshotError, bn as StackTerminationProtectionError, bt as getBootstrapMarkerKey, c as replayFailedOperations, cn as DeployCancelledError, ct as rebuildClientForBucketRegion, d as IMPLICIT_DELETE_DEPENDENCIES, dn as LocalStartServiceError, dt as stringifyValue, en as AwsClients, et as describeTypeWithThrottleRetry, f as computeImplicitDeleteEdges, ft as WorkGraph, g as ccRoutedFinalSnapshotError, gn as ProvisioningError, gt as rewriteTemplateAssetReferences, h as buildFinalSnapshotIdentifier, hn as PartialFailureError, ht as loadPublishableAssetManifest, i as DeploymentEventsReader, it as DagBuilder, j as yellow, jt as Synthesizer, k as green, kt as AssetManifestLoader, l as replayRollback, ln as LocalInvokeBuildError$1, lt as shouldRetainResource, m as PRE_DELETE_SNAPSHOT_TYPES, mn as NestedStackChildDirectDestroyError, mt as createAssetRedirectResolver, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as resetAwsClients, nt as isRetryableTransientError, o as planFailedOps, ot as LockManager, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as MissingCdkCliError, pt as buildAssetRedirectMap, q as assertRegionMatch, qt as findLargeInlineResources, r as DeployEngine, rn as setAwsClients, rt as isThrottlingError, s as planRollback, st as S3StateBackend, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as getAwsClients, tt as withRetry, u as withResourceDeadline, un as LocalMigrateError, ut as AssetPublisher, v as isFinalSnapshotError, vn as ResourceUpdateNotSupportedError, vt as BOOTSTRAP_MARKER_PREFIX, w as renderStatefulReason, wt as buildDockerImage, x as extractDeploymentEventError, xt as parseBootstrapMarker, y as refusesFinalSnapshot, yn as StackHasActiveImportsError, yt as ensureAssetStorage, z as disableInstanceApiTermination, zt as resolveStateBucketWithDefault } from "./deploy-engine-CkEIXYk1.js";
3
3
  import { a as getLiveRenderer, c as PATTERN_B_RESOURCE_TYPES, d as generateResourceNameWithFallback, f as withSkipPrefix, i as runStackBuffered, n as getLogger, o as PATTERN_B_NAME_OPTIONS, p as withStackName, s as PATTERN_B_NAME_PROPERTIES, u as generateResourceName } from "./logger-BYMEE-BS.js";
4
- import { t as ASGProvider } from "./asg-provider-BauyF7RU.js";
4
+ import { t as ASGProvider } from "./asg-provider-DBl2eDS0.js";
5
5
  import { AsyncLocalStorage } from "node:async_hooks";
6
6
  import { createHash, randomBytes, randomUUID } from "node:crypto";
7
7
  import { CopyObjectCommand, CreateBucketCommand, DeleteBucketAnalyticsConfigurationCommand, DeleteBucketCommand, DeleteBucketCorsCommand, DeleteBucketEncryptionCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketOwnershipControlsCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketOwnershipControlsCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
@@ -30452,8 +30452,8 @@ var Route53Provider = class {
30452
30452
  Id: physicalId,
30453
30453
  Comment: comment
30454
30454
  }));
30455
- await this.applyHostedZoneTags(physicalId, properties, logicalId);
30456
- await this.applyQueryLoggingConfig(physicalId, properties, logicalId);
30455
+ await this.applyHostedZoneTags(physicalId, properties, logicalId, previousProperties);
30456
+ await this.applyQueryLoggingConfig(physicalId, properties, logicalId, previousProperties);
30457
30457
  await this.syncVPCAssociations(physicalId, properties, logicalId);
30458
30458
  const prevEnabled = previousProperties["HostedZoneFeatures"]?.["AcceleratedRecoveryStatus"] === "ENABLED";
30459
30459
  const nextEnabled = properties["HostedZoneFeatures"]?.["AcceleratedRecoveryStatus"] === "ENABLED";
@@ -30472,6 +30472,7 @@ var Route53Provider = class {
30472
30472
  }
30473
30473
  };
30474
30474
  } catch (error) {
30475
+ if (error instanceof CdkdError) throw error;
30475
30476
  const cause = error instanceof Error ? error : void 0;
30476
30477
  throw new ProvisioningError(`Failed to update hosted zone ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, physicalId, cause);
30477
30478
  }
@@ -30796,34 +30797,95 @@ var Route53Provider = class {
30796
30797
  /**
30797
30798
  * Apply tags to a hosted zone using ChangeTagsForResource.
30798
30799
  * CFn property: HostedZoneTags (array of {Key, Value}).
30799
- */
30800
- async applyHostedZoneTags(zoneId, properties, logicalId) {
30801
- const tags = properties["HostedZoneTags"];
30802
- if (!tags || !Array.isArray(tags) || tags.length === 0) return;
30800
+ *
30801
+ * `previousProperties` is passed on the UPDATE path only, and turns this
30802
+ * from an add-only apply into a real DIFF (issue #1160). Without it a tag
30803
+ * removed from the template stayed on the zone forever — the add-only shape
30804
+ * has no way to express a removal, and the `length === 0` early return made
30805
+ * clearing ALL tags a silent no-op. `ChangeTagsForResource` takes
30806
+ * `RemoveTagKeys` alongside `AddTags` in ONE call, and CloudFormation does
30807
+ * untag a removed tag (live A/B, 2026-08-10), so the previous-minus-desired
30808
+ * key set is sent as removals. Create keeps passing `undefined` — there is
30809
+ * nothing to remove from a zone that did not exist a moment ago.
30810
+ */
30811
+ async applyHostedZoneTags(zoneId, properties, logicalId, previousProperties) {
30812
+ const desiredRaw = properties["HostedZoneTags"];
30813
+ if (desiredRaw != null && !Array.isArray(desiredRaw)) {
30814
+ this.logger.warn(`AWS::Route53::HostedZone HostedZoneTags must be an array on ${logicalId}; ignoring it and leaving the live tags untouched (no tag is added or removed)`);
30815
+ return;
30816
+ }
30817
+ const tags = this.readHostedZoneTags(properties);
30818
+ if (Array.isArray(desiredRaw) && tags.length !== desiredRaw.length) {
30819
+ this.logger.warn(`AWS::Route53::HostedZone HostedZoneTags on ${logicalId} carries ${desiredRaw.length - tags.length} entr(y|ies) with a non-string Key or Value (check for an unresolved intrinsic); leaving the live tags untouched rather than applying a partial set or removing the tags those entries name`);
30820
+ return;
30821
+ }
30822
+ const previousTags = previousProperties ? this.readHostedZoneTags(previousProperties) : void 0;
30823
+ const desiredKeys = new Set(tags.map((t) => t.Key));
30824
+ const removeTagKeys = [...new Set((previousTags ?? []).map((t) => t.Key).filter((key) => key.length > 0 && !desiredKeys.has(key)))];
30825
+ if (tags.length === 0 && removeTagKeys.length === 0) return;
30803
30826
  try {
30804
30827
  await this.getClient().send(new ChangeTagsForResourceCommand({
30805
30828
  ResourceType: "hostedzone",
30806
30829
  ResourceId: zoneId,
30807
- AddTags: tags.map((t) => ({
30830
+ ...tags.length > 0 && { AddTags: tags.map((t) => ({
30808
30831
  Key: t.Key,
30809
30832
  Value: t.Value
30810
- }))
30833
+ })) },
30834
+ ...removeTagKeys.length > 0 && { RemoveTagKeys: removeTagKeys }
30811
30835
  }));
30812
- this.logger.debug(`Applied ${tags.length} tag(s) to hosted zone ${logicalId}`);
30836
+ this.logger.debug(`Applied ${tags.length} tag(s) and removed ${removeTagKeys.length} tag(s) on hosted zone ${logicalId}`);
30813
30837
  } catch (error) {
30814
- this.logger.warn(`Failed to apply tags to hosted zone ${logicalId}: ${error instanceof Error ? error.message : String(error)}`);
30838
+ const detail = error instanceof Error ? error.message : String(error);
30839
+ if (removeTagKeys.length > 0) throw new ProvisioningError(`Failed to remove tag(s) ${removeTagKeys.join(", ")} from hosted zone ${logicalId}: ${detail}. The removal will NOT be retried on the next deploy (state no longer records the tag), so it is reported instead of ignored.`, "AWS::Route53::HostedZone", logicalId, zoneId, error instanceof Error ? error : void 0);
30840
+ this.logger.warn(`Failed to apply tags to hosted zone ${logicalId}: ${detail}`);
30815
30841
  }
30816
30842
  }
30817
30843
  /**
30844
+ * Read `HostedZoneTags` off a property bag, dropping entries whose shape an
30845
+ * unresolved intrinsic or a hand-authored L1 made unusable. Returns a
30846
+ * possibly-SHORTER list rather than throwing — the caller compares the length
30847
+ * against the raw input to decide whether the read was lossy, and only the
30848
+ * DESIRED side treats a lossy read as a refusal. The previous (state-borne)
30849
+ * side stays permissive: a record an older binary wrote must not block an
30850
+ * ordinary update, which a rollback replay could not then edit its way out of.
30851
+ *
30852
+ * `Value` is validated as well as `Key`. Route 53 rejects a tag whose value
30853
+ * is absent or non-string, and because Add and Remove ride the SAME
30854
+ * `ChangeTagsForResource` call, one bad value would fail the whole request —
30855
+ * silently taking the REMOVALS down with it.
30856
+ */
30857
+ readHostedZoneTags(properties) {
30858
+ const tags = properties["HostedZoneTags"];
30859
+ if (!Array.isArray(tags)) return [];
30860
+ return tags.filter((t) => {
30861
+ if (typeof t !== "object" || t === null) return false;
30862
+ const entry = t;
30863
+ return typeof entry.Key === "string" && typeof entry.Value === "string";
30864
+ });
30865
+ }
30866
+ /**
30818
30867
  * Apply QueryLoggingConfig to a hosted zone.
30819
30868
  * CFn property: QueryLoggingConfig ({ CloudWatchLogsLogGroupArn }).
30820
30869
  * Only one query logging config per hosted zone is allowed.
30821
30870
  */
30822
- async applyQueryLoggingConfig(zoneId, properties, logicalId) {
30823
- const queryLoggingConfig = properties["QueryLoggingConfig"];
30824
- if (!queryLoggingConfig) return;
30825
- const cloudWatchLogsLogGroupArn = queryLoggingConfig["CloudWatchLogsLogGroupArn"];
30826
- if (!cloudWatchLogsLogGroupArn) return;
30871
+ async applyQueryLoggingConfig(zoneId, properties, logicalId, previousProperties) {
30872
+ const cloudWatchLogsLogGroupArn = this.readQueryLogGroupArn(properties);
30873
+ const desiredBlock = properties["QueryLoggingConfig"];
30874
+ const desiredBlockIsObject = typeof desiredBlock === "object" && desiredBlock !== null && !Array.isArray(desiredBlock);
30875
+ const desiredArnPresent = desiredBlockIsObject && desiredBlock["CloudWatchLogsLogGroupArn"] !== void 0;
30876
+ if (cloudWatchLogsLogGroupArn === void 0 && desiredBlock != null && (!desiredBlockIsObject || desiredArnPresent)) {
30877
+ this.logger.warn(`AWS::Route53::HostedZone QueryLoggingConfig on ${logicalId} carries no usable CloudWatchLogsLogGroupArn; leaving the live query logging config untouched (omit the block entirely to delete it)`);
30878
+ return;
30879
+ }
30880
+ if (cloudWatchLogsLogGroupArn === void 0) {
30881
+ if (previousProperties !== void 0 && this.readQueryLogGroupArn(previousProperties)) {
30882
+ this.logger.debug(`QueryLoggingConfig removed from template for hosted zone ${logicalId}; deleting the live config`);
30883
+ await this.deleteQueryLoggingConfigForZone(zoneId, logicalId);
30884
+ const remaining = await this.listQueryLoggingConfigIds(zoneId);
30885
+ if (remaining.length > 0) throw new ProvisioningError(`QueryLoggingConfig was removed from the template for hosted zone ${logicalId} but the live config (${remaining.join(", ")}) is still present. The removal will NOT be retried on the next deploy (state no longer records the property), so it is reported instead of ignored.`, "AWS::Route53::HostedZone", logicalId, zoneId);
30886
+ }
30887
+ return;
30888
+ }
30827
30889
  try {
30828
30890
  await this.deleteQueryLoggingConfigForZone(zoneId, logicalId);
30829
30891
  await this.getClient().send(new CreateQueryLoggingConfigCommand({
@@ -30840,6 +30902,36 @@ var Route53Provider = class {
30840
30902
  }
30841
30903
  }
30842
30904
  /**
30905
+ * Read `QueryLoggingConfig.CloudWatchLogsLogGroupArn` off a property bag,
30906
+ * returning `undefined` for an absent block, a malformed container, or a
30907
+ * blank / non-string ARN. One helper so the DESIRED and PREVIOUS sides
30908
+ * cannot classify the same shape differently — an asymmetry there would
30909
+ * make a removal fire (or not) depending on which side was malformed.
30910
+ */
30911
+ readQueryLogGroupArn(properties) {
30912
+ const config = properties["QueryLoggingConfig"];
30913
+ if (typeof config !== "object" || config === null || Array.isArray(config)) return void 0;
30914
+ const arn = config["CloudWatchLogsLogGroupArn"];
30915
+ return typeof arn === "string" && arn.length > 0 ? arn : void 0;
30916
+ }
30917
+ /**
30918
+ * List the live query-logging config ids for a hosted zone.
30919
+ *
30920
+ * Used by the REMOVAL path to VERIFY the delete landed, because
30921
+ * `deleteQueryLoggingConfigForZone` deliberately swallows its failures and a
30922
+ * swallowed removal is permanent (see the call site). A zone that has gone
30923
+ * away counts as "no config", so the NotFound shapes resolve to `[]` rather
30924
+ * than failing the deploy on a resource that is already absent.
30925
+ */
30926
+ async listQueryLoggingConfigIds(zoneId) {
30927
+ try {
30928
+ return ((await this.getClient().send(new ListQueryLoggingConfigsCommand({ HostedZoneId: zoneId }))).QueryLoggingConfigs ?? []).map((config) => config.Id).filter((id) => typeof id === "string");
30929
+ } catch (error) {
30930
+ if (error instanceof Error && (error.name === "NoSuchHostedZone" || error.name === "NoSuchQueryLoggingConfig")) return [];
30931
+ throw error;
30932
+ }
30933
+ }
30934
+ /**
30843
30935
  * Delete query logging config(s) for a hosted zone.
30844
30936
  */
30845
30937
  async deleteQueryLoggingConfigForZone(zoneId, logicalId) {
@@ -43086,11 +43178,12 @@ var CodeBuildProvider = class {
43086
43178
  throw new ProvisioningError(`Failed to create CodeBuild Project ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, void 0, cause);
43087
43179
  }
43088
43180
  }
43089
- async update(logicalId, physicalId, resourceType, properties, _previousProperties) {
43181
+ async update(logicalId, physicalId, resourceType, properties, previousProperties) {
43090
43182
  this.logger.debug(`Updating CodeBuild Project ${logicalId}: ${physicalId}`);
43091
43183
  try {
43092
43184
  const input = this.mapProperties(logicalId, properties);
43093
43185
  input.name = physicalId;
43186
+ if (properties["BuildBatchConfig"] == null && previousProperties["BuildBatchConfig"] != null) input.buildBatchConfig = {};
43094
43187
  await this.getClient().send(new UpdateProjectCommand(input));
43095
43188
  this.logger.debug(`Successfully updated CodeBuild Project ${logicalId}`);
43096
43189
  return {
@@ -67472,7 +67565,7 @@ function createMigrateCommand() {
67472
67565
  */
67473
67566
  function buildProgram() {
67474
67567
  const program = new Command();
67475
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.46");
67568
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.48");
67476
67569
  program.hook("preAction", (_thisCommand, actionCommand) => {
67477
67570
  const { profile } = actionCommand.optsWithGlobals();
67478
67571
  if (profile !== void 0) process.env["AWS_PROFILE"] = profile;