graphql 1.10.2 → 2.0.21

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.

Potentially problematic release.


This version of graphql might be problematic. Click here for more details.

Files changed (402) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/core.rb +21 -10
  3. data/lib/generators/graphql/enum_generator.rb +4 -10
  4. data/lib/generators/graphql/field_extractor.rb +31 -0
  5. data/lib/generators/graphql/input_generator.rb +50 -0
  6. data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
  7. data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
  8. data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
  9. data/lib/generators/graphql/install_generator.rb +45 -8
  10. data/lib/generators/graphql/interface_generator.rb +7 -7
  11. data/lib/generators/graphql/loader_generator.rb +1 -0
  12. data/lib/generators/graphql/mutation_create_generator.rb +22 -0
  13. data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
  14. data/lib/generators/graphql/mutation_generator.rb +6 -30
  15. data/lib/generators/graphql/mutation_update_generator.rb +22 -0
  16. data/lib/generators/graphql/object_generator.rb +28 -12
  17. data/lib/generators/graphql/orm_mutations_base.rb +40 -0
  18. data/lib/generators/graphql/relay.rb +49 -0
  19. data/lib/generators/graphql/relay_generator.rb +21 -0
  20. data/lib/generators/graphql/scalar_generator.rb +4 -2
  21. data/lib/generators/graphql/templates/base_argument.erb +2 -0
  22. data/lib/generators/graphql/templates/base_connection.erb +8 -0
  23. data/lib/generators/graphql/templates/base_edge.erb +8 -0
  24. data/lib/generators/graphql/templates/base_enum.erb +2 -0
  25. data/lib/generators/graphql/templates/base_field.erb +2 -0
  26. data/lib/generators/graphql/templates/base_input_object.erb +2 -0
  27. data/lib/generators/graphql/templates/base_interface.erb +2 -0
  28. data/lib/generators/graphql/templates/base_object.erb +2 -0
  29. data/lib/generators/graphql/templates/base_scalar.erb +2 -0
  30. data/lib/generators/graphql/templates/base_union.erb +2 -0
  31. data/lib/generators/graphql/templates/enum.erb +7 -1
  32. data/lib/generators/graphql/templates/graphql_controller.erb +16 -12
  33. data/lib/generators/graphql/templates/input.erb +9 -0
  34. data/lib/generators/graphql/templates/interface.erb +6 -2
  35. data/lib/generators/graphql/templates/loader.erb +2 -0
  36. data/lib/generators/graphql/templates/mutation.erb +3 -1
  37. data/lib/generators/graphql/templates/mutation_create.erb +20 -0
  38. data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
  39. data/lib/generators/graphql/templates/mutation_update.erb +21 -0
  40. data/lib/generators/graphql/templates/node_type.erb +9 -0
  41. data/lib/generators/graphql/templates/object.erb +7 -3
  42. data/lib/generators/graphql/templates/query_type.erb +3 -3
  43. data/lib/generators/graphql/templates/scalar.erb +5 -1
  44. data/lib/generators/graphql/templates/schema.erb +24 -33
  45. data/lib/generators/graphql/templates/union.erb +6 -2
  46. data/lib/generators/graphql/type_generator.rb +47 -10
  47. data/lib/generators/graphql/union_generator.rb +5 -5
  48. data/lib/graphql/analysis/ast/field_usage.rb +30 -1
  49. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
  50. data/lib/graphql/analysis/ast/query_complexity.rb +125 -117
  51. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  52. data/lib/graphql/analysis/ast/visitor.rb +52 -36
  53. data/lib/graphql/analysis/ast.rb +7 -8
  54. data/lib/graphql/analysis.rb +0 -7
  55. data/lib/graphql/backtrace/inspect_result.rb +0 -1
  56. data/lib/graphql/backtrace/table.rb +31 -18
  57. data/lib/graphql/backtrace/trace.rb +96 -0
  58. data/lib/graphql/backtrace/traced_error.rb +0 -1
  59. data/lib/graphql/backtrace/tracer.rb +39 -9
  60. data/lib/graphql/backtrace.rb +26 -18
  61. data/lib/graphql/dataloader/null_dataloader.rb +24 -0
  62. data/lib/graphql/dataloader/request.rb +19 -0
  63. data/lib/graphql/dataloader/request_all.rb +19 -0
  64. data/lib/graphql/dataloader/source.rb +164 -0
  65. data/lib/graphql/dataloader.rb +311 -0
  66. data/lib/graphql/date_encoding_error.rb +16 -0
  67. data/lib/graphql/deprecation.rb +9 -0
  68. data/lib/graphql/dig.rb +1 -1
  69. data/lib/graphql/execution/errors.rb +77 -44
  70. data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
  71. data/lib/graphql/execution/interpreter/arguments.rb +88 -0
  72. data/lib/graphql/execution/interpreter/arguments_cache.rb +104 -0
  73. data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
  74. data/lib/graphql/execution/interpreter/resolve.rb +62 -24
  75. data/lib/graphql/execution/interpreter/runtime.rb +826 -464
  76. data/lib/graphql/execution/interpreter.rb +206 -68
  77. data/lib/graphql/execution/lazy.rb +11 -21
  78. data/lib/graphql/execution/lookahead.rb +55 -136
  79. data/lib/graphql/execution/multiplex.rb +6 -162
  80. data/lib/graphql/execution.rb +11 -4
  81. data/lib/graphql/filter.rb +7 -2
  82. data/lib/graphql/integer_decoding_error.rb +17 -0
  83. data/lib/graphql/integer_encoding_error.rb +18 -2
  84. data/lib/graphql/introspection/directive_location_enum.rb +2 -2
  85. data/lib/graphql/introspection/directive_type.rb +11 -5
  86. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  87. data/lib/graphql/introspection/entry_points.rb +4 -17
  88. data/lib/graphql/introspection/enum_value_type.rb +2 -2
  89. data/lib/graphql/introspection/field_type.rb +9 -5
  90. data/lib/graphql/introspection/input_value_type.rb +15 -3
  91. data/lib/graphql/introspection/introspection_query.rb +6 -92
  92. data/lib/graphql/introspection/schema_type.rb +11 -6
  93. data/lib/graphql/introspection/type_type.rb +31 -14
  94. data/lib/graphql/introspection.rb +100 -0
  95. data/lib/graphql/invalid_null_error.rb +18 -0
  96. data/lib/graphql/language/block_string.rb +20 -5
  97. data/lib/graphql/language/cache.rb +37 -0
  98. data/lib/graphql/language/document_from_schema_definition.rb +96 -44
  99. data/lib/graphql/language/lexer.rb +216 -1462
  100. data/lib/graphql/language/nodes.rb +126 -129
  101. data/lib/graphql/language/parser.rb +997 -933
  102. data/lib/graphql/language/parser.y +148 -118
  103. data/lib/graphql/language/printer.rb +48 -23
  104. data/lib/graphql/language/sanitized_printer.rb +222 -0
  105. data/lib/graphql/language/token.rb +0 -4
  106. data/lib/graphql/language/visitor.rb +192 -84
  107. data/lib/graphql/language.rb +2 -0
  108. data/lib/graphql/name_validator.rb +2 -7
  109. data/lib/graphql/pagination/active_record_relation_connection.rb +45 -3
  110. data/lib/graphql/pagination/array_connection.rb +6 -4
  111. data/lib/graphql/pagination/connection.rb +105 -23
  112. data/lib/graphql/pagination/connections.rb +62 -35
  113. data/lib/graphql/pagination/relation_connection.rb +88 -36
  114. data/lib/graphql/parse_error.rb +0 -1
  115. data/lib/graphql/query/context.rb +203 -198
  116. data/lib/graphql/query/fingerprint.rb +26 -0
  117. data/lib/graphql/query/input_validation_result.rb +33 -7
  118. data/lib/graphql/query/null_context.rb +22 -9
  119. data/lib/graphql/query/validation_pipeline.rb +16 -38
  120. data/lib/graphql/query/variable_validation_error.rb +3 -3
  121. data/lib/graphql/query/variables.rb +36 -12
  122. data/lib/graphql/query.rb +92 -44
  123. data/lib/graphql/railtie.rb +6 -102
  124. data/lib/graphql/rake_task/validate.rb +1 -1
  125. data/lib/graphql/rake_task.rb +41 -10
  126. data/lib/graphql/relay/range_add.rb +17 -10
  127. data/lib/graphql/relay.rb +0 -15
  128. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  129. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  130. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  131. data/lib/graphql/rubocop.rb +4 -0
  132. data/lib/graphql/schema/addition.rb +245 -0
  133. data/lib/graphql/schema/argument.rb +250 -46
  134. data/lib/graphql/schema/base_64_encoder.rb +2 -0
  135. data/lib/graphql/schema/build_from_definition/resolve_map.rb +3 -1
  136. data/lib/graphql/schema/build_from_definition.rb +243 -89
  137. data/lib/graphql/schema/directive/deprecated.rb +1 -1
  138. data/lib/graphql/schema/directive/feature.rb +1 -1
  139. data/lib/graphql/schema/directive/flagged.rb +57 -0
  140. data/lib/graphql/schema/directive/include.rb +1 -1
  141. data/lib/graphql/schema/directive/one_of.rb +12 -0
  142. data/lib/graphql/schema/directive/skip.rb +1 -1
  143. data/lib/graphql/schema/directive/transform.rb +14 -2
  144. data/lib/graphql/schema/directive.rb +108 -20
  145. data/lib/graphql/schema/enum.rb +105 -44
  146. data/lib/graphql/schema/enum_value.rb +15 -25
  147. data/lib/graphql/schema/field/connection_extension.rb +50 -30
  148. data/lib/graphql/schema/field/scope_extension.rb +1 -1
  149. data/lib/graphql/schema/field.rb +476 -331
  150. data/lib/graphql/schema/field_extension.rb +86 -2
  151. data/lib/graphql/schema/find_inherited_value.rb +6 -8
  152. data/lib/graphql/schema/finder.rb +5 -5
  153. data/lib/graphql/schema/input_object.rb +133 -121
  154. data/lib/graphql/schema/interface.rb +17 -45
  155. data/lib/graphql/schema/introspection_system.rb +3 -8
  156. data/lib/graphql/schema/late_bound_type.rb +8 -2
  157. data/lib/graphql/schema/list.rb +25 -8
  158. data/lib/graphql/schema/loader.rb +139 -103
  159. data/lib/graphql/schema/member/base_dsl_methods.rb +29 -35
  160. data/lib/graphql/schema/member/build_type.rb +19 -14
  161. data/lib/graphql/schema/member/has_arguments.rb +310 -26
  162. data/lib/graphql/schema/member/has_ast_node.rb +16 -1
  163. data/lib/graphql/schema/member/has_deprecation_reason.rb +24 -0
  164. data/lib/graphql/schema/member/has_directives.rb +118 -0
  165. data/lib/graphql/schema/member/has_fields.rb +164 -42
  166. data/lib/graphql/schema/member/has_interfaces.rb +129 -0
  167. data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
  168. data/lib/graphql/schema/member/has_validators.rb +57 -0
  169. data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
  170. data/lib/graphql/schema/member/type_system_helpers.rb +20 -3
  171. data/lib/graphql/schema/member/validates_input.rb +3 -3
  172. data/lib/graphql/schema/member.rb +6 -6
  173. data/lib/graphql/schema/mutation.rb +4 -9
  174. data/lib/graphql/schema/non_null.rb +12 -7
  175. data/lib/graphql/schema/object.rb +35 -69
  176. data/lib/graphql/schema/printer.rb +16 -34
  177. data/lib/graphql/schema/relay_classic_mutation.rb +90 -43
  178. data/lib/graphql/schema/resolver/has_payload_type.rb +51 -11
  179. data/lib/graphql/schema/resolver.rb +144 -79
  180. data/lib/graphql/schema/scalar.rb +27 -18
  181. data/lib/graphql/schema/subscription.rb +55 -26
  182. data/lib/graphql/schema/timeout.rb +45 -35
  183. data/lib/graphql/schema/type_expression.rb +1 -1
  184. data/lib/graphql/schema/type_membership.rb +21 -4
  185. data/lib/graphql/schema/union.rb +48 -13
  186. data/lib/graphql/schema/unique_within_type.rb +1 -2
  187. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  188. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  189. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  190. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  191. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  192. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  193. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  194. data/lib/graphql/schema/validator/required_validator.rb +82 -0
  195. data/lib/graphql/schema/validator.rb +171 -0
  196. data/lib/graphql/schema/warden.rb +185 -32
  197. data/lib/graphql/schema/wrapper.rb +0 -5
  198. data/lib/graphql/schema.rb +471 -1116
  199. data/lib/graphql/static_validation/all_rules.rb +3 -0
  200. data/lib/graphql/static_validation/base_visitor.rb +13 -27
  201. data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
  202. data/lib/graphql/static_validation/error.rb +3 -1
  203. data/lib/graphql/static_validation/literal_validator.rb +69 -26
  204. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +44 -87
  205. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
  206. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +28 -22
  207. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
  208. data/lib/graphql/static_validation/rules/directives_are_defined.rb +12 -6
  209. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
  210. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
  211. data/lib/graphql/static_validation/rules/fields_will_merge.rb +92 -49
  212. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  213. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  214. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  215. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  216. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  217. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  218. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  219. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  220. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
  221. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +6 -7
  222. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
  223. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +9 -10
  224. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +14 -8
  225. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +4 -2
  226. data/lib/graphql/static_validation/validation_context.rb +13 -3
  227. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  228. data/lib/graphql/static_validation/validator.rb +32 -20
  229. data/lib/graphql/static_validation.rb +1 -2
  230. data/lib/graphql/string_encoding_error.rb +13 -3
  231. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +126 -19
  232. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  233. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
  234. data/lib/graphql/subscriptions/event.rb +81 -35
  235. data/lib/graphql/subscriptions/instrumentation.rb +0 -52
  236. data/lib/graphql/subscriptions/serialize.rb +53 -6
  237. data/lib/graphql/subscriptions.rb +113 -58
  238. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  239. data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -21
  240. data/lib/graphql/tracing/appoptics_trace.rb +231 -0
  241. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  242. data/lib/graphql/tracing/appsignal_trace.rb +77 -0
  243. data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
  244. data/lib/graphql/tracing/data_dog_trace.rb +148 -0
  245. data/lib/graphql/tracing/data_dog_tracing.rb +26 -2
  246. data/lib/graphql/tracing/legacy_trace.rb +65 -0
  247. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  248. data/lib/graphql/tracing/new_relic_tracing.rb +1 -12
  249. data/lib/graphql/tracing/notifications_trace.rb +42 -0
  250. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  251. data/lib/graphql/tracing/platform_trace.rb +109 -0
  252. data/lib/graphql/tracing/platform_tracing.rb +64 -43
  253. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  254. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +5 -2
  255. data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
  256. data/lib/graphql/tracing/scout_trace.rb +72 -0
  257. data/lib/graphql/tracing/scout_tracing.rb +11 -0
  258. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  259. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  260. data/lib/graphql/tracing/trace.rb +75 -0
  261. data/lib/graphql/tracing.rb +23 -71
  262. data/lib/graphql/type_kinds.rb +6 -3
  263. data/lib/graphql/types/big_int.rb +5 -1
  264. data/lib/graphql/types/int.rb +10 -3
  265. data/lib/graphql/types/iso_8601_date.rb +20 -9
  266. data/lib/graphql/types/iso_8601_date_time.rb +36 -10
  267. data/lib/graphql/types/relay/base_connection.rb +18 -92
  268. data/lib/graphql/types/relay/base_edge.rb +2 -34
  269. data/lib/graphql/types/relay/connection_behaviors.rb +176 -0
  270. data/lib/graphql/types/relay/edge_behaviors.rb +75 -0
  271. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  272. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  273. data/lib/graphql/types/relay/node.rb +2 -4
  274. data/lib/graphql/types/relay/node_behaviors.rb +25 -0
  275. data/lib/graphql/types/relay/page_info.rb +2 -14
  276. data/lib/graphql/types/relay/page_info_behaviors.rb +30 -0
  277. data/lib/graphql/types/relay.rb +10 -5
  278. data/lib/graphql/types/string.rb +8 -2
  279. data/lib/graphql/unauthorized_error.rb +2 -2
  280. data/lib/graphql/version.rb +1 -1
  281. data/lib/graphql.rb +54 -65
  282. data/readme.md +3 -6
  283. metadata +116 -236
  284. data/lib/graphql/analysis/analyze_query.rb +0 -91
  285. data/lib/graphql/analysis/field_usage.rb +0 -45
  286. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  287. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  288. data/lib/graphql/analysis/query_complexity.rb +0 -88
  289. data/lib/graphql/analysis/query_depth.rb +0 -43
  290. data/lib/graphql/analysis/reducer_state.rb +0 -48
  291. data/lib/graphql/argument.rb +0 -131
  292. data/lib/graphql/authorization.rb +0 -82
  293. data/lib/graphql/backwards_compatibility.rb +0 -60
  294. data/lib/graphql/base_type.rb +0 -230
  295. data/lib/graphql/boolean_type.rb +0 -2
  296. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  297. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  298. data/lib/graphql/compatibility/execution_specification.rb +0 -435
  299. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  300. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
  301. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  302. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  303. data/lib/graphql/compatibility/query_parser_specification.rb +0 -264
  304. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
  305. data/lib/graphql/compatibility.rb +0 -5
  306. data/lib/graphql/define/assign_argument.rb +0 -12
  307. data/lib/graphql/define/assign_connection.rb +0 -13
  308. data/lib/graphql/define/assign_enum_value.rb +0 -18
  309. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  310. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  311. data/lib/graphql/define/assign_object_field.rb +0 -42
  312. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  313. data/lib/graphql/define/instance_definable.rb +0 -210
  314. data/lib/graphql/define/no_definition_error.rb +0 -7
  315. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  316. data/lib/graphql/define/type_definer.rb +0 -31
  317. data/lib/graphql/define.rb +0 -31
  318. data/lib/graphql/deprecated_dsl.rb +0 -42
  319. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  320. data/lib/graphql/directive/include_directive.rb +0 -2
  321. data/lib/graphql/directive/skip_directive.rb +0 -2
  322. data/lib/graphql/directive.rb +0 -107
  323. data/lib/graphql/enum_type.rb +0 -127
  324. data/lib/graphql/execution/execute.rb +0 -326
  325. data/lib/graphql/execution/flatten.rb +0 -40
  326. data/lib/graphql/execution/instrumentation.rb +0 -92
  327. data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
  328. data/lib/graphql/execution/lazy/resolve.rb +0 -91
  329. data/lib/graphql/execution/typecast.rb +0 -50
  330. data/lib/graphql/field/resolve.rb +0 -59
  331. data/lib/graphql/field.rb +0 -222
  332. data/lib/graphql/float_type.rb +0 -2
  333. data/lib/graphql/function.rb +0 -124
  334. data/lib/graphql/id_type.rb +0 -2
  335. data/lib/graphql/input_object_type.rb +0 -132
  336. data/lib/graphql/int_type.rb +0 -2
  337. data/lib/graphql/interface_type.rb +0 -65
  338. data/lib/graphql/internal_representation/document.rb +0 -27
  339. data/lib/graphql/internal_representation/node.rb +0 -206
  340. data/lib/graphql/internal_representation/print.rb +0 -51
  341. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  342. data/lib/graphql/internal_representation/scope.rb +0 -88
  343. data/lib/graphql/internal_representation/visit.rb +0 -36
  344. data/lib/graphql/internal_representation.rb +0 -7
  345. data/lib/graphql/language/lexer.rl +0 -258
  346. data/lib/graphql/list_type.rb +0 -80
  347. data/lib/graphql/literal_validation_error.rb +0 -6
  348. data/lib/graphql/non_null_type.rb +0 -71
  349. data/lib/graphql/object_type.rb +0 -121
  350. data/lib/graphql/query/arguments.rb +0 -188
  351. data/lib/graphql/query/arguments_cache.rb +0 -25
  352. data/lib/graphql/query/executor.rb +0 -53
  353. data/lib/graphql/query/literal_input.rb +0 -136
  354. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  355. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  356. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  357. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  358. data/lib/graphql/query/serial_execution.rb +0 -39
  359. data/lib/graphql/relay/array_connection.rb +0 -85
  360. data/lib/graphql/relay/base_connection.rb +0 -176
  361. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  362. data/lib/graphql/relay/connection_resolve.rb +0 -43
  363. data/lib/graphql/relay/connection_type.rb +0 -41
  364. data/lib/graphql/relay/edge.rb +0 -27
  365. data/lib/graphql/relay/edge_type.rb +0 -19
  366. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  367. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  368. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  369. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  370. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  371. data/lib/graphql/relay/mutation/result.rb +0 -38
  372. data/lib/graphql/relay/mutation.rb +0 -105
  373. data/lib/graphql/relay/node.rb +0 -36
  374. data/lib/graphql/relay/page_info.rb +0 -7
  375. data/lib/graphql/relay/relation_connection.rb +0 -190
  376. data/lib/graphql/relay/type_extensions.rb +0 -30
  377. data/lib/graphql/scalar_type.rb +0 -76
  378. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  379. data/lib/graphql/schema/default_parse_error.rb +0 -10
  380. data/lib/graphql/schema/default_type_error.rb +0 -15
  381. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  382. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
  383. data/lib/graphql/schema/member/instrumentation.rb +0 -132
  384. data/lib/graphql/schema/middleware_chain.rb +0 -82
  385. data/lib/graphql/schema/possible_types.rb +0 -39
  386. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  387. data/lib/graphql/schema/timeout_middleware.rb +0 -86
  388. data/lib/graphql/schema/traversal.rb +0 -228
  389. data/lib/graphql/schema/validation.rb +0 -303
  390. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  391. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  392. data/lib/graphql/string_type.rb +0 -2
  393. data/lib/graphql/subscriptions/subscription_root.rb +0 -65
  394. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  395. data/lib/graphql/types/relay/base_field.rb +0 -22
  396. data/lib/graphql/types/relay/base_interface.rb +0 -29
  397. data/lib/graphql/types/relay/base_object.rb +0 -26
  398. data/lib/graphql/types/relay/node_field.rb +0 -43
  399. data/lib/graphql/types/relay/nodes_field.rb +0 -45
  400. data/lib/graphql/union_type.rb +0 -113
  401. data/lib/graphql/upgrader/member.rb +0 -936
  402. data/lib/graphql/upgrader/schema.rb +0 -37
