import { Maybe, Extensions, Source } from './types'; import { ASTNode } from './ast'; export class GraphQLError extends Error { readonly locations: ReadonlyArray | undefined; readonly path: ReadonlyArray | undefined; readonly nodes: ReadonlyArray | undefined; readonly source: Source | undefined; readonly positions: ReadonlyArray | undefined; readonly originalError: Error | undefined; readonly extensions: Extensions; constructor( message: string, nodes?: ReadonlyArray | ASTNode | null, source?: Maybe, positions?: Maybe>, path?: Maybe>, originalError?: Maybe, extensions?: Maybe ) { super(message); this.name = 'GraphQLError'; this.message = message; if (path) this.path = path; if (nodes) this.nodes = (Array.isArray(nodes) ? nodes : [nodes]) as ASTNode[]; if (source) this.source = source; if (positions) this.positions = positions; if (originalError) this.originalError = originalError; let _extensions = extensions; if (!_extensions && originalError) { const originalExtensions = (originalError as any).extensions; if (originalExtensions && typeof originalExtensions === 'object') { _extensions = originalExtensions; } } this.extensions = _extensions || {}; } toJSON(): any { return { ...this }; } toString() { return this.message; } get [Symbol.toStringTag]() { return 'GraphQLError'; } }