1 | import { GraphQLError, versionInfo } from 'graphql';
|
2 | const possibleGraphQLErrorProperties = [
|
3 | 'message',
|
4 | 'locations',
|
5 | 'path',
|
6 | 'nodes',
|
7 | 'source',
|
8 | 'positions',
|
9 | 'originalError',
|
10 | 'name',
|
11 | 'stack',
|
12 | 'extensions',
|
13 | ];
|
14 | function isGraphQLErrorLike(error) {
|
15 | return (error != null &&
|
16 | typeof error === 'object' &&
|
17 | Object.keys(error).every(key => possibleGraphQLErrorProperties.includes(key)));
|
18 | }
|
19 | export 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 | }
|
30 | export 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 | }
|