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
@@ -16,10 +16,8 @@ module GraphQL
16
16
  class ValidationPipeline
17
17
  attr_reader :max_depth, :max_complexity
18
18
 
19
- def initialize(query:, validate:, parse_error:, operation_name_error:, max_depth:, max_complexity:)
19
+ def initialize(query:, parse_error:, operation_name_error:, max_depth:, max_complexity:)
20
20
  @validation_errors = []
21
- @internal_representation = nil
22
- @validate = validate
23
21
  @parse_error = parse_error
24
22
  @operation_name_error = operation_name_error
25
23
  @query = query
@@ -36,23 +34,21 @@ module GraphQL
36
34
  @valid
37
35
  end
38
36
 
39
- # @return [Array<GraphQL::StaticValidation::Error >] Static validation errors for the query string
37
+ # @return [Array<GraphQL::StaticValidation::Error, GraphQL::Query::VariableValidationError>] Static validation errors for the query string
40
38
  def validation_errors
41
39
  ensure_has_validated
42
40
  @validation_errors
43
41
  end
44
42
 
45
- # @return [Hash<String, nil => GraphQL::InternalRepresentation::Node] Operation name -> Irep node pairs
46
- def internal_representation
47
- ensure_has_validated
48
- @internal_representation
49
- end
50
-
51
43
  def analyzers
52
44
  ensure_has_validated
53
45
  @query_analyzers
54
46
  end
55
47
 
48
+ def has_validated?
49
+ @has_validated == true
50
+ end
51
+
56
52
  private
57
53
 
58
54
  # If the pipeline wasn't run yet, run it.
@@ -63,7 +59,7 @@ module GraphQL
63
59
 
64
60
  if @parse_error
65
61
  # This is kind of crazy: we push the parse error into `ctx`
66
- # in {DefaultParseError} so that users can _opt out_ by redefining that hook.
62
+ # in `def self.parse_error` by default so that users can _opt out_ by redefining that hook.
67
63
  # That means we can't _re-add_ the error here (otherwise we'd either
68
64
  # add it twice _or_ override the user's choice to not add it).
69
65
  # So we just have to know that it was invalid and go from there.
@@ -72,9 +68,8 @@ module GraphQL
72
68
  elsif @operation_name_error
73
69
  @validation_errors << @operation_name_error
74
70
  else
75
- validation_result = @schema.static_validator.validate(@query, validate: @validate)
71
+ validation_result = @schema.static_validator.validate(@query, validate: @query.validate, timeout: @schema.validate_timeout, max_errors: @schema.validate_max_errors)
76
72
  @validation_errors.concat(validation_result[:errors])
77
- @internal_representation = validation_result[:irep]
78
73
 
79
74
  if @validation_errors.empty?
80
75
  @validation_errors.concat(@query.variables.errors)
@@ -90,6 +85,9 @@ module GraphQL
90
85
  end
91
86
 
92
87
  @valid = @validation_errors.empty?
88
+ rescue SystemStackError => err
89
+ @valid = false
90
+ @schema.query_stack_error(@query, err)
93
91
  end
94
92
 
95
93
  # If there are max_* values, add them,
@@ -97,35 +95,15 @@ module GraphQL
97
95
  def build_analyzers(schema, max_depth, max_complexity)
98
96
  qa = schema.query_analyzers.dup
99
97
 
100
- # Filter out the built in authorization analyzer.
101
- # It is deprecated and does not have an AST analyzer alternative.
102
- qa = qa.select do |analyzer|
103
- if analyzer == GraphQL::Authorization::Analyzer && schema.using_ast_analysis?
104
- raise "The Authorization analyzer is not supported with AST Analyzers"
105
- else
106
- true
107
- end
108
- end
109
-
110
98
  if max_depth || max_complexity
111
99
  # Depending on the analysis engine, we must use different analyzers
112
100
  # remove this once everything has switched over to AST analyzers
