graphql 2.2.17 → 2.5.16

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.
Files changed (240) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/install/mutation_root_generator.rb +2 -2
  3. data/lib/generators/graphql/install_generator.rb +46 -0
  4. data/lib/generators/graphql/orm_mutations_base.rb +1 -1
  5. data/lib/generators/graphql/templates/base_resolver.erb +2 -0
  6. data/lib/generators/graphql/templates/schema.erb +3 -0
  7. data/lib/generators/graphql/type_generator.rb +1 -1
  8. data/lib/graphql/analysis/analyzer.rb +90 -0
  9. data/lib/graphql/analysis/field_usage.rb +82 -0
  10. data/lib/graphql/analysis/max_query_complexity.rb +20 -0
  11. data/lib/graphql/analysis/max_query_depth.rb +20 -0
  12. data/lib/graphql/analysis/query_complexity.rb +263 -0
  13. data/lib/graphql/analysis/{ast/query_depth.rb → query_depth.rb} +23 -25
  14. data/lib/graphql/analysis/visitor.rb +280 -0
  15. data/lib/graphql/analysis.rb +95 -1
  16. data/lib/graphql/autoload.rb +38 -0
  17. data/lib/graphql/backtrace/table.rb +118 -55
  18. data/lib/graphql/backtrace.rb +1 -19
  19. data/lib/graphql/current.rb +57 -0
  20. data/lib/graphql/dashboard/detailed_traces.rb +47 -0
  21. data/lib/graphql/dashboard/installable.rb +22 -0
  22. data/lib/graphql/dashboard/limiters.rb +93 -0
  23. data/lib/graphql/dashboard/operation_store.rb +199 -0
  24. data/lib/graphql/dashboard/statics/bootstrap-5.3.3.min.css +6 -0
  25. data/lib/graphql/dashboard/statics/bootstrap-5.3.3.min.js +7 -0
  26. data/lib/graphql/dashboard/statics/charts.min.css +1 -0
  27. data/lib/graphql/dashboard/statics/dashboard.css +30 -0
  28. data/lib/graphql/dashboard/statics/dashboard.js +143 -0
  29. data/lib/graphql/dashboard/statics/header-icon.png +0 -0
  30. data/lib/graphql/dashboard/statics/icon.png +0 -0
  31. data/lib/graphql/dashboard/subscriptions.rb +96 -0
  32. data/lib/graphql/dashboard/views/graphql/dashboard/detailed_traces/traces/index.html.erb +45 -0
  33. data/lib/graphql/dashboard/views/graphql/dashboard/landings/show.html.erb +18 -0
  34. data/lib/graphql/dashboard/views/graphql/dashboard/limiters/limiters/show.html.erb +62 -0
  35. data/lib/graphql/dashboard/views/graphql/dashboard/not_installed.html.erb +18 -0
  36. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/_form.html.erb +23 -0
  37. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/edit.html.erb +21 -0
  38. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/index.html.erb +69 -0
  39. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/new.html.erb +7 -0
  40. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/index_entries/index.html.erb +39 -0
  41. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/index_entries/show.html.erb +32 -0
  42. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/operations/index.html.erb +81 -0
  43. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/operations/show.html.erb +71 -0
  44. data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/subscriptions/show.html.erb +41 -0
  45. data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/topics/index.html.erb +55 -0
  46. data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/topics/show.html.erb +40 -0
  47. data/lib/graphql/dashboard/views/layouts/graphql/dashboard/application.html.erb +108 -0
  48. data/lib/graphql/dashboard.rb +158 -0
  49. data/lib/graphql/dataloader/active_record_association_source.rb +84 -0
  50. data/lib/graphql/dataloader/active_record_source.rb +47 -0
  51. data/lib/graphql/dataloader/async_dataloader.rb +46 -19
  52. data/lib/graphql/dataloader/null_dataloader.rb +51 -10
  53. data/lib/graphql/dataloader/source.rb +20 -9
  54. data/lib/graphql/dataloader.rb +153 -45
  55. data/lib/graphql/date_encoding_error.rb +1 -1
  56. data/lib/graphql/dig.rb +2 -1
  57. data/lib/graphql/execution/interpreter/argument_value.rb +5 -1
  58. data/lib/graphql/execution/interpreter/arguments_cache.rb +5 -10
  59. data/lib/graphql/execution/interpreter/resolve.rb +23 -25
  60. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +63 -5
  61. data/lib/graphql/execution/interpreter/runtime.rb +321 -222
  62. data/lib/graphql/execution/interpreter.rb +23 -30
  63. data/lib/graphql/execution/lookahead.rb +18 -11
  64. data/lib/graphql/execution/multiplex.rb +6 -5
  65. data/lib/graphql/introspection/directive_location_enum.rb +1 -1
  66. data/lib/graphql/introspection/directive_type.rb +1 -1
  67. data/lib/graphql/introspection/entry_points.rb +2 -2
  68. data/lib/graphql/introspection/field_type.rb +1 -1
  69. data/lib/graphql/introspection/schema_type.rb +6 -11
  70. data/lib/graphql/introspection/type_type.rb +5 -5
  71. data/lib/graphql/invalid_name_error.rb +1 -1
  72. data/lib/graphql/invalid_null_error.rb +20 -17
  73. data/lib/graphql/language/cache.rb +13 -0
  74. data/lib/graphql/language/comment.rb +18 -0
  75. data/lib/graphql/language/document_from_schema_definition.rb +64 -35
  76. data/lib/graphql/language/lexer.rb +72 -42
  77. data/lib/graphql/language/nodes.rb +93 -52
  78. data/lib/graphql/language/parser.rb +168 -61
  79. data/lib/graphql/language/printer.rb +31 -15
  80. data/lib/graphql/language/sanitized_printer.rb +1 -1
  81. data/lib/graphql/language.rb +61 -1
  82. data/lib/graphql/pagination/connection.rb +1 -1
  83. data/lib/graphql/query/context/scoped_context.rb +1 -1
  84. data/lib/graphql/query/context.rb +46 -47
  85. data/lib/graphql/query/null_context.rb +3 -5
  86. data/lib/graphql/query/partial.rb +179 -0
  87. data/lib/graphql/query/validation_pipeline.rb +2 -2
  88. data/lib/graphql/query/variable_validation_error.rb +1 -1
  89. data/lib/graphql/query.rb +123 -69
  90. data/lib/graphql/railtie.rb +7 -0
  91. data/lib/graphql/rubocop/graphql/base_cop.rb +1 -1
  92. data/lib/graphql/rubocop/graphql/field_type_in_block.rb +144 -0
  93. data/lib/graphql/rubocop/graphql/root_types_in_block.rb +38 -0
  94. data/lib/graphql/rubocop.rb +2 -0
  95. data/lib/graphql/schema/addition.rb +26 -13
  96. data/lib/graphql/schema/always_visible.rb +7 -2
  97. data/lib/graphql/schema/argument.rb +57 -8
  98. data/lib/graphql/schema/build_from_definition.rb +116 -49
  99. data/lib/graphql/schema/directive/flagged.rb +4 -2
  100. data/lib/graphql/schema/directive.rb +54 -2
  101. data/lib/graphql/schema/enum.rb +107 -24
  102. data/lib/graphql/schema/enum_value.rb +10 -2
  103. data/lib/graphql/schema/field/connection_extension.rb +1 -1
  104. data/lib/graphql/schema/field/scope_extension.rb +1 -1
  105. data/lib/graphql/schema/field.rb +134 -45
  106. data/lib/graphql/schema/field_extension.rb +1 -1
  107. data/lib/graphql/schema/has_single_input_argument.rb +6 -2
  108. data/lib/graphql/schema/input_object.rb +122 -64
  109. data/lib/graphql/schema/interface.rb +23 -5
  110. data/lib/graphql/schema/introspection_system.rb +6 -17
  111. data/lib/graphql/schema/late_bound_type.rb +4 -0
  112. data/lib/graphql/schema/list.rb +3 -3
  113. data/lib/graphql/schema/loader.rb +3 -2
  114. data/lib/graphql/schema/member/base_dsl_methods.rb +15 -0
  115. data/lib/graphql/schema/member/has_arguments.rb +44 -58
  116. data/lib/graphql/schema/member/has_dataloader.rb +62 -0
  117. data/lib/graphql/schema/member/has_deprecation_reason.rb +15 -0
  118. data/lib/graphql/schema/member/has_directives.rb +4 -4
  119. data/lib/graphql/schema/member/has_fields.rb +26 -6
  120. data/lib/graphql/schema/member/has_interfaces.rb +6 -6
  121. data/lib/graphql/schema/member/has_unresolved_type_error.rb +5 -1
  122. data/lib/graphql/schema/member/has_validators.rb +1 -1
  123. data/lib/graphql/schema/member/relay_shortcuts.rb +1 -1
  124. data/lib/graphql/schema/member/type_system_helpers.rb +17 -4
  125. data/lib/graphql/schema/member.rb +1 -0
  126. data/lib/graphql/schema/mutation.rb +7 -0
  127. data/lib/graphql/schema/object.rb +25 -8
  128. data/lib/graphql/schema/printer.rb +1 -0
  129. data/lib/graphql/schema/ractor_shareable.rb +79 -0
  130. data/lib/graphql/schema/relay_classic_mutation.rb +0 -1
  131. data/lib/graphql/schema/resolver.rb +29 -23
  132. data/lib/graphql/schema/scalar.rb +1 -6
  133. data/lib/graphql/schema/subscription.rb +52 -6
  134. data/lib/graphql/schema/timeout.rb +19 -2
  135. data/lib/graphql/schema/type_expression.rb +2 -2
  136. data/lib/graphql/schema/union.rb +1 -1
  137. data/lib/graphql/schema/validator/all_validator.rb +62 -0
  138. data/lib/graphql/schema/validator/required_validator.rb +92 -11
  139. data/lib/graphql/schema/validator.rb +3 -1
  140. data/lib/graphql/schema/visibility/migration.rb +188 -0
  141. data/lib/graphql/schema/visibility/profile.rb +445 -0
  142. data/lib/graphql/schema/visibility/visit.rb +190 -0
  143. data/lib/graphql/schema/visibility.rb +311 -0
  144. data/lib/graphql/schema/warden.rb +190 -20
  145. data/lib/graphql/schema.rb +695 -167
  146. data/lib/graphql/static_validation/all_rules.rb +2 -2
  147. data/lib/graphql/static_validation/base_visitor.rb +6 -5
  148. data/lib/graphql/static_validation/literal_validator.rb +4 -4
  149. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
  150. data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +1 -1
  151. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +3 -2
  152. data/lib/graphql/static_validation/rules/directives_are_defined.rb +3 -3
  153. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +2 -0
  154. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +12 -2
  155. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +47 -13
  156. data/lib/graphql/static_validation/rules/fields_will_merge.rb +88 -25
  157. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +10 -2
  158. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
  159. data/lib/graphql/static_validation/rules/fragment_types_exist.rb +12 -2
  160. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +1 -1
  161. data/lib/graphql/static_validation/rules/mutation_root_exists.rb +1 -1
  162. data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +1 -1
  163. data/lib/graphql/static_validation/rules/not_single_subscription_error.rb +25 -0
  164. data/lib/graphql/static_validation/rules/query_root_exists.rb +1 -1
  165. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -4
  166. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +3 -3
  167. data/lib/graphql/static_validation/rules/subscription_root_exists_and_single_subscription_selection.rb +26 -0
  168. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +7 -3
  169. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +18 -27
  170. data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +1 -1
  171. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +2 -2
  172. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +11 -2
  173. data/lib/graphql/static_validation/validation_context.rb +18 -2
  174. data/lib/graphql/static_validation/validator.rb +6 -1
  175. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +5 -3
  176. data/lib/graphql/subscriptions/broadcast_analyzer.rb +11 -5
  177. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +12 -10
  178. data/lib/graphql/subscriptions/event.rb +13 -2
  179. data/lib/graphql/subscriptions/serialize.rb +1 -1
  180. data/lib/graphql/subscriptions.rb +7 -5
  181. data/lib/graphql/testing/helpers.rb +48 -16
  182. data/lib/graphql/testing/mock_action_cable.rb +111 -0
  183. data/lib/graphql/testing.rb +1 -0
  184. data/lib/graphql/tracing/active_support_notifications_trace.rb +14 -3
  185. data/lib/graphql/tracing/active_support_notifications_tracing.rb +1 -1
  186. data/lib/graphql/tracing/appoptics_trace.rb +5 -1
  187. data/lib/graphql/tracing/appoptics_tracing.rb +7 -0
  188. data/lib/graphql/tracing/appsignal_trace.rb +32 -59
  189. data/lib/graphql/tracing/appsignal_tracing.rb +2 -0
  190. data/lib/graphql/tracing/call_legacy_tracers.rb +66 -0
  191. data/lib/graphql/tracing/data_dog_trace.rb +46 -162
  192. data/lib/graphql/tracing/data_dog_tracing.rb +2 -0
  193. data/lib/graphql/tracing/detailed_trace/memory_backend.rb +60 -0
  194. data/lib/graphql/tracing/detailed_trace/redis_backend.rb +72 -0
  195. data/lib/graphql/tracing/detailed_trace.rb +141 -0
  196. data/lib/graphql/tracing/legacy_hooks_trace.rb +1 -0
  197. data/lib/graphql/tracing/legacy_trace.rb +4 -61
  198. data/lib/graphql/tracing/monitor_trace.rb +283 -0
  199. data/lib/graphql/tracing/new_relic_trace.rb +47 -54
  200. data/lib/graphql/tracing/new_relic_tracing.rb +2 -0
  201. data/lib/graphql/tracing/notifications_trace.rb +183 -37
  202. data/lib/graphql/tracing/notifications_tracing.rb +2 -0
  203. data/lib/graphql/tracing/null_trace.rb +9 -0
  204. data/lib/graphql/tracing/perfetto_trace/trace.proto +141 -0
  205. data/lib/graphql/tracing/perfetto_trace/trace_pb.rb +33 -0
  206. data/lib/graphql/tracing/perfetto_trace.rb +818 -0
  207. data/lib/graphql/tracing/platform_tracing.rb +1 -1
  208. data/lib/graphql/tracing/prometheus_trace/graphql_collector.rb +2 -0
  209. data/lib/graphql/tracing/prometheus_trace.rb +73 -73
  210. data/lib/graphql/tracing/prometheus_tracing.rb +2 -0
  211. data/lib/graphql/tracing/scout_trace.rb +32 -58
  212. data/lib/graphql/tracing/scout_tracing.rb +2 -0
  213. data/lib/graphql/tracing/sentry_trace.rb +64 -98
  214. data/lib/graphql/tracing/statsd_trace.rb +33 -45
  215. data/lib/graphql/tracing/statsd_tracing.rb +2 -0
  216. data/lib/graphql/tracing/trace.rb +111 -1
  217. data/lib/graphql/tracing.rb +31 -30
  218. data/lib/graphql/type_kinds.rb +2 -1
  219. data/lib/graphql/types/relay/connection_behaviors.rb +12 -2
  220. data/lib/graphql/types/relay/edge_behaviors.rb +11 -1
  221. data/lib/graphql/types/relay/page_info_behaviors.rb +4 -0
  222. data/lib/graphql/types.rb +18 -11
  223. data/lib/graphql/unauthorized_enum_value_error.rb +13 -0
  224. data/lib/graphql/version.rb +1 -1
  225. data/lib/graphql.rb +64 -54
  226. metadata +197 -22
  227. data/lib/graphql/analysis/ast/analyzer.rb +0 -91
  228. data/lib/graphql/analysis/ast/field_usage.rb +0 -82
  229. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -22
  230. data/lib/graphql/analysis/ast/max_query_depth.rb +0 -22
  231. data/lib/graphql/analysis/ast/query_complexity.rb +0 -182
  232. data/lib/graphql/analysis/ast/visitor.rb +0 -276
  233. data/lib/graphql/analysis/ast.rb +0 -94
  234. data/lib/graphql/backtrace/inspect_result.rb +0 -50
  235. data/lib/graphql/backtrace/trace.rb +0 -93
  236. data/lib/graphql/backtrace/tracer.rb +0 -80
  237. data/lib/graphql/language/token.rb +0 -34
  238. data/lib/graphql/schema/invalid_type_error.rb +0 -7
  239. data/lib/graphql/schema/null_mask.rb +0 -11
  240. data/lib/graphql/static_validation/rules/subscription_root_exists.rb +0 -17
