Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/graphql / src / newApp.ts
Size: Mime:
import './bootstrapper/setup'
import express from 'express'
import { ApolloServer } from 'apollo-server-express'
import { importSchema } from 'graphql-import'
import resolvers from './resolvers'
import { securityOriginMiddleware } from './deps/security'
import { apolloApiKey } from './bootstrapper/api/ENV'
import compression from 'compression'
import bodyParser from 'body-parser'
import cookieParser from 'cookie-parser'
import proxyMiddleware from './proxy'
import * as endpoints from './endpoints'
import { cookieMiddleware } from './deps/cookieMiddleware'

console.log('[gql] loading dynamic schema?', process.env.NODE_ENV === 'development')

export const typeDefs =
  process.env.NODE_ENV === 'development' && process.env.SHOULD_USE_DYNAMIC_SCHEMA
    ? importSchema('src/schema.graphql')
    : require('./generated/skava-graphql.graphql')

const createApp = () => {
  const app = express()

  app.use(compression())
  app.use(cookieParser())
  app.use('/api', proxyMiddleware)
  app.use(bodyParser.urlencoded({ extended: true }))

  app.options('/graphql', securityOriginMiddleware, cookieMiddleware)

  const server = new ApolloServer({
    typeDefs,
    resolvers,
    engine: {
      apiKey: apolloApiKey,
    },
    tracing: true,
    cacheControl: true,
    context: {
      ...endpoints,
    },
    formatError: error => {
      console.log(error)
      return error
    },
    formatResponse: response => {
      console.log(response)
      return response
    },
    introspection: true,
    playground: true,
  })

  server.applyMiddleware({
    app,
    path: '/graphql',
    bodyParserConfig: true,
    cors: true,
  })

  return app
}

export { createApp, proxyMiddleware, cookieMiddleware }