@@ -1,55 +1,14 @@
1
1
  # frozen_string_literal: true
2
- # test_via: ../execution/execute.rb
3
- # test_via: ../execution/lazy.rb
4
2
  module GraphQL
5
3
  class Query
6
4
  # Expose some query-specific info to field resolve functions.
7
5
  # It delegates `[]` to the hash that's passed to `GraphQL::Query#initialize`.
8
6
  class Context
9
7
  module SharedMethods
10
- # @return [Object] The target for field resolution
11
- attr_accessor :object
12
-
13
- # @return [Hash, Array, String, Integer, Float, Boolean, nil] The resolved value for this field
14
- attr_reader :value
15
-
16
- # @return [Boolean] were any fields of this selection skipped?
17
- attr_reader :skipped
18
- alias :skipped? :skipped
19
-
20
- # @api private
21
- attr_writer :skipped
22
-
23
8
  # Return this value to tell the runtime
24
9
  # to exclude this field from the response altogether
25
10
  def skip
26
- GraphQL::Execution::Execute::SKIP
27
- end
28
-
29
- # @return [Boolean] True if this selection has been nullified by a null child
30
- def invalid_null?
31
- @invalid_null
32
- end
33
-
34
- # Remove this child from the result value
35
- # (used for null propagation and skip)
36
- # @api private
37
- def delete(child_ctx)
38
- @value.delete(child_ctx.key)
39
- end
40
-
41
- # Create a child context to use for `key`
42
- # @param key [String, Integer] The key in the response (name or index)
43
- # @param irep_node [InternalRepresentation::Node] The node being evaluated
44
- # @api private
45
- def spawn_child(key:, irep_node:, object:)
46
- FieldResolutionContext.new(
47
- @context,
48
- key,
49
- irep_node,
50
- self,
51
- object
52
- )
11
+ GraphQL::Execution::SKIP
53
12
  end