113
- if schema.using_ast_analysis?
114
- if max_depth
115
- qa << GraphQL::Analysis::AST::MaxQueryDepth
116
- end
117
- if max_complexity
118
- qa << GraphQL::Analysis::AST::MaxQueryComplexity
119
- end
120
- else
121
- if max_depth
122
- qa << GraphQL::Analysis::MaxQueryDepth.new(max_depth)
123
- end
124
- if max_complexity
125
- qa << GraphQL::Analysis::MaxQueryComplexity.new(max_complexity)
126
- end
101
+ if max_depth
102
+ qa << GraphQL::Analysis::AST::MaxQueryDepth
103
+ end
104
+ if max_complexity
105
+ qa << GraphQL::Analysis::AST::MaxQueryComplexity
127
106
  end
128
-
129
107
  qa
130
108
  else
131
109
  qa
@@ -4,11 +4,11 @@ module GraphQL
4
4
  class VariableValidationError < GraphQL::ExecutionError
5
5
  attr_accessor :value, :validation_result
6
6
 
7
- def initialize(variable_ast, type, value, validation_result)
7
+ def initialize(variable_ast, type, value, validation_result, msg: nil)
8
8
  @value = value
9
9
  @validation_result = validation_result
10
10
 
11
- msg = "Variable $#{variable_ast.name} of type #{type.to_type_signature} was provided invalid value"
11
+ msg ||= "Variable $#{variable_ast.name} of type #{type.to_type_signature} was provided invalid value"
12
12
 
13
13
  if problem_fields.any?
14
14
  msg += " for #{problem_fields.join(", ")}"
@@ -23,7 +23,7 @@ module GraphQL
23
23
  # a one level deep merge explicitly. However beyond that only show the
24
24
  # latest value and problems.
25
25
  super.merge({ "extensions" => { "value" => value, "problems" => validation_result.problems }}) do |key, oldValue, newValue|
26
- if oldValue.respond_to? merge
26
+ if oldValue.respond_to?(:merge)
27
27
  oldValue.merge(newValue)
28
28
  else
29
29
  newValue
@@ -14,9 +14,13 @@ module GraphQL
14
14
  schema = ctx.schema
15
15
  @context = ctx
16
16
 
17
- @provided_variables = GraphQL::Argument.deep_stringify(provided_variables)
17
+ @provided_variables = deep_stringify(provided_variables)
18
18
  @errors = []
19
19
  @storage = ast_variables.each_with_object({}) do |ast_variable, memo|
20
+ if schema.validate_max_errors && schema.validate_max_errors <= @errors.count
21
+ add_max_errors_reached_message
22
+ break
23
+ end
20
24
  # Find the right value for this variable:
21
25
  # - First, use the value provided at runtime
22
26
  # - Then, fall back to the default value from the query string
@@ -29,30 +33,27 @@ module GraphQL
29
33
  default_value = ast_variable.default_value
30
34
  provided_value = @provided_variables[variable_name]
31
35
  value_was_provided = @provided_variables.key?(variable_name)
36
+ max_errors = schema.validate_max_errors - @errors.count if schema.validate_max_errors
32
37
  begin
33
- validation_result = variable_type.validate_input(provided_value, ctx)
38
+ validation_result = variable_type.validate_input(provided_value, ctx, max_errors: max_errors)
34
39
  if validation_result.valid?
35
40
  if value_was_provided
36
41
  # Add the variable if a value was provided
37
- memo[variable_name] = if provided_value.nil?
42
+ memo[variable_name] = provided_value
43
+ elsif default_value != nil
44
+ memo[variable_name] = if default_value.is_a?(Language::Nodes::NullValue)
38
45
  nil
39
46
  else
40
- schema.error_handler.with_error_handling(context) do
41
- variable_type.coerce_input(provided_value, ctx)
42
- end
47
+ default_value
43
48
  end
