Skip to content

Commit

Permalink
fix: separated config and options
Browse files Browse the repository at this point in the history
  • Loading branch information
DoctorVoid committed Jan 9, 2020
1 parent 920dada commit 49ad630
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 20 deletions.
17 changes: 17 additions & 0 deletions src/config/polaris-server-config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { ApplicationProperties, LoggerConfiguration } from '@enigmatis/polaris-logs';
import { Connection } from '@enigmatis/polaris-typeorm';
import { DocumentNode } from 'graphql';
import { IResolvers } from 'graphql-tools';
import { MiddlewareConfiguration } from '../index';

export interface PolarisServerConfig {
typeDefs: DocumentNode | DocumentNode[] | string | string[];
resolvers: IResolvers | IResolvers[];
port: number;
applicationProperties: ApplicationProperties;
loggerConfiguration: LoggerConfiguration;
middlewareConfiguration: MiddlewareConfiguration;
customMiddlewares?: any[];
customContext?: (context: any) => any;
connection?: Connection;
}
4 changes: 2 additions & 2 deletions src/config/polaris-server-options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ export interface PolarisServerOptions {
resolvers: IResolvers | IResolvers[];
port: number;
applicationProperties?: ApplicationProperties;
customMiddlewares?: any[];
customContext?: (context: any) => any;
loggerConfiguration?: LoggerConfiguration;
middlewareConfiguration?: MiddlewareConfiguration;
customMiddlewares?: any[];
customContext?: (context: any) => any;
connection?: Connection;
}
35 changes: 17 additions & 18 deletions src/server/polaris-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { applyMiddleware } from 'graphql-middleware';
import * as http from 'http';
import * as path from 'path';
import { formatError, PolarisServerOptions } from '..';
import { PolarisServerConfig } from '../config/polaris-server-config';
import { ExtensionsPlugin } from '../extensions/extensions-plugin';
import { ResponseHeadersPlugin } from '../headers/response-headers-plugin';
import { getMiddlewaresMap } from '../middlewares/middlewares-map';
Expand All @@ -20,7 +21,7 @@ const app = express();
let server: http.Server;

export class PolarisServer {
private static getActualConfiguration(config: PolarisServerOptions): PolarisServerOptions {
private static getActualConfiguration(config: PolarisServerOptions): PolarisServerConfig {
return {
...config,
middlewareConfiguration:
Expand All @@ -31,27 +32,25 @@ export class PolarisServer {
}

private readonly apolloServer: ApolloServer;
private readonly polarisServerOptions: PolarisServerOptions;
private readonly polarisServerConfig: PolarisServerConfig;
private readonly polarisGraphQLLogger: PolarisGraphQLLogger;

constructor(config: PolarisServerOptions) {
this.polarisServerOptions = PolarisServer.getActualConfiguration(config);
this.polarisServerConfig = PolarisServer.getActualConfiguration(config);

this.polarisGraphQLLogger = new PolarisGraphQLLogger(
// @ts-ignore
this.polarisServerOptions.loggerConfiguration,
this.polarisServerOptions.applicationProperties,
this.polarisServerConfig.loggerConfiguration,
this.polarisServerConfig.applicationProperties,
);

const serverContext: (context: any) => any = (ctx: any) =>
this.polarisServerOptions.customContext
? this.polarisServerOptions.customContext(ctx)
this.polarisServerConfig.customContext
? this.polarisServerConfig.customContext(ctx)
: getPolarisContext(ctx);

this.apolloServer = new ApolloServer(this.getApolloServerConfigurations(serverContext));

// @ts-ignore
const endpoint = `${this.polarisServerOptions.applicationProperties.version}/graphql`;
const endpoint = `${this.polarisServerConfig.applicationProperties.version}/graphql`;
app.use(this.apolloServer.getMiddleware({ path: `/${endpoint}` }));
app.use(
'/graphql-playground-react',
Expand All @@ -63,8 +62,8 @@ export class PolarisServer {
}

public async start(): Promise<void> {
server = await app.listen({ port: this.polarisServerOptions.port });
this.polarisGraphQLLogger.info(`Server started at port ${this.polarisServerOptions.port}`);
server = await app.listen({ port: this.polarisServerConfig.port });
this.polarisGraphQLLogger.info(`Server started at port ${this.polarisServerConfig.port}`);
}

public async stop(): Promise<void> {
Expand Down Expand Up @@ -95,22 +94,22 @@ export class PolarisServer {

private getSchemaWithMiddlewares(): GraphQLSchema {
const schema = makeExecutablePolarisSchema(
this.polarisServerOptions.typeDefs,
this.polarisServerOptions.resolvers,
this.polarisServerConfig.typeDefs,
this.polarisServerConfig.resolvers,
);
const middlewares = this.getAllowedPolarisMiddlewares();
if (this.polarisServerOptions.customMiddlewares) {
middlewares.push(...this.polarisServerOptions.customMiddlewares);
if (this.polarisServerConfig.customMiddlewares) {
middlewares.push(...this.polarisServerConfig.customMiddlewares);
}
return applyMiddleware(schema, ...middlewares);
}

private getAllowedPolarisMiddlewares(): any[] {
const allowedMiddlewares: any = [];
const middlewareConfiguration = this.polarisServerOptions.middlewareConfiguration;
const middlewareConfiguration = this.polarisServerConfig.middlewareConfiguration;
const middlewaresMap = getMiddlewaresMap(
this.polarisGraphQLLogger,
this.polarisServerOptions.connection,
this.polarisServerConfig.connection,
);
for (const [key, value] of Object.entries({ ...middlewareConfiguration })) {
if (value) {
Expand Down

0 comments on commit 49ad630

Please sign in to comment.