54
13
 
55
14
  # Add error at query-level.
@@ -74,12 +33,6 @@ module GraphQL
74
33
  def execution_errors
75
34
  @execution_errors ||= ExecutionErrors.new(self)
76
35
  end
77
-
78
- def lookahead
79
- ast_nodes = irep_node.ast_nodes
80
- field = irep_node.definition.metadata[:type_class] || raise("Lookahead is only compatible with class-based schemas")
81
- Execution::Lookahead.new(query: query, ast_nodes: ast_nodes, field: field)
82
- end
83
36
  end
84
37
 
85
38
  class ExecutionErrors
@@ -107,27 +60,6 @@ module GraphQL
107
60
  include SharedMethods
108
61
  extend Forwardable
109
62
 
110
- attr_reader :execution_strategy
111
- # `strategy` is required by GraphQL::Batch
112
- alias_method :strategy, :execution_strategy
113
-
114
- def execution_strategy=(new_strategy)
115
- # GraphQL::Batch re-assigns this value but it was previously not used
116
- # (ExecutionContext#strategy was used instead)
117
- # now it _is_ used, but it breaks GraphQL::Batch tests
118
- @execution_strategy ||= new_strategy
119
- end
120
-
121
- # @return [GraphQL::InternalRepresentation::Node] The internal representation for this query node
122
- def irep_node
123
- @irep_node ||= query.irep_selection
124
- end
125
-
126
- # @return [GraphQL::Language::Nodes::Field] The AST node for the currently-executing field
127
- def ast_node
128
- @irep_node.ast_node
129
- end
130
-
131
63
  # @return [Array<GraphQL::ExecutionError>] errors returned during execution
