graphql 0.13.0 → 0.14.0

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/define/assign_argument.rb +3 -5
  3. data/lib/graphql/field.rb +1 -3
  4. data/lib/graphql/input_object_type.rb +4 -1
  5. data/lib/graphql/language.rb +1 -0
  6. data/lib/graphql/language/generation.rb +94 -0
  7. data/lib/graphql/language/lexer.rb +229 -201
  8. data/lib/graphql/language/lexer.rl +24 -7
  9. data/lib/graphql/language/nodes.rb +4 -0
  10. data/lib/graphql/language/parser.rb +195 -187
  11. data/lib/graphql/language/parser.y +11 -4
  12. data/lib/graphql/object_type.rb +21 -0
  13. data/lib/graphql/query.rb +8 -3
  14. data/lib/graphql/query/serial_execution/operation_resolution.rb +2 -2
  15. data/lib/graphql/query/serial_execution/value_resolution.rb +5 -0
  16. data/lib/graphql/schema.rb +11 -19
  17. data/lib/graphql/schema/invalid_type_error.rb +6 -0
  18. data/lib/graphql/schema/reduce_types.rb +68 -0
  19. data/lib/graphql/schema/type_expression.rb +6 -16
  20. data/lib/graphql/schema/type_map.rb +1 -5
  21. data/lib/graphql/schema/validation.rb +164 -0
  22. data/lib/graphql/version.rb +1 -1
  23. data/readme.md +3 -4
  24. data/spec/graphql/argument_spec.rb +20 -0
  25. data/spec/graphql/field_spec.rb +16 -0
  26. data/spec/graphql/introspection/schema_type_spec.rb +1 -0
  27. data/spec/graphql/language/generation_spec.rb +42 -0
  28. data/spec/graphql/language/parser_spec.rb +136 -26
  29. data/spec/graphql/query/serial_execution/value_resolution_spec.rb +23 -0
  30. data/spec/graphql/query_spec.rb +51 -0
  31. data/spec/graphql/schema/{type_reducer_spec.rb → reduce_types_spec.rb} +16 -14
  32. data/spec/graphql/schema/type_expression_spec.rb +4 -4
  33. data/spec/graphql/schema/validation_spec.rb +219 -0
  34. data/spec/support/dairy_app.rb +3 -0
  35. metadata +14 -13
  36. data/lib/graphql/schema/each_item_validator.rb +0 -21
  37. data/lib/graphql/schema/field_validator.rb +0 -17
  38. data/lib/graphql/schema/implementation_validator.rb +0 -31
  39. data/lib/graphql/schema/type_reducer.rb +0 -79
  40. data/lib/graphql/schema/type_validator.rb +0 -58
  41. data/spec/graphql/schema/field_validator_spec.rb +0 -21
  42. data/spec/graphql/schema/type_validator_spec.rb +0 -81
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e39609ec3ac4ee1756f3dcbd618785468f05d895
4
- data.tar.gz: 96aac564a69c22795a299ea4430b1bb95542a788
3
+ metadata.gz: 3686533835888eeb91ed91024ede7ea3f2937d5c
4
+ data.tar.gz: 767760791707ac1722002fc7e8b6b182686abeaa
5
5
  SHA512:
6
- metadata.gz: 4ad5ecccde050131fe70cb6a33d6fdc1acb574a8e13e63af82da209313388f53fc042627f0ca32c00999e35fb227b0e1fd7068f69d7209ed5c2b20beb45a19cf
7
- data.tar.gz: 8cecd7002d9067f04e5ac6a7381aab405d6e2acd9df5baf45976b994e49615e1fe9d94585df62e9728c7d8c8788ac7b408a40273308221f56e11af315816d74c
6
+ metadata.gz: 514195ebd2aff35a181e013af868e78af66fa0ca5cceaafe318c92d30d200241f9531cd630d6c36155dd521cab3cf1f7a4b8fee600dc6bbbd8c8f6430d3dd47f
7
+ data.tar.gz: 3f5018af47c4e5225eb5f2c00ba8e4a1335e0ac56723908bb7bf8feffde7e567d7ac51f8eca8153249ec56a377b94ac257754694533727537b9d22403a3f12d9
@@ -2,18 +2,16 @@ module GraphQL
2
2
  module Define
3
3
  # Turn argument configs into a {GraphQL::Argument}.
4
4
  module AssignArgument
5
- def self.call(target, name, type, description = nil, default_value: nil, &block)
5
+ def self.call(target, name, type = nil, description = nil, default_value: nil, &block)
6
6
  argument = if block_given?
7
7
  GraphQL::Argument.define(&block)
8
8
  else
9
9
  GraphQL::Argument.new
10
10
  end
11
11
  argument.name = name.to_s
12
- argument.type = type
13
-
12
+ type && argument.type = type
14
13
  description && argument.description = description
15
- # check nil because false is a valid value
16
- default_value != nil && argument.default_value = default_value
14
+ !default_value.nil? && argument.default_value = default_value
17
15
 
18
16
  target.arguments[name.to_s] = argument
19
17
  end
data/lib/graphql/field.rb CHANGED
@@ -90,9 +90,7 @@ module GraphQL
90
90
  #
91
91
  # This is important because {#name} may be used by {#resolve}.
92
92
  def name=(new_name)
93
- if !new_name.is_a?(String)
94
- raise ArgumentError.new("GraphQL field names must be strings; cannot use #{new_name.inspect} (#{new_name.class.name}) as a field name.") unless new_name.is_a?(String)
95
- elsif @name.nil?
93
+ if @name.nil?
96
94
  @name = new_name
