import isPromise from './jsutils/isPromise'; import { validateSchema } from './type/validate'; import { parse } from './language/parser'; import { validate } from './validation/validate'; import { execute } from './execution/execute'; export function graphql(argsOrSchema, source, rootValue, contextValue, variableValues, operationName, fieldResolver, typeResolver) { var _arguments = arguments; /* eslint-enable no-redeclare */ // Always return a Promise for a consistent API. return new Promise(function (resolve) { return resolve( // Extract arguments from object args if provided. _arguments.length === 1 ? graphqlImpl(argsOrSchema) : graphqlImpl({ schema: argsOrSchema, source: source, rootValue: rootValue, contextValue: contextValue, variableValues: variableValues, operationName: operationName, fieldResolver: fieldResolver, typeResolver: typeResolver })); }); } /** * The graphqlSync function also fulfills GraphQL operations by parsing, * validating, and executing a GraphQL document along side a GraphQL schema. * However, it guarantees to complete synchronously (or throw an error) assuming * that all field resolvers are also synchronous. */ export function graphqlSync(argsOrSchema, source, rootValue, contextValue, variableValues, operationName, fieldResolver, typeResolver) { /* eslint-enable no-redeclare */ // Extract arguments from object args if provided. var result = arguments.length === 1 ? graphqlImpl(argsOrSchema) : graphqlImpl({ schema: argsOrSchema, source: source, rootValue: rootValue, contextValue: contextValue, variableValues: variableValues, operationName: operationName, fieldResolver: fieldResolver, typeResolver: typeResolver }); // Assert that the execution was synchronous. if (isPromise(result)) { throw new Error('GraphQL execution failed to complete synchronously.'); } return result; } function graphqlImpl(args) { var schema = args.schema, source = args.source, rootValue = args.rootValue, contextValue = args.contextValue, variableValues = args.variableValues, operationName = args.operationName, fieldResolver = args.fieldResolver, typeResolver = args.typeResolver; // Validate Schema var schemaValidationErrors = validateSchema(schema); if (schemaValidationErrors.length > 0) { return { errors: schemaValidationErrors }; } // Parse var document; try { document = parse(source); } catch (syntaxError) { return { errors: [syntaxError] }; } // Validate var validationErrors = validate(schema, document); if (validationErrors.length > 0) { return { errors: validationErrors }; } // Execute return execute({ schema: schema, document: document, rootValue: rootValue, contextValue: contextValue, variableValues: variableValues, operationName: operationName, fieldResolver: fieldResolver, typeResolver: typeResolver }); }