Skip to content

Commit

Permalink
go 1.12 compat, planner fix, websocket fix (#236)
Browse files Browse the repository at this point in the history
* Add datasource hooks (#67)

* add hooks for graphql datasource

* add graphql hooks to the contract

* add hooks for http json data source

* add hook test for http json

* fix tests

* fix extracting variables with multiple queries on contract (#71)

* implement root field depths (TT-204) (#72)

* provide per root field complexity

* change internal complexity return values

* wip: per field complexity

* implement per root field complexity

* fix linter errors

* change namings according some PR remarks

* Fix/tt 571 update field depth calculation (#73)

* rename operation_complexity.FieldComplexityResult to RootFieldStats
fix depth calculation for the root fields

* remove unnecessary allocations

* reset counters after living root field (#75)

* Feat/add introspectionhelper to graphql (#74)

* add node modules to gitignore

* add IsIntrospectionQuery to graphql.Request

* add IntrospectionResponse to graphql.Schema

* add detecting introspection query without name

* add more safe conditions

Co-authored-by: Sergey Petrunin <sergey@tyk.io>

* fix detecting introspection (#76)

add data root field to introspection response

* add helper introspection as an execution result (#77)

* implement missing subscription and websocket protocol parts (TT-904) (#78)

* send complete on unsubscribe

* update tests and function returns

* add ability to execute non-subscription query

* add test for server returning error on invalid queries

* add buffer pool

* expose some websocket functionality

* fix potential issues with websocket handler

* go fmt & imports

* fix build

* fix websocket client
cleanup websocket client test

* add tests for operation selection

* fix operation name selection

* add error cases

* add compatibility for go 1.12

* use WithContext correct

* refactor OperationNameExists function

* iterate root nodes instead of operation definition as it could lead to bugs

* select number of operations in document from rootnodes

* update deps

Co-authored-by: Patric Vormstein <pvormstein@googlemail.com>
Co-authored-by: Sergey Petrunin <spetrunin@users.noreply.github.com>
Co-authored-by: Sergey Petrunin <sergey@tyk.io>
  • Loading branch information
4 people committed Dec 17, 2020
1 parent d95768c commit 9089130
Show file tree
Hide file tree
Showing 73 changed files with 2,061 additions and 278 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
go: [ '1.13', '1.14', '1.15' ]
go: [ '1.12', '1.15' ]
os: [ 'ubuntu-latest']
steps:
- name: Set up Go ${{ matrix.go }}
Expand Down
2 changes: 1 addition & 1 deletion cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (

"github.com/spf13/cobra"

homedir "github.com/mitchellh/go-homedir"
"github.com/mitchellh/go-homedir"
"github.com/spf13/viper"
)

Expand Down
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ require (
github.com/cespare/xxhash v1.1.0
github.com/dave/jennifer v1.4.0
github.com/davecgh/go-spew v1.1.1
github.com/dgraph-io/ristretto v0.0.4-0.20201104062757-d8d537137c97 // indirect
github.com/eclipse/paho.mqtt.golang v1.2.0
github.com/evanphx/json-patch/v5 v5.1.0
github.com/fsnotify/fsnotify v1.4.9 // indirect
Expand Down Expand Up @@ -39,9 +38,11 @@ require (
go.uber.org/atomic v1.5.1
go.uber.org/multierr v1.4.0 // indirect
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f // indirect
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 // indirect
golang.org/x/text v0.3.2 // indirect
golang.org/x/tools v0.0.0-20200414032229-332987a829c3 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/yaml.v2 v2.2.8 // indirect
)
Expand Down
14 changes: 2 additions & 12 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,8 @@ github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhr
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI=
github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
github.com/dgraph-io/ristretto v0.0.4-0.20201104062757-d8d537137c97 h1:VZSlLdMj2VmSmQlSQ9cy0uH1w7X9DWEV9+lxDNn++iE=
github.com/dgraph-io/ristretto v0.0.4-0.20201104062757-d8d537137c97/go.mod h1:bDI4cDaalvYSji3vBVDKrn9ouDZrwN974u8ZO/AhYXs=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/eclipse/paho.mqtt.golang v1.2.0 h1:1F8mhG9+aO5/xpdtFkW4SxOJB67ukuDC3t2y2qayIX0=
github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts=
github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses=
github.com/evanphx/json-patch/v5 v5.1.0 h1:B0aXl1o/1cP8NbviYiBMkcHBtUjIJ1/Ccg6b+SwCLQg=
github.com/evanphx/json-patch/v5 v5.1.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
Expand Down Expand Up @@ -232,10 +224,6 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e h1:D5TXcfTk7xF7hvieo4QErS3qq
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775 h1:TC0v2RSO1u2kn1ZugjrFXkRZAEaqMN/RW+OTZkBzmLE=
golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200918174421-af09f7315aff h1:1CPUrky56AcgSpxz/KfgzQWzfG09u5YOL8MvPYBlrL8=
golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 h1:a/mKvvZr9Jcc8oKfcmgzyp7OwF73JPWsQLvH1z2Kxck=
golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand All @@ -260,6 +248,8 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
Expand Down
2 changes: 1 addition & 1 deletion pkg/ast/ast_field_definition.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,6 @@ func (d *Document) FieldDefinitionType(ref int) int {

func (d *Document) FieldDefinitionTypeNode(ref int) Node {
typeName := d.ResolveTypeNameBytes(d.FieldDefinitions[ref].Type)
node,_ := d.Index.FirstNodeByNameBytes(typeName)
node, _ := d.Index.FirstNodeByNameBytes(typeName)
return node
}
2 changes: 1 addition & 1 deletion pkg/ast/ast_input_object_type_definition.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func (d *Document) InputObjectTypeDefinitionInputValueDefinitionDefaultValueFloa
}

func (d *Document) InputObjectTypeDefinitionInputValueDefinitionDefaultValue(inputObjectTypeDefinitionName, inputValueDefinitionName string) Value {
inputObjectTypeDefinition,exists := d.Index.FirstNodeByNameStr(inputObjectTypeDefinitionName)
inputObjectTypeDefinition, exists := d.Index.FirstNodeByNameStr(inputObjectTypeDefinitionName)
if !exists {
return Value{}
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/ast/ast_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,7 @@ func (d *Document) NodeFragmentIsAllowedOnObjectTypeDefinition(fragmentNode, obj
func (d *Document) UnionNodeIntersectsInterfaceNode(unionNode, interfaceNode Node) bool {
for _, i := range d.UnionTypeDefinitions[unionNode.Ref].UnionMemberTypes.Refs {
memberName := d.ResolveTypeNameBytes(i)
node,exists := d.Index.FirstNodeByNameBytes(memberName)
node, exists := d.Index.FirstNodeByNameBytes(memberName)
if !exists {
continue
}
Expand Down
27 changes: 25 additions & 2 deletions pkg/ast/ast_operation_definition.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ type OperationDefinition struct {
}

func (d *Document) OperationDefinitionHasVariableDefinition(ref int, variableName string) bool {
for _,i := range d.OperationDefinitions[ref].VariableDefinitions.Refs {
for _, i := range d.OperationDefinitions[ref].VariableDefinitions.Refs {
value := d.VariableDefinitions[i].VariableValue.Ref
if variableName == d.VariableValueNameString(value) {
return true
Expand Down Expand Up @@ -71,7 +71,7 @@ func (d *Document) AddVariableDefinitionToOperationDefinition(operationDefinitio
append(d.OperationDefinitions[operationDefinitionRef].VariableDefinitions.Refs, ref)
}

func (d *Document) AddImportedVariableDefinitionToOperationDefinition(operationDefinition,variableDefinition int) {
func (d *Document) AddImportedVariableDefinitionToOperationDefinition(operationDefinition, variableDefinition int) {
if !d.OperationDefinitions[operationDefinition].HasVariableDefinitions {
d.OperationDefinitions[operationDefinition].HasVariableDefinitions = true
d.OperationDefinitions[operationDefinition].VariableDefinitions.Refs = d.Refs[d.NextRefIndex()][:0]
Expand All @@ -80,6 +80,29 @@ func (d *Document) AddImportedVariableDefinitionToOperationDefinition(operationD
append(d.OperationDefinitions[operationDefinition].VariableDefinitions.Refs, variableDefinition)
}

func (d *Document) OperationNameExists(operationName string) bool {

for i := range d.RootNodes {
if d.RootNodes[i].Kind != NodeKindOperationDefinition {
continue
}
if d.OperationDefinitionNameString(i) == operationName {
return true
}
}

return false
}

func (d *Document) NumOfOperationDefinitions () (n int) {
for i := range d.RootNodes {
if d.RootNodes[i].Kind == NodeKindOperationDefinition {
n++
}
}
return
}

const (
alphabet = `abcdefghijklmnopqrstuvwxyz`
)
Expand Down
78 changes: 78 additions & 0 deletions pkg/ast/ast_operation_definition_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package ast

import (
"testing"

"github.com/stretchr/testify/assert"
)

func TestDocument_OperationNameExists(t *testing.T) {
run := func(operationDefinitionsFunc func(doc *Document) []OperationDefinition, operationName string, expectedExists bool) func(t *testing.T) {
return func(t *testing.T) {
doc := Document{}
operationDefinitions := operationDefinitionsFunc(&doc)
doc.OperationDefinitions = append(doc.OperationDefinitions, operationDefinitions...)
for i := range doc.OperationDefinitions {
doc.RootNodes = append(doc.RootNodes, Node{
Kind: NodeKindOperationDefinition,
Ref: i,
})
}
exists := doc.OperationNameExists(operationName)
assert.Equal(t, expectedExists, exists)
}
}

t.Run("not found on empty document", run(
func(doc *Document) []OperationDefinition {
return []OperationDefinition{}
},
"MyOperation",
false,
))

t.Run("not found on document with multiple operations", run(
func(doc *Document) []OperationDefinition {
return []OperationDefinition{
{
Name: doc.Input.AppendInputString("OtherOperation"),
},
{
Name: doc.Input.AppendInputString("AnotherOperation"),
},
}
},
"MyOperation",
false,
))

t.Run("found on document with a single operations", run(
func(doc *Document) []OperationDefinition {
return []OperationDefinition{
{
Name: doc.Input.AppendInputString("MyOperation"),
},
}
},
"MyOperation",
true,
))

t.Run("found on document with multiple operations", run(
func(doc *Document) []OperationDefinition {
return []OperationDefinition{
{
Name: doc.Input.AppendInputString("OtherOperation"),
},
{
Name: doc.Input.AppendInputString("MyOperation"),
},
{
Name: doc.Input.AppendInputString("AnotherOperation"),
},
}
},
"MyOperation",
true,
))
}
2 changes: 1 addition & 1 deletion pkg/ast/ast_type_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ func TestDocument_TypeValueNeedsQuotes(t *testing.T) {
doc := Document{}
definition := NewDocument()

definition.Index.AddNodeStr("SomeEnum",Node{
definition.Index.AddNodeStr("SomeEnum", Node{
Kind: NodeKindEnumTypeDefinition,
})

Expand Down
2 changes: 1 addition & 1 deletion pkg/ast/ast_val_variable_value.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,4 @@ func (d *Document) AddVariableValueArgument(argName, variableName []byte) (varia
d.Arguments = append(d.Arguments, arg)
argRef = len(d.Arguments) - 1
return
}
}
1 change: 0 additions & 1 deletion pkg/ast/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ func (i *Index) AddNodeBytes(name []byte, node Node) {
i.nodes[hash] = append(i.nodes[hash], node)
}


func (i *Index) NodesByNameStr(name string) ([]Node, bool) {
hash := xxhash.Sum64String(name)
node, exists := i.nodes[hash]
Expand Down
2 changes: 1 addition & 1 deletion pkg/astnormalization/astnormalization_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ var mustString = func(str string, err error) string {
return str
}

var runWithVariables = func(t *testing.T, normalizeFunc registerNormalizeVariablesFunc, definition, operation,operationName, expectedOutput, variablesInput, expectedVariables string) {
var runWithVariables = func(t *testing.T, normalizeFunc registerNormalizeVariablesFunc, definition, operation, operationName, expectedOutput, variablesInput, expectedVariables string) {
definitionDocument := unsafeparser.ParseGraphqlDocumentString(definition)
operationDocument := unsafeparser.ParseGraphqlDocumentString(operation)
expectedOutputDocument := unsafeparser.ParseGraphqlDocumentString(expectedOutput)
Expand Down
4 changes: 2 additions & 2 deletions pkg/astparser/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -849,7 +849,7 @@ func (p *Parser) parseObjectTypeDefinition(description *ast.Description) {

func (p *Parser) indexNode(key ast.ByteSliceReference, value ast.Node) {
name := p.document.Input.ByteSlice(key)
p.document.Index.AddNodeBytes(name,value)
p.document.Index.AddNodeBytes(name, value)
}

func (p *Parser) parseRootDescription() {
Expand Down Expand Up @@ -1827,7 +1827,7 @@ func (p *Parser) parseObjectTypeExtension(extend position.Position) {
p.document.RootNodes = append(p.document.RootNodes, node)

if p.shouldIndex {
p.indexNode(objectTypeDefinition.Name,node)
p.indexNode(objectTypeDefinition.Name, node)
}
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/astprinter/astprinter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ func TestPrint(t *testing.T) {
"""
vary: [String]! = []
) on QUERY`,
`"""
`"""
directive @cache
"""
directive @cache("maxAge defines the maximum time in seconds a response will be understood 'fresh', defaults to 300 (5 minutes)"
Expand Down
2 changes: 1 addition & 1 deletion pkg/astvalidation/astvalidation.go
Original file line number Diff line number Diff line change
Expand Up @@ -1307,7 +1307,7 @@ func (v *variablesAreInputTypesVisitor) EnterDocument(operation, definition *ast
func (v *variablesAreInputTypesVisitor) EnterVariableDefinition(ref int) {

typeName := v.operation.ResolveTypeNameBytes(v.operation.VariableDefinitions[ref].Type)
typeDefinitionNode,_ := v.definition.Index.FirstNodeByNameBytes(typeName)
typeDefinitionNode, _ := v.definition.Index.FirstNodeByNameBytes(typeName)
switch typeDefinitionNode.Kind {
case ast.NodeKindInputObjectTypeDefinition, ast.NodeKindScalarTypeDefinition, ast.NodeKindEnumTypeDefinition:
return
Expand Down
4 changes: 2 additions & 2 deletions pkg/astvalidation/astvalidation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3473,7 +3473,7 @@ func TestExecutionValidation(t *testing.T) {
AllVariablesUsed(), Invalid)
})
t.Run("variables in array object", func(t *testing.T) {
runWithDefinition(todoSchema,`mutation AddTak($title: String!, $completed: Boolean!, $name: String! @fromClaim(name: "sub")) {
runWithDefinition(todoSchema, `mutation AddTak($title: String!, $completed: Boolean!, $name: String! @fromClaim(name: "sub")) {
addTask(input: [{title: $title, completed: $completed, user: {name: $name}}]){
task {
id
Expand Down Expand Up @@ -4978,4 +4978,4 @@ directive @fromClaim(
"""
name: String!
) on VARIABLE_DEFINITION
`
`
8 changes: 4 additions & 4 deletions pkg/astvalidation/overlapping_fields_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func TestOverlappingFieldsCanBeMerged(t *testing.T) {
definition := unsafeparser.ParseGraphqlDocumentBytes(definitionBytes)
operation := unsafeparser.ParseGraphqlDocumentBytes(operationBytes)
report := operationreport.Report{}
normalizer := astnormalization.NewNormalizer(false,false)
normalizer := astnormalization.NewNormalizer(false, false)
validator := DefaultOperationValidator()

normalizer.NormalizeOperation(&operation, &definition, &report)
Expand All @@ -45,7 +45,7 @@ func TestOverlappingFieldsCanBeMerged(t *testing.T) {
definition := unsafeparser.ParseGraphqlDocumentBytes(definitionBytes)
operation := unsafeparser.ParseGraphqlDocumentBytes(operationBytes)
report := operationreport.Report{}
normalizer := astnormalization.NewNormalizer(false,false)
normalizer := astnormalization.NewNormalizer(false, false)
validator := DefaultOperationValidator()

normalizer.NormalizeOperation(&operation, &definition, &report)
Expand All @@ -70,7 +70,7 @@ func BenchmarkOverlappingFieldsCanBeMerged(b *testing.B) {
definition := unsafeparser.ParseGraphqlDocumentBytes(definitionBytes)
operation := unsafeparser.ParseGraphqlDocumentBytes(operationBytes)
report := operationreport.Report{}
normalizer := astnormalization.NewNormalizer(false,false)
normalizer := astnormalization.NewNormalizer(false, false)
validator := DefaultOperationValidator()

b.ReportAllocs()
Expand All @@ -96,7 +96,7 @@ func BenchmarkOverlappingFieldsCanBeMerged(b *testing.B) {
definition := unsafeparser.ParseGraphqlDocumentBytes(definitionBytes)
operation := unsafeparser.ParseGraphqlDocumentBytes(operationBytes)
report := operationreport.Report{}
normalizer := astnormalization.NewNormalizer(false,false)
normalizer := astnormalization.NewNormalizer(false, false)
validator := DefaultOperationValidator()

b.ReportAllocs()
Expand Down
2 changes: 1 addition & 1 deletion pkg/codegen/manual.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package codegen

import ast "github.com/jensneuse/graphql-go-tools/pkg/ast"
import "github.com/jensneuse/graphql-go-tools/pkg/ast"

type DataSourceConfig struct {
NonNullString string
Expand Down
Loading

0 comments on commit 9089130

Please sign in to comment.