97
95
  else
98
96
  raise("Can't rename an already-named field. (Tried to rename \"#{@name}\" to \"#{new_name}\".) If you're passing a field with the `field:` argument, make sure it's an unused instance of GraphQL::Field.")
@@ -9,7 +9,10 @@ module GraphQL
9
9
  # end
10
10
  #
11
11
  class InputObjectType < GraphQL::BaseType
12
- accepts_definitions input_field: GraphQL::Define::AssignArgument
12
+ accepts_definitions(
13
+ input_field: GraphQL::Define::AssignArgument,
14
+ argument: GraphQL::Define::AssignArgument
15
+ )
13
16
 
14
17
  # @return [Hash<String, GraphQL::Argument>] Map String argument names to their {GraphQL::Argument} implementations
15
18
  attr_accessor :arguments
@@ -1,3 +1,4 @@
1
+ require "graphql/language/generation"
1
2
  require "graphql/language/lexer"
2
3
  require "graphql/language/nodes"
3
4
  require "graphql/language/parser"
@@ -0,0 +1,94 @@
1
+ module GraphQL
2
+ module Language
3
+ module Generation
4
+ def self.generate(node, indent: "")
5
+ case node
6
+ when Nodes::Document
7
+ node.definitions.map { |d| generate(d) }.join("\n")
8
+ when Nodes::Argument
9
+ "#{node.name}: #{generate(node.value)}"
10
+ when Nodes::Directive
11
+ "@#{node.name}(#{node.arguments.map { |a| generate(a) }.join(", ")})"
12
+ when Nodes::Enum
13
+ "#{node.name}"
14
+ when Nodes::Field
15
+ out = "#{indent}"
16
+ out << "#{node.alias}: " if node.alias
17
+ out << "#{node.name}"
18
+ out << "(#{node.arguments.map { |a| generate(a) }.join(", ")})" if node.arguments.any?
19
+ out << generate_directives(node.directives)
20
+ out << generate_selections(node.selections, indent: indent)
21
+ out
22
+ when Nodes::FragmentDefinition
23
+ out = "#{indent}fragment #{node.name}"
24
+ out << " on #{node.type}" if node.type
25
+ out << generate_directives(node.directives)
26
+ out << generate_selections(node.selections, indent: indent)
27
+ out
28
+
29
+ when Nodes::FragmentSpread
30
+ out = "#{indent}... #{node.name}"
31
+ out << generate_directives(node.directives)
32
+ out
33
+ when Nodes::InlineFragment
34
+ out = "#{indent}..."
35
+ out << " on #{node.type}" if node.type
36
+ out << generate_directives(node.directives)
37
+ out << generate_selections(node.selections, indent: indent)
38
+ out
39
+ when Nodes::InputObject
40
+ generate(node.to_h)
41
+ when Nodes::ListType
42
+ "[#{generate(node.of_type)}]"
43
+ when Nodes::NonNullType
44
+ "#{generate(node.of_type)}!"
45
+ when Nodes::OperationDefinition
46
+ out = "#{indent}#{node.operation_type}"
47
+ out << " #{node.name}" if node.name
48
+ out << "(#{node.variables.map { |v| generate(v) }.join(", ")})" if node.variables.any?
49
+ out << generate_directives(node.directives)
50
+ out << generate_selections(node.selections, indent: indent)
51
+ out
52
+ when Nodes::TypeName
53
+ "#{node.name}"
54
+ when Nodes::VariableDefinition
55
+ out = "$#{node.name}: #{generate(node.type)}"
56
+ out << " = #{generate(node.default_value)}" if node.default_value
57
+ out
58
+ when Nodes::VariableIdentifier
59
+ "$#{node.name}"
60
+ when Nodes::AbstractNode
61
+ node.to_query_string(indent: indent)
62
+ when FalseClass, Float, Integer, NilClass, String, TrueClass
63
+ JSON.generate(node, quirks_mode: true)
64
+ when Array
65
+ "[#{node.map { |v| generate(v) }.join(", ")}]"
66
+ when Hash
67
+ "{#{node.map { |k, v| "#{k}: #{generate(v)}" }.join(", ")}}"
68
+ else
69
+ raise TypeError
70
+ end
71
+ end
72
+
73
+ def self.generate_directives(directives)
74
+ if directives.any?
75
+ directives.map { |d| " #{generate(d)}" }.join
76
+ else
77
+ ""
78
+ end
79
+ end
80
+
81
+ def self.generate_selections(selections, indent: "")
82
+ if selections.any?
83
+ out = " {\n"
84
+ selections.each do |selection|
85
+ out << generate(selection, indent: indent + " ") << "\n"
86
+ end
87
+ out << "#{indent}}"
88
+ else
89
+ ""
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -1,7 +1,7 @@
1
1
 
2
2
  # line 1 "lib/graphql/language/lexer.rl"
3
3
 
4
- # line 65 "lib/graphql/language/lexer.rl"
4
+ # line 72 "lib/graphql/language/lexer.rl"
5
5
 
6
6
 
7
7
 
@@ -29,16 +29,17 @@ class << self
29
29
  private :_graphql_lexer_actions, :_graphql_lexer_actions=
30
30
  end
