Skip to content

ApolloError.graphQLErrors are not of type GraphQLError #11787

@simPod

Description

@simPod

Issue Description

I'd like to resurrect #11168 since issue got stale and closed.

As you can see in the graphql spec, the errors returned by the server are not required to specify e.g. extensions key.

However,

import type { GraphQLError, GraphQLErrorExtensions } from "graphql";

...

export type GraphQLErrors = ReadonlyArray<GraphQLError>;

export class ApolloError extends Error {
  ...
  public graphQLErrors: GraphQLErrors;

if you look at the GraphQLError class, the extensions field is not optional

https://github.com/graphql/graphql-js/blob/8e9813f8c283d94da66fad6fd9562432846c17d4/src/error/GraphQLError.ts#L89

  /**
   * Extension fields to add to the formatted error.
   */
  readonly extensions: GraphQLErrorExtensions;

That is achieved by taking server response and routing it through GraphQLError class' constructor:

https://github.com/graphql/graphql-js/blob/8e9813f8c283d94da66fad6fd9562432846c17d4/src/error/GraphQLError.ts#L125

    this.extensions = extensions ?? originalExtensions ?? Object.create(null);

So that implies that using GraphQLError[] as a type for ApolloError.graphQLErrors is wrong since the server data were not manipulated and may not comply with the GraphQLError interface.

Link to Reproduction

https://spec.graphql.org/October2021/#sec-Errors.Error-result-format

Reproduction Steps

No response

@apollo/client version

3.9.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions