Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tungv/load-graphql
automagically load graphql definitions and resolvers and return an executable schema
https://github.com/tungv/load-graphql
graphql nodejs resolver
Last synced: 4 months ago
JSON representation
automagically load graphql definitions and resolvers and return an executable schema
- Host: GitHub
- URL: https://github.com/tungv/load-graphql
- Owner: tungv
- Created: 2017-12-09T15:37:55.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2022-12-07T00:41:48.000Z (about 2 years ago)
- Last Synced: 2024-10-12T13:17:28.117Z (4 months ago)
- Topics: graphql, nodejs, resolver
- Language: JavaScript
- Homepage: https://npm.im/load-graphql
- Size: 454 KB
- Stars: 9
- Watchers: 2
- Forks: 3
- Open Issues: 9
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# Automagically Load GraphQL typedefs and resolvers
## Installation
```sh
> npm i load-graphql# or with yarn
> yarn add load-graphql
````load-graphql` has peerDependencies on `graphql` and `graphql-tools`, so you
need to install these 2 packages as well if you haven't```sh
npm i graphql graphql-tools
```## Usage
assuming you have your project structure as follow:
```
project/
└── src/
├── schema.js
└── graphql/
├── common.graphql
├── some.resolver.js
├── nested
│ ├── deeplyNested.graphql
│ └── deeplyNested.resolver.js
└── otherTypeOfFile.js
``````graphql
# src/graphql/common.graphql
# because Query and Mutation typedef are predefined, you can immediately extend them in your graphql files
extend type Query {
someQuery: String!
someOtherQuery: Number!
}extend type Mutation {
createSomething(title: String!): Boolean
}scalar JSON
``````js
// src/graphql/some.resolver.js
export const Query {
someQuery: () => 'test'// someOtherQuery can be omitted or implement in a different .resolver.js file
}export const Mutation {
createSomething(root, { title }) {
// ... do something here
return true
}
}export const JSON = require('graphql-json-type')
``````js
// src/schema.js file
import loadGraphql from "load-graphql";// or
const loadGraphql = require("load-graphql").default;const pathToGraphqlRootDir = path.join(__dirname, "./graphql");
// difference from v1, in v2, loadGrahpQL return a tuple include the schema, and additional typedef and resovlers
const [executableSchema, reformattedTypeDef, resolversMap] = loadGraphql(
pathToGraphqlRootDir,
);/*
excutableSchema will
1. combine all typedefs in .graphql files, and
2. merge all resolvers in .resolver.js files
these pattern can be configurable
*/
```## Configuration
`loadGraphql` function receives a second `options` parameter with the following
properties:| properties key | default value | description |
| ---------------- | ------------------ | -------------------------------- |
| resolversPattern | `**/*.resolver.js` | glob for matching resolver files |
| typedefsPattern | `**/*.graphql` | glob for matching resolver files |you can pass anything that `glob` package accepts for these options.
## Error handling
`load-graphql` gracefully handles error thrown while trying to parse typedefs
file or `require`'ing resolver files. In case of error, it will ignore the
content of the flawed files and continue.