Skip to content

Commit

Permalink
Inline all possible functions that are used only once (#821)
Browse files Browse the repository at this point in the history
* Inline isFunction type-guard

* Don't redefine functions on doRunQuery

* Update CHANGELOG
  • Loading branch information
marvinhagemeister authored and abernix committed Mar 12, 2018
1 parent fbdcac1 commit 9e8984c
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 41 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
### vNEXT

* Fix apollo-server-core runQuery breaks async_hooks tracking [PR #733](https://github.com/apollographql/apollo-server/pull/733)
* Optimize one-time functions [PR# 821](https://github.com/apollographql/apollo-server/pull/821)

### v1.3.0

Expand Down
8 changes: 1 addition & 7 deletions packages/apollo-server-core/src/graphqlOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export async function resolveGraphqlOptions(
options: GraphQLServerOptions | Function,
...args
): Promise<GraphQLServerOptions> {
if (isOptionsFunction(options)) {
if (typeof options === 'function') {
try {
return await options(...args);
} catch (e) {
Expand All @@ -52,9 +52,3 @@ export async function resolveGraphqlOptions(
return options;
}
}

export function isOptionsFunction(
arg: GraphQLServerOptions | Function,
): arg is Function {
return typeof arg === 'function';
}
6 changes: 1 addition & 5 deletions packages/apollo-server-core/src/runHttpQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,6 @@ function isQueryOperation(query: DocumentNode, operationName: string) {
return operationAST.operation === 'query';
}

function isFunction(arg: any): arg is Function {
return typeof arg === 'function';
}

export async function runHttpQuery(
handlerArguments: Array<any>,
request: HttpQueryRequest,
Expand Down Expand Up @@ -135,7 +131,7 @@ export async function runHttpQuery(
}

let context = optionsObject.context || {};
if (isFunction(context)) {
if (typeof context === 'function') {
context = context();
} else if (isBatch) {
context = Object.assign(
Expand Down
61 changes: 32 additions & 29 deletions packages/apollo-server-core/src/runQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,31 @@ export interface QueryOptions {
cacheControl?: boolean;
}

function runQuery(options: QueryOptions): Promise<GraphQLResponse> {
export function runQuery(options: QueryOptions): Promise<GraphQLResponse> {
// Fiber-aware Promises run their .then callbacks in Fibers.
return Promise.resolve().then(() => doRunQuery(options));
}

function printStackTrace(error: Error) {
console.error(error.stack);
}

function format(errors: Array<Error>, formatter?: Function): Array<Error> {
return errors.map(error => {
if (formatter !== undefined) {
try {
return formatter(error);
} catch (err) {
console.error('Error in formatError function:', err);
const newError = new Error('Internal server error');
return formatError(newError);
}
} else {
return formatError(error);
}
}) as Array<Error>;
}

function doRunQuery(options: QueryOptions): Promise<GraphQLResponse> {
let documentAST: DocumentNode;

Expand All @@ -86,8 +106,7 @@ function doRunQuery(options: QueryOptions): Promise<GraphQLResponse> {
};
const debugDefault =
process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test';
const debug =
typeof options.debug !== 'undefined' ? options.debug : debugDefault;
const debug = options.debug !== undefined ? options.debug : debugDefault;

logFunction({ action: LogAction.request, step: LogStep.start });

Expand All @@ -109,26 +128,6 @@ function doRunQuery(options: QueryOptions): Promise<GraphQLResponse> {
extensionStack.requestDidStart();
}

function format(errors: Array<Error>): Array<Error> {
return errors.map(error => {
if (options.formatError) {
try {
return options.formatError(error);
} catch (err) {
console.error('Error in formatError function:', err);
const newError = new Error('Internal server error');
return formatError(newError);
}
} else {
return formatError(error);
}
}) as Array<Error>;
}

function printStackTrace(error: Error) {
console.error(error.stack);
}

const qry =
typeof options.query === 'string' ? options.query : print(options.query);
logFunction({
Expand Down Expand Up @@ -159,7 +158,9 @@ function doRunQuery(options: QueryOptions): Promise<GraphQLResponse> {
logFunction({ action: LogAction.parse, step: LogStep.end });
} catch (syntaxError) {
logFunction({ action: LogAction.parse, step: LogStep.end });
return Promise.resolve({ errors: format([syntaxError]) });
return Promise.resolve({
errors: format([syntaxError], options.formatError),
});
}
} else {
documentAST = options.query as DocumentNode;
Expand All @@ -173,7 +174,9 @@ function doRunQuery(options: QueryOptions): Promise<GraphQLResponse> {
const validationErrors = validate(options.schema, documentAST, rules);
logFunction({ action: LogAction.validation, step: LogStep.end });
if (validationErrors.length) {
return Promise.resolve({ errors: format(validationErrors) });
return Promise.resolve({
errors: format(validationErrors, options.formatError),
});
}

if (extensionStack) {
Expand Down Expand Up @@ -201,7 +204,7 @@ function doRunQuery(options: QueryOptions): Promise<GraphQLResponse> {
};

if (result.errors) {
response.errors = format(result.errors);
response.errors = format(result.errors, options.formatError);
if (debug) {
result.errors.map(printStackTrace);
}
Expand All @@ -222,8 +225,8 @@ function doRunQuery(options: QueryOptions): Promise<GraphQLResponse> {
} catch (executionError) {
logFunction({ action: LogAction.execute, step: LogStep.end });
logFunction({ action: LogAction.request, step: LogStep.end });
return Promise.resolve({ errors: format([executionError]) });
return Promise.resolve({
errors: format([executionError], options.formatError),
});
}
}

export { runQuery };

0 comments on commit 9e8984c

Please sign in to comment.