This library is made to be used by servers or tools implementer, it can't be used alone.
npm install @hydre/graphql-batch-executor
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')
},
)
see /examples