Skip to content

Releases: ardatan/graphql-tools

May 14, 2024

14 May 21:59
0161fc1
Compare
Choose a tag to compare

@graphql-tools/graphql-tag-pluck@8.3.1

Patch Changes

@graphql-tools/code-file-loader@8.1.2

Patch Changes

  • Updated dependencies [ee0daab]:
    • @graphql-tools/graphql-tag-pluck@8.3.1

@graphql-tools/git-loader@8.0.6

Patch Changes

  • Updated dependencies [ee0daab]:
    • @graphql-tools/graphql-tag-pluck@8.3.1

May 08, 2024

08 May 11:32
876f03a
Compare
Choose a tag to compare

@graphql-tools/delegate@10.0.10

Patch Changes

  • #6134 a83da08 Thanks @User! - Ignore unmerged fields

    Let's say you have a gateway schema like in the bottom, and id is added to the query, only if the age 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 see ProductList needs some fields from Product to resolve first

@graphql-tools/federation@1.1.35

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 is node(id: ID!): Node in all subgraphs but one implements User and the other implements Post, the gateway will choose the subgraph that implements User or Post 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/delegate@10.0.10
    • @graphql-tools/stitch@9.2.8

@graphql-tools/stitch@9.2.8

Patch Changes

  • #6134 a83da08 Thanks @User! - Ignore unmerged fields

    Let's say you have a gateway schema like in the bottom, and id is added to the query, only if the age 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 see ProductList needs some fields from Product to resolve first

  • #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 is node(id: ID!): Node in all subgraphs but one implements User and the other implements Post, the gateway will choose the subgraph that implements User or Post 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/delegate@10.0.10

May 02, 2024

02 May 16:50
ecc39c7
Compare
Choose a tag to compare

@graphql-tools/federation@1.1.34

Patch Changes

May 02, 2024

02 May 15:13
0d93831
Compare
Choose a tag to compare

@graphql-tools/federation@1.1.33

Patch Changes

  • 361052a Thanks @ardatan! - Small fix: check all final types to find orphan interfaces

May 02, 2024

02 May 14:46
a6f0490
Compare
Choose a tag to compare

@graphql-tools/delegate@10.0.9

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/federation@1.1.32

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/delegate@10.0.9
    • @graphql-tools/stitch@9.2.7

@graphql-tools/stitch@9.2.7

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/delegate@10.0.9

May 02, 2024

02 May 09:47
1ebf5e5
Compare
Choose a tag to compare

@graphql-tools/federation@1.1.31

Patch Changes

  • 98b2795 Thanks @ardatan! - Improvements on unavailable field selection, and key object projection

  • Updated dependencies [98b2795]:

    • @graphql-tools/stitch@9.2.6

@graphql-tools/stitch@9.2.6

Patch Changes

  • 98b2795 Thanks @ardatan! - Improvements on unavailable field selection, and key object projection

May 02, 2024

02 May 09:19
6a1e02f
Compare
Choose a tag to compare

@graphql-tools/delegate@10.0.8

Patch Changes

@graphql-tools/federation@1.1.30

Patch Changes

  • 9238e14 Thanks @ardatan! - Improvements on field merging and extraction of unavailable fields

  • Updated dependencies [9238e14, 4ce3ffc]:

    • @graphql-tools/stitch@9.2.5
    • @graphql-tools/delegate@10.0.8

@graphql-tools/stitch@9.2.5

Patch Changes

  • 9238e14 Thanks @ardatan! - Improvements on field merging and extraction of unavailable fields

  • Updated dependencies [4ce3ffc]:

    • @graphql-tools/delegate@10.0.8

April 30, 2024

30 Apr 12:05
36913ee
Compare
Choose a tag to compare

@graphql-tools/merge@9.0.4

Patch Changes

  • #6111 a06dbd2 Thanks @lesleydreyer! - Fix directive merging when directive name is inherited from object prototype (i.e. toString)

@graphql-tools/stitch@9.2.4

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 using Product resolver instead of trying to resolve by using non-existing Category resolver from A Subschema.

    Previously, the query planner decides to resolve Category.details after resolving Category from C Subschema. But it will be too late to resolve details because Category is not resolvable in A Subschema.

    So the requests for Category.details and the rest of Category 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/merge@9.0.4

April 29, 2024

29 Apr 15:33
9d79ba2
Compare
Choose a tag to compare

@graphql-tools/delegate@10.0.7

Patch Changes

@graphql-tools/federation@1.1.29

Patch Changes

  • #6109 074fad4 Thanks @ardatan! - Show responses in debug logging with DEBUG env var

  • Updated dependencies [074fad4, 074fad4]:

    • @graphql-tools/delegate@10.0.7
    • @graphql-tools/stitch@9.2.3

@graphql-tools/stitch@9.2.3

Patch Changes

  • #6109 074fad4 Thanks @ardatan! - Exclude fields with __typename while extracting missing fields for the type merging

  • Updated dependencies [074fad4]:

    • @graphql-tools/delegate@10.0.7

April 29, 2024

29 Apr 14:09
663130d
Compare
Choose a tag to compare

@graphql-tools/stitch@9.2.2

Patch Changes