@@ -10,6 +10,7 @@ fn get_dep_modules(
10
10
package_modules : & AHashSet < String > ,
11
11
valid_modules : & AHashSet < String > ,
12
12
package : & packages:: Package ,
13
+ build_state : & BuildState ,
13
14
) -> AHashSet < String > {
14
15
let mut deps = AHashSet :: new ( ) ;
15
16
let ast_file = package. get_build_path ( ) + "/" + ast_file;
@@ -30,6 +31,24 @@ fn get_dep_modules(
30
31
panic ! ( "Could not read file {}" , ast_file) ;
31
32
}
32
33
34
+ // Get the list of allowed dependency packages for this package
35
+ let allowed_dependencies: AHashSet < String > = package
36
+ . config
37
+ . bs_dependencies
38
+ . as_ref ( )
39
+ . unwrap_or ( & vec ! [ ] )
40
+ . iter ( )
41
+ . chain (
42
+ package
43
+ . config
44
+ . bs_dev_dependencies
45
+ . as_ref ( )
46
+ . unwrap_or ( & vec ! [ ] )
47
+ . iter ( ) ,
48
+ )
49
+ . cloned ( )
50
+ . collect ( ) ;
51
+
33
52
return deps
34
53
. iter ( )
35
54
. map ( |dep| {
@@ -56,11 +75,28 @@ fn get_dep_modules(
56
75
}
57
76
} )
58
77
. filter ( |dep| {
59
- valid_modules. contains ( dep)
78
+ // First check if the module exists
79
+ let module_exists = valid_modules. contains ( dep)
60
80
&& match namespace. to_owned ( ) {
61
81
Some ( namespace) => !dep. eq ( & namespace) ,
62
82
None => true ,
83
+ } ;
84
+
85
+ if !module_exists {
86
+ return false ;
87
+ }
88
+
89
+ if let Some ( dep_module) = build_state. modules . get ( dep) {
90
+ // If the module exists, check if it's in the same package (always allowed)
91
+ if dep_module. package_name == package. name {
92
+ return true ;
63
93
}
94
+
95
+ // If it's in a different package, check if that package is a declared dependency
96
+ return allowed_dependencies. contains ( & dep_module. package_name ) ;
97
+ }
98
+
99
+ true
64
100
} )
65
101
. collect :: < AHashSet < String > > ( ) ;
66
102
}
@@ -84,6 +120,7 @@ pub fn get_deps(build_state: &mut BuildState, deleted_modules: &AHashSet<String>
84
120
package. modules . as_ref ( ) . unwrap ( ) ,
85
121
all_mod,
86
122
& package,
123
+ build_state,
87
124
) ;
88
125
89
126
if let Some ( interface) = & source_file. interface {
@@ -95,6 +132,7 @@ pub fn get_deps(build_state: &mut BuildState, deleted_modules: &AHashSet<String>
95
132
package. modules . as_ref ( ) . unwrap ( ) ,
96
133
all_mod,
97
134
& package,
135
+ build_state,
98
136
) )
99
137
}
100
138
match & package. namespace {
0 commit comments