Skip to content

Commit d66fbcb

Browse files
committed
build type extensions before final schema.
1 parent ea734f1 commit d66fbcb

1 file changed

Lines changed: 32 additions & 31 deletions

File tree

lib/graphql/schema/build_from_definition.rb

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,34 @@ def build(schema_superclass, document, default_resolve:, using: {}, base_types:
139139

140140
raise InvalidDocumentError.new('Must provide schema definition with query type or a type named Query.') unless query_root_type
141141

142+
schema_extensions&.each do |ext|
143+
next if ext.is_a?(GraphQL::Language::Nodes::SchemaExtension)
144+
145+
built_type = types[ext.name]
146+
147+
case ext
148+
when GraphQL::Language::Nodes::ScalarTypeExtension
149+
build_directives(built_type, ext, type_resolver)
150+
when GraphQL::Language::Nodes::ObjectTypeExtension
151+
build_directives(built_type, ext, type_resolver)
152+
build_fields(built_type, ext.fields, type_resolver, default_resolve: true)
153+
build_interfaces(built_type, ext.interfaces, type_resolver)
154+
when GraphQL::Language::Nodes::InterfaceTypeExtension
155+
build_directives(built_type, ext, type_resolver)
156+
build_fields(built_type, ext.fields, type_resolver, default_resolve: nil)
157+
build_interfaces(built_type, ext.interfaces, type_resolver)
158+
when GraphQL::Language::Nodes::UnionTypeExtension
159+
build_directives(built_type, ext, type_resolver)
160+
built_type.possible_types(*ext.types.map { |type_name| type_resolver.call(type_name) })
161+
when GraphQL::Language::Nodes::EnumTypeExtension
162+
build_directives(built_type, ext, type_resolver)
163+
build_values(built_type, ext.values, type_resolver)
164+
when GraphQL::Language::Nodes::InputObjectTypeExtension
165+
build_directives(built_type, ext, type_resolver)
166+
build_arguments(built_type, ext.fields, type_resolver)
167+
end
168+
end
169+
142170
builder = self
143171

144172
found_types = types.values
@@ -207,36 +235,9 @@ def self.inherited(child_class)
207235
end
208236
end
209237

210-
if schema_extensions
211-
schema_extensions.each do |ext|
212-
case ext
213-
when GraphQL::Language::Nodes::SchemaExtension
214-
build_directives(schema_class, ext, type_resolver)
215-
when GraphQL::Language::Nodes::ScalarTypeExtension
216-
build_directives(schema_class.get_type(ext.name), ext, type_resolver)
217-
when GraphQL::Language::Nodes::ObjectTypeExtension
218-
object_type = schema_class.get_type(ext.name)
219-
build_directives(object_type, ext, type_resolver)
220-
build_fields(object_type, ext.fields, type_resolver, default_resolve: true)
221-
build_interfaces(object_type, ext.interfaces, type_resolver)
222-
when GraphQL::Language::Nodes::InterfaceTypeExtension
223-
interface_type = schema_class.get_type(ext.name)
224-
build_directives(interface_type, ext, type_resolver)
225-
build_fields(interface_type, ext.fields, type_resolver, default_resolve: nil)
226-
build_interfaces(interface_type, ext.interfaces, type_resolver)
227-
when GraphQL::Language::Nodes::UnionTypeExtension
228-
union_type = schema_class.get_type(ext.name)
229-
build_directives(union_type, ext, type_resolver)
230-
union_type.possible_types(*ext.types.map { |type_name| type_resolver.call(type_name) })
231-
when GraphQL::Language::Nodes::EnumTypeExtension
232-
enum_type = schema_class.get_type(ext.name)
233-
build_directives(enum_type, ext, type_resolver)
234-
build_values(enum_type, ext.values, type_resolver)
235-
when GraphQL::Language::Nodes::InputObjectTypeExtension
236-
input_object_type = schema_class.get_type(ext.name)
237-
build_directives(input_object_type, ext, type_resolver)
238-
build_arguments(input_object_type, ext.fields, type_resolver)
239-
end
238+
schema_extensions&.each do |ext|
239+
if ext.is_a?(GraphQL::Language::Nodes::SchemaExtension)
240+
build_directives(schema_class, ext, type_resolver)
240241
end
241242
end
242243

@@ -411,7 +412,7 @@ def build_interfaces(type_class, interface_names, type_resolver)
411412
type_class.implements(type_resolver.call(interface_name))
412413
end
413414
end
414-
415+
415416
def build_input_object_type(input_object_type_definition, type_resolver, base_type)
416417
builder = self
417418
Class.new(base_type) do

0 commit comments

Comments
 (0)