graphql 0.13.0 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
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