Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

HydreIO/graphql-batch-executor

Open more actions menu

Repository files navigation

@hydre/graphql-batch-executor

A readable stream executing multiple graphql operations in parallel

This library is made to be used by servers or tools implementer, it can't be used alone.

Install

npm install @hydre/graphql-batch-executor

Usage

Initialize a new Executor per client

import Executor from '@hydre/graphql-batch-executor'
import make_schema from '@hydre/graphql-batch-executor/make_schema'

// i actually wrote a light and efficient version of makeExecutableSchema
// without the shitty code and the 7500 dependencies of graphql-tools
// and using mjs exports of graphql.js
const schema = make_schema({
  document: 'type Query { ping: String! }',
  resolvers: {
    Query: {
      ping: () => 'pong'
    },
    Subscription: {
      ping: {
        resolve: () => 'pong',
        async *subscribe() {
          yield 0
        }
      }
    }
  },
  directives: {
    foo: ({ resolve, // original resolver
            root, // resolver params in the same order
            parameters, // .
            context, // .
            info, // .
            directive_arguments, // parameters for the directive
          }) => {}
  }
})

const executor = new Executor({
  schema, // schema
  context: async () => ({}),
  formatError: x => x // format array of errors
})

The executor generator takes an option object

import stream from 'stream'

stream.pipeline(
    executor.execute({
      document: /* GraphQL */`
          query foo {
            ping
          }

          query bar {
            ping
          }
        `,
      variables: {},
    }),
    async source => {
      for await (const chunk of source) {
        const {
          // query, mutation, subscription
          operation_type,

          // the name
          // note that you can't send queries
          // without names if there are more than one
          operation_name,

          // data result or null
          data,

          // gql errors or []
          errors,
        } = chunk
      }
    },
    () => {
      log('client disconnected')
    },
)

Advanced

see /examples

About

A readable stream executing multiple graphql operations in parallel

Resources

License

Stars

Watchers

Forks

Packages

No packages published
Morty Proxy This is a proxified and sanitized view of the page, visit original site.