Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/theglenn/graphql-resolved
:shipit: Framework agnostic GraphQL resolvers composition
https://github.com/theglenn/graphql-resolved
authentication graphql graphql-application graphql-schema graphql-server javascript nodejs resolvers
Last synced: about 1 month ago
JSON representation
:shipit: Framework agnostic GraphQL resolvers composition
- Host: GitHub
- URL: https://github.com/theglenn/graphql-resolved
- Owner: theGlenn
- License: mit
- Created: 2018-05-28T00:27:17.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-06-08T16:23:02.000Z (over 6 years ago)
- Last Synced: 2024-10-11T03:33:08.842Z (about 1 month ago)
- Topics: authentication, graphql, graphql-application, graphql-schema, graphql-server, javascript, nodejs, resolvers
- Language: TypeScript
- Homepage:
- Size: 90.8 KB
- Stars: 17
- Watchers: 3
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# :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:
[![NPM][npm-image]][npm-url]
[![Build Status][travis-image]][travis-url]
[![npm version](https://badge.fury.io/js/graphql-resolved.svg)](https://badge.fury.io/js/graphql-resolved)[npm-url]: https://nodei.co/npm/graphql-resolved/
[npm-image]: https://nodei.co/npm/graphql-resolved.png?downloads=true&downloadRank=true&stars=true[travis-image]: https://travis-ci.com/theGlenn/graphql-resolved.svg?branch=master
[travis-url]: https://travis-ci.com/theGlenn/graphql-resolved## Installing
```bash
npm i graphql-resolved --save
```##### or
```bash
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])``````ts
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.
- `resolvers` *The execution order follows the order from left to right*.
```ts
const allUserResolvers = apply({ resolvers: [isAuthenticated], to: UserResolvers })
const Query = {
...allUserResolvers
}
```#### `protect`
The protect key work take three arguments:
- `it` (Optional) a resolver function, if supplied `protect` returns a new resolver function
- `all`(Optional) a map of resolvers, if supplied `protect` returns an object with the exact same resolvers names as keys
- `using` a list of resolvers to apply(*The order matters from left to right*).```ts
const getMe = protect({
it: UserResolvers.getMe,
using: [isAuthenticated]
});const adminResolvers = protect({
all: { PostResolvers.deletePost, PostResolvers.correctPost },
using: [isAuthenticated, isAdmin]
});const Query = {
getMe
...adminResolvers
}
```## Tests
```bash
npm test
```##### or
```bash
yarn test
```## Contributing
Please feel free to drop an issue or propose a feature or pull request.
## License
MIT