1.0.8 • Published 3 years ago

herbs2gql v1.0.8

Weekly downloads
61
License
MIT
Repository
github
Last release
3 years ago

herbs2gql

​ herbs2gql creates GraphQL types based on herbs entities (gotu) and usecases (buchu), based on Apollo GraphQL. ​

Installing

​ $ npm install herbs2gql ​

Using

​ All methods returns a string in GraphQL format representing the type based (gql) and a resolver (when expected). ​

GraphQL Type

​ To convert a Herbs Entity to GraphQL Type: ​

const { entity2type } = require('herbs2gql')
​
const entity = entity('User', {
    id: field(String),
    name: field(String),
    document: field(String),
    age: field(Number),
    active: field(Boolean),
})
​
const gql = entity2type(entity)

GraphQL Input

​ To convert a Herbs Entity to GraphQL Input: ​

const { entity2input } = require('herbs2gql')
​
const entity = entity('UserFilter', {    
    name: field(String),    
    age: field(Number),    
})
​
const gql = entity2input(entity)

GraphQL Query

​ To convert a Herbs Use Case to GraphQL Query: ​

const { usecase2query } = require('herbs2gql')
​
const usecase = usecase('Get User', {
    request: {
        id: Number,
        document: String
    },
​
    response: User
})
​
const resolverFunc = (parent, args, context, info) => { }
​
const [gql, resolver] = usecase2query(usecase, resolverFunc)

GraphQL Mutation

​ To convert a Herbs Use Case to GraphQL Mutation: ​

const { usecase2mutation } = require('herbs2gql')
​
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)

GraphQL Subscription

​ To convert a Herbs Use Case to GraphQL Subscription: ​

const { usecase2subscription } = require('herbs2gql')
​
const usecase = usecase('New User Notification', {
    request: {
        id: Number,        
    },
​
    response: UserMessage
})
​
const resolverFunc = () => { }
​
const [gql, resolver] = usecase2subscription(usecase, resolverFunc)

GraphQL Resolvers

herbs2gql provides a generic resolver implementation for mutations and queries. ​

const { defaultResolver } = require('herbs2gql')
​
const updateUser = (injection) => usecase('Update User', {
    request: {
        id: Number,
        name: String,
        age: Number,
        active: Boolean
    },
​
    response: User
})
​
const [gql, resolver] = usecase2mutation(updateUser(), defaultResolver(updateUser))

​ In case you need to implement your own resolver: ​

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)

​ Or you can use herbs2gql defaultResolver implementation as a reference. ​ ​

Custom Names or Conventions

In Herbs it is possible to include personalized names for queries, mutations, inputs and types custom names are always prioritized ​

Custom Names

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)

Conventions

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)

Example

​ Additionally you can view a simple demo application of this library in todolist-on-herbs. ​

How to contribute

​ If you would like to help contribute to this repository, please see CONTRIBUTING

License

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago