import type { Maybe } from '../jsutils/Maybe.js';
import { toError } from '../jsutils/toError.js';
import type { ASTNode } from '../language/ast.js';
import { GraphQLError } from './GraphQLError.js';
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);
}