@hydre/graphql-batch-executor
v3.2.0
Published
A transform stream executing multiple graphql operations in parallel
Downloads
66
Readme
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