132
64
  attr_reader :errors
133
65
 
@@ -154,8 +86,115 @@ module GraphQL
154
86
  @errors = []
155
87
  @path = []
156
88
  @value = nil
157
- @context = self # for SharedMethods
158
- @scoped_context = {}
89
+ @context = self # for SharedMethods TODO delete sharedmethods
90
+ @scoped_context = ScopedContext.new(self)
91
+ end
92
+
93
+ class ScopedContext
94
+ NO_PATH = GraphQL::EmptyObjects::EMPTY_ARRAY
95
+ NO_CONTEXT = GraphQL::EmptyObjects::EMPTY_HASH
96
+
97
+ def initialize(query_context)
98
+ @query_context = query_context
99
+ @scoped_contexts = nil
100
+ @all_keys = nil
101
+ end
102
+
103
+ def merged_context
104
+ if @scoped_contexts.nil?
105
+ NO_CONTEXT
106
+ else
107
+ merged_ctx = {}
108
+ each_present_path_ctx do |path_ctx|
109
+ merged_ctx = path_ctx.merge(merged_ctx)
110
+ end
111
+ merged_ctx
112
+ end
113
+ end
114
+
115
+ def merge!(hash)
116
+ @all_keys ||= Set.new
117
+ @all_keys.merge(hash.keys)
118
+ ctx = @scoped_contexts ||= {}
119
+ current_path.each do |path_part|
120
+ ctx = ctx[path_part] ||= { parent: ctx }
121
+ end
122
+ this_scoped_ctx = ctx[:scoped_context] ||= {}
123
+ this_scoped_ctx.merge!(hash)
124
+ end
125
+
126
+ def key?(key)
127
+ if @all_keys && @all_keys.include?(key)
128
+ each_present_path_ctx do |path_ctx|
129
+ if path_ctx.key?(key)
130
+ return true
131
+ end
132
+ end
133
+ end
134
+ false
135
+ end
136
+
137
+ def [](key)
138
+ each_present_path_ctx do |path_ctx|
139
+ if path_ctx.key?(key)
140
+ return path_ctx[key]
141
+ end
142
+ end
143
+ nil
144
+ end
145
+
146
+ def current_path
147
+ @query_context.current_path || NO_PATH
148
+ end
149
+
150
+ def dig(key, *other_keys)
151
+ each_present_path_ctx do |path_ctx|
152
+ if path_ctx.key?(key)
153
+ found_value = path_ctx[key]
154
+ if other_keys.any?
155
+ return found_value.dig(*other_keys)
156
+ else
157
+ return found_value
158
+ end
159
+ end
160
+ end
161
+ nil
162
+ end
163
+
164
+ private
165
+
166
+ # Start at the current location,
167
+ # but look up the tree for previously-assigned scoped values
168
+ def each_present_path_ctx
169
+ ctx = @scoped_contexts
170
+ if ctx.nil?
171
+ # no-op
172
+ else
173
+ current_path.each do |path_part|
174
+ if ctx.key?(path_part)
175
+ ctx = ctx[path_part]
176
+ else
177
+ break
178
+ end
179
+ end
180
+
181
+ while ctx
182
+ if (scoped_ctx = ctx[:scoped_context])
183
+ yield(scoped_ctx)
184
+ end
185
+ ctx = ctx[:parent]
186
+ end
187
+ end
188
+ end
189
+ end
190
+
191
+ # @return [Hash] A hash that will be added verbatim to the result hash, as `"extensions" => { ... }`
192
+ def response_extensions
193
+ namespace(:__query_result_extensions__)
194
+ end
195
+
196
+ def dataloader
197
+ @dataloader ||= self[:dataloader] || (query.multiplex ? query.multiplex.dataloader : schema.dataloader_class.new)
159
198
  end
