github ardatan/graphql-tools release-1786551475000
August 12, 2026

@graphql-tools/executor@2.0.0

Major Changes

  • #8346
    2273c21
    Thanks @ardatan! - This release adds GraphQL v17 support and aligns
    the existing executor implementation with the latest GraphQL v17 API changes. The following
    changes are included:

    • getAsyncHelpers is now available on GraphQLResolveInfo. Its track method is used whenever
      waitUntil is available, as in Yoga's
      Explicit Resource Management
    • getAbortSignal is now available on GraphQLResolveInfo, matching behavior that was already
      available in this executor implementation, as in Yoga's
      Execution Cancellation
    • GraphQLResolveInfo automatically aligns variableValues according to the GraphQL version for
      better compatibility. In GraphQL v17 and above, variableValues follows the wrapped shape
      ({ coerced, sources }) expected by GraphQL APIs. In GraphQL v16 and below, variableValues
      remains a flat map as in previous versions.
    • If your custom scalar resolvers define __serialize and __parseValue, they are automatically
      mapped to coerceOutputValue and coerceInputValue in GraphQL v17.
    • BREAKING: @graphql-tools/executor's getVariableValues now returns { variableValues }
      on success, where variableValues is a VariableValues object ({ coerced, sources }). On
      failure, it returns { errors }.
    • BREAKING: collectFields, shouldIncludeNode, getDeferValues, and collectSubFields now
      need a VariableValues object instead of Record<string, any> for the variableValues
      argument.
    • visitResult now internally normalizes ExecutionRequest.variables into a
      VariableValues-compatible shape ({ coerced, sources }) before traversing selections.

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0

@graphql-tools/utils@12.0.0

Major Changes

  • #8346
    2273c21
    Thanks @ardatan! - This release adds GraphQL v17 support and aligns
    the existing executor implementation with the latest GraphQL v17 API changes. The following
    changes are included:

    • getAsyncHelpers is now available on GraphQLResolveInfo. Its track method is used whenever
      waitUntil is available, as in Yoga's
      Explicit Resource Management
    • getAbortSignal is now available on GraphQLResolveInfo, matching behavior that was already
      available in this executor implementation, as in Yoga's
      Execution Cancellation
    • GraphQLResolveInfo automatically aligns variableValues according to the GraphQL version for
      better compatibility. In GraphQL v17 and above, variableValues follows the wrapped shape
      ({ coerced, sources }) expected by GraphQL APIs. In GraphQL v16 and below, variableValues
      remains a flat map as in previous versions.
    • If your custom scalar resolvers define __serialize and __parseValue, they are automatically
      mapped to coerceOutputValue and coerceInputValue in GraphQL v17.
    • BREAKING: @graphql-tools/executor's getVariableValues now returns { variableValues }
      on success, where variableValues is a VariableValues object ({ coerced, sources }). On
      failure, it returns { errors }.
    • BREAKING: collectFields, shouldIncludeNode, getDeferValues, and collectSubFields now
      need a VariableValues object instead of Record<string, any> for the variableValues
      argument.
    • visitResult now internally normalizes ExecutionRequest.variables into a
      VariableValues-compatible shape ({ coerced, sources }) before traversing selections.

@graphql-tools/schema@10.1.0

Minor Changes

  • #8346
    2273c21
    Thanks @ardatan! - This release adds GraphQL v17 support and aligns
    the existing executor implementation with the latest GraphQL v17 API changes. The following
    changes are included:

    • getAsyncHelpers is now available on GraphQLResolveInfo. Its track method is used whenever
      waitUntil is available, as in Yoga's
      Explicit Resource Management
    • getAbortSignal is now available on GraphQLResolveInfo, matching behavior that was already
      available in this executor implementation, as in Yoga's
      Execution Cancellation
    • GraphQLResolveInfo automatically aligns variableValues according to the GraphQL version for
      better compatibility. In GraphQL v17 and above, variableValues follows the wrapped shape
      ({ coerced, sources }) expected by GraphQL APIs. In GraphQL v16 and below, variableValues
      remains a flat map as in previous versions.
    • If your custom scalar resolvers define __serialize and __parseValue, they are automatically
      mapped to coerceOutputValue and coerceInputValue in GraphQL v17.
    • BREAKING: @graphql-tools/executor's getVariableValues now returns { variableValues }
      on success, where variableValues is a VariableValues object ({ coerced, sources }). On
      failure, it returns { errors }.
    • BREAKING: collectFields, shouldIncludeNode, getDeferValues, and collectSubFields now
      need a VariableValues object instead of Record<string, any> for the variableValues
      argument.
    • visitResult now internally normalizes ExecutionRequest.variables into a
      VariableValues-compatible shape ({ coerced, sources }) before traversing selections.

