Releases: ardatan/graphql-tools
May 14, 2024
@graphql-tools/[email protected]
Patch Changes
- #4439
ee0daab
Thanks @jaschaephraim! - Add option to pluck from custom Vue block
@graphql-tools/[email protected]
Patch Changes
- Updated dependencies [
ee0daab
]:- @graphql-tools/[email protected]
@graphql-tools/[email protected]
Patch Changes
- Updated dependencies [
ee0daab
]:- @graphql-tools/[email protected]
May 08, 2024
@graphql-tools/[email protected]
Patch Changes
-
#6134
a83da08
Thanks @User! - Ignore unmerged fieldsLet's say you have a gateway schema like in the bottom, and
id
is added to the query, only if theage
is requested;# This will be sent as-is { user { name } }
But the following will be transformed;
{ user { name age } }
Into
{ user { id name age } }
type Query {
}
type User {
id: ID! # is the key for all services
name: String!
age: Int! # This comes from another service
}
-
#6150
fc9c71f
Thanks @ardatan! - If there are some fields depending on a nested type resolution, wait until it gets resolved then resolve the rest.See packages/federation/test/fixtures/complex-entity-call example for more details.
You can seeProductList
needs some fields fromProduct
to resolvefirst
@graphql-tools/[email protected]
Patch Changes
-
#6141
cd962c1
Thanks @ardatan! - When the gateway receives the query, now it chooses the best root field if there is the same root field in different subgraphs.
For example, if there isnode(id: ID!): Node
in all subgraphs but one implementsUser
and the other implementsPost
, the gateway will choose the subgraph that implementsUser
orPost
based on the query.If there is a unresolvable interface field, it throws.
See this supergraph and the test query to see a real-life example
-
#6143
04d5431
Thanks @ardatan! - Implement interface objects support -
Updated dependencies [
a83da08
,fc9c71f
,cd962c1
]:- @graphql-tools/[email protected]
- @graphql-tools/[email protected]
@graphql-tools/[email protected]
Patch Changes
-
#6134
a83da08
Thanks @User! - Ignore unmerged fieldsLet's say you have a gateway schema like in the bottom, and
id
is added to the query, only if theage
is requested;# This will be sent as-is { user { name } }
But the following will be transformed;
{ user { name age } }
Into
{ user { id name age } }
type Query {
}
type User {
id: ID! # is the key for all services
name: String!
age: Int! # This comes from another service
}
-
#6150
fc9c71f
Thanks @ardatan! - If there are some fields depending on a nested type resolution, wait until it gets resolved then resolve the rest.See packages/federation/test/fixtures/complex-entity-call example for more details.
You can seeProductList
needs some fields fromProduct
to resolvefirst
-
#6141
cd962c1
Thanks @ardatan! - When the gateway receives the query, now it chooses the best root field if there is the same root field in different subgraphs.
For example, if there isnode(id: ID!): Node
in all subgraphs but one implementsUser
and the other implementsPost
, the gateway will choose the subgraph that implementsUser
orPost
based on the query.If there is a unresolvable interface field, it throws.
See this supergraph and the test query to see a real-life example
-
Updated dependencies [
a83da08
,fc9c71f
]:- @graphql-tools/[email protected]
May 02, 2024
@graphql-tools/[email protected]
Patch Changes
- #6130
508ae6b
Thanks @ardatan! - Support overrides on interfaces
See packages/federation/test/fixtures/federation-compatibility/override-type-interface/supergraph.graphql for more details
May 02, 2024
@graphql-tools/[email protected]
Patch Changes
May 02, 2024
@graphql-tools/[email protected]
Patch Changes
-
#6126
680351e
Thanks @ardatan! - When there is a Node subschema, and others to resolve the rest of the entities by using a union resolver as in Federation like below, it was failing. This version fixes that issue.query { node(id: "1") { id # Fetches from Node ... on User { name # Fetches from User } } }
type Query { node(id: ID!): Node } interface Node { id: ID! } type User implements Node { id: ID! } type Post implements Node { id: ID! }
# User subschema scalar _Any type Query { _entities(representations: [_Any!]!): [_Entity]! } union _Entity = User interface Node { id: ID! } type User implements Node { id: ID! name: String! }
# Post subschema scalar _Any union _Entity = Post type Query { _entities(representations: [_Any!]!): [_Entity]! } interface Node { id: ID! } type Post implements Node { id: ID! title: String! }
@graphql-tools/[email protected]
Patch Changes
-
#6126
680351e
Thanks @ardatan! - When there is a Node subschema, and others to resolve the rest of the entities by using a union resolver as in Federation like below, it was failing. This version fixes that issue.query { node(id: "1") { id # Fetches from Node ... on User { name # Fetches from User } } }
type Query { node(id: ID!): Node } interface Node { id: ID! } type User implements Node { id: ID! } type Post implements Node { id: ID! }
# User subschema scalar _Any type Query { _entities(representations: [_Any!]!): [_Entity]! } union _Entity = User interface Node { id: ID! } type User implements Node { id: ID! name: String! }
# Post subschema scalar _Any union _Entity = Post type Query { _entities(representations: [_Any!]!): [_Entity]! } interface Node { id: ID! } type Post implements Node { id: ID! title: String! }
-
Updated dependencies [
680351e
]:- @graphql-tools/[email protected]
- @graphql-tools/[email protected]
@graphql-tools/[email protected]
Patch Changes
-
#6126
680351e
Thanks @ardatan! - When there is a Node subschema, and others to resolve the rest of the entities by using a union resolver as in Federation like below, it was failing. This version fixes that issue.query { node(id: "1") { id # Fetches from Node ... on User { name # Fetches from User } } }
type Query { node(id: ID!): Node } interface Node { id: ID! } type User implements Node { id: ID! } type Post implements Node { id: ID! }
# User subschema scalar _Any type Query { _entities(representations: [_Any!]!): [_Entity]! } union _Entity = User interface Node { id: ID! } type User implements Node { id: ID! name: String! }
# Post subschema scalar _Any union _Entity = Post type Query { _entities(representations: [_Any!]!): [_Entity]! } interface Node { id: ID! } type Post implements Node { id: ID! title: String! }
-
Updated dependencies [
680351e
]:- @graphql-tools/[email protected]
May 02, 2024
@graphql-tools/[email protected]
Patch Changes
-
98b2795
Thanks @ardatan! - Improvements on unavailable field selection, and key object projection -
Updated dependencies [
98b2795
]:- @graphql-tools/[email protected]
@graphql-tools/[email protected]
Patch Changes
May 02, 2024
@graphql-tools/[email protected]
Patch Changes
@graphql-tools/[email protected]
Patch Changes
-
9238e14
Thanks @ardatan! - Improvements on field merging and extraction of unavailable fields -
Updated dependencies [
9238e14
,4ce3ffc
]:- @graphql-tools/[email protected]
- @graphql-tools/[email protected]
@graphql-tools/[email protected]
Patch Changes
-
9238e14
Thanks @ardatan! - Improvements on field merging and extraction of unavailable fields -
Updated dependencies [
4ce3ffc
]:- @graphql-tools/[email protected]
April 30, 2024
@graphql-tools/[email protected]
Patch Changes
- #6111
a06dbd2
Thanks @lesleydreyer! - Fix directive merging when directive name is inherited from object prototype (i.e. toString)
@graphql-tools/[email protected]
Patch Changes
-
#6117
67a9c49
Thanks @ardatan! - Add field as an unavailable field only if it is not able to resolve by any other subschema;When the following query is sent to the gateway with the following subschemas, the gateway should resolve
Category.details
from A Subschema usingProduct
resolver instead of trying to resolve by using non-existingCategory
resolver from A Subschema.Previously, the query planner decides to resolve
Category.details
after resolvingCategory
from C Subschema. But it will be too late to resolvedetails
becauseCategory
is not resolvable in A Subschema.So the requests for
Category.details
and the rest ofCategory
should be different.So for the following query, we expect a full result;
query { productFromA(id: "1") { id name category { id name details } } }
# A Subschema type Query { productFromA(id: ID): Product # No category resolver is present } type Product { id: ID category: Category } type Category { details: CategoryDetails }
# B Subschema type Query { productFromB(id: ID): Product } type Product { id: ID name: String category: Category } type Category { id: ID }
# C Subschema type Query { categoryFromC(id: ID): Category } type Category { id: ID name: String }
-
Updated dependencies [
a06dbd2
]:- @graphql-tools/[email protected]
April 29, 2024
@graphql-tools/[email protected]
Patch Changes
@graphql-tools/[email protected]
Patch Changes
-
#6109
074fad4
Thanks @ardatan! - Show responses in debug logging withDEBUG
env var -
Updated dependencies [
074fad4
,074fad4
]:- @graphql-tools/[email protected]
- @graphql-tools/[email protected]
@graphql-tools/[email protected]
Patch Changes
-
#6109
074fad4
Thanks @ardatan! - Exclude fields with__typename
while extracting missing fields for the type merging -
Updated dependencies [
074fad4
]:- @graphql-tools/[email protected]