import { ApolloServer, ApolloServerExpressConfig } from "apollo-server-express"; import { Module } from "@nimbus/core"; import { formatError } from "./graphql.error"; import merge from 'lodash.merge'; export interface ApolloServerConfig extends ApolloServerExpressConfig { module?: Module, } /** * Create an apollo server compatible with GraphQL Modules * @param module * @param subscriptions * @param schema * @param apolloConfig */ export function createApolloServer({module, subscriptions, schema, ...apolloConfig}: ApolloServerConfig) { return new ApolloServer(merge({ context: session => session, tracing: true, schema: module ? module.schema : schema, subscriptions: module ? module.subscriptions : subscriptions, formatError: formatError, } as ApolloServerExpressConfig, apolloConfig)); }