|
1 | 1 | require "graphql/schema/catchall_middleware"
|
2 | 2 | require "graphql/schema/invalid_type_error"
|
| 3 | +require "graphql/schema/instrumented_field_map" |
3 | 4 | require "graphql/schema/middleware_chain"
|
4 | 5 | require "graphql/schema/possible_types"
|
5 | 6 | require "graphql/schema/rescue_middleware"
|
@@ -108,6 +109,14 @@ def remove_handler(*args, &block)
|
108 | 109 | def define(**kwargs, &block)
|
109 | 110 | super
|
110 | 111 | types
|
| 112 | + @instrumented_field_map = InstrumentedFieldMap.new(self) |
| 113 | + types.each do |type_name, type| |
| 114 | + if type.kind.fields? |
| 115 | + type.all_fields.each do |field_defn| |
| 116 | + @instrumented_field_map.set(type.name, field_defn.name, field_defn) |
| 117 | + end |
| 118 | + end |
| 119 | + end |
111 | 120 | # Assert that all necessary configs are present:
|
112 | 121 | validation_error = Validation.validate(self)
|
113 | 122 | validation_error && raise(NotImplementedError, validation_error)
|
@@ -139,8 +148,7 @@ def execute(*args)
|
139 | 148 | # @return [GraphQL::Field, nil] The field named `field_name` on `parent_type`
|
140 | 149 | def get_field(parent_type, field_name)
|
141 | 150 | ensure_defined
|
142 |
| - |
143 |
| - defined_field = parent_type.get_field(field_name) |
| 151 | + defined_field = @instrumented_field_map.get(parent_type.name, field_name) |
144 | 152 | if defined_field
|
145 | 153 | defined_field
|
146 | 154 | elsif field_name == "__typename"
|
|
0 commit comments