Easily convert Joi schemas into GraphQL data types.
Lead Mainter: Samuel Joli
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.
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);
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}`
});
See the detailed API reference.
We love community and contributions! Please check out our guidelines before making any PRs.
Install dependencies and run test.
npm install && npm test
GraphQLInterfaceType
GraphQLUnionType
Inspired by the joiql library