graphql 2.4.7 → 2.4.9
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/backtrace/table.rb +95 -55
- data/lib/graphql/backtrace.rb +1 -19
- data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +11 -4
- data/lib/graphql/execution/interpreter/runtime.rb +34 -26
- data/lib/graphql/execution/interpreter.rb +3 -1
- data/lib/graphql/execution/multiplex.rb +0 -4
- data/lib/graphql/introspection/directive_location_enum.rb +1 -1
- data/lib/graphql/query.rb +0 -8
- data/lib/graphql/schema/build_from_definition.rb +1 -0
- data/lib/graphql/schema/enum.rb +21 -1
- data/lib/graphql/schema/resolver.rb +1 -0
- data/lib/graphql/schema/subscription.rb +50 -4
- data/lib/graphql/schema/validator/required_validator.rb +23 -6
- data/lib/graphql/schema/visibility/profile.rb +1 -1
- data/lib/graphql/schema.rb +8 -24
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +12 -10
- data/lib/graphql/subscriptions/event.rb +12 -1
- data/lib/graphql/subscriptions/serialize.rb +1 -3
- data/lib/graphql/tracing/active_support_notifications_trace.rb +1 -1
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +1 -1
- data/lib/graphql/tracing/appoptics_trace.rb +2 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +2 -0
- data/lib/graphql/tracing/appsignal_trace.rb +2 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +2 -0
- data/lib/graphql/tracing/call_legacy_tracers.rb +66 -0
- data/lib/graphql/tracing/data_dog_trace.rb +2 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +2 -0
- data/lib/graphql/tracing/legacy_hooks_trace.rb +1 -0
- data/lib/graphql/tracing/legacy_trace.rb +4 -61
- data/lib/graphql/tracing/new_relic_trace.rb +2 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +2 -0
- data/lib/graphql/tracing/notifications_tracing.rb +2 -0
- data/lib/graphql/tracing/null_trace.rb +9 -0
- data/lib/graphql/tracing/prometheus_trace/graphql_collector.rb +2 -0
- data/lib/graphql/tracing/prometheus_trace.rb +5 -0
- data/lib/graphql/tracing/prometheus_tracing.rb +2 -0
- data/lib/graphql/tracing/scout_trace.rb +2 -0
- data/lib/graphql/tracing/scout_tracing.rb +2 -0
- data/lib/graphql/tracing/sentry_trace.rb +2 -0
- data/lib/graphql/tracing/statsd_trace.rb +2 -0
- data/lib/graphql/tracing/statsd_tracing.rb +2 -0
- data/lib/graphql/tracing/trace.rb +4 -1
- data/lib/graphql/tracing.rb +28 -30
- data/lib/graphql/version.rb +1 -1
- metadata +103 -9
- data/lib/graphql/backtrace/inspect_result.rb +0 -38
- data/lib/graphql/backtrace/trace.rb +0 -93
- data/lib/graphql/backtrace/tracer.rb +0 -80
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-01-29 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: base64
|
@@ -38,6 +37,20 @@ dependencies:
|
|
38
37
|
- - ">="
|
39
38
|
- !ruby/object:Gem::Version
|
40
39
|
version: '0'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: logger
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
41
54
|
- !ruby/object:Gem::Dependency
|
42
55
|
name: benchmark-ips
|
43
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,6 +191,76 @@ dependencies:
|
|
178
191
|
- - ">="
|
179
192
|
- !ruby/object:Gem::Version
|
180
193
|
version: '0'
|
194
|
+
- !ruby/object:Gem::Dependency
|
195
|
+
name: simplecov
|
196
|
+
requirement: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - ">="
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '0'
|
201
|
+
type: :development
|
202
|
+
prerelease: false
|
203
|
+
version_requirements: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - ">="
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '0'
|
208
|
+
- !ruby/object:Gem::Dependency
|
209
|
+
name: simplecov-lcov
|
210
|
+
requirement: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - ">="
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: '0'
|
215
|
+
type: :development
|
216
|
+
prerelease: false
|
217
|
+
version_requirements: !ruby/object:Gem::Requirement
|
218
|
+
requirements:
|
219
|
+
- - ">="
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
222
|
+
- !ruby/object:Gem::Dependency
|
223
|
+
name: undercover
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
225
|
+
requirements:
|
226
|
+
- - ">="
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: '0'
|
229
|
+
type: :development
|
230
|
+
prerelease: false
|
231
|
+
version_requirements: !ruby/object:Gem::Requirement
|
232
|
+
requirements:
|
233
|
+
- - ">="
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
version: '0'
|
236
|
+
- !ruby/object:Gem::Dependency
|
237
|
+
name: pronto
|
238
|
+
requirement: !ruby/object:Gem::Requirement
|
239
|
+
requirements:
|
240
|
+
- - ">="
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: '0'
|
243
|
+
type: :development
|
244
|
+
prerelease: false
|
245
|
+
version_requirements: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - ">="
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: '0'
|
250
|
+
- !ruby/object:Gem::Dependency
|
251
|
+
name: pronto-undercover
|
252
|
+
requirement: !ruby/object:Gem::Requirement
|
253
|
+
requirements:
|
254
|
+
- - ">="
|
255
|
+
- !ruby/object:Gem::Version
|
256
|
+
version: '0'
|
257
|
+
type: :development
|
258
|
+
prerelease: false
|
259
|
+
version_requirements: !ruby/object:Gem::Requirement
|
260
|
+
requirements:
|
261
|
+
- - ">="
|
262
|
+
- !ruby/object:Gem::Version
|
263
|
+
version: '0'
|
181
264
|
- !ruby/object:Gem::Dependency
|
182
265
|
name: jekyll
|
183
266
|
requirement: !ruby/object:Gem::Requirement
|
@@ -248,6 +331,20 @@ dependencies:
|
|
248
331
|
- - "~>"
|
249
332
|
- !ruby/object:Gem::Version
|
250
333
|
version: 1.5.0
|
334
|
+
- !ruby/object:Gem::Dependency
|
335
|
+
name: mutex_m
|
336
|
+
requirement: !ruby/object:Gem::Requirement
|
337
|
+
requirements:
|
338
|
+
- - ">="
|
339
|
+
- !ruby/object:Gem::Version
|
340
|
+
version: '0'
|
341
|
+
type: :development
|
342
|
+
prerelease: false
|
343
|
+
version_requirements: !ruby/object:Gem::Requirement
|
344
|
+
requirements:
|
345
|
+
- - ">="
|
346
|
+
- !ruby/object:Gem::Version
|
347
|
+
version: '0'
|
251
348
|
- !ruby/object:Gem::Dependency
|
252
349
|
name: webrick
|
253
350
|
requirement: !ruby/object:Gem::Requirement
|
@@ -330,11 +427,8 @@ files:
|
|
330
427
|
- lib/graphql/analysis_error.rb
|
331
428
|
- lib/graphql/autoload.rb
|
332
429
|
- lib/graphql/backtrace.rb
|
333
|
-
- lib/graphql/backtrace/inspect_result.rb
|
334
430
|
- lib/graphql/backtrace/table.rb
|
335
|
-
- lib/graphql/backtrace/trace.rb
|
336
431
|
- lib/graphql/backtrace/traced_error.rb
|
337
|
-
- lib/graphql/backtrace/tracer.rb
|
338
432
|
- lib/graphql/coercion_error.rb
|
339
433
|
- lib/graphql/current.rb
|
340
434
|
- lib/graphql/dataloader.rb
|
@@ -594,6 +688,7 @@ files:
|
|
594
688
|
- lib/graphql/tracing/appoptics_tracing.rb
|
595
689
|
- lib/graphql/tracing/appsignal_trace.rb
|
596
690
|
- lib/graphql/tracing/appsignal_tracing.rb
|
691
|
+
- lib/graphql/tracing/call_legacy_tracers.rb
|
597
692
|
- lib/graphql/tracing/data_dog_trace.rb
|
598
693
|
- lib/graphql/tracing/data_dog_tracing.rb
|
599
694
|
- lib/graphql/tracing/legacy_hooks_trace.rb
|
@@ -602,6 +697,7 @@ files:
|
|
602
697
|
- lib/graphql/tracing/new_relic_tracing.rb
|
603
698
|
- lib/graphql/tracing/notifications_trace.rb
|
604
699
|
- lib/graphql/tracing/notifications_tracing.rb
|
700
|
+
- lib/graphql/tracing/null_trace.rb
|
605
701
|
- lib/graphql/tracing/platform_trace.rb
|
606
702
|
- lib/graphql/tracing/platform_tracing.rb
|
607
703
|
- lib/graphql/tracing/prometheus_trace.rb
|
@@ -652,7 +748,6 @@ metadata:
|
|
652
748
|
bug_tracker_uri: https://github.com/rmosolgo/graphql-ruby/issues
|
653
749
|
mailing_list_uri: https://buttondown.email/graphql-ruby
|
654
750
|
rubygems_mfa_required: 'true'
|
655
|
-
post_install_message:
|
656
751
|
rdoc_options: []
|
657
752
|
require_paths:
|
658
753
|
- lib
|
@@ -667,8 +762,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
667
762
|
- !ruby/object:Gem::Version
|
668
763
|
version: '0'
|
669
764
|
requirements: []
|
670
|
-
rubygems_version: 3.
|
671
|
-
signing_key:
|
765
|
+
rubygems_version: 3.6.3
|
672
766
|
specification_version: 4
|
673
767
|
summary: A GraphQL language and runtime for Ruby
|
674
768
|
test_files: []
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
class Backtrace
|
4
|
-
module InspectResult
|
5
|
-
module_function
|
6
|
-
|
7
|
-
def inspect_result(obj)
|
8
|
-
case obj
|
9
|
-
when Hash
|
10
|
-
"{" +
|
11
|
-
obj.map do |key, val|
|
12
|
-
"#{key}: #{inspect_truncated(val)}"
|
13
|
-
end.join(", ") +
|
14
|
-
"}"
|
15
|
-
when Array
|
16
|
-
"[" +
|
17
|
-
obj.map { |v| inspect_truncated(v) }.join(", ") +
|
18
|
-
"]"
|
19
|
-
else
|
20
|
-
inspect_truncated(obj)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def inspect_truncated(obj)
|
25
|
-
case obj
|
26
|
-
when Hash
|
27
|
-
"{...}"
|
28
|
-
when Array
|
29
|
-
"[...]"
|
30
|
-
when GraphQL::Execution::Lazy
|
31
|
-
"(unresolved)"
|
32
|
-
else
|
33
|
-
"#{obj.inspect}"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
class Backtrace
|
4
|
-
module Trace
|
5
|
-
def initialize(*args, **kwargs, &block)
|
6
|
-
@__backtrace_contexts = {}
|
7
|
-
@__backtrace_last_context = nil
|
8
|
-
super
|
9
|
-
end
|
10
|
-
|
11
|
-
def validate(query:, validate:)
|
12
|
-
if query.multiplex
|
13
|
-
push_query_backtrace_context(query)
|
14
|
-
end
|
15
|
-
super
|
16
|
-
end
|
17
|
-
|
18
|
-
def analyze_query(query:)
|
19
|
-
if query.multiplex # missing for stand-alone static validation
|
20
|
-
push_query_backtrace_context(query)
|
21
|
-
end
|
22
|
-
super
|
23
|
-
end
|
24
|
-
|
25
|
-
def execute_query(query:)
|
26
|
-
push_query_backtrace_context(query)
|
27
|
-
super
|
28
|
-
end
|
29
|
-
|
30
|
-
def execute_query_lazy(query:, multiplex:)
|
31
|
-
query ||= multiplex.queries.first
|
32
|
-
push_query_backtrace_context(query)
|
33
|
-
super
|
34
|
-
end
|
35
|
-
|
36
|
-
def execute_field(field:, query:, ast_node:, arguments:, object:)
|
37
|
-
push_field_backtrace_context(field, query, ast_node, arguments, object)
|
38
|
-
super
|
39
|
-
end
|
40
|
-
|
41
|
-
def execute_field_lazy(field:, query:, ast_node:, arguments:, object:)
|
42
|
-
push_field_backtrace_context(field, query, ast_node, arguments, object)
|
43
|
-
super
|
44
|
-
end
|
45
|
-
|
46
|
-
def execute_multiplex(multiplex:)
|
47
|
-
super
|
48
|
-
rescue StandardError => err
|
49
|
-
# This is an unhandled error from execution,
|
50
|
-
# Re-raise it with a GraphQL trace.
|
51
|
-
potential_context = @__backtrace_last_context
|
52
|
-
if potential_context.is_a?(GraphQL::Query::Context) ||
|
53
|
-
potential_context.is_a?(Backtrace::Frame)
|
54
|
-
raise TracedError.new(err, potential_context)
|
55
|
-
else
|
56
|
-
raise
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
private
|
61
|
-
|
62
|
-
def push_query_backtrace_context(query)
|
63
|
-
push_data = query
|
64
|
-
push_key = []
|
65
|
-
@__backtrace_contexts[push_key] = push_data
|
66
|
-
@__backtrace_last_context = push_data
|
67
|
-
end
|
68
|
-
|
69
|
-
def push_field_backtrace_context(field, query, ast_node, arguments, object)
|
70
|
-
push_key = query.context[:current_path]
|
71
|
-
push_storage = @__backtrace_contexts
|
72
|
-
parent_frame = push_storage[push_key[0..-2]]
|
73
|
-
|
74
|
-
if parent_frame.is_a?(GraphQL::Query)
|
75
|
-
parent_frame = parent_frame.context
|
76
|
-
end
|
77
|
-
|
78
|
-
push_data = Frame.new(
|
79
|
-
query: query,
|
80
|
-
path: push_key,
|
81
|
-
ast_node: ast_node,
|
82
|
-
field: field,
|
83
|
-
object: object,
|
84
|
-
arguments: arguments,
|
85
|
-
parent_frame: parent_frame,
|
86
|
-
)
|
87
|
-
push_storage[push_key] = push_data
|
88
|
-
@__backtrace_last_context = push_data
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
class Backtrace
|
4
|
-
# TODO this is not fiber-friendly
|
5
|
-
module Tracer
|
6
|
-
module_function
|
7
|
-
|
8
|
-
# Implement the {GraphQL::Tracing} API.
|
9
|
-
def trace(key, metadata)
|
10
|
-
case key
|
11
|
-
when "lex", "parse"
|
12
|
-
# No context here, don't have a query yet
|
13
|
-
nil
|
14
|
-
when "execute_multiplex", "analyze_multiplex"
|
15
|
-
# No query context yet
|
16
|
-
nil
|
17
|
-
when "validate", "analyze_query", "execute_query", "execute_query_lazy"
|
18
|
-
push_key = []
|
19
|
-
if (query = metadata[:query]) || ((queries = metadata[:queries]) && (query = queries.first))
|
20
|
-
push_data = query
|
21
|
-
multiplex = query.multiplex
|
22
|
-
elsif (multiplex = metadata[:multiplex])
|
23
|
-
push_data = multiplex.queries.first
|
24
|
-
end
|
25
|
-
when "execute_field", "execute_field_lazy"
|
26
|
-
query = metadata[:query]
|
27
|
-
multiplex = query.multiplex
|
28
|
-
push_key = query.context[:current_path]
|
29
|
-
parent_frame = multiplex.context[:graphql_backtrace_contexts][push_key[0..-2]]
|
30
|
-
|
31
|
-
if parent_frame.is_a?(GraphQL::Query)
|
32
|
-
parent_frame = parent_frame.context
|
33
|
-
end
|
34
|
-
|
35
|
-
push_data = Frame.new(
|
36
|
-
query: query,
|
37
|
-
path: push_key,
|
38
|
-
ast_node: metadata[:ast_node],
|
39
|
-
field: metadata[:field],
|
40
|
-
object: metadata[:object],
|
41
|
-
arguments: metadata[:arguments],
|
42
|
-
parent_frame: parent_frame,
|
43
|
-
)
|
44
|
-
else
|
45
|
-
# Custom key, no backtrace data for this
|
46
|
-
nil
|
47
|
-
end
|
48
|
-
|
49
|
-
if push_data && multiplex
|
50
|
-
push_storage = multiplex.context[:graphql_backtrace_contexts] ||= {}
|
51
|
-
push_storage[push_key] = push_data
|
52
|
-
multiplex.context[:last_graphql_backtrace_context] = push_data
|
53
|
-
end
|
54
|
-
|
55
|
-
if key == "execute_multiplex"
|
56
|
-
multiplex_context = metadata[:multiplex].context
|
57
|
-
begin
|
58
|
-
yield
|
59
|
-
rescue StandardError => err
|
60
|
-
# This is an unhandled error from execution,
|
61
|
-
# Re-raise it with a GraphQL trace.
|
62
|
-
potential_context = multiplex_context[:last_graphql_backtrace_context]
|
63
|
-
|
64
|
-
if potential_context.is_a?(GraphQL::Query::Context) ||
|
65
|
-
potential_context.is_a?(Backtrace::Frame)
|
66
|
-
raise TracedError.new(err, potential_context)
|
67
|
-
else
|
68
|
-
raise
|
69
|
-
end
|
70
|
-
ensure
|
71
|
-
multiplex_context.delete(:graphql_backtrace_contexts)
|
72
|
-
multiplex_context.delete(:last_graphql_backtrace_context)
|
73
|
-
end
|
74
|
-
else
|
75
|
-
yield
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|