0.0.1 • Published 7 years ago
graphql-batch v0.0.1
GraphQL Batch
This library is an alternative to batching with dataloader that works with both graphql and graphql-tools.
Note: this is a fork of graphql-resolve-batch, except we give users finer-grained control of their batching.
import { GraphQLObjectType, GraphQLString } from 'graphql'
import createBatchResolver from 'graphql-batch'
const UserType = new GraphQLObjectType({
// ...
});
const QueryType = new GraphQLObjectType({
name: 'Query',
fields: {
user: {
type: UserType,
resolve: createBatchResolver(async (sources, args, [context]) => {
const { db } = context
const users = await db.loadUsersByIds(sources.map(({ id }) => id))
return users
})
}
}
})Usage
Install graphql-batch with
$ npm install --save graphql-batch graphqlor
$ yarn add graphql-batch graphqland import it as
import createBatchResolver from 'graphql-batch';Examples
1) This example batches up requests to node into a single request to nodes
const resolve = createBatchResolver(
(roots, argss, [context], [info]) =>
queries['nodes']({}, { ids: argss.map(args => args && args.id) }, context, info),
// batch by request id and root field name
(parent, args, context, info) =>
`${context.req && context.req.id}${info.fieldNodes[0].name.value}`)
)
return {
Query: {
node: {
resolve
}
}
}Note: the second parameter is optional and will default to use the first fieldName as the key:
function defaultCompositeKey(parent, args, context, info) {
return info.fieldNodes[0].name.value
}Credits
- This is a fork of
graphql-resolve-batchby@calebmer
0.0.1
7 years ago