44
- elsif default_value != nil
45
- # Add the variable if it wasn't provided but it has a default value (including `null`)
46
- memo[variable_name] = GraphQL::Query::LiteralInput.coerce(variable_type, default_value, self)
47
49
  end
48
50
  end
49
- rescue GraphQL::CoercionError, GraphQL::ExecutionError => ex
51
+ rescue GraphQL::ExecutionError => ex
50
52
  # TODO: This should really include the path to the problematic node in the variable value
51
53
  # like InputValidationResults generated by validate_non_null_input but unfortunately we don't
52
54
  # have this information available in the coerce_input call chain. Note this path is the path
53
55
  # that appears under errors.extensions.problems.path and NOT the result path under errors.path.
54
- validation_result = GraphQL::Query::InputValidationResult.new
55
- validation_result.add_problem(ex.message)
56
+ validation_result = GraphQL::Query::InputValidationResult.from_problem(ex.message)
56
57
  end
57
58
 
58
59
  if !validation_result.valid?
@@ -63,6 +64,29 @@ module GraphQL
63
64
  end
64
65
 
65
66
  def_delegators :@storage, :length, :key?, :[], :fetch, :to_h
67
+
68
+ private
69
+
70
+ def deep_stringify(val)
71
+ case val
72
+ when Array
73
+ val.map { |v| deep_stringify(v) }
74
+ when Hash
75
+ new_val = {}
76
+ val.each do |k, v|
77
+ new_val[k.to_s] = deep_stringify(v)
78
+ end
79
+ new_val
80
+ else
81
+ val
82
+ end
83
+ end
84
+
85
+ def add_max_errors_reached_message
86
+ message = "Too many errors processing variables, max validation error limit reached. Execution aborted"
87
+ validation_result = GraphQL::Query::InputValidationResult.from_problem(message)
88
+ errors << GraphQL::Query::VariableValidationError.new(nil, nil, nil, validation_result, msg: message)
89
+ end
66
90
  end
67
91
  end
68
92
  end
data/lib/graphql/query.rb CHANGED
@@ -1,12 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require "graphql/query/arguments"
3
- require "graphql/query/arguments_cache"
4
2
  require "graphql/query/context"
5
- require "graphql/query/executor"
6
- require "graphql/query/literal_input"
3
+ require "graphql/query/fingerprint"
7
4
  require "graphql/query/null_context"
8
5
  require "graphql/query/result"
9
- require "graphql/query/serial_execution"
10
6
  require "graphql/query/variables"
11
7
  require "graphql/query/input_validation_result"
12
8
  require "graphql/query/variable_validation_error"
@@ -38,7 +34,16 @@ module GraphQL
38
34
  attr_accessor :operation_name
39
35
 
40
36
  # @return [Boolean] if false, static validation is skipped (execution behavior for invalid queries is undefined)
41
- attr_accessor :validate
37
+ attr_reader :validate
38
+
39
+ # @param new_validate [Boolean] if false, static validation is skipped. This can't be reasssigned after validation.
40
+ def validate=(new_validate)
41
+ if defined?(@validation_pipeline) && @validation_pipeline && @validation_pipeline.has_validated?
42
+ raise ArgumentError, "Can't reassign Query#validate= after validation has run, remove this assignment."
43
+ else
44
+ @validate = new_validate
45
+ end
46
+ end
42
47
 
43
48
  attr_writer :query_string
44
49
 
@@ -81,11 +86,6 @@ module GraphQL
81
86
  def initialize(schema, query_string = nil, query: nil, document: nil, context: nil, variables: nil, validate: true, subscription_topic: nil, operation_name: nil, root_value: nil, max_depth: schema.max_depth, max_complexity: schema.max_complexity, except: nil, only: nil, warden: nil)
82
87
  # Even if `variables: nil` is passed, use an empty hash for simpler logic
83
88
  variables ||= {}
84
-
85
- # Use the `.graphql_definition` here which will return legacy types instead of classes
86
- if schema.is_a?(Class) && !schema.interpreter?
87
- schema = schema.graphql_definition
88
- end
89
89
  @schema = schema
