diff --git a/src/execution/execute.ts b/src/execution/execute.ts index 67905366c1..b66b434300 100644 --- a/src/execution/execute.ts +++ b/src/execution/execute.ts @@ -162,11 +162,6 @@ export interface ExecutionArgs { * a GraphQLError will be thrown immediately explaining the invalid input. */ export function execute(args: ExecutionArgs): PromiseOrValue { - const { schema, document, variableValues, rootValue } = args; - - // If arguments are missing or incorrect, throw an error. - assertValidExecutionArguments(schema, document, variableValues); - // If a valid execution context cannot be created due to incorrect arguments, // a "Response" with only errors is returned. const exeContext = buildExecutionContext(args); @@ -189,7 +184,7 @@ export function execute(args: ExecutionArgs): PromiseOrValue { // in this case is the entire response. try { const { operation } = exeContext; - const result = executeOperation(exeContext, operation, rootValue); + const result = executeOperation(exeContext, operation); if (isPromise(result)) { return result.then( (data) => buildResponse(data, exeContext.errors), @@ -281,6 +276,9 @@ export function buildExecutionContext( subscribeFieldResolver, } = args; + // If arguments are missing or incorrect, throw an error. + assertValidExecutionArguments(schema, document, rawVariableValues); + let operation: OperationDefinitionNode | undefined; const fragments: ObjMap = Object.create(null); for (const definition of document.definitions) { @@ -349,8 +347,7 @@ export function buildExecutionContext( function executeOperation( exeContext: ExecutionContext, operation: OperationDefinitionNode, - rootValue: unknown, -): PromiseOrValue | null> { +): PromiseOrValue> { const rootType = exeContext.schema.getRootType(operation.operation); if (rootType == null) { throw new GraphQLError( @@ -368,6 +365,8 @@ function executeOperation( ); const path = undefined; + const { rootValue } = exeContext; + switch (operation.operation) { case OperationTypeNode.QUERY: return executeFields(exeContext, rootType, rootValue, path, rootFields); @@ -1107,31 +1106,9 @@ function mapSourceToResponse( export function createSourceEventStream( args: ExecutionArgs, ): PromiseOrValue | ExecutionResult> { - const { - schema, - document, - rootValue, - contextValue, - variableValues, - operationName, - subscribeFieldResolver, - } = args; - - // If arguments are missing or incorrectly typed, this is an internal - // developer mistake which should throw an early error. - assertValidExecutionArguments(schema, document, variableValues); - // If a valid execution context cannot be created due to incorrect arguments, // a "Response" with only errors is returned. - const exeContext = buildExecutionContext({ - schema, - document, - rootValue, - contextValue, - variableValues, - operationName, - subscribeFieldResolver, - }); + const exeContext = buildExecutionContext(args); // Return early errors if execution context failed. if (!('schema' in exeContext)) {