@@ -20,26 +20,29 @@ module GraphQL
20
20
  @definition_line = definition_line
21
21
  super(**_rest)
22
22
  end
23
+
24
+ def marshal_dump
25
+ super << @definition_line
26
+ end
27
+
28
+ def marshal_load(values)
29
+ @definition_line = values.pop
30
+ super
31
+ end
23
32
  end
24
33
 
25
34
  attr_reader :filename
26
35
 
27
36
  def line
28
- @line ||= (@source_string && @pos) ? @source_string[0..@pos].count("\n") + 1 : nil
37
+ @line ||= @source&.line_at(@pos)
29
38
  end
30
39
 
31
40
  def col
32
- @col ||= if @source_string && @pos
33
- if @pos == 0
34
- 1
35
- else
36
- @source_string[0..@pos].split("\n").last.length
37
- end
38
- end
41
+ @col ||= @source&.column_at(@pos)
39
42
  end
40
43
 
41
44
  def definition_line
42
- @definition_line ||= (@source_string && @definition_pos) ? @source_string[0..@definition_pos].count("\n") + 1 : nil
45
+ @definition_line ||= (@source && @definition_pos) ? @source.line_at(@definition_pos) : nil
43
46
  end
44
47
 
45
48
  # Value equality
@@ -80,7 +83,11 @@ module GraphQL
80
83
 