90
90
  @filter = schema.default_filter.merge(except: except, only: only)
91
91
  @context = schema.context_class.new(query: self, object: root_value, values: context)
@@ -95,18 +95,29 @@ module GraphQL
95
95
  @fragments = nil
96
96
  @operations = nil
97
97
  @validate = validate
98
- # TODO: remove support for global tracers
99
- @tracers = schema.tracers + GraphQL::Tracing.tracers + (context ? context.fetch(:tracers, []) : [])
98
+ context_tracers = (context ? context.fetch(:tracers, []) : [])
99
+ @tracers = schema.tracers + context_tracers
100
+
100
101
  # Support `ctx[:backtrace] = true` for wrapping backtraces
101
102
  if context && context[:backtrace] && !@tracers.include?(GraphQL::Backtrace::Tracer)
102
- @tracers << GraphQL::Backtrace::Tracer
103
+ if schema.trace_class <= GraphQL::Tracing::LegacyTrace
104
+ context_tracers += [GraphQL::Backtrace::Tracer]
105
+ @tracers << GraphQL::Backtrace::Tracer
106
+ elsif !(current_trace.class <= GraphQL::Backtrace::Trace)
107
+ raise "Invariant: `backtrace: true` should have provided a trace class with Backtrace mixed in, but it didnt. (Found: #{current_trace.class.ancestors}). This is a bug in GraphQL-Ruby, please report it on GitHub."
108
+ end
109
+ end
110
+
111
+ if context_tracers.any? && !(schema.trace_class <= GraphQL::Tracing::LegacyTrace)
112
+ raise ArgumentError, "context[:tracers] are not supported without `trace_class(GraphQL::Tracing::LegacyTrace)` in the schema configuration, please add it."
103
113
  end
104
114
 
115
+
105
116
  @analysis_errors = []
106
117
  if variables.is_a?(String)
107
118
  raise ArgumentError, "Query variables should be a Hash, not a String. Try JSON.parse to prepare variables."
108
119
  else
109
- @provided_variables = variables
120
+ @provided_variables = variables || {}
110
121
  end
111
122
 
112
123
  @query_string = query_string || query
@@ -116,6 +127,10 @@ module GraphQL
116
127
  raise ArgumentError, "Query should only be provided a query string or a document, not both."
117
128
  end
118
129
 
130
+ if @query_string && !@query_string.is_a?(String)
131
+ raise ArgumentError, "Query string argument should be a String, got #{@query_string.class.name} instead."
132
+ end
133
+
119
134
  # A two-layer cache of type resolution:
120
135
  # { abstract_type => { value => resolved_type } }
121
136
  @resolved_types_cache = Hash.new do |h1, k1|
@@ -124,8 +139,6 @@ module GraphQL
124
139
  end
125
140
  end
126
141
 
127
- @arguments_cache = ArgumentsCache.build(self)
128
-
129
142
  # Trying to execute a document
130
143
  # with no operations returns an empty hash
131
144
  @ast_variables = []
@@ -150,7 +163,16 @@ module GraphQL
150
163
  @query_string ||= (document ? document.to_query_string : nil)
151
164
  end
152
165
 
153
- def_delegators :@schema, :interpreter?
166
+ def interpreter?
167
+ true
168
+ end
169
+
170
+ attr_accessor :multiplex
171
+
172
+ # @return [GraphQL::Tracing::Trace]
173
+ def current_trace
174
+ @current_trace ||= multiplex ? multiplex.current_trace : schema.new_trace(multiplex: multiplex, query: self)
175
+ end
154
176
 
155
177
  def subscription_update?
156
178
  @subscription_topic && subscription?
@@ -162,7 +184,6 @@ module GraphQL
162
184
  @lookahead ||= begin
163
185
  ast_node = selected_operation
164
186
  root_type = warden.root_type_for_operation(ast_node.operation_type || "query")
