An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

[![Build Status](https://travis-ci.org/xogroup/joi2gql.svg?branch=master)](https://travis-ci.org/xogroup/joi2gql)
[![npm version](https://badge.fury.io/js/joi2gql.svg)](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