graphql 2.0.18 → 2.0.20

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.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f43155bcb78f5842e409f8c001b7d031578604d2e7d962457cc7fd92e1d68d4
4
- data.tar.gz: e86aa4c3071f63d605f9e2e3833ba967282f906c3ff0e1252db71b063fe69cd9
3
+ metadata.gz: 7b2e44f17a5ec90e92b165e06f843931585a3775096c7404966a51703a65fdb9
4
+ data.tar.gz: b79ce54109470f38f6cd50cd8ff79af7beaefbea4564ec7e876c3a58ffd0249f
5
5
  SHA512:
6
- metadata.gz: 79c16409d45a11f1bba6623e1d97877984bfe10577ab5241ecd3ebe515fefb6cd42940f336640c60cf19f94c61d902692f26b0497699e4ca9e912f2532fa6168
7
- data.tar.gz: a9f5e954d7988a440c083cd0afbb6f5ff72ab77d30d4fab708f9f501d2ce8af49b13fde571e50788c9ba79fd943d38e4c207e4ac9ddccd93c80d2c0f9ef8f997
6
+ metadata.gz: 59c16753d159b0d25862dfa72e84a72037e19da288db049297d90ede697d4b4eb0456b5bd9b65b7517ef1f375a94c9d0d3cb246a34f5b6100fc347665f94f688
7
+ data.tar.gz: 96fb931b54905ee12fd04ac76847e7f20c69f66023b6241e39e69b6de862b7cb8b7ff2dc4db53725e11b0625c55c2c73fbe070a4278ce6eb839a99c2847ac306
@@ -599,16 +599,6 @@ module GraphQL
599
599
  path
600
600
  end
601
601
 
602
- def current_depth
603
- ti = thread_info
604
- depth = 1
605
- result = ti[:current_result]
606
- while (result = result.graphql_parent)
607
- depth += 1
608
- end
609
- depth
610
- end
611
-
612
602
  HALT = Object.new
613
603
  def continue_value(value, parent_type, field, is_non_null, ast_node, result_name, selection_result) # rubocop:disable Metrics/ParameterLists
614
604
  case value
@@ -925,8 +915,9 @@ module GraphQL
925
915
  # @return [GraphQL::Execution::Lazy, Object] If loading `object` will be deferred, it's a wrapper over it.
926
916
  def after_lazy(lazy_obj, owner:, field:, owner_object:, arguments:, ast_node:, result:, result_name:, eager: false, trace: true, &block)
927
917
  if lazy?(lazy_obj)
918
+ orig_result = result
928
919
  lazy = GraphQL::Execution::Lazy.new(field: field) do
929
- set_all_interpreter_context(owner_object, field, arguments, result_name, result)
920
+ set_all_interpreter_context(owner_object, field, arguments, result_name, orig_result)
930
921
  # Wrap the execution of _this_ method with tracing,
931
922
  # but don't wrap the continuation below
932
923
  inner_obj = begin
@@ -953,6 +944,11 @@ module GraphQL
953
944
  lazy.value
954
945
  else
955
946
  set_result(result, result_name, lazy)
947
+ current_depth = 0
948
+ while result
949
+ current_depth += 1
950
+ result = result.graphql_parent
951
+ end
956
952
  @lazies_at_depth[current_depth] << lazy
957
953
  lazy
958
954
  end
@@ -129,13 +129,13 @@ module GraphQL
129
129
  end
130
130
 
131
131
  def self.emit(token_name, ts, te, meta, token_value)
132
- meta[:tokens] << token = GraphQL::Language::Token.new(
132
+ meta[:tokens] << token = [
133
133
  token_name,
134
- token_value,
135
134
  meta[:line],
136
135
  meta[:col],
136
+ token_value,
137
137
  meta[:previous_token],
138
- )
138
+ ]
139
139
  meta[:previous_token] = token
140
140
  # Bump the column counter for the next token
141
141
  meta[:col] += te - ts
