@go-to-k/cdkd 0.230.28 → 0.230.30

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
2
  import { A as withErrorHandling, B as generateResourceName, C as StackHasActiveImportsError, F as getLiveRenderer, H as withSkipPrefix, I as PATTERN_B_NAME_OPTIONS, L as PATTERN_B_NAME_PROPERTIES, M as getLogger, P as runStackBuffered, R as PATTERN_B_RESOURCE_TYPES, S as ResourceUpdateNotSupportedError, U as withStackName, V as generateResourceNameWithFallback, _ as MissingCdkCliError, a as assertRegionMatch, b as ProvisioningError, f as LocalInvokeBuildError$1, i as resolveExplicitPhysicalId, k as normalizeAwsError, l as CdkdError, m as LocalStartServiceError, n as matchesCdkPath, o as disableInstanceApiTermination, p as LocalMigrateError, r as normalizeAwsTagsToCfn, s as isTerminationProtectionPropagationError, t as CDK_PATH_TAG, v as NestedStackChildDirectDestroyError, w as StackTerminationProtectionError, x as ResourceTimeoutError, y as PartialFailureError } from "./import-helpers-DayvBD4T.js";
3
3
  import { a as setAwsClients, i as resetAwsClients, r as getAwsClients, t as AwsClients } from "./aws-clients-pjPwZz1r.js";
4
- import { $ as resolveStateBucketWithDefaultAndSource, A as TemplateParser, B as getDockerCmd, C as findActionableSilentDrops, D as applyRoleArnIfSet, E as cfnRefValueFromPhysicalId, F as AssetPublisher, G as Synthesizer, H as runDockerStreaming, I as stringifyValue, J as getLegacyStateBucketName, K as synthesisStatusMessage, L as WorkGraph, M as S3StateBackend, N as rebuildClientForBucketRegion, O as DiffCalculator, P as shouldRetainResource, Q as resolveStateBucketWithDefault, R as buildDockerImage, S as ProviderRegistry, T as IntrinsicFunctionResolver, U as AssetManifestLoader, V as runDockerForeground, W as getDockerImageBySourceHash, X as resolveCaptureObservedState, Y as resolveApp, Z as resolveSkipPrefix, _ as green, a as withRetry, at as uploadCfnTemplate, b as IAMRoleProvider, c as computeImplicitDeleteEdges, ct as resolveBucketRegion, d as isStatefulRecreateTargetSync, et as warnDeprecatedNoPrefixCliFlag, f as renderStatefulReason, g as gray, h as cyan, i as withResourceDeadline, it as findLargeInlineResources, j as LockManager, k as DagBuilder, l as extractDeploymentEventError, m as bold, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as CFN_TEMPLATE_URL_LIMIT, o as isRetryableTransientError, ot as AssemblyReader, p as formatResourceLine, q as getDefaultStateBucketName, r as DeployEngine, rt as MIGRATE_TMP_PREFIX, s as IMPLICIT_DELETE_DEPENDENCIES, t as DEFAULT_RESOURCE_TIMEOUT_MS, tt as CFN_TEMPLATE_BODY_LIMIT, u as MULTI_REGION_RECREATE_BLOCKED_TYPES, v as red, w as CloudControlProvider, x as collectInlinePolicyNamesManagedBySiblings, y as yellow, z as formatDockerLoginError } from "./deploy-engine-DhL8rX8u.js";
4
+ import { $ as resolveStateBucketWithDefaultAndSource, A as TemplateParser, B as getDockerCmd, C as findActionableSilentDrops, D as applyRoleArnIfSet, E as cfnRefValueFromPhysicalId, F as AssetPublisher, G as Synthesizer, H as runDockerStreaming, I as stringifyValue, J as getLegacyStateBucketName, K as synthesisStatusMessage, L as WorkGraph, M as S3StateBackend, N as rebuildClientForBucketRegion, O as DiffCalculator, P as shouldRetainResource, Q as resolveStateBucketWithDefault, R as buildDockerImage, S as ProviderRegistry, T as IntrinsicFunctionResolver, U as AssetManifestLoader, V as runDockerForeground, W as getDockerImageBySourceHash, X as resolveCaptureObservedState, Y as resolveApp, Z as resolveSkipPrefix, _ as green, a as withRetry, at as uploadCfnTemplate, b as IAMRoleProvider, c as computeImplicitDeleteEdges, ct as resolveBucketRegion, d as isStatefulRecreateTargetSync, et as warnDeprecatedNoPrefixCliFlag, f as renderStatefulReason, g as gray, h as cyan, i as withResourceDeadline, it as findLargeInlineResources, j as LockManager, k as DagBuilder, l as extractDeploymentEventError, m as bold, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as CFN_TEMPLATE_URL_LIMIT, o as isRetryableTransientError, ot as AssemblyReader, p as formatResourceLine, q as getDefaultStateBucketName, r as DeployEngine, rt as MIGRATE_TMP_PREFIX, s as IMPLICIT_DELETE_DEPENDENCIES, t as DEFAULT_RESOURCE_TIMEOUT_MS, tt as CFN_TEMPLATE_BODY_LIMIT, u as MULTI_REGION_RECREATE_BLOCKED_TYPES, v as red, w as CloudControlProvider, x as collectInlinePolicyNamesManagedBySiblings, y as yellow, z as formatDockerLoginError } from "./deploy-engine-ByCHAN3p.js";
5
5
  import { t as ASGProvider } from "./asg-provider-Dgj3loIG.js";
