graphql 1.12.12 → 2.2.14

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 (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