1.36 kBJavaScriptView Raw
1import { GraphQLError, versionInfo } from 'graphql';
2const possibleGraphQLErrorProperties = [
3 'message',
4 'locations',
5 'path',
6 'nodes',
7 'source',
8 'positions',
9 'originalError',
10 'name',
11 'stack',
12 'extensions',
13];
14function isGraphQLErrorLike(error) {
15 return (error != null &&
16 typeof error === 'object' &&
17 Object.keys(error).every(key => possibleGraphQLErrorProperties.includes(key)));
18}
19export function createGraphQLError(message, options) {
20 if (options?.originalError &&
21 !(options.originalError instanceof Error) &&
22 isGraphQLErrorLike(options.originalError)) {
23 options.originalError = createGraphQLError(options.originalError.message, options.originalError);
24 }
25 if (versionInfo.major >= 17) {
26 return new GraphQLError(message, options);
27 }
28 return new GraphQLError(message, options?.nodes, options?.source, options?.positions, options?.path, options?.originalError, options?.extensions);
29}
30export function relocatedError(originalError, path) {
31 return createGraphQLError(originalError.message, {
32 nodes: originalError.nodes,
33 source: originalError.source,
34 positions: originalError.positions,
35 path: path == null ? originalError.path : path,
36 originalError,
37 extensions: originalError.extensions,
38 });
39}