https://github.com/mfix22/graphql-batch
Create batching GraphQL resolvers
https://github.com/mfix22/graphql-batch
batch graphql resolver zero-dependency
Last synced: 3 months ago
JSON representation
Create batching GraphQL resolvers
- Host: GitHub
- URL: https://github.com/mfix22/graphql-batch
- Owner: mfix22
- License: mit
- Created: 2018-05-30T17:27:29.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2018-06-27T18:14:00.000Z (almost 7 years ago)
- Last Synced: 2025-02-12T03:12:57.721Z (4 months ago)
- Topics: batch, graphql, resolver, zero-dependency
- Language: JavaScript
- Homepage:
- Size: 6.84 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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`](https://github.com/calebmer/graphql-resolve-batch), except we give users finer-grained control of their batching.
[`dataloader`]: https://github.com/facebook/dataloader
```js
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
})
}
}
})
```[`graphql`]: https://github.com/graphql/graphql-js
[`graphql-tools`]: https://github.com/apollographql/graphql-tools## Usage
Install `graphql-batch` with
```sh
$ npm install --save graphql-batch graphql
```
or
```sh
$ yarn add graphql-batch graphql
```and import it as
```js
import createBatchResolver from 'graphql-batch';
```### Examples
1) This example batches up requests to `node` into a single request to `nodes`
```jsconst 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:
```js
function defaultCompositeKey(parent, args, context, info) {
return info.fieldNodes[0].name.value
}
```## Credits
* This is a fork of [`graphql-resolve-batch`](https://github.com/calebmer/graphql-resolve-batch) by [`@calebmer`](https://github.com/calebmer)