160
199
 
161
200
  # @api private
@@ -165,24 +204,96 @@ module GraphQL
165
204
  attr_writer :value
166
205
 
167
206
  # @api private
168
- attr_accessor :scoped_context
207
+ attr_reader :scoped_context
208
+
209
+ def []=(key, value)
210
+ @provided_values[key] = value
211
+ end
169
212
 
170
- def_delegators :@provided_values, :[]=
171
- def_delegators :to_h, :fetch, :dig
172
213
  def_delegators :@query, :trace, :interpreter?
173
214
 
215
+ RUNTIME_METADATA_KEYS = Set.new([:current_object, :current_arguments, :current_field, :current_path])
174
216
  # @!method []=(key, value)
175
217
  # Reassign `key` to the hash passed to {Schema#execute} as `context:`
176
218
 
177
219
  # Lookup `key` from the hash passed to {Schema#execute} as `context:`
178
220
  def [](key)
179
- return @scoped_context[key] if @scoped_context.key?(key)
180
- @provided_values[key]
221
+ if @scoped_context.key?(key)
222
+ @scoped_context[key]
223
+ elsif @provided_values.key?(key)
224
+ @provided_values[key]
225
+ elsif RUNTIME_METADATA_KEYS.include?(key)
226
+ if key == :current_path
227
+ current_path
228
+ else
229
+ (current_runtime_state = Thread.current[:__graphql_runtime_info]) &&
230
+ (current_runtime_state.public_send(key))
231
+ end
232
+ else
233
+ # not found
234
+ nil
235
+ end
236
+ end
237
+
238
+ def current_path
239
+ current_runtime_state = Thread.current[:__graphql_runtime_info]
240
+ path = current_runtime_state &&
241
+ (result = current_runtime_state.current_result) &&
242
+ (result.path)
243
+ if path && (rn = current_runtime_state.current_result_name)
244
+ path = path.dup
245
+ path.push(rn)
246
+ end
247
+ path
248
+ end
249
+
250
+ def delete(key)
251
+ if @scoped_context.key?(key)
252
+ @scoped_context.delete(key)
253
+ else
254
+ @provided_values.delete(key)
255
+ end
256
+ end
257
+
258
+ UNSPECIFIED_FETCH_DEFAULT = Object.new
259
+
260
+ def fetch(key, default = UNSPECIFIED_FETCH_DEFAULT)
261
+ if RUNTIME_METADATA_KEYS.include?(key)
262
+ (runtime = Thread.current[:__graphql_runtime_info]) &&
263
+ (runtime.public_send(key))
264
+ elsif @scoped_context.key?(key)
265
+ scoped_context[key]
266
+ elsif @provided_values.key?(key)
267
+ @provided_values[key]
268
+ elsif default != UNSPECIFIED_FETCH_DEFAULT
269
+ default
270
+ elsif block_given?
271
+ yield(self, key)
272
+ else
273
+ raise KeyError.new(key: key)
274
+ end
275
+ end
276
+
277
+ def dig(key, *other_keys)
278
+ if RUNTIME_METADATA_KEYS.include?(key)
279
+ (current_runtime_state = Thread.current[:__graphql_runtime_info]) &&
280
+ (obj = current_runtime_state.public_send(key)) &&
281
+ obj.dig(*other_keys)
282
+ elsif @scoped_context.key?(key)
283
+ @scoped_context.dig(key, *other_keys)
284
+ else
285
+ @provided_values.dig(key, *other_keys)
286
+ end
181
287
  end
