Skip to content

Commit 66d043e

Browse files
committed
feat(config): exit 1 when a dependency type is not found
Closes #234
1 parent 86505a0 commit 66d043e

File tree

3 files changed

+40
-15
lines changed

3 files changed

+40
-15
lines changed

src/context.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,27 +31,34 @@ pub struct Context {
3131
impl Context {
3232
pub fn create(config: Config, packages: Packages) -> Self {
3333
let mut instances = vec![];
34+
let all_dependency_types = config.rcfile.get_all_dependency_types();
3435
let dependency_groups = config.rcfile.get_dependency_groups(&packages);
3536
let semver_groups = config.rcfile.get_semver_groups(&packages);
3637
let mut version_groups = config.rcfile.get_version_groups(&packages);
3738
let local_versions = packages.get_local_versions();
3839

39-
packages.get_all_instances(&config, |mut descriptor| {
40-
let dependency_group = dependency_groups.iter().find(|alias| alias.can_add(&descriptor));
40+
packages.get_all_instances(&all_dependency_types, |mut descriptor| {
41+
let dependency_group = dependency_groups
42+
.iter()
43+
.find(|alias| alias.can_add(&all_dependency_types, &descriptor));
4144

4245
if let Some(group) = dependency_group {
4346
descriptor.internal_name = group.label.clone();
4447
}
4548

4649
match &config.cli.filter {
4750
Some(cli_group) => {
48-
descriptor.matches_cli_filter = cli_group.can_add(&descriptor);
51+
descriptor.matches_cli_filter = cli_group.can_add(&all_dependency_types, &descriptor);
4952
}
5053
None => descriptor.matches_cli_filter = true,
5154
}
5255

53-
let semver_group = semver_groups.iter().find(|group| group.selector.can_add(&descriptor));
54-
let version_group = version_groups.iter_mut().find(|group| group.selector.can_add(&descriptor));
56+
let semver_group = semver_groups
57+
.iter()
58+
.find(|group| group.selector.can_add(&all_dependency_types, &descriptor));
59+
let version_group = version_groups
60+
.iter_mut()
61+
.find(|group| group.selector.can_add(&all_dependency_types, &descriptor));
5562
let instance = Rc::new(Instance::new(descriptor));
5663

5764
instances.push(Rc::clone(&instance));

src/group_selector.rs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use {
2-
crate::{instance::InstanceDescriptor, packages::Packages},
2+
crate::{dependency_type::DependencyType, instance::InstanceDescriptor, packages::Packages},
33
globset::{Glob, GlobMatcher},
4+
log::error,
5+
std::process,
46
};
57

68
#[derive(Clone, Debug)]
@@ -70,30 +72,46 @@ impl GroupSelector {
7072
}
7173
}
7274

73-
pub fn can_add(&self, descriptor: &InstanceDescriptor) -> bool {
74-
self.matches_dependency_types(descriptor)
75+
pub fn can_add(&self, all_dependency_types: &[DependencyType], descriptor: &InstanceDescriptor) -> bool {
76+
self.has_valid_dependency_types(all_dependency_types)
77+
&& self.matches_dependency_types(descriptor)
7578
&& self.matches_packages(descriptor)
7679
&& self.matches_dependencies(descriptor)
7780
&& self.matches_specifier_types(descriptor)
7881
}
7982

80-
pub fn matches_dependency_types(&self, descriptor: &InstanceDescriptor) -> bool {
83+
fn has_valid_dependency_types(&self, all_dependency_types: &[DependencyType]) -> bool {
84+
self
85+
.include_dependency_types
86+
.iter()
87+
.chain(self.exclude_dependency_types.iter())
88+
.for_each(|expected| {
89+
if !all_dependency_types.iter().any(|actual| actual.name == *expected) {
90+
error!("dependencyType '{expected}' does not match any of syncpack or your customTypes");
91+
error!("check your syncpack config file");
92+
process::exit(1);
93+
}
94+
});
95+
true
96+
}
97+
98+
fn matches_dependency_types(&self, descriptor: &InstanceDescriptor) -> bool {
8199
matches_identifiers(
82100
&descriptor.dependency_type.name,
83101
&self.include_dependency_types,
84102
&self.exclude_dependency_types,
85103
)
86104
}
87105

88-
pub fn matches_packages(&self, descriptor: &InstanceDescriptor) -> bool {
106+
fn matches_packages(&self, descriptor: &InstanceDescriptor) -> bool {
89107
matches_globs(&descriptor.package.borrow().name, &self.include_packages, &self.exclude_packages)
90108
}
91109

92-
pub fn matches_dependencies(&self, descriptor: &InstanceDescriptor) -> bool {
110+
fn matches_dependencies(&self, descriptor: &InstanceDescriptor) -> bool {
93111
matches_globs(&descriptor.internal_name, &self.include_dependencies, &self.exclude_dependencies)
94112
}
95113

96-
pub fn matches_specifier_types(&self, descriptor: &InstanceDescriptor) -> bool {
114+
fn matches_specifier_types(&self, descriptor: &InstanceDescriptor) -> bool {
97115
self.include_specifier_types.is_empty()
98116
|| matches_identifiers(
99117
&descriptor.specifier.get_config_identifier(),

src/packages.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use {
22
crate::{
33
cli::Cli,
44
config::Config,
5-
dependency_type::Strategy,
5+
dependency_type::{DependencyType, Strategy},
66
instance::InstanceDescriptor,
77
package_json::PackageJson,
88
rcfile::Rcfile,
@@ -73,13 +73,13 @@ impl Packages {
7373
}
7474

7575
/// Get every instance of a dependency from every package.json file
76-
pub fn get_all_instances<F>(&self, config: &Config, mut on_instance: F)
76+
pub fn get_all_instances<F>(&self, all_dependency_types: &Vec<DependencyType>, mut on_instance: F)
7777
where
7878
F: FnMut(InstanceDescriptor),
7979
{
8080
let local_versions = self.get_local_versions();
8181
for package in self.all.iter() {
82-
for dependency_type in &config.rcfile.get_all_dependency_types() {
82+
for dependency_type in all_dependency_types {
8383
match dependency_type.strategy {
8484
Strategy::NameAndVersionProps => {
8585
if let (Some(Value::String(name)), Some(Value::String(raw_specifier))) = (

0 commit comments

Comments
 (0)