@go-to-k/cdkd 0.280.0 → 0.280.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 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-DRLo8PHT.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-DK0y5OP8.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-XOMGgJrK.js";
4
+ import { t as ASGProvider } from "./asg-provider-CwKNCS78.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";
@@ -4863,7 +4863,7 @@ function s3BucketDestinationPath(dest, destinationPath) {
4863
4863
  * exported from there because `resolveS3BucketDestination` is S3-specific
4864
4864
  * branch selection, not a shared shape guard — the two only share the wording.
4865
4865
  */
4866
- function describeValue(value) {
4866
+ function describeValue$1(value) {
4867
4867
  if (value === null) return "null";
4868
4868
  if (Array.isArray(value)) return "an array";
4869
4869
  if (typeof value === "string") return `a string ${JSON.stringify(value)}`;
@@ -5433,11 +5433,11 @@ var S3BucketProvider = class S3BucketProvider {
5433
5433
  throw new Error(message);
5434
5434
  };
5435
5435
  if (dest === void 0 || dest === null) return;
5436
- if (!isPlainObject$1(dest)) return drop(`${destinationPath} must be an object (got ${describeValue(dest)}) — check for an unresolved intrinsic or a mis-nested template value; the destination would otherwise be dropped from the request with no error`);
5436
+ if (!isPlainObject$1(dest)) return drop(`${destinationPath} must be an object (got ${describeValue$1(dest)}) — check for an unresolved intrinsic or a mis-nested template value; the destination would otherwise be dropped from the request with no error`);
5437
5437
  const bag = isFlattenedDestination(dest) ? dest : dest["S3BucketDestination"];
5438
- if (bag === void 0 || bag === null) return drop(`${destinationPath} carries neither a bucket (BucketArn / Bucket) nor a nested S3BucketDestination object (got ${describeValue(dest)}) — the destination would otherwise be dropped from the request with no error`);
5439
- if (!isPlainObject$1(bag)) return drop(`${nestedPath} must be an object (got ${describeValue(bag)}) — check for an unresolved intrinsic or a mis-nested template value; the destination would otherwise be dropped from the request with no error`);
5440
- if (!bag["BucketArn"] && !bag["Bucket"]) return drop(`${bag === dest ? destinationPath : nestedPath} has no destination bucket (BucketArn / Bucket) (got ${describeValue(bag)}) — the request would be rejected by S3, or silently carry no destination`);
5438
+ if (bag === void 0 || bag === null) return drop(`${destinationPath} carries neither a bucket (BucketArn / Bucket) nor a nested S3BucketDestination object (got ${describeValue$1(dest)}) — the destination would otherwise be dropped from the request with no error`);
5439
+ if (!isPlainObject$1(bag)) return drop(`${nestedPath} must be an object (got ${describeValue$1(bag)}) — check for an unresolved intrinsic or a mis-nested template value; the destination would otherwise be dropped from the request with no error`);
5440
+ if (!bag["BucketArn"] && !bag["Bucket"]) return drop(`${bag === dest ? destinationPath : nestedPath} has no destination bucket (BucketArn / Bucket) (got ${describeValue$1(bag)}) — the request would be rejected by S3, or silently carry no destination`);
5441
5441
  return bag;
5442
5442
  }
5443
5443
  /**
@@ -43326,6 +43326,87 @@ const DEFAULT_EVENT_SELECTORS = Object.freeze([Object.freeze({
43326
43326
  IncludeManagementEvents: true
43327
43327
  })]);
43328
43328
  /**
43329
+ * `undefined` for an absent / null / EMPTY optional string field.
43330
+ *
43331
+ * Module-scoped since issue #1565 so `create()` can use it too: an always-emit
43332
+ * placeholder can reach `create()` — `drift --accept` falls back to mutating
43333
+ * `properties` when `observedProperties` is absent, and the rollback executor
43334
+ * replays `previousState.properties` through `create()` on a reverse
43335
+ * replacement — and `CreateTrail` with `CloudWatchLogsLogGroupArn: ''` is an
43336
+ * UNPROBED shape that may 400 on ARN format. `''` there means "not
43337
+ * configured", which is exactly what omitting the field says.
43338
+ *
43339
+ * The update path is where the distinction between absent and `''` matters
43340
+ * (see {@link resolveCloudWatchLogsPair}); on create there is no previous
43341
+ * value to clear, so both collapse to "omit".
43342
+ */
43343
+ function emptyToUndefined(v) {
43344
+ if (v === void 0 || v === null || v === "") return void 0;
43345
+ return v;
43346
+ }
43347
+ /**
43348
+ * Resolve the `CloudWatchLogsLogGroupArn` / `CloudWatchLogsRoleArn` pair for an
43349
+ * `UpdateTrail`, distinguishing an ABSENT desired side from an explicit `''`.
43350
+ *
43351
+ * The pair is all-or-nothing on AWS, so the two fields are decided TOGETHER —
43352
+ * the caller cannot build the half-configured request AWS rejects.
43353
+ *
43354
+ * - ABSENT (`undefined` / `null`) on BOTH sides -> send neither. The template
43355
+ * never declared them, and the live CFn A/B (2026-08-10) measured a template
43356
+ * removal as RETAINED, so sending nothing IS the parity behavior. `null`
43357
+ * counts as absent because a JSON state round-trip can produce one where the
43358
+ * template had nothing.
43359
+ * - BOTH `''` -> send both. `''` is the clear, which is what makes a
43360
+ * `drift --revert` of a console-side enable actually revert (issue #1565).
43361
+ * On an already-unwired trail that re-asserts a null field, which AWS accepts
43362
+ * as the no-op it is, and it rides an `UpdateTrail` this method issues
43363
+ * anyway. Deliberately NOT gated on "differs from the previous side": that
43364
+ * gate would also stop forwarding an UNCHANGED populated pair, which
43365
+ * `cloudtrail-provider-roundtrip.test.ts` pins as a wire-layer guarantee.
43366
+ * - BOTH populated -> send both verbatim.
43367
+ * - Anything else — a non-string value, or exactly ONE half populated -> send
43368
+ * NEITHER, and report it. Both shapes are unusable rather than meaningful:
43369
+ * coercing them would send `''` next to a real ARN (the request AWS rejects)
43370
+ * or, worse, read a malformed `null` as a CLEAR and silently disable a live
43371
+ * trail's CloudWatch Logs delivery — the
43372
+ * `malformed-value-must-not-read-as-removal` class this same file already
43373
+ * guards for `EventSelectors`. Leaving the pair alone is the non-destructive
43374
+ * reading, and the caller warns so the divergence is loud.
43375
+ *
43376
+ * Only the DESIRED side decides, which keeps the guard-the-desired-side-only
43377
+ * rule intact.
43378
+ */
43379
+ function resolveCloudWatchLogsPair(properties) {
43380
+ const desiredGroup = properties["CloudWatchLogsLogGroupArn"];
43381
+ const desiredRole = properties["CloudWatchLogsRoleArn"];
43382
+ if (desiredGroup == null && desiredRole == null) return {
43383
+ logGroupArn: void 0,
43384
+ roleArn: void 0
43385
+ };
43386
+ if (typeof desiredGroup !== "string" || typeof desiredRole !== "string") return {
43387
+ logGroupArn: void 0,
43388
+ roleArn: void 0,
43389
+ unusable: `CloudWatchLogsLogGroupArn / CloudWatchLogsRoleArn must both be strings (got ${describeValue(desiredGroup)} / ${describeValue(desiredRole)}) — check for an unresolved intrinsic or a half-written state record`
43390
+ };
43391
+ if (desiredGroup === "" !== (desiredRole === "")) return {
43392
+ logGroupArn: void 0,
43393
+ roleArn: void 0,
43394
+ unusable: "CloudWatchLogsLogGroupArn / CloudWatchLogsRoleArn are all-or-nothing on AWS, but only one of them carries a value — sending the pair would be rejected"
43395
+ };
43396
+ return {
43397
+ logGroupArn: desiredGroup,
43398
+ roleArn: desiredRole
43399
+ };
43400
+ }
43401
+ /** Human-readable type for a warning, without echoing user data. */
43402
+ function describeValue(value) {
43403
+ if (value === null) return "null";
43404
+ if (value === void 0) return "nothing";
43405
+ if (Array.isArray(value)) return "an array";
43406
+ if (typeof value === "string") return value === "" ? "''" : "a string";
43407
+ return `a ${typeof value}`;
43408
+ }
43409
+ /**
43329
43410
  * SDK Provider for AWS CloudTrail resources
43330
43411
  *
43331
43412
  * Supports:
@@ -43364,16 +43445,16 @@ var CloudTrailProvider = class {
43364
43445
  const s3BucketName = properties["S3BucketName"];
43365
43446
  if (!s3BucketName) throw new ProvisioningError(`S3BucketName is required for CloudTrail Trail ${logicalId}`, resourceType, logicalId);
43366
43447
  const trailName = properties["TrailName"];
43367
- const s3KeyPrefix = properties["S3KeyPrefix"];
43448
+ const s3KeyPrefix = emptyToUndefined(properties["S3KeyPrefix"]);
43368
43449
  const isMultiRegionTrail = properties["IsMultiRegionTrail"];
43369
43450
  const includeGlobalServiceEvents = properties["IncludeGlobalServiceEvents"];
43370
43451
  const enableLogFileValidation = properties["EnableLogFileValidation"];
43371
43452
  const isLogging = properties["IsLogging"];
43372
43453
  const tags = properties["Tags"];
43373
- const cloudWatchLogsLogGroupArn = properties["CloudWatchLogsLogGroupArn"];
43374
- const cloudWatchLogsRoleArn = properties["CloudWatchLogsRoleArn"];
43375
- const kmsKeyId = properties["KMSKeyId"];
43376
- const snsTopicName = properties["SnsTopicName"];
43454
+ const cloudWatchLogsLogGroupArn = emptyToUndefined(properties["CloudWatchLogsLogGroupArn"]);
43455
+ const cloudWatchLogsRoleArn = emptyToUndefined(properties["CloudWatchLogsRoleArn"]);
43456
+ const kmsKeyId = emptyToUndefined(properties["KMSKeyId"]);
43457
+ const snsTopicName = emptyToUndefined(properties["SnsTopicName"]);
43377
43458
  const isOrganizationTrail = properties["IsOrganizationTrail"];
43378
43459
  const eventSelectors = properties["EventSelectors"];
43379
43460
  const insightSelectors = properties["InsightSelectors"];
@@ -43425,19 +43506,17 @@ var CloudTrailProvider = class {
43425
43506
  }
43426
43507
  async update(logicalId, physicalId, resourceType, properties, previousProperties) {
43427
43508
  this.logger.debug(`Updating CloudTrail Trail ${logicalId}: ${physicalId}`);
43428
- const emptyToUndefined = (v) => {
43429
- if (v === void 0 || v === null || v === "") return void 0;
43430
- return v;
43431
- };
43432
43509
  const s3BucketName = properties["S3BucketName"];
43433
43510
  const s3KeyPrefix = clearOnUpdateRemoval(emptyToUndefined(properties["S3KeyPrefix"]), emptyToUndefined(previousProperties["S3KeyPrefix"]), "");
43434
43511
  const isMultiRegionTrail = clearOnUpdateRemoval(properties["IsMultiRegionTrail"], previousProperties["IsMultiRegionTrail"], false);
43435
43512
  const includeGlobalServiceEvents = isMultiRegionTrail === false ? clearOnUpdateRemoval(properties["IncludeGlobalServiceEvents"], previousProperties["IncludeGlobalServiceEvents"], false) : properties["IncludeGlobalServiceEvents"];
43436
43513
  const enableLogFileValidation = clearOnUpdateRemoval(properties["EnableLogFileValidation"], previousProperties["EnableLogFileValidation"], false);
43437
43514
  const isLogging = properties["IsLogging"];
43438
- const cloudWatchLogsLogGroupArn = emptyToUndefined(properties["CloudWatchLogsLogGroupArn"]);
43439
- const cloudWatchLogsRoleArn = emptyToUndefined(properties["CloudWatchLogsRoleArn"]);
43440
- const kmsKeyId = emptyToUndefined(properties["KMSKeyId"]);
43515
+ const cwPair = resolveCloudWatchLogsPair(properties);
43516
+ if (cwPair.unusable !== void 0) this.logger.warn(`CloudTrail Trail ${logicalId}: ${cwPair.unusable}. The trail's existing CloudWatch Logs wiring is left untouched for this update.`);
43517
+ const cloudWatchLogsLogGroupArn = cwPair.logGroupArn;
43518
+ const cloudWatchLogsRoleArn = cwPair.roleArn;
43519
+ const kmsKeyId = clearOnUpdateRemoval(emptyToUndefined(properties["KMSKeyId"]), emptyToUndefined(previousProperties["KMSKeyId"]), "");
43441
43520
  const snsTopicName = clearOnUpdateRemoval(emptyToUndefined(properties["SnsTopicName"]), emptyToUndefined(previousProperties["SnsTopicName"]), "");
43442
43521
  const isOrganizationTrail = properties["IsOrganizationTrail"];
43443
43522
  try {
@@ -43618,10 +43697,8 @@ var CloudTrailProvider = class {
43618
43697
  result["IsMultiRegionTrail"] = trail.IsMultiRegionTrail ?? false;
43619
43698
  result["IncludeGlobalServiceEvents"] = trail.IncludeGlobalServiceEvents ?? true;
43620
43699
  result["EnableLogFileValidation"] = trail.LogFileValidationEnabled ?? false;
43621
- if (trail.CloudWatchLogsLogGroupArn && trail.CloudWatchLogsRoleArn) {
43622
- result["CloudWatchLogsLogGroupArn"] = trail.CloudWatchLogsLogGroupArn;
43623
- result["CloudWatchLogsRoleArn"] = trail.CloudWatchLogsRoleArn;
43624
- }
43700
+ result["CloudWatchLogsLogGroupArn"] = trail.CloudWatchLogsLogGroupArn ?? "";
43701
+ result["CloudWatchLogsRoleArn"] = trail.CloudWatchLogsRoleArn ?? "";
43625
43702
  result["KMSKeyId"] = trail.KmsKeyId ?? "";
43626
43703
  result["SnsTopicName"] = trail.SnsTopicName ?? "";
43627
43704
  result["IsOrganizationTrail"] = trail.IsOrganizationTrail ?? false;
@@ -68288,7 +68365,7 @@ function createMigrateCommand() {
68288
68365
  */
68289
68366
  function buildProgram() {
68290
68367
  const program = new Command();
68291
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.280.0");
68368
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.280.2");
68292
68369
  program.hook("preAction", (_thisCommand, actionCommand) => {
68293
68370
  const { profile } = actionCommand.optsWithGlobals();
68294
68371
  if (profile !== void 0) process.env["AWS_PROFILE"] = profile;