Skip to content

July 20, 2026

Choose a tag to compare

@theguild-bot theguild-bot released this 20 Jul 17:38
e988937

@graphql-tools/batch-delegate@10.0.28

Patch Changes

  • Updated dependencies [6f2c3b6, 6f2c3b6]:
    • @graphql-tools/delegate@12.1.0

@graphql-tools/delegate@12.1.0

Minor Changes

  • #2473 6f2c3b6 Thanks @enisdenjo! - Automatically resolve plain merged-type references returned by local stitching resolvers

    Local fields introduced through typeDefs or resolvers are wrapped by stitchSchemas. When they return a partial merged type containing a usable key, stitching performs one initial delegation with type merging enabled. The existing stitching planner then handles computed fields, @requires dependencies, batching, nested entities, and fields owned by other subschemas.

Patch Changes

  • #2473 6f2c3b6 Thanks @enisdenjo! - defaultMergedResolver now falls back to the literal field name when an external object does not have the requested response key

    Plain resolver data merged into an external object is keyed by field name, so an aliased request used to resolve to null even though the value was there:

    {
      person {
        fullName: name
      }
    }
    // merged object carries resolver data by field name
    { id: '1', name: 'Local' }

    Previously fullName was null because only the alias was looked up. Now it resolves to 'Local' by field name, matching plain graphql-js behavior. When the response key is present (e.g. the field came from a subschema), it is still preferred.

@graphql-tools/federation@4.4.10

Patch Changes

  • Updated dependencies [6f2c3b6, 6f2c3b6, 6f2c3b6]:
    • @graphql-tools/delegate@12.1.0
    • @graphql-tools/stitch@10.2.0
    • @graphql-tools/wrap@11.1.20

@graphql-mesh/fusion-runtime@1.11.2

Patch Changes

  • #2473 6f2c3b6 Thanks @enisdenjo! - dependencies updates:

  • #2473 6f2c3b6 Thanks @enisdenjo! - Fields that are not provided by any subschema (added through typeDefs or resolvers) can now return partial objects of merged types; the missing fields are resolved from the owning subschema automatically

    type Query {
      personCreated: PersonCreated
    }
    
    type PersonCreated {
      person: Person # merged type, owned by a subschema
      cursor: String
    }
    const resolvers = {
      Query: {
        // only the key of `Person` is provided locally
        personCreated: () => ({ person: { id: '1' }, cursor: 'c1' }),
      },
    };

    Before, person had to be resolved manually even though the stitched schema knows Person and its keys. Now the key is enough: { person { name } } runs through the standard stitching planner, while local data (cursor) and local field resolvers on Person keep working as before. Computed fields, @requires dependencies, batching, and fields from other subschemas use the same type-merging flow as regular delegated results.

  • Updated dependencies [6f2c3b6, 6f2c3b6, 6f2c3b6]:

    • @graphql-tools/delegate@12.1.0
    • @graphql-tools/stitch@10.2.0
    • @graphql-mesh/transport-common@1.0.18
    • @graphql-tools/federation@4.4.10
    • @graphql-tools/stitching-directives@4.0.26
    • @graphql-tools/wrap@11.1.20

@graphql-hive/gateway@2.10.7

Patch Changes

  • #2473 6f2c3b6 Thanks @enisdenjo! - dependencies updates:

  • Updated dependencies [6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6]:

    • @graphql-hive/gateway-runtime@2.10.2
    • @graphql-hive/plugin-opentelemetry@1.4.38
    • @graphql-hive/pubsub@2.2.0
    • @graphql-mesh/hmac-upstream-signature@2.0.13
    • @graphql-mesh/plugin-jwt-auth@2.0.12
    • @graphql-mesh/plugin-prometheus@2.1.54
    • @graphql-mesh/transport-http@1.1.2
    • @graphql-mesh/transport-http-callback@1.0.22
    • @graphql-mesh/transport-ws@2.0.22
    • @graphql-hive/plugin-aws-sigv4@2.0.56

@graphql-hive/nestjs@2.0.87

Patch Changes

  • Updated dependencies [6f2c3b6]:
    • @graphql-hive/gateway@2.10.7

@graphql-hive/plugin-aws-sigv4@2.0.56

Patch Changes

  • Updated dependencies [6f2c3b6, 6f2c3b6]:
    • @graphql-mesh/fusion-runtime@1.11.2

@graphql-hive/plugin-deduplicate-request@2.0.12

Patch Changes

@graphql-mesh/hmac-upstream-signature@2.0.13

Patch Changes

@graphql-mesh/plugin-jwt-auth@2.0.12

Patch Changes

@graphql-hive/plugin-opentelemetry@1.4.38

Patch Changes

@graphql-mesh/plugin-prometheus@2.1.54

Patch Changes

@graphql-hive/pubsub@2.2.0

