From 79f7ef765813ee5e72015cfdd7c769b19bd9fb52 Mon Sep 17 00:00:00 2001 From: Jaap Frolich Date: Thu, 12 Jun 2025 13:55:17 +0200 Subject: [PATCH 1/2] don't add deps to modules that are in packages that are not a dependency --- src/build/deps.rs | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/build/deps.rs b/src/build/deps.rs index 59ddd3c..2cb19ae 100644 --- a/src/build/deps.rs +++ b/src/build/deps.rs @@ -10,6 +10,7 @@ fn get_dep_modules( package_modules: &AHashSet, valid_modules: &AHashSet, package: &packages::Package, + build_state: &BuildState, ) -> AHashSet { let mut deps = AHashSet::new(); let ast_file = package.get_build_path() + "/" + ast_file; @@ -30,6 +31,24 @@ fn get_dep_modules( panic!("Could not read file {}", ast_file); } + // Get the list of allowed dependency packages for this package + let allowed_dependencies: AHashSet = package + .config + .bs_dependencies + .as_ref() + .unwrap_or(&vec![]) + .iter() + .chain( + package + .config + .bs_dev_dependencies + .as_ref() + .unwrap_or(&vec![]) + .iter(), + ) + .cloned() + .collect(); + return deps .iter() .map(|dep| { @@ -56,11 +75,28 @@ fn get_dep_modules( } }) .filter(|dep| { - valid_modules.contains(dep) + // First check if the module exists + let module_exists = valid_modules.contains(dep) && match namespace.to_owned() { Some(namespace) => !dep.eq(&namespace), None => true, + }; + + if !module_exists { + return false; + } + + // If the module exists, check if it's in the same package (always allowed) + if let Some(dep_module) = build_state.modules.get(dep) { + if dep_module.package_name == package.name { + return true; } + + // If it's in a different package, check if that package is a declared dependency + return allowed_dependencies.contains(&dep_module.package_name); + } + + false }) .collect::>(); } @@ -84,6 +120,7 @@ pub fn get_deps(build_state: &mut BuildState, deleted_modules: &AHashSet package.modules.as_ref().unwrap(), all_mod, &package, + build_state, ); if let Some(interface) = &source_file.interface { @@ -95,6 +132,7 @@ pub fn get_deps(build_state: &mut BuildState, deleted_modules: &AHashSet package.modules.as_ref().unwrap(), all_mod, &package, + build_state, )) } match &package.namespace { From 3c1b32751d86156b26ac00733dedc619b1e45856 Mon Sep 17 00:00:00 2001 From: Jaap Frolich Date: Thu, 12 Jun 2025 14:07:08 +0200 Subject: [PATCH 2/2] fix bug --- src/build/deps.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/build/deps.rs b/src/build/deps.rs index 2cb19ae..4cd78db 100644 --- a/src/build/deps.rs +++ b/src/build/deps.rs @@ -86,8 +86,8 @@ fn get_dep_modules( return false; } - // If the module exists, check if it's in the same package (always allowed) if let Some(dep_module) = build_state.modules.get(dep) { + // If the module exists, check if it's in the same package (always allowed) if dep_module.package_name == package.name { return true; } @@ -96,7 +96,7 @@ fn get_dep_modules( return allowed_dependencies.contains(&dep_module.package_name); } - false + true }) .collect::>(); }