182
288
 
183
289
  def to_h
184
- @provided_values.merge(@scoped_context)
290
+ if (current_scoped_context = @scoped_context.merged_context)
291
+ @provided_values.merge(current_scoped_context)
292
+ else
293
+ @provided_values
294
+ end
185
295
  end
296
+
186
297
  alias :to_hash :to_h
187
298
 
188
299
  def key?(key)
@@ -191,146 +302,40 @@ module GraphQL
191
302
 
192
303
  # @return [GraphQL::Schema::Warden]
193
304
  def warden
194
- @warden ||= @query.warden
305
+ @warden ||= (@query && @query.warden)
195
306
  end
196
307
 
308
+ # @api private
309
+ attr_writer :warden
310
+
197
311
  # Get an isolated hash for `ns`. Doesn't affect user-provided storage.
198
312
  # @param ns [Object] a usage-specific namespace identifier
199
313
  # @return [Hash] namespaced storage
200
314
  def namespace(ns)
201
- @storage[ns]
315
+ if ns == :interpreter
316
+ self
317
+ else
318
+ @storage[ns]
319
+ end
202
320
  end
203
321
 
204
- def inspect
205
- "#<Query::Context ...>"
322
+ # @return [Boolean] true if this namespace was accessed before
323
+ def namespace?(ns)
324
+ @storage.key?(ns)
206
325
  end
