From 5d1c76fe03829940785fa9c8a9910b0b663343af Mon Sep 17 00:00:00 2001 From: nicholaslyang Date: Fri, 23 Aug 2024 12:52:10 -0400 Subject: [PATCH] Moved to a custom Array type so we can automatically get length info --- crates/turborepo-lib/src/query.rs | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/crates/turborepo-lib/src/query.rs b/crates/turborepo-lib/src/query.rs index b939b898663c57..a22e21f95dec60 100644 --- a/crates/turborepo-lib/src/query.rs +++ b/crates/turborepo-lib/src/query.rs @@ -38,6 +38,23 @@ impl Query { } } +#[derive(Debug, SimpleObject)] +struct Array { + items: Vec, + length: usize, +} + +unsafe impl Send for Array {} +unsafe impl Sync for Array {} + +impl FromIterator for Array { + fn from_iter>(iter: I) -> Self { + let items: Vec<_> = iter.into_iter().collect(); + let length = items.len(); + Self { items, length } + } +} + struct Package { run: Arc, name: PackageName, @@ -293,7 +310,7 @@ impl Query { &self, base: Option, head: Option, - ) -> Result, Error> { + ) -> Result, Error> { let mut opts = self.run.opts().clone(); opts.scope_opts.affected_range = Some((base, head)); @@ -322,7 +339,7 @@ impl Query { } /// Gets a list of packages that match the given filter - async fn packages(&self, filter: Option) -> Result, Error> { + async fn packages(&self, filter: Option) -> Result, Error> { let Some(filter) = filter else { return Ok(self .run @@ -369,7 +386,7 @@ impl Package { } /// The upstream packages that have this package as a direct dependency - async fn direct_dependents(&self) -> Result, Error> { + async fn direct_dependents(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); Ok(self .run @@ -386,7 +403,7 @@ impl Package { } /// The downstream packages that directly depend on this package - async fn direct_dependencies(&self) -> Result, Error> { + async fn direct_dependencies(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); Ok(self .run @@ -402,7 +419,8 @@ impl Package { .collect()) } - async fn all_dependents(&self) -> Result, Error> { + /// The downstream packages that depend on this package, transitively + async fn all_dependents(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); Ok(self .run @@ -417,7 +435,8 @@ impl Package { .collect()) } - async fn all_dependencies(&self) -> Result, Error> { + /// The upstream packages that this package depends on, transitively + async fn all_dependencies(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); Ok(self .run