@@ -168,13 +168,13 @@ module GraphQL
168
168
  end
169
169
 
170
170
  def self.record_comment(ts, te, meta, str)
171
- token = GraphQL::Language::Token.new(
171
+ token = [
172
172
  :COMMENT,
173
- str,
174
173
  meta[:line],
175
174
  meta[:col],
175
+ str,
176
176
  meta[:previous_token],
177
- )
177
+ ]
178
178
 
179
179
  meta[:previous_token] = token
180
180
 
@@ -2,6 +2,7 @@
2
2
  module GraphQL
3
3
  module Language
4
4
  module Nodes
5
+ NONE = [].freeze
5
6
  # {AbstractNode} is the base class for all nodes in a GraphQL AST.
6
7
  #
7
8
  # It provides some APIs for working with ASTs:
@@ -9,6 +10,7 @@ module GraphQL
9
10
  # - `scalars` returns all scalar (Ruby) values attached to this one. Used for comparing nodes.
10
11
  # - `to_query_string` turns an AST node into a GraphQL string
11
12
  class AbstractNode
13
+
12
14
  module DefinitionNode
13
15
  # This AST node's {#line} returns the first line, which may be the description.
14
16
  # @return [Integer] The first line of the definition (not the description)
@@ -28,8 +30,11 @@ module GraphQL
28
30
  def initialize(options = {})
29
31
  if options.key?(:position_source)
30
32
  position_source = options.delete(:position_source)
31
- @line = position_source.line
32
- @col = position_source.col
33
+ @line = position_source[1]
34
+ @col = position_source[2]
35
+ else
36
+ @line = options.delete(:line)
37
+ @col = options.delete(:col)
33
38
  end
34
39
 
35
40
  @filename = options.delete(:filename)
@@ -277,10 +282,17 @@ module GraphQL
277
282
  assignments = scalar_method_names.map { |m| "@#{m} = #{m}"} +
278
283
  @children_methods.keys.map { |m| "@#{m} = #{m}.freeze" }
279
284
 
285
+ keywords = scalar_method_names.map { |m| "#{m}: #{m}"} +
286
+ @children_methods.keys.map { |m| "#{m}: #{m}" }
287
+
280
288
  module_eval <<-RUBY, __FILE__, __LINE__
281
289
  def initialize_node #{arguments.join(", ")}
282
290
  #{assignments.join("\n")}
283
291
  end
