graphql 2.0.14 → 2.0.32
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/mutation_delete_generator.rb +1 -1
- data/lib/generators/graphql/mutation_update_generator.rb +1 -1
- data/lib/generators/graphql/relay.rb +18 -1
- data/lib/graphql/analysis/ast/visitor.rb +42 -35
- data/lib/graphql/analysis/ast.rb +2 -2
- data/lib/graphql/backtrace/table.rb +2 -2
- data/lib/graphql/backtrace/trace.rb +96 -0
- data/lib/graphql/backtrace/tracer.rb +1 -1
- data/lib/graphql/backtrace.rb +2 -1
- data/lib/graphql/dataloader/source.rb +69 -45
- data/lib/graphql/dataloader.rb +8 -5
- data/lib/graphql/execution/interpreter/arguments.rb +1 -1
- data/lib/graphql/execution/interpreter/arguments_cache.rb +33 -33
- data/lib/graphql/execution/interpreter/resolve.rb +19 -0
- data/lib/graphql/execution/interpreter/runtime.rb +355 -268
- data/lib/graphql/execution/interpreter.rb +19 -15
- data/lib/graphql/execution/lazy.rb +6 -12
- data/lib/graphql/execution/lookahead.rb +16 -5
- data/lib/graphql/execution/multiplex.rb +2 -1
- data/lib/graphql/filter.rb +8 -2
- data/lib/graphql/introspection/directive_type.rb +2 -2
- data/lib/graphql/introspection/entry_points.rb +1 -1
- data/lib/graphql/introspection/field_type.rb +1 -1
- data/lib/graphql/introspection/schema_type.rb +2 -2
- data/lib/graphql/introspection/type_type.rb +5 -5
- data/lib/graphql/introspection.rb +1 -1
- data/lib/graphql/language/document_from_schema_definition.rb +58 -35
- data/lib/graphql/language/lexer.rb +248 -1505
- data/lib/graphql/language/nodes.rb +69 -40
- data/lib/graphql/language/parser.rb +775 -742
- data/lib/graphql/language/parser.y +44 -38
- data/lib/graphql/language/printer.rb +48 -25
- data/lib/graphql/language/visitor.rb +192 -81
- data/lib/graphql/pagination/active_record_relation_connection.rb +0 -8
- data/lib/graphql/pagination/connection.rb +5 -5
- data/lib/graphql/query/context.rb +93 -27
- data/lib/graphql/query/null_context.rb +8 -18
- data/lib/graphql/query/validation_pipeline.rb +2 -1
- data/lib/graphql/query.rb +55 -13
- data/lib/graphql/rake_task.rb +28 -1
- data/lib/graphql/schema/addition.rb +38 -12
- data/lib/graphql/schema/always_visible.rb +10 -0
- data/lib/graphql/schema/argument.rb +15 -23
- data/lib/graphql/schema/build_from_definition.rb +54 -25
- data/lib/graphql/schema/directive/transform.rb +1 -1
- data/lib/graphql/schema/directive.rb +12 -2
- data/lib/graphql/schema/enum.rb +24 -17
- data/lib/graphql/schema/enum_value.rb +3 -4
- data/lib/graphql/schema/field/connection_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +95 -73
- data/lib/graphql/schema/field_extension.rb +1 -4
- data/lib/graphql/schema/find_inherited_value.rb +2 -7
- data/lib/graphql/schema/input_object.rb +9 -7
- data/lib/graphql/schema/interface.rb +5 -11
- data/lib/graphql/schema/introspection_system.rb +1 -1
- data/lib/graphql/schema/late_bound_type.rb +2 -0
- data/lib/graphql/schema/member/base_dsl_methods.rb +17 -14
- data/lib/graphql/schema/member/build_type.rb +11 -3
- data/lib/graphql/schema/member/has_arguments.rb +114 -65
- data/lib/graphql/schema/member/has_ast_node.rb +12 -0
- data/lib/graphql/schema/member/has_deprecation_reason.rb +3 -4
- data/lib/graphql/schema/member/has_directives.rb +81 -61
- data/lib/graphql/schema/member/has_fields.rb +95 -38
- data/lib/graphql/schema/member/has_interfaces.rb +49 -8
- data/lib/graphql/schema/member/has_validators.rb +32 -6
- data/lib/graphql/schema/member/relay_shortcuts.rb +19 -0
- data/lib/graphql/schema/member/type_system_helpers.rb +17 -0
- data/lib/graphql/schema/object.rb +8 -5
- data/lib/graphql/schema/printer.rb +3 -1
- data/lib/graphql/schema/relay_classic_mutation.rb +1 -1
- data/lib/graphql/schema/resolver/has_payload_type.rb +9 -9
- data/lib/graphql/schema/resolver.rb +16 -14
- data/lib/graphql/schema/timeout.rb +25 -29
- data/lib/graphql/schema/type_membership.rb +3 -0
- data/lib/graphql/schema/union.rb +10 -1
- data/lib/graphql/schema/validator.rb +2 -2
- data/lib/graphql/schema/warden.rb +64 -7
- data/lib/graphql/schema.rb +171 -28
- data/lib/graphql/static_validation/definition_dependencies.rb +7 -1
- data/lib/graphql/static_validation/literal_validator.rb +15 -1
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +2 -2
- data/lib/graphql/static_validation/validator.rb +1 -1
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +7 -1
- data/lib/graphql/subscriptions/event.rb +2 -7
- data/lib/graphql/subscriptions.rb +5 -0
- data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
- data/lib/graphql/tracing/appoptics_trace.rb +255 -0
- data/lib/graphql/tracing/appsignal_trace.rb +81 -0
- data/lib/graphql/tracing/data_dog_trace.rb +187 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +7 -21
- data/lib/graphql/tracing/legacy_trace.rb +69 -0
- data/lib/graphql/tracing/new_relic_trace.rb +75 -0
- data/lib/graphql/tracing/notifications_trace.rb +49 -0
- data/lib/graphql/tracing/platform_trace.rb +123 -0
- data/lib/graphql/tracing/platform_tracing.rb +15 -3
- data/lib/graphql/tracing/prometheus_trace.rb +93 -0
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +1 -1
- data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
- data/lib/graphql/tracing/scout_trace.rb +75 -0
- data/lib/graphql/tracing/statsd_trace.rb +60 -0
- data/lib/graphql/tracing/trace.rb +75 -0
- data/lib/graphql/tracing.rb +17 -39
- data/lib/graphql/type_kinds.rb +6 -3
- data/lib/graphql/types/relay/base_connection.rb +1 -1
- data/lib/graphql/types/relay/connection_behaviors.rb +28 -6
- data/lib/graphql/types/relay/edge_behaviors.rb +16 -5
- data/lib/graphql/types/relay/node_behaviors.rb +8 -2
- data/lib/graphql/types/relay/page_info_behaviors.rb +7 -2
- data/lib/graphql/types/relay.rb +0 -1
- data/lib/graphql/types/string.rb +1 -1
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +16 -9
- data/readme.md +1 -1
- metadata +66 -29
- data/lib/graphql/language/lexer.rl +0 -280
- data/lib/graphql/types/relay/default_relay.rb +0 -21
|
@@ -7,57 +7,57 @@ module GraphQL
|
|
|
7
7
|
def initialize(query)
|
|
8
8
|
@query = query
|
|
9
9
|
@dataloader = query.context.dataloader
|
|
10
|
-
@storage = Hash.new do |h,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
h3[parent_object] = NO_ARGUMENTS
|
|
22
|
-
else
|
|
23
|
-
h3[parent_object]
|
|
24
|
-
end
|
|
10
|
+
@storage = Hash.new do |h, argument_owner|
|
|
11
|
+
args_by_parent = if argument_owner.arguments_statically_coercible?
|
|
12
|
+
shared_values_cache = {}
|
|
13
|
+
Hash.new do |h2, ignored_parent_object|
|
|
14
|
+
h2[ignored_parent_object] = shared_values_cache
|
|
15
|
+
end
|
|
16
|
+
else
|
|
17
|
+
Hash.new do |h2, parent_object|
|
|
18
|
+
args_by_node = {}
|
|
19
|
+
args_by_node.compare_by_identity
|
|
20
|
+
h2[parent_object] = args_by_node
|
|
25
21
|
end
|
|
26
22
|
end
|
|
23
|
+
args_by_parent.compare_by_identity
|
|
24
|
+
h[argument_owner] = args_by_parent
|
|
27
25
|
end
|
|
26
|
+
@storage.compare_by_identity
|
|
28
27
|
end
|
|
29
28
|
|
|
30
29
|
def fetch(ast_node, argument_owner, parent_object)
|
|
31
|
-
#
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
@
|
|
36
|
-
@storage[
|
|
30
|
+
# This runs eagerly if no block is given
|
|
31
|
+
@storage[argument_owner][parent_object][ast_node] ||= begin
|
|
32
|
+
args_hash = self.class.prepare_args_hash(@query, ast_node)
|
|
33
|
+
kwarg_arguments = argument_owner.coerce_arguments(parent_object, args_hash, @query.context)
|
|
34
|
+
@query.after_lazy(kwarg_arguments) do |resolved_args|
|
|
35
|
+
@storage[argument_owner][parent_object][ast_node] = resolved_args
|
|
37
36
|
end
|
|
38
37
|
end
|
|
39
|
-
|
|
40
|
-
# overridden with an immutable arguments instance.
|
|
41
|
-
# The first call queues up the job,
|
|
42
|
-
# then this call fetches the result.
|
|
43
|
-
# TODO this should be better, find a solution
|
|
44
|
-
# that works with merging the runtime.rb code
|
|
45
|
-
@storage[ast_node][argument_owner][parent_object]
|
|
38
|
+
|
|
46
39
|
end
|
|
47
40
|
|
|
48
41
|
# @yield [Interpreter::Arguments, Lazy<Interpreter::Arguments>] The finally-loaded arguments
|
|
49
42
|
def dataload_for(ast_node, argument_owner, parent_object, &block)
|
|
50
43
|
# First, normalize all AST or Ruby values to a plain Ruby hash
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
arg_storage = @storage[argument_owner][parent_object]
|
|
45
|
+
if (args = arg_storage[ast_node])
|
|
46
|
+
yield(args)
|
|
47
|
+
else
|
|
48
|
+
args_hash = self.class.prepare_args_hash(@query, ast_node)
|
|
49
|
+
argument_owner.coerce_arguments(parent_object, args_hash, @query.context) do |resolved_args|
|
|
50
|
+
arg_storage[ast_node] = resolved_args
|
|
51
|
+
yield(resolved_args)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
53
54
|
nil
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
private
|
|
57
58
|
|
|
58
|
-
NO_ARGUMENTS =
|
|
59
|
-
|
|
60
|
-
NO_VALUE_GIVEN = Object.new
|
|
59
|
+
NO_ARGUMENTS = GraphQL::EmptyObjects::EMPTY_HASH
|
|
60
|
+
NO_VALUE_GIVEN = NOT_CONFIGURED
|
|
61
61
|
|
|
62
62
|
def self.prepare_args_hash(query, ast_arg_or_hash_or_value)
|
|
63
63
|
case ast_arg_or_hash_or_value
|
|
@@ -11,6 +11,25 @@ module GraphQL
|
|
|
11
11
|
nil
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
def self.resolve_each_depth(lazies_at_depth, dataloader)
|
|
15
|
+
depths = lazies_at_depth.keys
|
|
16
|
+
depths.sort!
|
|
17
|
+
next_depth = depths.first
|
|
18
|
+
if next_depth
|
|
19
|
+
lazies = lazies_at_depth[next_depth]
|
|
20
|
+
lazies_at_depth.delete(next_depth)
|
|
21
|
+
if lazies.any?
|
|
22
|
+
dataloader.append_job {
|
|
23
|
+
lazies.each(&:value) # resolve these Lazy instances
|
|
24
|
+
}
|
|
25
|
+
# Run lazies _and_ dataloader, see if more are enqueued
|
|
26
|
+
dataloader.run
|
|
27
|
+
resolve_each_depth(lazies_at_depth, dataloader)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
nil
|
|
31
|
+
end
|
|
32
|
+
|
|
14
33
|
# After getting `results` back from an interpreter evaluation,
|
|
15
34
|
# continue it until you get a response-ready Ruby value.
|
|
16
35
|
#
|