https://github.com/xogroup/joi2gql
Conversion of Joi schemas into GraphQL data types
https://github.com/xogroup/joi2gql
graphql hapi javascript joi models nodejs schema
Last synced: 6 months ago
JSON representation
Conversion of Joi schemas into GraphQL data types
- Host: GitHub
- URL: https://github.com/xogroup/joi2gql
- Owner: xogroup
- License: other
- Created: 2017-08-24T02:55:47.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2022-02-15T14:35:21.000Z (over 3 years ago)
- Last Synced: 2025-04-12T06:53:44.612Z (6 months ago)
- Topics: graphql, hapi, javascript, joi, models, nodejs, schema
- Language: JavaScript
- Homepage:
- Size: 76.2 KB
- Stars: 12
- Watchers: 3
- Forks: 1
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://travis-ci.org/xogroup/joi2gql)
[](https://badge.fury.io/js/joi2gql)Easily convert [Joi](https://github.com/hapijs/joi/) schemas into GraphQL data types.
Lead Mainter: [Samuel Joli](https://github.com/Samueljoli)
## Installation
```Text
npm install --save joi2gql
```
> graphql-js is listed as a peer dependency. `joi2gql` does not install it's own instance of graphql and instead requires parent module to provide it. This avoids any version collisions.## Example
```js
const Joi = require('joi');
const Joi2GQL = require('joi2gql');const joiSchema = Joi.object().keys({
key1: Joi.string(),
key2: Joi.number().integer(),
key3: Joi.array().items(Joi.string()),
key4: Joi.object().keys({
subKey1: Joi.string(),
subKey2: Joi.number()
})
});const GraphQLDataType = Joi2GQL.type(joiSchema);
```## Usage
```js
const {
Server
} = require('hapi');
const {
graphqlHapi
} = require('apollo-server-hapi');const Joi = require('joi');
const Joi2GQL = require('joi2gql');const port = '3000';
const host = 'localhost';
const server = new Server();server.connection({ port, host });
const songSchema = Joi.object().keys({
artist: Joi.string(),
title : Joi.string(),
length: Joi.number().integer(),
});const config = {
name: 'Song',
args: {
id: Joi.number().integer()
},
resolve: (root, args) => {
return {
artist: 'Tycho',
title : 'Awake',
length: 4.43
};
}
};const Song = Joi2GQL.type(songSchema, config);
const rootGQLSchema = {
query: {
song: Song
}
};server.register({
register: graphqlHapi,
options : {
path : '/graphql',
graphqlOptions: {
schema: Joi2GQL.schema( rootGQLSchema )
}
}
});server.start(() => {
if (err) {
throw new Error(err);
}
console.log(`Entering the matrix on port: ${server.info.port}`
});
```## API
See the detailed [API](https://github.com/xogroup/joi2gql/blob/master/API.md) reference.## Contributing
We love community and contributions! Please check out our [guidelines](http://github.com/xogroup/joi2gql/blob/master/.github/CONTRIBUTING.md) before making any PRs.
## Setting up for development
Install dependencies and run test.
```
npm install && npm test
```## GraphQL types not yet supported.
- `GraphQLInterfaceType`
- `GraphQLUnionType`## Notes
Inspired by the [joiql](https://github.com/muraljs/joiql) library