Skip to content

Commit

Permalink
Supporting directive on the schema (#318)
Browse files Browse the repository at this point in the history
* fix

* wip

* rename

* test args

* fix

---------

Co-authored-by: 堀之内皓隆 <horinouchiakiratakashi@horinouchiakiratakashinonotobukkukonpyuta.local>
  • Loading branch information
hori0926 and 堀之内皓隆 authored Sep 26, 2024
1 parent 068eddf commit eedca08
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 4 deletions.
7 changes: 4 additions & 3 deletions ast/document.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,10 @@ func (d *SchemaDocument) Merge(other *SchemaDocument) {
}

type Schema struct {
Query *Definition
Mutation *Definition
Subscription *Definition
Query *Definition
Mutation *Definition
Subscription *Definition
SchemaDirectives DirectiveList

Types map[string]*Definition
Directives map[string]*DirectiveDefinition
Expand Down
8 changes: 8 additions & 0 deletions validator/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,10 @@ func ValidateSchemaDocument(sd *SchemaDocument) (*Schema, error) {
schema.Subscription = def
}
}
if err := validateDirectives(&schema, sd.Schema[0].Directives, LocationSchema, nil); err != nil {
return nil, err
}
schema.SchemaDirectives = append(schema.SchemaDirectives, sd.Schema[0].Directives...)
}

for _, ext := range sd.SchemaExtension {
Expand All @@ -139,6 +143,10 @@ func ValidateSchemaDocument(sd *SchemaDocument) (*Schema, error) {
schema.Subscription = def
}
}
if err := validateDirectives(&schema, ext.Directives, LocationSchema, nil); err != nil {
return nil, err
}
schema.SchemaDirectives = append(schema.SchemaDirectives, ext.Directives...)
}

if err := validateTypeDefinitions(&schema); err != nil {
Expand Down
6 changes: 6 additions & 0 deletions validator/schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ func TestLoadSchema(t *testing.T) {
require.Equal(t, "Subscription", s.Subscription.Name)
require.Equal(t, "dogEvents", s.Subscription.Fields[0].Name)

require.Equal(t, 1, len(s.SchemaDirectives))
require.Equal(t, "exampleOnSchemaDirective", s.SchemaDirectives[0].Name)
require.Equal(t, 1, len(s.SchemaDirectives[0].Arguments))
require.Equal(t, "name", s.SchemaDirectives[0].Arguments[0].Name)
require.Equal(t, "foo", s.SchemaDirectives[0].Arguments[0].Value.Raw)

require.Equal(t, "owner", s.Types["Dog"].Fields[1].Name)

directives := s.Types["Person"].Directives
Expand Down
4 changes: 3 additions & 1 deletion validator/testdata/extensions.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ schema {
query: Query
}

extend schema {
extend schema @exampleOnSchemaDirective(name: "foo") {
subscription: Subscription
}

directive @exampleOnSchemaDirective(name: String!) on SCHEMA

type Query {
dogs: [Dog!]!
}
Expand Down

0 comments on commit eedca08

Please sign in to comment.