@@ -377,23 +377,7 @@ fn read_dependencies(
377377 }
378378 } ;
379379
380- let is_local_dep = {
381- match & project_context. monorepo_context {
382- None => project_context. current_config . name . as_str ( ) == package_name
383- ,
384- Some ( MonoRepoContext :: MonorepoRoot {
385- local_dependencies,
386- local_dev_dependencies,
387- } ) => {
388- local_dependencies. contains ( package_name) || local_dev_dependencies. contains ( package_name)
389- } ,
390- Some ( MonoRepoContext :: MonorepoPackage {
391- parent_config,
392- } ) => {
393- helpers:: is_local_package ( & parent_config. path , & canonical_path)
394- }
395- }
396- } ;
380+ let is_local_dep = is_local_dependency ( project_context, package_name, & canonical_path) ;
397381
398382 let dependencies = read_dependencies (
399383 & mut registered_dependencies_set. to_owned ( ) ,
@@ -414,6 +398,18 @@ fn read_dependencies(
414398 . collect ( )
415399}
416400
401+ fn is_local_dependency ( project_context : & ProjectContext , package_name : & str , canonical_path : & Path ) -> bool {
402+ match & project_context. monorepo_context {
403+ None => project_context. current_config . name . as_str ( ) == package_name,
404+ Some ( MonoRepoContext :: MonorepoRoot { .. } ) => {
405+ helpers:: is_local_package ( project_context. get_root_path ( ) , canonical_path)
406+ }
407+ Some ( MonoRepoContext :: MonorepoPackage { parent_config } ) => {
408+ helpers:: is_local_package ( & parent_config. path , canonical_path)
409+ }
410+ }
411+ }
412+
417413fn flatten_dependencies ( dependencies : Vec < Dependency > ) -> Vec < Dependency > {
418414 let mut flattened: Vec < Dependency > = Vec :: new ( ) ;
419415 for dep in dependencies {
@@ -1035,11 +1031,13 @@ pub fn validate_packages_dependencies(packages: &AHashMap<String, Package>) -> b
10351031#[ cfg( test) ]
10361032mod test {
10371033 use crate :: config;
1034+ use crate :: project_context:: { MonoRepoContext , ProjectContext } ;
10381035
10391036 use super :: { Namespace , Package , read_package_name} ;
10401037 use ahash:: { AHashMap , AHashSet } ;
10411038 use std:: fs;
10421039 use std:: path:: PathBuf ;
1040+ use std:: sync:: RwLock ;
10431041 use tempfile:: TempDir ;
10441042
10451043 pub struct CreatePackageArgs {
@@ -1170,4 +1168,44 @@ mod test {
11701168 )
11711169 ) ;
11721170 }
1171+ #[ test]
1172+ fn monorepo_root_marks_transitive_workspace_dependencies_as_local ( ) {
1173+ let temp_dir = TempDir :: new ( ) . unwrap ( ) ;
1174+ let root = temp_dir. path ( ) ;
1175+
1176+ let mut local_dependencies = AHashSet :: new ( ) ;
1177+ local_dependencies. insert ( "direct" . to_string ( ) ) ;
1178+
1179+ let project_context = ProjectContext {
1180+ current_config : config:: tests:: create_config ( config:: tests:: CreateConfigArgs {
1181+ name : "root" . to_string ( ) ,
1182+ bs_deps : vec ! [ "direct" . to_string( ) ] ,
1183+ build_dev_deps : vec ! [ ] ,
1184+ allowed_dependents : None ,
1185+ path : root. join ( "rescript.json" ) ,
1186+ } ) ,
1187+ monorepo_context : Some ( MonoRepoContext :: MonorepoRoot {
1188+ local_dependencies,
1189+ local_dev_dependencies : AHashSet :: new ( ) ,
1190+ } ) ,
1191+ node_modules_exist_cache : RwLock :: new ( AHashMap :: new ( ) ) ,
1192+ packages_cache : RwLock :: new ( AHashMap :: new ( ) ) ,
1193+ } ;
1194+
1195+ assert ! ( super :: is_local_dependency(
1196+ & project_context,
1197+ "direct" ,
1198+ & root. join( "packages/direct" )
1199+ ) ) ;
1200+ assert ! ( super :: is_local_dependency(
1201+ & project_context,
1202+ "transitive" ,
1203+ & root. join( "packages/transitive" )
1204+ ) ) ;
1205+ assert ! ( !super :: is_local_dependency(
1206+ & project_context,
1207+ "external" ,
1208+ & root. join( "node_modules/external" )
1209+ ) ) ;
1210+ }
11731211}
0 commit comments