31
31
  self._graphql_lexer_actions = [
32
- 0, 1, 2, 1, 12, 1, 13, 1,
33
- 14, 1, 15, 1, 16, 1, 17, 1,
34
- 18, 1, 19, 1, 20, 1, 21, 1,
35
- 22, 1, 23, 1, 24, 1, 25, 1,
36
- 26, 1, 27, 1, 28, 1, 29, 1,
37
- 30, 1, 31, 1, 32, 1, 33, 2,
38
- 0, 1, 2, 3, 4, 2, 3, 5,
39
- 2, 3, 6, 2, 3, 7, 2, 3,
40
- 8, 2, 3, 9, 2, 3, 10, 2,
41
- 3, 11
32
+ 0, 1, 0, 1, 1, 1, 2, 1,
33
+ 13, 1, 14, 1, 15, 1, 16, 1,
34
+ 17, 1, 18, 1, 19, 1, 20, 1,
35
+ 21, 1, 22, 1, 23, 1, 24, 1,
36
+ 25, 1, 26, 1, 27, 1, 28, 1,
37
+ 29, 1, 30, 1, 31, 1, 32, 1,
38
+ 33, 1, 34, 1, 35, 1, 36, 2,
39
+ 2, 3, 2, 2, 4, 2, 2, 5,
40
+ 2, 2, 6, 2, 2, 7, 2, 2,
41
+ 8, 2, 2, 9, 2, 2, 10, 2,
42
+ 2, 11, 2, 2, 12
42
43
  ]
43
44
 
44
45
  class << self
@@ -46,10 +47,11 @@ class << self
46
47
  private :_graphql_lexer_key_offsets, :_graphql_lexer_key_offsets=
47
48
  end
48
49
  self._graphql_lexer_key_offsets = [
49
- 0, 0, 2, 4, 7, 9, 11, 15,
50
- 16, 17, 48, 51, 53, 55, 62, 64,
51
- 70, 77, 84, 93, 101, 109, 117, 125,
52
- 133, 141, 149, 157, 165, 173, 181, 189
50
+ 0, 2, 4, 6, 8, 12, 13, 45,
51
+ 48, 50, 52, 55, 62, 64, 70, 77,
52
+ 78, 85, 94, 102, 110, 118, 126, 134,
53
+ 142, 150, 158, 166, 174, 182, 190, 198,
54
+ 206, 214
53
55
  ]
54
56
 
55
57
  class << self
@@ -57,31 +59,34 @@ class << self
57
59
  private :_graphql_lexer_trans_keys, :_graphql_lexer_trans_keys=
58
60
  end
59
61
  self._graphql_lexer_trans_keys = [
60
- 34, 92, 34, 92, 48, 49, 57, 48,
61
- 57, 48, 57, 43, 45, 48, 57, 46,
62
- 46, 9, 10, 13, 32, 33, 34, 35,
63
- 36, 40, 41, 44, 45, 46, 48, 58,
64
- 61, 64, 91, 93, 95, 102, 111, 116,
65
- 123, 125, 49, 57, 65, 90, 97, 122,
66
- 9, 32, 44, 34, 92, 10, 13, 43,
62
+ 34, 92, 34, 92, 48, 57, 48, 57,
63
+ 43, 45, 48, 57, 46, 9, 10, 13,
64
+ 32, 33, 34, 35, 36, 40, 41, 44,
65
+ 45, 46, 48, 58, 61, 64, 91, 93,
66
+ 95, 102, 110, 111, 116, 123, 125, 49,
67
+ 57, 65, 90, 97, 122, 9, 32, 44,
68
+ 34, 92, 10, 13, 48, 49, 57, 43,
67
69
  45, 46, 69, 101, 48, 57, 48, 57,
68
70
  43, 45, 69, 101, 48, 57, 43, 45,
69
- 46, 69, 101, 48, 57, 95, 48, 57,
70
- 65, 90, 97, 122, 95, 97, 114, 48,
71
- 57, 65, 90, 98, 122, 95, 108, 48,
72
- 57, 65, 90, 97, 122, 95, 115, 48,
73
- 57, 65, 90, 97, 122, 95, 101, 48,
74
- 57, 65, 90, 97, 122, 95, 97, 48,
75
- 57, 65, 90, 98, 122, 95, 103, 48,
76
- 57, 65, 90, 97, 122, 95, 109, 48,
77
- 57, 65, 90, 97, 122, 95, 101, 48,
78
- 57, 65, 90, 97, 122, 95, 110, 48,
79
- 57, 65, 90, 97, 122, 95, 116, 48,
80
- 57, 65, 90, 97, 122, 95, 110, 48,
81
- 57, 65, 90, 97, 122, 95, 114, 48,
82
- 57, 65, 90, 97, 122, 95, 117, 48,
83
- 57, 65, 90, 97, 122, 95, 101, 48,
84
- 57, 65, 90, 97, 122, 0
71
+ 46, 69, 101, 48, 57, 46, 95, 48,
72
+ 57, 65, 90, 97, 122, 95, 97, 114,
73
+ 48, 57, 65, 90, 98, 122, 95, 108,
74
+ 48, 57, 65, 90, 97, 122, 95, 115,
75
+ 48, 57, 65, 90, 97, 122, 95, 101,
76
+ 48, 57, 65, 90, 97, 122, 95, 97,
77
+ 48, 57, 65, 90, 98, 122, 95, 103,
78
+ 48, 57, 65, 90, 97, 122, 95, 109,
79
+ 48, 57, 65, 90, 97, 122, 95, 101,
80
+ 48, 57, 65, 90, 97, 122, 95, 110,
81
+ 48, 57, 65, 90, 97, 122, 95, 116,
82
+ 48, 57, 65, 90, 97, 122, 95, 117,
83
+ 48, 57, 65, 90, 97, 122, 95, 108,
84
+ 48, 57, 65, 90, 97, 122, 95, 108,
85
+ 48, 57, 65, 90, 97, 122, 95, 110,
86
+ 48, 57, 65, 90, 97, 122, 95, 114,
87
+ 48, 57, 65, 90, 97, 122, 95, 117,
88
+ 48, 57, 65, 90, 97, 122, 95, 101,
89
+ 48, 57, 65, 90, 97, 122, 0
85
90
  ]