165
- root_type = root_type.type_class || raise("Invariant: `lookahead` only works with class-based types")
166
187
  GraphQL::Execution::Lookahead.new(query: self, root_type: root_type, ast_nodes: [ast_node])
167
188
  end
168
189
  end
@@ -192,9 +213,7 @@ module GraphQL
192
213
  # @return [Hash] A GraphQL response, with `"data"` and/or `"errors"` keys
193
214
  def result
194
215
  if !@executed
195
- with_prepared_ast {
196
- Execution::Multiplex.run_queries(@schema, [self], context: @context)
197
- }
216
+ Execution::Interpreter.run_all(@schema, [self], context: @context)
198
217
  end
199
218
  @result ||= Query::Result.new(query: self, values: @result_values)
200
219
  end
@@ -232,28 +251,60 @@ module GraphQL
232
251
  end
233
252
  end
234
253
 
235
- def irep_selection
236
- @selection ||= begin
237
- if selected_operation && internal_representation
238
- internal_representation.operation_definitions[selected_operation.name]
239
- else
240
- nil
241
- end
242
- end
254
+ # Node-level cache for calculating arguments. Used during execution and query analysis.
255
+ # @param ast_node [GraphQL::Language::Nodes::AbstractNode]
256
+ # @param definition [GraphQL::Schema::Field]
257
+ # @param parent_object [GraphQL::Schema::Object]
258
+ # @return Hash{Symbol => Object}
259
+ def arguments_for(ast_node, definition, parent_object: nil)
260
+ arguments_cache.fetch(ast_node, definition, parent_object)
243
261
  end
244
262
 
245
- # Node-level cache for calculating arguments. Used during execution and query analysis.
246
- # @api private
247
- # @return [GraphQL::Query::Arguments] Arguments for this node, merging default values, literal values and query variables
248
- def arguments_for(irep_or_ast_node, definition)
249
- @arguments_cache[irep_or_ast_node][definition]
263
+ def arguments_cache
264
+ @arguments_cache ||= Execution::Interpreter::ArgumentsCache.new(self)
265
+ end
266
+
267
+ # A version of the given query string, with:
268
+ # - Variables inlined to the query
269
+ # - Strings replaced with `<REDACTED>`
270
+ # @return [String, nil] Returns nil if the query is invalid.
271
+ def sanitized_query_string(inline_variables: true)
272
+ with_prepared_ast {
273
+ schema.sanitized_printer.new(self, inline_variables: inline_variables).sanitized_query_string
274
+ }
275
+ end
276
+
277
+ # This contains a few components:
278
+ #
279
+ # - The selected operation name (or `anonymous`)
280
+ # - The fingerprint of the query string
281
+ # - The number of given variables (for readability)
282
+ # - The fingerprint of the given variables
283
+ #
284
+ # This fingerprint can be used to track runs of the same operation-variables combination over time.
285
+ #
286
+ # @see operation_fingerprint
287
+ # @see variables_fingerprint
288
+ # @return [String] An opaque hash identifying this operation-variables combination
289
+ def fingerprint
290
+ @fingerprint ||= "#{operation_fingerprint}/#{variables_fingerprint}"
291
+ end
292
+
293
+ # @return [String] An opaque hash for identifying this query's given query string and selected operation
294
+ def operation_fingerprint
295
+ @operation_fingerprint ||= "#{selected_operation_name || "anonymous"}/#{Fingerprint.generate(query_string)}"
296
+ end
297
+
298
+ # @return [String] An opaque hash for identifying this query's given a variable values (not including defaults)
299
+ def variables_fingerprint
300
+ @variables_fingerprint ||= "#{provided_variables.size}/#{Fingerprint.generate(provided_variables.to_json)}"
250
301
  end
251
302
 
252
303
  def validation_pipeline
253
304
  with_prepared_ast { @validation_pipeline }
254
305
  end
255
306
 