207
326
 
208
- # @api private
209
- def received_null_child
210
- @invalid_null = true
211
- @value = nil
327
+ def inspect
328
+ "#<Query::Context ...>"
212
329
  end
213
330
 
214
331
  def scoped_merge!(hash)
215
- @scoped_context = @scoped_context.merge(hash)
332
+ @scoped_context.merge!(hash)
216
333
  end
217
334
 
218
335
  def scoped_set!(key, value)
219
336
  scoped_merge!(key => value)
220
337
  nil
221
338
  end
222
-
223
- class FieldResolutionContext
224
- include SharedMethods
225
- include Tracing::Traceable
226
- extend Forwardable
227
-
228
- attr_reader :irep_node, :field, :parent_type, :query, :schema, :parent, :key, :type
229
- alias :selection :irep_node
230
-
231
- def initialize(context, key, irep_node, parent, object)
232
- @context = context
233
- @key = key
234
- @parent = parent
235
- @object = object
236
- @irep_node = irep_node
237
- @field = irep_node.definition
238
- @parent_type = irep_node.owner_type
239
- @type = field.type
240
- # This is needed constantly, so set it ahead of time:
241
- @query = context.query
242
- @schema = context.schema
243
- @tracers = @query.tracers
244
- # This hack flag is required by ConnectionResolve
245
- @wrapped_connection = false
246
- @wrapped_object = false
247
- end
248
-
249
- # @api private
250
- attr_accessor :wrapped_connection, :wrapped_object
251
-
252
- def path
253
- @path ||= @parent.path.dup << @key
254
- end
255
-
256
- def_delegators :@context,
257
- :[], :[]=, :key?, :fetch, :to_h, :namespace, :dig,
258
- :spawn, :warden, :errors,
259
- :execution_strategy, :strategy, :interpreter?
260
-
261
- # @return [GraphQL::Language::Nodes::Field] The AST node for the currently-executing field
262
- def ast_node
263
- @irep_node.ast_node
264
- end
265
-
266
- # Add error to current field resolution.
267
- # @param error [GraphQL::ExecutionError] an execution error
268
- # @return [void]
269
- def add_error(error)
270
- super
271
- error.ast_node ||= irep_node.ast_node
272
- error.path ||= path
273
- nil
274
- end
275
-
276
- def inspect
277
- "#<GraphQL Context @ #{irep_node.owner_type.name}.#{field.name}>"
278
- end
279
-
280
- # Set a new value for this field in the response.
281
- # It may be updated after resolving a {Lazy}.
282
- # If it is {Execute::PROPAGATE_NULL}, tell the owner to propagate null.
283
- # If it's {Execute::Execution::SKIP}, remove this field result from its parent
284
- # @param new_value [Any] The GraphQL-ready value
285
- # @api private
286
- def value=(new_value)
287
- case new_value
288
- when GraphQL::Execution::Execute::PROPAGATE_NULL, nil
289
- @invalid_null = true
290
- @value = nil
291
- if @type.kind.non_null?
292
- @parent.received_null_child
293
- end
294
- when GraphQL::Execution::Execute::SKIP
295
- @parent.skipped = true
296
- @parent.delete(self)
297
- else
298
- @value = new_value
299
- end
300
- end
301
-
302
- protected
303
-
304
- def received_null_child
305
- case @value
306
- when Hash
307
- self.value = GraphQL::Execution::Execute::PROPAGATE_NULL
308
- when Array
309
- if list_of_non_null_items?(@type)
310
- self.value = GraphQL::Execution::Execute::PROPAGATE_NULL
311
- end
312
- when nil
313
- # TODO This is a hack
314
- # It was already nulled out but it's getting reassigned
315
- else
316
- raise "Unexpected value for received_null_child (#{self.value.class}): #{value}"
317
- end
318
- end
319
-
320
- private
321
-
322
- def list_of_non_null_items?(type)
323
- case type
324
- when GraphQL::NonNullType
325
- # Unwrap [T]!
326
- list_of_non_null_items?(type.of_type)
327
- when GraphQL::ListType
328
- type.of_type.is_a?(GraphQL::NonNullType)
329
- else
330
- raise "Unexpected list_of_non_null_items check: #{type}"
331
- end
332
- end
333
- end
334
339
  end