292
+
293
+ def self.from_a(filename, line, col, #{(scalar_method_names + @children_methods.keys).join(", ")})
294
+ self.new(filename: filename, line: line, col: col, #{keywords.join(", ")})
295
+ end
284
296
  RUBY
285
297
  end
286
298
  end
@@ -328,8 +340,8 @@ module GraphQL
328
340
  attr_reader :description
329
341
  scalar_methods :name, :repeatable
330
342
  children_methods(
331
- locations: Nodes::DirectiveLocation,
332
343
  arguments: Nodes::Argument,
344
+ locations: Nodes::DirectiveLocation,
333
345
  )
334
346
  end
335
347
 
@@ -343,8 +355,6 @@ module GraphQL
343
355
 
344
356
  # A single selection in a GraphQL query.
345
357
  class Field < AbstractNode
346
- NONE = [].freeze
347
-
348
358
  scalar_methods :name, :alias
349
359
  children_methods({
350
360
  arguments: GraphQL::Language::Nodes::Argument,
@@ -364,6 +374,10 @@ module GraphQL
364
374
  @alias = attributes[:alias]
365
375
  end
366
376
 
377
+ def self.from_a(filename, line, col, graphql_alias, name, arguments, directives, selections) # rubocop:disable Metrics/ParameterLists
378
+ self.new(filename: filename, line: line, col: col, alias: graphql_alias, name: name, arguments: arguments, directives: directives, selections: selections)
379
+ end
380
+
367
381
  # Override this because default is `:fields`
368
382
  self.children_method_name = :selections
369
383
  end
@@ -382,6 +396,10 @@ module GraphQL
382
396
  @selections = selections
383
397
  end
384
398
 
399
+ def self.from_a(filename, line, col, name, type, directives, selections)
400
+ self.new(filename: filename, line: line, col: col, name: name, type: type, directives: directives, selections: selections)
401
+ end
402
+
385
403
  scalar_methods :name, :type
386
404
  children_methods({
387
405
  selections: GraphQL::Language::Nodes::Field,
@@ -406,8 +424,8 @@ module GraphQL
406
424
  class InlineFragment < AbstractNode
407
425
  scalar_methods :type
408
426
  children_methods({
409
- selections: GraphQL::Language::Nodes::Field,
410
427
  directives: GraphQL::Language::Nodes::Directive,
428
+ selections: GraphQL::Language::Nodes::Field,
411
429
  })
412
430
 
413
431
  self.children_method_name = :selections
@@ -486,8 +504,8 @@ module GraphQL
486
504
  scalar_methods :operation_type, :name
487
505
  children_methods({
488
506
  variables: GraphQL::Language::Nodes::VariableDefinition,
489
- selections: GraphQL::Language::Nodes::Field,
490
507
  directives: GraphQL::Language::Nodes::Directive,
508
+ selections: GraphQL::Language::Nodes::Field,
491
509
  })
492
510
 
493
511
  # @!attribute variables
@@ -593,8 +611,8 @@ module GraphQL
593
611
  attr_reader :description
594
612
  scalar_methods :name, :type
595
613
  children_methods({
596
- directives: GraphQL::Language::Nodes::Directive,
597
614
  arguments: GraphQL::Language::Nodes::InputValueDefinition,
615
+ directives: GraphQL::Language::Nodes::Directive,
598
616
  })
599
617
  self.children_method_name = :fields
600
618
 
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.6.0
3
+ # This file is automatically generated by Racc 1.6.2
4
4
  # from Racc grammar file "".
5
5
  #
6
6
 
@@ -28,7 +28,7 @@ def parse_document
28
28
  @document ||= begin
29
29
  # Break the string into tokens
30
30
  @trace.lex(query_string: @query_string) do
31
- @tokens ||= GraphQL.scan(@query_string)
31
+ @tokens ||= GraphQL::Language::Lexer.tokenize(@query_string)
32
32
  end
33
33
  # From the tokens, build an AST
34
34
  @trace.parse(query_string: @query_string) do
@@ -66,7 +66,7 @@ def next_token
66
66
  if lexer_token.nil?
67
67
  nil
68
68
  else
69
- @reused_next_token[0] = lexer_token.name
69
+ @reused_next_token[0] = lexer_token[0]
70
70
  @reused_next_token[1] = lexer_token
71
71
  @reused_next_token
72
72
  end
@@ -77,13 +77,13 @@ def get_description(token)
77
77
 
78
78
  loop do
79
79
  prev_token = token
80
- token = token.prev_token
80
+ token = token[4]
81
81
 
82
82
  break if token.nil?
83
- break if token.name != :COMMENT
84
- break if prev_token.line != token.line + 1
83
+ break if token[0] != :COMMENT
84
+ break if prev_token[1] != token[1] + 1
85
85
 
86
- comments.unshift(token.to_s.sub(/^#\s*/, ""))
86
+ comments.unshift(token[3].sub(/^#\s*/, ""))
87
87
  end
88
88
 
89
89
  return nil if comments.empty?
@@ -99,11 +99,12 @@ def on_error(parser_token_id, lexer_token, vstack)
99
99
  if parser_token_name.nil?
100
100
  raise GraphQL::ParseError.new("Parse Error on unknown token: {token_id: #{parser_token_id}, lexer_token: #{lexer_token}} from #{@query_string}", nil, nil, @query_string, filename: @filename)
101
101
  else
102
- line, col = lexer_token.line_and_column
103
- if lexer_token.name == :BAD_UNICODE_ESCAPE
104
- raise GraphQL::ParseError.new("Parse error on bad Unicode escape sequence: #{lexer_token.to_s.inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
102
+ line = lexer_token[1]
103
+ col = lexer_token[2]
104
+ if lexer_token[0] == :BAD_UNICODE_ESCAPE
105
+ raise GraphQL::ParseError.new("Parse error on bad Unicode escape sequence: #{lexer_token[3].inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
105
106
  else
106
- raise GraphQL::ParseError.new("Parse error on #{lexer_token.to_s.inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
107
+ raise GraphQL::ParseError.new("Parse error on #{lexer_token[3].inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
107
108
  end
108
109
  end
109
110
  end
@@ -111,8 +112,8 @@ end
111
112
 
112
113
  def make_node(node_name, assigns)
113
114
  assigns.each do |key, value|
114
- if key != :position_source && value.is_a?(GraphQL::Language::Token)
115
- assigns[key] = value.to_s
115
+ if key != :position_source && value.is_a?(Array) && value[0].is_a?(Symbol)
116
+ assigns[key] = value[3]
116
117
  end
117
118
  end
118
119
 
@@ -1280,7 +1281,7 @@ module_eval(<<'.,.,', 'parser.y', 119)
1280
1281
 
1281
1282
  module_eval(<<'.,.,', 'parser.y', 164)
1282
1283
  def _reduce_63(val, _values, result)
1283
- result = make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1284
+ result = make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
1284
1285
  result
1285
1286
  end
1286
1287
  .,.,
@@ -1336,21 +1337,21 @@ module_eval(<<'.,.,', 'parser.y', 179)
1336
1337
 
1337
1338
  module_eval(<<'.,.,', 'parser.y', 182)
1338
1339
  def _reduce_71(val, _values, result)
1339
- result = val[0].to_f
1340
+ result = val[0][3].to_f
1340
1341
  result
1341
1342
  end
1342
1343
  .,.,
1343
1344
 
1344
1345
  module_eval(<<'.,.,', 'parser.y', 183)
1345
1346
  def _reduce_72(val, _values, result)
1346
- result = val[0].to_i
1347
+ result = val[0][3].to_i
1347
1348
  result
1348
1349
  end
1349
1350
  .,.,
1350
1351
 
1351
1352
  module_eval(<<'.,.,', 'parser.y', 184)
1352
1353
  def _reduce_73(val, _values, result)
1353
- result = val[0].to_s
1354
+ result = val[0][3]
1354
1355
  result
1355
1356
  end
1356
1357
  .,.,
@@ -1597,7 +1598,7 @@ module_eval(<<'.,.,', 'parser.y', 277)
1597
1598
 
1598
1599
  module_eval(<<'.,.,', 'parser.y', 286)
1599
1600
  def _reduce_114(val, _values, result)
1600
- result = make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0].line, directives: val[1], **val[3])
1601
+ result = make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0][1], directives: val[1], **val[3])
1601
1602
  result
1602
1603
  end
1603
1604
  .,.,
@@ -1613,7 +1614,7 @@ module_eval(<<'.,.,', 'parser.y', 290)
1613
1614
 
1614
1615
  module_eval(<<'.,.,', 'parser.y', 293)
1615
1616
  def _reduce_117(val, _values, result)
1616
- result = { val[0].to_s.to_sym => val[2] }
1617
+ result = { val[0][3].to_sym => val[2] }
1617
1618
  result
1618
1619
  end
1619
1620
  .,.,
@@ -1766,7 +1767,7 @@ module_eval(<<'.,.,', 'parser.y', 343)
1766
1767
 
1767
1768
  module_eval(<<'.,.,', 'parser.y', 353)
1768
1769
  def _reduce_151(val, _values, result)
1769
- result = make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1770
+ result = make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
1770
1771
 
1771
1772
  result
1772
1773
  end
@@ -1774,7 +1775,7 @@ module_eval(<<'.,.,', 'parser.y', 353)
1774
1775
 
1775
1776
  module_eval(<<'.,.,', 'parser.y', 358)
1776
1777
  def _reduce_152(val, _values, result)
1777
- result = make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1778
+ result = make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
1778
1779
 
1779
1780
  result
1780
1781
  end
@@ -1840,7 +1841,7 @@ module_eval(<<'.,.,', 'parser.y', 376)
1840
1841
 
1841
1842
  module_eval(<<'.,.,', 'parser.y', 380)
1842
1843
  def _reduce_162(val, _values, result)
1843
- result = make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1844
+ result = make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
1844
1845
 
1845
1846
  result
1846
1847
  end
@@ -1876,7 +1877,7 @@ module_eval(<<'.,.,', 'parser.y', 389)
1876
1877
 
1877
1878
  module_eval(<<'.,.,', 'parser.y', 393)
1878
1879
  def _reduce_167(val, _values, result)
1879
- result = make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1880
+ result = make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
1880
1881
 
1881
1882
  result
1882
1883
  end
@@ -1919,7 +1920,7 @@ module_eval(<<'.,.,', 'parser.y', 403)
1919
1920
 
1920
1921
  module_eval(<<'.,.,', 'parser.y', 407)
1921
1922
  def _reduce_173(val, _values, result)
1922
- result = make_node(:InterfaceTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1923
+ result = make_node(:InterfaceTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
1923
1924
 
1924
1925
  result
1925
1926
  end
@@ -1941,7 +1942,7 @@ module_eval(<<'.,.,', 'parser.y', 412)
1941
1942
 
1942
1943
  module_eval(<<'.,.,', 'parser.y', 416)
1943
1944
  def _reduce_176(val, _values, result)
1944
- result = make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1945
+ result = make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
1945
1946
 
1946
1947
  result
1947
1948
  end
@@ -1949,7 +1950,7 @@ module_eval(<<'.,.,', 'parser.y', 416)
1949
1950
 
1950
1951
  module_eval(<<'.,.,', 'parser.y', 421)
1951
1952
  def _reduce_177(val, _values, result)
1952
- result = make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1953
+ result = make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
1953
1954
 
1954
1955
  result
1955
1956
  end
@@ -1957,7 +1958,7 @@ module_eval(<<'.,.,', 'parser.y', 421)
1957
1958
 
1958
1959
  module_eval(<<'.,.,', 'parser.y', 426)
1959
1960
  def _reduce_178(val, _values, result)
1960
- result = make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1961
+ result = make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
1961
1962
 
1962
1963
  result
1963
1964
  end
@@ -1965,7 +1966,7 @@ module_eval(<<'.,.,', 'parser.y', 426)
1965
1966
 
1966
1967
  module_eval(<<'.,.,', 'parser.y', 431)
1967
1968
  def _reduce_179(val, _values, result)
1968
- result = make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[7], repeatable: !!val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1969
+ result = make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[7], repeatable: !!val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
1969
1970
 
1970
1971
  result
1971
1972
  end
@@ -1977,14 +1978,14 @@ module_eval(<<'.,.,', 'parser.y', 431)
1977
1978
 
1978
1979
  module_eval(<<'.,.,', 'parser.y', 439)
1979
1980
  def _reduce_182(val, _values, result)
1980
- result = [make_node(:DirectiveLocation, name: val[0].to_s, position_source: val[0])]
1981
+ result = [make_node(:DirectiveLocation, name: val[0][3], position_source: val[0])]
1981
1982
  result
1982
1983
  end
1983
1984
  .,.,
1984
1985
 
1985
1986
  module_eval(<<'.,.,', 'parser.y', 440)
1986
1987
  def _reduce_183(val, _values, result)
1987
- val[0] << make_node(:DirectiveLocation, name: val[2].to_s, position_source: val[2])
1988
+ val[0] << make_node(:DirectiveLocation, name: val[2][3], position_source: val[2])
1988
1989
  result
1989
1990
  end
1990
1991
  .,.,
@@ -162,7 +162,7 @@ rule
162
162
  | schema_keyword
163
163
 
164
164
  enum_value_definition:
165
- description_opt enum_name directives_list_opt { result = make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1]) }
165
+ description_opt enum_name directives_list_opt { result = make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1]) }
166
166
 
167
167
  enum_value_definitions:
168
168
  enum_value_definition { result = [val[0]] }
@@ -180,9 +180,9 @@ rule
180
180
  name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
181
181
 
182
182
  literal_value:
183
- FLOAT { result = val[0].to_f }
184
- | INT { result = val[0].to_i }
185
- | STRING { result = val[0].to_s }
183
+ FLOAT { result = val[0][3].to_f }
184
+ | INT { result = val[0][3].to_i }
185
+ | STRING { result = val[0][3] }
186
186
  | TRUE { result = true }
187
187
  | FALSE { result = false }
188
188
  | null_value
@@ -284,14 +284,14 @@ rule
284
284
  | directive_definition
285
285
 
286
286
  schema_definition:
287
- SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { result = make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0].line, directives: val[1], **val[3]) }
287
+ SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { result = make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0][1], directives: val[1], **val[3]) }
288
288
 
289
289
  operation_type_definition_list:
290
290
  operation_type_definition
291
291
  | operation_type_definition_list operation_type_definition { result = val[0].merge(val[1]) }
292
292
 
293
293
  operation_type_definition:
294
- operation_type COLON name { result = { val[0].to_s.to_sym => val[2] } }
294
+ operation_type COLON name { result = { val[0][3].to_sym => val[2] } }
295
295
 
296
296
  type_definition:
297
297
  scalar_type_definition
@@ -351,12 +351,12 @@ rule
351
351
 
352
352
  scalar_type_definition:
353
353
  description_opt SCALAR name directives_list_opt {
354
- result = make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
354
+ result = make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
355
355
  }
356
356
 
357
357
  object_type_definition:
358
358
  description_opt TYPE name implements_opt directives_list_opt field_definition_list_opt {
359
- result = make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
359
+ result = make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
360
360
  }
361
361
 
362
362
  implements_opt:
@@ -378,7 +378,7 @@ rule
378
378
 
379
379
  input_value_definition:
380
380
  description_opt name COLON type default_value_opt directives_list_opt {
381
- result = make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
381
+ result = make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
382
382
  }
383
383
 
384
384
  input_value_definition_list:
@@ -391,7 +391,7 @@ rule
391
391
 
392
392
  field_definition:
393
393
  description_opt name arguments_definitions_opt COLON type directives_list_opt {
394
- result = make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
394
+ result = make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
395
395
  }
396
396
 
397
397
  field_definition_list_opt:
@@ -405,7 +405,7 @@ rule
405
405
 
406
406
  interface_type_definition:
407
407
  description_opt INTERFACE name implements_opt directives_list_opt field_definition_list_opt {
408
- result = make_node(:InterfaceTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
408
+ result = make_node(:InterfaceTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
409
409
  }
410
410
 
411
411
  union_members:
@@ -414,22 +414,22 @@ rule
414
414
 
415
415
  union_type_definition:
416
416
  description_opt UNION name directives_list_opt EQUALS union_members {
417
- result = make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
417
+ result = make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
418
418
  }
419
419
 
420
420
  enum_type_definition:
421
421
  description_opt ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
422
- result = make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
422
+ result = make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
423
423
  }
424
424
 
425
425
  input_object_type_definition:
426
426
  description_opt INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
427
- result = make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
427
+ result = make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
428
428
  }
429
429
 
430
430
  directive_definition:
431
431
  description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt directive_repeatable_opt ON directive_locations {
432
- result = make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[7], repeatable: !!val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
432
+ result = make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[7], repeatable: !!val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
433
433
  }
434
434
 
435
435
  directive_repeatable_opt:
@@ -437,8 +437,8 @@ rule
437
437
  | REPEATABLE
438
438
 
439
439
  directive_locations:
440
- name { result = [make_node(:DirectiveLocation, name: val[0].to_s, position_source: val[0])] }
441
- | directive_locations PIPE name { val[0] << make_node(:DirectiveLocation, name: val[2].to_s, position_source: val[2]) }
440
+ name { result = [make_node(:DirectiveLocation, name: val[0][3], position_source: val[0])] }
441
+ | directive_locations PIPE name { val[0] << make_node(:DirectiveLocation, name: val[2][3], position_source: val[2]) }
442
442
  end
443
443
 
444
444
  ---- header ----
@@ -460,7 +460,7 @@ def parse_document
460
460
  @document ||= begin
461
461
  # Break the string into tokens
462
462
  @trace.lex(query_string: @query_string) do
463
- @tokens ||= GraphQL.scan(@query_string)
463
+ @tokens ||= GraphQL::Language::Lexer.tokenize(@query_string)
464
464
  end
465
465
  # From the tokens, build an AST
466
466
  @trace.parse(query_string: @query_string) do
@@ -498,7 +498,7 @@ def next_token
498
498
  if lexer_token.nil?
499
499
  nil
500
500
  else
501
- @reused_next_token[0] = lexer_token.name
501
+ @reused_next_token[0] = lexer_token[0]
502
502
  @reused_next_token[1] = lexer_token
503
503
  @reused_next_token
504
504
  end
@@ -509,13 +509,13 @@ def get_description(token)
509
509
 
510
510
  loop do
511
511
  prev_token = token
512
- token = token.prev_token
512
+ token = token[4]
513
513
 
514
514
  break if token.nil?
515
- break if token.name != :COMMENT
516
- break if prev_token.line != token.line + 1
515
+ break if token[0] != :COMMENT
516
+ break if prev_token[1] != token[1] + 1
517
517
 
518
- comments.unshift(token.to_s.sub(/^#\s*/, ""))
518
+ comments.unshift(token[3].sub(/^#\s*/, ""))
519
519
  end
520
520
 
521
521
  return nil if comments.empty?
@@ -531,11 +531,12 @@ def on_error(parser_token_id, lexer_token, vstack)
531
531
  if parser_token_name.nil?
532
532
  raise GraphQL::ParseError.new("Parse Error on unknown token: {token_id: #{parser_token_id}, lexer_token: #{lexer_token}} from #{@query_string}", nil, nil, @query_string, filename: @filename)
533
533
  else
534
- line, col = lexer_token.line_and_column
535
- if lexer_token.name == :BAD_UNICODE_ESCAPE
536
- raise GraphQL::ParseError.new("Parse error on bad Unicode escape sequence: #{lexer_token.to_s.inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
534
+ line = lexer_token[1]
535
+ col = lexer_token[2]
536
+ if lexer_token[0] == :BAD_UNICODE_ESCAPE
537
+ raise GraphQL::ParseError.new("Parse error on bad Unicode escape sequence: #{lexer_token[3].inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
537
538
  else
538
- raise GraphQL::ParseError.new("Parse error on #{lexer_token.to_s.inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
539
+ raise GraphQL::ParseError.new("Parse error on #{lexer_token[3].inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
539
540
  end
540
541
  end
541
542
  end
@@ -543,8 +544,8 @@ end
543
544
 
544
545
  def make_node(node_name, assigns)
545
546
  assigns.each do |key, value|
546
- if key != :position_source && value.is_a?(GraphQL::Language::Token)
547
- assigns[key] = value.to_s
547
+ if key != :position_source && value.is_a?(Array) && value[0].is_a?(Symbol)
548
+ assigns[key] = value[3]
548
549
  end
549
550
  end
550
551