256
- def_delegators :validation_pipeline, :validation_errors, :internal_representation,
307
+ def_delegators :validation_pipeline, :validation_errors,
257
308
  :analyzers, :ast_analyzers, :max_depth, :max_complexity
258
309
 
259
310
  attr_accessor :analysis_errors
@@ -271,8 +322,8 @@ module GraphQL
271
322
  # @param value [Object] Any runtime value
272
323
  # @return [GraphQL::ObjectType, nil] The runtime type of `value` from {Schema#resolve_type}
273
324
  # @see {#possible_types} to apply filtering from `only` / `except`
274
- def resolve_type(abstract_type, value = :__undefined__)
275
- if value.is_a?(Symbol) && value == :__undefined__
325
+ def resolve_type(abstract_type, value = NOT_CONFIGURED)
326
+ if value.is_a?(Symbol) && value == NOT_CONFIGURED
276
327
  # Old method signature
277
328
  value = abstract_type
278
329
  abstract_type = nil
@@ -306,10 +357,8 @@ module GraphQL
306
357
  end
307
358
 
308
359
  # @api private
309
- def with_error_handling
310
- schema.error_handler.with_error_handling(context) do
311
- yield
312
- end
360
+ def handle_or_reraise(err)
361
+ schema.handle_or_reraise(context, err)
313
362
  end
314
363
 
315
364
  private
@@ -330,7 +379,7 @@ module GraphQL
330
379
  parse_error = nil
331
380
  @document ||= begin
332
381
  if query_string
333
- GraphQL.parse(query_string, tracer: self)
382
+ GraphQL.parse(query_string, trace: self.current_trace)
334
383
  end
335
384
  rescue GraphQL::ParseError => err
336
385
  parse_error = err
@@ -379,7 +428,6 @@ module GraphQL
379
428
 