Minor Changes

  • #2473 6f2c3b6 Thanks @enisdenjo! - Add NATSJetStreamPubSub, a NATS JetStream transport with optional cursor-based replay

    Subscribe like any other Hive PubSub, or pass subscribe options to receive each message with an opaque cursor. Pass that cursor on a later subscription to resume right after it and recover events missed while disconnected. Without a cursor, only messages published after the subscription starts are delivered.

    The JetStream stream is not created or configured by this transport; it must already exist and capture the subjects used by the pubsub (${subjectPrefix}:${topic}).

    import { connect } from '@nats-io/transport-node';
    import { NATSJetStreamPubSub } from '@graphql-hive/pubsub/nats-jetstream';
    
    const nats = await connect({ servers: 'localhost:4222' });
    const pubsub = new NATSJetStreamPubSub(nats, {
      subjectPrefix: 'my-service',
      stream: 'EVENTS',
    });
    
    // live-only: no cursor, only messages published after subscribe starts
    const live = pubsub.subscribe('personCreated', { cursor: undefined });
    const first = await live.next();
    // first.value => { data: { id: '1' }, cursor: '...' }
    await live.return?.();
    
    // published while disconnected is retained by JetStream
    await pubsub.publish('personCreated', { id: '2' });
    
    // resume right after the last seen cursor — gets { id: '2' }, not a repeat of '1'
    for await (const { data, cursor } of pubsub.subscribe('personCreated', {
      cursor: first.value.cursor,
    })) {
      // persist `cursor` so the next reconnect can resume again
    }

Patch Changes

@graphql-hive/router-runtime@1.4.18

Patch Changes

@graphql-hive/gateway-runtime@2.10.2

Patch Changes

  • #2473 6f2c3b6 Thanks @enisdenjo! - dependencies updates:

  • Updated dependencies [6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6, 6f2c3b6]:

    • @graphql-hive/pubsub@2.2.0
    • @graphql-mesh/fusion-runtime@1.11.2
    • @graphql-mesh/hmac-upstream-signature@2.0.13
    • @graphql-tools/delegate@12.1.0
    • @graphql-tools/stitch@10.2.0
    • @graphql-mesh/transport-common@1.0.18
    • @graphql-tools/batch-delegate@10.0.28
    • @graphql-tools/federation@4.4.10
    • @graphql-tools/wrap@11.1.20

@graphql-tools/stitch@10.2.0

Minor Changes

  • #2473 6f2c3b6 Thanks @enisdenjo! - Automatically resolve plain merged-type references returned by local stitching resolvers

    Local fields introduced through typeDefs or resolvers are wrapped by stitchSchemas. When they return a partial merged type containing a usable key, stitching performs one initial delegation with type merging enabled. The existing stitching planner then handles computed fields, @requires dependencies, batching, nested entities, and fields owned by other subschemas.

Patch Changes

  • #2473 6f2c3b6 Thanks @enisdenjo! - Fields that are not provided by any subschema (added through typeDefs or resolvers) can now return partial objects of merged types; the missing fields are resolved from the owning subschema automatically

    type Query {
      personCreated: PersonCreated
    }
    
    type PersonCreated {
      person: Person # merged type, owned by a subschema
      cursor: String
    }
    const resolvers = {
      Query: {
        // only the key of `Person` is provided locally
        personCreated: () => ({ person: { id: '1' }, cursor: 'c1' }),
      },
    };

    Before, person had to be resolved manually even though the stitched schema knows Person and its keys. Now the key is enough: { person { name } } runs through the standard stitching planner, while local data (cursor) and local field resolvers on Person keep working as before. Computed fields, @requires dependencies, batching, and fields from other subschemas use the same type-merging flow as regular delegated results.

  • Updated dependencies [6f2c3b6, 6f2c3b6]:

    • @graphql-tools/delegate@12.1.0
    • @graphql-tools/batch-delegate@10.0.28
    • @graphql-tools/wrap@11.1.20

@graphql-tools/stitching-directives@4.0.26

Patch Changes

  • Updated dependencies [6f2c3b6, 6f2c3b6]:
    • @graphql-tools/delegate@12.1.0

@graphql-hive/gateway-testing@9.0.2

Patch Changes

  • Updated dependencies [6f2c3b6]:
    • @graphql-hive/gateway-runtime@2.10.2

@graphql-mesh/transport-common@1.0.18

Patch Changes

@graphql-mesh/transport-http@1.1.2

Patch Changes

@graphql-mesh/transport-http-callback@1.0.22

Patch Changes

@graphql-mesh/transport-ws@2.0.22

Patch Changes

@graphql-tools/wrap@11.1.20

Patch Changes

  • Updated dependencies [6f2c3b6, 6f2c3b6]:
    • @graphql-tools/delegate@12.1.0