graphql 1.9.21 → 1.10.0.pre1
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/generators/graphql/core.rb +0 -1
- data/lib/generators/graphql/install_generator.rb +0 -1
- data/lib/generators/graphql/mutation_generator.rb +1 -1
- data/lib/generators/graphql/templates/base_field.erb +4 -0
- data/lib/generators/graphql/templates/graphql_controller.erb +0 -5
- data/lib/generators/graphql/templates/mutation.erb +1 -1
- data/lib/generators/graphql/templates/schema.erb +1 -1
- data/lib/graphql.rb +1 -11
- data/lib/graphql/analysis/ast.rb +2 -2
- data/lib/graphql/analysis/ast/analyzer.rb +4 -23
- data/lib/graphql/analysis/ast/max_query_complexity.rb +3 -3
- data/lib/graphql/analysis/ast/max_query_depth.rb +3 -7
- data/lib/graphql/analysis/ast/query_complexity.rb +2 -2
- data/lib/graphql/argument.rb +6 -2
- data/lib/graphql/backtrace/table.rb +10 -2
- data/lib/graphql/base_type.rb +5 -1
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +5 -9
- data/lib/graphql/define/assign_object_field.rb +2 -2
- data/lib/graphql/define/defined_object_proxy.rb +0 -3
- data/lib/graphql/define/instance_definable.rb +3 -14
- data/lib/graphql/enum_type.rb +4 -0
- data/lib/graphql/execution/directive_checks.rb +2 -2
- data/lib/graphql/execution/errors.rb +14 -15
- data/lib/graphql/execution/execute.rb +1 -1
- data/lib/graphql/execution/interpreter/runtime.rb +17 -39
- data/lib/graphql/execution/multiplex.rb +3 -3
- data/lib/graphql/field.rb +8 -0
- data/lib/graphql/filter.rb +1 -1
- data/lib/graphql/function.rb +1 -1
- data/lib/graphql/input_object_type.rb +1 -2
- data/lib/graphql/introspection/entry_points.rb +1 -2
- data/lib/graphql/introspection/input_value_type.rb +27 -9
- data/lib/graphql/introspection/schema_type.rb +1 -2
- data/lib/graphql/language/block_string.rb +2 -2
- data/lib/graphql/language/document_from_schema_definition.rb +5 -11
- data/lib/graphql/language/lexer.rb +48 -49
- data/lib/graphql/language/lexer.rl +48 -49
- data/lib/graphql/language/nodes.rb +11 -14
- data/lib/graphql/language/parser.rb +645 -650
- data/lib/graphql/language/parser.y +7 -8
- data/lib/graphql/language/token.rb +1 -1
- data/lib/graphql/non_null_type.rb +0 -10
- data/lib/graphql/pagination.rb +6 -0
- data/lib/graphql/pagination/active_record_relation_connection.rb +35 -0
- data/lib/graphql/pagination/array_connection.rb +78 -0
- data/lib/graphql/pagination/connection.rb +150 -0
- data/lib/graphql/pagination/connections.rb +103 -0
- data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
- data/lib/graphql/pagination/relation_connection.rb +157 -0
- data/lib/graphql/pagination/sequel_dataset_connection.rb +28 -0
- data/lib/graphql/query.rb +1 -7
- data/lib/graphql/query/arguments.rb +3 -9
- data/lib/graphql/query/context.rb +9 -31
- data/lib/graphql/query/literal_input.rb +29 -10
- data/lib/graphql/query/null_context.rb +0 -4
- data/lib/graphql/query/variable_validation_error.rb +1 -1
- data/lib/graphql/query/variables.rb +2 -4
- data/lib/graphql/relay/base_connection.rb +7 -3
- data/lib/graphql/relay/edges_instrumentation.rb +1 -1
- data/lib/graphql/relay/node.rb +2 -2
- data/lib/graphql/relay/relation_connection.rb +5 -9
- data/lib/graphql/schema.rb +27 -68
- data/lib/graphql/schema/argument.rb +31 -5
- data/lib/graphql/schema/base_64_bp.rb +2 -3
- data/lib/graphql/schema/build_from_definition.rb +113 -179
- data/lib/graphql/schema/build_from_definition/resolve_map.rb +10 -4
- data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -1
- data/lib/graphql/schema/directive.rb +6 -7
- data/lib/graphql/schema/directive/feature.rb +1 -1
- data/lib/graphql/schema/enum.rb +1 -0
- data/lib/graphql/schema/enum_value.rb +4 -1
- data/lib/graphql/schema/field.rb +37 -39
- data/lib/graphql/schema/field/connection_extension.rb +11 -1
- data/lib/graphql/schema/input_object.rb +2 -5
- data/lib/graphql/schema/interface.rb +2 -0
- data/lib/graphql/schema/introspection_system.rb +1 -4
- data/lib/graphql/schema/loader.rb +6 -12
- data/lib/graphql/schema/member.rb +2 -0
- data/lib/graphql/schema/member/base_dsl_methods.rb +2 -2
- data/lib/graphql/schema/member/build_type.rb +4 -0
- data/lib/graphql/schema/member/cached_graphql_definition.rb +5 -0
- data/lib/graphql/schema/member/has_ast_node.rb +17 -0
- data/lib/graphql/schema/member/has_fields.rb +10 -16
- data/lib/graphql/schema/member/instrumentation.rb +1 -6
- data/lib/graphql/schema/member/type_system_helpers.rb +1 -1
- data/lib/graphql/schema/mutation.rb +1 -1
- data/lib/graphql/schema/object.rb +5 -6
- data/lib/graphql/schema/possible_types.rb +3 -3
- data/lib/graphql/schema/printer.rb +1 -3
- data/lib/graphql/schema/relay_classic_mutation.rb +2 -6
- data/lib/graphql/schema/resolver.rb +5 -35
- data/lib/graphql/schema/scalar.rb +1 -0
- data/lib/graphql/schema/subscription.rb +6 -6
- data/lib/graphql/schema/timeout_middleware.rb +2 -3
- data/lib/graphql/schema/type_expression.rb +27 -17
- data/lib/graphql/schema/union.rb +7 -26
- data/lib/graphql/schema/validation.rb +1 -17
- data/lib/graphql/schema/warden.rb +3 -77
- data/lib/graphql/schema/wrapper.rb +1 -1
- data/lib/graphql/static_validation/definition_dependencies.rb +12 -21
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +9 -4
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +10 -7
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +1 -1
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -5
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +4 -4
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +3 -3
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +3 -3
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +5 -6
- data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +1 -1
- data/lib/graphql/subscriptions.rb +7 -7
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +2 -2
- data/lib/graphql/subscriptions/event.rb +5 -19
- data/lib/graphql/subscriptions/instrumentation.rb +9 -4
- data/lib/graphql/subscriptions/subscription_root.rb +2 -10
- data/lib/graphql/tracing/skylight_tracing.rb +0 -1
- data/lib/graphql/types/int.rb +1 -1
- data/lib/graphql/types/relay/base_connection.rb +3 -1
- data/lib/graphql/union_type.rb +23 -58
- data/lib/graphql/upgrader/member.rb +1 -1
- data/lib/graphql/version.rb +1 -1
- metadata +20 -13
- data/lib/generators/graphql/templates/base_mutation.erb +0 -8
- data/lib/graphql/schema/type_membership.rb +0 -34
@@ -20,7 +20,7 @@ module GraphQL
|
|
20
20
|
|
21
21
|
def execute(ast_operation, root_type, query)
|
22
22
|
result = resolve_root_selection(query)
|
23
|
-
lazy_resolve_root_selection(result,
|
23
|
+
lazy_resolve_root_selection(result, {query: query})
|
24
24
|
GraphQL::Execution::Flatten.call(query.context)
|
25
25
|
end
|
26
26
|
|
@@ -11,7 +11,7 @@ module GraphQL
|
|
11
11
|
# @return [GraphQL::Query]
|
12
12
|
attr_reader :query
|
13
13
|
|
14
|
-
# @return [Class
|
14
|
+
# @return [Class]
|
15
15
|
attr_reader :schema
|
16
16
|
|
17
17
|
# @return [GraphQL::Query::Context]
|
@@ -43,22 +43,19 @@ module GraphQL
|
|
43
43
|
# might be stored up in lazies.
|
44
44
|
# @return [void]
|
45
45
|
def run_eager
|
46
|
-
|
47
46
|
root_operation = query.selected_operation
|
48
47
|
root_op_type = root_operation.operation_type || "query"
|
49
48
|
legacy_root_type = schema.root_type_for_operation(root_op_type)
|
50
49
|
root_type = legacy_root_type.metadata[:type_class] || raise("Invariant: type must be class-based: #{legacy_root_type}")
|
51
|
-
path = []
|
52
|
-
@interpreter_context[:current_object] = query.root_value
|
53
|
-
@interpreter_context[:current_path] = path
|
54
50
|
object_proxy = root_type.authorized_new(query.root_value, context)
|
55
51
|
object_proxy = schema.sync_lazy(object_proxy)
|
56
52
|
if object_proxy.nil?
|
57
53
|
# Root .authorized? returned false.
|
58
|
-
write_in_response(
|
54
|
+
write_in_response([], nil)
|
59
55
|
nil
|
60
56
|
else
|
61
|
-
|
57
|
+
path = []
|
58
|
+
evaluate_selections(path, object_proxy, root_type, root_operation.selections, root_operation_type: root_op_type)
|
62
59
|
nil
|
63
60
|
end
|
64
61
|
end
|
@@ -118,9 +115,7 @@ module GraphQL
|
|
118
115
|
end
|
119
116
|
end
|
120
117
|
|
121
|
-
def evaluate_selections(path,
|
122
|
-
@interpreter_context[:current_object] = owner_object
|
123
|
-
@interpreter_context[:current_path] = path
|
118
|
+
def evaluate_selections(path, owner_object, owner_type, selections, root_operation_type: nil)
|
124
119
|
selections_by_name = {}
|
125
120
|
gather_selections(owner_object, owner_type, selections, selections_by_name)
|
126
121
|
selections_by_name.each do |result_name, field_ast_nodes_or_ast_node|
|
@@ -163,7 +158,6 @@ module GraphQL
|
|
163
158
|
@interpreter_context[:current_path] = next_path
|
164
159
|
@interpreter_context[:current_field] = field_defn
|
165
160
|
|
166
|
-
context.scoped_context = scoped_context
|
167
161
|
object = owner_object
|
168
162
|
|
169
163
|
if is_introspection
|
@@ -201,8 +195,6 @@ module GraphQL
|
|
201
195
|
end
|
202
196
|
end
|
203
197
|
|
204
|
-
@interpreter_context[:current_arguments] = kwarg_arguments
|
205
|
-
|
206
198
|
# Optimize for the case that field is selected only once
|
207
199
|
if field_ast_nodes.nil? || field_ast_nodes.size == 1
|
208
200
|
next_selections = ast_node.selections
|
@@ -214,15 +206,13 @@ module GraphQL
|
|
214
206
|
field_result = resolve_with_directives(object, ast_node) do
|
215
207
|
# Actually call the field resolver and capture the result
|
216
208
|
app_result = begin
|
217
|
-
query.
|
218
|
-
|
219
|
-
field_defn.resolve(object, kwarg_arguments, context)
|
220
|
-
end
|
209
|
+
query.trace("execute_field", {owner: owner_type, field: field_defn, path: next_path, query: query, object: object, arguments: kwarg_arguments}) do
|
210
|
+
field_defn.resolve(object, kwarg_arguments, context)
|
221
211
|
end
|
222
212
|
rescue GraphQL::ExecutionError => err
|
223
213
|
err
|
224
214
|
end
|
225
|
-
after_lazy(app_result, owner: owner_type, field: field_defn, path: next_path,
|
215
|
+
after_lazy(app_result, owner: owner_type, field: field_defn, path: next_path, owner_object: object, arguments: kwarg_arguments) do |inner_result|
|
226
216
|
continue_value = continue_value(next_path, inner_result, field_defn, return_type.non_null?, ast_node)
|
227
217
|
if HALT != continue_value
|
228
218
|
continue_field(next_path, continue_value, field_defn, return_type, ast_node, next_selections, false, object, kwarg_arguments)
|
@@ -296,7 +286,7 @@ module GraphQL
|
|
296
286
|
r
|
297
287
|
when "UNION", "INTERFACE"
|
298
288
|
resolved_type_or_lazy = query.resolve_type(type, value)
|
299
|
-
after_lazy(resolved_type_or_lazy, owner: type, path: path,
|
289
|
+
after_lazy(resolved_type_or_lazy, owner: type, path: path, field: field, owner_object: owner_object, arguments: arguments) do |resolved_type|
|
300
290
|
possible_types = query.possible_types(type)
|
301
291
|
|
302
292
|
if !possible_types.include?(resolved_type)
|
@@ -316,12 +306,12 @@ module GraphQL
|
|
316
306
|
rescue GraphQL::ExecutionError => err
|
317
307
|
err
|
318
308
|
end
|
319
|
-
after_lazy(object_proxy, owner: type, path: path,
|
309
|
+
after_lazy(object_proxy, owner: type, path: path, field: field, owner_object: owner_object, arguments: arguments) do |inner_object|
|
320
310
|
continue_value = continue_value(path, inner_object, field, is_non_null, ast_node)
|
321
311
|
if HALT != continue_value
|
322
312
|
response_hash = {}
|
323
313
|
write_in_response(path, response_hash)
|
324
|
-
evaluate_selections(path,
|
314
|
+
evaluate_selections(path, continue_value, type, next_selections)
|
325
315
|
response_hash
|
326
316
|
end
|
327
317
|
end
|
@@ -330,7 +320,6 @@ module GraphQL
|
|
330
320
|
write_in_response(path, response_list)
|
331
321
|
inner_type = type.of_type
|
332
322
|
idx = 0
|
333
|
-
scoped_context = context.scoped_context
|
334
323
|
value.each do |inner_value|
|
335
324
|
next_path = path.dup
|
336
325
|
next_path << idx
|
@@ -338,7 +327,7 @@ module GraphQL
|
|
338
327
|
idx += 1
|
339
328
|
set_type_at_path(next_path, inner_type)
|
340
329
|
# This will update `response_list` with the lazy
|
341
|
-
after_lazy(inner_value, owner: inner_type, path: next_path,
|
330
|
+
after_lazy(inner_value, owner: inner_type, path: next_path, field: field, owner_object: owner_object, arguments: arguments) do |inner_inner_value|
|
342
331
|
# reset `is_non_null` here and below, because the inner type will have its own nullability constraint
|
343
332
|
continue_value = continue_value(next_path, inner_inner_value, field, false, ast_node)
|
344
333
|
if HALT != continue_value
|
@@ -404,30 +393,23 @@ module GraphQL
|
|
404
393
|
# @param field [GraphQL::Schema::Field]
|
405
394
|
# @param eager [Boolean] Set to `true` for mutation root fields only
|
406
395
|
# @return [GraphQL::Execution::Lazy, Object] If loading `object` will be deferred, it's a wrapper over it.
|
407
|
-
def after_lazy(lazy_obj, owner:, field:, path:,
|
408
|
-
@interpreter_context[:current_object] = owner_object
|
409
|
-
@interpreter_context[:current_arguments] = arguments
|
396
|
+
def after_lazy(lazy_obj, owner:, field:, path:, owner_object:, arguments:, eager: false)
|
410
397
|
@interpreter_context[:current_path] = path
|
411
398
|
@interpreter_context[:current_field] = field
|
412
399
|
if schema.lazy?(lazy_obj)
|
413
400
|
lazy = GraphQL::Execution::Lazy.new(path: path, field: field) do
|
414
401
|
@interpreter_context[:current_path] = path
|
415
402
|
@interpreter_context[:current_field] = field
|
416
|
-
@interpreter_context[:current_object] = owner_object
|
417
|
-
@interpreter_context[:current_arguments] = arguments
|
418
|
-
context.scoped_context = scoped_context
|
419
403
|
# Wrap the execution of _this_ method with tracing,
|
420
404
|
# but don't wrap the continuation below
|
421
405
|
inner_obj = begin
|
422
|
-
query.
|
423
|
-
|
424
|
-
schema.sync_lazy(lazy_obj)
|
425
|
-
end
|
406
|
+
query.trace("execute_field_lazy", {owner: owner, field: field, path: path, query: query, object: owner_object, arguments: arguments}) do
|
407
|
+
schema.sync_lazy(lazy_obj)
|
426
408
|
end
|
427
409
|
rescue GraphQL::ExecutionError, GraphQL::UnauthorizedError => err
|
428
410
|
yield(err)
|
429
411
|
end
|
430
|
-
after_lazy(inner_obj, owner: owner, field: field, path: path,
|
412
|
+
after_lazy(inner_obj, owner: owner, field: field, path: path, owner_object: owner_object, arguments: arguments, eager: eager) do |really_inner_obj|
|
431
413
|
yield(really_inner_obj)
|
432
414
|
end
|
433
415
|
end
|
@@ -518,11 +500,7 @@ module GraphQL
|
|
518
500
|
args = arguments(nil, arg_type, ast_value)
|
519
501
|
# We're not tracking defaults_used, but for our purposes
|
520
502
|
# we compare the value to the default value.
|
521
|
-
|
522
|
-
input_obj = query.with_error_handling do
|
523
|
-
arg_type.new(ruby_kwargs: args, context: context, defaults_used: nil)
|
524
|
-
end
|
525
|
-
return true, input_obj
|
503
|
+
return true, arg_type.new(ruby_kwargs: args, context: context, defaults_used: nil)
|
526
504
|
else
|
527
505
|
flat_value = flatten_ast_value(ast_value)
|
528
506
|
return true, arg_type.coerce_input(flat_value, context)
|
@@ -44,9 +44,9 @@ module GraphQL
|
|
44
44
|
end
|
45
45
|
|
46
46
|
class << self
|
47
|
-
def run_all(schema, query_options,
|
48
|
-
queries = query_options.map { |opts| GraphQL::Query.new(schema, nil,
|
49
|
-
run_queries(schema, queries,
|
47
|
+
def run_all(schema, query_options, *args)
|
48
|
+
queries = query_options.map { |opts| GraphQL::Query.new(schema, nil, opts) }
|
49
|
+
run_queries(schema, queries, *args)
|
50
50
|
end
|
51
51
|
|
52
52
|
# @param schema [GraphQL::Schema]
|
data/lib/graphql/field.rb
CHANGED
@@ -196,6 +196,10 @@ module GraphQL
|
|
196
196
|
|
197
197
|
attr_accessor :ast_node
|
198
198
|
|
199
|
+
# Future-compatible alias
|
200
|
+
# @see {GraphQL::SchemaMember}
|
201
|
+
alias :graphql_definition :itself
|
202
|
+
|
199
203
|
# @return [Boolean]
|
200
204
|
def connection?
|
201
205
|
@connection
|
@@ -315,6 +319,10 @@ module GraphQL
|
|
315
319
|
}
|
316
320
|
end
|
317
321
|
|
322
|
+
def type_class
|
323
|
+
metadata[:type_class]
|
324
|
+
end
|
325
|
+
|
318
326
|
private
|
319
327
|
|
320
328
|
def build_default_resolver
|
data/lib/graphql/filter.rb
CHANGED
data/lib/graphql/function.rb
CHANGED
@@ -99,8 +99,7 @@ module GraphQL
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
|
103
|
-
result.prepare
|
102
|
+
arguments_class.new(input_values, context: ctx, defaults_used: defaults_used)
|
104
103
|
end
|
105
104
|
|
106
105
|
# @api private
|
@@ -15,9 +15,8 @@ module GraphQL
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def __type(name:)
|
18
|
-
return unless context.warden.reachable_type?(name)
|
19
|
-
|
20
18
|
type = context.warden.get_type(name)
|
19
|
+
|
21
20
|
if type && context.interpreter?
|
22
21
|
type = type.metadata[:type_class] || raise("Invariant: interpreter requires class-based type for #{name}")
|
23
22
|
end
|
@@ -18,20 +18,38 @@ module GraphQL
|
|
18
18
|
'null'
|
19
19
|
else
|
20
20
|
coerced_default_value = @object.type.coerce_result(value, @context)
|
21
|
-
|
22
|
-
if @object.type.list?
|
23
|
-
"[#{coerced_default_value.join(", ")}]"
|
24
|
-
else
|
25
|
-
coerced_default_value
|
26
|
-
end
|
27
|
-
else
|
28
|
-
GraphQL::Language.serialize(coerced_default_value)
|
29
|
-
end
|
21
|
+
serialize_default_value(coerced_default_value, @object.type)
|
30
22
|
end
|
31
23
|
else
|
32
24
|
nil
|
33
25
|
end
|
34
26
|
end
|
27
|
+
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# Recursively serialize, taking care not to add quotes to enum values
|
32
|
+
def serialize_default_value(value, type)
|
33
|
+
if value.nil?
|
34
|
+
'null'
|
35
|
+
elsif type.kind.list?
|
36
|
+
inner_type = type.of_type
|
37
|
+
"[" + value.map { |v| serialize_default_value(v, inner_type) }.join(", ") + "]"
|
38
|
+
elsif type.kind.non_null?
|
39
|
+
serialize_default_value(value, type.of_type)
|
40
|
+
elsif type.kind.enum?
|
41
|
+
value
|
42
|
+
elsif type.kind.input_object?
|
43
|
+
"{" +
|
44
|
+
value.map do |k, v|
|
45
|
+
arg_defn = type.arguments[k]
|
46
|
+
"#{k}: #{serialize_default_value(v, arg_defn.type)}"
|
47
|
+
end.join(", ") +
|
48
|
+
"}"
|
49
|
+
else
|
50
|
+
GraphQL::Language.serialize(value)
|
51
|
+
end
|
52
|
+
end
|
35
53
|
end
|
36
54
|
end
|
37
55
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
2
|
module GraphQL
|
4
3
|
module Introspection
|
5
4
|
class SchemaType < Introspection::BaseObject
|
@@ -15,7 +14,7 @@ module GraphQL
|
|
15
14
|
field :directives, [GraphQL::Schema::LateBoundType.new("__Directive")], "A list of all directives supported by this server.", null: false
|
16
15
|
|
17
16
|
def types
|
18
|
-
types = @context.warden.
|
17
|
+
types = @context.warden.types
|
19
18
|
if context.interpreter?
|
20
19
|
types.map { |t| t.metadata[:type_class] || raise("Invariant: can't introspect non-class-based type: #{t}") }
|
21
20
|
else
|
@@ -32,10 +32,10 @@ module GraphQL
|
|
32
32
|
end
|
33
33
|
|
34
34
|
# Remove leading & trailing blank lines
|
35
|
-
while lines.
|
35
|
+
while lines.first.empty?
|
36
36
|
lines.shift
|
37
37
|
end
|
38
|
-
while lines.
|
38
|
+
while lines.last.empty?
|
39
39
|
lines.pop
|
40
40
|
end
|
41
41
|
|
@@ -23,16 +23,10 @@ module GraphQL
|
|
23
23
|
@include_built_in_scalars = include_built_in_scalars
|
24
24
|
@include_built_in_directives = include_built_in_directives
|
25
25
|
|
26
|
-
filter = GraphQL::Filter.new(only: only, except: except)
|
27
|
-
if @schema.respond_to?(:visible?)
|
28
|
-
filter = filter.merge(only: @schema.method(:visible?))
|
29
|
-
end
|
30
|
-
|
31
|
-
schema_context = schema.context_class.new(query: nil, object: nil, schema: schema, values: context)
|
32
26
|
@warden = GraphQL::Schema::Warden.new(
|
33
|
-
|
27
|
+
GraphQL::Filter.new(only: only, except: except),
|
34
28
|
schema: @schema,
|
35
|
-
context:
|
29
|
+
context: context,
|
36
30
|
)
|
37
31
|
end
|
38
32
|
|
@@ -156,7 +150,7 @@ module GraphQL
|
|
156
150
|
|
157
151
|
def build_directive_node(directive)
|
158
152
|
GraphQL::Language::Nodes::DirectiveDefinition.new(
|
159
|
-
name: directive.
|
153
|
+
name: directive.graphql_name,
|
160
154
|
arguments: build_argument_nodes(warden.arguments(directive)),
|
161
155
|
locations: build_directive_location_nodes(directive.locations),
|
162
156
|
description: directive.description,
|
@@ -213,7 +207,7 @@ module GraphQL
|
|
213
207
|
when ListType
|
214
208
|
default_value.to_a.map { |v| build_default_value(v, type.of_type) }
|
215
209
|
else
|
216
|
-
raise
|
210
|
+
raise NotImplementedError, "Unexpected default value type #{type.inspect}"
|
217
211
|
end
|
218
212
|
end
|
219
213
|
|
@@ -256,7 +250,7 @@ module GraphQL
|
|
256
250
|
definitions = []
|
257
251
|
definitions << build_schema_node if include_schema_node?
|
258
252
|
definitions += build_directive_nodes(warden.directives)
|
259
|
-
definitions += build_type_definition_nodes(warden.
|
253
|
+
definitions += build_type_definition_nodes(warden.types)
|
260
254
|
definitions
|
261
255
|
end
|
262
256
|
|
@@ -314,7 +314,7 @@ def self.run_lexer(query_string)
|
|
314
314
|
begin
|
315
315
|
te = p+1;
|
316
316
|
begin
|
317
|
-
emit(:RCURLY, ts, te, meta
|
317
|
+
emit(:RCURLY, ts, te, meta)
|
318
318
|
end
|
319
319
|
|
320
320
|
end
|
@@ -328,7 +328,7 @@ def self.run_lexer(query_string)
|
|
328
328
|
begin
|
329
329
|
te = p+1;
|
330
330
|
begin
|
331
|
-
emit(:LCURLY, ts, te, meta
|
331
|
+
emit(:LCURLY, ts, te, meta)
|
332
332
|
end
|
333
333
|
|
334
334
|
end
|
@@ -342,7 +342,7 @@ def self.run_lexer(query_string)
|
|
342
342
|
begin
|
343
343
|
te = p+1;
|
344
344
|
begin
|
345
|
-
emit(:RPAREN, ts, te, meta
|
345
|
+
emit(:RPAREN, ts, te, meta)
|
346
346
|
end
|
347
347
|
|
348
348
|
end
|
@@ -356,7 +356,7 @@ def self.run_lexer(query_string)
|
|
356
356
|
begin
|
357
357
|
te = p+1;
|
358
358
|
begin
|
359
|
-
emit(:LPAREN, ts, te, meta
|
359
|
+
emit(:LPAREN, ts, te, meta)
|
360
360
|
end
|
361
361
|
|
362
362
|
end
|
@@ -370,7 +370,7 @@ def self.run_lexer(query_string)
|
|
370
370
|
begin
|
371
371
|
te = p+1;
|
372
372
|
begin
|
373
|
-
emit(:RBRACKET, ts, te, meta
|
373
|
+
emit(:RBRACKET, ts, te, meta)
|
374
374
|
end
|
375
375
|
|
376
376
|
end
|
@@ -384,7 +384,7 @@ def self.run_lexer(query_string)
|
|
384
384
|
begin
|
385
385
|
te = p+1;
|
386
386
|
begin
|
387
|
-
emit(:LBRACKET, ts, te, meta
|
387
|
+
emit(:LBRACKET, ts, te, meta)
|
388
388
|
end
|
389
389
|
|
390
390
|
end
|
@@ -398,7 +398,7 @@ def self.run_lexer(query_string)
|
|
398
398
|
begin
|
399
399
|
te = p+1;
|
400
400
|
begin
|
401
|
-
emit(:COLON, ts, te, meta
|
401
|
+
emit(:COLON, ts, te, meta)
|
402
402
|
end
|
403
403
|
|
404
404
|
end
|
@@ -440,7 +440,7 @@ def self.run_lexer(query_string)
|
|
440
440
|
begin
|
441
441
|
te = p+1;
|
442
442
|
begin
|
443
|
-
emit(:VAR_SIGN, ts, te, meta
|
443
|
+
emit(:VAR_SIGN, ts, te, meta)
|
444
444
|
end
|
445
445
|
|
446
446
|
end
|
@@ -454,7 +454,7 @@ def self.run_lexer(query_string)
|
|
454
454
|
begin
|
455
455
|
te = p+1;
|
456
456
|
begin
|
457
|
-
emit(:DIR_SIGN, ts, te, meta
|
457
|
+
emit(:DIR_SIGN, ts, te, meta)
|
458
458
|
end
|
459
459
|
|
460
460
|
end
|
@@ -468,7 +468,7 @@ def self.run_lexer(query_string)
|
|
468
468
|
begin
|
469
469
|
te = p+1;
|
470
470
|
begin
|
471
|
-
emit(:ELLIPSIS, ts, te, meta
|
471
|
+
emit(:ELLIPSIS, ts, te, meta)
|
472
472
|
end
|
473
473
|
|
474
474
|
end
|
@@ -482,7 +482,7 @@ def self.run_lexer(query_string)
|
|
482
482
|
begin
|
483
483
|
te = p+1;
|
484
484
|
begin
|
485
|
-
emit(:EQUALS, ts, te, meta
|
485
|
+
emit(:EQUALS, ts, te, meta)
|
486
486
|
end
|
487
487
|
|
488
488
|
end
|
@@ -496,7 +496,7 @@ def self.run_lexer(query_string)
|
|
496
496
|
begin
|
497
497
|
te = p+1;
|
498
498
|
begin
|
499
|
-
emit(:BANG, ts, te, meta
|
499
|
+
emit(:BANG, ts, te, meta)
|
500
500
|
end
|
501
501
|
|
502
502
|
end
|
@@ -510,7 +510,7 @@ def self.run_lexer(query_string)
|
|
510
510
|
begin
|
511
511
|
te = p+1;
|
512
512
|
begin
|
513
|
-
emit(:PIPE, ts, te, meta
|
513
|
+
emit(:PIPE, ts, te, meta)
|
514
514
|
end
|
515
515
|
|
516
516
|
end
|
@@ -524,7 +524,7 @@ def self.run_lexer(query_string)
|
|
524
524
|
begin
|
525
525
|
te = p+1;
|
526
526
|
begin
|
527
|
-
emit(:AMP, ts, te, meta
|
527
|
+
emit(:AMP, ts, te, meta)
|
528
528
|
end
|
529
529
|
|
530
530
|
end
|
@@ -738,7 +738,7 @@ def self.run_lexer(query_string)
|
|
738
738
|
begin
|
739
739
|
p = ((te))-1;
|
740
740
|
begin
|
741
|
-
emit(:ON, ts, te, meta
|
741
|
+
emit(:ON, ts, te, meta)
|
742
742
|
end
|
743
743
|
|
744
744
|
end
|
@@ -746,7 +746,7 @@ def self.run_lexer(query_string)
|
|
746
746
|
begin
|
747
747
|
p = ((te))-1;
|
748
748
|
begin
|
749
|
-
emit(:FRAGMENT, ts, te, meta
|
749
|
+
emit(:FRAGMENT, ts, te, meta)
|
750
750
|
end
|
751
751
|
|
752
752
|
end
|
@@ -754,7 +754,7 @@ def self.run_lexer(query_string)
|
|
754
754
|
begin
|
755
755
|
p = ((te))-1;
|
756
756
|
begin
|
757
|
-
emit(:TRUE, ts, te, meta
|
757
|
+
emit(:TRUE, ts, te, meta)
|
758
758
|
end
|
759
759
|
|
760
760
|
end
|
@@ -762,7 +762,7 @@ def self.run_lexer(query_string)
|
|
762
762
|
begin
|
763
763
|
p = ((te))-1;
|
764
764
|
begin
|
765
|
-
emit(:FALSE, ts, te, meta
|
765
|
+
emit(:FALSE, ts, te, meta)
|
766
766
|
end
|
767
767
|
|
768
768
|
end
|
@@ -770,7 +770,7 @@ def self.run_lexer(query_string)
|
|
770
770
|
begin
|
771
771
|
p = ((te))-1;
|
772
772
|
begin
|
773
|
-
emit(:NULL, ts, te, meta
|
773
|
+
emit(:NULL, ts, te, meta)
|
774
774
|
end
|
775
775
|
|
776
776
|
end
|
@@ -778,7 +778,7 @@ def self.run_lexer(query_string)
|
|
778
778
|
begin
|
779
779
|
p = ((te))-1;
|
780
780
|
begin
|
781
|
-
emit(:QUERY, ts, te, meta
|
781
|
+
emit(:QUERY, ts, te, meta)
|
782
782
|
end
|
783
783
|
|
784
784
|
end
|
@@ -786,7 +786,7 @@ def self.run_lexer(query_string)
|
|
786
786
|
begin
|
787
787
|
p = ((te))-1;
|
788
788
|
begin
|
789
|
-
emit(:MUTATION, ts, te, meta
|
789
|
+
emit(:MUTATION, ts, te, meta)
|
790
790
|
end
|
791
791
|
|
792
792
|
end
|
@@ -794,7 +794,7 @@ def self.run_lexer(query_string)
|
|
794
794
|
begin
|
795
795
|
p = ((te))-1;
|
796
796
|
begin
|
797
|
-
emit(:SUBSCRIPTION, ts, te, meta
|
797
|
+
emit(:SUBSCRIPTION, ts, te, meta)
|
798
798
|
end
|
799
799
|
|
800
800
|
end
|
@@ -1371,11 +1371,11 @@ end
|
|
1371
1371
|
|
1372
1372
|
def self.record_comment(ts, te, meta)
|
1373
1373
|
token = GraphQL::Language::Token.new(
|
1374
|
-
:COMMENT,
|
1375
|
-
meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
|
1376
|
-
meta[:line],
|
1377
|
-
meta[:col],
|
1378
|
-
meta[:previous_token],
|
1374
|
+
name: :COMMENT,
|
1375
|
+
value: meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
|
1376
|
+
line: meta[:line],
|
1377
|
+
col: meta[:col],
|
1378
|
+
prev_token: meta[:previous_token],
|
1379
1379
|
)
|
1380
1380
|
|
1381
1381
|
meta[:previous_token] = token
|
@@ -1383,14 +1383,13 @@ meta[:previous_token] = token
|
|
1383
1383
|
meta[:col] += te - ts
|
1384
1384
|
end
|
1385
1385
|
|
1386
|
-
def self.emit(token_name, ts, te, meta
|
1387
|
-
token_value ||= meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING)
|
1386
|
+
def self.emit(token_name, ts, te, meta)
|
1388
1387
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
1389
|
-
token_name,
|
1390
|
-
|
1391
|
-
meta[:line],
|
1392
|
-
meta[:col],
|
1393
|
-
meta[:previous_token],
|
1388
|
+
name: token_name,
|
1389
|
+
value: meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
|
1390
|
+
line: meta[:line],
|
1391
|
+
col: meta[:col],
|
1392
|
+
prev_token: meta[:previous_token],
|
1394
1393
|
)
|
1395
1394
|
meta[:previous_token] = token
|
1396
1395
|
# Bump the column counter for the next token
|
@@ -1429,30 +1428,30 @@ end
|
|
1429
1428
|
# (It's faster: https://bugs.ruby-lang.org/issues/8110)
|
1430
1429
|
if !value.valid_encoding? || value !~ VALID_STRING
|
1431
1430
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
1432
|
-
:BAD_UNICODE_ESCAPE,
|
1433
|
-
value,
|
1434
|
-
meta[:line],
|
1435
|
-
meta[:col],
|
1436
|
-
meta[:previous_token],
|
1431
|
+
name: :BAD_UNICODE_ESCAPE,
|
1432
|
+
value: value,
|
1433
|
+
line: meta[:line],
|
1434
|
+
col: meta[:col],
|
1435
|
+
prev_token: meta[:previous_token],
|
1437
1436
|
)
|
1438
1437
|
else
|
1439
1438
|
replace_escaped_characters_in_place(value)
|
1440
1439
|
|
1441
1440
|
if !value.valid_encoding?
|
1442
1441
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
1443
|
-
:BAD_UNICODE_ESCAPE,
|
1444
|
-
value,
|
1445
|
-
meta[:line],
|
1446
|
-
meta[:col],
|
1447
|
-
meta[:previous_token],
|
1442
|
+
name: :BAD_UNICODE_ESCAPE,
|
1443
|
+
value: value,
|
1444
|
+
line: meta[:line],
|
1445
|
+
col: meta[:col],
|
1446
|
+
prev_token: meta[:previous_token],
|
1448
1447
|
)
|
1449
1448
|
else
|
1450
1449
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
1451
|
-
:STRING,
|
1452
|
-
value,
|
1453
|
-
meta[:line],
|
1454
|
-
meta[:col],
|
1455
|
-
meta[:previous_token],
|
1450
|
+
name: :STRING,
|
1451
|
+
value: value,
|
1452
|
+
line: meta[:line],
|
1453
|
+
col: meta[:col],
|
1454
|
+
prev_token: meta[:previous_token],
|
1456
1455
|
)
|
1457
1456
|
end
|
1458
1457
|
end
|