
some missing pieces of the graphql-sequelize bridge
Installation
npm install --save @jcoreio/graphql-sequelize-extra
API
associationFields(model, options)
const {associationFields} = require('@jcoreio/graphql-sequelize-extra')
Creates GraphQL fields for the given sequelize model
's associations
.
Arguments
model: Class<Sequelize.Model<any>>
options: Object
options.getType: (model: Class<Sequelize.Model<any>>) => Object
(required)
Gets the GraphQL type for the given sequelize model.
options.getArgs: (model: Class<Sequelize.Model<any>>) => Object
(optional)
Gets the GraphQL args for the given sequelize model.
options.getResolver: (model: Class<Sequelize.Model<any>>, association: Sequelize.Association) => Function
(optional)
Gets the GraphQL resolve
function for the given sequelize model and association.
Returns
A plain object of GraphQL fields for the given model
's
associations
.
Advice
You should use associationFields
within a fields
thunk since it some
types it needs would fail to be defined if there are circular
associations:
const {models} = sequelize
function getType(model) {
return types[model.name]
}
const types = mapValues(models,
(model) => new graphql.GraphQLObjectType({
name: model.name,
fields: () => ({
...attributeFields(model),
...associationFields(model, {getType}),
})
})
)
Also if you have circular associations, you should use some form of
nested GraphQL query attack prevention.