@go-to-k/cdkd 0.153.0 → 0.155.0

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.
@@ -1,4 +1,4 @@
1
- import { a as runDockerStreaming, c as getLogger, d as getLiveRenderer, g as generateResourceNameWithFallback, m as applyDefaultNameForFallback, n as formatDockerLoginError, o as spawnStreaming, r as getDockerCmd, v as withStackName } from "./docker-cmd-EtWSTAje.js";
1
+ import { a as runDockerStreaming, c as getLogger, d as getLiveRenderer, g as generateResourceNameWithFallback, m as applyDefaultNameForFallback, n as formatDockerLoginError, o as spawnStreaming, r as getDockerCmd, v as withStackName } from "./docker-cmd-iDMcWcre.js";
2
2
  import { r as getAwsClients } from "./aws-clients-BF03Alpe.js";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { DeleteObjectCommand, GetBucketLocationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectsV2Command, NoSuchKey, PutObjectCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
@@ -6748,6 +6748,228 @@ function assertRegionMatch(clientRegion, expectedRegion, resourceType, logicalId
6748
6748
  if (clientRegion !== expectedRegion) throw new ProvisioningError(`Refusing to treat NotFound as idempotent delete success for ${logicalId} (${resourceType}): AWS client region ${clientRegion} does not match stack state region ${expectedRegion}. The resource likely still exists in ${expectedRegion}; rerun the destroy with the correct region (e.g. --region ${expectedRegion}).`, resourceType, logicalId, physicalId);
6749
6749
  }
6750
6750
 
6751
+ //#endregion
6752
+ //#region src/provisioning/unsupported-types.generated.ts
6753
+ /**
6754
+ * AUTO-GENERATED by scripts/gen-unsupported-types.ts — DO NOT EDIT BY HAND.
6755
+ * Source: docs/_generated/provider-coverage.json (tier3).
6756
+ * Regenerate: `vp run gen:unsupported-types`.
6757
+ *
6758
+ * AWS CloudFormation resource types AWS reports as
6759
+ * `ProvisioningType: NON_PROVISIONABLE` (Cloud Control API cannot
6760
+ * create/update/delete them) and for which cdkd has no SDK provider. cdkd
6761
+ * pre-flight rejects these fast with an actionable message instead of letting
6762
+ * the optimistic Cloud Control fallthrough fail mid-deploy.
6763
+ */
6764
+ const NON_PROVISIONABLE_TYPES = new Set([
6765
+ "Alexa::ASK::Skill",
6766
+ "AWS::AmazonMQ::ConfigurationAssociation",
6767
+ "AWS::ApiGatewayV2::ApiGatewayManagedOverrides",
6768
+ "AWS::AppMesh::GatewayRoute",
6769
+ "AWS::AppMesh::Mesh",
6770
+ "AWS::AppMesh::Route",
6771
+ "AWS::AppMesh::VirtualGateway",
6772
+ "AWS::AppMesh::VirtualNode",
6773
+ "AWS::AppMesh::VirtualRouter",
6774
+ "AWS::AppMesh::VirtualService",
6775
+ "AWS::AppStream::Fleet",
6776
+ "AWS::AppStream::StackFleetAssociation",
6777
+ "AWS::AppStream::StackUserAssociation",
6778
+ "AWS::AppStream::User",
6779
+ "AWS::AppSync::ApiCache",
6780
+ "AWS::AutoScalingPlans::ScalingPlan",
6781
+ "AWS::BedrockAgentCore::Browser",
6782
+ "AWS::Budgets::Budget",
6783
+ "AWS::CertificateManager::Certificate",
6784
+ "AWS::Cloud9::EnvironmentEC2",
6785
+ "AWS::CloudFormation::CustomResource",
6786
+ "AWS::CloudFormation::Macro",
6787
+ "AWS::CloudFormation::WaitCondition",
6788
+ "AWS::CloudFormation::WaitConditionHandle",
6789
+ "AWS::CloudFront::StreamingDistribution",
6790
+ "AWS::CloudWatch::AnomalyDetector",
6791
+ "AWS::CloudWatch::InsightRule",
6792
+ "AWS::CodeBuild::ReportGroup",
6793
+ "AWS::CodeBuild::SourceCredential",
6794
+ "AWS::CodeCommit::Repository",
6795
+ "AWS::CodeStar::GitHubRepository",
6796
+ "AWS::Config::ConfigurationRecorder",
6797
+ "AWS::Config::DeliveryChannel",
6798
+ "AWS::Config::OrganizationConfigRule",
6799
+ "AWS::Config::RemediationConfiguration",
6800
+ "AWS::DAX::Cluster",
6801
+ "AWS::DAX::ParameterGroup",
6802
+ "AWS::DAX::SubnetGroup",
6803
+ "AWS::DirectoryService::MicrosoftAD",
6804
+ "AWS::DLM::LifecyclePolicy",
6805
+ "AWS::DMS::Certificate",
6806
+ "AWS::DMS::Endpoint",
6807
+ "AWS::DMS::EventSubscription",
6808
+ "AWS::DMS::ReplicationInstance",
6809
+ "AWS::DMS::ReplicationSubnetGroup",
6810
+ "AWS::DMS::ReplicationTask",
6811
+ "AWS::DocDB::DBClusterParameterGroup",
6812
+ "AWS::DocDB::EventSubscription",
6813
+ "AWS::EC2::ClientVpnAuthorizationRule",
6814
+ "AWS::EC2::ClientVpnEndpoint",
6815
+ "AWS::EC2::ClientVpnRoute",
6816
+ "AWS::EC2::ClientVpnTargetNetworkAssociation",
6817
+ "AWS::EC2::NetworkInterfacePermission",
6818
+ "AWS::EC2::VPNGatewayRoutePropagation",
6819
+ "AWS::ElastiCache::SecurityGroup",
6820
+ "AWS::ElastiCache::SecurityGroupIngress",
6821
+ "AWS::ElasticLoadBalancing::LoadBalancer",
6822
+ "AWS::ElasticLoadBalancingV2::ListenerCertificate",
6823
+ "AWS::Elasticsearch::Domain",
6824
+ "AWS::EMR::Cluster",
6825
+ "AWS::EMR::InstanceFleetConfig",
6826
+ "AWS::EMR::InstanceGroupConfig",
6827
+ "AWS::FSx::FileSystem",
6828
+ "AWS::FSx::Snapshot",
6829
+ "AWS::FSx::StorageVirtualMachine",
6830
+ "AWS::FSx::Volume",
6831
+ "AWS::Glue::Classifier",
6832
+ "AWS::Glue::CustomEntityType",
6833
+ "AWS::Glue::DataCatalogEncryptionSettings",
6834
+ "AWS::Glue::DataQualityRuleset",
6835
+ "AWS::Glue::DevEndpoint",
6836
+ "AWS::Glue::MLTransform",
6837
+ "AWS::Glue::Partition",
6838
+ "AWS::Glue::TableOptimizer",
6839
+ "AWS::Greengrass::ConnectorDefinition",
6840
+ "AWS::Greengrass::ConnectorDefinitionVersion",
6841
+ "AWS::Greengrass::CoreDefinition",
6842
+ "AWS::Greengrass::CoreDefinitionVersion",
6843
+ "AWS::Greengrass::DeviceDefinition",
6844
+ "AWS::Greengrass::DeviceDefinitionVersion",
6845
+ "AWS::Greengrass::FunctionDefinition",
6846
+ "AWS::Greengrass::FunctionDefinitionVersion",
6847
+ "AWS::Greengrass::Group",
6848
+ "AWS::Greengrass::GroupVersion",
6849
+ "AWS::Greengrass::LoggerDefinition",
6850
+ "AWS::Greengrass::LoggerDefinitionVersion",
6851
+ "AWS::Greengrass::ResourceDefinition",
6852
+ "AWS::Greengrass::ResourceDefinitionVersion",
6853
+ "AWS::Greengrass::SubscriptionDefinition",
6854
+ "AWS::Greengrass::SubscriptionDefinitionVersion",
6855
+ "AWS::IAM::AccessKey",
6856
+ "AWS::IoT::PolicyPrincipalAttachment",
6857
+ "AWS::IoT::ThingPrincipalAttachment",
6858
+ "AWS::IoTThingsGraph::FlowTemplate",
6859
+ "AWS::KinesisAnalytics::Application",
6860
+ "AWS::KinesisAnalytics::ApplicationOutput",
6861
+ "AWS::KinesisAnalytics::ApplicationReferenceDataSource",
6862
+ "AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption",
6863
+ "AWS::KinesisAnalyticsV2::ApplicationOutput",
6864
+ "AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource",
6865
+ "AWS::LakeFormation::DataLakeSettings",
6866
+ "AWS::LakeFormation::Permissions",
6867
+ "AWS::LakeFormation::Resource",
6868
+ "AWS::ManagedBlockchain::Member",
6869
+ "AWS::ManagedBlockchain::Node",
6870
+ "AWS::MediaConvert::JobTemplate",
6871
+ "AWS::MediaConvert::Preset",
6872
+ "AWS::MediaConvert::Queue",
6873
+ "AWS::MediaLive::Channel",
6874
+ "AWS::MediaLive::Input",
6875
+ "AWS::MediaLive::InputSecurityGroup",
6876
+ "AWS::MediaStore::Container",
6877
+ "AWS::OpsWorks::App",
6878
+ "AWS::OpsWorks::ElasticLoadBalancerAttachment",
6879
+ "AWS::OpsWorks::Instance",
6880
+ "AWS::OpsWorks::Layer",
6881
+ "AWS::OpsWorks::Stack",
6882
+ "AWS::OpsWorks::UserProfile",
6883
+ "AWS::OpsWorks::Volume",
6884
+ "AWS::Pinpoint::ADMChannel",
6885
+ "AWS::Pinpoint::APNSChannel",
6886
+ "AWS::Pinpoint::APNSSandboxChannel",
6887
+ "AWS::Pinpoint::APNSVoipChannel",
6888
+ "AWS::Pinpoint::APNSVoipSandboxChannel",
6889
+ "AWS::Pinpoint::App",
6890
+ "AWS::Pinpoint::ApplicationSettings",
6891
+ "AWS::Pinpoint::BaiduChannel",
6892
+ "AWS::Pinpoint::Campaign",
6893
+ "AWS::Pinpoint::EmailChannel",
6894
+ "AWS::Pinpoint::EmailTemplate",
6895
+ "AWS::Pinpoint::EventStream",
6896
+ "AWS::Pinpoint::GCMChannel",
6897
+ "AWS::Pinpoint::PushTemplate",
6898
+ "AWS::Pinpoint::Segment",
6899
+ "AWS::Pinpoint::SMSChannel",
6900
+ "AWS::Pinpoint::SmsTemplate",
6901
+ "AWS::Pinpoint::VoiceChannel",
6902
+ "AWS::PinpointEmail::ConfigurationSet",
6903
+ "AWS::PinpointEmail::ConfigurationSetEventDestination",
6904
+ "AWS::PinpointEmail::DedicatedIpPool",
6905
+ "AWS::PinpointEmail::Identity",
6906
+ "AWS::QLDB::Ledger",
6907
+ "AWS::RDS::DBSecurityGroup",
6908
+ "AWS::RDS::DBSecurityGroupIngress",
6909
+ "AWS::Redshift::ClusterSecurityGroup",
6910
+ "AWS::Redshift::ClusterSecurityGroupIngress",
6911
+ "AWS::Route53::RecordSetGroup",
6912
+ "AWS::SageMaker::CodeRepository",
6913
+ "AWS::SageMaker::EndpointConfig",
6914
+ "AWS::SageMaker::NotebookInstance",
6915
+ "AWS::SageMaker::NotebookInstanceLifecycleConfig",
6916
+ "AWS::SageMaker::Workteam",
6917
+ "AWS::SDB::Domain",
6918
+ "AWS::ServiceCatalog::AcceptedPortfolioShare",
6919
+ "AWS::ServiceCatalog::CloudFormationProduct",
6920
+ "AWS::ServiceDiscovery::HttpNamespace",
6921
+ "AWS::ServiceDiscovery::Instance",
6922
+ "AWS::ServiceDiscovery::PublicDnsNamespace",
6923
+ "AWS::SES::ReceiptFilter",
6924
+ "AWS::SES::ReceiptRule",
6925
+ "AWS::SES::ReceiptRuleSet",
6926
+ "AWS::WAF::ByteMatchSet",
6927
+ "AWS::WAF::IPSet",
6928
+ "AWS::WAF::Rule",
6929
+ "AWS::WAF::SizeConstraintSet",
6930
+ "AWS::WAF::SqlInjectionMatchSet",
6931
+ "AWS::WAF::WebACL",
6932
+ "AWS::WAF::XssMatchSet",
6933
+ "AWS::WAFRegional::ByteMatchSet",
6934
+ "AWS::WAFRegional::GeoMatchSet",
6935
+ "AWS::WAFRegional::IPSet",
6936
+ "AWS::WAFRegional::RateBasedRule",
6937
+ "AWS::WAFRegional::RegexPatternSet",
6938
+ "AWS::WAFRegional::Rule",
6939
+ "AWS::WAFRegional::SizeConstraintSet",
6940
+ "AWS::WAFRegional::SqlInjectionMatchSet",
6941
+ "AWS::WAFRegional::WebACL",
6942
+ "AWS::WAFRegional::WebACLAssociation",
6943
+ "AWS::WAFRegional::XssMatchSet"
6944
+ ]);
6945
+
6946
+ //#endregion
6947
+ //#region src/provisioning/unsupported-types.ts
6948
+ /**
6949
+ * Helpers for cdkd's genuinely-unsupported resource types.
6950
+ *
6951
+ * The data ({@link NON_PROVISIONABLE_TYPES}) is generated from the
6952
+ * provider-coverage audit (`vp run gen:unsupported-types`); this module adds
6953
+ * the runtime predicates + the actionable issue link used by the pre-flight
6954
+ * check (see {@link ../provisioning/provider-registry.ProviderRegistry.validateResourceTypes}).
6955
+ */
6956
+ /**
6957
+ * True if AWS reports the type as `ProvisioningType: NON_PROVISIONABLE`
6958
+ * (Cloud Control API cannot create/update/delete it) and cdkd has no SDK
6959
+ * provider for it.
6960
+ */
6961
+ function isNonProvisionable(resourceType) {
6962
+ return NON_PROVISIONABLE_TYPES.has(resourceType);
6963
+ }
6964
+ /**
6965
+ * A 1-click pre-filled GitHub issue link requesting cdkd support for a
6966
+ * resource type. Surfaced in the pre-flight error so a user hitting an
6967
+ * unsupported type lands directly in the "request support" flow.
6968
+ */
6969
+ function unsupportedTypeIssueUrl(resourceType) {
6970
+ return `https://github.com/go-to-k/cdkd/issues/new?title=${encodeURIComponent(`Support resource type ${resourceType}`)}&labels=resource-support`;
6971
+ }
6972
+
6751
6973
  //#endregion
6752
6974
  //#region src/provisioning/cloud-control-provider.ts
6753
6975
  /**
@@ -7106,7 +7328,6 @@ var CloudControlProvider = class {
7106
7328
  if (new Set([
7107
7329
  "AWS::IAM::Role",
7108
7330
  "AWS::IAM::Policy",
7109
- "AWS::IAM::ManagedPolicy",
7110
7331
  "AWS::IAM::User",
7111
7332
  "AWS::IAM::Group",
7112
7333
  "AWS::IAM::InstanceProfile",
@@ -7123,6 +7344,7 @@ var CloudControlProvider = class {
7123
7344
  "AWS::CertificateManager::Certificate"
7124
7345
  ]).has(resourceType)) return false;
7125
7346
  if (resourceType.startsWith("Custom::") || resourceType.startsWith("AWS::CloudFormation::CustomResource")) return false;
7347
+ if (isNonProvisionable(resourceType)) return false;
7126
7348
  return resourceType.startsWith("AWS::");
7127
7349
  }
7128
7350
  /**
@@ -7750,11 +7972,25 @@ var ProviderRegistry = class {
7750
7972
  cloudControlProvider;
7751
7973
  customResourceProvider;
7752
7974
  skipResourceTypes = /* @__PURE__ */ new Set();
7975
+ allowedUnsupportedTypes = /* @__PURE__ */ new Set();
7753
7976
  constructor() {
7754
7977
  this.cloudControlProvider = new CloudControlProvider();
7755
7978
  this.customResourceProvider = new CustomResourceProvider();
7756
7979
  }
7757
7980
  /**
7981
+ * Escape hatch for the `--allow-unsupported-types` CLI flag. Named types
7982
+ * bypass the pre-flight unsupported-type rejection and are routed through
7983
+ * Cloud Control optimistically (which will likely still fail for genuinely
7984
+ * NON_PROVISIONABLE types — but the choice is the user's). Per-type rather
7985
+ * than a blanket flag so the user explicitly acknowledges each type.
7986
+ */
7987
+ allowUnsupportedTypes(resourceTypes) {
7988
+ for (const resourceType of resourceTypes) {
7989
+ this.allowedUnsupportedTypes.add(resourceType);
7990
+ this.logger.debug(`Allowing unsupported resource type via escape hatch: ${resourceType}`);
7991
+ }
7992
+ }
7993
+ /**
7758
7994
  * Configure the response bucket for custom resources
7759
7995
  * This allows Lambda handlers using cfn-response to send responses via S3
7760
7996
  */
@@ -7814,6 +8050,10 @@ var ProviderRegistry = class {
7814
8050
  this.logger.debug(`Using Custom Resource provider for ${resourceType}`);
7815
8051
  return this.customResourceProvider;
7816
8052
  }
8053
+ if (this.allowedUnsupportedTypes.has(resourceType)) {
8054
+ this.logger.debug(`Routing escape-hatch-allowed type ${resourceType} through Cloud Control API`);
8055
+ return this.cloudControlProvider;
8056
+ }
7817
8057
  throw new Error(`No provider available for resource type: ${resourceType}. This resource type is not supported by Cloud Control API and no SDK provider is registered.`);
7818
8058
  }
7819
8059
  /**
@@ -7827,6 +8067,7 @@ var ProviderRegistry = class {
7827
8067
  */
7828
8068
  hasProvider(resourceType) {
7829
8069
  if (this.shouldSkipResource(resourceType)) return true;
8070
+ if (this.allowedUnsupportedTypes.has(resourceType)) return true;
7830
8071
  return this.providers.has(resourceType) || CloudControlProvider.isSupportedResourceType(resourceType) || resourceType.startsWith("Custom::") || resourceType === "AWS::CloudFormation::CustomResource";
7831
8072
  }
7832
8073
  /**
@@ -7849,6 +8090,7 @@ var ProviderRegistry = class {
7849
8090
  getProviderType(resourceType) {
7850
8091
  if (this.providers.has(resourceType)) return "sdk";
7851
8092
  if (CloudControlProvider.isSupportedResourceType(resourceType)) return "cloud-control";
8093
+ if (this.allowedUnsupportedTypes.has(resourceType)) return "cloud-control";
7852
8094
  return null;
7853
8095
  }
7854
8096
  /**
@@ -7862,7 +8104,12 @@ var ProviderRegistry = class {
7862
8104
  validateResourceTypes(resourceTypes) {
7863
8105
  const unsupportedTypes = [];
7864
8106
  for (const resourceType of resourceTypes) if (!this.hasProvider(resourceType)) unsupportedTypes.push(resourceType);
7865
- if (unsupportedTypes.length > 0) throw new Error(`The following resource types are not supported:\n` + unsupportedTypes.map((type) => ` - ${type}`).join("\n") + "\n\nThese resource types are not supported by Cloud Control API and no SDK provider is registered.\nPlease report this issue at https://github.com/go-to-k/cdkd/issues so we can add SDK provider support.");
8107
+ if (unsupportedTypes.length > 0) {
8108
+ const details = unsupportedTypes.map((type) => {
8109
+ return ` - ${type}\n ${isNonProvisionable(type) ? "AWS reports this type as NON_PROVISIONABLE (Cloud Control API cannot manage it) and cdkd has no SDK provider for it." : "cdkd does not currently support this type — no SDK provider is registered, and the type is either on cdkd's Cloud Control blocklist (pending a dedicated SDK provider) or is not an AWS:: namespace."}\n Request support: ${unsupportedTypeIssueUrl(type)}`;
8110
+ }).join("\n");
8111
+ throw new Error(`The following resource types are not supported by cdkd:\n` + details + `\n\nTo attempt deployment anyway (Cloud Control will likely fail for NON_PROVISIONABLE types), re-run with: --allow-unsupported-types ${unsupportedTypes.join(",")}`);
8112
+ }
7866
8113
  this.logger.debug(`Validated ${resourceTypes.size} resource types: all have available providers`);
7867
8114
  }
7868
8115
  };
@@ -10065,4 +10312,4 @@ var DeployEngine = class {
10065
10312
 
10066
10313
  //#endregion
10067
10314
  export { CdkdError as $, shouldRetainResource as A, resolveSkipPrefix as B, IntrinsicFunctionResolver as C, TemplateParser as D, DagBuilder as E, Synthesizer as F, CFN_TEMPLATE_URL_LIMIT as G, resolveStateBucketWithDefaultAndSource as H, getDefaultStateBucketName as I, uploadCfnTemplate as J, MIGRATE_TMP_PREFIX as K, getLegacyStateBucketName as L, stringifyValue as M, WorkGraph as N, LockManager as O, buildDockerImage as P, AssetError as Q, resolveApp as R, assertRegionMatch as S, DiffCalculator as T, warnDeprecatedNoPrefixCliFlag as U, resolveStateBucketWithDefault as V, CFN_TEMPLATE_BODY_LIMIT as W, clearBucketRegionCache as X, AssemblyReader as Y, resolveBucketRegion as Z, matchesCdkPath as _, formatError as _t, withRetry as a, LockError as at, ProviderRegistry as b, withErrorHandling as bt, bold as c, PartialFailureError as ct, green as d, ResourceUpdateNotSupportedError as dt, ConfigError as et, red as f, RouteDiscoveryError as ft, CDK_PATH_TAG as g, SynthesisError as gt, collectInlinePolicyNamesManagedBySiblings as h, StateError as ht, withResourceDeadline as i, LocalStartServiceError as it, AssetPublisher as j, S3StateBackend as k, cyan as l, ProvisioningError as lt, IAMRoleProvider as m, StackTerminationProtectionError as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, LocalInvokeBuildError as nt, IMPLICIT_DELETE_DEPENDENCIES as o, MissingCdkCliError as ot, yellow as p, StackHasActiveImportsError as pt, findLargeInlineResources as q, DeployEngine as r, LocalMigrateError as rt, formatResourceLine as s, NestedStackChildDirectDestroyError as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, DependencyError as tt, gray as u, ResourceTimeoutError as ut, normalizeAwsTagsToCfn as v, isCdkdError as vt, applyRoleArnIfSet as w, CloudControlProvider as x, resolveExplicitPhysicalId as y, normalizeAwsError as yt, resolveCaptureObservedState as z };
10068
- //# sourceMappingURL=deploy-engine-9Ct1Z9oH.js.map
10315
+ //# sourceMappingURL=deploy-engine-DWLTHfXj.js.map