@britishcouncil/grizzly
v0.3.3
Published
Slightly opinionated GraphQL server solution.
Downloads
6
Readme
@britishcouncil/grizzly
Slightly opinionated GraphQL server solution built on Apollo Server, PostGraphile and Express.
Overview
- All the features of the latest Apollo Server, plus
- Support for graphql-middleware
- Support for graphql-shield
- Support for loading schemas from SDL files via graphql-import
- All the features of the latest PostGraphile
- Create multiple GraphQL services (i.e. Apollo or PostGraphile services) over a single Express application
Install
yarn add @britishcouncil/grizzly # npm install @britishcouncil/grizzly
Usage
Quickstart
To get started with @britishcouncil/grizzly
, have a look at the examples.
API
GrizzlyExpress
constructor(props: GrizzlyExpressProps): GrizzlyExpress
The props
argument accepts the following fields:
| Key | Type | Default | Notes |
| ----------------- | ------------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| graphqlServices
| Array of GrizzlyGraphQLServer
| null
| See GrizzlyGraphQLServer
documentation below for more details about this type |
| sessionStore
| Store
| null
| An instance of a session storage for Express server. |
| passport
| Authenticator
| null
| An instance of a passport
authenticator. |
| middlewares
| Array of ExpressMiddleware
| null
| Each ExpressMiddleware
can have a path
(optional) and a function
, e.g. { path: "/hello-world", function: () => "Hello world!" }
or { function: () => console.log("Everything") }
|
| port
| string
or number
| process.env.PORT
or 5000
| HTTP server port. |
| host
| host
| See https://nodejs.org/api/net.html#net_server_listen | HTTP server binding address. |
| session
| SessionOptions
| { secret: process.env.SESSION_SECRET, cookie: { maxAge: 3600000 } // 3600000ms = 1h. }
| Sessions options |
| cors
| CorsOptions
| null
| Cors configuration. |
| bodyParse
| Object
or boolean
| false
| The body-parser options: false
removes the body parser middleware and true
uses the defaults |
GrizzlyApollo
constructor(options: GrizzlyApolloConfig): GrizzlyApollo
The options
argument accepts all the parameters as the options
argument by Apollo Server 2.0, but it also adds:
| Key | Type | Default | Notes |
| ------------- | --------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| schemaFile
| string
| null
| Path to a GraphQL schema written in SDL. If this parameter is specified, there will be no need to specify either typeDefs
or schema
(see Apollo Server options) |
| endpoint
| string
| "/graphql"
| The endpoint with which register the GraphQL service to the Express app. |
| middlewares
| array
of GraphQLMiddleware
| null
| |
GrizzlyPostGraphile
constructor(options: GrizzlyPostGraphileOptions): GrizzlyPostGraphile
The options
argument accepts all the parameters as the options
argument by postgraphile() (see also PostGrpahileOptions
interface), but it also merges into it the other two parameters of the postgraphile()
function:
| Key | Type | Default | Notes |
| ------------ | ---------------------------------- | ----------- | ---------------------------------------------------- |
| pgConfig
| Pool
or PoolConfig
or string
| null
| PostgreSQL connection string or object. |
| schemaName
| string
or Array<string>
| "public"
| PostgreSQL schema(s) you to expose via PostGraphile. |
Types
/**
* Session options.
*/
export interface SessionOptions {
secret?: string;
cookie?: CookieOptions;
}
/**
* General interace for GraphQL servers.
*/
export interface GrizzlyGraphQLServer {
endpoint?: string;
applyMiddleware({
app,
path,
cors,
bodyParserConfig,
disableHealthCheck,
onHealthCheck
}: ServerRegistration): void;
}
/**
* Type for express middlewares. Path is optional.
*/
export interface ExpressMiddleware {
path?: string;
function: Function;
}
/**
* Grizzly Express initialisation options.
*/
export interface GrizzlyExpressProps {
graphqlServices: Array<GrizzlyGraphQLServer>;
sessionStore?: Store;
passport?: Authenticator;
middlewares?: Array<ExpressMiddleware>;
port?: string | number;
address?: string;
cors?: CorsOptions;
session?: SessionOptions;
bodyParser?: Object | boolean;
}
/**
* Extends ApolloServer Config.
*/
export interface GrizzlyApolloConfig extends ApolloConfig {
schemaFile?: string;
endpoint?: string;
middlewares?: Array<any>;
}
/**
* Extends PostGraphile Config.
*/
export interface GrizzlyPostGraphileOptions extends PostGraphileOptions {
pgConfig?: Pool | PoolConfig | string;
schemaName?: string | Array<string>;
}