Skip to content

Conversion of Joi schemas into GraphQL data types

License

Notifications You must be signed in to change notification settings

xogroup/joi2gql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status npm version

Easily convert Joi schemas into GraphQL data types.

Lead Mainter: Samuel Joli

Installation

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

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

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 reference.

Contributing

We love community and contributions! Please check out our guidelines 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 library