graphql 1.12.12 → 2.2.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/core.rb +3 -8
  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 +14 -4
  10. data/lib/generators/graphql/interface_generator.rb +7 -7
  11. data/lib/generators/graphql/mutation_create_generator.rb +22 -0
  12. data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
  13. data/lib/generators/graphql/mutation_generator.rb +5 -30
  14. data/lib/generators/graphql/mutation_update_generator.rb +22 -0
  15. data/lib/generators/graphql/object_generator.rb +10 -38
  16. data/lib/generators/graphql/orm_mutations_base.rb +40 -0
  17. data/lib/generators/graphql/relay.rb +23 -12
  18. data/lib/generators/graphql/scalar_generator.rb +4 -2
  19. data/lib/generators/graphql/templates/base_argument.erb +2 -0
  20. data/lib/generators/graphql/templates/base_connection.erb +2 -0
  21. data/lib/generators/graphql/templates/base_edge.erb +2 -0
  22. data/lib/generators/graphql/templates/base_enum.erb +2 -0
  23. data/lib/generators/graphql/templates/base_field.erb +2 -0
  24. data/lib/generators/graphql/templates/base_input_object.erb +2 -0
  25. data/lib/generators/graphql/templates/base_interface.erb +2 -0
  26. data/lib/generators/graphql/templates/base_object.erb +2 -0
  27. data/lib/generators/graphql/templates/base_resolver.erb +6 -0
  28. data/lib/generators/graphql/templates/base_scalar.erb +2 -0
  29. data/lib/generators/graphql/templates/base_union.erb +2 -0
  30. data/lib/generators/graphql/templates/enum.erb +5 -1
  31. data/lib/generators/graphql/templates/graphql_controller.erb +2 -0
  32. data/lib/generators/graphql/templates/input.erb +9 -0
  33. data/lib/generators/graphql/templates/interface.erb +4 -2
  34. data/lib/generators/graphql/templates/loader.erb +2 -0
  35. data/lib/generators/graphql/templates/mutation.erb +3 -1
  36. data/lib/generators/graphql/templates/mutation_create.erb +20 -0
  37. data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
  38. data/lib/generators/graphql/templates/mutation_update.erb +21 -0
  39. data/lib/generators/graphql/templates/node_type.erb +2 -0
  40. data/lib/generators/graphql/templates/object.erb +4 -2
  41. data/lib/generators/graphql/templates/query_type.erb +2 -0
  42. data/lib/generators/graphql/templates/scalar.erb +3 -1
  43. data/lib/generators/graphql/templates/schema.erb +19 -2
  44. data/lib/generators/graphql/templates/union.erb +4 -2
  45. data/lib/generators/graphql/type_generator.rb +46 -10
  46. data/lib/generators/graphql/union_generator.rb +5 -5
  47. data/lib/graphql/analysis/ast/analyzer.rb +7 -0
  48. data/lib/graphql/analysis/ast/field_usage.rb +55 -1
  49. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
  50. data/lib/graphql/analysis/ast/query_complexity.rb +88 -140
  51. data/lib/graphql/analysis/ast/query_depth.rb +7 -3
  52. data/lib/graphql/analysis/ast/visitor.rb +50 -42
  53. data/lib/graphql/analysis/ast.rb +26 -23
  54. data/lib/graphql/analysis.rb +0 -7
  55. data/lib/graphql/backtrace/table.rb +4 -22
  56. data/lib/graphql/backtrace/trace.rb +93 -0
  57. data/lib/graphql/backtrace/tracer.rb +8 -6
  58. data/lib/graphql/backtrace.rb +3 -8
  59. data/lib/graphql/coercion_error.rb +1 -9
  60. data/lib/graphql/dataloader/async_dataloader.rb +85 -0
  61. data/lib/graphql/dataloader/null_dataloader.rb +3 -1
  62. data/lib/graphql/dataloader/request.rb +5 -0
  63. data/lib/graphql/dataloader/source.rb +120 -31
  64. data/lib/graphql/dataloader.rb +168 -142
  65. data/lib/graphql/date_encoding_error.rb +16 -0
  66. data/lib/graphql/dig.rb +1 -1
  67. data/lib/graphql/duration_encoding_error.rb +16 -0
  68. data/lib/graphql/execution/errors.rb +12 -81
  69. data/lib/graphql/execution/interpreter/arguments.rb +2 -2
  70. data/lib/graphql/execution/interpreter/arguments_cache.rb +36 -34
  71. data/lib/graphql/execution/interpreter/resolve.rb +32 -2
  72. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +170 -0
  73. data/lib/graphql/execution/interpreter/runtime.rb +414 -341
  74. data/lib/graphql/execution/interpreter.rb +122 -80
  75. data/lib/graphql/execution/lazy.rb +11 -21
  76. data/lib/graphql/execution/lookahead.rb +125 -54
  77. data/lib/graphql/execution/multiplex.rb +4 -172
  78. data/lib/graphql/execution.rb +11 -4
  79. data/lib/graphql/integer_encoding_error.rb +18 -2
  80. data/lib/graphql/introspection/directive_location_enum.rb +2 -2
  81. data/lib/graphql/introspection/directive_type.rb +5 -3
  82. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  83. data/lib/graphql/introspection/entry_points.rb +11 -18
  84. data/lib/graphql/introspection/enum_value_type.rb +2 -2
  85. data/lib/graphql/introspection/field_type.rb +3 -3
  86. data/lib/graphql/introspection/input_value_type.rb +10 -4
  87. data/lib/graphql/introspection/schema_type.rb +12 -5
  88. data/lib/graphql/introspection/type_type.rb +25 -12
  89. data/lib/graphql/introspection.rb +6 -2
  90. data/lib/graphql/language/block_string.rb +37 -25
  91. data/lib/graphql/language/definition_slice.rb +1 -1
  92. data/lib/graphql/language/document_from_schema_definition.rb +78 -65
  93. data/lib/graphql/language/lexer.rb +345 -1467
  94. data/lib/graphql/language/nodes.rb +145 -91
  95. data/lib/graphql/language/parser.rb +701 -1921
  96. data/lib/graphql/language/printer.rb +351 -155
  97. data/lib/graphql/language/sanitized_printer.rb +25 -27
  98. data/lib/graphql/language/static_visitor.rb +167 -0
  99. data/lib/graphql/language/token.rb +0 -4
  100. data/lib/graphql/language/visitor.rb +188 -141
  101. data/lib/graphql/language.rb +1 -0
  102. data/lib/graphql/load_application_object_failed_error.rb +5 -1
  103. data/lib/graphql/name_validator.rb +0 -4
  104. data/lib/graphql/pagination/active_record_relation_connection.rb +37 -8
  105. data/lib/graphql/pagination/array_connection.rb +8 -6
  106. data/lib/graphql/pagination/connection.rb +61 -7
  107. data/lib/graphql/pagination/connections.rb +22 -23
  108. data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -2
  109. data/lib/graphql/pagination/relation_connection.rb +60 -28
  110. data/lib/graphql/query/context/scoped_context.rb +101 -0
  111. data/lib/graphql/query/context.rb +109 -189
  112. data/lib/graphql/query/input_validation_result.rb +10 -1
  113. data/lib/graphql/query/null_context.rb +14 -29
  114. data/lib/graphql/query/validation_pipeline.rb +15 -39
  115. data/lib/graphql/query/variable_validation_error.rb +2 -2
  116. data/lib/graphql/query/variables.rb +35 -17
  117. data/lib/graphql/query.rb +78 -65
  118. data/lib/graphql/railtie.rb +8 -109
  119. data/lib/graphql/rake_task/validate.rb +1 -1
  120. data/lib/graphql/rake_task.rb +30 -11
  121. data/lib/graphql/relay/range_add.rb +9 -16
  122. data/lib/graphql/relay.rb +0 -15
  123. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  124. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  125. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  126. data/lib/graphql/rubocop.rb +4 -0
  127. data/lib/graphql/schema/addition.rb +78 -45
  128. data/lib/graphql/schema/always_visible.rb +10 -0
  129. data/lib/graphql/schema/argument.rb +134 -80
  130. data/lib/graphql/schema/base_64_encoder.rb +3 -5
  131. data/lib/graphql/schema/build_from_definition.rb +60 -38
  132. data/lib/graphql/schema/directive/feature.rb +1 -1
  133. data/lib/graphql/schema/directive/flagged.rb +2 -2
  134. data/lib/graphql/schema/directive/include.rb +1 -1
  135. data/lib/graphql/schema/directive/one_of.rb +24 -0
  136. data/lib/graphql/schema/directive/skip.rb +1 -1
  137. data/lib/graphql/schema/directive/specified_by.rb +14 -0
  138. data/lib/graphql/schema/directive/transform.rb +2 -2
  139. data/lib/graphql/schema/directive.rb +33 -21
  140. data/lib/graphql/schema/enum.rb +93 -46
  141. data/lib/graphql/schema/enum_value.rb +4 -21
  142. data/lib/graphql/schema/field/connection_extension.rb +6 -16
  143. data/lib/graphql/schema/field/scope_extension.rb +8 -1
  144. data/lib/graphql/schema/field.rb +432 -337
  145. data/lib/graphql/schema/field_extension.rb +86 -2
  146. data/lib/graphql/schema/find_inherited_value.rb +3 -7
  147. data/lib/graphql/schema/finder.rb +5 -5
  148. data/lib/graphql/schema/has_single_input_argument.rb +156 -0
  149. data/lib/graphql/schema/input_object.rb +88 -90
  150. data/lib/graphql/schema/interface.rb +19 -59
  151. data/lib/graphql/schema/introspection_system.rb +6 -9
  152. data/lib/graphql/schema/late_bound_type.rb +8 -2
  153. data/lib/graphql/schema/list.rb +18 -7
  154. data/lib/graphql/schema/loader.rb +3 -3
  155. data/lib/graphql/schema/member/base_dsl_methods.rb +18 -19
  156. data/lib/graphql/schema/member/build_type.rb +16 -13
  157. data/lib/graphql/schema/member/has_arguments.rb +288 -84
  158. data/lib/graphql/schema/member/has_ast_node.rb +12 -0
  159. data/lib/graphql/schema/member/has_deprecation_reason.rb +3 -4
  160. data/lib/graphql/schema/member/has_directives.rb +81 -61
  161. data/lib/graphql/schema/member/has_fields.rb +149 -31
  162. data/lib/graphql/schema/member/has_interfaces.rb +143 -0
  163. data/lib/graphql/schema/member/has_validators.rb +32 -6
  164. data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
  165. data/lib/graphql/schema/member/scoped.rb +19 -0
  166. data/lib/graphql/schema/member/type_system_helpers.rb +17 -0
  167. data/lib/graphql/schema/member/validates_input.rb +6 -6
  168. data/lib/graphql/schema/member.rb +1 -6
  169. data/lib/graphql/schema/mutation.rb +0 -9
  170. data/lib/graphql/schema/non_null.rb +7 -7
  171. data/lib/graphql/schema/object.rb +30 -119
  172. data/lib/graphql/schema/printer.rb +23 -25
  173. data/lib/graphql/schema/relay_classic_mutation.rb +13 -90
  174. data/lib/graphql/schema/resolver/has_payload_type.rb +46 -11
  175. data/lib/graphql/schema/resolver.rb +101 -102
  176. data/lib/graphql/schema/scalar.rb +20 -21
  177. data/lib/graphql/schema/subscription.rb +45 -17
  178. data/lib/graphql/schema/timeout.rb +25 -29
  179. data/lib/graphql/schema/type_expression.rb +1 -1
  180. data/lib/graphql/schema/type_membership.rb +21 -4
  181. data/lib/graphql/schema/union.rb +15 -15
  182. data/lib/graphql/schema/unique_within_type.rb +1 -1
  183. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  184. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  185. data/lib/graphql/schema/validator/exclusion_validator.rb +3 -1
  186. data/lib/graphql/schema/validator/format_validator.rb +4 -5
  187. data/lib/graphql/schema/validator/inclusion_validator.rb +3 -1
  188. data/lib/graphql/schema/validator/length_validator.rb +5 -3
  189. data/lib/graphql/schema/validator/numericality_validator.rb +13 -2
  190. data/lib/graphql/schema/validator/required_validator.rb +29 -15
  191. data/lib/graphql/schema/validator.rb +35 -27
  192. data/lib/graphql/schema/warden.rb +259 -132
  193. data/lib/graphql/schema/wrapper.rb +0 -5
  194. data/lib/graphql/schema.rb +658 -989
  195. data/lib/graphql/static_validation/all_rules.rb +3 -1
  196. data/lib/graphql/static_validation/base_visitor.rb +14 -28
  197. data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
  198. data/lib/graphql/static_validation/error.rb +3 -1
  199. data/lib/graphql/static_validation/literal_validator.rb +21 -4
  200. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
  201. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +1 -1
  202. data/lib/graphql/static_validation/rules/directives_are_defined.rb +11 -5
  203. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
  204. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
  205. data/lib/graphql/static_validation/rules/fields_will_merge.rb +54 -28
  206. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  207. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  208. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  209. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  210. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  211. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  212. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +5 -3
  213. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +4 -4
  214. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
  215. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +1 -1
  216. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +13 -7
  217. data/lib/graphql/static_validation/validation_context.rb +16 -6
  218. data/lib/graphql/static_validation/validator.rb +11 -27
  219. data/lib/graphql/static_validation.rb +0 -3
  220. data/lib/graphql/string_encoding_error.rb +13 -3
  221. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +46 -9
  222. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
  223. data/lib/graphql/subscriptions/event.rb +75 -37
  224. data/lib/graphql/subscriptions/serialize.rb +25 -3
  225. data/lib/graphql/subscriptions.rb +59 -47
  226. data/lib/graphql/testing/helpers.rb +129 -0
  227. data/lib/graphql/testing.rb +2 -0
  228. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  229. data/lib/graphql/tracing/active_support_notifications_tracing.rb +6 -20
  230. data/lib/graphql/tracing/appoptics_trace.rb +251 -0
  231. data/lib/graphql/tracing/appoptics_tracing.rb +2 -2
  232. data/lib/graphql/tracing/appsignal_trace.rb +77 -0
  233. data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
  234. data/lib/graphql/tracing/data_dog_trace.rb +183 -0
  235. data/lib/graphql/tracing/data_dog_tracing.rb +25 -15
  236. data/lib/graphql/{execution/instrumentation.rb → tracing/legacy_hooks_trace.rb} +10 -28
  237. data/lib/graphql/tracing/legacy_trace.rb +69 -0
  238. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  239. data/lib/graphql/tracing/notifications_trace.rb +45 -0
  240. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  241. data/lib/graphql/tracing/platform_trace.rb +118 -0
  242. data/lib/graphql/tracing/platform_tracing.rb +46 -49
  243. data/lib/graphql/tracing/{prometheus_tracing → prometheus_trace}/graphql_collector.rb +4 -2
  244. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  245. data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
  246. data/lib/graphql/tracing/scout_trace.rb +72 -0
  247. data/lib/graphql/tracing/sentry_trace.rb +112 -0
  248. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  249. data/lib/graphql/tracing/trace.rb +76 -0
  250. data/lib/graphql/tracing.rb +20 -41
  251. data/lib/graphql/type_kinds.rb +6 -3
  252. data/lib/graphql/types/big_int.rb +5 -1
  253. data/lib/graphql/types/int.rb +1 -1
  254. data/lib/graphql/types/iso_8601_date.rb +17 -6
  255. data/lib/graphql/types/iso_8601_date_time.rb +12 -1
  256. data/lib/graphql/types/iso_8601_duration.rb +77 -0
  257. data/lib/graphql/types/relay/base_connection.rb +16 -6
  258. data/lib/graphql/types/relay/connection_behaviors.rb +82 -32
  259. data/lib/graphql/types/relay/edge_behaviors.rb +36 -7
  260. data/lib/graphql/types/relay/has_node_field.rb +2 -2
  261. data/lib/graphql/types/relay/has_nodes_field.rb +2 -2
  262. data/lib/graphql/types/relay/node_behaviors.rb +12 -2
  263. data/lib/graphql/types/relay/page_info_behaviors.rb +7 -2
  264. data/lib/graphql/types/relay.rb +0 -3
  265. data/lib/graphql/types/string.rb +2 -2
  266. data/lib/graphql/types.rb +1 -0
  267. data/lib/graphql/unauthorized_error.rb +1 -1
  268. data/lib/graphql/version.rb +1 -1
  269. data/lib/graphql.rb +33 -95
  270. data/readme.md +13 -6
  271. metadata +102 -185
  272. data/lib/graphql/analysis/analyze_query.rb +0 -98
  273. data/lib/graphql/analysis/field_usage.rb +0 -45
  274. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  275. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  276. data/lib/graphql/analysis/query_complexity.rb +0 -88
  277. data/lib/graphql/analysis/query_depth.rb +0 -43
  278. data/lib/graphql/analysis/reducer_state.rb +0 -48
  279. data/lib/graphql/argument.rb +0 -131
  280. data/lib/graphql/authorization.rb +0 -82
  281. data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
  282. data/lib/graphql/backwards_compatibility.rb +0 -61
  283. data/lib/graphql/base_type.rb +0 -230
  284. data/lib/graphql/boolean_type.rb +0 -2
  285. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  286. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  287. data/lib/graphql/compatibility/execution_specification.rb +0 -436
  288. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  289. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
  290. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  291. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  292. data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
  293. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
  294. data/lib/graphql/compatibility.rb +0 -5
  295. data/lib/graphql/define/assign_argument.rb +0 -12
  296. data/lib/graphql/define/assign_connection.rb +0 -13
  297. data/lib/graphql/define/assign_enum_value.rb +0 -18
  298. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  299. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  300. data/lib/graphql/define/assign_object_field.rb +0 -42
  301. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  302. data/lib/graphql/define/instance_definable.rb +0 -240
  303. data/lib/graphql/define/no_definition_error.rb +0 -7
  304. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  305. data/lib/graphql/define/type_definer.rb +0 -31
  306. data/lib/graphql/define.rb +0 -31
  307. data/lib/graphql/deprecated_dsl.rb +0 -47
  308. data/lib/graphql/deprecation.rb +0 -13
  309. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  310. data/lib/graphql/directive/include_directive.rb +0 -2
  311. data/lib/graphql/directive/skip_directive.rb +0 -2
  312. data/lib/graphql/directive.rb +0 -111
  313. data/lib/graphql/enum_type.rb +0 -129
  314. data/lib/graphql/execution/execute.rb +0 -333
  315. data/lib/graphql/execution/flatten.rb +0 -40
  316. data/lib/graphql/execution/lazy/resolve.rb +0 -91
  317. data/lib/graphql/execution/typecast.rb +0 -50
  318. data/lib/graphql/field/resolve.rb +0 -59
  319. data/lib/graphql/field.rb +0 -226
  320. data/lib/graphql/filter.rb +0 -53
  321. data/lib/graphql/float_type.rb +0 -2
  322. data/lib/graphql/function.rb +0 -128
  323. data/lib/graphql/id_type.rb +0 -2
  324. data/lib/graphql/input_object_type.rb +0 -138
  325. data/lib/graphql/int_type.rb +0 -2
  326. data/lib/graphql/interface_type.rb +0 -72
  327. data/lib/graphql/internal_representation/document.rb +0 -27
  328. data/lib/graphql/internal_representation/node.rb +0 -206
  329. data/lib/graphql/internal_representation/print.rb +0 -51
  330. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  331. data/lib/graphql/internal_representation/scope.rb +0 -88
  332. data/lib/graphql/internal_representation/visit.rb +0 -36
  333. data/lib/graphql/internal_representation.rb +0 -7
  334. data/lib/graphql/language/lexer.rl +0 -262
  335. data/lib/graphql/language/parser.y +0 -543
  336. data/lib/graphql/list_type.rb +0 -80
  337. data/lib/graphql/non_null_type.rb +0 -71
  338. data/lib/graphql/object_type.rb +0 -130
  339. data/lib/graphql/query/arguments.rb +0 -189
  340. data/lib/graphql/query/arguments_cache.rb +0 -24
  341. data/lib/graphql/query/executor.rb +0 -52
  342. data/lib/graphql/query/literal_input.rb +0 -136
  343. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  344. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  345. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  346. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  347. data/lib/graphql/query/serial_execution.rb +0 -40
  348. data/lib/graphql/relay/array_connection.rb +0 -83
  349. data/lib/graphql/relay/base_connection.rb +0 -189
  350. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  351. data/lib/graphql/relay/connection_resolve.rb +0 -43
  352. data/lib/graphql/relay/connection_type.rb +0 -41
  353. data/lib/graphql/relay/edge.rb +0 -27
  354. data/lib/graphql/relay/edge_type.rb +0 -19
  355. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  356. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  357. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  358. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  359. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  360. data/lib/graphql/relay/mutation/result.rb +0 -38
  361. data/lib/graphql/relay/mutation.rb +0 -106
  362. data/lib/graphql/relay/node.rb +0 -39
  363. data/lib/graphql/relay/page_info.rb +0 -7
  364. data/lib/graphql/relay/relation_connection.rb +0 -188
  365. data/lib/graphql/relay/type_extensions.rb +0 -32
  366. data/lib/graphql/scalar_type.rb +0 -91
  367. data/lib/graphql/schema/base_64_bp.rb +0 -26
  368. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  369. data/lib/graphql/schema/default_parse_error.rb +0 -10
  370. data/lib/graphql/schema/default_type_error.rb +0 -17
  371. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  372. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
  373. data/lib/graphql/schema/member/instrumentation.rb +0 -131
  374. data/lib/graphql/schema/middleware_chain.rb +0 -82
  375. data/lib/graphql/schema/possible_types.rb +0 -44
  376. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  377. data/lib/graphql/schema/timeout_middleware.rb +0 -88
  378. data/lib/graphql/schema/traversal.rb +0 -228
  379. data/lib/graphql/schema/validation.rb +0 -313
  380. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  381. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  382. data/lib/graphql/static_validation/type_stack.rb +0 -216
  383. data/lib/graphql/string_type.rb +0 -2
  384. data/lib/graphql/subscriptions/instrumentation.rb +0 -79
  385. data/lib/graphql/subscriptions/subscription_root.rb +0 -76
  386. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  387. data/lib/graphql/types/relay/default_relay.rb +0 -27
  388. data/lib/graphql/types/relay/node_field.rb +0 -25
  389. data/lib/graphql/types/relay/nodes_field.rb +0 -27
  390. data/lib/graphql/union_type.rb +0 -115
  391. data/lib/graphql/upgrader/member.rb +0 -937
  392. data/lib/graphql/upgrader/schema.rb +0 -38
