Gql (apollo) config and utils
Install
npm i @nerjs/gql
or:
yarn add @nerjs/gql
Use
createClient()
create Apollo client.
const createClient = require('@nerjs/gql/client')
// or
import createClient from '@nerjs/gql/client'
const client = createClient({/* ...clientOptions */})
clientOptions
prop name | type | required | description |
---|---|---|---|
uri | String | Graphql server endpoint. Used in HttpLink | |
httpOptions | Object | Other options HttpLink | |
wsUri | String | Graphql server websocket endpoint. Used in WebSocketLink | |
wsOptions | Object | Other otions WebSocketLink | |
links | Array | Array of ApolloLinks | |
onError | Function | errorHandler for apollo-link-error |
createGqlServer
create ApolloServer
const createGqlServer = require('@nerjs/gql/server')
const server = createGqlServer({/* ...serverOptions */})
serverOptions
prop name | type | required | description |
---|---|---|---|
app | Application | Express application | |
path | String | Graphql uri endpoint | |
playground | Boolean | Enable graphql playground | |
types | String | Path to graphql types. Used by merge-graphql-schemas | |
resolvers | String | Path to graphql resolvers. Used by merge-graphql-schemas | |
middlewares | Array(Function | Object) | graphql-middleware | |
cors | |||
formatError | |||
context | |||
subscriptions |
GqlProvider
React component. Wrap over ApolloProvider.
const GqlProvider = require('@nerjs/gql/provider')
// or
import GqlProvider from '@nerjs/gql/provider'
import React from 'react'
const App = () => {
return <GqlProvider {.../* providerProps */} />
}
providerProps
- client: (ApolloClient): Required if not use clientOptions
or:
-
{...options}
clientOptions
useGqlErrors
const useGqlErrors = require('@nerjs/gql/useGqlErrors')
// or
import useGqlErrors from '@nerjs/gql/useGqlErrors'
const { lastError } = useGqlErrors()
Returns the last error Does not work outside the GqlProvider or when using the first option
Scalars (resolvers)
const { ...scalars } = require('@nerjs/gql/scalars')
- DateResolver (scalar
Date
) - NumberResolver (scalar
Number
)
gql middlewares
const { ...middlewares } = require('@nerjs/gql/mdw')
validate middleware
const validateMiddleware = require('@nerjs/gql/mdw/validate')
const schemaMiddlewares = {
Query: {
getItem: validateMiddleware({ input: yupInputSchema }),
getItems: validateMiddleware(yupInputSchema)
}
}
Used yup validation default errorWrapper YupGqlError
Custom (not yup) validation
The schema must have a
.validate(input)
method
const { createValidateMiddleware } = require('@nerjs/gql/mdw/validate')
const validateMiddleware = createValidateMiddleware({
isSchemaField: '__isYupSchema__', // The property of an object, by which it is clear that this is a validator scheme
schemaOptions: { abortEarly: false },
errorWrapper: Error
})
notNull middleware
Prevents return NULL
const notNullMiddleware = require('@nerjs/gql/mdw/notNull')
const schemaMiddlewares = {
User: {
getUser: notNullMiddleware('User not found' /* error message */)
}
}
throw NotFoundGqlError(message) if resolver return null
onlyId middleware
Prevents unnecessary resolver calls
const onlyIdMiddleware = require('@nerjs/gql/mdw/onlyId')
const schemaMiddlewares = {
Post: {
author: onlyIdMiddleware()
}
}
returnBoolean middleware
Returns a boolean value depending on the success of the resolver. If
preventError
is specified as true - returns false instead of an exception
const returnBooleanMiddleware = require('@nerjs/gql/mdw/returnBoolean')
const schemaMiddlewares = {
Post: {
author: onlyIdMiddleware(/* preventError = false */)
}
}
combine middlewares
Combines and launches middlewares
const combineMiddlewares = require('@nerjs/gql/mdw/combine')
const schemaMiddlewares = {
Post: {
author: combine(
onlyIdMiddleware(),
notNullMiddleware('Not foud author')
)
}
}