335
340
  end
336
341
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest/sha2'
4
+
5
+ module GraphQL
6
+ class Query
7
+ # @api private
8
+ # @see Query#query_fingerprint
9
+ # @see Query#variables_fingerprint
10
+ # @see Query#fingerprint
11
+ module Fingerprint
12
+ # Make an obfuscated hash of the given string (either a query string or variables JSON)
13
+ # @param string [String]
14
+ # @return [String] A normalized, opaque hash
15
+ def self.generate(input_str)
16
+ # Implemented to be:
17
+ # - Short (and uniform) length
18
+ # - Stable
19
+ # - Irreversibly Opaque (don't want to leak variable values)
20
+ # - URL-friendly
21
+ bytes = Digest::SHA256.digest(input_str)
22
+ Base64.urlsafe_encode64(bytes)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -4,23 +4,49 @@ module GraphQL
4
4
  class InputValidationResult
5
5
  attr_accessor :problems
6
6
 
7
+ def self.from_problem(explanation, path = nil, extensions: nil, message: nil)
8
+ result = self.new
9
+ result.add_problem(explanation, path, extensions: extensions, message: message)
10
+ result
11
+ end
12
+
13
+ def initialize(valid: true, problems: nil)
14
+ @valid = valid
15
+ @problems = problems
16
+ end
17
+
7
18
  def valid?
8
- @problems.nil?
19
+ @valid
9
20
  end
10
21
 
11
- def add_problem(explanation, path = nil)
22
+ def add_problem(explanation, path = nil, extensions: nil, message: nil)
12
23
  @problems ||= []
13
- @problems.push({ "path" => path || [], "explanation" => explanation })
24
+ @valid = false
25
+ problem = { "path" => path || [], "explanation" => explanation }
26
+ if extensions
27
+ problem["extensions"] = extensions
28
+ end
29
+ if message
30
+ problem["message"] = message
31
+ end
32
+ @problems.push(problem)
14
33
  end
15
34
 
16
35
  def merge_result!(path, inner_result)
17
- return if inner_result.valid?
36
+ return if inner_result.nil? || inner_result.valid?
18
37
 
19
- inner_result.problems.each do |p|
20
- item_path = [path, *p["path"]]
21
- add_problem(p["explanation"], item_path)
38
+ if inner_result.problems
39
+ inner_result.problems.each do |p|
40
+ item_path = [path, *p["path"]]
41
+ add_problem(p["explanation"], item_path, message: p["message"], extensions: p["extensions"])
42
+ end
22
43
  end
44
+ # It could have been explicitly set on inner_result (if it had no problems)
45
+ @valid = false
23
46
  end
47
+
48
+ VALID = self.new
49
+ VALID.freeze
24
50
  end
25
51
  end
26
52
  end
@@ -4,18 +4,27 @@ module GraphQL
4
4
  # This object can be `ctx` in places where there is no query
5
5
  class NullContext
6
6
  class NullWarden < GraphQL::Schema::Warden
7
- def visible?(t); true; end
8
- def visible_field?(t); true; end
9
- def visible_type?(t); true; end
7
+ def visible_field?(field, ctx); true; end
8
+ def visible_argument?(arg, ctx); true; end
9
+ def visible_type?(type, ctx); true; end
10
+ def visible_enum_value?(ev, ctx); true; end
11
+ def visible_type_membership?(tm, ctx); true; end
10
12
  end
11
13
 
12
- attr_reader :schema, :query, :warden
14
+ class NullQuery
15
+ end
16
+
17
+ class NullSchema < GraphQL::Schema
18
+ end
19
+
20
+ attr_reader :schema, :query, :warden, :dataloader
13
21
 
14
22
  def initialize
15
- @query = nil
16
- @schema = GraphQL::Schema.new
23
+ @query = NullQuery.new
24
+ @dataloader = GraphQL::Dataloader::NullDataloader.new
25
+ @schema = NullSchema
17
26
  @warden = NullWarden.new(
18
- GraphQL::Filter.new,
27
+ GraphQL::Filter.new(silence_deprecation_warning: true),
19
28
  context: self,
20
29
  schema: @schema,
21
30
  )
@@ -23,16 +32,20 @@ module GraphQL
23
32
 
24
33
  def [](key); end
25
34
 
35
+ def interpreter?
36
+ true
37
+ end
38
+
26
39
  class << self
27
40
  extend Forwardable
28
41
 
29
42
  def [](key); end
30
43
 
31
44
  def instance
32
- @instance = self.new
45
+ @instance ||= self.new
33
46
  end
34
47
 
35
- def_delegators :instance, :query, :schema, :warden
48
+ def_delegators :instance, :query, :warden, :schema, :interpreter?, :dataloader
36
49
  end
37
50
  end
38
51
  end