81
84
  def to_query_string(printer: GraphQL::Language::Printer.new)
82
85
  if printer.is_a?(GraphQL::Language::Printer)
83
- @query_string ||= printer.print(self)
86
+ if frozen?
87
+ @query_string || printer.print(self)
88
+ else
89
+ @query_string ||= printer.print(self)
90
+ end
84
91
  else
85
92
  printer.print(self)
86
93
  end
@@ -269,30 +276,36 @@ module GraphQL
269
276
  "col: nil",
270
277
  "pos: nil",
271
278
  "filename: nil",
272
- "source_string: nil",
279
+ "source: nil"
273
280
  ]
274
281
 
282
+ IGNORED_MARSHALLING_KEYWORDS = [:comment]
283
+
275
284
  def generate_initialize
285
+ return if method_defined?(:marshal_load, false) # checking for `:initialize` doesn't work right
286
+
276
287
  scalar_method_names = @scalar_methods
277
288
  # TODO: These probably should be scalar methods, but `types` returns an array
278
- [:types, :description].each do |extra_method|
289
+ [:types, :description, :comment].each do |extra_method|
279
290
  if method_defined?(extra_method)
280
291
  scalar_method_names += [extra_method]
281
292
  end
282
293
  end
283
294
 
284
- all_method_names = scalar_method_names + @children_methods.keys
295
+ children_method_names = @children_methods.keys
296
+
297
+ all_method_names = scalar_method_names + children_method_names
285
298
  if all_method_names.include?(:alias)
