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,435 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql/compatibility/execution_specification/counter_schema"
3
- require "graphql/compatibility/execution_specification/specification_schema"
4
-
5
- module GraphQL
6
- module Compatibility
7
- # Test an execution strategy. This spec is not meant as a development aid.
8
- # Rather, when the strategy _works_, run it here to see if it has any differences
9
- # from the built-in strategy.
10
- #
11
- # - Custom scalar input / output
12
- # - Null propagation
13
- # - Query-level masking
14
- # - Directive support
15
- # - Typecasting
16
- # - Error handling (raise / return GraphQL::ExecutionError)
17
- # - Provides Irep & AST node to resolve fn
18
- # - Skipping fields
19
- #
20
- # Some things are explicitly _not_ tested here, because they're handled
21
- # by other parts of the system:
22
- #
23
- # - Schema definition (including types and fields)
24
- # - Parsing & parse errors
25
- # - AST -> IRep transformation (eg, fragment merging)
26
- # - Query validation and analysis
27
- # - Relay features
28
- #
29
- module ExecutionSpecification
30
- # Make a minitest suite for this execution strategy, making sure it
31
- # fulfills all the requirements of this library.
32
- # @param execution_strategy [<#new, #execute>] An execution strategy class
33
- # @return [Class<Minitest::Test>] A test suite for this execution strategy
34
- def self.build_suite(execution_strategy)
35
- Class.new(Minitest::Test) do
36
- class << self
37
- attr_accessor :counter_schema, :specification_schema
38
- end
39
-
40
- self.specification_schema = SpecificationSchema.build(execution_strategy)
41
- self.counter_schema = CounterSchema.build(execution_strategy)
42
-
43
- def execute_query(query_string, **kwargs)
44
- kwargs[:root_value] = SpecificationSchema::DATA
45
- self.class.specification_schema.execute(query_string, **kwargs)
46
- end
47
-
48
- def test_it_fetches_data
49
- query_string = %|
50
- query getData($nodeId: ID = "1001") {
51
- flh: node(id: $nodeId) {
52
- __typename
53
- ... on Person {
54
- name @include(if: true)
55
- skippedName: name @skip(if: true)
56
- birthdate
57
- age(on: 1477660133)
58
- }
59
-
60
- ... on NamedEntity {
61
- ne_tn: __typename
62
- ne_n: name
63
- }
64
-
65
- ... on Organization {
66
- org_n: name
67
- }
68
- }
69
- }
70
- |
71
- res = execute_query(query_string)
72
-
73
- assert_equal nil, res["errors"], "It doesn't have an errors key"
74
-
75
- flh = res["data"]["flh"]
76
- assert_equal "Fannie Lou Hamer", flh["name"], "It returns values"
77
- assert_equal Time.new(1917, 10, 6).to_i, flh["birthdate"], "It returns custom scalars"
78
- assert_equal 99, flh["age"], "It runs resolve functions"
79
- assert_equal "Person", flh["__typename"], "It serves __typename"
80
- assert_equal "Person", flh["ne_tn"], "It serves __typename on interfaces"
81
- assert_equal "Fannie Lou Hamer", flh["ne_n"], "It serves interface fields"
82
- assert_equal false, flh.key?("skippedName"), "It obeys @skip"
83
- assert_equal false, flh.key?("org_n"), "It doesn't apply other type fields"
84
- end
85
-
86
- def test_it_iterates_over_each
87
- query_string = %|
88
- query getData($nodeId: ID = "1002") {
89
- node(id: $nodeId) {
90
- ... on Person {
91
- organizations { name }
92
- }
93
- }
94
- }
95
- |
96
-
97
- res = execute_query(query_string)
98
- assert_equal ["SNCC"], res["data"]["node"]["organizations"].map { |o| o["name"] }
99
- end
100
-
101
- def test_it_skips_skipped_fields
102
- query_str = <<-GRAPHQL
103
- {
104
- o3001: organization(id: "3001") { name }
105
- o2001: organization(id: "2001") { name }
106
- }
107
- GRAPHQL
108
-
109
- res = execute_query(query_str)
110
- assert_equal ["o2001"], res["data"].keys
111
- assert_equal false, res.key?("errors")
112
- end
113
-
114
- def test_it_propagates_nulls_to_field
115
- query_string = %|
116
- query getOrg($id: ID = "2001"){
117
- failure: node(id: $id) {
118
- ... on Organization {
119
- name
120
- leader { name }
121
- }
122
- }
123
- success: node(id: $id) {
124
- ... on Organization {
125
- name
126
- }
127
- }
128
- }
129
- |
130
- res = execute_query(query_string)
131
-
132
- failure = res["data"]["failure"]
133
- success = res["data"]["success"]
134
-
135
- assert_equal nil, failure, "It propagates nulls to the next nullable field"
136
- assert_equal({"name" => "SNCC"}, success, "It serves the same object if no invalid null is encountered")
137
- assert_equal 1, res["errors"].length , "It returns an error for the invalid null"
138
- end
139
-
140
- def test_it_propages_nulls_to_operation
141
- query_string = %|
142
- {
143
- foundOrg: organization(id: "2001") {
144
- name
145
- }
146
- organization(id: "2999") {
147
- name
148
- }
149
- }
150
- |
151
-
152
- res = execute_query(query_string)
153
- assert_equal nil, res["data"]
154
- assert_equal 1, res["errors"].length
155
- end
156
-
157
- def test_it_exposes_raised_and_returned_user_execution_errors
158
- query_string = %|
159
- {
160
- organization(id: "2001") {
161
- name
162
- returnedError
163
- raisedError
164
- }
165
- organizations {
166
- returnedError
167
- raisedError
168
- }
169
- }
170
- |
171
-
172
- res = execute_query(query_string)
173
-
174
- assert_equal "SNCC", res["data"]["organization"]["name"], "It runs the rest of the query"
175
-
176
- expected_errors = [
177
- {
178
- "message"=>"This error was returned",
179
- "locations"=>[{"line"=>5, "column"=>19}],
180
- "path"=>["organization", "returnedError"]
181
- },
182
- {
183
- "message"=>"This error was raised",
184
- "locations"=>[{"line"=>6, "column"=>19}],
185
- "path"=>["organization", "raisedError"]
186
- },
187
- {
188
- "message"=>"This error was raised",
189
- "locations"=>[{"line"=>10, "column"=>19}],
190
- "path"=>["organizations", 0, "raisedError"]
191
- },
192
- {
193
- "message"=>"This error was raised",
194
- "locations"=>[{"line"=>10, "column"=>19}],
195
- "path"=>["organizations", 1, "raisedError"]
196
- },
197
- {
198
- "message"=>"This error was returned",
199
- "locations"=>[{"line"=>9, "column"=>19}],
200
- "path"=>["organizations", 0, "returnedError"]
201
- },
202
- {
203
- "message"=>"This error was returned",
204
- "locations"=>[{"line"=>9, "column"=>19}],
205
- "path"=>["organizations", 1, "returnedError"]
206
- },
207
- ]
208
-
209
- expected_errors.each do |expected_err|
210
- assert_includes res["errors"], expected_err
211
- end
212
- end
213
-
214
- def test_it_applies_masking
215
- no_org = ->(member, ctx) { member.name == "Organization" }
216
- query_string = %|
217
- {
218
- node(id: "2001") {
219
- __typename
220
- }
221
- }|
222
-
223
- err = assert_raises(GraphQL::UnresolvedTypeError) {
224
- execute_query(query_string, except: no_org)
225
- }
226
-
227
- query_string = %|
228
- {
229
- organization(id: "2001") { name }
230
- }|
231
-
232
- res = execute_query(query_string, except: no_org)
233
-
234
- assert_equal nil, res["data"]
235
- assert_equal 1, res["errors"].length
236
- assert_equal "SNCC", err.value.name
237
- assert_equal GraphQL::Relay::Node.interface, err.field.type
238
- assert_equal 1, err.possible_types.length
239
- assert_equal "Organization", err.resolved_type.name
240
- assert_equal "Query", err.parent_type.name
241
-
242
- query_string = %|
243
- {
244
- __type(name: "Organization") { name }
245
- }|
246
-
247
- res = execute_query(query_string, except: no_org)
248
-
249
- assert_equal nil, res["data"]["__type"]
250
- assert_equal nil, res["errors"]
251
- end
252
-
253
- def test_it_provides_nodes_to_resolve
254
- query_string = %|
255
- {
256
- organization(id: "2001") {
257
- name
258
- nodePresence
259
- }
260
- }|
261
-
262
- res = execute_query(query_string)
263
- assert_equal "SNCC", res["data"]["organization"]["name"]
264
- assert_equal [true, true, false], res["data"]["organization"]["nodePresence"]
265
- end
266
-
267
- def test_it_runs_the_introspection_query
268
- execute_query(GraphQL::Introspection::INTROSPECTION_QUERY)
269
- end
270
-
271
- def test_it_propagates_deeply_nested_nulls
272
- query_string = %|
273
- {
274
- node(id: "1001") {
275
- ... on Person {
276
- name
277
- first_organization {
278
- leader {
279
- name
280
- }
281
- }
282
- }
283
- }
284
- }
285
- |
286
- res = execute_query(query_string)
287
- assert_equal nil, res["data"]["node"]
288
- assert_equal 1, res["errors"].length
289
- end
290
-
291
- def test_it_doesnt_add_errors_for_invalid_nulls_from_execution_errors
292
- query_string = %|
293
- query getOrg($id: ID = "2001"){
294
- failure: node(id: $id) {
295
- ... on Organization {
296
- name
297
- leader { name }
298
- }
299
- }
300
- }
301
- |
302
- res = execute_query(query_string, context: {return_error: true})
303
- error_messages = res["errors"].map { |e| e["message"] }
304
- assert_equal ["Error on Nullable"], error_messages
305
- end
306
-
307
- def test_it_only_resolves_fields_once_on_typed_fragments
308
- res = self.class.counter_schema.execute("
309
- {
310
- counter { count }
311
- ... on HasCounter {
312
- counter { count }
313
- }
314
- }
315
- ")
316
-
317
- expected_data = {
318
- "counter" => { "count" => 1 }
319
- }
320
- assert_equal expected_data, res["data"]
321
- assert_equal 1, self.class.counter_schema.metadata[:count]
322
-
323
- # Deep typed children are correctly distinguished:
324
- res = self.class.counter_schema.execute("
325
- {
326
- counter {
327
- ... on Counter {
328
- counter { count }
329
- }
330
- ... on AltCounter {
331
- counter { count, t: __typename }
332
- }
333
- }
334
- }
335
- ")
336
-
337
- expected_data = {
338
- "counter" => { "counter" => { "count" => 2 } }
339
- }
340
- assert_equal expected_data, res["data"]
341
- end
342
-
343
- def test_it_runs_middleware
344
- log = []
345
- query_string = %|
346
- {
347
- node(id: "2001") {
348
- __typename
349
- }
350
- }|
351
- execute_query(query_string, context: {middleware_log: log})
352
- assert_equal ["node", "__typename"], log
353
- end
354
-
355
- def test_it_uses_type_error_hooks_for_invalid_nulls
356
- log = []
357
- query_string = %|
358
- {
359
- node(id: "1001") {
360
- ... on Person {
361
- name
362
- first_organization {
363
- leader {
364
- name
365
- }
366
- }
367
- }
368
- }
369
- }|
370
-
371
- res = execute_query(query_string, context: { type_errors: log })
372
- assert_equal nil, res["data"]["node"]
373
- assert_equal [nil], log
374
- end
375
-
376
- def test_it_uses_type_error_hooks_for_failed_type_resolution
377
- log = []
378
- query_string = %|
379
- {
380
- node(id: "2003") {
381
- __typename
382
- }
383
- }|
384
-
385
- assert_raises(GraphQL::UnresolvedTypeError) {
386
- execute_query(query_string, context: { type_errors: log })
387
- }
388
-
389
- assert_equal [SpecificationSchema::BOGUS_NODE], log
390
- end
391
-
392
- def test_it_treats_failed_type_resolution_like_nil
393
- log = []
394
- ctx = { type_errors: log, gobble: true }
395
- query_string = %|
396
- {
397
- node(id: "2003") {
398
- __typename
399
- }
400
- }|
401
-
402
- res = execute_query(query_string, context: ctx)
403
-
404
- assert_equal nil, res["data"]["node"]
405
- assert_equal false, res.key?("errors")
406
- assert_equal [SpecificationSchema::BOGUS_NODE], log
407
-
408
- query_string_2 = %|
409
- {
410
- requiredNode(id: "2003") {
411
- __typename
412
- }
413
- }|
414
-
415
- res = execute_query(query_string_2, context: ctx)
416
-
417
- assert_equal nil, res["data"]
418
- assert_equal false, res.key?("errors")
419
- assert_equal [SpecificationSchema::BOGUS_NODE, SpecificationSchema::BOGUS_NODE], log
420
- end
421
-
422
- def test_it_skips_connections
423
- query_type = GraphQL::ObjectType.define do
424
- name "Query"
425
- connection :skipped, types[query_type], resolve: ->(o,a,c) { c.skip }
426
- end
427
- schema = GraphQL::Schema.define(query: query_type)
428
- res = schema.execute("{ skipped { __typename } }")
429
- assert_equal({"data" => nil}, res)
430
- end
431
- end
432
- end
433
- end
434
- end
435
- end
@@ -1,111 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Compatibility
4
- module LazyExecutionSpecification
5
- module LazySchema
6
- class LazyPush
7
- attr_reader :value
8
- def initialize(ctx, value)
9
- if value == 13
10
- @value = nil
11
- elsif value == 14
12
- @value = GraphQL::ExecutionError.new("oops!")
13
- elsif value == 15
14
- @skipped = true
15
- @value = ctx.skip
16
- else
17
- @value = value
18
- end
19
- @context = ctx
20
- pushes = @context[:lazy_pushes] ||= []
21
- if !@skipped
22
- pushes << @value
23
- end
24
- end
25
-
26
- def push
27
- if @skipped
28
- @value
29
- else
30
- if @context[:lazy_pushes].include?(@value)
31
- @context[:lazy_instrumentation] && @context[:lazy_instrumentation] << "PUSH"
32
- @context[:pushes] << @context[:lazy_pushes]
33
- @context[:lazy_pushes] = []
34
- end
35
- # Something that _behaves_ like this object, but isn't registered lazy
36
- OpenStruct.new(value: @value)
37
- end
38
- end
39
- end
40
-
41
- class LazyPushCollection
42
- def initialize(ctx, values)
43
- @ctx = ctx
44
- @values = values
45
- end
46
-
47
- def push
48
- @values.map { |v| LazyPush.new(@ctx, v) }
49
- end
50
-
51
- def value
52
- @values
53
- end
54
- end
55
-
56
- module LazyInstrumentation
57
- def self.instrument(type, field)
58
- prev_lazy_resolve = field.lazy_resolve_proc
59
- field.redefine {
60
- lazy_resolve ->(o, a, c) {
61
- result = prev_lazy_resolve.call(o, a, c)
62
- c[:lazy_instrumentation] && c[:lazy_instrumentation].push("#{type.name}.#{field.name}: #{o.value}")
63
- result
64
- }
65
- }
66
- end
67
- end
68
-
69
- def self.build(execution_strategy)
70
- lazy_push_type = GraphQL::ObjectType.define do
71
- name "LazyPush"
72
- field :value, !types.Int
73
- field :push, !lazy_push_type do
74
- argument :value, types.Int
75
- resolve ->(o, a, c) {
76
- LazyPush.new(c, a[:value])
77
- }
78
- end
79
- end
80
-
81
- query_type = GraphQL::ObjectType.define do
82
- name "Query"
83
- field :push, !lazy_push_type do
84
- argument :value, types.Int
85
- resolve ->(o, a, c) {
86
- LazyPush.new(c, a[:value])
87
- }
88
- end
89
-
90
- connection :pushes, lazy_push_type.connection_type do
91
- argument :values, types[types.Int], method_access: false
92
- resolve ->(o, a, c) {
93
- LazyPushCollection.new(c, a[:values])
94
- }
95
- end
96
- end
97
-
98
- GraphQL::Schema.define do
99
- query(query_type)
100
- mutation(query_type)
101
- query_execution_strategy(execution_strategy)
102
- mutation_execution_strategy(execution_strategy)
103
- lazy_resolve(LazyPush, :push)
104
- lazy_resolve(LazyPushCollection, :push)
105
- instrument(:field, LazyInstrumentation)
106
- end
107
- end
108
- end
109
- end
110
- end
111
- end