380
429
  @validation_pipeline = GraphQL::Query::ValidationPipeline.new(
381
430
  query: self,
382
- validate: @validate,
383
431
  parse_error: parse_error,
384
432
  operation_name_error: operation_name_error,
385
433
  max_depth: @max_depth,
@@ -1,108 +1,12 @@
1
1
  # frozen_string_literal: true
2
-
3
-
4
2
  module GraphQL
5
3
  class Railtie < Rails::Railtie
6
- rake_tasks do
7
- # Defer this so that you only need the `parser` gem when you _run_ the upgrader
8
- def load_upgraders
9
- require_relative './upgrader/member'
10
- require_relative './upgrader/schema'
11
- end
12
-
13
- namespace :graphql do
14
- task :upgrade, [:dir] do |t, args|
15
- unless (dir = args[:dir])
16
- fail 'You have to give me a directory where your GraphQL schema and types live. ' \
17
- 'For example: `bin/rake graphql:upgrade[app/graphql/**/*]`'
18
- end
19
-
20
- Dir[dir].each do |file|
21
- # Members (types, interfaces, etc.)
22
- if file =~ /.*_(type|interface|enum|union|)\.rb$/
23
- Rake::Task["graphql:upgrade:member"].execute(Struct.new(:member_file).new(file))
24
- end
25
- end
26
-
27
- puts "Upgrade complete! Note that this is a best-effort approach, and may very well contain some bugs."
28
- puts "Don't forget to create the base objects. For example, you could run:"
29
- puts "\tbin/rake graphql:upgrade:create_base_objects[app/graphql]"
30
- end
31
-
32
- namespace :upgrade do
33
- task :create_base_objects, [:base_dir] do |t, args|
34
- unless (base_dir = args[:base_dir])
35
- fail 'You have to give me a directory where your GraphQL types live. ' \
36
- 'For example: `bin/rake graphql:upgrade:create_base_objects[app/graphql]`'
37
- end
38
-
39
- destination_file = File.join(base_dir, "types", "base_scalar.rb")
40
- unless File.exists?(destination_file)
41
- FileUtils.mkdir_p(File.dirname(destination_file))
42
- File.open(destination_file, 'w') do |f|
43
- f.puts "class Types::BaseScalar < GraphQL::Schema::Scalar\nend"
44
- end
45
- end
46
-
47
- destination_file = File.join(base_dir, "types", "base_input_object.rb")
48
- unless File.exists?(destination_file)
49
- FileUtils.mkdir_p(File.dirname(destination_file))
50
- File.open(destination_file, 'w') do |f|
51
- f.puts "class Types::BaseInputObject < GraphQL::Schema::InputObject\nend"
52
- end
53
- end
54
-
55
- destination_file = File.join(base_dir, "types", "base_enum.rb")
56
- unless File.exists?(destination_file)
57
- FileUtils.mkdir_p(File.dirname(destination_file))
58
- File.open(destination_file, 'w') do |f|
59
- f.puts "class Types::BaseEnum < GraphQL::Schema::Enum\nend"
60
- end
61
- end
62
-
63
- destination_file = File.join(base_dir, "types", "base_union.rb")
64
- unless File.exists?(destination_file)
65
- FileUtils.mkdir_p(File.dirname(destination_file))
66
- File.open(destination_file, 'w') do |f|
67
- f.puts "class Types::BaseUnion < GraphQL::Schema::Union\nend"
68
- end
69
- end
70
-
71
- destination_file = File.join(base_dir, "types", "base_interface.rb")
72
- unless File.exists?(destination_file)
73
- FileUtils.mkdir_p(File.dirname(destination_file))
74
- File.open(destination_file, 'w') do |f|
75
- f.puts "module Types::BaseInterface\n include GraphQL::Schema::Interface\nend"
76
- end
77
- end
78
-
79
- destination_file = File.join(base_dir, "types", "base_object.rb")
80
- unless File.exists?(destination_file)
81
- File.open(destination_file, 'w') do |f|
82
- f.puts "class Types::BaseObject < GraphQL::Schema::Object\nend"
83
- end
84
- end
85
- end
86
-
87
- task :schema, [:schema_file] do |t, args|
88
- schema_file = args.schema_file
89
- load_upgraders
90
- upgrader = GraphQL::Upgrader::Schema.new File.read(schema_file)
91
-
92
- puts "- Transforming schema #{schema_file}"
93
- File.open(schema_file, 'w') { |f| f.write upgrader.upgrade }
94
- end
95
-
96
- task :member, [:member_file] do |t, args|
97
- member_file = args.member_file
98
- load_upgraders
99
- upgrader = GraphQL::Upgrader::Member.new File.read(member_file)
100
- next unless upgrader.upgradeable?
101
-
102
- puts "- Transforming member #{member_file}"
103
- File.open(member_file, 'w') { |f| f.write upgrader.upgrade }
104
- end
105
- end
4
+ config.before_configuration do
5
+ # Bootsnap compile cache has similar expiration properties,
6
+ # so we assume that if the user has bootsnap setup it's ok
7
+ # to piggy back on it.
8
+ if ::Object.const_defined?("Bootsnap::CompileCache::ISeq") && Bootsnap::CompileCache::ISeq.cache_dir
9
+ Language::Parser.cache ||= Language::Cache.new(Pathname.new(Bootsnap::CompileCache::ISeq.cache_dir).join('graphql'))
106
10
  end
107
11
  end
108
12
  end
@@ -15,7 +15,7 @@ module GraphQL
15
15
  puts "Validating graphql-pro v#{version}"
16
16
  puts " - Checking for graphql-pro credentials..."
17
17
 
18
- creds = `bundle config gems.graphql.pro`[/[a-z0-9]{11}:[a-z0-9]{11}/]
18
+ creds = `bundle config gems.graphql.pro --parseable`[/[a-z0-9]{11}:[a-z0-9]{11}/]
19
19
  if creds.nil?
20
20
  puts " #{ex} failed, please set with `bundle config gems.graphql.pro $MY_CREDENTIALS`"
21
21
  exit(1)