286
299
  # Rather than complicating this special case,
287
300
  # let it be overridden (in field)
288
301
  return
289
302
  else
290
303
  arguments = scalar_method_names.map { |m| "#{m}: nil"} +
291
- @children_methods.keys.map { |m| "#{m}: NO_CHILDREN" } +
304
+ children_method_names.map { |m| "#{m}: NO_CHILDREN" } +
292
305
  DEFAULT_INITIALIZE_OPTIONS
293
306
 
294
307
  assignments = scalar_method_names.map { |m| "@#{m} = #{m}"} +
295
- @children_methods.keys.map { |m| "@#{m} = #{m}.freeze" }
308
+ children_method_names.map { |m| "@#{m} = #{m}.freeze" }
296
309
 
297
310
  if name.end_with?("Definition") && name != "FragmentDefinition"
298
311
  arguments << "definition_pos: nil"
@@ -300,7 +313,13 @@ module GraphQL
300
313
  end
301
314
 
302
315
  keywords = scalar_method_names.map { |m| "#{m}: #{m}"} +
303
- @children_methods.keys.map { |m| "#{m}: #{m}" }
316
+ children_method_names.map { |m| "#{m}: #{m}" }
317
+
318
+ ignored_keywords = IGNORED_MARSHALLING_KEYWORDS.map do |keyword|
319
+ "#{keyword.to_s}: nil"
320
+ end
321
+
322
+ marshalling_method_names = all_method_names - IGNORED_MARSHALLING_KEYWORDS
304
323
 