@@ -1,1470 +1,348 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  module GraphQL
4
- module Language
5
- module Lexer
6
- if !String.method_defined?(:match?)
7
- using GraphQL::StringMatchBackport
8
- end
9
-
10
- def self.tokenize(query_string)
11
- run_lexer(query_string)
12
- end
13
-
14
- # Replace any escaped unicode or whitespace with the _actual_ characters
15
- # To avoid allocating more strings, this modifies the string passed into it
16
- def self.replace_escaped_characters_in_place(raw_string)
17
- raw_string.gsub!(ESCAPES, ESCAPES_REPLACE)
18
- raw_string.gsub!(UTF_8, &UTF_8_REPLACE)
19
- nil
20
- end
21
-
22
- private
23
-
24
- class << self
25
- attr_accessor :_graphql_lexer_trans_keys
26
- private :_graphql_lexer_trans_keys, :_graphql_lexer_trans_keys=
27
- end
28
- self._graphql_lexer_trans_keys = [
29
- 1, 0, 4, 22, 4, 43, 14, 46, 14, 46, 14, 46, 14, 46, 4, 22, 4, 4, 4, 4, 4, 22, 4, 4, 4, 4, 14, 15, 14, 15, 10, 15, 12, 12, 4, 22, 4, 43, 14, 46, 14, 46, 14, 46, 14, 46, 0, 49, 0, 0, 4, 22, 4, 4, 4, 4, 4, 4, 4, 22, 4, 4, 4, 4, 1, 1, 14, 15, 10, 29, 14, 15, 10, 29, 10, 29, 12, 12, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 14, 46, 4, 4, 0 ,
30
- ]
31
-
32
- class << self
33
- attr_accessor :_graphql_lexer_char_class
34
- private :_graphql_lexer_char_class, :_graphql_lexer_char_class=
35
- end
36
- self._graphql_lexer_char_class = [
37
- 0, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 3, 4, 5, 6, 2, 7, 2, 8, 9, 2, 10, 0, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 2, 2, 17, 2, 2, 18, 19, 19, 19, 19, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 21, 22, 23, 2, 24, 2, 25, 26, 27, 28, 29, 30, 31, 32, 33, 19, 19, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 19, 45, 46, 19, 47, 48, 49, 0 ,
38
- ]
39
-
40
- class << self
41
- attr_accessor :_graphql_lexer_index_offsets
42
- private :_graphql_lexer_index_offsets, :_graphql_lexer_index_offsets=
43
- end
44
- self._graphql_lexer_index_offsets = [
45
- 0, 0, 19, 59, 92, 125, 158, 191, 210, 211, 212, 231, 232, 233, 235, 237, 243, 244, 263, 303, 336, 369, 402, 435, 485, 486, 505, 506, 507, 508, 527, 528, 529, 530, 532, 552, 554, 574, 594, 595, 628, 661, 694, 727, 760, 793, 826, 859, 892, 925, 958, 991, 1024, 1057, 1090, 1123, 1156, 1189, 1222, 1255, 1288, 1321, 1354, 1387, 1420, 1453, 1486, 1519, 1552, 1585, 1618, 1651, 1684, 1717, 1750, 1783, 1816, 1849, 1882, 1915, 1948, 1981, 2014, 2047, 2080, 2113, 2146, 2179, 2212, 2245, 2278, 2311, 2344, 2377, 2410, 2443, 2476, 2509, 2542, 2575, 2608, 2641, 2674, 2707, 2740, 2773, 2806, 2839, 2872, 2905, 2938, 2971, 3004, 3037, 3070, 3103, 3136, 3169, 3202, 3235, 3268, 3301, 3334, 3367, 3400, 3433, 0 ,
46
- ]
47
-
48
- class << self
49
- attr_accessor :_graphql_lexer_indicies
50
- private :_graphql_lexer_indicies, :_graphql_lexer_indicies=
51
- end
52
- self._graphql_lexer_indicies = [
53
- 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 4, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 12, 13, 14, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 15, 16, 17, 17, 19, 19, 20, 20, 8, 8, 17, 17, 21, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24, 22, 25, 25, 25, 25, 25, 25, 25, 25, 22, 25, 25, 25, 25, 25, 25, 25, 25, 22, 25, 25, 25, 22, 25, 25, 25, 22, 25, 25, 25, 25, 25, 22, 25, 25, 25, 22, 25, 22, 26, 27, 27, 25, 25, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 25, 25, 25, 28, 28, 25, 25, 25, 25, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 25, 25, 25, 29, 29, 25, 25, 25, 25, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 22, 22, 25, 25, 25, 22, 22, 25, 25, 25, 25, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 31, 32, 30, 33, 34, 35, 36, 37, 38, 39, 30, 40, 41, 30, 42, 43, 44, 45, 46, 47, 47, 48, 30, 49, 47, 47, 47, 47, 50, 51, 52, 47, 47, 53, 47, 54, 55, 56, 47, 57, 47, 58, 59, 60, 47, 47, 47, 61, 62, 63, 31, 66, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 9, 69, 70, 71, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 72, 13, 73, 42, 43, 20, 20, 75, 74, 17, 17, 74, 74, 74, 74, 76, 74, 74, 74, 74, 74, 74, 74, 74, 76, 17, 17, 20, 20, 77, 77, 19, 19, 77, 77, 77, 77, 76, 77, 77, 77, 77, 77, 77, 77, 77, 76, 20, 20, 75, 74, 43, 43, 74, 74, 74, 74, 76, 74, 74, 74, 74, 74, 74, 74, 74, 76, 78, 47, 47, 8, 8, 8, 47, 47, 8, 8, 8, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 80, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 81, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 83, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 84, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 85, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 86, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 87, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 88, 47, 47, 47, 47, 47, 47, 47, 47, 89, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 90, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 91, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 92, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 93, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 94, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 95, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 96, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 97, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 98, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 99, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 100, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 101, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 102, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 103, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 104, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 105, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 106, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 107, 108, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 109, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 110, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 111, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 112, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 113, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 114, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 115, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 116, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 117, 47, 47, 47, 118, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 119, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 120, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 121, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 122, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 123, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 124, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 125, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 126, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 127, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 128, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 129, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 130, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 131, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 132, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 134, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 135, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 139, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 140, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 143, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 144, 47, 47, 47, 47, 47, 47, 145, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 146, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 147, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 148, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 149, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 150, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 151, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 152, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 153, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 154, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 155, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 156, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 157, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 159, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 160, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 161, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 163, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 164, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 165, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 166, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 167, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 168, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 169, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 47, 79, 79, 79, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 171, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 22, 0 ,
54
- ]
55
-
56
- class << self
57
- attr_accessor :_graphql_lexer_index_defaults
58
- private :_graphql_lexer_index_defaults, :_graphql_lexer_index_defaults=
59
- end
60
- self._graphql_lexer_index_defaults = [
61
- 0, 1, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 8, 18, 8, 0, 22, 25, 25, 25, 25, 25, 30, 64, 1, 67, 68, 68, 9, 9, 9, 35, 65, 74, 77, 77, 74, 65, 8, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 25, 0 ,
62
- ]
63
-
64
- class << self
65
- attr_accessor :_graphql_lexer_trans_cond_spaces
66
- private :_graphql_lexer_trans_cond_spaces, :_graphql_lexer_trans_cond_spaces=
67
- end
68
- self._graphql_lexer_trans_cond_spaces = [
69
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0 ,
70
- ]
71
-
72
- class << self
73
- attr_accessor :_graphql_lexer_cond_targs
74
- private :_graphql_lexer_cond_targs, :_graphql_lexer_cond_targs=
75
- end
76
- self._graphql_lexer_cond_targs = [
77
- 23, 1, 23, 2, 3, 4, 5, 6, 23, 7, 8, 10, 9, 27, 11, 12, 29, 35, 23, 36, 13, 23, 17, 125, 18, 0, 19, 20, 21, 22, 23, 24, 23, 23, 25, 32, 23, 23, 23, 23, 33, 38, 34, 37, 23, 23, 23, 39, 23, 23, 40, 48, 55, 65, 83, 90, 93, 94, 98, 116, 121, 23, 23, 23, 23, 23, 26, 23, 23, 28, 23, 30, 31, 23, 23, 14, 15, 23, 16, 23, 41, 42, 43, 44, 45, 46, 47, 39, 49, 51, 50, 39, 52, 53, 54, 39, 56, 59, 57, 58, 39, 60, 61, 62, 63, 64, 39, 66, 74, 67, 68, 69, 70, 71, 72, 73, 39, 75, 77, 76, 39, 78, 79, 80, 81, 82, 39, 84, 85, 86, 87, 88, 89, 39, 91, 92, 39, 39, 95, 96, 97, 39, 99, 106, 100, 103, 101, 102, 39, 104, 105, 39, 107, 108, 109, 110, 111, 112, 113, 114, 115, 39, 117, 119, 118, 39, 120, 39, 122, 123, 124, 39, 0 ,
78
- ]
79
-
80
- class << self
81
- attr_accessor :_graphql_lexer_cond_actions
82
- private :_graphql_lexer_cond_actions, :_graphql_lexer_cond_actions=
83
- end
84
- self._graphql_lexer_cond_actions = [
85
- 1, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 6, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 11, 0, 12, 13, 14, 0, 15, 16, 17, 18, 0, 14, 19, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 0, 34, 4, 4, 35, 36, 0, 0, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47, 0, 0, 48, 49, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 55, 0, 0, 0, 56, 0 ,
86
- ]
87
-
88
- class << self
89
- attr_accessor :_graphql_lexer_to_state_actions
90
- private :_graphql_lexer_to_state_actions, :_graphql_lexer_to_state_actions=
91
- end
92
- self._graphql_lexer_to_state_actions = [
93
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0 ,
94
- ]
95
-
96
- class << self
97
- attr_accessor :_graphql_lexer_from_state_actions
98
- private :_graphql_lexer_from_state_actions, :_graphql_lexer_from_state_actions=
99
- end
100
- self._graphql_lexer_from_state_actions = [
101
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0 ,
102
- ]
103
-
104
- class << self
105
- attr_accessor :_graphql_lexer_eof_trans
106
- private :_graphql_lexer_eof_trans, :_graphql_lexer_eof_trans=
107
- end
108
- self._graphql_lexer_eof_trans = [
109
- 0, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 19, 9, 1, 0, 0, 0, 0, 0, 0, 0, 65, 66, 68, 69, 69, 69, 69, 69, 74, 66, 75, 78, 78, 75, 66, 9, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0 ,
110
- ]
111
-
112
- class << self
113
- attr_accessor :_graphql_lexer_nfa_targs
114
- private :_graphql_lexer_nfa_targs, :_graphql_lexer_nfa_targs=
115
- end
116
- self._graphql_lexer_nfa_targs = [
117
- 0, 0 ,
118
- ]
119
-
120
- class << self
121
- attr_accessor :_graphql_lexer_nfa_offsets
122
- private :_graphql_lexer_nfa_offsets, :_graphql_lexer_nfa_offsets=
123
- end
124
- self._graphql_lexer_nfa_offsets = [
125
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,
126
- ]
127
-
128
- class << self
129
- attr_accessor :_graphql_lexer_nfa_push_actions
130
- private :_graphql_lexer_nfa_push_actions, :_graphql_lexer_nfa_push_actions=
131
- end
132
- self._graphql_lexer_nfa_push_actions = [
133
- 0, 0 ,
134
- ]
135
-
136
- class << self
137
- attr_accessor :_graphql_lexer_nfa_pop_trans
138
- private :_graphql_lexer_nfa_pop_trans, :_graphql_lexer_nfa_pop_trans=
139
- end
140
- self._graphql_lexer_nfa_pop_trans = [
141
- 0, 0 ,
142
- ]
143
-
144
- class << self
145
- attr_accessor :graphql_lexer_start
146
- end
147
- self.graphql_lexer_start = 23;
148
-
149
- class << self
150
- attr_accessor :graphql_lexer_first_final
151
- end
152
- self.graphql_lexer_first_final = 23;
153
-
154
- class << self
155
- attr_accessor :graphql_lexer_error
156
- end
157
- self.graphql_lexer_error = 0;
158
-
159
- class << self
160
- attr_accessor :graphql_lexer_en_str
161
- end
162
- self.graphql_lexer_en_str = 125;
163
-
164
- class << self
165
- attr_accessor :graphql_lexer_en_main
166
- end
167
- self.graphql_lexer_en_main = 23;
168
-
169
- def self.run_lexer(query_string)
170
- data = query_string.unpack(PACK_DIRECTIVE)
171
- eof = data.length
172
-
173
- # Since `Lexer` is a module, store all lexer state
174
- # in this local variable:
175
- meta = {
176
- line: 1,
177
- col: 1,
178
- data: data,
179
- tokens: [],
180
- previous_token: nil,
181
- }
182
-
183
- p ||= 0
184
- pe ||= data.length
185
-
186
- begin
187
- cs = graphql_lexer_start;
188
- ts = 0;
189
- te = 0;
190
- act = 0;
191
-
192
- end
193
- begin
194
- _trans = 0;
195
- _have = 0;
196
- _cont = 1;
197
- _keys = 0;
198
- _inds = 0;
199
- while ( _cont == 1 )
200
- begin
201
- if ( cs == 0 )
202
- _cont = 0;
203
-
204
- end
205
- _have = 0;
206
- if ( p == pe )
207
- begin
208
- if ( p == eof )
209
- begin
210
- if ( _graphql_lexer_eof_trans[cs] > 0 )
211
- begin
212
- _trans = _graphql_lexer_eof_trans[cs] - 1;
213
- _have = 1;
214
-
215
- end
216
-
217
- end
218
- if ( _have == 0 )
219
- begin
220
-
221
- end
222
-
223
- end
224
-
225
- end
226
-
227
- end
228
- if ( _have == 0 )
229
- _cont = 0;
230
-
231
- end
232
-
233
- end
234
-
235
- end
236
- if ( _cont == 1 )
237
- begin
238
- if ( _have == 0 )
239
- begin
240
- case _graphql_lexer_from_state_actions[cs]
241
- when -2 then
242
- begin
243
- end
244
- when 10 then
245
- begin
246
- begin
247
- begin
248
- ts = p;
249
-
250
- end
251
-
252
- end
253
-
254
-
255
- end
256
- end
257
- _keys = (cs<<1) ;
258
- _inds = _graphql_lexer_index_offsets[cs] ;
259
- if ( ( data[p ].ord) <= 125 && ( data[p ].ord) >= 9 )
260
- begin
261
- _ic = _graphql_lexer_char_class[( data[p ].ord) - 9];
262
- if ( _ic <= _graphql_lexer_trans_keys[_keys+1 ]&& _ic >= _graphql_lexer_trans_keys[_keys ] )
263
- _trans = _graphql_lexer_indicies[_inds + ( _ic - _graphql_lexer_trans_keys[_keys ]) ];
264
-
265
- else
266
- _trans = _graphql_lexer_index_defaults[cs];
267
-
268
- end
269
-
270
- end
271
-
272
- else
273
- begin
274
- _trans = _graphql_lexer_index_defaults[cs];
275
-
276
- end
277
-
278
- end
279
-
280
- end
281
-
282
- end
283
- if ( _cont == 1 )
284
- begin
285
- cs = _graphql_lexer_cond_targs[_trans];
286
- case _graphql_lexer_cond_actions[_trans]
287
- when -2 then
288
- begin
289
- end
290
- when 14 then
291
- begin
292
- begin
293
- begin
294
- te = p+1;
295
-
296
- end
297
-
298
- end
299
-
300
- end
301
- when 8 then
302
- begin
303
- begin
304
- begin
305
- te = p+1;
306
- begin
307
- emit_string(ts, te, meta, block: false)
308
- end
309
-
310
- end
311
-
312
- end
313
-
314
- end
315
- when 28 then
316
- begin
317
- begin
318
- begin
319
- te = p+1;
320
- begin
321
- emit(:RCURLY, ts, te, meta, "}")
322
- end
323
-
324
- end
325
-
326
- end
327
-
328
- end
329
- when 26 then
330
- begin
331
- begin
332
- begin
333
- te = p+1;
334
- begin
335
- emit(:LCURLY, ts, te, meta, "{")
336
- end
337
-
338
- end
339
-
340
- end
341
-
342
- end
343
- when 18 then
344
- begin
345
- begin
346
- begin
347
- te = p+1;
348
- begin
349
- emit(:RPAREN, ts, te, meta, ")")
350
- end
351
-
352
- end
353
-
354
- end
355
-
356
- end
357
- when 17 then
358
- begin
359
- begin
360
- begin
361
- te = p+1;
362
- begin
363
- emit(:LPAREN, ts, te, meta, "(")
364
- end
365
-
366
- end
367
-
368
- end
369
-
370
- end
371
- when 25 then
372
- begin
373
- begin
374
- begin
375
- te = p+1;
376
- begin
377
- emit(:RBRACKET, ts, te, meta, "]")
378
- end
379
-
380
- end
381
-
382
- end
383
-
384
- end
385
- when 24 then
386
- begin
387
- begin
388
- begin
389
- te = p+1;
390
- begin
391
- emit(:LBRACKET, ts, te, meta, "[")
392
- end
393
-
394
- end
395
-
396
- end
397
-
398
- end
399
- when 20 then
400
- begin
401
- begin
402
- begin
403
- te = p+1;
404
- begin
405
- emit(:COLON, ts, te, meta, ":")
406
- end
407
-
408
- end
409
-
410
- end
411
-
412
- end
413
- when 2 then
414
- begin
415
- begin
416
- begin
417
- te = p+1;
418
- begin
419
- emit_string(ts, te, meta, block: false)
420
- end
421
-
422
- end
423
-
424
- end
425
-
426
- end
427
- when 34 then
428
- begin
429
- begin
430
- begin
431
- te = p+1;
432
- begin
433
- emit_string(ts, te, meta, block: true)
434
- end
435
-
436
- end
437
-
438
- end
439
-
440
- end
441
- when 15 then
442
- begin
443
- begin
444
- begin
445
- te = p+1;
446
- begin
447
- emit(:VAR_SIGN, ts, te, meta, "$")
448
- end
449
-
450
- end
451
-
452
- end
453
-
454
- end
455
- when 22 then
456
- begin
457
- begin
458
- begin
459
- te = p+1;
460
- begin
461
- emit(:DIR_SIGN, ts, te, meta, "@")
462
- end
463
-
464
- end
465
-
466
- end
467
-
468
- end
469
- when 7 then
470
- begin
471
- begin
472
- begin
473
- te = p+1;
474
- begin
475
- emit(:ELLIPSIS, ts, te, meta, "...")
476
- end
477
-
478
- end
479
-
480
- end
481
-
482
- end
483
- when 21 then
484
- begin
485
- begin
486
- begin
487
- te = p+1;
488
- begin
489
- emit(:EQUALS, ts, te, meta, "=")
490
- end
491
-
492
- end
493
-
494
- end
495
-
496
- end
497
- when 13 then
498
- begin
499
- begin
500
- begin
501
- te = p+1;
502
- begin
503
- emit(:BANG, ts, te, meta, "!")
504
- end
505
-
506
- end
507
-
508
- end
509
-
510
- end
511
- when 27 then
512
- begin
513
- begin
514
- begin
515
- te = p+1;
516
- begin
517
- emit(:PIPE, ts, te, meta, "|")
518
- end
519
-
520
- end
521
-
522
- end
523
-
524
- end
525
- when 16 then
526
- begin
527
- begin
528
- begin
529
- te = p+1;
530
- begin
531
- emit(:AMP, ts, te, meta, "&")
532
- end
533
-
534
- end
535
-
536
- end
537
-
538
- end
539
- when 12 then
540
- begin
541
- begin
542
- begin
543
- te = p+1;
544
- begin
545
- meta[:line] += 1
546
- meta[:col] = 1
547
-
548
- end
549
-
550
- end
551
-
552
- end
553
-
554
- end
555
- when 11 then
556
- begin
557
- begin
558
- begin
559
- te = p+1;
560
- begin
561
- emit(:UNKNOWN_CHAR, ts, te, meta)
562
- end
563
-
564
- end
565
-
566
- end
567
-
568
- end
569
- when 36 then
570
- begin
571
- begin
572
- begin
573
- te = p;
574
- p = p - 1;
575
- begin
576
- emit(:INT, ts, te, meta)
577
- end
578
-
579
- end
580
-
581
- end
582
-
583
- end
584
- when 37 then
585
- begin
586
- begin
587
- begin
588
- te = p;
589
- p = p - 1;
590
- begin
591
- emit(:FLOAT, ts, te, meta)
592
- end
593
-
594
- end
595
-
596
- end
597
-
598
- end
599
- when 32 then
600
- begin
601
- begin
602
- begin
603
- te = p;
604
- p = p - 1;
605
- begin
606
- emit_string(ts, te, meta, block: false)
607
- end
608
-
609
- end
610
-
611
- end
612
-
613
- end
614
- when 33 then
615
- begin
616
- begin
617
- begin
618
- te = p;
619
- p = p - 1;
620
- begin
621
- emit_string(ts, te, meta, block: true)
622
- end
623
-
624
- end
625
-
626
- end
627
-
628
- end
629
- when 38 then
630
- begin
631
- begin
632
- begin
633
- te = p;
634
- p = p - 1;
635
- begin
636
- emit(:IDENTIFIER, ts, te, meta)
637
- end
638
-
639
- end
640
-
641
- end
642
-
643
- end
644
- when 35 then
645
- begin
646
- begin
647
- begin
648
- te = p;
649
- p = p - 1;
650
- begin
651
- record_comment(ts, te, meta)
652
- end
653
-
654
- end
655
-
656
- end
657
-
658
- end
659
- when 29 then
660
- begin
661
- begin
662
- begin
663
- te = p;
664
- p = p - 1;
665
- begin
666
- meta[:col] += te - ts
667
- end
668
-
669
- end
670
-
671
- end
672
-
673
- end
674
- when 30 then
675
- begin
676
- begin
677
- begin
678
- te = p;
679
- p = p - 1;
680
- begin
681
- emit(:UNKNOWN_CHAR, ts, te, meta)
682
- end
683
-
684
- end
685
-
686
- end
687
-
688
- end
689
- when 5 then
690
- begin
691
- begin
692
- begin
693
- p = ((te))-1;
694
- begin
695
- emit(:INT, ts, te, meta)
696
- end
697
-
698
- end
699
-
700
- end
701
-
702
- end
703
- when 1 then
704
- begin
705
- begin
706
- begin
707
- p = ((te))-1;
708
- begin
709
- emit(:UNKNOWN_CHAR, ts, te, meta)
710
- end
711
-
712
- end
713
-
714
- end
715
-
716
- end
717
- when 3 then
718
- begin
719
- begin
720
- begin
721
- case act
722
- when -2 then
723
- begin
724
- end
725
- when 2 then
726
- begin
727
- p = ((te))-1;
728
- begin
729
- emit(:INT, ts, te, meta)
730
- end
731
-
732
- end
733
- when 3 then
734
- begin
735
- p = ((te))-1;
736
- begin
737
- emit(:FLOAT, ts, te, meta)
738
- end
739
-
740
- end
741
- when 4 then
742
- begin
743
- p = ((te))-1;
744
- begin
745
- emit(:ON, ts, te, meta, "on")
746
- end
747
-
748
- end
749
- when 5 then
750
- begin
751
- p = ((te))-1;
752
- begin
753
- emit(:FRAGMENT, ts, te, meta, "fragment")
754
- end
755
-
756
- end
757
- when 6 then
758
- begin
759
- p = ((te))-1;
760
- begin
761
- emit(:TRUE, ts, te, meta, "true")
762
- end
763
-
764
- end
765
- when 7 then
766
- begin
767
- p = ((te))-1;
768
- begin
769
- emit(:FALSE, ts, te, meta, "false")
770
- end
771
-
772
- end
773
- when 8 then
774
- begin
775
- p = ((te))-1;
776
- begin
777
- emit(:NULL, ts, te, meta, "null")
778
- end
779
-
780
- end
781
- when 9 then
782
- begin
783
- p = ((te))-1;
784
- begin
785
- emit(:QUERY, ts, te, meta, "query")
786
- end
787
-
788
- end
789
- when 10 then
790
- begin
791
- p = ((te))-1;
792
- begin
793
- emit(:MUTATION, ts, te, meta, "mutation")
794
- end
795
-
796
- end
797
- when 11 then
798
- begin
799
- p = ((te))-1;
800
- begin
801
- emit(:SUBSCRIPTION, ts, te, meta, "subscription")
802
- end
803
-
804
- end
805
- when 12 then
806
- begin
807
- p = ((te))-1;
808
- begin
809
- emit(:SCHEMA, ts, te, meta)
810
- end
811
-
812
- end
813
- when 13 then
814
- begin
815
- p = ((te))-1;
816
- begin
817
- emit(:SCALAR, ts, te, meta)
818
- end
819
-
820
- end
821
- when 14 then
822
- begin
823
- p = ((te))-1;
824
- begin
825
- emit(:TYPE, ts, te, meta)
826
- end
827
-
828
- end
829
- when 15 then
830
- begin
831
- p = ((te))-1;
832
- begin
833
- emit(:EXTEND, ts, te, meta)
834
- end
835
-
836
- end
837
- when 16 then
838
- begin
839
- p = ((te))-1;
840
- begin
841
- emit(:IMPLEMENTS, ts, te, meta)
842
- end
843
-
844
- end
845
- when 17 then
846
- begin
847
- p = ((te))-1;
848
- begin
849
- emit(:INTERFACE, ts, te, meta)
850
- end
851
-
852
- end
853
- when 18 then
854
- begin
855
- p = ((te))-1;
856
- begin
857
- emit(:UNION, ts, te, meta)
858
- end
859
-
860
- end
861
- when 19 then
862
- begin
863
- p = ((te))-1;
864
- begin
865
- emit(:ENUM, ts, te, meta)
866
- end
867
-
868
- end
869
- when 20 then
870
- begin
871
- p = ((te))-1;
872
- begin
873
- emit(:INPUT, ts, te, meta)
874
- end
875
-
876
- end
877
- when 21 then
878
- begin
879
- p = ((te))-1;
880
- begin
881
- emit(:DIRECTIVE, ts, te, meta)
882
- end
883
-
884
- end
885
- when 29 then
886
- begin
887
- p = ((te))-1;
888
- begin
889
- emit_string(ts, te, meta, block: false)
890
- end
891
-
892
- end
893
- when 30 then
894
- begin
895
- p = ((te))-1;
896
- begin
897
- emit_string(ts, te, meta, block: true)
898
- end
899
-
900
- end
901
- when 38 then
902
- begin
903
- p = ((te))-1;
904
- begin
905
- emit(:IDENTIFIER, ts, te, meta)
906
- end
907
-
908
-
909
- end
910
- end
911
-
912
- end
913
-
914
-
915
- end
916
-
917
- end
918
- when 19 then
919
- begin
920
- begin
921
- begin
922
- te = p+1;
923
-
924
- end
925
-
926
- end
927
- begin
928
- begin
929
- act = 2;
930
-
931
- end
932
-
933
- end
934
-
935
- end
936
- when 6 then
937
- begin
938
- begin
939
- begin
940
- te = p+1;
941
-
942
- end
943
-
944
- end
945
- begin
946
- begin
947
- act = 3;
948
-
949
- end
950
-
951
- end
952
-
953
- end
954
- when 49 then
955
- begin
956
- begin
957
- begin
958
- te = p+1;
959
-
960
- end
961
-
962
- end
963
- begin
964
- begin
965
- act = 4;
966
-
967
- end
968
-
969
- end
970
-
971
- end
972
- when 43 then
973
- begin
974
- begin
975
- begin
976
- te = p+1;
977
-
978
- end
979
-
980
- end
981
- begin
982
- begin
983
- act = 5;
984
-
985
- end
986
-
987
- end
988
-
989
- end
990
- when 54 then
991
- begin
992
- begin
993
- begin
994
- te = p+1;
995
-
996
- end
997
-
998
- end
999
- begin
1000
- begin
1001
- act = 6;
1002
-
1003
- end
1004
-
1005
- end
1006
-
1007
- end
1008
- when 42 then
1009
- begin
1010
- begin
1011
- begin
1012
- te = p+1;
1013
-
1014
- end
1015
-
1016
- end
1017
- begin
1018
- begin
1019
- act = 7;
1020
-
1021
- end
1022
-
1023
- end
1024
-
1025
- end
1026
- when 48 then
1027
- begin
1028
- begin
1029
- begin
1030
- te = p+1;
1031
-
1032
- end
1033
-
1034
- end
1035
- begin
1036
- begin
1037
- act = 8;
1038
-
1039
- end
1040
-
1041
- end
1042
-
1043
- end
1044
- when 50 then
1045
- begin
1046
- begin
1047
- begin
1048
- te = p+1;
1049
-
1050
- end
1051
-
1052
- end
1053
- begin
1054
- begin
1055
- act = 9;
1056
-
1057
- end
1058
-
1059
- end
1060
-
1061
- end
1062
- when 47 then
1063
- begin
1064
- begin
1065
- begin
1066
- te = p+1;
1067
-
1068
- end
1069
-
1070
- end
1071
- begin
1072
- begin
1073
- act = 10;
1074
-
1075
- end
1076
-
1077
- end
1078
-
1079
- end
1080
- when 53 then
1081
- begin
1082
- begin
1083
- begin
1084
- te = p+1;
1085
-
1086
- end
1087
-
1088
- end
1089
- begin
1090
- begin
1091
- act = 11;
1092
-
1093
- end
1094
-
1095
- end
1096
-
1097
- end
1098
- when 52 then
1099
- begin
1100
- begin
1101
- begin
1102
- te = p+1;
1103
-
1104
- end
1105
-
1106
- end
1107
- begin
1108
- begin
1109
- act = 12;
1110
-
1111
- end
1112
-
1113
- end
1114
-
1115
- end
1116
- when 51 then
1117
- begin
1118
- begin
1119
- begin
1120
- te = p+1;
1121
-
1122
- end
1123
-
1124
- end
1125
- begin
1126
- begin
1127
- act = 13;
1128
-
1129
- end
1130
-
1131
- end
1132
-
1133
- end
1134
- when 55 then
1135
- begin
1136
- begin
1137
- begin
1138
- te = p+1;
1139
-
1140
- end
1141
-
1142
- end
1143
- begin
1144
- begin
1145
- act = 14;
1146
-
1147
- end
1148
-
1149
- end
1150
-
1151
- end
1152
- when 41 then
1153
- begin
1154
- begin
1155
- begin
1156
- te = p+1;
1157
-
1158
- end
1159
-
1160
- end
1161
- begin
1162
- begin
1163
- act = 15;
1164
-
1165
- end
1166
-
1167
- end
1168
-
1169
- end
1170
- when 44 then
1171
- begin
1172
- begin
1173
- begin
1174
- te = p+1;
1175
-
1176
- end
1177
-
1178
- end
1179
- begin
1180
- begin
1181
- act = 16;
1182
-
1183
- end
1184
-
1185
- end
1186
-
1187
- end
1188
- when 46 then
1189
- begin
1190
- begin
1191
- begin
1192
- te = p+1;
1193
-
1194
- end
1195
-
1196
- end
1197
- begin
1198
- begin
1199
- act = 17;
1200
-
1201
- end
1202
-
1203
- end
1204
-
1205
- end
1206
- when 56 then
1207
- begin
1208
- begin
1209
- begin
1210
- te = p+1;
1211
-
1212
- end
1213
-
1214
- end
1215
- begin
1216
- begin
1217
- act = 18;
1218
-
1219
- end
1220
-
1221
- end
1222
-
1223
- end
1224
- when 40 then
1225
- begin
1226
- begin
1227
- begin
1228
- te = p+1;
1229
-
1230
- end
1231
-
1232
- end
1233
- begin
1234
- begin
1235
- act = 19;
1236
-
1237
- end
1238
-
1239
- end
1240
-
1241
- end
1242
- when 45 then
1243
- begin
1244
- begin
1245
- begin
1246
- te = p+1;
1247
-
1248
- end
1249
-
1250
- end
1251
- begin
1252
- begin
1253
- act = 20;
1254
-
1255
- end
1256
-
1257
- end
1258
-
1259
- end
1260
- when 39 then
1261
- begin
1262
- begin
1263
- begin
1264
- te = p+1;
1265
-
1266
- end
1267
-
1268
- end
1269
- begin
1270
- begin
1271
- act = 21;
1272
-
1273
- end
1274
-
1275
- end
1276
-
1277
- end
1278
- when 31 then
1279
- begin
1280
- begin
1281
- begin
1282
- te = p+1;
1283
-
1284
- end
1285
-
1286
- end
1287
- begin
1288
- begin
1289
- act = 29;
1290
-
1291
- end
1292
-
1293
- end
1294
-
1295
- end
1296
- when 4 then
1297
- begin
1298
- begin
1299
- begin
1300
- te = p+1;
1301
-
1302
- end
1303
-
1304
- end
1305
- begin
1306
- begin
1307
- act = 30;
1308
-
1309
- end
1310
-
1311
- end
1312
-
1313
- end
1314
- when 23 then
1315
- begin
1316
- begin
1317
- begin
1318
- te = p+1;
1319
-
1320
- end
1321
-
1322
- end
1323
- begin
1324
- begin
1325
- act = 38;
1326
-
1327
- end
1328
-
1329
- end
1330
-
1331
-
1332
- end
1333
- end
1334
- case _graphql_lexer_to_state_actions[cs]
1335
- when -2 then
1336
- begin
1337
- end
1338
- when 9 then
1339
- begin
1340
- begin
1341
- begin
1342
- ts = 0;
1343
-
1344
- end
1345
-
1346
- end
1347
-
1348
-
1349
- end
1350
- end
1351
- if ( cs == 0 )
1352
- _cont = 0;
1353
-
1354
- end
1355
- if ( _cont == 1 )
1356
- p += 1;
1357
-
1358
- end
1359
-
1360
- end
1361
-
1362
- end
1363
-
1364
- end
1365
-
1366
- end
1367
-
1368
- end
1369
-
1370
- end
1371
-
1372
- end
1373
- meta[:tokens]
1374
- end
1375
-
1376
- def self.record_comment(ts, te, meta)
1377
- token = GraphQL::Language::Token.new(
1378
- :COMMENT,
1379
- meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
1380
- meta[:line],
1381
- meta[:col],
1382
- meta[:previous_token],
1383
- )
1384
-
1385
- meta[:previous_token] = token
1386
-
1387
- meta[:col] += te - ts
1388
- end
1389
-
1390
- def self.emit(token_name, ts, te, meta, token_value = nil)
1391
- token_value ||= meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING)
1392
- meta[:tokens] << token = GraphQL::Language::Token.new(
1393
- token_name,
1394
- token_value,
1395
- meta[:line],
1396
- meta[:col],
1397
- meta[:previous_token],
1398
- )
1399
- meta[:previous_token] = token
1400
- # Bump the column counter for the next token
1401
- meta[:col] += te - ts
1402
- end
1403
-
1404
- ESCAPES = /\\["\\\/bfnrt]/
1405
- ESCAPES_REPLACE = {
1406
- '\\"' => '"',
1407
- "\\\\" => "\\",
1408
- "\\/" => '/',
1409
- "\\b" => "\b",
1410
- "\\f" => "\f",
1411
- "\\n" => "\n",
1412
- "\\r" => "\r",
1413
- "\\t" => "\t",
1414
- }
1415
-
1416
- UTF_8 = /\\u[\dAa-f]{4}/i
1417
- UTF_8_REPLACE = ->(m) { [m[-4..-1].to_i(16)].pack('U'.freeze) }
1418
-
1419
- VALID_STRING = /\A(?:[^\\]|#{ESCAPES}|#{UTF_8})*\z/o
1420
-
1421
- PACK_DIRECTIVE = "c*"
1422
- UTF_8_ENCODING = "UTF-8"
1423
-
1424
- def self.emit_string(ts, te, meta, block:)
1425
- quotes_length = block ? 3 : 1
1426
- value = meta[:data][ts + quotes_length, te - ts - 2 * quotes_length].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING) || ''
1427
- line_incr = 0
1428
- if block && !value.empty?
1429
- line_incr = value.count("\n")
1430
- value = GraphQL::Language::BlockString.trim_whitespace(value)
1431
- end
1432
- # TODO: replace with `String#match?` when we support only Ruby 2.4+
1433
- # (It's faster: https://bugs.ruby-lang.org/issues/8110)
1434
- if !value.valid_encoding? || !value.match?(VALID_STRING)
1435
- meta[:tokens] << token = GraphQL::Language::Token.new(
1436
- :BAD_UNICODE_ESCAPE,
1437
- value,
1438
- meta[:line],
1439
- meta[:col],
1440
- meta[:previous_token],
1441
- )
1442
- else
1443
- replace_escaped_characters_in_place(value)
1444
-
1445
- if !value.valid_encoding?
1446
- meta[:tokens] << token = GraphQL::Language::Token.new(
1447
- :BAD_UNICODE_ESCAPE,
1448
- value,
1449
- meta[:line],
1450
- meta[:col],
1451
- meta[:previous_token],
1452
- )
1453
- else
1454
- meta[:tokens] << token = GraphQL::Language::Token.new(
1455
- :STRING,
1456
- value,
1457
- meta[:line],
1458
- meta[:col],
1459
- meta[:previous_token],
1460
- )
1461
- end
1462
- end
1463
-
1464
- meta[:previous_token] = token
1465
- meta[:col] += te - ts
1466
- meta[:line] += line_incr
1467
- end
1468
- end
1469
- end
3
+ module Language
4
+
5
+ class Lexer
6
+ def initialize(graphql_str, filename: nil)
7
+ if !(graphql_str.encoding == Encoding::UTF_8 || graphql_str.ascii_only?)
8
+ graphql_str = graphql_str.dup.force_encoding(Encoding::UTF_8)
9
+ end
10
+ @string = graphql_str
11
+ @filename = filename
12
+ @scanner = StringScanner.new(graphql_str)
13
+ @pos = nil
14
+ end
15
+
16
+ def eos?
17
+ @scanner.eos?
18
+ end
19
+
20
+ attr_reader :pos
21
+
22
+ def advance
23
+ @scanner.skip(IGNORE_REGEXP)
24
+ return false if @scanner.eos?
25
+ @pos = @scanner.pos
26
+ next_byte = @string.getbyte(@pos)
27
+ next_byte_is_for = FIRST_BYTES[next_byte]
28
+ case next_byte_is_for
29
+ when ByteFor::PUNCTUATION
30
+ @scanner.pos += 1
31
+ PUNCTUATION_NAME_FOR_BYTE[next_byte]
32
+ when ByteFor::NAME
33
+ if len = @scanner.skip(KEYWORD_REGEXP)
34
+ case len
35
+ when 2
36
+ :ON
37
+ when 12
38
+ :SUBSCRIPTION
39
+ else
40
+ pos = @pos
41
+
42
+ # Use bytes 2 and 3 as a unique identifier for this keyword
43
+ bytes = (@string.getbyte(pos + 2) << 8) | @string.getbyte(pos + 1)
44
+ KEYWORD_BY_TWO_BYTES[_hash(bytes)]
45
+ end
46
+ else
47
+ @scanner.skip(IDENTIFIER_REGEXP)
48
+ :IDENTIFIER
49
+ end
50
+ when ByteFor::IDENTIFIER
51
+ @scanner.skip(IDENTIFIER_REGEXP)
52
+ :IDENTIFIER
53
+ when ByteFor::NUMBER
54
+ @scanner.skip(NUMERIC_REGEXP)
55
+ # Check for a matched decimal:
56
+ @scanner[1] ? :FLOAT : :INT
57
+ when ByteFor::ELLIPSIS
58
+ if @string.getbyte(@pos + 1) != 46 || @string.getbyte(@pos + 2) != 46
59
+ raise_parse_error("Expected `...`, actual: #{@string[@pos..@pos + 2].inspect}")
60
+ end
61
+ @scanner.pos += 3
62
+ :ELLIPSIS
63
+ when ByteFor::STRING
64
+ if @scanner.skip(BLOCK_STRING_REGEXP) || @scanner.skip(QUOTED_STRING_REGEXP)
65
+ :STRING
66
+ else
67
+ raise_parse_error("Expected string or block string, but it was malformed")
68
+ end
69
+ else
70
+ @scanner.pos += 1
71
+ :UNKNOWN_CHAR
72
+ end
73
+ rescue ArgumentError => err
74
+ if err.message == "invalid byte sequence in UTF-8"
75
+ raise_parse_error("Parse error on bad Unicode escape sequence", nil, nil)
76
+ end
77
+ end
78
+
79
+ def token_value
80
+ @string.byteslice(@scanner.pos - @scanner.matched_size, @scanner.matched_size)
81
+ rescue StandardError => err
82
+ raise GraphQL::Error, "(token_value failed: #{err.class}: #{err.message})"
83
+ end
84
+
85
+ def debug_token_value(token_name)
86
+ if token_name && Lexer::Punctuation.const_defined?(token_name)
87
+ Lexer::Punctuation.const_get(token_name)
88
+ elsif token_name == :ELLIPSIS
89
+ "..."
90
+ elsif token_name == :STRING
91
+ string_value
92
+ elsif @scanner.matched_size.nil?
93
+ @scanner.peek(1)
94
+ else
95
+ token_value
96
+ end
97
+ end
98
+
99
+ ESCAPES = /\\["\\\/bfnrt]/
100
+ ESCAPES_REPLACE = {
101
+ '\\"' => '"',
102
+ "\\\\" => "\\",
103
+ "\\/" => '/',
104
+ "\\b" => "\b",
105
+ "\\f" => "\f",
106
+ "\\n" => "\n",
107
+ "\\r" => "\r",
108
+ "\\t" => "\t",
109
+ }
110
+ UTF_8 = /\\u(?:([\dAa-f]{4})|\{([\da-f]{4,})\})(?:\\u([\dAa-f]{4}))?/i
111
+ VALID_STRING = /\A(?:[^\\]|#{ESCAPES}|#{UTF_8})*\z/o
112
+
113
+ def string_value
114
+ str = token_value
115
+ is_block = str.start_with?('"""')
116
+ if is_block
117
+ str.gsub!(/\A"""|"""\z/, '')
118
+ else
119
+ str.gsub!(/\A"|"\z/, '')
120
+ end
121
+
122
+ if is_block
123
+ str = Language::BlockString.trim_whitespace(str)
124
+ end
125
+
126
+ if !str.valid_encoding? || !str.match?(VALID_STRING)
127
+ raise_parse_error("Bad unicode escape in #{str.inspect}")
128
+ else
129
+ Lexer.replace_escaped_characters_in_place(str)
130
+
131
+ if !str.valid_encoding?
132
+ raise_parse_error("Bad unicode escape in #{str.inspect}")
133
+ else
134
+ str
135
+ end
136
+ end
137
+ end
138
+
139
+ def line_number
140
+ @scanner.string[0..@pos].count("\n") + 1
141
+ end
142
+
143
+ def column_number
144
+ @scanner.string[0..@pos].split("\n").last.length
145
+ end
146
+
147
+ def raise_parse_error(message, line = line_number, col = column_number)
148
+ raise GraphQL::ParseError.new(message, line, col, @string, filename: @filename)
149
+ end
150
+
151
+ IGNORE_REGEXP = %r{
152
+ (?:
153
+ [, \c\r\n\t]+ |
154
+ \#.*$
155
+ )*
156
+ }x
157
+ IDENTIFIER_REGEXP = /[_A-Za-z][_0-9A-Za-z]*/
158
+ INT_REGEXP = /-?(?:[0]|[1-9][0-9]*)/
159
+ FLOAT_DECIMAL_REGEXP = /[.][0-9]+/
160
+ FLOAT_EXP_REGEXP = /[eE][+-]?[0-9]+/
161
+ NUMERIC_REGEXP = /#{INT_REGEXP}(#{FLOAT_DECIMAL_REGEXP}#{FLOAT_EXP_REGEXP}|#{FLOAT_DECIMAL_REGEXP}|#{FLOAT_EXP_REGEXP})?/
162
+
163
+ KEYWORDS = [
164
+ "on",
165
+ "fragment",
166
+ "true",
167
+ "false",
168
+ "null",
169
+ "query",
170
+ "mutation",
171
+ "subscription",
172
+ "schema",
173
+ "scalar",
174
+ "type",
175
+ "extend",
176
+ "implements",
177
+ "interface",
178
+ "union",
179
+ "enum",
180
+ "input",
181
+ "directive",
182
+ "repeatable"
183
+ ].freeze
184
+
185
+ KEYWORD_REGEXP = /#{Regexp.union(KEYWORDS.sort)}\b/
186
+ KEYWORD_BY_TWO_BYTES = [
187
+ :INTERFACE,
188
+ :MUTATION,
189
+ :EXTEND,
190
+ :FALSE,
191
+ :ENUM,
192
+ :TRUE,
193
+ :NULL,
194
+ nil,
195
+ nil,
196
+ nil,
197
+ nil,
198
+ nil,
199
+ nil,
200
+ nil,
201
+ :QUERY,
202
+ nil,
203
+ nil,
204
+ :REPEATABLE,
205
+ :IMPLEMENTS,
206
+ :INPUT,
207
+ :TYPE,
208
+ :SCHEMA,
209
+ nil,
210
+ nil,
211
+ nil,
212
+ :DIRECTIVE,
213
+ :UNION,
214
+ nil,
215
+ nil,
216
+ :SCALAR,
217
+ nil,
218
+ :FRAGMENT
219
+ ]
220
+
221
+ # This produces a unique integer for bytes 2 and 3 of each keyword string
222
+ # See https://tenderlovemaking.com/2023/09/02/fast-tokenizers-with-stringscanner.html
223
+ def _hash key
224
+ (key * 18592990) >> 27 & 0x1f
225
+ end
226
+
227
+ module Punctuation
228
+ LCURLY = '{'
229
+ RCURLY = '}'
230
+ LPAREN = '('
231
+ RPAREN = ')'
232
+ LBRACKET = '['
233
+ RBRACKET = ']'
234
+ COLON = ':'
235
+ VAR_SIGN = '$'
236
+ DIR_SIGN = '@'
237
+ EQUALS = '='
238
+ BANG = '!'
239
+ PIPE = '|'
240
+ AMP = '&'
241
+ end
242
+
243
+ # A sparse array mapping the bytes for each punctuation
244
+ # to a symbol name for that punctuation
245
+ PUNCTUATION_NAME_FOR_BYTE = Punctuation.constants.each_with_object([]) { |name, arr|
246
+ punct = Punctuation.const_get(name)
247
+ arr[punct.ord] = name
248
+ }
249
+
250
+ QUOTE = '"'
251
+ UNICODE_DIGIT = /[0-9A-Za-z]/
252
+ FOUR_DIGIT_UNICODE = /#{UNICODE_DIGIT}{4}/
253
+ N_DIGIT_UNICODE = %r{#{Punctuation::LCURLY}#{UNICODE_DIGIT}{4,}#{Punctuation::RCURLY}}x
254
+ UNICODE_ESCAPE = %r{\\u(?:#{FOUR_DIGIT_UNICODE}|#{N_DIGIT_UNICODE})}
255
+ # # https://graphql.github.io/graphql-spec/June2018/#sec-String-Value
256
+ STRING_ESCAPE = %r{[\\][\\/bfnrt]}
257
+ BLOCK_QUOTE = '"""'
258
+ ESCAPED_QUOTE = /\\"/;
259
+ STRING_CHAR = /#{ESCAPED_QUOTE}|[^"\\]|#{UNICODE_ESCAPE}|#{STRING_ESCAPE}/
260
+ QUOTED_STRING_REGEXP = %r{#{QUOTE} (?:#{STRING_CHAR})* #{QUOTE}}x
261
+ BLOCK_STRING_REGEXP = %r{
262
+ #{BLOCK_QUOTE}
263
+ (?: [^"\\] | # Any characters that aren't a quote or slash
264
+ (?<!") ["]{1,2} (?!") | # Any quotes that don't have quotes next to them
265
+ \\"{0,3}(?!") | # A slash followed by <= 3 quotes that aren't followed by a quote
266
+ \\ | # A slash
267
+ "{1,2}(?!") # 1 or 2 " followed by something that isn't a quote
268
+ )*
269
+ (?:"")?
270
+ #{BLOCK_QUOTE}
271
+ }xm
272
+
273
+ # Use this array to check, for a given byte that will start a token,
274
+ # what kind of token might it start?
275
+ FIRST_BYTES = Array.new(255)
276
+
277
+ module ByteFor
278
+ NUMBER = 0 # int or float
279
+ NAME = 1 # identifier or keyword
280
+ STRING = 2
281
+ ELLIPSIS = 3
282
+ IDENTIFIER = 4 # identifier, *not* a keyword
283
+ PUNCTUATION = 5
284
+ end
285
+
286
+ (0..9).each { |i| FIRST_BYTES[i.to_s.ord] = ByteFor::NUMBER }
287
+ FIRST_BYTES["-".ord] = ByteFor::NUMBER
288
+ # Some of these may be overwritten below, if keywords start with the same character
289
+ ("A".."Z").each { |char| FIRST_BYTES[char.ord] = ByteFor::IDENTIFIER }
290
+ ("a".."z").each { |char| FIRST_BYTES[char.ord] = ByteFor::IDENTIFIER }
291
+ FIRST_BYTES['_'.ord] = ByteFor::IDENTIFIER
292
+ FIRST_BYTES['.'.ord] = ByteFor::ELLIPSIS
293
+ FIRST_BYTES['"'.ord] = ByteFor::STRING
294
+ KEYWORDS.each { |kw| FIRST_BYTES[kw.getbyte(0)] = ByteFor::NAME }
295
+ Punctuation.constants.each do |punct_name|
296
+ punct = Punctuation.const_get(punct_name)
297
+ FIRST_BYTES[punct.ord] = ByteFor::PUNCTUATION
298
+ end
299
+
300
+
301
+ # Replace any escaped unicode or whitespace with the _actual_ characters
302
+ # To avoid allocating more strings, this modifies the string passed into it
303
+ def self.replace_escaped_characters_in_place(raw_string)
304
+ raw_string.gsub!(ESCAPES, ESCAPES_REPLACE)
305
+ raw_string.gsub!(UTF_8) do |_matched_str|
306
+ codepoint_1 = ($1 || $2).to_i(16)
307
+ codepoint_2 = $3
308
+
309
+ if codepoint_2
310
+ codepoint_2 = codepoint_2.to_i(16)
311
+ if (codepoint_1 >= 0xD800 && codepoint_1 <= 0xDBFF) && # leading surrogate
312
+ (codepoint_2 >= 0xDC00 && codepoint_2 <= 0xDFFF) # trailing surrogate
313
+ # A surrogate pair
314
+ combined = ((codepoint_1 - 0xD800) * 0x400) + (codepoint_2 - 0xDC00) + 0x10000
315
+ [combined].pack('U'.freeze)
316
+ else
317
+ # Two separate code points
318
+ [codepoint_1].pack('U'.freeze) + [codepoint_2].pack('U'.freeze)
319
+ end
320
+ else
321
+ [codepoint_1].pack('U'.freeze)
322
+ end
323
+ end
324
+ nil
325
+ end
326
+
327
+ # This is not used during parsing because the parser
328
+ # doesn't actually need tokens.
329
+ def self.tokenize(string)
330
+ lexer = GraphQL::Language::Lexer.new(string)
331
+ tokens = []
332
+ prev_token = nil
333
+ while (token_name = lexer.advance)
334
+ new_token = [
335
+ token_name,
336
+ lexer.line_number,
337
+ lexer.column_number,
338
+ lexer.debug_token_value(token_name),
339
+ prev_token,
340
+ ]
341
+ tokens << new_token
342
+ prev_token = new_token
343
+ end
344
+ tokens
345
+ end
346
+ end
347
+ end
1470
348
  end