graphql-batch

0.0.1 • Public • Published

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 graphql

or

$ yarn add graphql-batch graphql

and 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

Readme

Keywords

Package Sidebar

Install

npm i graphql-batch

Weekly Downloads

0

Version

0.0.1

License

MIT

Unpacked Size

19 kB

Total Files

5

Last publish

Collaborators

  • mfix22