12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // @flow strict
- import devAssert from '../jsutils/devAssert';
- import { type SourceLocation } from '../language/location';
- import { type GraphQLError } from './GraphQLError';
- /**
- * Given a GraphQLError, format it according to the rules described by the
- * Response Format, Errors section of the GraphQL Specification.
- */
- export function formatError(error: GraphQLError): GraphQLFormattedError {
- devAssert(error, 'Received null or undefined error.');
- const message = error.message || 'An unknown error occurred.';
- const locations = error.locations;
- const path = error.path;
- const extensions = error.extensions;
- return extensions
- ? { message, locations, path, extensions }
- : { message, locations, path };
- }
- /**
- * @see https://github.com/graphql/graphql-spec/blob/master/spec/Section%207%20--%20Response.md#errors
- */
- export type GraphQLFormattedError = {|
- /**
- * A short, human-readable summary of the problem that **SHOULD NOT** change
- * from occurrence to occurrence of the problem, except for purposes of
- * localization.
- */
- +message: string,
- /**
- * If an error can be associated to a particular point in the requested
- * GraphQL document, it should contain a list of locations.
- */
- +locations: $ReadOnlyArray<SourceLocation> | void,
- /**
- * If an error can be associated to a particular field in the GraphQL result,
- * it _must_ contain an entry with the key `path` that details the path of
- * the response field which experienced the error. This allows clients to
- * identify whether a null result is intentional or caused by a runtime error.
- */
- +path: $ReadOnlyArray<string | number> | void,
- /**
- * Reserved for implementors to extend the protocol however they see fit,
- * and hence there are no additional restrictions on its contents.
- */
- +extensions?: { [key: string]: mixed, ... },
- |};
|