86
91
 
87
92
  class << self
@@ -89,10 +94,11 @@ class << self
89
94
  private :_graphql_lexer_single_lengths, :_graphql_lexer_single_lengths=
90
95
  end
91
96
  self._graphql_lexer_single_lengths = [
92
- 0, 2, 2, 1, 0, 0, 2, 1,
93
- 1, 25, 3, 2, 2, 5, 0, 4,
94
- 5, 1, 3, 2, 2, 2, 2, 2,
95
- 2, 2, 2, 2, 2, 2, 2, 2
97
+ 2, 2, 0, 0, 2, 1, 26, 3,
98
+ 2, 2, 1, 5, 0, 4, 5, 1,
99
+ 1, 3, 2, 2, 2, 2, 2, 2,
100
+ 2, 2, 2, 2, 2, 2, 2, 2,
101
+ 2, 2
96
102
  ]
97
103
 
98
104
  class << self
@@ -100,10 +106,11 @@ class << self
100
106
  private :_graphql_lexer_range_lengths, :_graphql_lexer_range_lengths=
101
107
  end
102
108
  self._graphql_lexer_range_lengths = [
103
- 0, 0, 0, 1, 1, 1, 1, 0,
104
- 0, 3, 0, 0, 0, 1, 1, 1,
105
- 1, 3, 3, 3, 3, 3, 3, 3,
106
- 3, 3, 3, 3, 3, 3, 3, 3
109
+ 0, 0, 1, 1, 1, 0, 3, 0,
110
+ 0, 0, 1, 1, 1, 1, 1, 0,
111
+ 3, 3, 3, 3, 3, 3, 3, 3,
112
+ 3, 3, 3, 3, 3, 3, 3, 3,
113
+ 3, 3
107
114
  ]
108
115
 
109
116
  class << self
@@ -111,10 +118,11 @@ class << self
111
118
  private :_graphql_lexer_index_offsets, :_graphql_lexer_index_offsets=
112
119
  end
113
120
  self._graphql_lexer_index_offsets = [
114
- 0, 0, 3, 6, 9, 11, 13, 17,
115
- 19, 21, 50, 54, 57, 60, 67, 69,
116
- 75, 82, 87, 94, 100, 106, 112, 118,
117
- 124, 130, 136, 142, 148, 154, 160, 166
121
+ 0, 3, 6, 8, 10, 14, 16, 46,
122
+ 50, 53, 56, 59, 66, 68, 74, 81,
123
+ 83, 88, 95, 101, 107, 113, 119, 125,
124
+ 131, 137, 143, 149, 155, 161, 167, 173,
125
+ 179, 185
118
126
  ]
119
127
 
120
128
  class << self
@@ -122,28 +130,30 @@ class << self
122
130
  private :_graphql_lexer_indicies, :_graphql_lexer_indicies=
123
131
  end
124
132
  self._graphql_lexer_indicies = [
125
- 2, 3, 1, 4, 3, 1, 5, 7,
126
- 6, 8, 0, 10, 9, 11, 11, 8,
127
- 0, 12, 6, 13, 6, 14, 15, 15,
128
- 14, 16, 1, 17, 18, 19, 20, 14,
129
- 21, 22, 5, 23, 24, 25, 27, 28,
130
- 26, 29, 30, 31, 32, 33, 7, 26,
131
- 26, 6, 14, 14, 14, 34, 2, 3,
132
- 1, 36, 36, 17, 11, 11, 38, 39,
133
- 39, 8, 37, 8, 40, 11, 11, 39,
134
- 39, 10, 40, 11, 11, 38, 39, 39,
135
- 7, 37, 26, 26, 26, 26, 0, 26,
136
- 42, 43, 26, 26, 26, 41, 26, 44,
137
- 26, 26, 26, 41, 26, 45, 26, 26,
138
- 26, 41, 26, 46, 26, 26, 26, 41,
139
- 26, 47, 26, 26, 26, 41, 26, 48,
140
- 26, 26, 26, 41, 26, 49, 26, 26,
141
- 26, 41, 26, 50, 26, 26, 26, 41,
142
- 26, 51, 26, 26, 26, 41, 26, 52,
143
- 26, 26, 26, 41, 26, 53, 26, 26,
144
- 26, 41, 26, 54, 26, 26, 26, 41,
145
- 26, 55, 26, 26, 26, 41, 26, 56,
146
- 26, 26, 26, 41, 0
133
+ 2, 3, 1, 4, 3, 1, 5, 0,
134
+ 7, 6, 8, 8, 5, 0, 10, 9,
135
+ 12, 13, 13, 12, 14, 15, 16, 17,
136
+ 18, 19, 12, 20, 21, 22, 24, 25,
137
+ 26, 28, 29, 27, 30, 31, 32, 33,
138
+ 34, 35, 23, 27, 27, 11, 12, 12,
139
+ 12, 36, 2, 3, 1, 37, 37, 16,
140
+ 22, 23, 38, 8, 8, 40, 41, 41,
141
+ 5, 39, 5, 42, 8, 8, 41, 41,
142
+ 7, 42, 8, 8, 40, 41, 41, 23,
143
+ 39, 43, 38, 27, 27, 27, 27, 0,
144
+ 27, 45, 46, 27, 27, 27, 44, 27,
145
+ 47, 27, 27, 27, 44, 27, 48, 27,
146
+ 27, 27, 44, 27, 49, 27, 27, 27,
147
+ 44, 27, 50, 27, 27, 27, 44, 27,
148
+ 51, 27, 27, 27, 44, 27, 52, 27,
149
+ 27, 27, 44, 27, 53, 27, 27, 27,
150
+ 44, 27, 54, 27, 27, 27, 44, 27,
151
+ 55, 27, 27, 27, 44, 27, 56, 27,
152
+ 27, 27, 44, 27, 57, 27, 27, 27,
153
+ 44, 27, 58, 27, 27, 27, 44, 27,
154
+ 59, 27, 27, 27, 44, 27, 60, 27,
155
+ 27, 27, 44, 27, 61, 27, 27, 27,
156
+ 44, 27, 62, 27, 27, 27, 44, 0
147
157
  ]
148
158
 
149
159
  class << self
@@ -151,14 +161,14 @@ class << self
151
161
  private :_graphql_lexer_trans_targs, :_graphql_lexer_trans_targs=
152
162
  end
153
163
  self._graphql_lexer_trans_targs = [
154
- 9, 1, 9, 2, 11, 13, 0, 16,
155
- 14, 9, 15, 4, 8, 9, 10, 9,
156
- 9, 12, 9, 9, 9, 3, 7, 9,
157
- 9, 9, 17, 9, 9, 18, 28, 29,
158
- 9, 9, 9, 9, 9, 9, 5, 6,
159
- 9, 9, 19, 22, 20, 21, 17, 23,
160
- 24, 25, 26, 27, 17, 17, 30, 31,
161
- 17
164
+ 6, 0, 6, 1, 8, 12, 6, 13,
165
+ 2, 6, 6, 6, 7, 6, 6, 8,
166
+ 9, 6, 6, 6, 10, 15, 11, 14,
167
+ 6, 6, 6, 16, 6, 6, 17, 27,
168
+ 30, 31, 6, 6, 6, 6, 6, 6,
169
+ 3, 4, 6, 5, 6, 18, 21, 19,
170
+ 20, 16, 22, 23, 24, 25, 26, 16,
171
+ 28, 29, 16, 16, 32, 33, 16
162
172
  ]
163
173
 
164
174
  class << self
@@ -166,14 +176,14 @@ class << self
166
176
  private :_graphql_lexer_trans_actions, :_graphql_lexer_trans_actions=
167
177
  end
168
178
  self._graphql_lexer_trans_actions = [
169
- 45, 0, 17, 0, 68, 50, 0, 50,
170
- 0, 43, 53, 0, 0, 23, 0, 29,
171
- 27, 0, 19, 7, 9, 0, 0, 15,
172
- 25, 21, 71, 11, 13, 0, 0, 0,
173
- 3, 5, 39, 35, 41, 31, 0, 0,
174
- 33, 37, 0, 0, 0, 0, 65, 0,
175
- 0, 0, 0, 0, 59, 56, 0, 0,
176
- 62
179
+ 53, 0, 21, 0, 76, 0, 49, 58,
180
+ 0, 51, 27, 35, 0, 33, 31, 82,
181
+ 0, 23, 11, 13, 0, 5, 55, 55,
182
+ 19, 29, 25, 79, 15, 17, 0, 0,
183
+ 0, 0, 7, 9, 43, 45, 47, 37,
184
+ 0, 0, 39, 0, 41, 0, 0, 0,
185
+ 0, 70, 0, 0, 0, 0, 0, 64,
186
+ 0, 0, 73, 61, 0, 0, 67
177
187
  ]
178
188
 
179
189
  class << self
@@ -181,10 +191,11 @@ class << self
181
191
  private :_graphql_lexer_to_state_actions, :_graphql_lexer_to_state_actions=
182
192
  end
183
193
  self._graphql_lexer_to_state_actions = [
194
+ 0, 0, 0, 0, 0, 0, 1, 0,
184
195
  0, 0, 0, 0, 0, 0, 0, 0,
185
- 0, 47, 0, 0, 0, 0, 0, 0,
186
196
  0, 0, 0, 0, 0, 0, 0, 0,
187
- 0, 0, 0, 0, 0, 0, 0, 0
197
+ 0, 0, 0, 0, 0, 0, 0, 0,
198
+ 0, 0
188
199
  ]
189
200
 
190
201
  class << self
@@ -192,10 +203,11 @@ class << self
192
203
  private :_graphql_lexer_from_state_actions, :_graphql_lexer_from_state_actions=
193
204
  end
194
205
  self._graphql_lexer_from_state_actions = [
206
+ 0, 0, 0, 0, 0, 0, 3, 0,
207
+ 0, 0, 0, 0, 0, 0, 0, 0,
195
208
  0, 0, 0, 0, 0, 0, 0, 0,
196
- 0, 1, 0, 0, 0, 0, 0, 0,
197
209
  0, 0, 0, 0, 0, 0, 0, 0,
198
- 0, 0, 0, 0, 0, 0, 0, 0
210
+ 0, 0
199
211
  ]
200
212
 
201
213
  class << self
@@ -203,32 +215,33 @@ class << self
203
215
  private :_graphql_lexer_eof_trans, :_graphql_lexer_eof_trans=
204
216
  end
