Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kazuma512/graphql-tools
This Tools is a set of npm packages(@graphql-tools/*) and an opinionated structure for how to build a GraphQL schema and resolvers in JavaScript, following the GraphQL-first development workflow.
https://github.com/kazuma512/graphql-tools
graphql graphql-api graphql-scalars graphql-schema kazuma512 typescript
Last synced: about 1 month ago
JSON representation
This Tools is a set of npm packages(@graphql-tools/*) and an opinionated structure for how to build a GraphQL schema and resolvers in JavaScript, following the GraphQL-first development workflow.
- Host: GitHub
- URL: https://github.com/kazuma512/graphql-tools
- Owner: kazuma512
- License: mit
- Created: 2023-06-02T01:53:55.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2023-06-19T13:32:40.000Z (over 1 year ago)
- Last Synced: 2024-09-28T21:23:19.636Z (about 2 months ago)
- Topics: graphql, graphql-api, graphql-scalars, graphql-schema, kazuma512, typescript
- Language: TypeScript
- Homepage: https://the-guild.dev/graphql/tools/docs/introduction
- Size: 479 KB
- Stars: 11
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# GraphQL-tools: generate and mock GraphQL.js schemas
This package allows you to use the GraphQL schema language to build your [GraphQL.js](https://github.com/graphql/graphql-js) schema, and also includes useful schema tools like per-type mocking.
## Documentation
[Read the docs.](https://the-guild.dev/graphql/tools/docs/introduction)
## Example
When using `graphql-tools`, you describe the schema as a GraphQL type language string:
```js
const schema = `
type Author {
id: ID! # the ! means that every author object _must_ have an id
firstName: String
lastName: String
posts: [Post] # the list of Posts by this author
}type Post {
id: ID!
title: String
author: Author
votes: Int
}# the schema allows the following query:
type Query {
posts: [Post]
}# this schema allows the following mutation:
type Mutation {
upvotePost (
postId: ID!
): Post
}# we need to tell the server which types represent the root query
# and root mutation types. We call them RootQuery and RootMutation by convention.
schema {
query: Query
mutation: Mutation
}
`;export default schema;
```Then you define resolvers as a nested object that maps type and field names to resolver functions:
```js
const resolverMap = {
Query: {
posts() {
return posts;
},
},
Mutation: {
upvotePost(_, { postId }) {
const post = find(posts, { id: postId });
if (!post) {
throw new Error(`Couldn't find post with id ${postId}`);
}
post.votes += 1;
return post;
},
},
Author: {
posts(author) {
return filter(posts, { authorId: author.id });
},
},
Post: {
author(post) {
return find(authors, { id: post.authorId });
},
},
};export default resolverMap;
```At the end, the schema and resolvers are combined using `makeExecutableSchema`:
```js
import schema from './data/schema.js';
import resolverMap from './data/resolvers';
import { makeExecutableSchema } from 'graphql-tools';const executableSchema = makeExecutableSchema({
typeDefs: schema,
resolvers: resolverMap,
});
```## Contributions
Contributions, issues and feature requests are very welcome. If you are using this package and fixed a bug for yourself, please consider submitting a PR!