herbs2gql creates GraphQL types based on herbs entities (gotu) and usecases (buchu), based on Apollo GraphQL.
$ npm install herbs2gql
All methods returns a string in GraphQL format representing the type based (gql) and a resolver (when expected).
To convert a Herbs Entity to GraphQL Type:
const entity = entity('User', {
id: field(String),
name: field(String),
document: field(String),
age: field(Number),
active: field(Boolean),
})
const gql = entity2type(entity)
To convert a Herbs Entity to GraphQL Input:
const entity = entity('UserFilter', {
name: field(String),
age: field(Number),
})
const gql = entity2input(entity)
To convert a Herbs Use Case to GraphQL Query:
const usecase = usecase('Get User', {
request: {
id: Number,
document: String
},
response: User
})
const resolverFunc = (parent, args, context, info) => { }
const [gql, resolver] = usecase2query(usecase, resolverFunc)
To convert a Herbs Use Case to GraphQL Mutation:
const usecase = usecase('Update User', {
request: {
id: Number,
name: String,
age: Number,
active: Boolean
},
response: User
})
const resolverFunc = (parent, args, context, info) => { }
const [gql, resolver] = usecase2mutation(usecase, resolverFunc)
To convert a Herbs Use Case to GraphQL Subscription:
const usecase = usecase('New User Notification', {
request: {
id: Number,
},
response: UserMessage
})
const resolverFunc = () => { }
const [gql, resolver] = usecase2subscription(usecase, resolverFunc)
In Herbs it is possible to include personalized names for queries, mutations, inputs and types custom names are always prioritized
const options = { inputName: 'An-Entity' }
// for entity2input
const gql = entity2input(givenAnInput, options)
// for entity2type
const gql = entity2type(givenAnEntity, options)
//for mutation, query or subscription example using mutation
const [gql, resolver] = usecase2mutation(givenAnUseCase, resolverFunc, options)
At the convention, a function must be sent, it must return a text formatted according to the sended convention
const options = { convention: { inputNameRule: (str) => `snake_case_returned` }}
// for entity2input
const gql = entity2input(givenAnInput, options)
// for entity2type
const gql = entity2type(givenAnEntity, options)
//for mutation, query or subscription example using mutation
const [gql, resolver] = usecase2mutation(givenAnUseCase, resolverFunc, options)
Additionally you can view a simple demo application of this library in todolist-on-herbs.
If you would like to help contribute to this repository, please see CONTRIBUTING