Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(query): add array type #9161

Merged
merged 3 commits into from
Sep 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 24 additions & 8 deletions crates/turborepo-lib/src/query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,20 @@ impl Query {
}
}

#[derive(Debug, SimpleObject)]
struct Array<T: OutputType> {
items: Vec<T>,
length: usize,
}

impl<T: OutputType> FromIterator<T> for Array<T> {
fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self {
let items: Vec<_> = iter.into_iter().collect();
let length = items.len();
Self { items, length }
}
}

struct Package {
run: Arc<Run>,
name: PackageName,
Expand Down Expand Up @@ -293,7 +307,7 @@ impl Query {
&self,
base: Option<String>,
head: Option<String>,
) -> Result<Vec<Package>, Error> {
) -> Result<Array<Package>, Error> {
let mut opts = self.run.opts().clone();
opts.scope_opts.affected_range = Some((base, head));

Expand Down Expand Up @@ -322,7 +336,7 @@ impl Query {
}

/// Gets a list of packages that match the given filter
async fn packages(&self, filter: Option<PackagePredicate>) -> Result<Vec<Package>, Error> {
async fn packages(&self, filter: Option<PackagePredicate>) -> Result<Array<Package>, Error> {
let Some(filter) = filter else {
return Ok(self
.run
Expand Down Expand Up @@ -369,7 +383,7 @@ impl Package {
}

/// The upstream packages that have this package as a direct dependency
async fn direct_dependents(&self) -> Result<Vec<Package>, Error> {
async fn direct_dependents(&self) -> Result<Array<Package>, Error> {
let node: PackageNode = PackageNode::Workspace(self.name.clone());
Ok(self
.run
Expand All @@ -386,7 +400,7 @@ impl Package {
}

/// The downstream packages that directly depend on this package
async fn direct_dependencies(&self) -> Result<Vec<Package>, Error> {
async fn direct_dependencies(&self) -> Result<Array<Package>, Error> {
let node: PackageNode = PackageNode::Workspace(self.name.clone());
Ok(self
.run
Expand All @@ -402,7 +416,8 @@ impl Package {
.collect())
}

async fn all_dependents(&self) -> Result<Vec<Package>, Error> {
/// The downstream packages that depend on this package, transitively
async fn all_dependents(&self) -> Result<Array<Package>, Error> {
let node: PackageNode = PackageNode::Workspace(self.name.clone());
Ok(self
.run
Expand All @@ -417,7 +432,8 @@ impl Package {
.collect())
}

async fn all_dependencies(&self) -> Result<Vec<Package>, Error> {
/// The upstream packages that this package depends on, transitively
async fn all_dependencies(&self) -> Result<Array<Package>, Error> {
let node: PackageNode = PackageNode::Workspace(self.name.clone());
Ok(self
.run
Expand All @@ -433,7 +449,7 @@ impl Package {
}

/// The downstream packages that depend on this package, indirectly
async fn indirect_dependents(&self) -> Result<Vec<Package>, Error> {
async fn indirect_dependents(&self) -> Result<Array<Package>, Error> {
let node: PackageNode = PackageNode::Workspace(self.name.clone());
let immediate_dependents = self
.run
Expand All @@ -456,7 +472,7 @@ impl Package {
}

/// The upstream packages that this package depends on, indirectly
async fn indirect_dependencies(&self) -> Result<Vec<Package>, Error> {
async fn indirect_dependencies(&self) -> Result<Array<Package>, Error> {
let node: PackageNode = PackageNode::Workspace(self.name.clone());
let immediate_dependencies = self
.run
Expand Down
2 changes: 1 addition & 1 deletion turborepo-tests/integration/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "turborepo-tests-integration",
"scripts": {
"test": "prysk tests",
"test:interactive": "prysk --interactive tests",
"test:interactive": "PRYSK_INTERACTIVE=true prysk tests",
"test:parallel": ".cram_env/bin/pytest -n auto tests --prysk-shell=`which bash`",
"pretest:parallel": ".cram_env/bin/pip3 install --quiet pytest \"prysk[pytest-plugin]\" pytest-xdist"
},
Expand Down
132 changes: 74 additions & 58 deletions turborepo-tests/integration/tests/affected.t
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,17 @@ Do the same thing with the `ls` command


Do the same thing with the `query` command
$ ${TURBO} query "query { affectedPackages { name } }"
$ ${TURBO} query "query { affectedPackages { items { name } } }"
WARNING query command is experimental and may change in the future
{
"data": {
"affectedPackages": [
{
"name": "my-app"
}
]
"affectedPackages": {
"items": [
{
"name": "my-app"
}
]
}
}
}

Expand Down Expand Up @@ -88,15 +90,17 @@ Do the same thing with the `ls` command


Do the same thing with the `query` command
$ ${TURBO} query "query { affectedPackages { name } }"
$ ${TURBO} query "query { affectedPackages { items { name } } }"
WARNING query command is experimental and may change in the future
{
"data": {
"affectedPackages": [
{
"name": "my-app"
}
]
"affectedPackages": {
"items": [
{
"name": "my-app"
}
]
}
}
}

Expand Down Expand Up @@ -130,15 +134,17 @@ Do the same thing with the `ls` command


Do the same thing with the `query` command
$ ${TURBO} query "query { affectedPackages { name } }"
$ ${TURBO} query "query { affectedPackages { items { name } } }"
WARNING query command is experimental and may change in the future
{
"data": {
"affectedPackages": [
{
"name": "my-app"
}
]
"affectedPackages": {
"items": [
{
"name": "my-app"
}
]
}
}
}

Expand All @@ -163,11 +169,13 @@ Do the same thing with the `ls` command


Do the same thing with the `query` command
$ ${TURBO} query "query { affectedPackages(base: \"HEAD\") { name } }"
$ ${TURBO} query "query { affectedPackages(base: \"HEAD\") { items { name } } }"
WARNING query command is experimental and may change in the future
{
"data": {
"affectedPackages": []
"affectedPackages": {
"items": []
}
}
}

Expand All @@ -192,11 +200,13 @@ Do the same thing with the `ls` command


Do the same thing with the `query` command
$ ${TURBO} query "query { affectedPackages(head: \"main\") { name } }"
$ ${TURBO} query "query { affectedPackages(head: \"main\") { items { name } } }"
WARNING query command is experimental and may change in the future
{
"data": {
"affectedPackages": []
"affectedPackages": {
"items": []
}
}
}

Expand Down Expand Up @@ -235,15 +245,17 @@ Do the same thing with the `ls` command


Do the same thing with the `query` command
$ ${TURBO} query "query { affectedPackages { name } }"
$ ${TURBO} query "query { affectedPackages { items { name } } }"
WARNING query command is experimental and may change in the future
{
"data": {
"affectedPackages": [
{
"name": "my-app"
}
]
"affectedPackages": {
"items": [
{
"name": "my-app"
}
]
}
}
}

Expand Down Expand Up @@ -277,26 +289,28 @@ Do the same thing with the `ls` command


Do the same thing with the `query` command
$ ${TURBO} query "query { affectedPackages { name } }"
$ ${TURBO} query "query { affectedPackages { items { name } } }"
WARNING query command is experimental and may change in the future
WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found

{
"data": {
"affectedPackages": [
{
"name": "//"
},
{
"name": "another"
},
{
"name": "my-app"
},
{
"name": "util"
}
]
"affectedPackages": {
"items": [
{
"name": "//"
},
{
"name": "another"
},
{
"name": "my-app"
},
{
"name": "util"
}
]
}
}
}

Expand Down Expand Up @@ -330,25 +344,27 @@ Do the same thing with the `ls` command


Do the same thing with the `query` command
$ ${TURBO} query "query { affectedPackages { name } }"
$ ${TURBO} query "query { affectedPackages { items { name } } }"
WARNING query command is experimental and may change in the future
WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found

{
"data": {
"affectedPackages": [
{
"name": "//"
},
{
"name": "another"
},
{
"name": "my-app"
},
{
"name": "util"
}
]
"affectedPackages": {
"items": [
{
"name": "//"
},
{
"name": "another"
},
{
"name": "my-app"
},
{
"name": "util"
}
]
}
}
}
Loading
Loading