graphql-resolved
graphql-resolved copied to clipboard
:shipit: Framework agnostic GraphQL resolvers composition

:shipit: graphql-resolved :shipit:
Provides a middleware-like capability to your GraphQL api by enabling the combination of multiple resolvers through a simple and expressive API.
Resolvers solved :shipit:
Installing
npm i graphql-resolved --save
or
yarn add graphql-resolved
Usage
Create your first resolver using the chain, protect or apply api
chain
Return a resolver that is the sum of the ones in the supplied array.
The execution order follows the order from left to right.
The last resolver being the one to return the final expect value.
chain([1, 2, 3, 4])
import { chain } from 'graphql-resolved';
import { isAuthenticated, isAdmin, isTopContributer } from './auth/resolvers';
import * as UserResolvers from './user/resolvers';
const getMe = chain([isAuthenticated, UserResolvers.getMe])
const Query = {
getMe
}
const resolvers = {
Query,
}
apply
Applies a list of resolvers to each of those supplied by the to object.
resolversThe execution order follows the order from left to right.
const allUserResolvers = apply({ resolvers: [isAuthenticated], to: UserResolvers })
const Query = {
...allUserResolvers
}
protect
The protect key work take three arguments:
it(Optional) a resolver function, if suppliedprotectreturns a new resolver functionall(Optional) a map of resolvers, if suppliedprotectreturns an object with the exact same resolvers names as keysusinga list of resolvers to apply(The order matters from left to right).
const getMe = protect({
it: UserResolvers.getMe,
using: [isAuthenticated]
});
const adminResolvers = protect({
all: { PostResolvers.deletePost, PostResolvers.correctPost },
using: [isAuthenticated, isAdmin]
});
const Query = {
getMe
...adminResolvers
}
Tests
npm test
or
yarn test
Contributing
Please feel free to drop an issue or propose a feature or pull request.
License
MIT