305
324
  module_eval <<-RUBY, __FILE__, __LINE__
306
325
  def initialize(#{arguments.join(", ")})
@@ -308,13 +327,25 @@ module GraphQL
308
327
  @col = col
309
328
  @pos = pos
310
329
  @filename = filename
311
- @source_string = source_string
330
+ @source = source
312
331
  #{assignments.join("\n")}
313
332
  end
314
333
 
315
- def self.from_a(filename, line, col, #{(scalar_method_names + @children_methods.keys).join(", ")})
334
+ def self.from_a(filename, line, col, #{marshalling_method_names.join(", ")}, #{ignored_keywords.join(", ")})
316
335
  self.new(filename: filename, line: line, col: col, #{keywords.join(", ")})
317
336
  end
337
+
338
+ def marshal_dump
339
+ [
340
+ line, col, # use methods here to force them to be calculated
341
+ @filename,
342
+ #{marshalling_method_names.map { |n| "@#{n}," }.join}
343
+ ]
344
+ end
345
+
346
+ def marshal_load(values)
347
+ @line, @col, @filename #{marshalling_method_names.map { |n| ", @#{n}"}.join} = values
348
+ end
318
349
  RUBY
319
350
  end
320
351
  end
@@ -365,6 +396,7 @@ module GraphQL
365
396
  arguments: Nodes::Argument,
366
397
  locations: Nodes::DirectiveLocation,
367
398
  )
399
+ self.children_method_name = :definitions
368
400
  end
369
401
 
370
402
  # An enum value. The string is available as {#name}.
@@ -377,17 +409,7 @@ module GraphQL
377
409
 
378
410
  # A single selection in a GraphQL query.
379
411
  class Field < AbstractNode
380
- scalar_methods :name, :alias
381
- children_methods({
382
- arguments: GraphQL::Language::Nodes::Argument,
383
- selections: GraphQL::Language::Nodes::Field,
384
- directives: GraphQL::Language::Nodes::Directive,
385
- })
386
-
387
- # @!attribute selections
388
- # @return [Array<Nodes::Field>] Selections on this object (or empty array if this is a scalar field)
389
-
390
- def initialize(name: nil, arguments: NONE, directives: NONE, selections: NONE, field_alias: nil, line: nil, col: nil, pos: nil, filename: nil, source_string: nil)
412
+ def initialize(name: nil, arguments: NONE, directives: NONE, selections: NONE, field_alias: nil, line: nil, col: nil, pos: nil, filename: nil, source: nil)
391
413
  @name = name
392
414
  @arguments = arguments || NONE
393
415
  @directives = directives || NONE
@@ -398,39 +420,42 @@ module GraphQL
398
420
  @col = col
399
421
  @pos = pos
400
422
  @filename = filename
401
- @source_string = source_string
423
+ @source = source
402
424
  end
403
425
 
404
426
  def self.from_a(filename, line, col, field_alias, name, arguments, directives, selections) # rubocop:disable Metrics/ParameterLists
405
427
  self.new(filename: filename, line: line, col: col, field_alias: field_alias, name: name, arguments: arguments, directives: directives, selections: selections)
406
428
  end
407
429
 
408
- # Override this because default is `:fields`
409
- self.children_method_name = :selections
410
- end
430
+ def marshal_dump
431
+ [line, col, @filename, @name, @arguments, @directives, @selections, @alias]
432
+ end
411
433
 
412
- # A reusable fragment, defined at document-level.
413
- class FragmentDefinition < AbstractNode
414
- scalar_methods :name, :type
434
+ def marshal_load(values)
435
+ @line, @col, @filename, @name, @arguments, @directives, @selections, @alias = values
436
+ end
437
+
438
+ scalar_methods :name, :alias
415
439
  children_methods({
440
+ arguments: GraphQL::Language::Nodes::Argument,
416
441
  selections: GraphQL::Language::Nodes::Field,
417
442
  directives: GraphQL::Language::Nodes::Directive,
418
443
  })
419
444
 
420
- self.children_method_name = :definitions
421
- # @!attribute name
422
- # @return [String] the identifier for this fragment, which may be applied with `...#{name}`
445
+ # Override this because default is `:fields`
446
+ self.children_method_name = :selections
447
+ end
423
448
 
424
- # @!attribute type
425
- # @return [String] the type condition for this fragment (name of type which it may apply to)
426
- def initialize(name: nil, type: nil, directives: NONE, selections: NONE, filename: nil, pos: nil, source_string: nil, line: nil, col: nil)
449
+ # A reusable fragment, defined at document-level.
450
+ class FragmentDefinition < AbstractNode
451
+ def initialize(name: nil, type: nil, directives: NONE, selections: NONE, filename: nil, pos: nil, source: nil, line: nil, col: nil)
427
452
  @name = name
428
453
  @type = type
429
454
  @directives = directives
430
455
  @selections = selections
431
456
  @filename = filename
432
457
  @pos = pos
433
- @source_string = source_string
458
+ @source = source
434
459
  @line = line
435
460
  @col = col
436
461
  end
@@ -438,6 +463,22 @@ module GraphQL
438
463
  def self.from_a(filename, line, col, name, type, directives, selections)
439
464
  self.new(filename: filename, line: line, col: col, name: name, type: type, directives: directives, selections: selections)
440
465
  end
466
+
467
+ def marshal_dump
468
+ [line, col, @filename, @name, @type, @directives, @selections]
469
+ end
470
+
471
+ def marshal_load(values)
472
+ @line, @col, @filename, @name, @type, @directives, @selections = values
473
+ end
474
+
475
+ scalar_methods :name, :type
476
+ children_methods({
477
+ selections: GraphQL::Language::Nodes::Field,
478
+ directives: GraphQL::Language::Nodes::Directive,
479
+ })
480
+
481
+ self.children_method_name = :definitions
441
482
  end
442
483
 
443
484
  # Application of a named fragment in a selection
@@ -609,7 +650,7 @@ module GraphQL
609
650
  end
610
651
 
611
652
  class ScalarTypeDefinition < AbstractNode
612
- attr_reader :description
653
+ attr_reader :description, :comment
613
654
  scalar_methods :name
614
655
  children_methods({
615
656
  directives: GraphQL::Language::Nodes::Directive,
@@ -626,7 +667,7 @@ module GraphQL
626
667
  end
627
668
 
628
669
  class InputValueDefinition < AbstractNode
629
- attr_reader :description
670
+ attr_reader :description, :comment
630
671
  scalar_methods :name, :type, :default_value
631
672
  children_methods({
632
673
  directives: GraphQL::Language::Nodes::Directive,
@@ -635,7 +676,7 @@ module GraphQL
635
676
  end
636
677
 
637
678
  class FieldDefinition < AbstractNode
638
- attr_reader :description
679
+ attr_reader :description, :comment
639
680
  scalar_methods :name, :type
640
681
  children_methods({
641
682
  arguments: GraphQL::Language::Nodes::InputValueDefinition,
@@ -655,7 +696,7 @@ module GraphQL
655
696
  end
656
697
 
657
698
  class ObjectTypeDefinition < AbstractNode
658
- attr_reader :description
699
+ attr_reader :description, :comment
659
700
  scalar_methods :name, :interfaces
660
701
  children_methods({
661
702
  directives: GraphQL::Language::Nodes::Directive,
@@ -674,7 +715,7 @@ module GraphQL
674
715
  end
675
716
 
676
717
  class InterfaceTypeDefinition < AbstractNode
677
- attr_reader :description
718
+ attr_reader :description, :comment
678
719
  scalar_methods :name
679
720
  children_methods({
680
721
  interfaces: GraphQL::Language::Nodes::TypeName,
@@ -695,7 +736,7 @@ module GraphQL
695
736
  end
696
737
 
697
738
  class UnionTypeDefinition < AbstractNode
698
- attr_reader :description, :types
739
+ attr_reader :description, :comment, :types
699
740
  scalar_methods :name
700
741
  children_methods({
701
742
  directives: GraphQL::Language::Nodes::Directive,
@@ -713,7 +754,7 @@ module GraphQL
713
754
  end
714
755
 
715
756
  class EnumValueDefinition < AbstractNode
716
- attr_reader :description
757
+ attr_reader :description, :comment
717
758
  scalar_methods :name
718
759
  children_methods({
719
760
  directives: GraphQL::Language::Nodes::Directive,
@@ -722,7 +763,7 @@ module GraphQL
722
763
  end
723
764
 
724
765
  class EnumTypeDefinition < AbstractNode
725
- attr_reader :description
766
+ attr_reader :description, :comment
726
767
  scalar_methods :name
727
768
  children_methods({
728
769
  directives: GraphQL::Language::Nodes::Directive,
@@ -741,7 +782,7 @@ module GraphQL
741
782
  end
742
783
 
743
784
  class InputObjectTypeDefinition < AbstractNode
744
- attr_reader :description
785
+ attr_reader :description, :comment
745
786
  scalar_methods :name
746
787
  children_methods({
747
788
  directives: GraphQL::Language::Nodes::Directive,