6
6
  import { AsyncLocalStorage } from "node:async_hooks";
7
7
  import { createHash, randomBytes, randomUUID } from "node:crypto";
@@ -55,10 +55,11 @@ import { AppSyncClient, CreateApiKeyCommand, CreateDataSourceCommand, CreateGrap
55
55
  import { parse, print } from "graphql";
56
56
  import { CrawlerRunningException, CreateConnectionCommand, CreateCrawlerCommand, CreateDatabaseCommand, CreateJobCommand, CreateSecurityConfigurationCommand, CreateTableCommand as CreateTableCommand$1, CreateTriggerCommand, CreateWorkflowCommand, DeleteConnectionCommand, DeleteCrawlerCommand, DeleteDatabaseCommand, DeleteJobCommand, DeleteSecurityConfigurationCommand, DeleteTableCommand as DeleteTableCommand$1, DeleteTriggerCommand, DeleteWorkflowCommand, EntityNotFoundException, GetConnectionCommand, GetCrawlerCommand, GetDatabaseCommand, GetDatabasesCommand, GetJobCommand, GetSecurityConfigurationCommand, GetSecurityConfigurationsCommand, GetTableCommand, GetTablesCommand, GetTagsCommand, GetTriggerCommand, GetWorkflowCommand, GlueClient, ListWorkflowsCommand, StartCrawlerScheduleCommand, StartTriggerCommand, StopCrawlerCommand, StopCrawlerScheduleCommand, StopTriggerCommand, UpdateConnectionCommand, UpdateCrawlerCommand, UpdateDatabaseCommand, UpdateJobCommand, UpdateTableCommand as UpdateTableCommand$1, UpdateTriggerCommand, UpdateWorkflowCommand } from "@aws-sdk/client-glue";
57
57
  import { AddTagsToStreamCommand, CreateStreamCommand, DecreaseStreamRetentionPeriodCommand, DeleteStreamCommand, DeregisterStreamConsumerCommand, DescribeStreamCommand, DescribeStreamConsumerCommand, DescribeStreamSummaryCommand, IncreaseStreamRetentionPeriodCommand, KinesisClient, ListStreamsCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$17, ListTagsForStreamCommand, RegisterStreamConsumerCommand, RemoveTagsFromStreamCommand, ResourceNotFoundException as ResourceNotFoundException$8, StartStreamEncryptionCommand, StopStreamEncryptionCommand, TagResourceCommand as TagResourceCommand$15, UntagResourceCommand as UntagResourceCommand$14, UpdateShardCountCommand, UpdateStreamModeCommand } from "@aws-sdk/client-kinesis";
58
+ import { CreateScheduleCommand, DeleteScheduleCommand, GetScheduleCommand, ResourceNotFoundException as ResourceNotFoundException$9, SchedulerClient, UpdateScheduleCommand } from "@aws-sdk/client-scheduler";
58
59
  import { AccessPointNotFound, CreateAccessPointCommand, CreateFileSystemCommand, CreateMountTargetCommand, DeleteAccessPointCommand, DeleteFileSystemCommand, DeleteMountTargetCommand, DescribeAccessPointsCommand, DescribeBackupPolicyCommand, DescribeFileSystemPolicyCommand, DescribeFileSystemsCommand, DescribeLifecycleConfigurationCommand, DescribeMountTargetSecurityGroupsCommand, DescribeMountTargetsCommand, EFSClient, FileSystemNotFound, ModifyMountTargetSecurityGroupsCommand, MountTargetNotFound, PutBackupPolicyCommand, PutFileSystemPolicyCommand, PutLifecycleConfigurationCommand, UpdateFileSystemCommand, UpdateFileSystemProtectionCommand } from "@aws-sdk/client-efs";
59
- import { CreateDeliveryStreamCommand, DeleteDeliveryStreamCommand, DescribeDeliveryStreamCommand, FirehoseClient, ListDeliveryStreamsCommand, ListTagsForDeliveryStreamCommand, ResourceNotFoundException as ResourceNotFoundException$9, TagDeliveryStreamCommand, UntagDeliveryStreamCommand, UpdateDestinationCommand } from "@aws-sdk/client-firehose";
60
+ import { CreateDeliveryStreamCommand, DeleteDeliveryStreamCommand, DescribeDeliveryStreamCommand, FirehoseClient, ListDeliveryStreamsCommand, ListTagsForDeliveryStreamCommand, ResourceNotFoundException as ResourceNotFoundException$10, TagDeliveryStreamCommand, UntagDeliveryStreamCommand, UpdateDestinationCommand } from "@aws-sdk/client-firehose";
60
61
  import { AddTagsCommand as AddTagsCommand$1, CloudTrailClient, CreateTrailCommand, DeleteTrailCommand, GetEventSelectorsCommand, GetInsightSelectorsCommand, GetTrailCommand, GetTrailStatusCommand, ListTagsCommand as ListTagsCommand$1, ListTrailsCommand, PutEventSelectorsCommand, PutInsightSelectorsCommand, RemoveTagsCommand as RemoveTagsCommand$1, StartLoggingCommand, StopLoggingCommand, TrailNotFoundException, UpdateTrailCommand } from "@aws-sdk/client-cloudtrail";
61
- import { BatchGetProjectsCommand, CodeBuildClient, CreateProjectCommand, DeleteProjectCommand, ListProjectsCommand, ResourceNotFoundException as ResourceNotFoundException$10, UpdateProjectCommand } from "@aws-sdk/client-codebuild";
62
+ import { BatchGetProjectsCommand, CodeBuildClient, CreateProjectCommand, DeleteProjectCommand, ListProjectsCommand, ResourceNotFoundException as ResourceNotFoundException$11, UpdateProjectCommand } from "@aws-sdk/client-codebuild";
62
63
  import { CreateVectorBucketCommand, DeleteIndexCommand, DeleteVectorBucketCommand, GetVectorBucketCommand, ListIndexesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$18, ListVectorBucketsCommand, S3VectorsClient, TagResourceCommand as TagResourceCommand$16, UntagResourceCommand as UntagResourceCommand$15 } from "@aws-sdk/client-s3vectors";
63
64
  import { CreateNamespaceCommand, CreateTableBucketCommand, CreateTableCommand as CreateTableCommand$2, DeleteNamespaceCommand as DeleteNamespaceCommand$1, DeleteTableBucketCommand, DeleteTableCommand as DeleteTableCommand$2, GetTableBucketCommand, GetTableCommand as GetTableCommand$1, ListNamespacesCommand as ListNamespacesCommand$1, ListTableBucketsCommand, ListTablesCommand as ListTablesCommand$1, ListTagsForResourceCommand as ListTagsForResourceCommand$19, NotFoundException as NotFoundException$5, S3TablesClient, TagResourceCommand as TagResourceCommand$17, UntagResourceCommand as UntagResourceCommand$16 } from "@aws-sdk/client-s3tables";
64
65
  import { Document, Pair, Scalar, YAMLMap, YAMLSeq, parse as parse$1, stringify } from "yaml";
@@ -1445,7 +1446,7 @@ const FLUSH_INTERVAL_MS = 2e3;
1445
1446
  const FLUSH_EVENT_THRESHOLD = 50;
1446
1447
  /** Build-time cdkd version, with a dev fallback for non-built contexts. */
1447
1448
  function getCdkdVersion() {
1448
- return "0.230.28";
1449
+ return "0.230.30";
1449
1450
  }
1450
1451
  /**
1451
1452
  * Generate a time-sortable unique run id, e.g.
@@ -31635,6 +31636,224 @@ function tagListToMap(tags) {
31635
31636
  return Object.keys(out).length > 0 ? out : void 0;
31636
31637
  }
31637
31638
 
31639
+ //#endregion
31640
+ //#region src/provisioning/providers/scheduler-schedule-provider.ts
31641
+ /**
31642
+ * SDK Provider for AWS::Scheduler::Schedule.
31643
+ *
31644
+ * Why an SDK provider instead of the Cloud Control fallback (issue #961):
31645
+ * the type's registry `primaryIdentifier` is `/properties/Name` ONLY, but
31646
+ * the AWS read/update/delete handlers resolve a bare Name against the
31647
+ * DEFAULT schedule group. A schedule created with `GroupName` set to a
31648
+ * custom group is therefore unaddressable via Cloud Control — no identifier
31649
+ * form works (bare name -> NotFound in the default group; `grp|name` ->
31650
+ * ValidationException; the ARN fails the name-pattern check; the schema has
31651
+ * no additionalIdentifiers). Empirically: CC UPDATE failed NotFound, and CC
31652
+ * DELETE landed FAILED/NotFound which the delete path swallowed as
31653
+ * idempotent success — silently orphaning a LIVE schedule that keeps firing
31654
+ * its target. CloudFormation is unaffected because its handler invocations
31655
+ * carry the full previous resource model (including GroupName); the
31656
+ * Scheduler SDK APIs all accept an explicit `GroupName` parameter, which
31657
+ * this provider threads from the resource properties.
31658
+ *
31659
+ * physicalId is the schedule NAME (matches CFn: `Ref` returns the Name, and
31660
+ * pre-existing Cloud-Control-provisioned state also stored the bare name, so
31661
+ * the physicalId is stable across the migration). Because pre-existing
31662
+ * records say `provisionedBy: 'cc-api'`, the type is ALSO exempted from the
31663
+ * sticky cc-api routing rule (see STICKY_CC_MIGRATION_EXEMPT in
31664
+ * provider-registry.ts) — without the exemption the broken CC path would
31665
+ * keep serving existing schedules. GroupName is recovered from `properties`
31666
+ * on update/delete/readCurrentState — the state record carries the resolved
31667
+ * properties.
31668
+ *
31669
+ * A GroupName change is rejected with `ResourceUpdateNotSupportedError`:
31670
+ * `UpdateSchedule` uses GroupName to ADDRESS the schedule (a different
31671
+ * group means "a different schedule"), so an in-place move between groups
31672
+ * is impossible at the API level. The deploy engine's `--replace` fallback
31673
+ * recreates the schedule in the new group.
31674
+ */
31675
+ var SchedulerScheduleProvider = class {
31676
+ client;
31677
+ providerRegion = process.env["AWS_REGION"];
31678
+ logger = getLogger().child("SchedulerScheduleProvider");
31679
+ handledProperties = new Map([["AWS::Scheduler::Schedule", new Set([
31680
+ "Name",
31681
+ "GroupName",
31682
+ "Description",
31683
+ "ScheduleExpression",
31684
+ "ScheduleExpressionTimezone",
31685
+ "StartDate",
31686
+ "EndDate",
31687
+ "State",
31688
+ "KmsKeyArn",
31689
+ "FlexibleTimeWindow",
31690
+ "Target"
31691
+ ])]]);
31692
+ getClient() {
31693
+ if (!this.client) this.client = new SchedulerClient(this.providerRegion ? { region: this.providerRegion } : {});
31694
+ return this.client;
31695
+ }
31696
+ /**
31697
+ * Extract the GroupName a schedule lives in from its CFn properties.
31698
+ * Absent GroupName means the default group — the SDK accepts an omitted
31699
+ * GroupName with the same semantics, so `undefined` passes through.
31700
+ */
31701
+ groupNameOf(properties) {
31702
+ const group = properties?.["GroupName"];
31703
+ return typeof group === "string" && group.length > 0 ? group : void 0;
31704
+ }
31705
+ /**
31706
+ * Map the CFn property shape to the Scheduler SDK input shape. The two
31707
+ * are PascalCase-identical except `StartDate` / `EndDate`, which CFn
31708
+ * carries as ISO strings and the SDK types as `Date`.
31709
+ */
31710
+ toSdkFields(properties) {
31711
+ return {
31712
+ ScheduleExpression: properties["ScheduleExpression"],
31713
+ FlexibleTimeWindow: properties["FlexibleTimeWindow"],
31714
+ Target: properties["Target"],
31715
+ ...properties["Description"] !== void 0 && { Description: properties["Description"] },
31716
+ ...properties["ScheduleExpressionTimezone"] !== void 0 && { ScheduleExpressionTimezone: properties["ScheduleExpressionTimezone"] },
31717
+ ...properties["StartDate"] !== void 0 && { StartDate: new Date(properties["StartDate"]) },
31718
+ ...properties["EndDate"] !== void 0 && { EndDate: new Date(properties["EndDate"]) },
31719
+ ...properties["State"] !== void 0 && { State: properties["State"] },
31720
+ ...properties["KmsKeyArn"] !== void 0 && { KmsKeyArn: properties["KmsKeyArn"] }
31721
+ };
31722
+ }
31723
+ async create(logicalId, resourceType, properties) {
31724
+ const name = properties["Name"] ?? generateResourceName(logicalId, { maxLength: 64 });
31725
+ const groupName = this.groupNameOf(properties);
31726
+ this.logger.debug(`Creating Schedule ${logicalId}: ${name}${groupName ? ` (group: ${groupName})` : ""}`);
31727
+ try {
31728
+ return {
31729
+ physicalId: name,
31730
+ attributes: { Arn: (await this.getClient().send(new CreateScheduleCommand({
31731
+ Name: name,
31732
+ ...groupName && { GroupName: groupName },
31733
+ ...this.toSdkFields(properties)
31734
+ }))).ScheduleArn ?? "" }
31735
+ };
31736
+ } catch (error) {
31737
+ const cause = error instanceof Error ? error : void 0;
31738
+ throw new ProvisioningError(`Failed to create Schedule ${logicalId}: ${cause?.message ?? String(error)}`, resourceType, logicalId, void 0, cause);
31739
+ }
31740
+ }
31741
+ async update(logicalId, physicalId, resourceType, properties, previousProperties) {
31742
+ const groupName = this.groupNameOf(properties);
31743
+ const previousGroupName = this.groupNameOf(previousProperties);
31744
+ if (groupName !== previousGroupName) throw new ResourceUpdateNotSupportedError(resourceType, logicalId, `GroupName addresses the schedule (${previousGroupName ?? "default"} -> ${groupName ?? "default"}); re-run with \`cdkd deploy --replace ${logicalId}\` to recreate it in the new group`);
31745
+ this.logger.debug(`Updating Schedule ${logicalId}: ${physicalId}${groupName ? ` (group: ${groupName})` : ""}`);
31746
+ try {
31747
+ const input = {
31748
+ Name: physicalId,
31749
+ ...groupName && { GroupName: groupName },
31750
+ ...this.toSdkFields(properties)
31751
+ };
31752
+ return {
31753
+ physicalId,
31754
+ wasReplaced: false,
31755
+ attributes: { Arn: (await this.getClient().send(new UpdateScheduleCommand(input))).ScheduleArn ?? "" }
31756
+ };
31757
+ } catch (error) {
31758
+ if (error instanceof ResourceUpdateNotSupportedError) throw error;
31759
+ const cause = error instanceof Error ? error : void 0;
31760
+ throw new ProvisioningError(`Failed to update Schedule ${logicalId}: ${cause?.message ?? String(error)}`, resourceType, logicalId, physicalId, cause);
31761
+ }
31762
+ }
31763
+ async delete(logicalId, physicalId, resourceType, properties, context) {
31764
+ const groupName = this.groupNameOf(properties);
31765
+ if (properties === void 0) this.logger.warn(`State record for Schedule ${logicalId} carries no properties — deleting '${physicalId}' from the default group. If the schedule lives in a custom group, delete it manually: aws scheduler delete-schedule --name ${physicalId} --group-name <group>`);
31766
+ this.logger.debug(`Deleting Schedule ${logicalId}: ${physicalId}${groupName ? ` (group: ${groupName})` : ""}`);
31767
+ try {
31768
+ await this.getClient().send(new DeleteScheduleCommand({
31769
+ Name: physicalId,
31770
+ ...groupName && { GroupName: groupName }
31771
+ }));
31772
+ this.logger.debug(`Deleted Schedule ${logicalId}`);
31773
+ } catch (error) {
31774
+ if (error instanceof ResourceNotFoundException$9) {
31775
+ assertRegionMatch(await this.getClient().config.region(), context?.expectedRegion, resourceType, logicalId, physicalId);
31776
+ this.logger.debug(`Schedule ${logicalId} already deleted (not found), treating as success`);
31777
+ return;
31778
+ }
31779
+ const cause = error instanceof Error ? error : void 0;
31780
+ throw new ProvisioningError(`Failed to delete Schedule ${logicalId}: ${cause?.message ?? String(error)}`, resourceType, logicalId, physicalId, cause);
31781
+ }
31782
+ }
31783
+ /**
31784
+ * Attribute fallback. `Arn` is cached in state at create/update time, so
31785
+ * this only fires for imported/degraded records. A bare schedule name
31786
+ * cannot be resolved to its group here (no properties in this signature),
31787
+ * so the lookup tries the default group and fails with an actionable
31788
+ * message for custom-group schedules.
31789
+ */
31790
+ async getAttribute(physicalId, resourceType, attributeName) {
31791
+ if (attributeName !== "Arn") throw new ProvisioningError(`Unknown attribute ${attributeName} for ${resourceType}`, resourceType, physicalId);
31792
+ try {
31793
+ return (await this.getClient().send(new GetScheduleCommand({ Name: physicalId }))).Arn;
31794
+ } catch (error) {
31795
+ const cause = error instanceof Error ? error : void 0;
31796
+ const customGroupHint = error instanceof ResourceNotFoundException$9 ? " Schedules in a custom group cannot be looked up by bare name; the Arn is normally served from cdkd state attributes." : "";
31797
+ throw new ProvisioningError(`Failed to resolve Arn for Schedule ${physicalId}: ${cause?.message ?? String(error)}.${customGroupHint}`, resourceType, physicalId, physicalId, cause);
31798
+ }
31799
+ }
31800
+ /**
31801
+ * Drift read-back. `properties` carries the state-recorded GroupName, so
31802
+ * custom-group schedules are addressable here (unlike getAttribute).
31803
+ */
31804
+ async readCurrentState(physicalId, _logicalId, _resourceType, properties) {
31805
+ const groupName = this.groupNameOf(properties);
31806
+ try {
31807
+ const response = await this.getClient().send(new GetScheduleCommand({
31808
+ Name: physicalId,
31809
+ ...groupName && { GroupName: groupName }
31810
+ }));
31811
+ const stateHasGroupName = properties?.["GroupName"] !== void 0;
31812
+ return {
31813
+ Name: response.Name,
31814
+ ...response.GroupName !== void 0 && (stateHasGroupName || response.GroupName !== "default") && { GroupName: response.GroupName },
31815
+ ...response.Description !== void 0 && { Description: response.Description },
31816
+ ...response.ScheduleExpression !== void 0 && { ScheduleExpression: response.ScheduleExpression },
31817
+ ...response.ScheduleExpressionTimezone !== void 0 && { ScheduleExpressionTimezone: response.ScheduleExpressionTimezone },
31818
+ ...response.StartDate !== void 0 && { StartDate: response.StartDate.toISOString() },
31819
+ ...response.EndDate !== void 0 && { EndDate: response.EndDate.toISOString() },
31820
+ ...response.State !== void 0 && { State: response.State },
31821
+ ...response.KmsKeyArn !== void 0 && { KmsKeyArn: response.KmsKeyArn },
31822
+ ...response.FlexibleTimeWindow !== void 0 && { FlexibleTimeWindow: response.FlexibleTimeWindow },
31823
+ ...response.Target !== void 0 && { Target: response.Target }
31824
+ };
31825
+ } catch (error) {
31826
+ if (error instanceof ResourceNotFoundException$9) return;
31827
+ throw error;
31828
+ }
31829
+ }
31830
+ /**
31831
+ * Import by explicit physical id (`--resource <logicalId>=<name>` or the
31832
+ * template's `Name` property). The schedule's group is read from the
31833
+ * template properties, so custom-group schedules import correctly.
31834
+ *
31835
+ * No tag-based auto-lookup: EventBridge Scheduler schedules do not
31836
+ * support resource tags, so there is no `aws:cdk:path` to match.
31837
+ */
31838
+ async import(input) {
31839
+ const explicit = resolveExplicitPhysicalId(input, "Name");
31840
+ if (!explicit) return null;
31841
+ const groupName = this.groupNameOf(input.properties);
31842
+ try {
31843
+ return {
31844
+ physicalId: explicit,
31845
+ attributes: { Arn: (await this.getClient().send(new GetScheduleCommand({
31846
+ Name: explicit,
31847
+ ...groupName && { GroupName: groupName }
31848
+ }))).Arn ?? "" }
31849
+ };
31850
+ } catch (error) {
31851
+ if (error instanceof ResourceNotFoundException$9) return null;
31852
+ throw error;
31853
+ }
31854
+ }
31855
+ };
31856
+
31638
31857
  //#endregion
31639
31858
  //#region src/provisioning/providers/efs-provider.ts
31640
31859
  /**
@@ -32767,7 +32986,7 @@ var FirehoseProvider = class {
32767
32986
  await this.getClient().send(new DeleteDeliveryStreamCommand({ DeliveryStreamName: physicalId }));
32768
32987
  this.logger.debug(`Successfully deleted Firehose delivery stream ${logicalId}`);
32769
32988
  } catch (error) {
32770
- if (error instanceof ResourceNotFoundException$9) {
32989
+ if (error instanceof ResourceNotFoundException$10) {
32771
32990
  assertRegionMatch(await this.getClient().config.region(), context?.expectedRegion, resourceType, logicalId, physicalId);
32772
32991
  this.logger.debug(`Firehose delivery stream ${physicalId} does not exist, skipping deletion`);
32773
32992
  return;
@@ -33304,7 +33523,7 @@ var FirehoseProvider = class {
33304
33523
  try {
33305
33524
  desc = (await this.getClient().send(new DescribeDeliveryStreamCommand({ DeliveryStreamName: physicalId }))).DeliveryStreamDescription;
33306
33525
  } catch (err) {
33307
- if (err instanceof ResourceNotFoundException$9) return void 0;
33526
+ if (err instanceof ResourceNotFoundException$10) return void 0;
33308
33527
  throw err;
33309
33528
  }
33310
33529
  if (!desc) return void 0;
@@ -33335,7 +33554,7 @@ var FirehoseProvider = class {
33335
33554
  try {
33336
33555
  result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForDeliveryStreamCommand({ DeliveryStreamName: physicalId }))).Tags);
33337
33556
  } catch (err) {
33338
- if (err instanceof ResourceNotFoundException$9) return void 0;
33557
+ if (err instanceof ResourceNotFoundException$10) return void 0;
33339
33558
  this.logger.debug(`Firehose ListTagsForDeliveryStream(${physicalId}) failed: ${err instanceof Error ? err.message : String(err)}`);
33340
33559
  result["Tags"] = [];
33341
33560
  }
@@ -33372,7 +33591,7 @@ var FirehoseProvider = class {
33372
33591
  attributes: {}
33373
33592
  };
33374
33593
  } catch (err) {
33375
- if (err instanceof ResourceNotFoundException$9) return null;
33594
+ if (err instanceof ResourceNotFoundException$10) return null;
33376
33595
  throw err;
33377
33596
  }
33378
33597
  if (!input.cdkPath) return null;
@@ -34145,7 +34364,7 @@ var CodeBuildProvider = class {
34145
34364
  await this.getClient().send(new DeleteProjectCommand({ name: physicalId }));
34146
34365
  this.logger.debug(`Successfully deleted CodeBuild Project ${logicalId}`);
34147
34366
  } catch (error) {
34148
- if (error instanceof ResourceNotFoundException$10) {
34367
+ if (error instanceof ResourceNotFoundException$11) {
34149
34368
  assertRegionMatch(await this.getClient().config.region(), context?.expectedRegion, resourceType, logicalId, physicalId);
34150
34369
  this.logger.debug(`CodeBuild Project ${physicalId} does not exist, skipping deletion`);
34151
34370
  return;
@@ -34200,7 +34419,7 @@ var CodeBuildProvider = class {
34200
34419
  try {
34201
34420
  project = (await this.getClient().send(new BatchGetProjectsCommand({ names: [physicalId] }))).projects?.[0];
34202
34421
  } catch (err) {
34203
- if (err instanceof ResourceNotFoundException$10) return void 0;
34422
+ if (err instanceof ResourceNotFoundException$11) return void 0;
34204
34423
  throw err;
34205
34424
  }
34206
34425
  if (!project) return void 0;
@@ -34345,7 +34564,7 @@ var CodeBuildProvider = class {
34345
34564
  attributes: {}
34346
34565
  } : null;
34347
34566
  } catch (err) {
34348
- if (err instanceof ResourceNotFoundException$10) return null;
34567
+ if (err instanceof ResourceNotFoundException$11) return null;
34349
34568
  throw err;
34350
34569
  }
34351
34570
  if (!input.cdkPath) return null;
@@ -37035,6 +37254,7 @@ function registerAllProviders(registry) {
37035
37254
  registry.register("AWS::KMS::Alias", kmsProvider);
37036
37255
  registry.register("AWS::Kinesis::Stream", new KinesisStreamProvider());
37037
37256
  registry.register("AWS::Kinesis::StreamConsumer", new KinesisStreamConsumerProvider());
37257
+ registry.register("AWS::Scheduler::Schedule", new SchedulerScheduleProvider());
37038
37258
  const efsProvider = new EFSProvider();
37039
37259
  registry.register("AWS::EFS::FileSystem", efsProvider);
37040
37260
  registry.register("AWS::EFS::MountTarget", efsProvider);
@@ -55430,7 +55650,7 @@ function reorderArgs(argv) {
55430
55650
  async function main() {
55431
55651
  installPipeCloseHandler();
55432
55652
  const program = new Command();
55433
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.230.28");
55653
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.230.30");
55434
55654
  program.addCommand(createBootstrapCommand());
55435
55655
  program.addCommand(createSynthCommand());
55436
55656
  program.addCommand(createListCommand());