Patch Changes

  • Updated dependencies
    [2273c21,
    7fe0319]:
    • @graphql-tools/utils@12.0.0
    • @graphql-tools/merge@9.2.3

@graphql-tools/executor-apollo-link@2.0.13

Patch Changes

@graphql-tools/executor-envelop@4.0.13

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0

@graphql-tools/executor-legacy-ws@1.1.33

Patch Changes

@graphql-tools/executor-urql-exchange@1.0.35

Patch Changes

@graphql-tools/executor-yoga@3.0.43

Patch Changes

@graphql-tools/graphql-tag-pluck@8.3.36

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0

graphql-tools@9.0.34

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/schema@10.1.0

@graphql-tools/import@7.1.19

Patch Changes

  • #8259
    85f1de0
    Thanks @lemonmade! - perf(import): remove redundant work in
    addDefinition's dependency traversal

    addDefinition recurses across the whole dependency graph while assembling each definition's
    imported dependencies. Two things were repeated on every call:

    • visitedFiles.get(filePath) — invariant for the duration of the processImport call, so it's
      now looked up once and hoisted out of the recursion.
    • the per-field dependency-name derivation (visitFieldDefinitionNode /
      visitInputValueDefinitionNode into a fresh Map) — a pure function of the field node and the
      file's static dependency map, so it's now memoized by field identity instead of recomputed every
      time the owning definition is added to a set.

    Pure performance change; output is unchanged (the existing import tests pass and a real-world
    ~12k-line schema produces byte-identical results). Building on the print memoization, this took
    the same codegen pass from ~17s to ~13s. The remaining cost is the O(n²) shape of the closure
    traversal itself (each definition's transitive set is still rebuilt independently); reducing that
    is left for a follow-up as it's a more invasive change.

  • #8258
    6bacf57
    Thanks @lemonmade! - perf(import): memoize print per node when
    assembling imported definitions

    processImport de-duplicates the collected definitions by printing each one to SDL and comparing
    the strings. A single definition node appears in many of the dependency sets (any
    widely-referenced type is pulled in by every definition that depends on it), so print was called
    roughly O(n²) times for n unique nodes. For large, densely-connected schemas this print/visit work
    dominates import time.

    Memoizing print by node identity makes each unique node print at most once. print is a pure
    function of its node, so the output is identical; this is a pure performance change. On a
    ~12k-line schema imported across three projects, this reduced a downstream codegen pass from ~133s
    to ~17s.

  • Updated dependencies
    [2273c21]:

    • @graphql-tools/utils@12.0.0

@graphql-tools/links@10.0.13

Patch Changes

@graphql-tools/load@8.1.16

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/schema@10.1.0
    • @graphql-tools/utils@12.0.0

@graphql-tools/apollo-engine-loader@8.0.35

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0

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

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0
    • @graphql-tools/graphql-tag-pluck@8.3.36

@graphql-tools/git-loader@8.0.41

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0
    • @graphql-tools/graphql-tag-pluck@8.3.36

@graphql-tools/github-loader@9.1.7

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0
    • @graphql-tools/graphql-tag-pluck@8.3.36

@graphql-tools/graphql-file-loader@8.1.19

Patch Changes

  • Updated dependencies
    [2273c21,
    85f1de0,
    6bacf57]:
    • @graphql-tools/utils@12.0.0
    • @graphql-tools/import@7.1.19

@graphql-tools/json-file-loader@8.0.33

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0

@graphql-tools/module-loader@8.0.33

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0

@graphql-tools/url-loader@9.1.7

Patch Changes

@graphql-tools/merge@9.2.3

Patch Changes

  • #8349
    7fe0319
    Thanks @aarne! - Pass the collected directive definitions to
    mergeSchemaDefs so repeatable directives on schema definitions and extend schema extensions
    (e.g. a repeatable @link) are kept as separate instances instead of being collapsed and having
    their arguments merged.

  • Updated dependencies
    [2273c21]:

    • @graphql-tools/utils@12.0.0

@graphql-tools/mock@9.1.13

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/schema@10.1.0
    • @graphql-tools/utils@12.0.0

@graphql-tools/node-require@7.0.45

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0
    • @graphql-tools/load@8.1.16
    • @graphql-tools/graphql-file-loader@8.1.19

@graphql-tools/relay-operation-optimizer@7.1.9

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0

@graphql-tools/resolvers-composition@7.0.36

Patch Changes

  • Updated dependencies
    [2273c21]:
    • @graphql-tools/utils@12.0.0

Don't miss a new graphql-tools release

NewReleases is sending notifications on new releases.