Skip to content

Commit

Permalink
fix: better handling of multiple optional peer dependencies (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
dsherret committed May 24, 2023
1 parent 1c858c7 commit 7ee6946
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/resolution/graph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1055,9 +1055,20 @@ impl<'a> GraphDependencyResolver<'a> {
match maybe_new_id {
Some(new_id) => {
if let Some(unresolved_optional_peers) =
self.unresolved_optional_peers.remove(&parent_nv)
self.unresolved_optional_peers.get_mut(&parent_nv)
{
for optional_peer in unresolved_optional_peers {
// todo(dsherret): use drain_retain once it's not in nightly rust
let mut peers =
VecDeque::with_capacity(unresolved_optional_peers.len());
for i in (0..unresolved_optional_peers.len()).rev() {
if unresolved_optional_peers[i].specifier
== dep.bare_specifier
{
peers.push_front(unresolved_optional_peers.remove(i));
}
}

for optional_peer in peers {
let peer_parent = GraphPathNodeOrRoot::Node(
optional_peer.graph_path.clone(),
);
Expand Down Expand Up @@ -2099,12 +2110,17 @@ mod test {
api.ensure_package_version("package-a", "1.0.0");
api.ensure_package_version("package-b", "1.0.0");
api.ensure_package_version("package-peer", "1.0.0");
api.ensure_package_version("package-peer-unresolved", "1.0.0");
api.add_dependency(("package-a", "1.0.0"), ("package-b", "^1"));
api.add_dependency(("package-a", "1.0.0"), ("package-peer", "^1"));
api.add_optional_peer_dependency(
("package-b", "1.0.0"),
("package-peer", "*"),
);
api.add_optional_peer_dependency(
("package-b", "1.0.0"),
("package-peer-unresolved", "*"),
);

let (packages, package_reqs) = run_resolver_and_get_output(
api,
Expand Down

0 comments on commit 7ee6946

Please sign in to comment.