Skip to content

Commit c0fd8c9

Browse files
committed
regular errors are 400s
1 parent e47280a commit c0fd8c9

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

src/handler.ts

+25-2
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,12 @@ export function createHandler<
507507
) {
508508
throw new Error('Invalid variables');
509509
}
510+
if (
511+
partParams.operationName != null &&
512+
typeof partParams.operationName !== 'string'
513+
) {
514+
throw new Error('Invalid operationName');
515+
}
510516
if (
511517
partParams.extensions != null &&
512518
(typeof partParams.extensions !== 'object' ||
@@ -518,7 +524,7 @@ export function createHandler<
518524
// request parameters are checked and now complete
519525
params = partParams as RequestParams;
520526
} catch (err) {
521-
return makeResponse(new GraphQLError(err.message), acceptedMediaType);
527+
return makeResponse(err, acceptedMediaType);
522528
}
523529

524530
let args: OperationArgs<Context>;
@@ -707,9 +713,26 @@ export function makeResponse(
707713
resultOrErrors:
708714
| Readonly<ExecutionResult>
709715
| Readonly<GraphQLError[]>
710-
| Readonly<GraphQLError>,
716+
| Readonly<GraphQLError>
717+
| Readonly<Error>,
711718
acceptedMediaType: AcceptableMediaType,
712719
): Response {
720+
if (
721+
resultOrErrors instanceof Error &&
722+
// because GraphQLError extends the Error class
723+
!(resultOrErrors instanceof GraphQLError)
724+
) {
725+
return [
726+
JSON.stringify({ errors: [resultOrErrors] }),
727+
{
728+
status: 400,
729+
statusText: 'Bad Request',
730+
headers: {
731+
'content-type': 'application/json; charset=utf-8',
732+
},
733+
},
734+
];
735+
}
713736
const errors = isGraphQLError(resultOrErrors)
714737
? [resultOrErrors]
715738
: areGraphQLErrors(resultOrErrors)

0 commit comments

Comments
 (0)