205
217
  self._graphql_lexer_eof_trans = [
206
- 0, 1, 1, 0, 1, 10, 1, 0,
207
- 0, 0, 35, 36, 37, 38, 41, 41,
208
- 38, 1, 42, 42, 42, 42, 42, 42,
209
- 42, 42, 42, 42, 42, 42, 42, 42
218
+ 1, 1, 1, 7, 1, 10, 0, 37,
219
+ 1, 38, 39, 40, 43, 43, 40, 39,
220
+ 1, 45, 45, 45, 45, 45, 45, 45,
221
+ 45, 45, 45, 45, 45, 45, 45, 45,
222
+ 45, 45
210
223
  ]
211
224
 
212
225
  class << self
213
226
  attr_accessor :graphql_lexer_start
214
227
  end
215
- self.graphql_lexer_start = 9;
228
+ self.graphql_lexer_start = 6;
216
229
  class << self
217
230
  attr_accessor :graphql_lexer_first_final
218
231
  end
219
- self.graphql_lexer_first_final = 9;
232
+ self.graphql_lexer_first_final = 6;
220
233
  class << self
221
234
  attr_accessor :graphql_lexer_error
222
235
  end
223
- self.graphql_lexer_error = 0;
236
+ self.graphql_lexer_error = -1;
224
237
 
225
238
  class << self
226
239
  attr_accessor :graphql_lexer_en_main
227
240
  end
228
- self.graphql_lexer_en_main = 9;
241
+ self.graphql_lexer_en_main = 6;
229
242
 
230
243
 
231
- # line 86 "lib/graphql/language/lexer.rl"
244
+ # line 93 "lib/graphql/language/lexer.rl"
232
245
 
233
246
  def self.run_lexer(query_string)
234
247
  data = query_string.unpack("c*")
@@ -242,7 +255,7 @@ self.graphql_lexer_en_main = 9;
242
255
  }
243
256
 
244
257
 
245
- # line 246 "lib/graphql/language/lexer.rb"
258
+ # line 259 "lib/graphql/language/lexer.rb"
246
259
  begin
247
260
  p ||= 0
248
261
  pe ||= data.length
@@ -252,14 +265,14 @@ begin
252
265
  act = 0
253
266
  end
254
267
 
255
- # line 99 "lib/graphql/language/lexer.rl"
268
+ # line 106 "lib/graphql/language/lexer.rl"
256
269
 
257
270
  emit_token = -> (name) {
258
271
  emit(name, ts, te, meta)
259
272
  }
260
273
 
261
274
 
262
- # line 263 "lib/graphql/language/lexer.rb"
275
+ # line 276 "lib/graphql/language/lexer.rb"
263
276
  begin
264
277
  _klen, _trans, _keys, _acts, _nacts = nil
265
278
  _goto_level = 0
@@ -275,10 +288,6 @@ begin
275
288
  _goto_level = _test_eof
276
289
  next
277
290
  end
278
- if cs == 0
279
- _goto_level = _out
280
- next
281
- end
282
291
  end
283
292
  if _goto_level <= _resume
284
293
  _acts = _graphql_lexer_from_state_actions[cs]
@@ -288,12 +297,12 @@ begin
288
297
  _nacts -= 1
289
298
  _acts += 1
290
299
  case _graphql_lexer_actions[_acts - 1]
291
- when 2 then
300
+ when 1 then
292
301
  # line 1 "NONE"
293
302
  begin
294
303
  ts = p
295
304
  end
296
- # line 297 "lib/graphql/language/lexer.rb"
305
+ # line 306 "lib/graphql/language/lexer.rb"
297
306
  end # from state action switch
298
307
  end
299
308
  if _trigger_goto
@@ -360,123 +369,131 @@ ts = p
360
369
  _nacts -= 1
361
370
  _acts += 1
362
371
  case _graphql_lexer_actions[_acts - 1]
363
- when 3 then
372
+ when 2 then
364
373
  # line 1 "NONE"
365
374
  begin
366
375
  te = p+1
367
376
  end
368
- when 4 then
369
- # line 35 "lib/graphql/language/lexer.rl"
377
+ when 3 then
378
+ # line 39 "lib/graphql/language/lexer.rl"
370
379
  begin
371
380
  act = 1; end
372
- when 5 then
373
- # line 36 "lib/graphql/language/lexer.rl"
381
+ when 4 then
382
+ # line 40 "lib/graphql/language/lexer.rl"
374
383
  begin
375
384
  act = 2; end
376
- when 6 then
377
- # line 37 "lib/graphql/language/lexer.rl"
385
+ when 5 then
386
+ # line 41 "lib/graphql/language/lexer.rl"
378
387
  begin
379
388
  act = 3; end
380
- when 7 then
381
- # line 38 "lib/graphql/language/lexer.rl"
389
+ when 6 then
390
+ # line 42 "lib/graphql/language/lexer.rl"
382
391
  begin
383
392
  act = 4; end
384
- when 8 then
385
- # line 39 "lib/graphql/language/lexer.rl"
393
+ when 7 then
394
+ # line 43 "lib/graphql/language/lexer.rl"
386
395
  begin
387
396
  act = 5; end
388
- when 9 then
389
- # line 40 "lib/graphql/language/lexer.rl"
397
+ when 8 then
398
+ # line 44 "lib/graphql/language/lexer.rl"
390
399
  begin
391
400
  act = 6; end
401
+ when 9 then
402
+ # line 45 "lib/graphql/language/lexer.rl"
403
+ begin
404
+ act = 7; end
392
405
  when 10 then
393
- # line 48 "lib/graphql/language/lexer.rl"
406
+ # line 53 "lib/graphql/language/lexer.rl"
394
407
  begin
395
- act = 14; end
408
+ act = 15; end
396
409
  when 11 then
