graphql 2.2.9 → 2.2.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/graphql/language/nodes.rb +1 -1
- data/lib/graphql/language/parser.rb +11 -1
- data/lib/graphql/language/printer.rb +4 -0
- data/lib/graphql/schema/interface.rb +5 -1
- data/lib/graphql/schema.rb +42 -16
- data/lib/graphql/tracing/sentry_trace.rb +18 -1
- data/lib/graphql/version.rb +1 -1
- metadata +29 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bae060f1dcf449082e9e53be024476505d848448a13d592f31e67c11024caa4
|
4
|
+
data.tar.gz: ebc753b89b657c18771641869a4dffea9e79fe324a3f7e46c1a84304a6cc3375
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bd27d12cd1efd1c4166c20062e401fa524bcda469de51cbfe89fd21542fd3433a2f23628c21330c9e3d700a9627c683a6a1691887a06ef06105ede4c2241b26
|
7
|
+
data.tar.gz: abc65a9217ae76239458695a3ee47d3e2bf3d072e16d62b9df16a65a380110e4a9a207af17473ca0f14fcce5d907a2552866597dd53785c890979a37aa2c500b
|
@@ -512,7 +512,7 @@ module GraphQL
|
|
512
512
|
# An operation-level query variable
|
513
513
|
class VariableDefinition < AbstractNode
|
514
514
|
scalar_methods :name, :type, :default_value
|
515
|
-
children_methods
|
515
|
+
children_methods(directives: Directive)
|
516
516
|
# @!attribute default_value
|
517
517
|
# @return [String, Integer, Float, Boolean, Array, NullValue] A Ruby value to use if no other value is provided
|
518
518
|
|
@@ -121,7 +121,17 @@ module GraphQL
|
|
121
121
|
value
|
122
122
|
end
|
123
123
|
|
124
|
-
|
124
|
+
directives = parse_directives
|
125
|
+
|
126
|
+
defs << Nodes::VariableDefinition.new(
|
127
|
+
pos: loc,
|
128
|
+
name: var_name,
|
129
|
+
type: var_type,
|
130
|
+
default_value: default_value,
|
131
|
+
directives: directives,
|
132
|
+
filename: @filename,
|
133
|
+
source_string: @graphql_str
|
134
|
+
)
|
125
135
|
end
|
126
136
|
expect_token(:RPAREN)
|
127
137
|
defs
|
@@ -208,6 +208,10 @@ module GraphQL
|
|
208
208
|
print_string(" = ")
|
209
209
|
print_node(variable_definition.default_value)
|
210
210
|
end
|
211
|
+
variable_definition.directives.each do |dir|
|
212
|
+
print_string(" ")
|
213
|
+
print_directive(dir)
|
214
|
+
end
|
211
215
|
end
|
212
216
|
|
213
217
|
def print_variable_identifier(variable_identifier)
|
@@ -69,7 +69,11 @@ module GraphQL
|
|
69
69
|
end
|
70
70
|
elsif child_class < GraphQL::Schema::Object
|
71
71
|
# This is being included into an object type, make sure it's using `implements(...)`
|
72
|
-
backtrace_line =
|
72
|
+
backtrace_line = caller_locations(0, 10).find do |location|
|
73
|
+
location.base_label == "implements" &&
|
74
|
+
location.path.end_with?("schema/member/has_interfaces.rb")
|
75
|
+
end
|
76
|
+
|
73
77
|
if !backtrace_line
|
74
78
|
raise "Attach interfaces using `implements(#{self})`, not `include(#{self})`"
|
75
79
|
end
|
data/lib/graphql/schema.rb
CHANGED
@@ -167,13 +167,20 @@ module GraphQL
|
|
167
167
|
backtrace_class.include(GraphQL::Backtrace::Trace)
|
168
168
|
trace_mode(:default_backtrace, backtrace_class)
|
169
169
|
end
|
170
|
-
trace_class_for(:default)
|
170
|
+
trace_class_for(:default, build: true)
|
171
171
|
end
|
172
172
|
|
173
173
|
# @return [Class] Return the trace class to use for this mode, looking one up on the superclass if this Schema doesn't have one defined.
|
174
|
-
def trace_class_for(mode, build:
|
175
|
-
own_trace_modes[mode]
|
176
|
-
|
174
|
+
def trace_class_for(mode, build: false)
|
175
|
+
if (trace_class = own_trace_modes[mode])
|
176
|
+
trace_class
|
177
|
+
elsif superclass.respond_to?(:trace_class_for) && (trace_class = superclass.trace_class_for(mode, build: false))
|
178
|
+
trace_class
|
179
|
+
elsif build
|
180
|
+
own_trace_modes[mode] = build_trace_mode(mode)
|
181
|
+
else
|
182
|
+
nil
|
183
|
+
end
|
177
184
|
end
|
178
185
|
|
179
186
|
# Configure `trace_class` to be used whenever `context: { trace_mode: mode_name }` is requested.
|
@@ -211,20 +218,24 @@ module GraphQL
|
|
211
218
|
include DefaultTraceClass
|
212
219
|
end
|
213
220
|
when :default_backtrace
|
214
|
-
schema_base_class = trace_class_for(:default)
|
221
|
+
schema_base_class = trace_class_for(:default, build: true)
|
215
222
|
Class.new(schema_base_class) do
|
216
223
|
include(GraphQL::Backtrace::Trace)
|
217
224
|
end
|
218
225
|
else
|
219
226
|
# First, see if the superclass has a custom-defined class for this.
|
220
227
|
# Then, if it doesn't, use this class's default trace
|
221
|
-
base_class = (superclass.respond_to?(:trace_class_for) && superclass.trace_class_for(mode
|
228
|
+
base_class = (superclass.respond_to?(:trace_class_for) && superclass.trace_class_for(mode)) || trace_class_for(:default, build: true)
|
222
229
|
# Prepare the default trace class if it hasn't been initialized yet
|
223
230
|
base_class ||= (own_trace_modes[:default] = build_trace_mode(:default))
|
224
231
|
mods = trace_modules_for(mode)
|
225
232
|
if base_class < DefaultTraceClass
|
226
233
|
mods = trace_modules_for(:default) + mods
|
227
234
|
end
|
235
|
+
# Copy the existing default options into this mode's options
|
236
|
+
default_options = trace_options_for(:default)
|
237
|
+
add_trace_options_for(mode, default_options)
|
238
|
+
|
228
239
|
Class.new(base_class) do
|
229
240
|
mods.any? && include(*mods)
|
230
241
|
end
|
@@ -1107,7 +1118,7 @@ module GraphQL
|
|
1107
1118
|
end
|
1108
1119
|
|
1109
1120
|
def tracer(new_tracer)
|
1110
|
-
default_trace = trace_class_for(:default)
|
1121
|
+
default_trace = trace_class_for(:default, build: true)
|
1111
1122
|
if default_trace.nil? || !(default_trace < GraphQL::Tracing::CallLegacyTracers)
|
1112
1123
|
trace_with(GraphQL::Tracing::CallLegacyTracers)
|
1113
1124
|
end
|
@@ -1133,20 +1144,23 @@ module GraphQL
|
|
1133
1144
|
tc = own_trace_modes[mode] ||= build_trace_mode(mode)
|
1134
1145
|
tc.include(trace_mod)
|
1135
1146
|
own_trace_modules[mode] << trace_mod
|
1136
|
-
|
1147
|
+
add_trace_options_for(mode, options)
|
1137
1148
|
if mode == :default
|
1138
1149
|
# This module is being added as a default tracer. If any other mode classes
|
1139
1150
|
# have already been created, but get their default behavior from a superclass,
|
1140
1151
|
# Then mix this into this schema's subclass.
|
1141
1152
|
# (But don't mix it into mode classes that aren't default-based.)
|
1142
1153
|
own_trace_modes.each do |other_mode_name, other_mode_class|
|
1143
|
-
if other_mode_class < DefaultTraceClass
|
1144
|
-
|
1154
|
+
if other_mode_class < DefaultTraceClass
|
1155
|
+
# Don't add it back to the inheritance tree if it's already there
|
1156
|
+
if !(other_mode_class < trace_mod)
|
1157
|
+
other_mode_class.include(trace_mod)
|
1158
|
+
end
|
1159
|
+
# Add any options so they'll be available
|
1160
|
+
add_trace_options_for(other_mode_name, options)
|
1145
1161
|
end
|
1146
1162
|
end
|
1147
1163
|
end
|
1148
|
-
t_opts = trace_options_for(mode)
|
1149
|
-
t_opts.merge!(options)
|
1150
1164
|
end
|
1151
1165
|
nil
|
1152
1166
|
end
|
@@ -1156,10 +1170,14 @@ module GraphQL
|
|
1156
1170
|
def trace_options_for(mode)
|
1157
1171
|
@trace_options_for_mode ||= {}
|
1158
1172
|
@trace_options_for_mode[mode] ||= begin
|
1173
|
+
# It may be time to create an options hash for a mode that wasn't registered yet.
|
1174
|
+
# Mix in the default options in that case.
|
1175
|
+
default_options = mode == :default ? EMPTY_HASH : trace_options_for(:default)
|
1176
|
+
# Make sure this returns a new object so that other hashes aren't modified later
|
1159
1177
|
if superclass.respond_to?(:trace_options_for)
|
1160
|
-
superclass.trace_options_for(mode).
|
1178
|
+
superclass.trace_options_for(mode).merge(default_options)
|
1161
1179
|
else
|
1162
|
-
|
1180
|
+
default_options.dup
|
1163
1181
|
end
|
1164
1182
|
end
|
1165
1183
|
end
|
@@ -1182,15 +1200,17 @@ module GraphQL
|
|
1182
1200
|
raise ArgumentError, "Can't use `context[:backtrace]` with a custom default trace mode (`#{dm.inspect}`)"
|
1183
1201
|
else
|
1184
1202
|
own_trace_modes[:default_backtrace] ||= build_trace_mode(:default_backtrace)
|
1203
|
+
options_trace_mode = :default
|
1185
1204
|
:default_backtrace
|
1186
1205
|
end
|
1187
1206
|
else
|
1188
1207
|
default_trace_mode
|
1189
1208
|
end
|
1190
1209
|
|
1191
|
-
|
1210
|
+
options_trace_mode ||= trace_mode
|
1211
|
+
base_trace_options = trace_options_for(options_trace_mode)
|
1192
1212
|
trace_options = base_trace_options.merge(options)
|
1193
|
-
trace_class_for_mode = trace_class_for(trace_mode
|
1213
|
+
trace_class_for_mode = trace_class_for(trace_mode, build: true)
|
1194
1214
|
trace_class_for_mode.new(**trace_options)
|
1195
1215
|
end
|
1196
1216
|
|
@@ -1344,6 +1364,12 @@ module GraphQL
|
|
1344
1364
|
|
1345
1365
|
private
|
1346
1366
|
|
1367
|
+
def add_trace_options_for(mode, new_options)
|
1368
|
+
t_opts = trace_options_for(mode)
|
1369
|
+
t_opts.merge!(new_options)
|
1370
|
+
nil
|
1371
|
+
end
|
1372
|
+
|
1347
1373
|
# @param t [Module, Array<Module>]
|
1348
1374
|
# @return [void]
|
1349
1375
|
def add_type_and_traverse(t, root:)
|
@@ -5,6 +5,24 @@ module GraphQL
|
|
5
5
|
module SentryTrace
|
6
6
|
include PlatformTrace
|
7
7
|
|
8
|
+
# @param set_transaction_name [Boolean] If true, the GraphQL operation name will be used as the transaction name.
|
9
|
+
# This is not advised if you run more than one query per HTTP request, for example, with `graphql-client` or multiplexing.
|
10
|
+
# It can also be specified per-query with `context[:set_sentry_transaction_name]`.
|
11
|
+
def initialize(set_transaction_name: false, **_rest)
|
12
|
+
@set_transaction_name = set_transaction_name
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
def execute_query(**data)
|
17
|
+
set_this_txn_name = data[:query].context[:set_sentry_transaction_name]
|
18
|
+
if set_this_txn_name == true || (set_this_txn_name.nil? && @set_transaction_name)
|
19
|
+
Sentry.configure_scope do |scope|
|
20
|
+
scope.set_transaction_name(transaction_name(data[:query]))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
instrument_execution("graphql.execute", "execute_query", data) { super }
|
24
|
+
end
|
25
|
+
|
8
26
|
{
|
9
27
|
"lex" => "graphql.lex",
|
10
28
|
"parse" => "graphql.parse",
|
@@ -12,7 +30,6 @@ module GraphQL
|
|
12
30
|
"analyze_query" => "graphql.analyze",
|
13
31
|
"analyze_multiplex" => "graphql.analyze_multiplex",
|
14
32
|
"execute_multiplex" => "graphql.execute_multiplex",
|
15
|
-
"execute_query" => "graphql.execute",
|
16
33
|
"execute_query_lazy" => "graphql.execute"
|
17
34
|
}.each do |trace_method, platform_key|
|
18
35
|
module_eval <<-RUBY, __FILE__, __LINE__
|
data/lib/graphql/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02-
|
11
|
+
date: 2024-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: base64
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: benchmark-ips
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,44 +70,44 @@ dependencies:
|
|
56
70
|
name: minitest
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - "
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
75
|
+
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - "
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: minitest-focus
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- - "
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- - "
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: minitest-reporters
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - "
|
101
|
+
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
103
|
+
version: '0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- - "
|
108
|
+
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rake
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -617,7 +631,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
617
631
|
- !ruby/object:Gem::Version
|
618
632
|
version: '0'
|
619
633
|
requirements: []
|
620
|
-
rubygems_version: 3.5.
|
634
|
+
rubygems_version: 3.5.3
|
621
635
|
signing_key:
|
622
636
|
specification_version: 4
|
623
637
|
summary: A GraphQL language and runtime for Ruby
|