import type { Maybe } from '../jsutils/Maybe';
import { toError } from '../jsutils/toError';
import type { ASTNode } from '../language/ast';
import { GraphQLError } from './GraphQLError';
export function locatedError(
rawOriginalError: unknown,
nodes: ASTNode | ReadonlyArray<ASTNode> | undefined | null,
path?: Maybe<ReadonlyArray<string | number>>,
): GraphQLError {
const originalError = toError(rawOriginalError);
if (isLocatedGraphQLError(originalError)) {
return originalError;
}
return new GraphQLError(originalError.message, {
nodes: (originalError as GraphQLError).nodes ?? nodes,
source: (originalError as GraphQLError).source,
positions: (originalError as GraphQLError).positions,
path,
originalError,
});
}
function isLocatedGraphQLError(error: any): error is GraphQLError {
return Array.isArray(error.path);
}