397
- # line 54 "lib/graphql/language/lexer.rl"
410
+ # line 59 "lib/graphql/language/lexer.rl"
398
411
  begin
399
- act = 20; end
412
+ act = 21; end
400
413
  when 12 then
401
- # line 41 "lib/graphql/language/lexer.rl"
414
+ # line 69 "lib/graphql/language/lexer.rl"
415
+ begin
416
+ act = 25; end
417
+ when 13 then
418
+ # line 46 "lib/graphql/language/lexer.rl"
402
419
  begin
403
420
  te = p+1
404
421
  begin emit_token.call(:RCURLY) end
405
422
  end
406
- when 13 then
407
- # line 42 "lib/graphql/language/lexer.rl"
423
+ when 14 then
424
+ # line 47 "lib/graphql/language/lexer.rl"
408
425
  begin
409
426
  te = p+1
410
427
  begin emit_token.call(:LCURLY) end
411
428
  end
412
- when 14 then
413
- # line 43 "lib/graphql/language/lexer.rl"
429
+ when 15 then
430
+ # line 48 "lib/graphql/language/lexer.rl"
414
431
  begin
415
432
  te = p+1
416
433
  begin emit_token.call(:RPAREN) end
417
434
  end
418
- when 15 then
419
- # line 44 "lib/graphql/language/lexer.rl"
435
+ when 16 then
436
+ # line 49 "lib/graphql/language/lexer.rl"
420
437
  begin
421
438
  te = p+1
422
439
  begin emit_token.call(:LPAREN) end
423
440
  end
424
- when 16 then
425
- # line 45 "lib/graphql/language/lexer.rl"
441
+ when 17 then
442
+ # line 50 "lib/graphql/language/lexer.rl"
426
443
  begin
427
444
  te = p+1
428
445
  begin emit_token.call(:RBRACKET) end
429
446
  end
430
- when 17 then
431
- # line 46 "lib/graphql/language/lexer.rl"
447
+ when 18 then
448
+ # line 51 "lib/graphql/language/lexer.rl"
432
449
  begin
433
450
  te = p+1
434
451
  begin emit_token.call(:LBRACKET) end
435
452
  end
436
- when 18 then
437
- # line 47 "lib/graphql/language/lexer.rl"
453
+ when 19 then
454
+ # line 52 "lib/graphql/language/lexer.rl"
438
455
  begin
439
456
  te = p+1
440
457
  begin emit_token.call(:COLON) end
441
458
  end
442
- when 19 then
443
- # line 48 "lib/graphql/language/lexer.rl"
459
+ when 20 then
460
+ # line 53 "lib/graphql/language/lexer.rl"
444
461
  begin
445
462
  te = p+1
446
463
  begin emit_string(ts + 1, te - 1, meta) end
447
464
  end
448
- when 20 then
449
- # line 49 "lib/graphql/language/lexer.rl"
465
+ when 21 then
466
+ # line 54 "lib/graphql/language/lexer.rl"
450
467
  begin
451
468
  te = p+1
452
469
  begin emit_token.call(:VAR_SIGN) end
453
470
  end
454
- when 21 then
455
- # line 50 "lib/graphql/language/lexer.rl"
471
+ when 22 then
472
+ # line 55 "lib/graphql/language/lexer.rl"
456
473
  begin
457
474
  te = p+1
458
475
  begin emit_token.call(:DIR_SIGN) end
459
476
  end
460
- when 22 then
461
- # line 51 "lib/graphql/language/lexer.rl"
477
+ when 23 then
478
+ # line 56 "lib/graphql/language/lexer.rl"
462
479
  begin
463
480
  te = p+1
464
481
  begin emit_token.call(:ELLIPSIS) end
465
482
  end
466
- when 23 then
467
- # line 52 "lib/graphql/language/lexer.rl"
483
+ when 24 then
484
+ # line 57 "lib/graphql/language/lexer.rl"
468
485
  begin
469
486
  te = p+1
470
487
  begin emit_token.call(:EQUALS) end
471
488
  end
472
- when 24 then
473
- # line 53 "lib/graphql/language/lexer.rl"
489
+ when 25 then
490
+ # line 58 "lib/graphql/language/lexer.rl"
474
491
  begin
475
492
  te = p+1
476
493
  begin emit_token.call(:BANG) end
477
494
  end
478
- when 25 then
479
- # line 56 "lib/graphql/language/lexer.rl"
495
+ when 26 then
496
+ # line 61 "lib/graphql/language/lexer.rl"
480
497
  begin
481
498
  te = p+1
482
499
  begin
@@ -484,60 +501,64 @@ te = p+1
484
501
  meta[:col] = 1
485
502
  end
486
503
  end
487
- when 26 then
488
- # line 35 "lib/graphql/language/lexer.rl"
489
- begin
490
- te = p
491
- p = p - 1; begin emit_token.call(:INT) end
492
- end
493
504
  when 27 then
494
- # line 36 "lib/graphql/language/lexer.rl"
505
+ # line 69 "lib/graphql/language/lexer.rl"
495
506
  begin
496
- te = p
497
- p = p - 1; begin emit_token.call(:FLOAT) end
507
+ te = p+1
508
+ begin emit_token.call(:UNKNOWN_CHAR) end
498
509
  end
499
510
  when 28 then
500
- # line 48 "lib/graphql/language/lexer.rl"
511
+ # line 39 "lib/graphql/language/lexer.rl"
501
512
  begin
502
513
  te = p
503
- p = p - 1; begin emit_string(ts + 1, te - 1, meta) end
514
+ p = p - 1; begin emit_token.call(:INT) end
504
515
  end
