graphql 1.13.10 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
- data/lib/graphql/analysis/ast/query_complexity.rb +1 -1
- data/lib/graphql/analysis/ast/query_depth.rb +0 -1
- data/lib/graphql/analysis/ast/visitor.rb +1 -1
- data/lib/graphql/analysis/ast.rb +0 -10
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/table.rb +0 -18
- data/lib/graphql/backtrace/tracer.rb +1 -2
- data/lib/graphql/backtrace.rb +2 -8
- data/lib/graphql/dataloader/null_dataloader.rb +3 -1
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/execution/errors.rb +1 -9
- data/lib/graphql/execution/interpreter/runtime.rb +17 -31
- data/lib/graphql/execution/interpreter.rb +0 -22
- data/lib/graphql/execution/lazy.rb +1 -1
- data/lib/graphql/execution/lookahead.rb +6 -13
- data/lib/graphql/execution/multiplex.rb +50 -107
- data/lib/graphql/execution.rb +11 -3
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +2 -15
- data/lib/graphql/language/document_from_schema_definition.rb +0 -17
- data/lib/graphql/pagination/connections.rb +2 -28
- data/lib/graphql/query/context.rb +97 -194
- data/lib/graphql/query/input_validation_result.rb +10 -1
- data/lib/graphql/query/validation_pipeline.rb +8 -37
- data/lib/graphql/query/variables.rb +22 -18
- data/lib/graphql/query.rb +5 -36
- data/lib/graphql/railtie.rb +0 -104
- data/lib/graphql/relay.rb +0 -15
- data/lib/graphql/schema/addition.rb +1 -8
- data/lib/graphql/schema/argument.rb +5 -26
- data/lib/graphql/schema/build_from_definition.rb +0 -1
- data/lib/graphql/schema/directive.rb +0 -21
- data/lib/graphql/schema/enum.rb +4 -23
- data/lib/graphql/schema/enum_value.rb +0 -22
- data/lib/graphql/schema/field.rb +70 -230
- data/lib/graphql/schema/input_object.rb +21 -68
- data/lib/graphql/schema/interface.rb +0 -25
- data/lib/graphql/schema/introspection_system.rb +3 -8
- data/lib/graphql/schema/late_bound_type.rb +2 -2
- data/lib/graphql/schema/list.rb +2 -7
- data/lib/graphql/schema/loader.rb +0 -1
- data/lib/graphql/schema/member/base_dsl_methods.rb +0 -5
- data/lib/graphql/schema/member/build_type.rb +4 -6
- data/lib/graphql/schema/member/has_arguments.rb +50 -24
- data/lib/graphql/schema/member/has_fields.rb +2 -2
- data/lib/graphql/schema/member/has_interfaces.rb +1 -3
- data/lib/graphql/schema/member/validates_input.rb +2 -2
- data/lib/graphql/schema/member.rb +0 -6
- data/lib/graphql/schema/mutation.rb +0 -9
- data/lib/graphql/schema/non_null.rb +1 -7
- data/lib/graphql/schema/object.rb +7 -42
- data/lib/graphql/schema/relay_classic_mutation.rb +49 -42
- data/lib/graphql/schema/resolver/has_payload_type.rb +11 -1
- data/lib/graphql/schema/resolver.rb +23 -45
- data/lib/graphql/schema/scalar.rb +4 -19
- data/lib/graphql/schema/subscription.rb +0 -7
- data/lib/graphql/schema/union.rb +0 -16
- data/lib/graphql/schema/warden.rb +2 -2
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +106 -944
- data/lib/graphql/static_validation/base_visitor.rb +4 -21
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
- data/lib/graphql/static_validation/validator.rb +2 -24
- data/lib/graphql/static_validation.rb +0 -2
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
- data/lib/graphql/subscriptions/event.rb +1 -1
- data/lib/graphql/subscriptions/instrumentation.rb +0 -51
- data/lib/graphql/subscriptions.rb +14 -16
- data/lib/graphql/tracing/platform_tracing.rb +0 -23
- data/lib/graphql/tracing.rb +0 -1
- data/lib/graphql/types/relay/connection_behaviors.rb +2 -6
- data/lib/graphql/types/relay/default_relay.rb +0 -10
- data/lib/graphql/types/relay/node_behaviors.rb +5 -1
- data/lib/graphql/types/relay.rb +0 -2
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +1 -65
- metadata +2 -128
- data/lib/graphql/analysis/analyze_query.rb +0 -98
- data/lib/graphql/analysis/field_usage.rb +0 -45
- data/lib/graphql/analysis/max_query_complexity.rb +0 -26
- data/lib/graphql/analysis/max_query_depth.rb +0 -26
- data/lib/graphql/analysis/query_complexity.rb +0 -88
- data/lib/graphql/analysis/query_depth.rb +0 -43
- data/lib/graphql/analysis/reducer_state.rb +0 -48
- data/lib/graphql/argument.rb +0 -131
- data/lib/graphql/authorization.rb +0 -82
- data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
- data/lib/graphql/backwards_compatibility.rb +0 -61
- data/lib/graphql/base_type.rb +0 -232
- data/lib/graphql/boolean_type.rb +0 -2
- data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
- data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
- data/lib/graphql/compatibility/execution_specification.rb +0 -436
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
- data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
- data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
- data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
- data/lib/graphql/compatibility.rb +0 -5
- data/lib/graphql/define/assign_argument.rb +0 -12
- data/lib/graphql/define/assign_connection.rb +0 -13
- data/lib/graphql/define/assign_enum_value.rb +0 -18
- data/lib/graphql/define/assign_global_id_field.rb +0 -11
- data/lib/graphql/define/assign_mutation_function.rb +0 -34
- data/lib/graphql/define/assign_object_field.rb +0 -42
- data/lib/graphql/define/defined_object_proxy.rb +0 -53
- data/lib/graphql/define/instance_definable.rb +0 -240
- data/lib/graphql/define/no_definition_error.rb +0 -7
- data/lib/graphql/define/non_null_with_bang.rb +0 -16
- data/lib/graphql/define/type_definer.rb +0 -31
- data/lib/graphql/define.rb +0 -31
- data/lib/graphql/deprecated_dsl.rb +0 -55
- data/lib/graphql/directive/deprecated_directive.rb +0 -2
- data/lib/graphql/directive/include_directive.rb +0 -2
- data/lib/graphql/directive/skip_directive.rb +0 -2
- data/lib/graphql/directive.rb +0 -107
- data/lib/graphql/enum_type.rb +0 -133
- data/lib/graphql/execution/execute.rb +0 -333
- data/lib/graphql/execution/flatten.rb +0 -40
- data/lib/graphql/execution/typecast.rb +0 -50
- data/lib/graphql/field/resolve.rb +0 -59
- data/lib/graphql/field.rb +0 -226
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -128
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -138
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -72
- data/lib/graphql/internal_representation/document.rb +0 -27
- data/lib/graphql/internal_representation/node.rb +0 -206
- data/lib/graphql/internal_representation/print.rb +0 -51
- data/lib/graphql/internal_representation/rewrite.rb +0 -184
- data/lib/graphql/internal_representation/scope.rb +0 -88
- data/lib/graphql/internal_representation/visit.rb +0 -36
- data/lib/graphql/internal_representation.rb +0 -7
- data/lib/graphql/list_type.rb +0 -80
- data/lib/graphql/non_null_type.rb +0 -71
- data/lib/graphql/object_type.rb +0 -130
- data/lib/graphql/query/arguments.rb +0 -189
- data/lib/graphql/query/arguments_cache.rb +0 -24
- data/lib/graphql/query/executor.rb +0 -52
- data/lib/graphql/query/literal_input.rb +0 -136
- data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
- data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
- data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
- data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
- data/lib/graphql/query/serial_execution.rb +0 -40
- data/lib/graphql/relay/array_connection.rb +0 -83
- data/lib/graphql/relay/base_connection.rb +0 -189
- data/lib/graphql/relay/connection_instrumentation.rb +0 -54
- data/lib/graphql/relay/connection_resolve.rb +0 -43
- data/lib/graphql/relay/connection_type.rb +0 -54
- data/lib/graphql/relay/edge.rb +0 -27
- data/lib/graphql/relay/edge_type.rb +0 -19
- data/lib/graphql/relay/edges_instrumentation.rb +0 -39
- data/lib/graphql/relay/global_id_resolve.rb +0 -17
- data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
- data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
- data/lib/graphql/relay/mutation/resolve.rb +0 -56
- data/lib/graphql/relay/mutation/result.rb +0 -38
- data/lib/graphql/relay/mutation.rb +0 -106
- data/lib/graphql/relay/node.rb +0 -39
- data/lib/graphql/relay/page_info.rb +0 -7
- data/lib/graphql/relay/relation_connection.rb +0 -188
- data/lib/graphql/relay/type_extensions.rb +0 -32
- data/lib/graphql/scalar_type.rb +0 -91
- data/lib/graphql/schema/catchall_middleware.rb +0 -35
- data/lib/graphql/schema/default_parse_error.rb +0 -10
- data/lib/graphql/schema/default_type_error.rb +0 -17
- data/lib/graphql/schema/member/accepts_definition.rb +0 -164
- data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
- data/lib/graphql/schema/member/instrumentation.rb +0 -131
- data/lib/graphql/schema/middleware_chain.rb +0 -82
- data/lib/graphql/schema/possible_types.rb +0 -44
- data/lib/graphql/schema/rescue_middleware.rb +0 -60
- data/lib/graphql/schema/timeout_middleware.rb +0 -88
- data/lib/graphql/schema/traversal.rb +0 -228
- data/lib/graphql/schema/validation.rb +0 -313
- data/lib/graphql/static_validation/default_visitor.rb +0 -15
- data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
- data/lib/graphql/string_type.rb +0 -2
- data/lib/graphql/subscriptions/subscription_root.rb +0 -76
- data/lib/graphql/tracing/skylight_tracing.rb +0 -70
- data/lib/graphql/types/relay/node_field.rb +0 -24
- data/lib/graphql/types/relay/nodes_field.rb +0 -43
- data/lib/graphql/union_type.rb +0 -115
- data/lib/graphql/upgrader/member.rb +0 -937
- data/lib/graphql/upgrader/schema.rb +0 -38
|
@@ -45,30 +45,64 @@ module GraphQL
|
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
class << self
|
|
48
|
-
def run_all(schema, query_options, **kwargs)
|
|
49
|
-
queries = query_options.map { |opts| GraphQL::Query.new(schema, nil, **opts) }
|
|
50
|
-
run_queries(schema, queries, **kwargs)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
48
|
# @param schema [GraphQL::Schema]
|
|
54
|
-
# @param queries [Array<GraphQL::Query>]
|
|
49
|
+
# @param queries [Array<GraphQL::Query, Hash>]
|
|
55
50
|
# @param context [Hash]
|
|
56
51
|
# @param max_complexity [Integer, nil]
|
|
57
52
|
# @return [Array<Hash>] One result per query
|
|
58
|
-
def
|
|
53
|
+
def run_all(schema, query_options, context: {}, max_complexity: schema.max_complexity)
|
|
54
|
+
queries = query_options.map do |opts|
|
|
55
|
+
case opts
|
|
56
|
+
when Hash
|
|
57
|
+
GraphQL::Query.new(schema, nil, **opts)
|
|
58
|
+
when GraphQL::Query
|
|
59
|
+
opts
|
|
60
|
+
else
|
|
61
|
+
raise "Expected Hash or GraphQL::Query, not #{opts.class} (#{opts.inspect})"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
59
65
|
multiplex = self.new(schema: schema, queries: queries, context: context, max_complexity: max_complexity)
|
|
60
66
|
multiplex.trace("execute_multiplex", { multiplex: multiplex }) do
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
GraphQL::Execution::Instrumentation.apply_instrumenters(multiplex) do
|
|
68
|
+
schema = multiplex.schema
|
|
69
|
+
multiplex_analyzers = schema.multiplex_analyzers
|
|
70
|
+
if multiplex.max_complexity
|
|
71
|
+
multiplex_analyzers += [GraphQL::Analysis::AST::MaxQueryComplexity]
|
|
64
72
|
end
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
|
|
74
|
+
schema.analysis_engine.analyze_multiplex(multiplex, multiplex_analyzers)
|
|
75
|
+
|
|
76
|
+
begin
|
|
77
|
+
multiplex.schema.query_execution_strategy.begin_multiplex(multiplex)
|
|
78
|
+
# Do as much eager evaluation of the query as possible
|
|
79
|
+
results = []
|
|
80
|
+
queries.each_with_index do |query, idx|
|
|
81
|
+
multiplex.dataloader.append_job { begin_query(results, idx, query, multiplex) }
|
|
71
82
|
end
|
|
83
|
+
|
|
84
|
+
multiplex.dataloader.run
|
|
85
|
+
|
|
86
|
+
# Then, work through lazy results in a breadth-first way
|
|
87
|
+
multiplex.dataloader.append_job {
|
|
88
|
+
multiplex.schema.query_execution_strategy.finish_multiplex(results, multiplex)
|
|
89
|
+
}
|
|
90
|
+
multiplex.dataloader.run
|
|
91
|
+
|
|
92
|
+
# Then, find all errors and assign the result to the query object
|
|
93
|
+
results.each_with_index do |data_result, idx|
|
|
94
|
+
query = queries[idx]
|
|
95
|
+
finish_query(data_result, query, multiplex)
|
|
96
|
+
# Get the Query::Result, not the Hash
|
|
97
|
+
results[idx] = query.result
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
results
|
|
101
|
+
rescue Exception
|
|
102
|
+
# TODO rescue at a higher level so it will catch errors in analysis, too
|
|
103
|
+
# Assign values here so that the query's `@executed` becomes true
|
|
104
|
+
queries.map { |q| q.result_values ||= {} }
|
|
105
|
+
raise
|
|
72
106
|
end
|
|
73
107
|
end
|
|
74
108
|
end
|
|
@@ -81,7 +115,6 @@ module GraphQL
|
|
|
81
115
|
NO_OPERATION
|
|
82
116
|
else
|
|
83
117
|
begin
|
|
84
|
-
# These were checked to be the same in `#supports_multiplexing?`
|
|
85
118
|
query.schema.query_execution_strategy.begin_query(query, multiplex)
|
|
86
119
|
rescue GraphQL::ExecutionError => err
|
|
87
120
|
query.context.errors << err
|
|
@@ -94,40 +127,6 @@ module GraphQL
|
|
|
94
127
|
|
|
95
128
|
private
|
|
96
129
|
|
|
97
|
-
def run_as_multiplex(multiplex)
|
|
98
|
-
|
|
99
|
-
multiplex.schema.query_execution_strategy.begin_multiplex(multiplex)
|
|
100
|
-
queries = multiplex.queries
|
|
101
|
-
# Do as much eager evaluation of the query as possible
|
|
102
|
-
results = []
|
|
103
|
-
queries.each_with_index do |query, idx|
|
|
104
|
-
multiplex.dataloader.append_job { begin_query(results, idx, query, multiplex) }
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
multiplex.dataloader.run
|
|
108
|
-
|
|
109
|
-
# Then, work through lazy results in a breadth-first way
|
|
110
|
-
multiplex.dataloader.append_job {
|
|
111
|
-
multiplex.schema.query_execution_strategy.finish_multiplex(results, multiplex)
|
|
112
|
-
}
|
|
113
|
-
multiplex.dataloader.run
|
|
114
|
-
|
|
115
|
-
# Then, find all errors and assign the result to the query object
|
|
116
|
-
results.each_with_index do |data_result, idx|
|
|
117
|
-
query = queries[idx]
|
|
118
|
-
finish_query(data_result, query, multiplex)
|
|
119
|
-
# Get the Query::Result, not the Hash
|
|
120
|
-
results[idx] = query.result
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
results
|
|
124
|
-
rescue Exception
|
|
125
|
-
# TODO rescue at a higher level so it will catch errors in analysis, too
|
|
126
|
-
# Assign values here so that the query's `@executed` becomes true
|
|
127
|
-
queries.map { |q| q.result_values ||= {} }
|
|
128
|
-
raise
|
|
129
|
-
end
|
|
130
|
-
|
|
131
130
|
# @param data_result [Hash] The result for the "data" key, if any
|
|
132
131
|
# @param query [GraphQL::Query] The query which was run
|
|
133
132
|
# @return [Hash] final result of this query, including all values and errors
|
|
@@ -155,62 +154,6 @@ module GraphQL
|
|
|
155
154
|
query.result_values["extensions"] = query.context.namespace(:__query_result_extensions__)
|
|
156
155
|
end
|
|
157
156
|
end
|
|
158
|
-
|
|
159
|
-
# use the old `query_execution_strategy` etc to run this query
|
|
160
|
-
def run_one_legacy(schema, query)
|
|
161
|
-
GraphQL::Deprecation.warn "Multiplex.run_one_legacy will be removed from GraphQL-Ruby 2.0, upgrade to the Interpreter to avoid this deprecated codepath: https://graphql-ruby.org/queries/interpreter.html"
|
|
162
|
-
|
|
163
|
-
query.result_values = if !query.valid?
|
|
164
|
-
all_errors = query.validation_errors + query.analysis_errors + query.context.errors
|
|
165
|
-
if all_errors.any?
|
|
166
|
-
{ "errors" => all_errors.map(&:to_h) }
|
|
167
|
-
else
|
|
168
|
-
nil
|
|
169
|
-
end
|
|
170
|
-
else
|
|
171
|
-
GraphQL::Query::Executor.new(query).result
|
|
172
|
-
end
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
DEFAULT_STRATEGIES = [
|
|
176
|
-
GraphQL::Execution::Execute,
|
|
177
|
-
GraphQL::Execution::Interpreter
|
|
178
|
-
]
|
|
179
|
-
# @return [Boolean] True if the schema is only using one strategy, and it's one that supports multiplexing.
|
|
180
|
-
def supports_multiplexing?(schema)
|
|
181
|
-
schema_strategies = [schema.query_execution_strategy, schema.mutation_execution_strategy, schema.subscription_execution_strategy]
|
|
182
|
-
schema_strategies.uniq!
|
|
183
|
-
schema_strategies.size == 1 && DEFAULT_STRATEGIES.include?(schema_strategies.first)
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
# Apply multiplex & query instrumentation to `queries`.
|
|
187
|
-
#
|
|
188
|
-
# It yields when the queries should be executed, then runs teardown.
|
|
189
|
-
def instrument_and_analyze(multiplex)
|
|
190
|
-
GraphQL::Execution::Instrumentation.apply_instrumenters(multiplex) do
|
|
191
|
-
schema = multiplex.schema
|
|
192
|
-
if schema.interpreter? && schema.analysis_engine != GraphQL::Analysis::AST
|
|
193
|
-
raise <<-ERR
|
|
194
|
-
Can't use `GraphQL::Execution::Interpreter` without `GraphQL::Analysis::AST`, please add this plugin to your schema:
|
|
195
|
-
|
|
196
|
-
use GraphQL::Analysis::AST
|
|
197
|
-
|
|
198
|
-
For information about the new analysis engine: https://graphql-ruby.org/queries/ast_analysis.html
|
|
199
|
-
ERR
|
|
200
|
-
end
|
|
201
|
-
multiplex_analyzers = schema.multiplex_analyzers
|
|
202
|
-
if multiplex.max_complexity
|
|
203
|
-
multiplex_analyzers += if schema.using_ast_analysis?
|
|
204
|
-
[GraphQL::Analysis::AST::MaxQueryComplexity]
|
|
205
|
-
else
|
|
206
|
-
[GraphQL::Analysis::MaxQueryComplexity.new(multiplex.max_complexity)]
|
|
207
|
-
end
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
schema.analysis_engine.analyze_multiplex(multiplex, multiplex_analyzers)
|
|
211
|
-
yield
|
|
212
|
-
end
|
|
213
|
-
end
|
|
214
157
|
end
|
|
215
158
|
end
|
|
216
159
|
end
|
data/lib/graphql/execution.rb
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
require "graphql/execution/directive_checks"
|
|
3
|
-
require "graphql/execution/execute"
|
|
4
|
-
require "graphql/execution/flatten"
|
|
5
3
|
require "graphql/execution/instrumentation"
|
|
6
4
|
require "graphql/execution/interpreter"
|
|
7
5
|
require "graphql/execution/lazy"
|
|
8
6
|
require "graphql/execution/lookahead"
|
|
9
7
|
require "graphql/execution/multiplex"
|
|
10
|
-
require "graphql/execution/typecast"
|
|
11
8
|
require "graphql/execution/errors"
|
|
9
|
+
|
|
10
|
+
module GraphQL
|
|
11
|
+
module Execution
|
|
12
|
+
# @api private
|
|
13
|
+
class Skip < GraphQL::Error; end
|
|
14
|
+
|
|
15
|
+
# Just a singleton for implementing {Query::Context#skip}
|
|
16
|
+
# @api private
|
|
17
|
+
SKIP = Skip.new
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -2,15 +2,10 @@
|
|
|
2
2
|
module GraphQL
|
|
3
3
|
module Introspection
|
|
4
4
|
class DynamicFields < Introspection::BaseObject
|
|
5
|
-
field :__typename, String, "The name of this type", null: false
|
|
5
|
+
field :__typename, String, "The name of this type", null: false
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
if context.interpreter?
|
|
10
|
-
object.class.graphql_name
|
|
11
|
-
else
|
|
12
|
-
irep_node.owner_type.name
|
|
13
|
-
end
|
|
7
|
+
def __typename
|
|
8
|
+
object.class.graphql_name
|
|
14
9
|
end
|
|
15
10
|
end
|
|
16
11
|
end
|
|
@@ -11,24 +11,11 @@ module GraphQL
|
|
|
11
11
|
# Apply wrapping manually since this field isn't wrapped by instrumentation
|
|
12
12
|
schema = @context.query.schema
|
|
13
13
|
schema_type = schema.introspection_system.types["__Schema"]
|
|
14
|
-
schema_type.
|
|
14
|
+
schema_type.authorized_new(schema, @context)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def __type(name:)
|
|
18
|
-
|
|
19
|
-
type = context.warden.get_type(name)
|
|
20
|
-
|
|
21
|
-
if type && context.interpreter? && !type.is_a?(Module)
|
|
22
|
-
type = type.type_class || raise("Invariant: interpreter requires class-based type for #{name}")
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# The interpreter provides this wrapping, other execution doesnt, so support both.
|
|
26
|
-
if type && !context.interpreter?
|
|
27
|
-
# Apply wrapping manually since this field isn't wrapped by instrumentation
|
|
28
|
-
type_type = context.schema.introspection_system.types["__Type"]
|
|
29
|
-
type = type_type.type_class.authorized_new(type, context)
|
|
30
|
-
end
|
|
31
|
-
type
|
|
18
|
+
context.warden.reachable_type?(name) ? context.warden.get_type(name) : nil
|
|
32
19
|
end
|
|
33
20
|
end
|
|
34
21
|
end
|
|
@@ -321,23 +321,6 @@ module GraphQL
|
|
|
321
321
|
end
|
|
322
322
|
end
|
|
323
323
|
|
|
324
|
-
# This is just for printing legacy `.define { ... }` schemas, where `deprecation_reason` isn't added to `.directives`.
|
|
325
|
-
if !member.respond_to?(:directives) && member.respond_to?(:deprecation_reason) && (reason = member.deprecation_reason)
|
|
326
|
-
arguments = []
|
|
327
|
-
|
|
328
|
-
if reason != GraphQL::Schema::Directive::DEFAULT_DEPRECATION_REASON
|
|
329
|
-
arguments << GraphQL::Language::Nodes::Argument.new(
|
|
330
|
-
name: "reason",
|
|
331
|
-
value: reason
|
|
332
|
-
)
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
dirs << GraphQL::Language::Nodes::Directive.new(
|
|
336
|
-
name: GraphQL::Directive::DeprecatedDirective.graphql_name,
|
|
337
|
-
arguments: arguments
|
|
338
|
-
)
|
|
339
|
-
end
|
|
340
|
-
|
|
341
324
|
dirs
|
|
342
325
|
end
|
|
343
326
|
|
|
@@ -21,13 +21,6 @@ module GraphQL
|
|
|
21
21
|
class ImplementationMissingError < GraphQL::Error
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
def self.use(schema_defn)
|
|
25
|
-
if schema_defn.plugins.any? { |(plugin, args)| plugin == self }
|
|
26
|
-
GraphQL::Deprecation.warn("#{self} is now the default, remove `use #{self}` from #{caller(2,1).first}")
|
|
27
|
-
end
|
|
28
|
-
schema_defn.connections = self.new(schema: schema_defn)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
24
|
def initialize(schema:)
|
|
32
25
|
@schema = schema
|
|
33
26
|
@wrappers = {}
|
|
@@ -85,26 +78,7 @@ module GraphQL
|
|
|
85
78
|
edge_class: edge_class_for_field(field),
|
|
86
79
|
)
|
|
87
80
|
else
|
|
88
|
-
|
|
89
|
-
connection_class = GraphQL::Relay::BaseConnection.connection_for_nodes(items)
|
|
90
|
-
if parent.is_a?(GraphQL::Schema::Object)
|
|
91
|
-
parent = parent.object
|
|
92
|
-
end
|
|
93
|
-
connection_class.new(
|
|
94
|
-
items,
|
|
95
|
-
arguments,
|
|
96
|
-
field: field,
|
|
97
|
-
max_page_size: field.max_page_size,
|
|
98
|
-
parent: parent,
|
|
99
|
-
context: context,
|
|
100
|
-
)
|
|
101
|
-
rescue RuntimeError => err
|
|
102
|
-
if err.message.include?("No connection implementation to wrap")
|
|
103
|
-
raise ImplementationMissingError, "Couldn't find a connection wrapper for #{items.class} during #{field.path} (#{items.inspect})"
|
|
104
|
-
else
|
|
105
|
-
raise err
|
|
106
|
-
end
|
|
107
|
-
end
|
|
81
|
+
raise ImplementationMissingError, "Couldn't find a connection wrapper for #{items.class} during #{field.path} (#{items.inspect})"
|
|
108
82
|
end
|
|
109
83
|
end
|
|
110
84
|
|
|
@@ -113,7 +87,7 @@ module GraphQL
|
|
|
113
87
|
def edge_class_for_field(field)
|
|
114
88
|
conn_type = field.type.unwrap
|
|
115
89
|
conn_type_edge_type = conn_type.respond_to?(:edge_class) && conn_type.edge_class
|
|
116
|
-
if conn_type_edge_type && conn_type_edge_type !=
|
|
90
|
+
if conn_type_edge_type && conn_type_edge_type != Pagination::Connection::Edge
|
|
117
91
|
conn_type_edge_type
|
|
118
92
|
else
|
|
119
93
|
nil
|