33 instance:: Instance ,
44 instance_state:: InstanceState ,
55 package_json:: PackageJson ,
6- specifier:: { orderable :: IsOrderable , semver :: Semver , simple_semver :: SimpleSemver , Specifier } ,
6+ specifier:: { semver_range :: SemverRange , Specifier } ,
77 version_group:: VersionGroupVariant ,
88 } ,
99 itertools:: Itertools ,
@@ -26,9 +26,9 @@ pub struct Dependency {
2626 /// If this dependency is a local package, this is the local instance.
2727 pub local_instance : RefCell < Option < Rc < Instance > > > ,
2828 /// Does every instance match the filter options provided via the CLI?
29- pub matches_cli_filter : RefCell < bool > ,
29+ pub matches_cli_filter : bool ,
3030 /// The name of the dependency
31- pub name_internal : String ,
31+ pub internal_name : String ,
3232 /// The version to pin all instances to when variant is `Pinned`
3333 pub pinned_specifier : Option < Specifier > ,
3434 /// package.json files developed in the monorepo when variant is `SnappedTo`
@@ -39,7 +39,7 @@ pub struct Dependency {
3939
4040impl Dependency {
4141 pub fn new (
42- name_internal : String ,
42+ internal_name : String ,
4343 variant : VersionGroupVariant ,
4444 pinned_specifier : Option < Specifier > ,
4545 snapped_to_packages : Option < Vec < Rc < RefCell < PackageJson > > > > ,
@@ -48,8 +48,8 @@ impl Dependency {
4848 expected : RefCell :: new ( None ) ,
4949 instances : RefCell :: new ( vec ! [ ] ) ,
5050 local_instance : RefCell :: new ( None ) ,
51- matches_cli_filter : RefCell :: new ( false ) ,
52- name_internal ,
51+ matches_cli_filter : true ,
52+ internal_name ,
5353 pinned_specifier,
5454 snapped_to_packages,
5555 variant,
@@ -68,7 +68,7 @@ impl Dependency {
6868 . instances
6969 . borrow ( )
7070 . iter ( )
71- . map ( |instance| instance. actual_specifier . clone ( ) )
71+ . map ( |instance| instance. descriptor . specifier . clone ( ) )
7272 . collect ( ) ;
7373 set. into_iter ( ) . collect ( )
7474 }
@@ -95,8 +95,8 @@ impl Dependency {
9595 pub fn get_instances_by_specifier ( & self ) -> BTreeMap < String , Vec < Rc < Instance > > > {
9696 let mut map = BTreeMap :: new ( ) ;
9797 for instance in self . instances . borrow ( ) . iter ( ) {
98- let specifier = instance. actual_specifier . unwrap ( ) ;
99- map. entry ( specifier ) . or_insert_with ( Vec :: new) . push ( Rc :: clone ( instance) ) ;
98+ let raw = instance. descriptor . specifier . get_raw ( ) ;
99+ map. entry ( raw ) . or_insert_with ( Vec :: new) . push ( Rc :: clone ( instance) ) ;
100100 }
101101 map
102102 }
@@ -111,30 +111,32 @@ impl Dependency {
111111 . local_instance
112112 . borrow ( )
113113 . as_ref ( )
114- . map ( |instance| instance. actual_specifier . clone ( ) )
114+ . map ( |instance| instance. descriptor . specifier . clone ( ) )
115115 }
116116
117117 pub fn has_local_instance ( & self ) -> bool {
118118 self . local_instance . borrow ( ) . is_some ( )
119119 }
120120
121121 pub fn has_local_instance_with_invalid_specifier ( & self ) -> bool {
122- self . has_local_instance ( )
123- && !matches ! (
124- self . get_local_specifier( ) . unwrap( ) ,
125- Specifier :: Semver ( Semver :: Simple ( SimpleSemver :: Exact ( _) ) )
126- )
122+ self . get_local_specifier ( ) . is_some_and ( |local| {
123+ if let Specifier :: BasicSemver ( semver) = local {
124+ !matches ! ( semver. range_variant, SemverRange :: Exact )
125+ } else {
126+ true
127+ }
128+ } )
127129 }
128130
129131 /// Does every instance in this group have a specifier which is exactly the
130132 /// same?
131133 pub fn every_specifier_is_already_identical ( & self ) -> bool {
132- if let Some ( first_actual) = self . instances . borrow ( ) . first ( ) . map ( |instance| & instance. actual_specifier ) {
134+ if let Some ( first_actual) = self . instances . borrow ( ) . first ( ) . map ( |instance| & instance. descriptor . specifier ) {
133135 self
134136 . instances
135137 . borrow ( )
136138 . iter ( )
137- . all ( |instance| instance. actual_specifier == * first_actual)
139+ . all ( |instance| instance. descriptor . specifier == * first_actual)
138140 } else {
139141 false
140142 }
@@ -148,15 +150,13 @@ impl Dependency {
148150 . instances
149151 . borrow ( )
150152 . iter ( )
151- . filter ( |instance| instance. actual_specifier . is_simple_semver ( ) )
152- . map ( |instance| instance. actual_specifier . clone ( ) )
153+ . filter ( |instance| instance. descriptor . specifier . is_basic_semver ( ) )
154+ . map ( |instance| instance. descriptor . specifier . clone ( ) )
153155 . fold ( None , |preferred, specifier| match preferred {
154156 None => Some ( specifier) ,
155157 Some ( preferred) => {
156- let a = specifier. get_orderable ( ) ;
157- let b = preferred. get_orderable ( ) ;
158- if a. cmp ( & b) == preferred_order {
159- Some ( specifier. clone ( ) )
158+ if specifier. cmp ( & preferred) == preferred_order {
159+ Some ( specifier)
160160 } else {
161161 Some ( preferred)
162162 }
@@ -175,10 +175,10 @@ impl Dependency {
175175 pub fn get_snapped_to_specifier ( & self , every_instance_in_the_project : & [ Rc < Instance > ] ) -> Option < Specifier > {
176176 if let Some ( snapped_to_packages) = & self . snapped_to_packages {
177177 for instance in every_instance_in_the_project {
178- if * instance. name_internal . borrow ( ) == * self . name_internal {
178+ if * instance. internal_name == * self . internal_name {
179179 for snapped_to_package in snapped_to_packages {
180180 if instance. package . borrow ( ) . name == snapped_to_package. borrow ( ) . name {
181- return Some ( instance. actual_specifier . clone ( ) ) ;
181+ return Some ( instance. descriptor . specifier . clone ( ) ) ;
182182 }
183183 }
184184 }
@@ -203,13 +203,13 @@ impl Dependency {
203203 if matches ! ( * b. state. borrow( ) , InstanceState :: Valid ( _) ) && !matches ! ( * a. state. borrow( ) , InstanceState :: Valid ( _) ) {
204204 return Ordering :: Greater ;
205205 }
206- if matches ! ( & a. actual_specifier , Specifier :: None ) {
206+ if matches ! ( & a. descriptor . specifier , Specifier :: None ) {
207207 return Ordering :: Greater ;
208208 }
209- if matches ! ( & b. actual_specifier , Specifier :: None ) {
209+ if matches ! ( & b. descriptor . specifier , Specifier :: None ) {
210210 return Ordering :: Less ;
211211 }
212- let specifier_order = b. actual_specifier . unwrap ( ) . cmp ( & a. actual_specifier . unwrap ( ) ) ;
212+ let specifier_order = b. descriptor . specifier . cmp ( & a. descriptor . specifier ) ;
213213 if matches ! ( specifier_order, Ordering :: Equal ) {
214214 a. package . borrow ( ) . name . cmp ( & b. package . borrow ( ) . name )
215215 } else {
0 commit comments