Mirror: The spec-compliant minimum of client-side GraphQL.
1import { Maybe, Extensions, Source } from './types'; 2import { ASTNode } from './ast'; 3 4export class GraphQLError extends Error { 5 readonly locations: ReadonlyArray<any> | undefined; 6 readonly path: ReadonlyArray<string | number> | undefined; 7 readonly nodes: ReadonlyArray<any> | undefined; 8 readonly source: Source | undefined; 9 readonly positions: ReadonlyArray<number> | undefined; 10 readonly originalError: Error | undefined; 11 readonly extensions: Extensions; 12 13 constructor( 14 message: string, 15 nodes?: ReadonlyArray<ASTNode> | ASTNode | null, 16 source?: Maybe<Source>, 17 positions?: Maybe<ReadonlyArray<number>>, 18 path?: Maybe<ReadonlyArray<string | number>>, 19 originalError?: Maybe<Error>, 20 extensions?: Maybe<Extensions> 21 ) { 22 super(message); 23 24 this.name = 'GraphQLError'; 25 this.message = message; 26 27 if (path) this.path = path; 28 if (nodes) this.nodes = (Array.isArray(nodes) ? nodes : [nodes]) as ASTNode[]; 29 if (source) this.source = source; 30 if (positions) this.positions = positions; 31 if (originalError) this.originalError = originalError; 32 33 let _extensions = extensions; 34 if (!_extensions && originalError) { 35 const originalExtensions = (originalError as any).extensions; 36 if (originalExtensions && typeof originalExtensions === 'object') { 37 _extensions = originalExtensions; 38 } 39 } 40 41 this.extensions = extensions || {}; 42 } 43 44 toJSON(): any { 45 return { ...this }; 46 } 47 48 toString() { 49 return this.message; 50 } 51 52 get [Symbol.toStringTag]() { 53 return 'GraphQLError'; 54 } 55}