505
516
  when 29 then
506
- # line 54 "lib/graphql/language/lexer.rl"
517
+ # line 40 "lib/graphql/language/lexer.rl"
507
518
  begin
508
519
  te = p
509
- p = p - 1; begin emit_token.call(:IDENTIFIER) end
520
+ p = p - 1; begin emit_token.call(:FLOAT) end
510
521
  end
511
522
  when 30 then
512
- # line 61 "lib/graphql/language/lexer.rl"
523
+ # line 59 "lib/graphql/language/lexer.rl"
513
524
  begin
514
525
  te = p
515
- p = p - 1; begin meta[:col] += te - ts end
526
+ p = p - 1; begin emit_token.call(:IDENTIFIER) end
516
527
  end
517
528
  when 31 then
518
- # line 62 "lib/graphql/language/lexer.rl"
529
+ # line 66 "lib/graphql/language/lexer.rl"
519
530
  begin
520
531
  te = p
521
532
  p = p - 1; begin meta[:col] += te - ts end
522
533
  end
523
534
  when 32 then
524
- # line 35 "lib/graphql/language/lexer.rl"
535
+ # line 67 "lib/graphql/language/lexer.rl"
536
+ begin
537
+ te = p
538
+ p = p - 1; begin meta[:col] += te - ts end
539
+ end
540
+ when 33 then
541
+ # line 69 "lib/graphql/language/lexer.rl"
542
+ begin
543
+ te = p
544
+ p = p - 1; begin emit_token.call(:UNKNOWN_CHAR) end
545
+ end
546
+ when 34 then
547
+ # line 39 "lib/graphql/language/lexer.rl"
525
548
  begin
526
549
  begin p = ((te))-1; end
527
550
  begin emit_token.call(:INT) end
528
551
  end
529
- when 33 then
552
+ when 35 then
553
+ # line 69 "lib/graphql/language/lexer.rl"
554
+ begin
555
+ begin p = ((te))-1; end
556
+ begin emit_token.call(:UNKNOWN_CHAR) end
557
+ end
558
+ when 36 then
530
559
  # line 1 "NONE"
531
560
  begin
532
561
  case act
533
- when 0 then
534
- begin begin
535
- cs = 0
536
- _trigger_goto = true
537
- _goto_level = _again
538
- break
539
- end
540
- end
541
562
  when 1 then
542
563
  begin begin p = ((te))-1; end
543
564
  emit_token.call(:INT) end
@@ -556,15 +577,21 @@ end
556
577
  when 6 then
557
578
  begin begin p = ((te))-1; end
558
579
  emit_token.call(:FALSE) end
559
- when 14 then
580
+ when 7 then
581
+ begin begin p = ((te))-1; end
582
+ emit_token.call(:NULL) end
583
+ when 15 then
560
584
  begin begin p = ((te))-1; end
561
585
  emit_string(ts + 1, te - 1, meta) end
562
- when 20 then
586
+ when 21 then
563
587
  begin begin p = ((te))-1; end
564
588
  emit_token.call(:IDENTIFIER) end
589
+ when 25 then
590
+ begin begin p = ((te))-1; end
591
+ emit_token.call(:UNKNOWN_CHAR) end
565
592
  end
566
593
  end
567
- # line 568 "lib/graphql/language/lexer.rb"
594
+ # line 595 "lib/graphql/language/lexer.rb"
568
595
  end # action switch
569
596
  end
570
597
  end
@@ -584,21 +611,12 @@ when 0 then
584
611
  # line 1 "NONE"
585
612
  begin
586
613
  ts = nil; end
587
- when 1 then
588
- # line 1 "NONE"
589
- begin
590
- act = 0
591
- end
592
- # line 593 "lib/graphql/language/lexer.rb"
614
+ # line 615 "lib/graphql/language/lexer.rb"
593
615
  end # to state action switch
594
616
  end
595
617
  if _trigger_goto
596
618
  next
597
619
  end
598
- if cs == 0
599
- _goto_level = _out
600
- next
601
- end
602
620
  p += 1
603
621
  if p != pe
604
622
  _goto_level = _resume
@@ -620,7 +638,7 @@ end
620
638
  end
621
639
  end
622
640
 
623
- # line 105 "lib/graphql/language/lexer.rl"
641
+ # line 112 "lib/graphql/language/lexer.rl"
624
642
 
625
643
  meta[:tokens]
626
644
  end
@@ -653,14 +671,24 @@ end
653
671
 
654
672
  def self.emit_string(ts, te, meta)
655
673
  value = meta[:data][ts...te].pack("c*").force_encoding("UTF-8")
656
- replace_escaped_characters_in_place(value)
674
+ if value =~ /\\u|\\./ && value !~ ESCAPES
675
+ meta[:tokens] << GraphQL::Language::Token.new(
676
+ name: :BAD_UNICODE_ESCAPE,
677
+ value: value,
678
+ line: meta[:line],
679
+ col: meta[:col],
680
+ )
681
+ else
682
+ replace_escaped_characters_in_place(value)
683
+
684
+ meta[:tokens] << GraphQL::Language::Token.new(
685
+ name: :STRING,
686
+ value: value,
687
+ line: meta[:line],
688
+ col: meta[:col],
689
+ )
690
+ end
657
691
 
658
- meta[:tokens] << GraphQL::Language::Token.new(
659
- name: :STRING,
660
- value: value,
661
- line: meta[:line],
662
- col: meta[:col],
663
- )
664
692
  meta[:col] += te - ts
665
693
  end
666
694
  end