1package graphql
2
3import (
4	"errors"
5
6	"github.com/graphql-go/graphql/gqlerrors"
7	"github.com/graphql-go/graphql/language/ast"
8)
9
10func NewLocatedError(err interface{}, nodes []ast.Node) *gqlerrors.Error {
11	return newLocatedError(err, nodes, nil)
12}
13
14func NewLocatedErrorWithPath(err interface{}, nodes []ast.Node, path []interface{}) *gqlerrors.Error {
15	return newLocatedError(err, nodes, path)
16}
17
18func newLocatedError(err interface{}, nodes []ast.Node, path []interface{}) *gqlerrors.Error {
19	if err, ok := err.(*gqlerrors.Error); ok {
20		return err
21	}
22
23	var origError error
24	message := "An unknown error occurred."
25	if err, ok := err.(error); ok {
26		message = err.Error()
27		origError = err
28	}
29	if err, ok := err.(string); ok {
30		message = err
31		origError = errors.New(err)
32	}
33	stack := message
34	return gqlerrors.NewErrorWithPath(
35		message,
36		nodes,
37		stack,
38		nil,
39		[]int{},
40		path,
41		origError,
42	)
43}
44
45func FieldASTsToNodeASTs(fieldASTs []*ast.Field) []ast.Node {
46	nodes := []ast.Node{}
47	for _, fieldAST := range fieldASTs {
48		nodes = append(nodes, fieldAST)
49	}
50	return nodes
51}
52