apollo-server/src/core/runQuery.ts

64 lines
1.3 KiB
TypeScript
Raw Normal View History

import {
GraphQLSchema,
GraphQLResult,
Document,
parse,
validate,
execute,
} from 'graphql';
export interface GqlResponse {
data?: Object;
errors?: Array<string>;
}
2016-06-13 15:27:08 -07:00
function runQuery({
schema,
query,
rootValue,
context,
variables,
operationName,
2016-06-13 15:27:08 -07:00
}: {
schema: GraphQLSchema,
query: string | Document,
rootValue?: any,
context?: any,
variables?: { [key: string]: any },
operationName?: string,
2016-06-13 15:27:08 -07:00
//logFunction?: function => void
2016-06-13 16:20:21 -07:00
//validationRules?: No, too risky. If you want extra validation rules, then parse it yourself.
2016-06-13 15:27:08 -07:00
}): Promise<GraphQLResult> {
let documentAST: Document;
// if query is already an AST, don't parse or validate
if (typeof query === 'string') {
// parse
try {
documentAST = parse(query);
} catch (syntaxError) {
return Promise.resolve({ errors: [syntaxError] });
}
// validate
2016-06-13 16:20:21 -07:00
const validationErrors = validate(schema, documentAST);
if (validationErrors.length) {
return Promise.resolve({ errors: validationErrors });
}
} else {
documentAST = query;
}
// execute
return execute(
schema,
documentAST,
rootValue,
context,
variables,
operationName
);
}
export { runQuery };